diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 30460b9bb..d11abe7c5 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -31,8 +31,8 @@ public class Compiler { /** Enable the zero-page coalesce pass. It takes a lot of time, but limits the zero page usage significantly. */ private boolean enableZeroPageCoalasce = false; - /** Enable loop head constant optimization. It identified whenever a while()/for() has a constant condition on the first iteration and rewrites it. */ - private boolean enableLoopHeadConstant = false; + /** Disable loop head constant optimization. It identified whenever a while()/for() has a constant condition on the first iteration and rewrites it. */ + private boolean disableLoopHeadConstant = true; public Compiler() { this.program = new Program(); @@ -46,8 +46,8 @@ public class Compiler { this.enableZeroPageCoalasce = true; } - void enableLoopHeadConstant() { - this.enableLoopHeadConstant = true; + void disableLoopHeadConstant() { + this.disableLoopHeadConstant = false; } void setTargetPlatform(TargetPlatform targetPlatform) { @@ -312,7 +312,7 @@ public class Compiler { optimizations.add(new PassNSimplifyExpressionWithZero(program)); optimizations.add(new PassNEliminateUnusedVars(program, true)); optimizations.add(new Pass2EliminateUnusedBlocks(program)); - if(enableLoopHeadConstant) { + if(!disableLoopHeadConstant) { optimizations.add(new PassNStatementIndices(program)); optimizations.add(() -> { program.clearDominators(); return false; }); optimizations.add(() -> { program.clearLoopSet(); return false; }); diff --git a/src/main/java/dk/camelot64/kickc/KickC.java b/src/main/java/dk/camelot64/kickc/KickC.java index 78c7da32b..b3a923d05 100644 --- a/src/main/java/dk/camelot64/kickc/KickC.java +++ b/src/main/java/dk/camelot64/kickc/KickC.java @@ -66,8 +66,8 @@ public class KickC implements Callable { @CommandLine.Option(names = {"-Ocoalesce"}, description = "Optimization Option. Enables zero-page coalesce pass which limits zero-page usage significantly, but takes a lot of compile time.") private boolean optimizeZeroPageCoalesce = false; - @CommandLine.Option(names = {"-Oloophead"}, description = "Optimization Option. Enables loop-head constant pass which identifies loops where the condition is constant on the first iteration.") - private boolean optimizeLoopHeadConstant = false; + @CommandLine.Option(names = {"-Onoloophead"}, description = "Optimization Option. Disables loop-head constant pass which identifies loops where the condition is constant on the first iteration.") + private boolean optimizeNoLoopHeadConstant = false; @CommandLine.Option(names = {"-Ocache"}, description = "Optimization Option. Enables a fragment cache file.") private boolean optimizeFragmentCache = false; @@ -215,8 +215,8 @@ public class KickC implements Callable { compiler.enableZeroPageCoalasce(); } - if(optimizeLoopHeadConstant) { - compiler.enableLoopHeadConstant(); + if(optimizeNoLoopHeadConstant) { + compiler.disableLoopHeadConstant(); } System.out.println("Compiling " + kcFile); diff --git a/src/test/ref/bitmap-plot-1.asm b/src/test/ref/bitmap-plot-1.asm index 859cf771c..3a1315643 100644 --- a/src/test/ref/bitmap-plot-1.asm +++ b/src/test/ref/bitmap-plot-1.asm @@ -523,17 +523,6 @@ sin16s_gen2: { sta x+3 sta i sta i+1 - // u[4.28] - b1: - lda i+1 - cmp #>wavelength - bcc b2 - bne !+ - lda i - cmp #wavelength + bcc b2 + bne !+ + lda i + cmp # (signed dword~) sin16s_gen2::$6 - [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 - [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 - [146] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 + [139] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + [140] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 + [141] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 + [142] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD + [143] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 + [144] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 to:sin16s_gen2::@1 +sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@5 + [145] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 + to:sin16s_gen2::@return +sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 + [146] return + to:@return sin16s: scope:[sin16s] from sin16s_gen2::@2 [147] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 to:sin16s::@4 diff --git a/src/test/ref/bitmap-plot-1.log b/src/test/ref/bitmap-plot-1.log index 76e422c9f..1211b91f6 100644 --- a/src/test/ref/bitmap-plot-1.log +++ b/src/test/ref/bitmap-plot-1.log @@ -2648,6 +2648,7 @@ Eliminating unused constant (const byte*) bitmap_gfx#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $10 in if((byte) divr16u::i#1!=(number) $10) goto divr16u::@1 Adding number conversion cast (unumber) 0 in if((byte) bitmap_init::x#1!=(number) 0) goto bitmap_init::@1 Adding number conversion cast (unumber) 0 in if((byte) bitmap_init::y#1!=(number) 0) goto bitmap_init::@5 @@ -2664,16 +2665,26 @@ Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (word) sin16s_gen2::i#1 = (word) sin16s_gen2::i#2 +Alias (dword) sin16s_gen2::x#1 = (dword) sin16s_gen2::x#2 +Alias (signed word*) sin16s_gen2::sintab#0 = (signed word*) sin16s_gen2::sintab#2 +Alias (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#7 (word) sin16s_gen2::i#8 +Alias (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#8 (dword) sin16s_gen2::x#7 +Alias (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#9 (signed word*) sin16s_gen2::sintab#8 Alias (byte~) bitmap_init::$7 = (byte~) bitmap_init::$3 Alias (byte) bitmap_clear::col#0 = (byte~) bitmap_clear::$0 Alias (word) main::x#0 = (word~) main::$11 Alias (word) main::y#0 = (word~) main::$16 Successful SSA optimization Pass2AliasElimination +Identical Phi Values (word) sin16s_gen2::i#9 (const word) sin16s_gen2::i#0 +Identical Phi Values (dword) sin16s_gen2::x#9 (const dword) sin16s_gen2::x#0 +Identical Phi Values (signed word*) sin16s_gen2::sintab#11 (const signed word*) sin16s_gen2::sintab#1 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [18] (word) divr16u::dividend#1 ← > (const dword) div32u16u::dividend#0 Constant right-side identified [22] (word) divr16u::dividend#2 ← < (const dword) div32u16u::dividend#0 Constant right-side identified [59] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 -Constant right-side identified [164] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10 -Constant right-side identified [182] (byte~) main::$3 ← (const byte) VIC_BMM#0 | (const byte) VIC_DEN#0 +Constant right-side identified [168] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10 +Constant right-side identified [186] (byte~) main::$3 ← (const byte) VIC_BMM#0 | (const byte) VIC_DEN#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = > (signed byte) 1 Constant right-side identified [172] (byte~) main::$4 ← (const byte) main::$3 | (const byte) VIC_RSEL#0 Constant right-side identified [175] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff @@ -2842,6 +2855,7 @@ Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u: Added new block during phi lifting mul16u::@10(between mul16u::@2 and mul16u::@4) Added new block during phi lifting mul16s::@7(between mul16s::@6 and mul16s::@1) Added new block during phi lifting mul16s::@8(between mul16s::@1 and mul16s::@2) +Added new block during phi lifting sin16s_gen2::@10(between sin16s_gen2::@1 and sin16s_gen2::@2) Added new block during phi lifting sin16s::@13(between sin16s and sin16s::@1) Fixing phi predecessor for sin16s::isUpper#2 to new block ( sin16s -> sin16s::@13 ) during phi lifting. Added new block during phi lifting sin16s::@14(between sin16s::@1 and sin16s::@2) @@ -2878,16 +2892,17 @@ Adding NOP phi() at start of bitmap_init Adding NOP phi() at start of bitmap_init::@3 Adding NOP phi() at start of bitmap_init::@4 Adding NOP phi() at start of sin16s_gen2 +Adding NOP phi() at start of sin16s_gen2::@1_1 Adding NOP phi() at start of div32u16u CALL GRAPH Calls in [] to main:7 Calls in [main] to sin16s_gen2:11 bitmap_init:13 bitmap_clear:15 init_irq:20 mul16s:28 mul16s:39 bitmap_plot:47 Calls in [mul16s] to mul16u:72 Calls in [bitmap_clear] to memset:120 memset:122 -Calls in [sin16s_gen2] to div32u16u:167 sin16s:174 mul16s:178 -Calls in [sin16s] to mulu16_sel:203 mulu16_sel:210 mulu16_sel:215 mulu16_sel:223 mulu16_sel:230 -Calls in [mulu16_sel] to mul16u:248 -Calls in [div32u16u] to divr16u:255 divr16u:260 +Calls in [sin16s_gen2] to div32u16u:167 sin16s:173 mul16s:177 +Calls in [sin16s] to mulu16_sel:204 mulu16_sel:211 mulu16_sel:216 mulu16_sel:224 mulu16_sel:231 +Calls in [mulu16_sel] to mul16u:249 +Calls in [div32u16u] to divr16u:256 divr16u:261 Created 44 initial phi equivalence classes Coalesced [27] mul16s::b#8 ← mul16s::b#1 @@ -2917,41 +2932,41 @@ Coalesced (already) [162] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 Coalesced [163] bitmap_init::bits#5 ← bitmap_init::bits#4 Coalesced [164] bitmap_init::x#5 ← bitmap_init::x#1 Coalesced [165] bitmap_init::bits#6 ← bitmap_init::bits#1 -Coalesced [177] mul16s::a#8 ← mul16s::a#0 -Coalesced [186] sin16s_gen2::i#6 ← sin16s_gen2::i#1 -Coalesced [187] sin16s_gen2::x#6 ← sin16s_gen2::x#1 -Coalesced [188] sin16s_gen2::sintab#8 ← sin16s_gen2::sintab#0 -Coalesced [191] sin16s::x#9 ← sin16s::x#1 -Coalesced [195] sin16s::x#11 ← sin16s::x#2 -Coalesced [201] mulu16_sel::v1#8 ← mulu16_sel::v1#0 -Coalesced [202] mulu16_sel::v2#8 ← mulu16_sel::v2#0 -Coalesced [208] mulu16_sel::v1#9 ← mulu16_sel::v1#1 -Coalesced [209] mulu16_sel::v2#9 ← mulu16_sel::v2#1 -Coalesced [214] mulu16_sel::v1#10 ← mulu16_sel::v1#2 -Coalesced [221] mulu16_sel::v1#6 ← mulu16_sel::v1#3 -Coalesced [222] mulu16_sel::v2#6 ← mulu16_sel::v2#3 -Coalesced [228] mulu16_sel::v1#7 ← mulu16_sel::v1#4 -Coalesced [229] mulu16_sel::v2#7 ← mulu16_sel::v2#4 -Coalesced [237] sin16s::return#6 ← sin16s::sinx#1 -Coalesced [241] sin16s::x#10 ← sin16s::x#4 -Coalesced [242] sin16s::x#8 ← sin16s::x#0 -Coalesced [246] mul16u::mb#7 ← mul16u::b#1 -Coalesced [247] mul16u::a#9 ← mul16u::a#2 -Coalesced [259] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [266] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [267] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [274] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [281] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [282] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [288] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [289] divr16u::dividend#10 ← divr16u::dividend#0 -Coalesced [290] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [291] divr16u::i#7 ← divr16u::i#1 -Coalesced [292] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [293] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [294] divr16u::rem#15 ← divr16u::rem#0 -Coalesced [298] frame_cnt#26 ← frame_cnt#1 -Coalesced [303] frame_cnt#25 ← frame_cnt#0 +Coalesced [176] mul16s::a#8 ← mul16s::a#0 +Coalesced [187] sin16s_gen2::i#10 ← sin16s_gen2::i#1 +Coalesced [188] sin16s_gen2::x#10 ← sin16s_gen2::x#1 +Coalesced [189] sin16s_gen2::sintab#12 ← sin16s_gen2::sintab#0 +Coalesced [192] sin16s::x#9 ← sin16s::x#1 +Coalesced [196] sin16s::x#11 ← sin16s::x#2 +Coalesced [202] mulu16_sel::v1#8 ← mulu16_sel::v1#0 +Coalesced [203] mulu16_sel::v2#8 ← mulu16_sel::v2#0 +Coalesced [209] mulu16_sel::v1#9 ← mulu16_sel::v1#1 +Coalesced [210] mulu16_sel::v2#9 ← mulu16_sel::v2#1 +Coalesced [215] mulu16_sel::v1#10 ← mulu16_sel::v1#2 +Coalesced [222] mulu16_sel::v1#6 ← mulu16_sel::v1#3 +Coalesced [223] mulu16_sel::v2#6 ← mulu16_sel::v2#3 +Coalesced [229] mulu16_sel::v1#7 ← mulu16_sel::v1#4 +Coalesced [230] mulu16_sel::v2#7 ← mulu16_sel::v2#4 +Coalesced [238] sin16s::return#6 ← sin16s::sinx#1 +Coalesced [242] sin16s::x#10 ← sin16s::x#4 +Coalesced [243] sin16s::x#8 ← sin16s::x#0 +Coalesced [247] mul16u::mb#7 ← mul16u::b#1 +Coalesced [248] mul16u::a#9 ← mul16u::a#2 +Coalesced [260] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [267] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [268] divr16u::dividend#9 ← divr16u::dividend#5 +Coalesced [275] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [282] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [283] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [289] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [290] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [291] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [292] divr16u::i#7 ← divr16u::i#1 +Coalesced [293] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [294] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [295] divr16u::rem#15 ← divr16u::rem#0 +Coalesced [299] frame_cnt#26 ← frame_cnt#1 +Coalesced [304] frame_cnt#25 ← frame_cnt#0 Coalesced down to 30 phi equivalence classes Culled Empty Block (label) @6 Culled Empty Block (label) @17 @@ -2973,6 +2988,8 @@ Culled Empty Block (label) bitmap_init::@4 Culled Empty Block (label) bitmap_init::@11 Culled Empty Block (label) bitmap_init::@12 Culled Empty Block (label) bitmap_init::@9 +Culled Empty Block (label) sin16s_gen2::@1_1 +Culled Empty Block (label) sin16s_gen2::@10 Culled Empty Block (label) sin16s::@14 Culled Empty Block (label) sin16s::@13 Culled Empty Block (label) divr16u::@8 @@ -3278,34 +3295,34 @@ sin16s_gen2: scope:[sin16s_gen2] from main to:sin16s_gen2::@3 sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2 [131] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 - to:sin16s_gen2::@1 -sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5 - [132] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word[$200]) SINUS#0 sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) - [132] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) - [132] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) - [133] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 - to:sin16s_gen2::@return -sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 - [134] return - to:@return -sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 - [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 - [136] call sin16s - [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + to:sin16s_gen2::@2 +sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 sin16s_gen2::@3 + [132] (signed word*) sin16s_gen2::sintab#10 ← phi( sin16s_gen2::@1/(signed word*) sin16s_gen2::sintab#0 sin16s_gen2::@3/(const signed word[$200]) SINUS#0 ) + [132] (dword) sin16s_gen2::x#6 ← phi( sin16s_gen2::@1/(dword) sin16s_gen2::x#1 sin16s_gen2::@3/(byte) 0 ) + [132] (word) sin16s_gen2::i#6 ← phi( sin16s_gen2::@1/(word) sin16s_gen2::i#1 sin16s_gen2::@3/(byte) 0 ) + [133] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 + [134] call sin16s + [135] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen2::@4 sin16s_gen2::@4: scope:[sin16s_gen2] from sin16s_gen2::@2 - [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - [139] call mul16s - [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + [136] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + [137] call mul16s + [138] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 to:sin16s_gen2::@5 sin16s_gen2::@5: scope:[sin16s_gen2] from sin16s_gen2::@4 - [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 - [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 - [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 - [146] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 + [139] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + [140] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 + [141] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 + [142] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD + [143] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 + [144] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 to:sin16s_gen2::@1 +sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@5 + [145] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 + to:sin16s_gen2::@return +sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 + [146] return + to:@return sin16s: scope:[sin16s] from sin16s_gen2::@2 [147] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 to:sin16s::@4 @@ -3744,20 +3761,20 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (word~) sin16s_gen2::$9 11.0 (signed word) sin16s_gen2::ampl (word) sin16s_gen2::i -(word) sin16s_gen2::i#1 22.0 -(word) sin16s_gen2::i#2 2.5384615384615383 +(word) sin16s_gen2::i#1 16.5 +(word) sin16s_gen2::i#6 1.8333333333333333 (signed word) sin16s_gen2::max (signed word) sin16s_gen2::min (signed word) sin16s_gen2::offs (signed word*) sin16s_gen2::sintab -(signed word*) sin16s_gen2::sintab#0 7.333333333333333 -(signed word*) sin16s_gen2::sintab#2 3.0 +(signed word*) sin16s_gen2::sintab#0 5.5 +(signed word*) sin16s_gen2::sintab#10 3.3000000000000003 (dword) sin16s_gen2::step (dword) sin16s_gen2::step#0 0.8666666666666666 (word) sin16s_gen2::wavelength (dword) sin16s_gen2::x -(dword) sin16s_gen2::x#1 11.0 -(dword) sin16s_gen2::x#2 2.75 +(dword) sin16s_gen2::x#1 7.333333333333333 +(dword) sin16s_gen2::x#6 3.0 Not consolidating phi with different size mul16u::mb#0 mul16u::b#0 Not consolidating phi with different size mul16u::mb#0 mul16u::b#1 @@ -3780,9 +3797,9 @@ Initial phi equivalence classes [ bitmap_init::x#2 bitmap_init::x#1 ] [ bitmap_init::y#2 bitmap_init::y#1 ] [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] -[ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -[ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -[ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +[ sin16s_gen2::i#6 sin16s_gen2::i#1 ] +[ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +[ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] [ sin16s::isUpper#2 ] [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -3880,9 +3897,9 @@ Complete equivalence classes [ bitmap_init::x#2 bitmap_init::x#1 ] [ bitmap_init::y#2 bitmap_init::y#1 ] [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] -[ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -[ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -[ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +[ sin16s_gen2::i#6 sin16s_gen2::i#1 ] +[ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +[ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] [ sin16s::isUpper#2 ] [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -3979,9 +3996,9 @@ Allocated zp ZP_BYTE:35 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::b Allocated zp ZP_BYTE:36 [ bitmap_init::x#2 bitmap_init::x#1 ] Allocated zp ZP_BYTE:37 [ bitmap_init::y#2 bitmap_init::y#1 ] Allocated zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] -Allocated zp ZP_WORD:40 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -Allocated zp ZP_DWORD:42 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -Allocated zp ZP_WORD:46 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +Allocated zp ZP_WORD:40 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] +Allocated zp ZP_DWORD:42 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +Allocated zp ZP_WORD:46 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] Allocated zp ZP_BYTE:48 [ sin16s::isUpper#2 ] Allocated zp ZP_DWORD:49 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] Allocated zp ZP_WORD:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -5090,46 +5107,35 @@ sin16s_gen2: { sta step+2 lda div32u16u.return_2+3 sta step+3 - // [132] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] - b1_from_b3: - // [132] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[$200]) SINUS#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [132] phi from sin16s_gen2::@3 to sin16s_gen2::@2 [phi:sin16s_gen2::@3->sin16s_gen2::@2] + b2_from_b3: + // [132] phi (signed word*) sin16s_gen2::sintab#10 = (const signed word[$200]) SINUS#0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#0] -- pwsz1=pwsc1 lda #SINUS sta sintab+1 - // [132] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 + // [132] phi (dword) sin16s_gen2::x#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [132] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [132] phi (word) sin16s_gen2::i#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen2::@1 - b1: - // [133] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen2::@2] + b2_from_b1: + // [132] phi (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@1->sin16s_gen2::@2#0] -- register_copy + // [132] phi (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#1] -- register_copy + // [132] phi (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#2] -- register_copy + jmp b2 // sin16s_gen2::@2 b2: - // [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [133] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -5138,9 +5144,9 @@ sin16s_gen2: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [136] call sin16s + // [134] call sin16s jsr sin16s - // [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 + // [135] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 lda sin16s.return_1 sta sin16s.return lda sin16s.return_1+1 @@ -5148,12 +5154,12 @@ sin16s_gen2: { jmp b4 // sin16s_gen2::@4 b4: - // [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 + // [136] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 lda sin16s.return sta mul16s.a lda sin16s.return+1 sta mul16s.a+1 - // [139] call mul16s + // [137] call mul16s // [54] phi from sin16s_gen2::@4 to mul16s [phi:sin16s_gen2::@4->mul16s] mul16s_from_b4: // [54] phi (signed word) mul16s::b#3 = (const signed word) sin16s_gen2::ampl#0 [phi:sin16s_gen2::@4->mul16s#0] -- vwsz1=vwsc1 @@ -5163,7 +5169,7 @@ sin16s_gen2: { sta mul16s.b+1 // [54] phi (signed word) mul16s::a#3 = (signed word) mul16s::a#0 [phi:sin16s_gen2::@4->mul16s#1] -- register_copy jsr mul16s - // [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 + // [138] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 lda mul16s.return sta mul16s.return_2 lda mul16s.return+1 @@ -5175,7 +5181,7 @@ sin16s_gen2: { jmp b5 // sin16s_gen2::@5 b5: - // [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 + // [139] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 lda mul16s.return_2 sta _6 lda mul16s.return_2+1 @@ -5184,19 +5190,19 @@ sin16s_gen2: { sta _6+2 lda mul16s.return_2+3 sta _6+3 - // [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [140] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda _6+2 sta _9 lda _6+3 sta _9+1 - // [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [141] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda _9 sta (sintab),y iny lda _9+1 sta (sintab),y - // [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [142] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -5204,7 +5210,7 @@ sin16s_gen2: { bcc !+ inc sintab+1 !: - // [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [143] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -5218,17 +5224,29 @@ sin16s_gen2: { lda x+3 adc step+3 sta x+3 - // [146] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 + // [144] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [132] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] - b1_from_b5: - // [132] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [132] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [132] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen2::@1 + b1: + // [145] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [61] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a -Statement [62] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a -Statement [63] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a -Statement [65] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a -Statement [66] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a -Statement [67] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::m#5 mul16s::$17 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a -Statement [68] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::m#2 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#2 ] ) always clobbers reg byte a -Statement [70] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::return#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [74] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:30::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:139::mul16u:57 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [55] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a +Statement [56] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [58] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a +Statement [59] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [60] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [61] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a +Statement [62] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a +Statement [63] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a +Statement [65] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a +Statement [66] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a +Statement [67] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::m#5 mul16s::$17 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a +Statement [68] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::m#2 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#2 ] ) always clobbers reg byte a +Statement [70] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::return#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#0 ] ) always clobbers reg byte a +Statement [74] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:30::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:137::mul16u:57 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:48 [ sin16s::isUpper#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:59 [ mulu16_sel::select#5 ] -Statement [76] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:139::mul16u:57 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [78] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:139::mul16u:57 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [76] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:137::mul16u:57 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [78] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:137::mul16u:57 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a Statement [83] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:3::init_irq:14 [ frame_cnt#0 ] ) always clobbers reg byte a Statement [84] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:3::init_irq:14 [ frame_cnt#0 ] ) always clobbers reg byte a Statement [85] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:3::init_irq:14 [ frame_cnt#0 ] ) always clobbers reg byte a @@ -6006,53 +6024,53 @@ Statement [123] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 [ bitmap_init::y#2 bitmap_init::y#1 ] Statement [130] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 div32u16u::return#2 ] ) always clobbers reg byte a Statement [131] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 ] ) always clobbers reg byte a -Statement [133] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a -Statement [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a -Statement [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a -Statement [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [147] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [148] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [150] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [151] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [153] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [133] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [135] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ) always clobbers reg byte a +Statement [136] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ) always clobbers reg byte a +Statement [138] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ) always clobbers reg byte a +Statement [139] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ) always clobbers reg byte a +Statement [140] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ) always clobbers reg byte a +Statement [141] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ) always clobbers reg byte a reg byte y +Statement [142] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [143] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [145] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [147] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [148] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#1 ] ) always clobbers reg byte a +Statement [150] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [151] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [153] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:48 [ sin16s::isUpper#2 ] -Statement [154] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [155] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [156] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [158] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [159] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [160] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [161] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [163] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [164] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [165] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [167] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [168] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [169] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [170] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [171] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [173] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [174] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [175] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [176] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [178] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [179] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [180] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [181] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [183] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [186] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [188] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [189] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [191] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [192] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [193] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [194] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [154] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [155] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [156] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [158] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [159] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [160] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [161] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [163] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [164] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [165] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [167] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [168] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [169] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [170] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [171] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [173] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [174] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [175] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [176] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [178] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [179] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [180] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [181] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [183] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [186] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#5 ] ) always clobbers reg byte a +Statement [188] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [189] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [191] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [192] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [193] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [194] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a Statement [198] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt#0 divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [199] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt#0 div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [200] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt#0 div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a @@ -6099,22 +6117,22 @@ Statement [49] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word) $fff Statement [50] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:3::bitmap_plot:38 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) always clobbers reg byte a Statement [51] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:3::bitmap_plot:38 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a Statement [52] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:3::bitmap_plot:38 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 ] ) always clobbers reg byte a reg byte y -Statement [55] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a -Statement [56] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a -Statement [58] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a -Statement [59] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [60] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [61] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a -Statement [62] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a -Statement [63] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a -Statement [65] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a -Statement [66] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a -Statement [67] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::m#5 mul16s::$17 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a -Statement [68] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::m#2 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#2 ] ) always clobbers reg byte a -Statement [70] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::return#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [74] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:30::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:139::mul16u:57 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [76] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:139::mul16u:57 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [78] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:139::mul16u:57 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [55] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a +Statement [56] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [58] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a +Statement [59] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [60] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [61] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a +Statement [62] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a +Statement [63] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a +Statement [65] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a +Statement [66] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a +Statement [67] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::m#5 mul16s::$17 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a +Statement [68] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::m#2 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#2 ] ) always clobbers reg byte a +Statement [70] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:20 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::return#0 ] main:3::mul16s:30 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:137 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#0 ] ) always clobbers reg byte a +Statement [74] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:30::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:137::mul16u:57 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [76] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:137::mul16u:57 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [78] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:137::mul16u:57 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177::mul16u:190 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a Statement [83] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:3::init_irq:14 [ frame_cnt#0 ] ) always clobbers reg byte a Statement [84] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:3::init_irq:14 [ frame_cnt#0 ] ) always clobbers reg byte a Statement [85] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:3::init_irq:14 [ frame_cnt#0 ] ) always clobbers reg byte a @@ -6131,52 +6149,52 @@ Statement [116] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 [ Statement [123] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:8 [ frame_cnt#0 bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a Statement [130] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 div32u16u::return#2 ] ) always clobbers reg byte a Statement [131] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 ] ) always clobbers reg byte a -Statement [133] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a -Statement [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a -Statement [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a -Statement [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [147] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [148] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [150] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [151] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [153] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y -Statement [154] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [155] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [156] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [158] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [159] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [160] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [161] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [163] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [164] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [165] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [167] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [168] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [169] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [170] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [171] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [173] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [174] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [175] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [176] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [178] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [179] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [180] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [181] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [183] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [186] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [188] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [189] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [191] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [192] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [193] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [194] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [133] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [135] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ) always clobbers reg byte a +Statement [136] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ) always clobbers reg byte a +Statement [138] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ) always clobbers reg byte a +Statement [139] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ) always clobbers reg byte a +Statement [140] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ) always clobbers reg byte a +Statement [141] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ) always clobbers reg byte a reg byte y +Statement [142] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [143] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [145] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [147] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [148] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#1 ] ) always clobbers reg byte a +Statement [150] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [151] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [153] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [154] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [155] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [156] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [158] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [159] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [160] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [161] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [163] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [164] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [165] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [167] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [168] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [169] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [170] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [171] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [173] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [174] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [175] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [176] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [178] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [179] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [180] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [181] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [183] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [186] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:134 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#5 ] ) always clobbers reg byte a +Statement [188] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [189] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [191] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [192] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [193] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [194] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:157 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:162 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:172 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:134::mulu16_sel:177 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a Statement [198] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt#0 divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [199] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt#0 div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [200] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt#0 div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a @@ -6211,9 +6229,9 @@ Potential registers zp ZP_BYTE:35 [ bitmap_init::bits#3 bitmap_init::bits#4 bitm Potential registers zp ZP_BYTE:36 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp ZP_BYTE:36 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:37 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp ZP_BYTE:37 , reg byte x , reg byte y , Potential registers zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp ZP_WORD:38 , -Potential registers zp ZP_WORD:40 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] : zp ZP_WORD:40 , -Potential registers zp ZP_DWORD:42 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] : zp ZP_DWORD:42 , -Potential registers zp ZP_WORD:46 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] : zp ZP_WORD:46 , +Potential registers zp ZP_WORD:40 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] : zp ZP_WORD:40 , +Potential registers zp ZP_DWORD:42 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] : zp ZP_DWORD:42 , +Potential registers zp ZP_WORD:46 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] : zp ZP_WORD:46 , Potential registers zp ZP_BYTE:48 [ sin16s::isUpper#2 ] : zp ZP_BYTE:48 , reg byte x , Potential registers zp ZP_DWORD:49 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp ZP_DWORD:49 , Potential registers zp ZP_WORD:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp ZP_WORD:53 , @@ -6300,8 +6318,8 @@ Uplift Scope [divr16u] 106.92: zp ZP_WORD:60 [ divr16u::rem#5 divr16u::rem#10 di Uplift Scope [bitmap_init] 39.88: zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp ZP_BYTE:35 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22: zp ZP_BYTE:36 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp ZP_BYTE:37 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp ZP_BYTE:142 [ bitmap_init::$4 ] 22: zp ZP_BYTE:143 [ bitmap_init::$5 ] 22: zp ZP_BYTE:144 [ bitmap_init::$6 ] 5.5: zp ZP_BYTE:141 [ bitmap_init::$7 ] Uplift Scope [mul16s] 46.18: zp ZP_WORD:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] 23: zp ZP_WORD:6 [ mul16s::a#3 mul16s::a#0 ] 22: zp ZP_DWORD:74 [ mul16s::return#3 ] 22: zp ZP_DWORD:96 [ mul16s::return#4 ] 22: zp ZP_DWORD:155 [ mul16s::return#2 ] 16.5: zp ZP_DWORD:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] 7: zp ZP_DWORD:134 [ mul16s::return#0 ] 4: zp ZP_WORD:126 [ mul16s::$9 ] 4: zp ZP_WORD:128 [ mul16s::$16 ] 4: zp ZP_WORD:130 [ mul16s::$13 ] 4: zp ZP_WORD:132 [ mul16s::$17 ] Uplift Scope [sin16s] 27.5: zp ZP_DWORD:49 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp ZP_WORD:153 [ sin16s::return#0 ] 13: zp ZP_WORD:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp ZP_DWORD:165 [ sin16s::$4 ] 4: zp ZP_WORD:173 [ sin16s::x2#0 ] 4: zp ZP_WORD:181 [ sin16s::x3_6#0 ] 4: zp ZP_WORD:187 [ sin16s::x4#0 ] 4: zp ZP_WORD:191 [ sin16s::x5#0 ] 4: zp ZP_WORD:193 [ sin16s::x5_128#0 ] 1: zp ZP_WORD:177 [ sin16s::x3#0 ] 1: zp ZP_WORD:195 [ sin16s::usinx#1 ] 0.64: zp ZP_WORD:169 [ sin16s::x1#0 ] 0.33: zp ZP_WORD:183 [ sin16s::usinx#0 ] 0.06: zp ZP_BYTE:48 [ sin16s::isUpper#2 ] -Uplift Scope [sin16s_gen2] 24.54: zp ZP_WORD:40 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] 22: zp ZP_DWORD:159 [ sin16s_gen2::$6 ] 13.75: zp ZP_DWORD:42 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] 11: zp ZP_WORD:163 [ sin16s_gen2::$9 ] 10.33: zp ZP_WORD:46 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] 0.87: zp ZP_DWORD:149 [ sin16s_gen2::step#0 ] Uplift Scope [mulu16_sel] 24: zp ZP_WORD:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp ZP_WORD:57 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp ZP_WORD:171 [ mulu16_sel::return#0 ] 4: zp ZP_WORD:175 [ mulu16_sel::return#1 ] 4: zp ZP_WORD:179 [ mulu16_sel::return#2 ] 4: zp ZP_WORD:185 [ mulu16_sel::return#10 ] 4: zp ZP_WORD:189 [ mulu16_sel::return#11 ] 4: zp ZP_DWORD:201 [ mulu16_sel::$0 ] 4: zp ZP_DWORD:205 [ mulu16_sel::$1 ] 1.71: zp ZP_WORD:209 [ mulu16_sel::return#12 ] 0.33: zp ZP_BYTE:59 [ mulu16_sel::select#5 ] +Uplift Scope [sin16s_gen2] 22: zp ZP_DWORD:159 [ sin16s_gen2::$6 ] 18.33: zp ZP_WORD:40 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] 11: zp ZP_WORD:163 [ sin16s_gen2::$9 ] 10.33: zp ZP_DWORD:42 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] 8.8: zp ZP_WORD:46 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] 0.87: zp ZP_DWORD:149 [ sin16s_gen2::step#0 ] Uplift Scope [memset] 41.33: zp ZP_WORD:33 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp ZP_WORD:139 [ memset::end#0 ] 2: zp ZP_WORD:28 [ memset::num#2 ] 1.38: zp ZP_BYTE:32 [ memset::c#4 ] 0: zp ZP_WORD:30 [ memset::str#3 ] Uplift Scope [] 44.64: zp ZP_BYTE:67 [ frame_cnt#10 frame_cnt#0 frame_cnt#1 ] 0.8: zp ZP_WORD:225 [ rem16u#1 ] Uplift Scope [bitmap_plot] 7.5: zp ZP_BYTE:112 [ bitmap_plot::y#0 ] 4: zp ZP_WORD:117 [ bitmap_plot::$1 ] 4: zp ZP_BYTE:121 [ bitmap_plot::$2 ] 3.75: zp ZP_WORD:113 [ bitmap_plot::x#0 ] 3: zp ZP_WORD:119 [ bitmap_plot::plotter#1 ] 1: zp ZP_WORD:115 [ bitmap_plot::plotter#0 ] @@ -6310,32 +6328,32 @@ Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] -Uplifting [mul16u] best 27199 combination zp ZP_DWORD:20 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:24 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:18 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:14 [ mul16u::b#0 ] zp ZP_WORD:16 [ mul16u::b#1 ] zp ZP_DWORD:122 [ mul16u::return#2 ] zp ZP_DWORD:197 [ mul16u::return#3 ] -Uplifting [main] best 26959 combination zp ZP_WORD:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp ZP_WORD:68 [ main::$24 ] zp ZP_WORD:70 [ main::$26 ] zp ZP_WORD:72 [ main::cos_x#0 ] zp ZP_DWORD:78 [ main::xpos#0 ] zp ZP_DWORD:82 [ main::$9 ] reg byte alu [ main::$10 ] zp ZP_WORD:90 [ main::$25 ] zp ZP_WORD:92 [ main::$27 ] zp ZP_WORD:94 [ main::sin_y#0 ] zp ZP_DWORD:100 [ main::ypos#0 ] zp ZP_DWORD:104 [ main::$14 ] reg byte alu [ main::$15 ] zp ZP_WORD:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] zp ZP_WORD:110 [ main::y#0 ] zp ZP_WORD:88 [ main::x#0 ] -Uplifting [divr16u] best 26749 combination zp ZP_WORD:60 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:211 [ divr16u::return#2 ] zp ZP_WORD:215 [ divr16u::return#3 ] -Uplifting [bitmap_init] best 26239 combination zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:143 [ bitmap_init::$5 ] zp ZP_BYTE:144 [ bitmap_init::$6 ] zp ZP_BYTE:141 [ bitmap_init::$7 ] +Uplifting [mul16u] best 27229 combination zp ZP_DWORD:20 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:24 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:18 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:14 [ mul16u::b#0 ] zp ZP_WORD:16 [ mul16u::b#1 ] zp ZP_DWORD:122 [ mul16u::return#2 ] zp ZP_DWORD:197 [ mul16u::return#3 ] +Uplifting [main] best 26989 combination zp ZP_WORD:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp ZP_WORD:68 [ main::$24 ] zp ZP_WORD:70 [ main::$26 ] zp ZP_WORD:72 [ main::cos_x#0 ] zp ZP_DWORD:78 [ main::xpos#0 ] zp ZP_DWORD:82 [ main::$9 ] reg byte alu [ main::$10 ] zp ZP_WORD:90 [ main::$25 ] zp ZP_WORD:92 [ main::$27 ] zp ZP_WORD:94 [ main::sin_y#0 ] zp ZP_DWORD:100 [ main::ypos#0 ] zp ZP_DWORD:104 [ main::$14 ] reg byte alu [ main::$15 ] zp ZP_WORD:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] zp ZP_WORD:110 [ main::y#0 ] zp ZP_WORD:88 [ main::x#0 ] +Uplifting [divr16u] best 26779 combination zp ZP_WORD:60 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:211 [ divr16u::return#2 ] zp ZP_WORD:215 [ divr16u::return#3 ] +Uplifting [bitmap_init] best 26269 combination zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:143 [ bitmap_init::$5 ] zp ZP_BYTE:144 [ bitmap_init::$6 ] zp ZP_BYTE:141 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. -Uplifting [mul16s] best 26239 combination zp ZP_WORD:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] zp ZP_WORD:6 [ mul16s::a#3 mul16s::a#0 ] zp ZP_DWORD:74 [ mul16s::return#3 ] zp ZP_DWORD:96 [ mul16s::return#4 ] zp ZP_DWORD:155 [ mul16s::return#2 ] zp ZP_DWORD:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp ZP_DWORD:134 [ mul16s::return#0 ] zp ZP_WORD:126 [ mul16s::$9 ] zp ZP_WORD:128 [ mul16s::$16 ] zp ZP_WORD:130 [ mul16s::$13 ] zp ZP_WORD:132 [ mul16s::$17 ] -Uplifting [sin16s] best 26239 combination zp ZP_DWORD:49 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:153 [ sin16s::return#0 ] zp ZP_WORD:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:165 [ sin16s::$4 ] zp ZP_WORD:173 [ sin16s::x2#0 ] zp ZP_WORD:181 [ sin16s::x3_6#0 ] zp ZP_WORD:187 [ sin16s::x4#0 ] zp ZP_WORD:191 [ sin16s::x5#0 ] zp ZP_WORD:193 [ sin16s::x5_128#0 ] zp ZP_WORD:177 [ sin16s::x3#0 ] zp ZP_WORD:195 [ sin16s::usinx#1 ] zp ZP_WORD:169 [ sin16s::x1#0 ] zp ZP_WORD:183 [ sin16s::usinx#0 ] zp ZP_BYTE:48 [ sin16s::isUpper#2 ] -Uplifting [sin16s_gen2] best 26239 combination zp ZP_WORD:40 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp ZP_DWORD:159 [ sin16s_gen2::$6 ] zp ZP_DWORD:42 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp ZP_WORD:163 [ sin16s_gen2::$9 ] zp ZP_WORD:46 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp ZP_DWORD:149 [ sin16s_gen2::step#0 ] -Uplifting [mulu16_sel] best 26223 combination zp ZP_WORD:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:57 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:171 [ mulu16_sel::return#0 ] zp ZP_WORD:175 [ mulu16_sel::return#1 ] zp ZP_WORD:179 [ mulu16_sel::return#2 ] zp ZP_WORD:185 [ mulu16_sel::return#10 ] zp ZP_WORD:189 [ mulu16_sel::return#11 ] zp ZP_DWORD:201 [ mulu16_sel::$0 ] zp ZP_DWORD:205 [ mulu16_sel::$1 ] zp ZP_WORD:209 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [memset] best 26207 combination zp ZP_WORD:33 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:139 [ memset::end#0 ] zp ZP_WORD:28 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp ZP_WORD:30 [ memset::str#3 ] -Uplifting [] best 26207 combination zp ZP_BYTE:67 [ frame_cnt#10 frame_cnt#0 frame_cnt#1 ] zp ZP_WORD:225 [ rem16u#1 ] -Uplifting [bitmap_plot] best 26190 combination reg byte x [ bitmap_plot::y#0 ] zp ZP_WORD:117 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:113 [ bitmap_plot::x#0 ] zp ZP_WORD:119 [ bitmap_plot::plotter#1 ] zp ZP_WORD:115 [ bitmap_plot::plotter#0 ] -Uplifting [div32u16u] best 26190 combination zp ZP_DWORD:145 [ div32u16u::return#2 ] zp ZP_WORD:217 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:219 [ div32u16u::return#0 ] zp ZP_WORD:213 [ div32u16u::quotient_hi#0 ] -Uplifting [bitmap_clear] best 26190 combination -Uplifting [init_irq] best 26190 combination -Uplifting [irq] best 26190 combination +Uplifting [mul16s] best 26269 combination zp ZP_WORD:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] zp ZP_WORD:6 [ mul16s::a#3 mul16s::a#0 ] zp ZP_DWORD:74 [ mul16s::return#3 ] zp ZP_DWORD:96 [ mul16s::return#4 ] zp ZP_DWORD:155 [ mul16s::return#2 ] zp ZP_DWORD:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp ZP_DWORD:134 [ mul16s::return#0 ] zp ZP_WORD:126 [ mul16s::$9 ] zp ZP_WORD:128 [ mul16s::$16 ] zp ZP_WORD:130 [ mul16s::$13 ] zp ZP_WORD:132 [ mul16s::$17 ] +Uplifting [sin16s] best 26269 combination zp ZP_DWORD:49 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:153 [ sin16s::return#0 ] zp ZP_WORD:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:165 [ sin16s::$4 ] zp ZP_WORD:173 [ sin16s::x2#0 ] zp ZP_WORD:181 [ sin16s::x3_6#0 ] zp ZP_WORD:187 [ sin16s::x4#0 ] zp ZP_WORD:191 [ sin16s::x5#0 ] zp ZP_WORD:193 [ sin16s::x5_128#0 ] zp ZP_WORD:177 [ sin16s::x3#0 ] zp ZP_WORD:195 [ sin16s::usinx#1 ] zp ZP_WORD:169 [ sin16s::x1#0 ] zp ZP_WORD:183 [ sin16s::usinx#0 ] zp ZP_BYTE:48 [ sin16s::isUpper#2 ] +Uplifting [mulu16_sel] best 26253 combination zp ZP_WORD:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:57 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:171 [ mulu16_sel::return#0 ] zp ZP_WORD:175 [ mulu16_sel::return#1 ] zp ZP_WORD:179 [ mulu16_sel::return#2 ] zp ZP_WORD:185 [ mulu16_sel::return#10 ] zp ZP_WORD:189 [ mulu16_sel::return#11 ] zp ZP_DWORD:201 [ mulu16_sel::$0 ] zp ZP_DWORD:205 [ mulu16_sel::$1 ] zp ZP_WORD:209 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [sin16s_gen2] best 26253 combination zp ZP_DWORD:159 [ sin16s_gen2::$6 ] zp ZP_WORD:40 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] zp ZP_WORD:163 [ sin16s_gen2::$9 ] zp ZP_DWORD:42 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] zp ZP_WORD:46 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] zp ZP_DWORD:149 [ sin16s_gen2::step#0 ] +Uplifting [memset] best 26237 combination zp ZP_WORD:33 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:139 [ memset::end#0 ] zp ZP_WORD:28 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp ZP_WORD:30 [ memset::str#3 ] +Uplifting [] best 26237 combination zp ZP_BYTE:67 [ frame_cnt#10 frame_cnt#0 frame_cnt#1 ] zp ZP_WORD:225 [ rem16u#1 ] +Uplifting [bitmap_plot] best 26220 combination reg byte x [ bitmap_plot::y#0 ] zp ZP_WORD:117 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:113 [ bitmap_plot::x#0 ] zp ZP_WORD:119 [ bitmap_plot::plotter#1 ] zp ZP_WORD:115 [ bitmap_plot::plotter#0 ] +Uplifting [div32u16u] best 26220 combination zp ZP_DWORD:145 [ div32u16u::return#2 ] zp ZP_WORD:217 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:219 [ div32u16u::return#0 ] zp ZP_WORD:213 [ div32u16u::quotient_hi#0 ] +Uplifting [bitmap_clear] best 26220 combination +Uplifting [init_irq] best 26220 combination +Uplifting [irq] best 26220 combination Attempting to uplift remaining variables inzp ZP_BYTE:67 [ frame_cnt#10 frame_cnt#0 frame_cnt#1 ] -Uplifting [] best 26190 combination zp ZP_BYTE:67 [ frame_cnt#10 frame_cnt#0 frame_cnt#1 ] +Uplifting [] best 26220 combination zp ZP_BYTE:67 [ frame_cnt#10 frame_cnt#0 frame_cnt#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:143 [ bitmap_init::$5 ] -Uplifting [bitmap_init] best 26130 combination reg byte a [ bitmap_init::$5 ] +Uplifting [bitmap_init] best 26160 combination reg byte a [ bitmap_init::$5 ] Attempting to uplift remaining variables inzp ZP_BYTE:144 [ bitmap_init::$6 ] -Uplifting [bitmap_init] best 26070 combination reg byte a [ bitmap_init::$6 ] +Uplifting [bitmap_init] best 26100 combination reg byte a [ bitmap_init::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:141 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 26070 combination zp ZP_BYTE:141 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 26100 combination zp ZP_BYTE:141 [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:48 [ sin16s::isUpper#2 ] -Uplifting [sin16s] best 26070 combination zp ZP_BYTE:48 [ sin16s::isUpper#2 ] +Uplifting [sin16s] best 26100 combination zp ZP_BYTE:48 [ sin16s::isUpper#2 ] Coalescing zero page register [ zp ZP_WORD:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:195 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:177 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:60 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:225 [ rem16u#1 ] ] - score: 2 @@ -6392,25 +6410,25 @@ Coalescing zero page register [ zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init Coalescing zero page register [ zp ZP_DWORD:49 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] ] with [ zp ZP_DWORD:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$9 main::$14 mulu16_sel::$0 mulu16_sel::$1 ] ] Coalescing zero page register [ zp ZP_WORD:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp ZP_WORD:14 [ mul16u::b#0 ] ] Coalescing zero page register [ zp ZP_WORD:60 [ 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 ] ] with [ zp ZP_WORD:18 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] -Coalescing zero page register [ zp ZP_WORD:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp ZP_WORD:40 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] -Coalescing zero page register [ zp ZP_WORD:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp ZP_WORD:46 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ] +Coalescing zero page register [ zp ZP_WORD:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp ZP_WORD:40 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] ] +Coalescing zero page register [ zp ZP_WORD:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp ZP_WORD:46 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] ] Coalescing zero page register [ zp ZP_WORD:115 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp ZP_WORD:110 [ main::y#0 ] ] Coalescing zero page register [ zp ZP_WORD:126 [ mul16s::$9 mul16s::$16 ] ] with [ zp ZP_WORD:117 [ bitmap_plot::$1 ] ] Coalescing zero page register [ zp ZP_BYTE:141 [ bitmap_init::$7 ] ] with [ zp ZP_BYTE:48 [ sin16s::isUpper#2 ] ] Coalescing zero page register [ zp ZP_WORD:163 [ sin16s_gen2::$9 ] ] with [ zp ZP_WORD:88 [ main::x#0 bitmap_plot::x#0 ] ] Coalescing zero page register [ zp ZP_WORD:169 [ sin16s::x1#0 ] ] with [ zp ZP_WORD:130 [ mul16s::$13 ] ] Coalescing zero page register [ zp ZP_WORD:213 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:171 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] -Coalescing zero page register [ zp ZP_WORD:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] with [ zp ZP_WORD:28 [ memset::num#2 memset::end#0 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ] +Coalescing zero page register [ zp ZP_WORD:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#6 sin16s_gen2::i#1 ] ] with [ zp ZP_WORD:28 [ memset::num#2 memset::end#0 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ] Coalescing zero page register [ zp ZP_WORD:115 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 ] ] with [ zp ZP_WORD:30 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] ] Coalescing zero page register [ zp ZP_WORD:126 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 ] ] with [ zp ZP_WORD:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] ] Coalescing zero page register [ zp ZP_WORD:213 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$24 main::$26 main::$25 main::$27 ] ] Allocated (was zp ZP_WORD:16) zp ZP_WORD:2 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 main::idx_x#3 main::idx_x#10 main::idx_x#1 ] Allocated (was zp ZP_DWORD:24) zp ZP_DWORD:4 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] -Allocated (was zp ZP_DWORD:42) zp ZP_DWORD:8 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] +Allocated (was zp ZP_DWORD:42) zp ZP_DWORD:8 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] Allocated (was zp ZP_DWORD:49) zp ZP_DWORD:12 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$9 main::$14 mulu16_sel::$0 mulu16_sel::$1 ] Allocated (was zp ZP_WORD:60) zp ZP_WORD:16 [ 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 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] -Allocated (was zp ZP_WORD:62) zp ZP_WORD:18 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] -Allocated (was zp ZP_WORD:64) zp ZP_WORD:20 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +Allocated (was zp ZP_WORD:62) zp ZP_WORD:18 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#6 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] +Allocated (was zp ZP_WORD:64) zp ZP_WORD:20 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] Allocated (was zp ZP_BYTE:67) zp ZP_BYTE:22 [ frame_cnt#10 frame_cnt#0 frame_cnt#1 ] Allocated (was zp ZP_WORD:115) zp ZP_WORD:23 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] Allocated (was zp ZP_WORD:126) zp ZP_WORD:25 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] @@ -7304,46 +7322,35 @@ sin16s_gen2: { // sin16s_gen2::@3 b3: // [131] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 - // [132] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] - b1_from_b3: - // [132] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[$200]) SINUS#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [132] phi from sin16s_gen2::@3 to sin16s_gen2::@2 [phi:sin16s_gen2::@3->sin16s_gen2::@2] + b2_from_b3: + // [132] phi (signed word*) sin16s_gen2::sintab#10 = (const signed word[$200]) SINUS#0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#0] -- pwsz1=pwsc1 lda #SINUS sta sintab+1 - // [132] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 + // [132] phi (dword) sin16s_gen2::x#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [132] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [132] phi (word) sin16s_gen2::i#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen2::@1 - b1: - // [133] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen2::@2] + b2_from_b1: + // [132] phi (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@1->sin16s_gen2::@2#0] -- register_copy + // [132] phi (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#1] -- register_copy + // [132] phi (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#2] -- register_copy + jmp b2 // sin16s_gen2::@2 b2: - // [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [133] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -7352,14 +7359,14 @@ sin16s_gen2: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [136] call sin16s + // [134] call sin16s jsr sin16s - // [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [135] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 jmp b4 // sin16s_gen2::@4 b4: - // [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - // [139] call mul16s + // [136] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + // [137] call mul16s // [54] phi from sin16s_gen2::@4 to mul16s [phi:sin16s_gen2::@4->mul16s] mul16s_from_b4: // [54] phi (signed word) mul16s::b#3 = (const signed word) sin16s_gen2::ampl#0 [phi:sin16s_gen2::@4->mul16s#0] -- vwsz1=vwsc1 @@ -7369,24 +7376,24 @@ sin16s_gen2: { sta mul16s.b+1 // [54] phi (signed word) mul16s::a#3 = (signed word) mul16s::a#0 [phi:sin16s_gen2::@4->mul16s#1] -- register_copy jsr mul16s - // [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + // [138] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 jmp b5 // sin16s_gen2::@5 b5: - // [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - // [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [139] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + // [140] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda _6+2 sta _9 lda _6+3 sta _9+1 - // [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [141] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda _9 sta (sintab),y iny lda _9+1 sta (sintab),y - // [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [142] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -7394,7 +7401,7 @@ sin16s_gen2: { bcc !+ inc sintab+1 !: - // [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [143] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -7408,17 +7415,29 @@ sin16s_gen2: { lda x+3 adc step+3 sta x+3 - // [146] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 + // [144] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [132] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] - b1_from_b5: - // [132] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [132] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [132] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen2::@1 + b1: + // [145] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #sin16s_gen2::@1] - // [132] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[$200]) SINUS#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [132] phi from sin16s_gen2::@3 to sin16s_gen2::@2 [phi:sin16s_gen2::@3->sin16s_gen2::@2] + // [132] phi (signed word*) sin16s_gen2::sintab#10 = (const signed word[$200]) SINUS#0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#0] -- pwsz1=pwsc1 lda #SINUS sta sintab+1 - // [132] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 + // [132] phi (dword) sin16s_gen2::x#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#1] -- vduz1=vbuc1 lda #0 sta x sta x+1 sta x+2 sta x+3 - // [132] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [132] phi (word) sin16s_gen2::i#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#2] -- vwuz1=vbuc1 sta i sta i+1 - // u[4.28] - // sin16s_gen2::@1 - b1: - // for( word i=0; iwavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen2::@2] + // [132] phi (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@1->sin16s_gen2::@2#0] -- register_copy + // [132] phi (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#1] -- register_copy + // [132] phi (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#2] -- register_copy // sin16s_gen2::@2 b2: // sin16s(x) - // [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [133] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -9564,13 +9575,13 @@ sin16s_gen2: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [136] call sin16s + // [134] call sin16s jsr sin16s - // [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [135] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 // sin16s_gen2::@4 // mul16s(sin16s(x), ampl) - // [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - // [139] call mul16s + // [136] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + // [137] call mul16s // [54] phi from sin16s_gen2::@4 to mul16s [phi:sin16s_gen2::@4->mul16s] // [54] phi (signed word) mul16s::b#3 = (const signed word) sin16s_gen2::ampl#0 [phi:sin16s_gen2::@4->mul16s#0] -- vwsz1=vwsc1 lda #mul16s#1] -- register_copy jsr mul16s // mul16s(sin16s(x), ampl) - // [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + // [138] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 // sin16s_gen2::@5 - // [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + // [139] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 // >mul16s(sin16s(x), ampl) - // [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [140] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda _6+2 sta _9 lda _6+3 sta _9+1 // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl) - // [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [141] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda _9 sta (sintab),y @@ -9598,7 +9609,7 @@ sin16s_gen2: { lda _9+1 sta (sintab),y // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl); - // [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [142] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -9607,7 +9618,7 @@ sin16s_gen2: { inc sintab+1 !: // x = x + step - // [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [143] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -9622,16 +9633,26 @@ sin16s_gen2: { adc step+3 sta x+3 // for( word i=0; isin16s_gen2::@1] - // [132] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [132] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [132] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy - jmp b1 + // u[4.28] + // sin16s_gen2::@1 + // [145] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>wavelength + bcc b2 + bne !+ + lda i + cmp #wavelength - bcc b2 - bne !+ - lda i - cmp #wavelength + bcc b2 + bne !+ + lda i + cmp # (signed dword~) sin16s_gen2::$6 - [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 - [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 - [155] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 + [148] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + [149] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 + [150] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 + [151] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD + [152] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 + [153] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 to:sin16s_gen2::@1 +sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@5 + [154] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 + to:sin16s_gen2::@return +sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 + [155] return + to:@return sin16s: scope:[sin16s] from sin16s_gen2::@2 [156] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 to:sin16s::@4 diff --git a/src/test/ref/bitmap-plot-2.log b/src/test/ref/bitmap-plot-2.log index 849c9266f..437e6615d 100644 --- a/src/test/ref/bitmap-plot-2.log +++ b/src/test/ref/bitmap-plot-2.log @@ -2826,6 +2826,7 @@ Eliminating unused constant (const byte*) bitmap_gfx#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $10 in if((byte) divr16u::i#1!=(number) $10) goto divr16u::@1 Adding number conversion cast (unumber) 0 in if((byte) bitmap_init::x#1!=(number) 0) goto bitmap_init::@1 Adding number conversion cast (unumber) 0 in if((byte) bitmap_init::y#1!=(number) 0) goto bitmap_init::@5 @@ -2840,20 +2841,30 @@ Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (word) sin16s_gen2::i#1 = (word) sin16s_gen2::i#2 +Alias (dword) sin16s_gen2::x#1 = (dword) sin16s_gen2::x#2 +Alias (signed word*) sin16s_gen2::sintab#0 = (signed word*) sin16s_gen2::sintab#2 +Alias (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#7 (word) sin16s_gen2::i#8 +Alias (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#8 (dword) sin16s_gen2::x#7 +Alias (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#9 (signed word*) sin16s_gen2::sintab#8 Alias (byte~) bitmap_init::$7 = (byte~) bitmap_init::$3 Alias (byte) bitmap_clear::col#0 = (byte~) bitmap_clear::$0 Successful SSA optimization Pass2AliasElimination -Simple Condition (bool~) main::$26 [237] if((word) main::idx_x#10==(byte) 0) goto main::@31 -Simple Condition (bool~) main::$27 [261] if((byte) main::r_add#10!=(byte) 1) goto main::@13 +Identical Phi Values (word) sin16s_gen2::i#9 (const word) sin16s_gen2::i#0 +Identical Phi Values (dword) sin16s_gen2::x#9 (const dword) sin16s_gen2::x#0 +Identical Phi Values (signed word*) sin16s_gen2::sintab#11 (const signed word*) sin16s_gen2::sintab#1 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition (bool~) main::$26 [241] if((word) main::idx_x#10==(byte) 0) goto main::@31 +Simple Condition (bool~) main::$27 [265] if((byte) main::r_add#10!=(byte) 1) goto main::@13 Successful SSA optimization Pass2ConditionalJumpSimplification -Negating conditional jump and destination [237] if((word) main::idx_x#10!=(byte) 0) goto main::@6 -Negating conditional jump and destination [261] if((byte) main::r_add#10==(byte) 1) goto main::@6 +Negating conditional jump and destination [241] if((word) main::idx_x#10!=(byte) 0) goto main::@6 +Negating conditional jump and destination [265] if((byte) main::r_add#10==(byte) 1) goto main::@6 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant right-side identified [18] (word) divr16u::dividend#1 ← > (const dword) div32u16u::dividend#0 Constant right-side identified [22] (word) divr16u::dividend#2 ← < (const dword) div32u16u::dividend#0 Constant right-side identified [59] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 -Constant right-side identified [164] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10 -Constant right-side identified [182] (byte~) main::$3 ← (const byte) VIC_BMM#0 | (const byte) VIC_DEN#0 +Constant right-side identified [168] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10 +Constant right-side identified [186] (byte~) main::$3 ← (const byte) VIC_BMM#0 | (const byte) VIC_DEN#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = > (signed byte) 1 Constant right-side identified [172] (byte~) main::$4 ← (const byte) main::$3 | (const byte) VIC_RSEL#0 Constant right-side identified [175] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff @@ -3027,6 +3040,7 @@ Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u: Added new block during phi lifting mul16u::@10(between mul16u::@2 and mul16u::@4) Added new block during phi lifting mul16s::@7(between mul16s::@6 and mul16s::@1) Added new block during phi lifting mul16s::@8(between mul16s::@1 and mul16s::@2) +Added new block during phi lifting sin16s_gen2::@10(between sin16s_gen2::@1 and sin16s_gen2::@2) Added new block during phi lifting sin16s::@13(between sin16s and sin16s::@1) Fixing phi predecessor for sin16s::isUpper#2 to new block ( sin16s -> sin16s::@13 ) during phi lifting. Added new block during phi lifting sin16s::@14(between sin16s::@1 and sin16s::@2) @@ -3066,16 +3080,17 @@ Adding NOP phi() at start of bitmap_init Adding NOP phi() at start of bitmap_init::@3 Adding NOP phi() at start of bitmap_init::@4 Adding NOP phi() at start of sin16s_gen2 +Adding NOP phi() at start of sin16s_gen2::@1_1 Adding NOP phi() at start of div32u16u CALL GRAPH Calls in [] to main:7 Calls in [main] to sin16s_gen2:11 bitmap_init:13 bitmap_clear:15 init_irq:20 mul16s:30 mul16s:43 bitmap_plot:51 Calls in [mul16s] to mul16u:88 Calls in [bitmap_clear] to memset:136 memset:138 -Calls in [sin16s_gen2] to div32u16u:183 sin16s:190 mul16s:194 -Calls in [sin16s] to mulu16_sel:219 mulu16_sel:226 mulu16_sel:231 mulu16_sel:239 mulu16_sel:246 -Calls in [mulu16_sel] to mul16u:264 -Calls in [div32u16u] to divr16u:271 divr16u:276 +Calls in [sin16s_gen2] to div32u16u:183 sin16s:189 mul16s:193 +Calls in [sin16s] to mulu16_sel:220 mulu16_sel:227 mulu16_sel:232 mulu16_sel:240 mulu16_sel:247 +Calls in [mulu16_sel] to mul16u:265 +Calls in [div32u16u] to divr16u:272 divr16u:277 Created 47 initial phi equivalence classes Coalesced [28] mul16s::a#8 ← mul16s::a#1 @@ -3111,41 +3126,41 @@ Coalesced (already) [178] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 Coalesced [179] bitmap_init::bits#5 ← bitmap_init::bits#4 Coalesced [180] bitmap_init::x#5 ← bitmap_init::x#1 Coalesced [181] bitmap_init::bits#6 ← bitmap_init::bits#1 -Coalesced [193] mul16s::a#10 ← mul16s::a#0 -Coalesced [202] sin16s_gen2::i#6 ← sin16s_gen2::i#1 -Coalesced [203] sin16s_gen2::x#6 ← sin16s_gen2::x#1 -Coalesced [204] sin16s_gen2::sintab#8 ← sin16s_gen2::sintab#0 -Coalesced [207] sin16s::x#9 ← sin16s::x#1 -Coalesced [211] sin16s::x#11 ← sin16s::x#2 -Coalesced [217] mulu16_sel::v1#8 ← mulu16_sel::v1#0 -Coalesced [218] mulu16_sel::v2#8 ← mulu16_sel::v2#0 -Coalesced [224] mulu16_sel::v1#9 ← mulu16_sel::v1#1 -Coalesced [225] mulu16_sel::v2#9 ← mulu16_sel::v2#1 -Coalesced [230] mulu16_sel::v1#10 ← mulu16_sel::v1#2 -Coalesced [237] mulu16_sel::v1#6 ← mulu16_sel::v1#3 -Coalesced [238] mulu16_sel::v2#6 ← mulu16_sel::v2#3 -Coalesced [244] mulu16_sel::v1#7 ← mulu16_sel::v1#4 -Coalesced [245] mulu16_sel::v2#7 ← mulu16_sel::v2#4 -Coalesced [253] sin16s::return#6 ← sin16s::sinx#1 -Coalesced [257] sin16s::x#10 ← sin16s::x#4 -Coalesced [258] sin16s::x#8 ← sin16s::x#0 -Coalesced [262] mul16u::mb#7 ← mul16u::b#1 -Coalesced [263] mul16u::a#9 ← mul16u::a#2 -Coalesced [275] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [282] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [283] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [290] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [297] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [298] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [304] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [305] divr16u::dividend#10 ← divr16u::dividend#0 -Coalesced [306] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [307] divr16u::i#7 ← divr16u::i#1 -Coalesced [308] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [309] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [310] divr16u::rem#15 ← divr16u::rem#0 -Coalesced [314] frame_cnt#28 ← frame_cnt#1 -Coalesced [319] frame_cnt#27 ← frame_cnt#0 +Coalesced [192] mul16s::a#10 ← mul16s::a#0 +Coalesced [203] sin16s_gen2::i#10 ← sin16s_gen2::i#1 +Coalesced [204] sin16s_gen2::x#10 ← sin16s_gen2::x#1 +Coalesced [205] sin16s_gen2::sintab#12 ← sin16s_gen2::sintab#0 +Coalesced [208] sin16s::x#9 ← sin16s::x#1 +Coalesced [212] sin16s::x#11 ← sin16s::x#2 +Coalesced [218] mulu16_sel::v1#8 ← mulu16_sel::v1#0 +Coalesced [219] mulu16_sel::v2#8 ← mulu16_sel::v2#0 +Coalesced [225] mulu16_sel::v1#9 ← mulu16_sel::v1#1 +Coalesced [226] mulu16_sel::v2#9 ← mulu16_sel::v2#1 +Coalesced [231] mulu16_sel::v1#10 ← mulu16_sel::v1#2 +Coalesced [238] mulu16_sel::v1#6 ← mulu16_sel::v1#3 +Coalesced [239] mulu16_sel::v2#6 ← mulu16_sel::v2#3 +Coalesced [245] mulu16_sel::v1#7 ← mulu16_sel::v1#4 +Coalesced [246] mulu16_sel::v2#7 ← mulu16_sel::v2#4 +Coalesced [254] sin16s::return#6 ← sin16s::sinx#1 +Coalesced [258] sin16s::x#10 ← sin16s::x#4 +Coalesced [259] sin16s::x#8 ← sin16s::x#0 +Coalesced [263] mul16u::mb#7 ← mul16u::b#1 +Coalesced [264] mul16u::a#9 ← mul16u::a#2 +Coalesced [276] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [283] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [284] divr16u::dividend#9 ← divr16u::dividend#5 +Coalesced [291] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [298] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [299] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [305] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [306] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [307] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [308] divr16u::i#7 ← divr16u::i#1 +Coalesced [309] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [310] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [311] divr16u::rem#15 ← divr16u::rem#0 +Coalesced [315] frame_cnt#28 ← frame_cnt#1 +Coalesced [320] frame_cnt#27 ← frame_cnt#0 Coalesced down to 32 phi equivalence classes Culled Empty Block (label) @6 Culled Empty Block (label) @17 @@ -3170,6 +3185,8 @@ Culled Empty Block (label) bitmap_init::@4 Culled Empty Block (label) bitmap_init::@11 Culled Empty Block (label) bitmap_init::@12 Culled Empty Block (label) bitmap_init::@9 +Culled Empty Block (label) sin16s_gen2::@1_1 +Culled Empty Block (label) sin16s_gen2::@10 Culled Empty Block (label) sin16s::@14 Culled Empty Block (label) sin16s::@13 Culled Empty Block (label) divr16u::@8 @@ -3498,34 +3515,34 @@ sin16s_gen2: scope:[sin16s_gen2] from main to:sin16s_gen2::@3 sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2 [140] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 - to:sin16s_gen2::@1 -sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5 - [141] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word[$200]) SINUS#0 sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) - [141] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) - [141] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) - [142] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 - to:sin16s_gen2::@return -sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 - [143] return - to:@return -sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 - [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 - [145] call sin16s - [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + to:sin16s_gen2::@2 +sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 sin16s_gen2::@3 + [141] (signed word*) sin16s_gen2::sintab#10 ← phi( sin16s_gen2::@1/(signed word*) sin16s_gen2::sintab#0 sin16s_gen2::@3/(const signed word[$200]) SINUS#0 ) + [141] (dword) sin16s_gen2::x#6 ← phi( sin16s_gen2::@1/(dword) sin16s_gen2::x#1 sin16s_gen2::@3/(byte) 0 ) + [141] (word) sin16s_gen2::i#6 ← phi( sin16s_gen2::@1/(word) sin16s_gen2::i#1 sin16s_gen2::@3/(byte) 0 ) + [142] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 + [143] call sin16s + [144] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen2::@4 sin16s_gen2::@4: scope:[sin16s_gen2] from sin16s_gen2::@2 - [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - [148] call mul16s - [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + [145] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + [146] call mul16s + [147] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 to:sin16s_gen2::@5 sin16s_gen2::@5: scope:[sin16s_gen2] from sin16s_gen2::@4 - [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 - [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 - [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 - [155] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 + [148] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + [149] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 + [150] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 + [151] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD + [152] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 + [153] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 to:sin16s_gen2::@1 +sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@5 + [154] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 + to:sin16s_gen2::@return +sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 + [155] return + to:@return sin16s: scope:[sin16s] from sin16s_gen2::@2 [156] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 to:sin16s::@4 @@ -3974,20 +3991,20 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (word~) sin16s_gen2::$9 11.0 (signed word) sin16s_gen2::ampl (word) sin16s_gen2::i -(word) sin16s_gen2::i#1 22.0 -(word) sin16s_gen2::i#2 2.5384615384615383 +(word) sin16s_gen2::i#1 16.5 +(word) sin16s_gen2::i#6 1.8333333333333333 (signed word) sin16s_gen2::max (signed word) sin16s_gen2::min (signed word) sin16s_gen2::offs (signed word*) sin16s_gen2::sintab -(signed word*) sin16s_gen2::sintab#0 7.333333333333333 -(signed word*) sin16s_gen2::sintab#2 3.0 +(signed word*) sin16s_gen2::sintab#0 5.5 +(signed word*) sin16s_gen2::sintab#10 3.3000000000000003 (dword) sin16s_gen2::step (dword) sin16s_gen2::step#0 0.8666666666666666 (word) sin16s_gen2::wavelength (dword) sin16s_gen2::x -(dword) sin16s_gen2::x#1 11.0 -(dword) sin16s_gen2::x#2 2.75 +(dword) sin16s_gen2::x#1 7.333333333333333 +(dword) sin16s_gen2::x#6 3.0 Not consolidating phi with different size mul16u::mb#0 mul16u::b#0 Not consolidating phi with different size mul16u::mb#0 mul16u::b#1 @@ -4012,9 +4029,9 @@ Initial phi equivalence classes [ bitmap_init::x#2 bitmap_init::x#1 ] [ bitmap_init::y#2 bitmap_init::y#1 ] [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] -[ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -[ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -[ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +[ sin16s_gen2::i#6 sin16s_gen2::i#1 ] +[ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +[ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] [ sin16s::isUpper#2 ] [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -4114,9 +4131,9 @@ Complete equivalence classes [ bitmap_init::x#2 bitmap_init::x#1 ] [ bitmap_init::y#2 bitmap_init::y#1 ] [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] -[ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -[ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -[ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +[ sin16s_gen2::i#6 sin16s_gen2::i#1 ] +[ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +[ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] [ sin16s::isUpper#2 ] [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -4215,9 +4232,9 @@ Allocated zp ZP_BYTE:38 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::b Allocated zp ZP_BYTE:39 [ bitmap_init::x#2 bitmap_init::x#1 ] Allocated zp ZP_BYTE:40 [ bitmap_init::y#2 bitmap_init::y#1 ] Allocated zp ZP_WORD:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] -Allocated zp ZP_WORD:43 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -Allocated zp ZP_DWORD:45 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -Allocated zp ZP_WORD:49 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +Allocated zp ZP_WORD:43 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] +Allocated zp ZP_DWORD:45 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +Allocated zp ZP_WORD:49 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] Allocated zp ZP_BYTE:51 [ sin16s::isUpper#2 ] Allocated zp ZP_DWORD:52 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] Allocated zp ZP_WORD:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -5374,46 +5391,35 @@ sin16s_gen2: { sta step+2 lda div32u16u.return_2+3 sta step+3 - // [141] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] - b1_from_b3: - // [141] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[$200]) SINUS#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [141] phi from sin16s_gen2::@3 to sin16s_gen2::@2 [phi:sin16s_gen2::@3->sin16s_gen2::@2] + b2_from_b3: + // [141] phi (signed word*) sin16s_gen2::sintab#10 = (const signed word[$200]) SINUS#0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#0] -- pwsz1=pwsc1 lda #SINUS sta sintab+1 - // [141] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 + // [141] phi (dword) sin16s_gen2::x#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [141] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [141] phi (word) sin16s_gen2::i#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen2::@1 - b1: - // [142] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen2::@2] + b2_from_b1: + // [141] phi (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@1->sin16s_gen2::@2#0] -- register_copy + // [141] phi (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#1] -- register_copy + // [141] phi (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#2] -- register_copy + jmp b2 // sin16s_gen2::@2 b2: - // [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [142] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -5422,9 +5428,9 @@ sin16s_gen2: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [145] call sin16s + // [143] call sin16s jsr sin16s - // [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 + // [144] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 lda sin16s.return_1 sta sin16s.return lda sin16s.return_1+1 @@ -5432,12 +5438,12 @@ sin16s_gen2: { jmp b4 // sin16s_gen2::@4 b4: - // [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 + // [145] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 lda sin16s.return sta mul16s.a lda sin16s.return+1 sta mul16s.a+1 - // [148] call mul16s + // [146] call mul16s // [63] phi from sin16s_gen2::@4 to mul16s [phi:sin16s_gen2::@4->mul16s] mul16s_from_b4: // [63] phi (signed word) mul16s::b#3 = (const signed word) sin16s_gen2::ampl#0 [phi:sin16s_gen2::@4->mul16s#0] -- vwsz1=vwsc1 @@ -5447,7 +5453,7 @@ sin16s_gen2: { sta mul16s.b+1 // [63] phi (signed word) mul16s::a#3 = (signed word) mul16s::a#0 [phi:sin16s_gen2::@4->mul16s#1] -- register_copy jsr mul16s - // [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 + // [147] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 lda mul16s.return sta mul16s.return_2 lda mul16s.return+1 @@ -5459,7 +5465,7 @@ sin16s_gen2: { jmp b5 // sin16s_gen2::@5 b5: - // [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 + // [148] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 lda mul16s.return_2 sta _6 lda mul16s.return_2+1 @@ -5468,19 +5474,19 @@ sin16s_gen2: { sta _6+2 lda mul16s.return_2+3 sta _6+3 - // [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [149] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda _6+2 sta _9 lda _6+3 sta _9+1 - // [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [150] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda _9 sta (sintab),y iny lda _9+1 sta (sintab),y - // [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [151] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -5488,7 +5494,7 @@ sin16s_gen2: { bcc !+ inc sintab+1 !: - // [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [152] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -5502,17 +5508,29 @@ sin16s_gen2: { lda x+3 adc step+3 sta x+3 - // [155] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 + // [153] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [141] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] - b1_from_b5: - // [141] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [141] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [141] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen2::@1 + b1: + // [154] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [70] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a -Statement [71] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a -Statement [72] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a -Statement [74] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a -Statement [75] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a -Statement [76] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#5 mul16s::$17 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a -Statement [77] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#2 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#2 ] ) always clobbers reg byte a -Statement [79] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::return#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [83] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:32::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:148::mul16u:66 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [64] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a +Statement [65] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [67] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a +Statement [68] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [69] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [70] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a +Statement [71] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a +Statement [72] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a +Statement [74] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a +Statement [75] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a +Statement [76] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#5 mul16s::$17 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a +Statement [77] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#2 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#2 ] ) always clobbers reg byte a +Statement [79] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::return#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#0 ] ) always clobbers reg byte a +Statement [83] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:32::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:146::mul16u:66 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:51 [ sin16s::isUpper#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:62 [ mulu16_sel::select#5 ] -Statement [85] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:148::mul16u:66 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [87] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:148::mul16u:66 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [85] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:146::mul16u:66 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [87] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:146::mul16u:66 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a Statement [92] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:3::init_irq:14 [ frame_cnt#0 ] ) always clobbers reg byte a Statement [93] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:3::init_irq:14 [ frame_cnt#0 ] ) always clobbers reg byte a Statement [94] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:3::init_irq:14 [ frame_cnt#0 ] ) always clobbers reg byte a @@ -6301,53 +6319,53 @@ Statement [132] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + Removing always clobbered register reg byte a as potential for zp ZP_BYTE:40 [ bitmap_init::y#2 bitmap_init::y#1 ] Statement [139] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 div32u16u::return#2 ] ) always clobbers reg byte a Statement [140] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 ] ) always clobbers reg byte a -Statement [142] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a -Statement [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a -Statement [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a -Statement [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [156] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [157] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [159] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [160] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [162] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [142] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [144] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ) always clobbers reg byte a +Statement [145] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ) always clobbers reg byte a +Statement [147] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ) always clobbers reg byte a +Statement [148] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ) always clobbers reg byte a +Statement [149] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ) always clobbers reg byte a +Statement [150] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ) always clobbers reg byte a reg byte y +Statement [151] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [152] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [154] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [156] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [157] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#1 ] ) always clobbers reg byte a +Statement [159] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [160] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [162] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:51 [ sin16s::isUpper#2 ] -Statement [163] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [164] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [165] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [167] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [168] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [169] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [170] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [172] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [173] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [174] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [176] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [177] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [178] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [179] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [180] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [182] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [183] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [184] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [185] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [187] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [188] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [189] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [190] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [192] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [195] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [197] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [198] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [200] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [201] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [202] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [203] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [163] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [164] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [165] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [167] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [168] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [169] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [170] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [172] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [173] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [174] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [176] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [177] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [178] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [179] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [180] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [182] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [183] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [184] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [185] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [187] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [188] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [189] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [190] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [192] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [195] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#5 ] ) always clobbers reg byte a +Statement [197] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [198] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [200] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [201] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [202] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [203] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a Statement [207] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt#0 divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [208] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt#0 div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [209] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt#0 div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a @@ -6404,22 +6422,22 @@ Statement [58] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word) $fff Statement [59] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:3::bitmap_plot:40 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) always clobbers reg byte a Statement [60] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:3::bitmap_plot:40 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a Statement [61] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:3::bitmap_plot:40 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 ] ) always clobbers reg byte a reg byte y -Statement [64] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a -Statement [65] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a -Statement [67] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a -Statement [68] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [69] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [70] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a -Statement [71] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a -Statement [72] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a -Statement [74] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a -Statement [75] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a -Statement [76] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#5 mul16s::$17 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a -Statement [77] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#2 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#2 ] ) always clobbers reg byte a -Statement [79] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::return#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [83] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:32::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:148::mul16u:66 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [85] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:148::mul16u:66 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [87] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:148::mul16u:66 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [64] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a +Statement [65] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [67] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a +Statement [68] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [69] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [70] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a +Statement [71] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a +Statement [72] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a +Statement [74] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a +Statement [75] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a +Statement [76] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#5 mul16s::$17 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a +Statement [77] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#2 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#2 ] ) always clobbers reg byte a +Statement [79] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:21 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::return#0 ] main:3::mul16s:32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:146 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#0 ] ) always clobbers reg byte a +Statement [83] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:32::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:146::mul16u:66 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [85] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:146::mul16u:66 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [87] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:146::mul16u:66 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186::mul16u:199 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a Statement [92] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:3::init_irq:14 [ frame_cnt#0 ] ) always clobbers reg byte a Statement [93] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:3::init_irq:14 [ frame_cnt#0 ] ) always clobbers reg byte a Statement [94] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:3::init_irq:14 [ frame_cnt#0 ] ) always clobbers reg byte a @@ -6436,52 +6454,52 @@ Statement [125] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 [ Statement [132] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:8 [ frame_cnt#0 bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a Statement [139] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 div32u16u::return#2 ] ) always clobbers reg byte a Statement [140] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 ] ) always clobbers reg byte a -Statement [142] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a -Statement [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a -Statement [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a -Statement [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [156] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [157] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [159] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [160] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [162] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y -Statement [163] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [164] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [165] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [167] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [168] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [169] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [170] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [172] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [173] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [174] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [176] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [177] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [178] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [179] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [180] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [182] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [183] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [184] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [185] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [187] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [188] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [189] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [190] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [192] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [195] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [197] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [198] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [200] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [201] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [202] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [203] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [142] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [144] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ) always clobbers reg byte a +Statement [145] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ) always clobbers reg byte a +Statement [147] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ) always clobbers reg byte a +Statement [148] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ) always clobbers reg byte a +Statement [149] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ) always clobbers reg byte a +Statement [150] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ) always clobbers reg byte a reg byte y +Statement [151] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [152] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [154] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [156] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [157] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#1 ] ) always clobbers reg byte a +Statement [159] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [160] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [162] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [163] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [164] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [165] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [167] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [168] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [169] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [170] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [172] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [173] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [174] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [176] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [177] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [178] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [179] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [180] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [182] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [183] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [184] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [185] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [187] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [188] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [189] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [190] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [192] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [195] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:143 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#5 ] ) always clobbers reg byte a +Statement [197] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [198] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [200] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [201] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [202] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [203] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:166 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:171 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:175 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:181 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:143::mulu16_sel:186 [ frame_cnt#0 sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a Statement [207] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt#0 divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [208] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt#0 div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [209] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt#0 div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a @@ -6518,9 +6536,9 @@ Potential registers zp ZP_BYTE:38 [ bitmap_init::bits#3 bitmap_init::bits#4 bitm Potential registers zp ZP_BYTE:39 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp ZP_BYTE:39 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:40 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp ZP_BYTE:40 , reg byte x , reg byte y , Potential registers zp ZP_WORD:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp ZP_WORD:41 , -Potential registers zp ZP_WORD:43 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] : zp ZP_WORD:43 , -Potential registers zp ZP_DWORD:45 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] : zp ZP_DWORD:45 , -Potential registers zp ZP_WORD:49 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] : zp ZP_WORD:49 , +Potential registers zp ZP_WORD:43 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] : zp ZP_WORD:43 , +Potential registers zp ZP_DWORD:45 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] : zp ZP_DWORD:45 , +Potential registers zp ZP_WORD:49 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] : zp ZP_WORD:49 , Potential registers zp ZP_BYTE:51 [ sin16s::isUpper#2 ] : zp ZP_BYTE:51 , reg byte x , Potential registers zp ZP_DWORD:52 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp ZP_DWORD:52 , Potential registers zp ZP_WORD:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp ZP_WORD:56 , @@ -6607,8 +6625,8 @@ Uplift Scope [divr16u] 106.92: zp ZP_WORD:63 [ divr16u::rem#5 divr16u::rem#10 di Uplift Scope [mul16s] 46.69: zp ZP_WORD:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] 46.18: zp ZP_WORD:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] 22: zp ZP_DWORD:77 [ mul16s::return#3 ] 22: zp ZP_DWORD:97 [ mul16s::return#4 ] 22: zp ZP_DWORD:154 [ mul16s::return#2 ] 16.5: zp ZP_DWORD:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] 7: zp ZP_DWORD:133 [ mul16s::return#0 ] 4: zp ZP_WORD:125 [ mul16s::$9 ] 4: zp ZP_WORD:127 [ mul16s::$16 ] 4: zp ZP_WORD:129 [ mul16s::$13 ] 4: zp ZP_WORD:131 [ mul16s::$17 ] Uplift Scope [bitmap_init] 39.88: zp ZP_WORD:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp ZP_BYTE:38 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22: zp ZP_BYTE:39 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp ZP_BYTE:40 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp ZP_BYTE:141 [ bitmap_init::$4 ] 22: zp ZP_BYTE:142 [ bitmap_init::$5 ] 22: zp ZP_BYTE:143 [ bitmap_init::$6 ] 5.5: zp ZP_BYTE:140 [ bitmap_init::$7 ] Uplift Scope [sin16s] 27.5: zp ZP_DWORD:52 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp ZP_WORD:152 [ sin16s::return#0 ] 13: zp ZP_WORD:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp ZP_DWORD:164 [ sin16s::$4 ] 4: zp ZP_WORD:172 [ sin16s::x2#0 ] 4: zp ZP_WORD:180 [ sin16s::x3_6#0 ] 4: zp ZP_WORD:186 [ sin16s::x4#0 ] 4: zp ZP_WORD:190 [ sin16s::x5#0 ] 4: zp ZP_WORD:192 [ sin16s::x5_128#0 ] 1: zp ZP_WORD:176 [ sin16s::x3#0 ] 1: zp ZP_WORD:194 [ sin16s::usinx#1 ] 0.64: zp ZP_WORD:168 [ sin16s::x1#0 ] 0.33: zp ZP_WORD:182 [ sin16s::usinx#0 ] 0.06: zp ZP_BYTE:51 [ sin16s::isUpper#2 ] -Uplift Scope [sin16s_gen2] 24.54: zp ZP_WORD:43 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] 22: zp ZP_DWORD:158 [ sin16s_gen2::$6 ] 13.75: zp ZP_DWORD:45 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] 11: zp ZP_WORD:162 [ sin16s_gen2::$9 ] 10.33: zp ZP_WORD:49 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] 0.87: zp ZP_DWORD:148 [ sin16s_gen2::step#0 ] Uplift Scope [mulu16_sel] 24: zp ZP_WORD:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp ZP_WORD:60 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp ZP_WORD:170 [ mulu16_sel::return#0 ] 4: zp ZP_WORD:174 [ mulu16_sel::return#1 ] 4: zp ZP_WORD:178 [ mulu16_sel::return#2 ] 4: zp ZP_WORD:184 [ mulu16_sel::return#10 ] 4: zp ZP_WORD:188 [ mulu16_sel::return#11 ] 4: zp ZP_DWORD:200 [ mulu16_sel::$0 ] 4: zp ZP_DWORD:204 [ mulu16_sel::$1 ] 1.71: zp ZP_WORD:208 [ mulu16_sel::return#12 ] 0.33: zp ZP_BYTE:62 [ mulu16_sel::select#5 ] +Uplift Scope [sin16s_gen2] 22: zp ZP_DWORD:158 [ sin16s_gen2::$6 ] 18.33: zp ZP_WORD:43 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] 11: zp ZP_WORD:162 [ sin16s_gen2::$9 ] 10.33: zp ZP_DWORD:45 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] 8.8: zp ZP_WORD:49 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] 0.87: zp ZP_DWORD:148 [ sin16s_gen2::step#0 ] Uplift Scope [memset] 41.33: zp ZP_WORD:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp ZP_WORD:138 [ memset::end#0 ] 2: zp ZP_WORD:31 [ memset::num#2 ] 1.38: zp ZP_BYTE:35 [ memset::c#4 ] 0: zp ZP_WORD:33 [ memset::str#3 ] Uplift Scope [] 44.55: zp ZP_BYTE:70 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ] 0.8: zp ZP_WORD:224 [ rem16u#1 ] Uplift Scope [bitmap_plot] 7.5: zp ZP_BYTE:111 [ bitmap_plot::y#0 ] 4: zp ZP_WORD:116 [ bitmap_plot::$1 ] 4: zp ZP_BYTE:120 [ bitmap_plot::$2 ] 3.75: zp ZP_WORD:112 [ bitmap_plot::x#0 ] 3: zp ZP_WORD:118 [ bitmap_plot::plotter#1 ] 1: zp ZP_WORD:114 [ bitmap_plot::plotter#0 ] @@ -6617,34 +6635,34 @@ Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] -Uplifting [mul16u] best 27124 combination zp ZP_DWORD:23 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:27 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:21 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:17 [ mul16u::b#0 ] zp ZP_WORD:19 [ mul16u::b#1 ] zp ZP_DWORD:121 [ mul16u::return#2 ] zp ZP_DWORD:196 [ mul16u::return#3 ] -Uplifting [main] best 27124 combination zp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] zp ZP_WORD:71 [ main::$32 ] zp ZP_WORD:73 [ main::$34 ] zp ZP_DWORD:81 [ main::xpos#0 ] zp ZP_WORD:87 [ main::$11 ] zp ZP_WORD:91 [ main::$33 ] zp ZP_WORD:93 [ main::$35 ] zp ZP_DWORD:101 [ main::ypos#0 ] zp ZP_WORD:107 [ main::$17 ] zp ZP_WORD:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] zp ZP_WORD:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp ZP_WORD:75 [ main::cos_x#0 ] zp ZP_WORD:85 [ main::$10 ] zp ZP_WORD:95 [ main::sin_y#0 ] zp ZP_WORD:105 [ main::$16 ] zp ZP_WORD:109 [ main::y#0 ] zp ZP_WORD:4 [ main::r#10 main::r#1 ] zp ZP_WORD:89 [ main::x#0 ] -Uplifting [divr16u] best 26914 combination zp ZP_WORD:63 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:210 [ divr16u::return#2 ] zp ZP_WORD:214 [ divr16u::return#3 ] -Uplifting [mul16s] best 26914 combination zp ZP_WORD:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] zp ZP_WORD:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] zp ZP_DWORD:77 [ mul16s::return#3 ] zp ZP_DWORD:97 [ mul16s::return#4 ] zp ZP_DWORD:154 [ mul16s::return#2 ] zp ZP_DWORD:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp ZP_DWORD:133 [ mul16s::return#0 ] zp ZP_WORD:125 [ mul16s::$9 ] zp ZP_WORD:127 [ mul16s::$16 ] zp ZP_WORD:129 [ mul16s::$13 ] zp ZP_WORD:131 [ mul16s::$17 ] -Uplifting [bitmap_init] best 26404 combination zp ZP_WORD:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:142 [ bitmap_init::$5 ] zp ZP_BYTE:143 [ bitmap_init::$6 ] zp ZP_BYTE:140 [ bitmap_init::$7 ] +Uplifting [mul16u] best 27154 combination zp ZP_DWORD:23 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:27 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:21 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:17 [ mul16u::b#0 ] zp ZP_WORD:19 [ mul16u::b#1 ] zp ZP_DWORD:121 [ mul16u::return#2 ] zp ZP_DWORD:196 [ mul16u::return#3 ] +Uplifting [main] best 27154 combination zp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] zp ZP_WORD:71 [ main::$32 ] zp ZP_WORD:73 [ main::$34 ] zp ZP_DWORD:81 [ main::xpos#0 ] zp ZP_WORD:87 [ main::$11 ] zp ZP_WORD:91 [ main::$33 ] zp ZP_WORD:93 [ main::$35 ] zp ZP_DWORD:101 [ main::ypos#0 ] zp ZP_WORD:107 [ main::$17 ] zp ZP_WORD:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] zp ZP_WORD:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp ZP_WORD:75 [ main::cos_x#0 ] zp ZP_WORD:85 [ main::$10 ] zp ZP_WORD:95 [ main::sin_y#0 ] zp ZP_WORD:105 [ main::$16 ] zp ZP_WORD:109 [ main::y#0 ] zp ZP_WORD:4 [ main::r#10 main::r#1 ] zp ZP_WORD:89 [ main::x#0 ] +Uplifting [divr16u] best 26944 combination zp ZP_WORD:63 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:210 [ divr16u::return#2 ] zp ZP_WORD:214 [ divr16u::return#3 ] +Uplifting [mul16s] best 26944 combination zp ZP_WORD:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] zp ZP_WORD:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] zp ZP_DWORD:77 [ mul16s::return#3 ] zp ZP_DWORD:97 [ mul16s::return#4 ] zp ZP_DWORD:154 [ mul16s::return#2 ] zp ZP_DWORD:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp ZP_DWORD:133 [ mul16s::return#0 ] zp ZP_WORD:125 [ mul16s::$9 ] zp ZP_WORD:127 [ mul16s::$16 ] zp ZP_WORD:129 [ mul16s::$13 ] zp ZP_WORD:131 [ mul16s::$17 ] +Uplifting [bitmap_init] best 26434 combination zp ZP_WORD:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:142 [ bitmap_init::$5 ] zp ZP_BYTE:143 [ bitmap_init::$6 ] zp ZP_BYTE:140 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. -Uplifting [sin16s] best 26404 combination zp ZP_DWORD:52 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:152 [ sin16s::return#0 ] zp ZP_WORD:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:164 [ sin16s::$4 ] zp ZP_WORD:172 [ sin16s::x2#0 ] zp ZP_WORD:180 [ sin16s::x3_6#0 ] zp ZP_WORD:186 [ sin16s::x4#0 ] zp ZP_WORD:190 [ sin16s::x5#0 ] zp ZP_WORD:192 [ sin16s::x5_128#0 ] zp ZP_WORD:176 [ sin16s::x3#0 ] zp ZP_WORD:194 [ sin16s::usinx#1 ] zp ZP_WORD:168 [ sin16s::x1#0 ] zp ZP_WORD:182 [ sin16s::usinx#0 ] zp ZP_BYTE:51 [ sin16s::isUpper#2 ] -Uplifting [sin16s_gen2] best 26404 combination zp ZP_WORD:43 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp ZP_DWORD:158 [ sin16s_gen2::$6 ] zp ZP_DWORD:45 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp ZP_WORD:162 [ sin16s_gen2::$9 ] zp ZP_WORD:49 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp ZP_DWORD:148 [ sin16s_gen2::step#0 ] -Uplifting [mulu16_sel] best 26388 combination zp ZP_WORD:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:60 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:170 [ mulu16_sel::return#0 ] zp ZP_WORD:174 [ mulu16_sel::return#1 ] zp ZP_WORD:178 [ mulu16_sel::return#2 ] zp ZP_WORD:184 [ mulu16_sel::return#10 ] zp ZP_WORD:188 [ mulu16_sel::return#11 ] zp ZP_DWORD:200 [ mulu16_sel::$0 ] zp ZP_DWORD:204 [ mulu16_sel::$1 ] zp ZP_WORD:208 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [memset] best 26372 combination zp ZP_WORD:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:138 [ memset::end#0 ] zp ZP_WORD:31 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp ZP_WORD:33 [ memset::str#3 ] -Uplifting [] best 26372 combination zp ZP_BYTE:70 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ] zp ZP_WORD:224 [ rem16u#1 ] -Uplifting [bitmap_plot] best 26355 combination reg byte x [ bitmap_plot::y#0 ] zp ZP_WORD:116 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:112 [ bitmap_plot::x#0 ] zp ZP_WORD:118 [ bitmap_plot::plotter#1 ] zp ZP_WORD:114 [ bitmap_plot::plotter#0 ] -Uplifting [div32u16u] best 26355 combination zp ZP_DWORD:144 [ div32u16u::return#2 ] zp ZP_WORD:216 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:218 [ div32u16u::return#0 ] zp ZP_WORD:212 [ div32u16u::quotient_hi#0 ] -Uplifting [bitmap_clear] best 26355 combination -Uplifting [init_irq] best 26355 combination -Uplifting [irq] best 26355 combination +Uplifting [sin16s] best 26434 combination zp ZP_DWORD:52 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:152 [ sin16s::return#0 ] zp ZP_WORD:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:164 [ sin16s::$4 ] zp ZP_WORD:172 [ sin16s::x2#0 ] zp ZP_WORD:180 [ sin16s::x3_6#0 ] zp ZP_WORD:186 [ sin16s::x4#0 ] zp ZP_WORD:190 [ sin16s::x5#0 ] zp ZP_WORD:192 [ sin16s::x5_128#0 ] zp ZP_WORD:176 [ sin16s::x3#0 ] zp ZP_WORD:194 [ sin16s::usinx#1 ] zp ZP_WORD:168 [ sin16s::x1#0 ] zp ZP_WORD:182 [ sin16s::usinx#0 ] zp ZP_BYTE:51 [ sin16s::isUpper#2 ] +Uplifting [mulu16_sel] best 26418 combination zp ZP_WORD:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:60 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:170 [ mulu16_sel::return#0 ] zp ZP_WORD:174 [ mulu16_sel::return#1 ] zp ZP_WORD:178 [ mulu16_sel::return#2 ] zp ZP_WORD:184 [ mulu16_sel::return#10 ] zp ZP_WORD:188 [ mulu16_sel::return#11 ] zp ZP_DWORD:200 [ mulu16_sel::$0 ] zp ZP_DWORD:204 [ mulu16_sel::$1 ] zp ZP_WORD:208 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [sin16s_gen2] best 26418 combination zp ZP_DWORD:158 [ sin16s_gen2::$6 ] zp ZP_WORD:43 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] zp ZP_WORD:162 [ sin16s_gen2::$9 ] zp ZP_DWORD:45 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] zp ZP_WORD:49 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] zp ZP_DWORD:148 [ sin16s_gen2::step#0 ] +Uplifting [memset] best 26402 combination zp ZP_WORD:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:138 [ memset::end#0 ] zp ZP_WORD:31 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp ZP_WORD:33 [ memset::str#3 ] +Uplifting [] best 26402 combination zp ZP_BYTE:70 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ] zp ZP_WORD:224 [ rem16u#1 ] +Uplifting [bitmap_plot] best 26385 combination reg byte x [ bitmap_plot::y#0 ] zp ZP_WORD:116 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:112 [ bitmap_plot::x#0 ] zp ZP_WORD:118 [ bitmap_plot::plotter#1 ] zp ZP_WORD:114 [ bitmap_plot::plotter#0 ] +Uplifting [div32u16u] best 26385 combination zp ZP_DWORD:144 [ div32u16u::return#2 ] zp ZP_WORD:216 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:218 [ div32u16u::return#0 ] zp ZP_WORD:212 [ div32u16u::quotient_hi#0 ] +Uplifting [bitmap_clear] best 26385 combination +Uplifting [init_irq] best 26385 combination +Uplifting [irq] best 26385 combination Attempting to uplift remaining variables inzp ZP_BYTE:70 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ] -Uplifting [] best 26355 combination zp ZP_BYTE:70 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ] +Uplifting [] best 26385 combination zp ZP_BYTE:70 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] -Uplifting [main] best 26355 combination zp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] +Uplifting [main] best 26385 combination zp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:142 [ bitmap_init::$5 ] -Uplifting [bitmap_init] best 26295 combination reg byte a [ bitmap_init::$5 ] +Uplifting [bitmap_init] best 26325 combination reg byte a [ bitmap_init::$5 ] Attempting to uplift remaining variables inzp ZP_BYTE:143 [ bitmap_init::$6 ] -Uplifting [bitmap_init] best 26235 combination reg byte a [ bitmap_init::$6 ] +Uplifting [bitmap_init] best 26265 combination reg byte a [ bitmap_init::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:140 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 26235 combination zp ZP_BYTE:140 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 26265 combination zp ZP_BYTE:140 [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:51 [ sin16s::isUpper#2 ] -Uplifting [sin16s] best 26235 combination zp ZP_BYTE:51 [ sin16s::isUpper#2 ] +Uplifting [sin16s] best 26265 combination zp ZP_BYTE:51 [ sin16s::isUpper#2 ] Coalescing zero page register [ zp ZP_WORD:4 [ main::r#10 main::r#1 ] ] with [ zp ZP_WORD:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:194 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:176 [ sin16s::x3#0 ] ] - score: 2 @@ -6705,14 +6723,14 @@ Coalescing zero page register [ zp ZP_BYTE:51 [ sin16s::isUpper#2 ] ] with [ zp Coalescing zero page register [ zp ZP_DWORD:52 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] ] with [ zp ZP_DWORD:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] ] Coalescing zero page register [ zp ZP_WORD:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp ZP_WORD:17 [ mul16u::b#0 ] ] Coalescing zero page register [ zp ZP_WORD:63 [ 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 ] ] with [ zp ZP_WORD:21 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] -Coalescing zero page register [ zp ZP_WORD:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp ZP_WORD:43 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] -Coalescing zero page register [ zp ZP_WORD:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp ZP_WORD:49 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ] +Coalescing zero page register [ zp ZP_WORD:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp ZP_WORD:43 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] ] +Coalescing zero page register [ zp ZP_WORD:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp ZP_WORD:49 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] ] Coalescing zero page register [ zp ZP_WORD:114 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp ZP_WORD:105 [ main::$16 main::$17 main::y#0 ] ] Coalescing zero page register [ zp ZP_WORD:125 [ mul16s::$9 mul16s::$16 ] ] with [ zp ZP_WORD:116 [ bitmap_plot::$1 ] ] Coalescing zero page register [ zp ZP_WORD:162 [ sin16s_gen2::$9 ] ] with [ zp ZP_WORD:85 [ main::$10 main::$11 main::x#0 bitmap_plot::x#0 ] ] Coalescing zero page register [ zp ZP_WORD:168 [ sin16s::x1#0 ] ] with [ zp ZP_WORD:129 [ mul16s::$13 mul16s::$17 ] ] Coalescing zero page register [ zp ZP_WORD:212 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:170 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] -Coalescing zero page register [ zp ZP_WORD:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] with [ zp ZP_WORD:33 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ] +Coalescing zero page register [ zp ZP_WORD:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#6 sin16s_gen2::i#1 ] ] with [ zp ZP_WORD:33 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ] Coalescing zero page register [ zp ZP_WORD:114 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$16 main::$17 main::y#0 ] ] with [ zp ZP_WORD:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] ] Coalescing zero page register [ zp ZP_WORD:125 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 ] ] with [ zp ZP_WORD:63 [ 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 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] Coalescing zero page register [ zp ZP_BYTE:140 [ bitmap_init::$7 ] ] with [ zp ZP_BYTE:51 [ sin16s::isUpper#2 main::r_add#10 main::r_add#12 main::r_add#1 ] ] @@ -6720,10 +6738,10 @@ Coalescing zero page register [ zp ZP_WORD:212 [ div32u16u::quotient_hi#0 mulu16 Allocated (was zp ZP_WORD:19) zp ZP_WORD:2 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 main::idx_x#11 main::idx_x#10 main::idx_x#1 ] Allocated (was zp ZP_DWORD:27) zp ZP_DWORD:4 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] Allocated (was zp ZP_WORD:31) zp ZP_WORD:8 [ memset::num#2 memset::end#0 main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ] -Allocated (was zp ZP_DWORD:45) zp ZP_DWORD:10 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] +Allocated (was zp ZP_DWORD:45) zp ZP_DWORD:10 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] Allocated (was zp ZP_DWORD:52) zp ZP_DWORD:14 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] -Allocated (was zp ZP_WORD:65) zp ZP_WORD:18 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] -Allocated (was zp ZP_WORD:67) zp ZP_WORD:20 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +Allocated (was zp ZP_WORD:65) zp ZP_WORD:18 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#6 sin16s_gen2::i#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] +Allocated (was zp ZP_WORD:67) zp ZP_WORD:20 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] Allocated (was zp ZP_BYTE:70) zp ZP_BYTE:22 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ] Allocated (was zp ZP_WORD:114) zp ZP_WORD:23 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$16 main::$17 main::y#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] Allocated (was zp ZP_WORD:125) zp ZP_WORD:25 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] @@ -7677,46 +7695,35 @@ sin16s_gen2: { // sin16s_gen2::@3 b3: // [140] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 - // [141] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] - b1_from_b3: - // [141] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[$200]) SINUS#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [141] phi from sin16s_gen2::@3 to sin16s_gen2::@2 [phi:sin16s_gen2::@3->sin16s_gen2::@2] + b2_from_b3: + // [141] phi (signed word*) sin16s_gen2::sintab#10 = (const signed word[$200]) SINUS#0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#0] -- pwsz1=pwsc1 lda #SINUS sta sintab+1 - // [141] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 + // [141] phi (dword) sin16s_gen2::x#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [141] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [141] phi (word) sin16s_gen2::i#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen2::@1 - b1: - // [142] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen2::@2] + b2_from_b1: + // [141] phi (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@1->sin16s_gen2::@2#0] -- register_copy + // [141] phi (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#1] -- register_copy + // [141] phi (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#2] -- register_copy + jmp b2 // sin16s_gen2::@2 b2: - // [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [142] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -7725,14 +7732,14 @@ sin16s_gen2: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [145] call sin16s + // [143] call sin16s jsr sin16s - // [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [144] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 jmp b4 // sin16s_gen2::@4 b4: - // [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - // [148] call mul16s + // [145] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + // [146] call mul16s // [63] phi from sin16s_gen2::@4 to mul16s [phi:sin16s_gen2::@4->mul16s] mul16s_from_b4: // [63] phi (signed word) mul16s::b#3 = (const signed word) sin16s_gen2::ampl#0 [phi:sin16s_gen2::@4->mul16s#0] -- vwsz1=vwsc1 @@ -7742,24 +7749,24 @@ sin16s_gen2: { sta mul16s.b+1 // [63] phi (signed word) mul16s::a#3 = (signed word) mul16s::a#0 [phi:sin16s_gen2::@4->mul16s#1] -- register_copy jsr mul16s - // [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + // [147] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 jmp b5 // sin16s_gen2::@5 b5: - // [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - // [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [148] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + // [149] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda _6+2 sta _9 lda _6+3 sta _9+1 - // [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [150] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda _9 sta (sintab),y iny lda _9+1 sta (sintab),y - // [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [151] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -7767,7 +7774,7 @@ sin16s_gen2: { bcc !+ inc sintab+1 !: - // [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [152] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -7781,17 +7788,29 @@ sin16s_gen2: { lda x+3 adc step+3 sta x+3 - // [155] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 + // [153] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [141] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] - b1_from_b5: - // [141] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [141] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [141] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen2::@1 + b1: + // [154] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #sin16s_gen2::@1] - // [141] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[$200]) SINUS#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [141] phi from sin16s_gen2::@3 to sin16s_gen2::@2 [phi:sin16s_gen2::@3->sin16s_gen2::@2] + // [141] phi (signed word*) sin16s_gen2::sintab#10 = (const signed word[$200]) SINUS#0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#0] -- pwsz1=pwsc1 lda #SINUS sta sintab+1 - // [141] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 + // [141] phi (dword) sin16s_gen2::x#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#1] -- vduz1=vbuc1 lda #0 sta x sta x+1 sta x+2 sta x+3 - // [141] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [141] phi (word) sin16s_gen2::i#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#2] -- vwuz1=vbuc1 sta i sta i+1 - // u[4.28] - // sin16s_gen2::@1 - b1: - // for( word i=0; iwavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen2::@2] + // [141] phi (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@1->sin16s_gen2::@2#0] -- register_copy + // [141] phi (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#1] -- register_copy + // [141] phi (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#2] -- register_copy // sin16s_gen2::@2 b2: // sin16s(x) - // [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [142] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -10024,13 +10035,13 @@ sin16s_gen2: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [145] call sin16s + // [143] call sin16s jsr sin16s - // [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [144] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 // sin16s_gen2::@4 // mul16s(sin16s(x), ampl) - // [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - // [148] call mul16s + // [145] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + // [146] call mul16s // [63] phi from sin16s_gen2::@4 to mul16s [phi:sin16s_gen2::@4->mul16s] // [63] phi (signed word) mul16s::b#3 = (const signed word) sin16s_gen2::ampl#0 [phi:sin16s_gen2::@4->mul16s#0] -- vwsz1=vwsc1 lda #mul16s#1] -- register_copy jsr mul16s // mul16s(sin16s(x), ampl) - // [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + // [147] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 // sin16s_gen2::@5 - // [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + // [148] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 // >mul16s(sin16s(x), ampl) - // [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [149] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda _6+2 sta _9 lda _6+3 sta _9+1 // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl) - // [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [150] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda _9 sta (sintab),y @@ -10058,7 +10069,7 @@ sin16s_gen2: { lda _9+1 sta (sintab),y // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl); - // [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [151] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -10067,7 +10078,7 @@ sin16s_gen2: { inc sintab+1 !: // x = x + step - // [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [152] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -10082,16 +10093,26 @@ sin16s_gen2: { adc step+3 sta x+3 // for( word i=0; isin16s_gen2::@1] - // [141] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [141] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [141] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy - jmp b1 + // u[4.28] + // sin16s_gen2::@1 + // [154] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>wavelength + bcc b2 + bne !+ + lda i + cmp # (const word) main::toD0181_$4#0 @@ -1821,7 +1831,7 @@ Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in assignment *(COSTAB#0+$20 + main::$10) Consolidated array index constant in assignment *(SINTAB#0+$20 + main::$13) Successful SSA optimization Pass2ConstantAdditionElimination -Alias (byte) main::a#2 = (byte~) main::$10 (byte~) main::$13 +Alias (byte) main::a#5 = (byte~) main::$10 (byte~) main::$13 Successful SSA optimization Pass2AliasElimination Added new block during phi lifting bitmap_init::@9(between bitmap_init::@2 and bitmap_init::@1) Added new block during phi lifting bitmap_init::@10(between bitmap_init::@1 and bitmap_init::@2) @@ -1833,6 +1843,7 @@ Added new block during phi lifting bitmap_line::@27(between bitmap_line::@13 and Added new block during phi lifting bitmap_line::@28(between bitmap_line::@8 and bitmap_line::@3) Added new block during phi lifting bitmap_line::@29(between bitmap_line::@13 and bitmap_line::@12) Added new block during phi lifting bitmap_line::@30(between bitmap_line::@23 and bitmap_line::@13) +Added new block during phi lifting main::@17(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @8 Adding NOP phi() at start of @46 @@ -1843,6 +1854,7 @@ Adding NOP phi() at start of main Adding NOP phi() at start of main::@14 Adding NOP phi() at start of main::toD0181 Adding NOP phi() at start of main::toD0181_@return +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of main::@7 Adding NOP phi() at start of bitmap_line::@22 Adding NOP phi() at start of bitmap_line::@20 @@ -1857,65 +1869,67 @@ Adding NOP phi() at start of bitmap_init::@3 Adding NOP phi() at start of bitmap_init::@4 CALL GRAPH Calls in [] to main:4 -Calls in [main] to bitmap_init:8 bitmap_clear:10 bitmap_line:25 -Calls in [bitmap_line] to abs_u16:32 abs_u16:37 sgn_u16:44 sgn_u16:49 bitmap_plot:62 bitmap_plot:79 bitmap_plot:96 bitmap_plot:117 -Calls in [bitmap_clear] to memset:144 memset:146 +Calls in [main] to bitmap_init:8 bitmap_clear:10 bitmap_line:23 +Calls in [bitmap_line] to abs_u16:33 abs_u16:38 sgn_u16:45 sgn_u16:50 bitmap_plot:63 bitmap_plot:80 bitmap_plot:97 bitmap_plot:118 +Calls in [bitmap_clear] to memset:145 memset:147 Created 30 initial phi equivalence classes -Coalesced [28] main::i#5 ← main::i#1 -Coalesced [29] main::a#5 ← main::a#1 -Coalesced [31] abs_u16::w#5 ← abs_u16::w#0 -Coalesced [36] abs_u16::w#6 ← abs_u16::w#1 -Coalesced [43] sgn_u16::w#3 ← sgn_u16::w#0 -Coalesced [48] sgn_u16::w#4 ← sgn_u16::w#1 -Coalesced [54] bitmap_line::y#20 ← bitmap_line::y1#0 -Coalesced [55] bitmap_line::x#20 ← bitmap_line::x1#0 -Coalesced [56] bitmap_line::e#7 ← bitmap_line::e#0 -Coalesced [60] bitmap_plot::y#8 ← bitmap_plot::y#1 -Coalesced [61] bitmap_plot::x#8 ← bitmap_plot::x#1 -Coalesced [68] bitmap_line::x#23 ← bitmap_line::x#1 -Coalesced [69] bitmap_line::e#10 ← bitmap_line::e#2 -Coalesced [72] bitmap_line::y#23 ← bitmap_line::y#1 -Coalesced [73] bitmap_line::x#25 ← bitmap_line::x#12 -Coalesced [77] bitmap_plot::y#6 ← bitmap_plot::y#2 -Coalesced [78] bitmap_plot::x#6 ← bitmap_plot::x#2 -Coalesced [82] bitmap_line::y#21 ← bitmap_line::y#1 -Coalesced [83] bitmap_line::x#21 ← bitmap_line::x#12 -Coalesced [84] bitmap_line::e#8 ← bitmap_line::e#6 -Coalesced (already) [85] bitmap_line::x#22 ← bitmap_line::x#13 -Coalesced [86] bitmap_line::e#9 ← bitmap_line::e#1 -Coalesced [88] bitmap_line::y#25 ← bitmap_line::y1#0 -Coalesced [89] bitmap_line::x#27 ← bitmap_line::x1#0 -Coalesced [90] bitmap_line::e1#8 ← bitmap_line::e1#0 -Coalesced [94] bitmap_plot::y#5 ← bitmap_plot::y#3 -Coalesced [95] bitmap_plot::x#5 ← bitmap_plot::x#3 -Coalesced [102] bitmap_line::y#26 ← bitmap_line::y#2 -Coalesced [103] bitmap_line::e1#9 ← bitmap_line::e1#2 -Coalesced [106] bitmap_line::y#22 ← bitmap_line::y#13 -Coalesced [107] bitmap_line::x#24 ← bitmap_line::x#15 -Coalesced (already) [108] bitmap_line::y#24 ← bitmap_line::y#13 -Coalesced (already) [109] bitmap_line::x#26 ← bitmap_line::x#15 -Coalesced [110] bitmap_line::e1#7 ← bitmap_line::e1#6 -Coalesced (already) [111] bitmap_line::y#27 ← bitmap_line::y#15 -Coalesced [112] bitmap_line::e1#10 ← bitmap_line::e1#1 -Coalesced [115] bitmap_plot::y#7 ← bitmap_plot::y#0 -Coalesced [116] bitmap_plot::x#7 ← bitmap_plot::x#0 -Coalesced [138] abs_u16::return#9 ← abs_u16::w#2 -Coalesced [142] abs_u16::return#8 ← abs_u16::return#2 -Coalesced [159] memset::dst#5 ← memset::dst#1 -Coalesced [179] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 -Coalesced [184] bitmap_init::y#5 ← bitmap_init::y#1 -Coalesced [185] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 -Coalesced (already) [186] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 -Coalesced [187] bitmap_init::bits#5 ← bitmap_init::bits#4 -Coalesced [188] bitmap_init::x#5 ← bitmap_init::x#1 -Coalesced [189] bitmap_init::bits#6 ← bitmap_init::bits#1 +Coalesced [29] main::i#8 ← main::i#1 +Coalesced [30] main::a#8 ← main::a#1 +Coalesced [32] abs_u16::w#5 ← abs_u16::w#0 +Coalesced [37] abs_u16::w#6 ← abs_u16::w#1 +Coalesced [44] sgn_u16::w#3 ← sgn_u16::w#0 +Coalesced [49] sgn_u16::w#4 ← sgn_u16::w#1 +Coalesced [55] bitmap_line::y#20 ← bitmap_line::y1#0 +Coalesced [56] bitmap_line::x#20 ← bitmap_line::x1#0 +Coalesced [57] bitmap_line::e#7 ← bitmap_line::e#0 +Coalesced [61] bitmap_plot::y#8 ← bitmap_plot::y#1 +Coalesced [62] bitmap_plot::x#8 ← bitmap_plot::x#1 +Coalesced [69] bitmap_line::x#23 ← bitmap_line::x#1 +Coalesced [70] bitmap_line::e#10 ← bitmap_line::e#2 +Coalesced [73] bitmap_line::y#23 ← bitmap_line::y#1 +Coalesced [74] bitmap_line::x#25 ← bitmap_line::x#12 +Coalesced [78] bitmap_plot::y#6 ← bitmap_plot::y#2 +Coalesced [79] bitmap_plot::x#6 ← bitmap_plot::x#2 +Coalesced [83] bitmap_line::y#21 ← bitmap_line::y#1 +Coalesced [84] bitmap_line::x#21 ← bitmap_line::x#12 +Coalesced [85] bitmap_line::e#8 ← bitmap_line::e#6 +Coalesced (already) [86] bitmap_line::x#22 ← bitmap_line::x#13 +Coalesced [87] bitmap_line::e#9 ← bitmap_line::e#1 +Coalesced [89] bitmap_line::y#25 ← bitmap_line::y1#0 +Coalesced [90] bitmap_line::x#27 ← bitmap_line::x1#0 +Coalesced [91] bitmap_line::e1#8 ← bitmap_line::e1#0 +Coalesced [95] bitmap_plot::y#5 ← bitmap_plot::y#3 +Coalesced [96] bitmap_plot::x#5 ← bitmap_plot::x#3 +Coalesced [103] bitmap_line::y#26 ← bitmap_line::y#2 +Coalesced [104] bitmap_line::e1#9 ← bitmap_line::e1#2 +Coalesced [107] bitmap_line::y#22 ← bitmap_line::y#13 +Coalesced [108] bitmap_line::x#24 ← bitmap_line::x#15 +Coalesced (already) [109] bitmap_line::y#24 ← bitmap_line::y#13 +Coalesced (already) [110] bitmap_line::x#26 ← bitmap_line::x#15 +Coalesced [111] bitmap_line::e1#7 ← bitmap_line::e1#6 +Coalesced (already) [112] bitmap_line::y#27 ← bitmap_line::y#15 +Coalesced [113] bitmap_line::e1#10 ← bitmap_line::e1#1 +Coalesced [116] bitmap_plot::y#7 ← bitmap_plot::y#0 +Coalesced [117] bitmap_plot::x#7 ← bitmap_plot::x#0 +Coalesced [139] abs_u16::return#9 ← abs_u16::w#2 +Coalesced [143] abs_u16::return#8 ← abs_u16::return#2 +Coalesced [160] memset::dst#5 ← memset::dst#1 +Coalesced [180] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 +Coalesced [185] bitmap_init::y#5 ← bitmap_init::y#1 +Coalesced [186] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 +Coalesced (already) [187] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 +Coalesced [188] bitmap_init::bits#5 ← bitmap_init::bits#4 +Coalesced [189] bitmap_init::x#5 ← bitmap_init::x#1 +Coalesced [190] bitmap_init::bits#6 ← bitmap_init::bits#1 Coalesced down to 19 phi equivalence classes Culled Empty Block (label) @8 Culled Empty Block (label) @46 Culled Empty Block (label) @48 Culled Empty Block (label) main::toD0181_@return +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@7 +Culled Empty Block (label) main::@17 Culled Empty Block (label) bitmap_line::@28 Culled Empty Block (label) bitmap_line::@22 Culled Empty Block (label) bitmap_line::@25 @@ -1998,28 +2012,28 @@ main::toD0181: scope:[main] from main::@6 to:main::@4 main::@4: scope:[main] from main::toD0181 [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 - to:main::@1 -main::@1: scope:[main] from main::@4 main::@7 - [11] (byte) main::a#2 ← phi( main::@4/(byte) 0 main::@7/(byte) main::a#1 ) - [11] (byte) main::i#2 ← phi( main::@4/(byte) 0 main::@7/(byte) main::i#1 ) - [12] if((byte) main::i#2!=(byte) 8) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 main::@3 - [13] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) - to:main::@3 -main::@2: scope:[main] from main::@1 - [14] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#2) - [15] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 - [16] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#2) - [17] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#2) - [18] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 - [19] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#2) - [20] call bitmap_line + to:main::@2 +main::@2: scope:[main] from main::@1 main::@4 + [11] (byte) main::a#5 ← phi( main::@1/(byte) main::a#1 main::@4/(byte) 0 ) + [11] (byte) main::i#5 ← phi( main::@1/(byte) main::i#1 main::@4/(byte) 0 ) + [12] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#5) + [13] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 + [14] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#5) + [15] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#5) + [16] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 + [17] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#5) + [18] call bitmap_line to:main::@7 main::@7: scope:[main] from main::@2 - [21] (byte) main::a#1 ← (byte) main::a#2 + (byte) $20 - [22] (byte) main::i#1 ← ++ (byte) main::i#2 + [19] (byte) main::a#1 ← (byte) main::a#5 + (byte) $20 + [20] (byte) main::i#1 ← ++ (byte) main::i#5 to:main::@1 +main::@1: scope:[main] from main::@7 + [21] if((byte) main::i#1!=(byte) 8) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 main::@3 + [22] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) + to:main::@3 bitmap_line: scope:[bitmap_line] from main::@2 [23] (word) abs_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [24] call abs_u16 @@ -2349,11 +2363,11 @@ VARIABLE REGISTER WEIGHTS (word~) main::$11 22.0 (word~) main::$7 22.0 (byte) main::a -(byte) main::a#1 11.0 -(byte) main::a#2 2.4444444444444446 +(byte) main::a#1 7.333333333333333 +(byte) main::a#5 2.75 (byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 3.3000000000000003 +(byte) main::i#1 16.5 +(byte) main::i#5 2.4444444444444446 (word~) main::toD0181_$0 (number~) main::toD0181_$1 (number~) main::toD0181_$2 @@ -2393,8 +2407,8 @@ VARIABLE REGISTER WEIGHTS (word) sgn_u16::w#2 6.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] -[ main::a#2 main::a#1 ] +[ main::i#5 main::i#1 ] +[ main::a#5 main::a#1 ] [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] @@ -2438,8 +2452,8 @@ Added variable bitmap_init::$4 to zero page equivalence class [ bitmap_init::$4 Added variable bitmap_init::$5 to zero page equivalence class [ bitmap_init::$5 ] Added variable bitmap_init::$6 to zero page equivalence class [ bitmap_init::$6 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ main::a#2 main::a#1 ] +[ main::i#5 main::i#1 ] +[ main::a#5 main::a#1 ] [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] @@ -2482,8 +2496,8 @@ Complete equivalence classes [ bitmap_init::$4 ] [ bitmap_init::$5 ] [ bitmap_init::$6 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::a#2 main::a#1 ] +Allocated zp ZP_BYTE:2 [ main::i#5 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::a#5 main::a#1 ] Allocated zp ZP_WORD:4 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] Allocated zp ZP_WORD:6 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] Allocated zp ZP_WORD:8 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] @@ -2599,36 +2613,29 @@ main: { // [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 - // [11] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [11] phi (byte) main::a#2 = (byte) 0 [phi:main::@4->main::@1#0] -- vbuz1=vbuc1 + // [11] phi from main::@4 to main::@2 [phi:main::@4->main::@2] + b2_from_b4: + // [11] phi (byte) main::a#5 = (byte) 0 [phi:main::@4->main::@2#0] -- vbuz1=vbuc1 lda #0 sta a - // [11] phi (byte) main::i#2 = (byte) 0 [phi:main::@4->main::@1#1] -- vbuz1=vbuc1 + // [11] phi (byte) main::i#5 = (byte) 0 [phi:main::@4->main::@2#1] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [12] if((byte) main::i#2!=(byte) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 - lda #8 - cmp i - bne b2 - jmp b3 - // main::@3 - b3: - // [13] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 - inc SCREEN+$3e7 - jmp b3 + jmp b2 + // [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [11] phi (byte) main::a#5 = (byte) main::a#1 [phi:main::@1->main::@2#0] -- register_copy + // [11] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 // main::@2 b2: - // [14] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#2) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + // [12] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#5) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy a lda COSTAB,y sta _7 lda #0 sta _7+1 - // [15] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 -- vwuz1=vwuz2_plus_vbuc1 + // [13] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 -- vwuz1=vwuz2_plus_vbuc1 lda #$78 clc adc _7 @@ -2636,19 +2643,19 @@ main: { lda #0 adc _7+1 sta bitmap_line.x1+1 - // [16] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#2) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + // [14] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#5) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy a lda SINTAB,y sta bitmap_line.y1 lda #0 sta bitmap_line.y1+1 - // [17] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#2) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + // [15] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#5) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy a lda COSTAB+$20,y sta _11 lda #0 sta _11+1 - // [18] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 -- vwuz1=vwuz2_plus_vbuc1 + // [16] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 -- vwuz1=vwuz2_plus_vbuc1 lda #$78 clc adc _11 @@ -2656,28 +2663,36 @@ main: { lda #0 adc _11+1 sta bitmap_line.x2+1 - // [19] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#2) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + // [17] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#5) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy a lda SINTAB+$20,y sta bitmap_line.y2 lda #0 sta bitmap_line.y2+1 - // [20] call bitmap_line + // [18] call bitmap_line jsr bitmap_line jmp b7 // main::@7 b7: - // [21] (byte) main::a#1 ← (byte) main::a#2 + (byte) $20 -- vbuz1=vbuz1_plus_vbuc1 + // [19] (byte) main::a#1 ← (byte) main::a#5 + (byte) $20 -- vbuz1=vbuz1_plus_vbuc1 lax a axs #-[$20] stx a - // [22] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [20] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuz1=_inc_vbuz1 inc i - // [11] phi from main::@7 to main::@1 [phi:main::@7->main::@1] - b1_from_b7: - // [11] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@7->main::@1#0] -- register_copy - // [11] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@7->main::@1#1] -- register_copy jmp b1 + // main::@1 + b1: + // [21] if((byte) main::i#1!=(byte) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #8 + cmp i + bne b2_from_b1 + jmp b3 + // main::@3 + b3: + // [22] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + inc SCREEN+$3e7 + jmp b3 } // bitmap_line // Draw a line on the bitmap using bresenhams algorithm @@ -3459,63 +3474,63 @@ REGISTER UPLIFT POTENTIAL REGISTERS Equivalence Class zp ZP_BYTE:71 [ bitmap_init::$4 ] has ALU potential. Statement [8] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [14] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#2) [ main::i#2 main::a#2 main::$7 ] ( main:2 [ main::i#2 main::a#2 main::$7 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::a#2 main::a#1 ] -Statement [15] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 [ main::i#2 main::a#2 bitmap_line::x1#0 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 ] ) always clobbers reg byte a -Statement [16] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#2) [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 ] ) always clobbers reg byte a -Statement [17] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#2) [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 main::$11 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 main::$11 ] ) always clobbers reg byte a -Statement [18] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ) always clobbers reg byte a -Statement [19] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#2) [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 ] ) always clobbers reg byte a -Statement [21] (byte) main::a#1 ← (byte) main::a#2 + (byte) $20 [ main::i#2 main::a#1 ] ( main:2 [ main::i#2 main::a#1 ] ) always clobbers reg byte a -Statement [23] (word) abs_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#0 ] ) always clobbers reg byte a -Statement [25] (word) abs_u16::return#0 ← (word) abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#0 ] ) always clobbers reg byte a -Statement [26] (word) bitmap_line::dx#0 ← (word) abs_u16::return#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ) always clobbers reg byte a -Statement [27] (word) abs_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#1 ] ) always clobbers reg byte a -Statement [29] (word) abs_u16::return#1 ← (word) abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#1 ] ) always clobbers reg byte a -Statement [30] (word) bitmap_line::dy#0 ← (word) abs_u16::return#1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a -Statement [31] if((word) bitmap_line::dx#0!=(byte) 0) goto bitmap_line::@1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a -Statement [32] if((word) bitmap_line::dy#0==(byte) 0) goto bitmap_line::@4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a -Statement [33] (word) sgn_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::w#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::w#0 ] ) always clobbers reg byte a -Statement [35] (word) sgn_u16::return#0 ← (word) sgn_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::return#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::return#0 ] ) always clobbers reg byte a -Statement [36] (word) bitmap_line::sx#0 ← (word) sgn_u16::return#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 ] ) always clobbers reg byte a -Statement [37] (word) sgn_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::w#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::w#1 ] ) always clobbers reg byte a -Statement [39] (word) sgn_u16::return#1 ← (word) sgn_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::return#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::return#1 ] ) always clobbers reg byte a -Statement [40] (word) bitmap_line::sy#0 ← (word) sgn_u16::return#1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ) always clobbers reg byte a -Statement [41] if((word) bitmap_line::dx#0>(word) bitmap_line::dy#0) goto bitmap_line::@2 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ) always clobbers reg byte a -Statement [42] (word) bitmap_line::e#0 ← (word) bitmap_line::dx#0 >> (byte) 1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e#0 ] ) always clobbers reg byte a -Statement [44] (byte) bitmap_plot::y#1 ← (byte)(word) bitmap_line::y#4 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 ] ) always clobbers reg byte a -Statement [45] (word) bitmap_plot::x#1 ← (word) bitmap_line::x#13 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 bitmap_plot::x#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 bitmap_plot::x#1 ] ) always clobbers reg byte a +Statement [12] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#5) [ main::i#5 main::a#5 main::$7 ] ( main:2 [ main::i#5 main::a#5 main::$7 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#5 main::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::a#5 main::a#1 ] +Statement [13] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 [ main::i#5 main::a#5 bitmap_line::x1#0 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 ] ) always clobbers reg byte a +Statement [14] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#5) [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 ] ) always clobbers reg byte a +Statement [15] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#5) [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 main::$11 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 main::$11 ] ) always clobbers reg byte a +Statement [16] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ) always clobbers reg byte a +Statement [17] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#5) [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 ] ) always clobbers reg byte a +Statement [19] (byte) main::a#1 ← (byte) main::a#5 + (byte) $20 [ main::i#5 main::a#1 ] ( main:2 [ main::i#5 main::a#1 ] ) always clobbers reg byte a +Statement [23] (word) abs_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#0 ] ) always clobbers reg byte a +Statement [25] (word) abs_u16::return#0 ← (word) abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#0 ] ) always clobbers reg byte a +Statement [26] (word) bitmap_line::dx#0 ← (word) abs_u16::return#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ) always clobbers reg byte a +Statement [27] (word) abs_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#1 ] ) always clobbers reg byte a +Statement [29] (word) abs_u16::return#1 ← (word) abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#1 ] ) always clobbers reg byte a +Statement [30] (word) bitmap_line::dy#0 ← (word) abs_u16::return#1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a +Statement [31] if((word) bitmap_line::dx#0!=(byte) 0) goto bitmap_line::@1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a +Statement [32] if((word) bitmap_line::dy#0==(byte) 0) goto bitmap_line::@4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a +Statement [33] (word) sgn_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::w#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::w#0 ] ) always clobbers reg byte a +Statement [35] (word) sgn_u16::return#0 ← (word) sgn_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::return#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::return#0 ] ) always clobbers reg byte a +Statement [36] (word) bitmap_line::sx#0 ← (word) sgn_u16::return#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 ] ) always clobbers reg byte a +Statement [37] (word) sgn_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::w#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::w#1 ] ) always clobbers reg byte a +Statement [39] (word) sgn_u16::return#1 ← (word) sgn_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::return#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::return#1 ] ) always clobbers reg byte a +Statement [40] (word) bitmap_line::sy#0 ← (word) sgn_u16::return#1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ) always clobbers reg byte a +Statement [41] if((word) bitmap_line::dx#0>(word) bitmap_line::dy#0) goto bitmap_line::@2 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ) always clobbers reg byte a +Statement [42] (word) bitmap_line::e#0 ← (word) bitmap_line::dx#0 >> (byte) 1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e#0 ] ) always clobbers reg byte a +Statement [44] (byte) bitmap_plot::y#1 ← (byte)(word) bitmap_line::y#4 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 ] ) always clobbers reg byte a +Statement [45] (word) bitmap_plot::x#1 ← (word) bitmap_line::x#13 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 bitmap_plot::x#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 bitmap_plot::x#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ bitmap_plot::y#4 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ] -Statement [47] (word) bitmap_line::y#1 ← (word) bitmap_line::y#4 + (word) bitmap_line::sy#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::e#3 bitmap_line::y#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::e#3 bitmap_line::y#1 ] ) always clobbers reg byte a -Statement [48] (word) bitmap_line::e#1 ← (word) bitmap_line::e#3 + (word) bitmap_line::dx#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ) always clobbers reg byte a -Statement [49] if((word) bitmap_line::dy#0>=(word) bitmap_line::e#1) goto bitmap_line::@7 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ) always clobbers reg byte a -Statement [50] (word) bitmap_line::x#1 ← (word) bitmap_line::x#13 + (word) bitmap_line::sx#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::e#1 bitmap_line::x#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::e#1 bitmap_line::x#1 ] ) always clobbers reg byte a -Statement [51] (word) bitmap_line::e#2 ← (word) bitmap_line::e#1 - (word) bitmap_line::dy#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#1 bitmap_line::e#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#1 bitmap_line::e#2 ] ) always clobbers reg byte a -Statement [53] if((word) bitmap_line::y#1!=(word) bitmap_line::y2#0) goto bitmap_line::@6 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#12 bitmap_line::e#6 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#12 bitmap_line::e#6 ] ) always clobbers reg byte a -Statement [55] (byte) bitmap_plot::y#2 ← (byte)(word) bitmap_line::y#7 [ bitmap_line::x#6 bitmap_plot::y#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x#6 bitmap_plot::y#2 ] ) always clobbers reg byte a -Statement [56] (word) bitmap_plot::x#2 ← (word) bitmap_line::x#6 [ bitmap_plot::y#2 bitmap_plot::x#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_plot::y#2 bitmap_plot::x#2 ] ) always clobbers reg byte a -Statement [59] (word) bitmap_line::e1#0 ← (word) bitmap_line::dy#0 >> (byte) 1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e1#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e1#0 ] ) always clobbers reg byte a -Statement [61] (byte) bitmap_plot::y#3 ← (byte)(word) bitmap_line::y#15 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 ] ) always clobbers reg byte a -Statement [62] (word) bitmap_plot::x#3 ← (word) bitmap_line::x#7 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 bitmap_plot::x#3 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 bitmap_plot::x#3 ] ) always clobbers reg byte a -Statement [64] (word) bitmap_line::x#15 ← (word) bitmap_line::x#7 + (word) bitmap_line::sx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#3 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#3 ] ) always clobbers reg byte a -Statement [65] (word) bitmap_line::e1#1 ← (word) bitmap_line::e1#3 + (word) bitmap_line::dy#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ) always clobbers reg byte a -Statement [66] if((word) bitmap_line::dx#0>=(word) bitmap_line::e1#1) goto bitmap_line::@10 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ) always clobbers reg byte a -Statement [67] (word) bitmap_line::y#2 ← (word) bitmap_line::y#15 + (word) bitmap_line::sy#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::e1#1 bitmap_line::y#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::e1#1 bitmap_line::y#2 ] ) always clobbers reg byte a -Statement [68] (word) bitmap_line::e1#2 ← (word) bitmap_line::e1#1 - (word) bitmap_line::dx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ) always clobbers reg byte a -Statement [70] if((word) bitmap_line::x#15!=(word) bitmap_line::x2#0) goto bitmap_line::@9 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#13 bitmap_line::x#15 bitmap_line::e1#6 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#13 bitmap_line::x#15 bitmap_line::e1#6 ] ) always clobbers reg byte a -Statement [71] (byte) bitmap_plot::y#0 ← (byte)(word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_plot::y#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_plot::y#0 ] ) always clobbers reg byte a -Statement [72] (word) bitmap_plot::x#0 ← (word) bitmap_line::x1#0 [ bitmap_plot::y#0 bitmap_plot::x#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_plot::y#0 bitmap_plot::x#0 ] ) always clobbers reg byte a -Statement [75] (word) bitmap_plot::plotter#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a -Statement [76] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#4 & (word) $fff8 [ bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a -Statement [77] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#4 bitmap_plot::plotter#1 ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#1 ] ) always clobbers reg byte a -Statement [78] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#4 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a -Statement [79] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ main::a#2 main::a#1 ] -Statement [82] (byte~) sgn_u16::$0 ← > (word) sgn_u16::w#2 [ sgn_u16::$0 ] ( main:2::bitmap_line:20::sgn_u16:34 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::$0 ] main:2::bitmap_line:20::sgn_u16:38 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::$0 ] ) always clobbers reg byte a -Statement [89] (byte~) abs_u16::$0 ← > (word) abs_u16::w#2 [ abs_u16::w#2 abs_u16::$0 ] ( main:2::bitmap_line:20::abs_u16:24 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#2 abs_u16::$0 ] main:2::bitmap_line:20::abs_u16:28 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#2 abs_u16::$0 ] ) always clobbers reg byte a -Statement [92] (word) abs_u16::return#2 ← - (word) abs_u16::w#2 [ abs_u16::return#2 ] ( main:2::bitmap_line:20::abs_u16:24 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#2 ] main:2::bitmap_line:20::abs_u16:28 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#2 ] ) always clobbers reg byte a +Statement [47] (word) bitmap_line::y#1 ← (word) bitmap_line::y#4 + (word) bitmap_line::sy#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::e#3 bitmap_line::y#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::e#3 bitmap_line::y#1 ] ) always clobbers reg byte a +Statement [48] (word) bitmap_line::e#1 ← (word) bitmap_line::e#3 + (word) bitmap_line::dx#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ) always clobbers reg byte a +Statement [49] if((word) bitmap_line::dy#0>=(word) bitmap_line::e#1) goto bitmap_line::@7 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ) always clobbers reg byte a +Statement [50] (word) bitmap_line::x#1 ← (word) bitmap_line::x#13 + (word) bitmap_line::sx#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::e#1 bitmap_line::x#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::e#1 bitmap_line::x#1 ] ) always clobbers reg byte a +Statement [51] (word) bitmap_line::e#2 ← (word) bitmap_line::e#1 - (word) bitmap_line::dy#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#1 bitmap_line::e#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#1 bitmap_line::e#2 ] ) always clobbers reg byte a +Statement [53] if((word) bitmap_line::y#1!=(word) bitmap_line::y2#0) goto bitmap_line::@6 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#12 bitmap_line::e#6 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#12 bitmap_line::e#6 ] ) always clobbers reg byte a +Statement [55] (byte) bitmap_plot::y#2 ← (byte)(word) bitmap_line::y#7 [ bitmap_line::x#6 bitmap_plot::y#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x#6 bitmap_plot::y#2 ] ) always clobbers reg byte a +Statement [56] (word) bitmap_plot::x#2 ← (word) bitmap_line::x#6 [ bitmap_plot::y#2 bitmap_plot::x#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_plot::y#2 bitmap_plot::x#2 ] ) always clobbers reg byte a +Statement [59] (word) bitmap_line::e1#0 ← (word) bitmap_line::dy#0 >> (byte) 1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e1#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e1#0 ] ) always clobbers reg byte a +Statement [61] (byte) bitmap_plot::y#3 ← (byte)(word) bitmap_line::y#15 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 ] ) always clobbers reg byte a +Statement [62] (word) bitmap_plot::x#3 ← (word) bitmap_line::x#7 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 bitmap_plot::x#3 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 bitmap_plot::x#3 ] ) always clobbers reg byte a +Statement [64] (word) bitmap_line::x#15 ← (word) bitmap_line::x#7 + (word) bitmap_line::sx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#3 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#3 ] ) always clobbers reg byte a +Statement [65] (word) bitmap_line::e1#1 ← (word) bitmap_line::e1#3 + (word) bitmap_line::dy#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ) always clobbers reg byte a +Statement [66] if((word) bitmap_line::dx#0>=(word) bitmap_line::e1#1) goto bitmap_line::@10 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ) always clobbers reg byte a +Statement [67] (word) bitmap_line::y#2 ← (word) bitmap_line::y#15 + (word) bitmap_line::sy#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::e1#1 bitmap_line::y#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::e1#1 bitmap_line::y#2 ] ) always clobbers reg byte a +Statement [68] (word) bitmap_line::e1#2 ← (word) bitmap_line::e1#1 - (word) bitmap_line::dx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ) always clobbers reg byte a +Statement [70] if((word) bitmap_line::x#15!=(word) bitmap_line::x2#0) goto bitmap_line::@9 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#13 bitmap_line::x#15 bitmap_line::e1#6 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#13 bitmap_line::x#15 bitmap_line::e1#6 ] ) always clobbers reg byte a +Statement [71] (byte) bitmap_plot::y#0 ← (byte)(word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_plot::y#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_plot::y#0 ] ) always clobbers reg byte a +Statement [72] (word) bitmap_plot::x#0 ← (word) bitmap_line::x1#0 [ bitmap_plot::y#0 bitmap_plot::x#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_plot::y#0 bitmap_plot::x#0 ] ) always clobbers reg byte a +Statement [75] (word) bitmap_plot::plotter#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a +Statement [76] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#4 & (word) $fff8 [ bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a +Statement [77] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#4 bitmap_plot::plotter#1 ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#1 ] ) always clobbers reg byte a +Statement [78] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#4 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a +Statement [79] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#5 main::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ main::a#5 main::a#1 ] +Statement [82] (byte~) sgn_u16::$0 ← > (word) sgn_u16::w#2 [ sgn_u16::$0 ] ( main:2::bitmap_line:18::sgn_u16:34 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::$0 ] main:2::bitmap_line:18::sgn_u16:38 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::$0 ] ) always clobbers reg byte a +Statement [89] (byte~) abs_u16::$0 ← > (word) abs_u16::w#2 [ abs_u16::w#2 abs_u16::$0 ] ( main:2::bitmap_line:18::abs_u16:24 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#2 abs_u16::$0 ] main:2::bitmap_line:18::abs_u16:28 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#2 abs_u16::$0 ] ) always clobbers reg byte a +Statement [92] (word) abs_u16::return#2 ← - (word) abs_u16::w#2 [ abs_u16::return#2 ] ( main:2::bitmap_line:18::abs_u16:24 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#2 ] main:2::bitmap_line:18::abs_u16:28 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#2 ] ) always clobbers reg byte a Statement [101] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::bitmap_clear:7::memset:96 [ memset::num#2 memset::str#3 memset::c#4 ] main:2::bitmap_clear:7::memset:98 [ memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ memset::c#4 ] Statement [102] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::bitmap_clear:7::memset:96 [ memset::str#3 memset::c#4 memset::end#0 ] main:2::bitmap_clear:7::memset:98 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a @@ -3527,59 +3542,60 @@ Statement [126] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ bitmap_init::y#2 bitmap_init::y#1 ] Statement [8] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [14] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#2) [ main::i#2 main::a#2 main::$7 ] ( main:2 [ main::i#2 main::a#2 main::$7 ] ) always clobbers reg byte a -Statement [15] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 [ main::i#2 main::a#2 bitmap_line::x1#0 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 ] ) always clobbers reg byte a -Statement [16] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#2) [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 ] ) always clobbers reg byte a -Statement [17] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#2) [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 main::$11 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 main::$11 ] ) always clobbers reg byte a -Statement [18] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ) always clobbers reg byte a -Statement [19] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#2) [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 ] ) always clobbers reg byte a -Statement [21] (byte) main::a#1 ← (byte) main::a#2 + (byte) $20 [ main::i#2 main::a#1 ] ( main:2 [ main::i#2 main::a#1 ] ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Statement [23] (word) abs_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#0 ] ) always clobbers reg byte a -Statement [25] (word) abs_u16::return#0 ← (word) abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#0 ] ) always clobbers reg byte a -Statement [26] (word) bitmap_line::dx#0 ← (word) abs_u16::return#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ) always clobbers reg byte a -Statement [27] (word) abs_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#1 ] ) always clobbers reg byte a -Statement [29] (word) abs_u16::return#1 ← (word) abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#1 ] ) always clobbers reg byte a -Statement [30] (word) bitmap_line::dy#0 ← (word) abs_u16::return#1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a -Statement [31] if((word) bitmap_line::dx#0!=(byte) 0) goto bitmap_line::@1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a -Statement [32] if((word) bitmap_line::dy#0==(byte) 0) goto bitmap_line::@4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a -Statement [33] (word) sgn_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::w#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::w#0 ] ) always clobbers reg byte a -Statement [35] (word) sgn_u16::return#0 ← (word) sgn_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::return#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::return#0 ] ) always clobbers reg byte a -Statement [36] (word) bitmap_line::sx#0 ← (word) sgn_u16::return#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 ] ) always clobbers reg byte a -Statement [37] (word) sgn_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::w#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::w#1 ] ) always clobbers reg byte a -Statement [39] (word) sgn_u16::return#1 ← (word) sgn_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::return#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::return#1 ] ) always clobbers reg byte a -Statement [40] (word) bitmap_line::sy#0 ← (word) sgn_u16::return#1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ) always clobbers reg byte a -Statement [41] if((word) bitmap_line::dx#0>(word) bitmap_line::dy#0) goto bitmap_line::@2 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ) always clobbers reg byte a -Statement [42] (word) bitmap_line::e#0 ← (word) bitmap_line::dx#0 >> (byte) 1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e#0 ] ) always clobbers reg byte a -Statement [44] (byte) bitmap_plot::y#1 ← (byte)(word) bitmap_line::y#4 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 ] ) always clobbers reg byte a -Statement [45] (word) bitmap_plot::x#1 ← (word) bitmap_line::x#13 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 bitmap_plot::x#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 bitmap_plot::x#1 ] ) always clobbers reg byte a -Statement [47] (word) bitmap_line::y#1 ← (word) bitmap_line::y#4 + (word) bitmap_line::sy#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::e#3 bitmap_line::y#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::e#3 bitmap_line::y#1 ] ) always clobbers reg byte a -Statement [48] (word) bitmap_line::e#1 ← (word) bitmap_line::e#3 + (word) bitmap_line::dx#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ) always clobbers reg byte a -Statement [49] if((word) bitmap_line::dy#0>=(word) bitmap_line::e#1) goto bitmap_line::@7 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ) always clobbers reg byte a -Statement [50] (word) bitmap_line::x#1 ← (word) bitmap_line::x#13 + (word) bitmap_line::sx#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::e#1 bitmap_line::x#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::e#1 bitmap_line::x#1 ] ) always clobbers reg byte a -Statement [51] (word) bitmap_line::e#2 ← (word) bitmap_line::e#1 - (word) bitmap_line::dy#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#1 bitmap_line::e#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#1 bitmap_line::e#2 ] ) always clobbers reg byte a -Statement [53] if((word) bitmap_line::y#1!=(word) bitmap_line::y2#0) goto bitmap_line::@6 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#12 bitmap_line::e#6 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#12 bitmap_line::e#6 ] ) always clobbers reg byte a -Statement [55] (byte) bitmap_plot::y#2 ← (byte)(word) bitmap_line::y#7 [ bitmap_line::x#6 bitmap_plot::y#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x#6 bitmap_plot::y#2 ] ) always clobbers reg byte a -Statement [56] (word) bitmap_plot::x#2 ← (word) bitmap_line::x#6 [ bitmap_plot::y#2 bitmap_plot::x#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_plot::y#2 bitmap_plot::x#2 ] ) always clobbers reg byte a -Statement [59] (word) bitmap_line::e1#0 ← (word) bitmap_line::dy#0 >> (byte) 1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e1#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e1#0 ] ) always clobbers reg byte a -Statement [61] (byte) bitmap_plot::y#3 ← (byte)(word) bitmap_line::y#15 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 ] ) always clobbers reg byte a -Statement [62] (word) bitmap_plot::x#3 ← (word) bitmap_line::x#7 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 bitmap_plot::x#3 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 bitmap_plot::x#3 ] ) always clobbers reg byte a -Statement [64] (word) bitmap_line::x#15 ← (word) bitmap_line::x#7 + (word) bitmap_line::sx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#3 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#3 ] ) always clobbers reg byte a -Statement [65] (word) bitmap_line::e1#1 ← (word) bitmap_line::e1#3 + (word) bitmap_line::dy#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ) always clobbers reg byte a -Statement [66] if((word) bitmap_line::dx#0>=(word) bitmap_line::e1#1) goto bitmap_line::@10 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ) always clobbers reg byte a -Statement [67] (word) bitmap_line::y#2 ← (word) bitmap_line::y#15 + (word) bitmap_line::sy#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::e1#1 bitmap_line::y#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::e1#1 bitmap_line::y#2 ] ) always clobbers reg byte a -Statement [68] (word) bitmap_line::e1#2 ← (word) bitmap_line::e1#1 - (word) bitmap_line::dx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ) always clobbers reg byte a -Statement [70] if((word) bitmap_line::x#15!=(word) bitmap_line::x2#0) goto bitmap_line::@9 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#13 bitmap_line::x#15 bitmap_line::e1#6 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#13 bitmap_line::x#15 bitmap_line::e1#6 ] ) always clobbers reg byte a -Statement [71] (byte) bitmap_plot::y#0 ← (byte)(word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_plot::y#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_plot::y#0 ] ) always clobbers reg byte a -Statement [72] (word) bitmap_plot::x#0 ← (word) bitmap_line::x1#0 [ bitmap_plot::y#0 bitmap_plot::x#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_plot::y#0 bitmap_plot::x#0 ] ) always clobbers reg byte a -Statement [75] (word) bitmap_plot::plotter#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a -Statement [76] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#4 & (word) $fff8 [ bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a -Statement [77] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#4 bitmap_plot::plotter#1 ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#1 ] ) always clobbers reg byte a -Statement [78] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#4 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a -Statement [79] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 ] ) always clobbers reg byte a reg byte y -Statement [82] (byte~) sgn_u16::$0 ← > (word) sgn_u16::w#2 [ sgn_u16::$0 ] ( main:2::bitmap_line:20::sgn_u16:34 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::$0 ] main:2::bitmap_line:20::sgn_u16:38 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::$0 ] ) always clobbers reg byte a -Statement [89] (byte~) abs_u16::$0 ← > (word) abs_u16::w#2 [ abs_u16::w#2 abs_u16::$0 ] ( main:2::bitmap_line:20::abs_u16:24 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#2 abs_u16::$0 ] main:2::bitmap_line:20::abs_u16:28 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#2 abs_u16::$0 ] ) always clobbers reg byte a -Statement [92] (word) abs_u16::return#2 ← - (word) abs_u16::w#2 [ abs_u16::return#2 ] ( main:2::bitmap_line:20::abs_u16:24 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#2 ] main:2::bitmap_line:20::abs_u16:28 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#2 ] ) always clobbers reg byte a +Statement [12] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#5) [ main::i#5 main::a#5 main::$7 ] ( main:2 [ main::i#5 main::a#5 main::$7 ] ) always clobbers reg byte a +Statement [13] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 [ main::i#5 main::a#5 bitmap_line::x1#0 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 ] ) always clobbers reg byte a +Statement [14] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#5) [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 ] ) always clobbers reg byte a +Statement [15] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#5) [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 main::$11 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 main::$11 ] ) always clobbers reg byte a +Statement [16] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ) always clobbers reg byte a +Statement [17] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#5) [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 ] ) always clobbers reg byte a +Statement [19] (byte) main::a#1 ← (byte) main::a#5 + (byte) $20 [ main::i#5 main::a#1 ] ( main:2 [ main::i#5 main::a#1 ] ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ main::i#5 main::i#1 ] +Statement [21] if((byte) main::i#1!=(byte) 8) goto main::@2 [ main::i#1 main::a#1 ] ( main:2 [ main::i#1 main::a#1 ] ) always clobbers reg byte a +Statement [23] (word) abs_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#0 ] ) always clobbers reg byte a +Statement [25] (word) abs_u16::return#0 ← (word) abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#0 ] ) always clobbers reg byte a +Statement [26] (word) bitmap_line::dx#0 ← (word) abs_u16::return#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ) always clobbers reg byte a +Statement [27] (word) abs_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#1 ] ) always clobbers reg byte a +Statement [29] (word) abs_u16::return#1 ← (word) abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#1 ] ) always clobbers reg byte a +Statement [30] (word) bitmap_line::dy#0 ← (word) abs_u16::return#1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a +Statement [31] if((word) bitmap_line::dx#0!=(byte) 0) goto bitmap_line::@1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a +Statement [32] if((word) bitmap_line::dy#0==(byte) 0) goto bitmap_line::@4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a +Statement [33] (word) sgn_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::w#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::w#0 ] ) always clobbers reg byte a +Statement [35] (word) sgn_u16::return#0 ← (word) sgn_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::return#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::return#0 ] ) always clobbers reg byte a +Statement [36] (word) bitmap_line::sx#0 ← (word) sgn_u16::return#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 ] ) always clobbers reg byte a +Statement [37] (word) sgn_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::w#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::w#1 ] ) always clobbers reg byte a +Statement [39] (word) sgn_u16::return#1 ← (word) sgn_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::return#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::return#1 ] ) always clobbers reg byte a +Statement [40] (word) bitmap_line::sy#0 ← (word) sgn_u16::return#1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ) always clobbers reg byte a +Statement [41] if((word) bitmap_line::dx#0>(word) bitmap_line::dy#0) goto bitmap_line::@2 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ) always clobbers reg byte a +Statement [42] (word) bitmap_line::e#0 ← (word) bitmap_line::dx#0 >> (byte) 1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e#0 ] ) always clobbers reg byte a +Statement [44] (byte) bitmap_plot::y#1 ← (byte)(word) bitmap_line::y#4 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 ] ) always clobbers reg byte a +Statement [45] (word) bitmap_plot::x#1 ← (word) bitmap_line::x#13 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 bitmap_plot::x#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 bitmap_plot::x#1 ] ) always clobbers reg byte a +Statement [47] (word) bitmap_line::y#1 ← (word) bitmap_line::y#4 + (word) bitmap_line::sy#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::e#3 bitmap_line::y#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::e#3 bitmap_line::y#1 ] ) always clobbers reg byte a +Statement [48] (word) bitmap_line::e#1 ← (word) bitmap_line::e#3 + (word) bitmap_line::dx#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ) always clobbers reg byte a +Statement [49] if((word) bitmap_line::dy#0>=(word) bitmap_line::e#1) goto bitmap_line::@7 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ) always clobbers reg byte a +Statement [50] (word) bitmap_line::x#1 ← (word) bitmap_line::x#13 + (word) bitmap_line::sx#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::e#1 bitmap_line::x#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::e#1 bitmap_line::x#1 ] ) always clobbers reg byte a +Statement [51] (word) bitmap_line::e#2 ← (word) bitmap_line::e#1 - (word) bitmap_line::dy#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#1 bitmap_line::e#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#1 bitmap_line::e#2 ] ) always clobbers reg byte a +Statement [53] if((word) bitmap_line::y#1!=(word) bitmap_line::y2#0) goto bitmap_line::@6 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#12 bitmap_line::e#6 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#12 bitmap_line::e#6 ] ) always clobbers reg byte a +Statement [55] (byte) bitmap_plot::y#2 ← (byte)(word) bitmap_line::y#7 [ bitmap_line::x#6 bitmap_plot::y#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x#6 bitmap_plot::y#2 ] ) always clobbers reg byte a +Statement [56] (word) bitmap_plot::x#2 ← (word) bitmap_line::x#6 [ bitmap_plot::y#2 bitmap_plot::x#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_plot::y#2 bitmap_plot::x#2 ] ) always clobbers reg byte a +Statement [59] (word) bitmap_line::e1#0 ← (word) bitmap_line::dy#0 >> (byte) 1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e1#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e1#0 ] ) always clobbers reg byte a +Statement [61] (byte) bitmap_plot::y#3 ← (byte)(word) bitmap_line::y#15 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 ] ) always clobbers reg byte a +Statement [62] (word) bitmap_plot::x#3 ← (word) bitmap_line::x#7 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 bitmap_plot::x#3 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 bitmap_plot::x#3 ] ) always clobbers reg byte a +Statement [64] (word) bitmap_line::x#15 ← (word) bitmap_line::x#7 + (word) bitmap_line::sx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#3 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#3 ] ) always clobbers reg byte a +Statement [65] (word) bitmap_line::e1#1 ← (word) bitmap_line::e1#3 + (word) bitmap_line::dy#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ) always clobbers reg byte a +Statement [66] if((word) bitmap_line::dx#0>=(word) bitmap_line::e1#1) goto bitmap_line::@10 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ) always clobbers reg byte a +Statement [67] (word) bitmap_line::y#2 ← (word) bitmap_line::y#15 + (word) bitmap_line::sy#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::e1#1 bitmap_line::y#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::e1#1 bitmap_line::y#2 ] ) always clobbers reg byte a +Statement [68] (word) bitmap_line::e1#2 ← (word) bitmap_line::e1#1 - (word) bitmap_line::dx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ) always clobbers reg byte a +Statement [70] if((word) bitmap_line::x#15!=(word) bitmap_line::x2#0) goto bitmap_line::@9 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#13 bitmap_line::x#15 bitmap_line::e1#6 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#13 bitmap_line::x#15 bitmap_line::e1#6 ] ) always clobbers reg byte a +Statement [71] (byte) bitmap_plot::y#0 ← (byte)(word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_plot::y#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_plot::y#0 ] ) always clobbers reg byte a +Statement [72] (word) bitmap_plot::x#0 ← (word) bitmap_line::x1#0 [ bitmap_plot::y#0 bitmap_plot::x#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_plot::y#0 bitmap_plot::x#0 ] ) always clobbers reg byte a +Statement [75] (word) bitmap_plot::plotter#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a +Statement [76] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#4 & (word) $fff8 [ bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a +Statement [77] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#4 bitmap_plot::plotter#1 ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#1 ] ) always clobbers reg byte a +Statement [78] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#4 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a +Statement [79] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 ] ) always clobbers reg byte a reg byte y +Statement [82] (byte~) sgn_u16::$0 ← > (word) sgn_u16::w#2 [ sgn_u16::$0 ] ( main:2::bitmap_line:18::sgn_u16:34 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::$0 ] main:2::bitmap_line:18::sgn_u16:38 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::$0 ] ) always clobbers reg byte a +Statement [89] (byte~) abs_u16::$0 ← > (word) abs_u16::w#2 [ abs_u16::w#2 abs_u16::$0 ] ( main:2::bitmap_line:18::abs_u16:24 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#2 abs_u16::$0 ] main:2::bitmap_line:18::abs_u16:28 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#2 abs_u16::$0 ] ) always clobbers reg byte a +Statement [92] (word) abs_u16::return#2 ← - (word) abs_u16::w#2 [ abs_u16::return#2 ] ( main:2::bitmap_line:18::abs_u16:24 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#2 ] main:2::bitmap_line:18::abs_u16:28 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#2 ] ) always clobbers reg byte a Statement [101] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::bitmap_clear:7::memset:96 [ memset::num#2 memset::str#3 memset::c#4 ] main:2::bitmap_clear:7::memset:98 [ memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a Statement [102] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::bitmap_clear:7::memset:96 [ memset::str#3 memset::c#4 memset::end#0 ] main:2::bitmap_clear:7::memset:98 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a Statement [103] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:2::bitmap_clear:7::memset:96 [ memset::c#4 memset::end#0 memset::dst#4 ] main:2::bitmap_clear:7::memset:98 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a @@ -3589,59 +3605,59 @@ Statement [119] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 [ Statement [126] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:5 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a Statement [8] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [12] if((byte) main::i#2!=(byte) 8) goto main::@2 [ main::i#2 main::a#2 ] ( main:2 [ main::i#2 main::a#2 ] ) always clobbers reg byte a -Statement [14] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#2) [ main::i#2 main::a#2 main::$7 ] ( main:2 [ main::i#2 main::a#2 main::$7 ] ) always clobbers reg byte a -Statement [15] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 [ main::i#2 main::a#2 bitmap_line::x1#0 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 ] ) always clobbers reg byte a -Statement [16] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#2) [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 ] ) always clobbers reg byte a -Statement [17] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#2) [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 main::$11 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 main::$11 ] ) always clobbers reg byte a -Statement [18] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ) always clobbers reg byte a -Statement [19] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#2) [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 ] ( main:2 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 ] ) always clobbers reg byte a -Statement [21] (byte) main::a#1 ← (byte) main::a#2 + (byte) $20 [ main::i#2 main::a#1 ] ( main:2 [ main::i#2 main::a#1 ] ) always clobbers reg byte a reg byte x -Statement [23] (word) abs_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#0 ] ) always clobbers reg byte a -Statement [25] (word) abs_u16::return#0 ← (word) abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#0 ] ) always clobbers reg byte a -Statement [26] (word) bitmap_line::dx#0 ← (word) abs_u16::return#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ) always clobbers reg byte a -Statement [27] (word) abs_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#1 ] ) always clobbers reg byte a -Statement [29] (word) abs_u16::return#1 ← (word) abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#1 ] ) always clobbers reg byte a -Statement [30] (word) bitmap_line::dy#0 ← (word) abs_u16::return#1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a -Statement [31] if((word) bitmap_line::dx#0!=(byte) 0) goto bitmap_line::@1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a -Statement [32] if((word) bitmap_line::dy#0==(byte) 0) goto bitmap_line::@4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a -Statement [33] (word) sgn_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::w#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::w#0 ] ) always clobbers reg byte a -Statement [35] (word) sgn_u16::return#0 ← (word) sgn_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::return#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::return#0 ] ) always clobbers reg byte a -Statement [36] (word) bitmap_line::sx#0 ← (word) sgn_u16::return#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 ] ) always clobbers reg byte a -Statement [37] (word) sgn_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::w#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::w#1 ] ) always clobbers reg byte a -Statement [39] (word) sgn_u16::return#1 ← (word) sgn_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::return#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::return#1 ] ) always clobbers reg byte a -Statement [40] (word) bitmap_line::sy#0 ← (word) sgn_u16::return#1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ) always clobbers reg byte a -Statement [41] if((word) bitmap_line::dx#0>(word) bitmap_line::dy#0) goto bitmap_line::@2 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ) always clobbers reg byte a -Statement [42] (word) bitmap_line::e#0 ← (word) bitmap_line::dx#0 >> (byte) 1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e#0 ] ) always clobbers reg byte a -Statement [44] (byte) bitmap_plot::y#1 ← (byte)(word) bitmap_line::y#4 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 ] ) always clobbers reg byte a -Statement [45] (word) bitmap_plot::x#1 ← (word) bitmap_line::x#13 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 bitmap_plot::x#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 bitmap_plot::x#1 ] ) always clobbers reg byte a -Statement [47] (word) bitmap_line::y#1 ← (word) bitmap_line::y#4 + (word) bitmap_line::sy#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::e#3 bitmap_line::y#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::e#3 bitmap_line::y#1 ] ) always clobbers reg byte a -Statement [48] (word) bitmap_line::e#1 ← (word) bitmap_line::e#3 + (word) bitmap_line::dx#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ) always clobbers reg byte a -Statement [49] if((word) bitmap_line::dy#0>=(word) bitmap_line::e#1) goto bitmap_line::@7 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ) always clobbers reg byte a -Statement [50] (word) bitmap_line::x#1 ← (word) bitmap_line::x#13 + (word) bitmap_line::sx#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::e#1 bitmap_line::x#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::e#1 bitmap_line::x#1 ] ) always clobbers reg byte a -Statement [51] (word) bitmap_line::e#2 ← (word) bitmap_line::e#1 - (word) bitmap_line::dy#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#1 bitmap_line::e#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#1 bitmap_line::e#2 ] ) always clobbers reg byte a -Statement [53] if((word) bitmap_line::y#1!=(word) bitmap_line::y2#0) goto bitmap_line::@6 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#12 bitmap_line::e#6 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#12 bitmap_line::e#6 ] ) always clobbers reg byte a -Statement [55] (byte) bitmap_plot::y#2 ← (byte)(word) bitmap_line::y#7 [ bitmap_line::x#6 bitmap_plot::y#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x#6 bitmap_plot::y#2 ] ) always clobbers reg byte a -Statement [56] (word) bitmap_plot::x#2 ← (word) bitmap_line::x#6 [ bitmap_plot::y#2 bitmap_plot::x#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_plot::y#2 bitmap_plot::x#2 ] ) always clobbers reg byte a -Statement [59] (word) bitmap_line::e1#0 ← (word) bitmap_line::dy#0 >> (byte) 1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e1#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e1#0 ] ) always clobbers reg byte a -Statement [61] (byte) bitmap_plot::y#3 ← (byte)(word) bitmap_line::y#15 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 ] ) always clobbers reg byte a -Statement [62] (word) bitmap_plot::x#3 ← (word) bitmap_line::x#7 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 bitmap_plot::x#3 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 bitmap_plot::x#3 ] ) always clobbers reg byte a -Statement [64] (word) bitmap_line::x#15 ← (word) bitmap_line::x#7 + (word) bitmap_line::sx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#3 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#3 ] ) always clobbers reg byte a -Statement [65] (word) bitmap_line::e1#1 ← (word) bitmap_line::e1#3 + (word) bitmap_line::dy#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ) always clobbers reg byte a -Statement [66] if((word) bitmap_line::dx#0>=(word) bitmap_line::e1#1) goto bitmap_line::@10 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ) always clobbers reg byte a -Statement [67] (word) bitmap_line::y#2 ← (word) bitmap_line::y#15 + (word) bitmap_line::sy#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::e1#1 bitmap_line::y#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::e1#1 bitmap_line::y#2 ] ) always clobbers reg byte a -Statement [68] (word) bitmap_line::e1#2 ← (word) bitmap_line::e1#1 - (word) bitmap_line::dx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ) always clobbers reg byte a -Statement [70] if((word) bitmap_line::x#15!=(word) bitmap_line::x2#0) goto bitmap_line::@9 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#13 bitmap_line::x#15 bitmap_line::e1#6 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#13 bitmap_line::x#15 bitmap_line::e1#6 ] ) always clobbers reg byte a -Statement [71] (byte) bitmap_plot::y#0 ← (byte)(word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_plot::y#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_plot::y#0 ] ) always clobbers reg byte a -Statement [72] (word) bitmap_plot::x#0 ← (word) bitmap_line::x1#0 [ bitmap_plot::y#0 bitmap_plot::x#0 ] ( main:2::bitmap_line:20 [ main::i#2 main::a#2 bitmap_plot::y#0 bitmap_plot::x#0 ] ) always clobbers reg byte a -Statement [75] (word) bitmap_plot::plotter#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a -Statement [76] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#4 & (word) $fff8 [ bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a -Statement [77] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#4 bitmap_plot::plotter#1 ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#1 ] ) always clobbers reg byte a -Statement [78] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#4 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a -Statement [79] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_line:20::bitmap_plot:46 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 ] main:2::bitmap_line:20::bitmap_plot:57 [ main::i#2 main::a#2 ] main:2::bitmap_line:20::bitmap_plot:63 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 ] main:2::bitmap_line:20::bitmap_plot:73 [ main::i#2 main::a#2 ] ) always clobbers reg byte a reg byte y -Statement [82] (byte~) sgn_u16::$0 ← > (word) sgn_u16::w#2 [ sgn_u16::$0 ] ( main:2::bitmap_line:20::sgn_u16:34 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::$0 ] main:2::bitmap_line:20::sgn_u16:38 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::$0 ] ) always clobbers reg byte a -Statement [89] (byte~) abs_u16::$0 ← > (word) abs_u16::w#2 [ abs_u16::w#2 abs_u16::$0 ] ( main:2::bitmap_line:20::abs_u16:24 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#2 abs_u16::$0 ] main:2::bitmap_line:20::abs_u16:28 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#2 abs_u16::$0 ] ) always clobbers reg byte a -Statement [92] (word) abs_u16::return#2 ← - (word) abs_u16::w#2 [ abs_u16::return#2 ] ( main:2::bitmap_line:20::abs_u16:24 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#2 ] main:2::bitmap_line:20::abs_u16:28 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#2 ] ) always clobbers reg byte a +Statement [12] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#5) [ main::i#5 main::a#5 main::$7 ] ( main:2 [ main::i#5 main::a#5 main::$7 ] ) always clobbers reg byte a +Statement [13] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 [ main::i#5 main::a#5 bitmap_line::x1#0 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 ] ) always clobbers reg byte a +Statement [14] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#5) [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 ] ) always clobbers reg byte a +Statement [15] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#5) [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 main::$11 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 main::$11 ] ) always clobbers reg byte a +Statement [16] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ) always clobbers reg byte a +Statement [17] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#5) [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 ] ( main:2 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 ] ) always clobbers reg byte a +Statement [19] (byte) main::a#1 ← (byte) main::a#5 + (byte) $20 [ main::i#5 main::a#1 ] ( main:2 [ main::i#5 main::a#1 ] ) always clobbers reg byte a reg byte x +Statement [21] if((byte) main::i#1!=(byte) 8) goto main::@2 [ main::i#1 main::a#1 ] ( main:2 [ main::i#1 main::a#1 ] ) always clobbers reg byte a +Statement [23] (word) abs_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#0 ] ) always clobbers reg byte a +Statement [25] (word) abs_u16::return#0 ← (word) abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#0 ] ) always clobbers reg byte a +Statement [26] (word) bitmap_line::dx#0 ← (word) abs_u16::return#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ) always clobbers reg byte a +Statement [27] (word) abs_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#1 ] ) always clobbers reg byte a +Statement [29] (word) abs_u16::return#1 ← (word) abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#1 ] ) always clobbers reg byte a +Statement [30] (word) bitmap_line::dy#0 ← (word) abs_u16::return#1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a +Statement [31] if((word) bitmap_line::dx#0!=(byte) 0) goto bitmap_line::@1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a +Statement [32] if((word) bitmap_line::dy#0==(byte) 0) goto bitmap_line::@4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 ] ) always clobbers reg byte a +Statement [33] (word) sgn_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::w#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::w#0 ] ) always clobbers reg byte a +Statement [35] (word) sgn_u16::return#0 ← (word) sgn_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::return#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::return#0 ] ) always clobbers reg byte a +Statement [36] (word) bitmap_line::sx#0 ← (word) sgn_u16::return#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 ] ) always clobbers reg byte a +Statement [37] (word) sgn_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::w#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::w#1 ] ) always clobbers reg byte a +Statement [39] (word) sgn_u16::return#1 ← (word) sgn_u16::return#4 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::return#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::return#1 ] ) always clobbers reg byte a +Statement [40] (word) bitmap_line::sy#0 ← (word) sgn_u16::return#1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ) always clobbers reg byte a +Statement [41] if((word) bitmap_line::dx#0>(word) bitmap_line::dy#0) goto bitmap_line::@2 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 ] ) always clobbers reg byte a +Statement [42] (word) bitmap_line::e#0 ← (word) bitmap_line::dx#0 >> (byte) 1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e#0 ] ) always clobbers reg byte a +Statement [44] (byte) bitmap_plot::y#1 ← (byte)(word) bitmap_line::y#4 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 ] ) always clobbers reg byte a +Statement [45] (word) bitmap_plot::x#1 ← (word) bitmap_line::x#13 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 bitmap_plot::x#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::y#1 bitmap_plot::x#1 ] ) always clobbers reg byte a +Statement [47] (word) bitmap_line::y#1 ← (word) bitmap_line::y#4 + (word) bitmap_line::sy#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::e#3 bitmap_line::y#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::e#3 bitmap_line::y#1 ] ) always clobbers reg byte a +Statement [48] (word) bitmap_line::e#1 ← (word) bitmap_line::e#3 + (word) bitmap_line::dx#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ) always clobbers reg byte a +Statement [49] if((word) bitmap_line::dy#0>=(word) bitmap_line::e#1) goto bitmap_line::@7 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#1 bitmap_line::e#1 ] ) always clobbers reg byte a +Statement [50] (word) bitmap_line::x#1 ← (word) bitmap_line::x#13 + (word) bitmap_line::sx#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::e#1 bitmap_line::x#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::e#1 bitmap_line::x#1 ] ) always clobbers reg byte a +Statement [51] (word) bitmap_line::e#2 ← (word) bitmap_line::e#1 - (word) bitmap_line::dy#0 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#1 bitmap_line::e#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#1 bitmap_line::e#2 ] ) always clobbers reg byte a +Statement [53] if((word) bitmap_line::y#1!=(word) bitmap_line::y2#0) goto bitmap_line::@6 [ bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#12 bitmap_line::e#6 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#1 bitmap_line::x#12 bitmap_line::e#6 ] ) always clobbers reg byte a +Statement [55] (byte) bitmap_plot::y#2 ← (byte)(word) bitmap_line::y#7 [ bitmap_line::x#6 bitmap_plot::y#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x#6 bitmap_plot::y#2 ] ) always clobbers reg byte a +Statement [56] (word) bitmap_plot::x#2 ← (word) bitmap_line::x#6 [ bitmap_plot::y#2 bitmap_plot::x#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_plot::y#2 bitmap_plot::x#2 ] ) always clobbers reg byte a +Statement [59] (word) bitmap_line::e1#0 ← (word) bitmap_line::dy#0 >> (byte) 1 [ bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e1#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::e1#0 ] ) always clobbers reg byte a +Statement [61] (byte) bitmap_plot::y#3 ← (byte)(word) bitmap_line::y#15 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 ] ) always clobbers reg byte a +Statement [62] (word) bitmap_plot::x#3 ← (word) bitmap_line::x#7 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 bitmap_plot::x#3 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::y#3 bitmap_plot::x#3 ] ) always clobbers reg byte a +Statement [64] (word) bitmap_line::x#15 ← (word) bitmap_line::x#7 + (word) bitmap_line::sx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#3 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#3 ] ) always clobbers reg byte a +Statement [65] (word) bitmap_line::e1#1 ← (word) bitmap_line::e1#3 + (word) bitmap_line::dy#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ) always clobbers reg byte a +Statement [66] if((word) bitmap_line::dx#0>=(word) bitmap_line::e1#1) goto bitmap_line::@10 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#15 bitmap_line::e1#1 ] ) always clobbers reg byte a +Statement [67] (word) bitmap_line::y#2 ← (word) bitmap_line::y#15 + (word) bitmap_line::sy#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::e1#1 bitmap_line::y#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::e1#1 bitmap_line::y#2 ] ) always clobbers reg byte a +Statement [68] (word) bitmap_line::e1#2 ← (word) bitmap_line::e1#1 - (word) bitmap_line::dx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ) always clobbers reg byte a +Statement [70] if((word) bitmap_line::x#15!=(word) bitmap_line::x2#0) goto bitmap_line::@9 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#13 bitmap_line::x#15 bitmap_line::e1#6 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#13 bitmap_line::x#15 bitmap_line::e1#6 ] ) always clobbers reg byte a +Statement [71] (byte) bitmap_plot::y#0 ← (byte)(word) bitmap_line::y1#0 [ bitmap_line::x1#0 bitmap_plot::y#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_plot::y#0 ] ) always clobbers reg byte a +Statement [72] (word) bitmap_plot::x#0 ← (word) bitmap_line::x1#0 [ bitmap_plot::y#0 bitmap_plot::x#0 ] ( main:2::bitmap_line:18 [ main::i#5 main::a#5 bitmap_plot::y#0 bitmap_plot::x#0 ] ) always clobbers reg byte a +Statement [75] (word) bitmap_plot::plotter#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a +Statement [76] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#4 & (word) $fff8 [ bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a +Statement [77] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#4 bitmap_plot::plotter#1 ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 bitmap_plot::x#4 bitmap_plot::plotter#1 ] ) always clobbers reg byte a +Statement [78] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#4 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a +Statement [79] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_line:18::bitmap_plot:46 [ main::i#5 main::a#5 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#4 bitmap_line::x#13 bitmap_line::e#3 ] main:2::bitmap_line:18::bitmap_plot:57 [ main::i#5 main::a#5 ] main:2::bitmap_line:18::bitmap_plot:63 [ main::i#5 main::a#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::y#15 bitmap_line::x#7 bitmap_line::e1#3 ] main:2::bitmap_line:18::bitmap_plot:73 [ main::i#5 main::a#5 ] ) always clobbers reg byte a reg byte y +Statement [82] (byte~) sgn_u16::$0 ← > (word) sgn_u16::w#2 [ sgn_u16::$0 ] ( main:2::bitmap_line:18::sgn_u16:34 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 sgn_u16::$0 ] main:2::bitmap_line:18::sgn_u16:38 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 sgn_u16::$0 ] ) always clobbers reg byte a +Statement [89] (byte~) abs_u16::$0 ← > (word) abs_u16::w#2 [ abs_u16::w#2 abs_u16::$0 ] ( main:2::bitmap_line:18::abs_u16:24 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::w#2 abs_u16::$0 ] main:2::bitmap_line:18::abs_u16:28 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::w#2 abs_u16::$0 ] ) always clobbers reg byte a +Statement [92] (word) abs_u16::return#2 ← - (word) abs_u16::w#2 [ abs_u16::return#2 ] ( main:2::bitmap_line:18::abs_u16:24 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 abs_u16::return#2 ] main:2::bitmap_line:18::abs_u16:28 [ main::i#5 main::a#5 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#2 ] ) always clobbers reg byte a Statement [101] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::bitmap_clear:7::memset:96 [ memset::num#2 memset::str#3 memset::c#4 ] main:2::bitmap_clear:7::memset:98 [ memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a Statement [102] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::bitmap_clear:7::memset:96 [ memset::str#3 memset::c#4 memset::end#0 ] main:2::bitmap_clear:7::memset:98 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a Statement [103] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:2::bitmap_clear:7::memset:96 [ memset::c#4 memset::end#0 memset::dst#4 ] main:2::bitmap_clear:7::memset:98 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a @@ -3649,8 +3665,8 @@ Statement [105] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 Statement [107] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::bitmap_clear:7::memset:96 [ memset::c#4 memset::end#0 memset::dst#2 ] main:2::bitmap_clear:7::memset:98 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y Statement [119] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:5 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a Statement [126] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:5 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , -Potential registers zp ZP_BYTE:3 [ main::a#2 main::a#1 ] : zp ZP_BYTE:3 , reg byte x , +Potential registers zp ZP_BYTE:2 [ main::i#5 main::i#1 ] : zp ZP_BYTE:2 , +Potential registers zp ZP_BYTE:3 [ main::a#5 main::a#1 ] : zp ZP_BYTE:3 , reg byte x , Potential registers zp ZP_WORD:4 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] : zp ZP_WORD:4 , Potential registers zp ZP_WORD:6 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] : zp ZP_WORD:6 , Potential registers zp ZP_WORD:8 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] : zp ZP_WORD:8 , @@ -3698,7 +3714,7 @@ REGISTER UPLIFT SCOPES Uplift Scope [bitmap_line] 658.05: zp ZP_WORD:6 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] 597.74: zp ZP_WORD:8 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] 532.97: zp ZP_WORD:4 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] 532.97: zp ZP_WORD:10 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] 8.64: zp ZP_WORD:47 [ bitmap_line::dy#0 ] 7.85: zp ZP_WORD:55 [ bitmap_line::sy#0 ] 7.78: zp ZP_WORD:43 [ bitmap_line::dx#0 ] 6.8: zp ZP_WORD:51 [ bitmap_line::sx#0 ] 3.62: zp ZP_WORD:39 [ bitmap_line::y2#0 ] 3.52: zp ZP_WORD:37 [ bitmap_line::x2#0 ] Uplift Scope [bitmap_plot] 464.5: zp ZP_WORD:13 [ bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] 416: zp ZP_BYTE:12 [ bitmap_plot::y#4 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ] 4: zp ZP_WORD:59 [ bitmap_plot::$1 ] 4: zp ZP_BYTE:63 [ bitmap_plot::$2 ] 3: zp ZP_WORD:61 [ bitmap_plot::plotter#1 ] 1: zp ZP_WORD:57 [ bitmap_plot::plotter#0 ] Uplift Scope [bitmap_init] 39.88: zp ZP_WORD:31 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp ZP_BYTE:28 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22: zp ZP_BYTE:29 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp ZP_BYTE:30 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp ZP_BYTE:71 [ bitmap_init::$4 ] 22: zp ZP_BYTE:72 [ bitmap_init::$5 ] 22: zp ZP_BYTE:73 [ bitmap_init::$6 ] 5.5: zp ZP_BYTE:70 [ bitmap_init::$7 ] -Uplift Scope [main] 25.3: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_WORD:33 [ main::$7 ] 22: zp ZP_WORD:35 [ main::$11 ] 13.44: zp ZP_BYTE:3 [ main::a#2 main::a#1 ] +Uplift Scope [main] 22: zp ZP_WORD:33 [ main::$7 ] 22: zp ZP_WORD:35 [ main::$11 ] 18.94: zp ZP_BYTE:2 [ main::i#5 main::i#1 ] 10.08: zp ZP_BYTE:3 [ main::a#5 main::a#1 ] Uplift Scope [memset] 41.33: zp ZP_WORD:26 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp ZP_WORD:68 [ memset::end#0 ] 2: zp ZP_WORD:21 [ memset::num#2 ] 1.38: zp ZP_BYTE:25 [ memset::c#4 ] 0: zp ZP_WORD:23 [ memset::str#3 ] Uplift Scope [abs_u16] 16.5: zp ZP_WORD:19 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] 4: zp ZP_WORD:41 [ abs_u16::return#0 ] 4: zp ZP_WORD:45 [ abs_u16::return#1 ] 4: zp ZP_BYTE:66 [ abs_u16::$0 ] 4: zp ZP_BYTE:67 [ abs_u16::$1 ] Uplift Scope [sgn_u16] 14: zp ZP_WORD:15 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] 4: zp ZP_WORD:49 [ sgn_u16::return#0 ] 4: zp ZP_WORD:53 [ sgn_u16::return#1 ] 4: zp ZP_BYTE:64 [ sgn_u16::$0 ] 4: zp ZP_BYTE:65 [ sgn_u16::$1 ] 1: zp ZP_WORD:17 [ sgn_u16::return#4 ] @@ -3706,27 +3722,27 @@ Uplift Scope [bitmap_clear] Uplift Scope [RADIX] Uplift Scope [] -Uplifting [bitmap_line] best 33681 combination zp ZP_WORD:6 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] zp ZP_WORD:8 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] zp ZP_WORD:4 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] zp ZP_WORD:10 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] zp ZP_WORD:47 [ bitmap_line::dy#0 ] zp ZP_WORD:55 [ bitmap_line::sy#0 ] zp ZP_WORD:43 [ bitmap_line::dx#0 ] zp ZP_WORD:51 [ bitmap_line::sx#0 ] zp ZP_WORD:39 [ bitmap_line::y2#0 ] zp ZP_WORD:37 [ bitmap_line::x2#0 ] -Uplifting [bitmap_plot] best 33472 combination zp ZP_WORD:13 [ bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] reg byte x [ bitmap_plot::y#4 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ] zp ZP_WORD:59 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:61 [ bitmap_plot::plotter#1 ] zp ZP_WORD:57 [ bitmap_plot::plotter#0 ] -Uplifting [bitmap_init] best 32962 combination zp ZP_WORD:31 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:72 [ bitmap_init::$5 ] zp ZP_BYTE:73 [ bitmap_init::$6 ] zp ZP_BYTE:70 [ bitmap_init::$7 ] +Uplifting [bitmap_line] best 33711 combination zp ZP_WORD:6 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] zp ZP_WORD:8 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] zp ZP_WORD:4 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] zp ZP_WORD:10 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] zp ZP_WORD:47 [ bitmap_line::dy#0 ] zp ZP_WORD:55 [ bitmap_line::sy#0 ] zp ZP_WORD:43 [ bitmap_line::dx#0 ] zp ZP_WORD:51 [ bitmap_line::sx#0 ] zp ZP_WORD:39 [ bitmap_line::y2#0 ] zp ZP_WORD:37 [ bitmap_line::x2#0 ] +Uplifting [bitmap_plot] best 33502 combination zp ZP_WORD:13 [ bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] reg byte x [ bitmap_plot::y#4 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ] zp ZP_WORD:59 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:61 [ bitmap_plot::plotter#1 ] zp ZP_WORD:57 [ bitmap_plot::plotter#0 ] +Uplifting [bitmap_init] best 32992 combination zp ZP_WORD:31 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:72 [ bitmap_init::$5 ] zp ZP_BYTE:73 [ bitmap_init::$6 ] zp ZP_BYTE:70 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. -Uplifting [main] best 32962 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] zp ZP_WORD:33 [ main::$7 ] zp ZP_WORD:35 [ main::$11 ] zp ZP_BYTE:3 [ main::a#2 main::a#1 ] -Uplifting [memset] best 32946 combination zp ZP_WORD:26 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:68 [ memset::end#0 ] zp ZP_WORD:21 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp ZP_WORD:23 [ memset::str#3 ] -Uplifting [abs_u16] best 32934 combination zp ZP_WORD:19 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] zp ZP_WORD:41 [ abs_u16::return#0 ] zp ZP_WORD:45 [ abs_u16::return#1 ] reg byte a [ abs_u16::$0 ] reg byte a [ abs_u16::$1 ] -Uplifting [sgn_u16] best 32922 combination zp ZP_WORD:15 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] zp ZP_WORD:49 [ sgn_u16::return#0 ] zp ZP_WORD:53 [ sgn_u16::return#1 ] reg byte a [ sgn_u16::$0 ] reg byte a [ sgn_u16::$1 ] zp ZP_WORD:17 [ sgn_u16::return#4 ] -Uplifting [bitmap_clear] best 32922 combination -Uplifting [RADIX] best 32922 combination -Uplifting [] best 32922 combination -Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Uplifting [main] best 32922 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplifting [main] best 32992 combination zp ZP_WORD:33 [ main::$7 ] zp ZP_WORD:35 [ main::$11 ] zp ZP_BYTE:2 [ main::i#5 main::i#1 ] zp ZP_BYTE:3 [ main::a#5 main::a#1 ] +Uplifting [memset] best 32976 combination zp ZP_WORD:26 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:68 [ memset::end#0 ] zp ZP_WORD:21 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp ZP_WORD:23 [ memset::str#3 ] +Uplifting [abs_u16] best 32964 combination zp ZP_WORD:19 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] zp ZP_WORD:41 [ abs_u16::return#0 ] zp ZP_WORD:45 [ abs_u16::return#1 ] reg byte a [ abs_u16::$0 ] reg byte a [ abs_u16::$1 ] +Uplifting [sgn_u16] best 32952 combination zp ZP_WORD:15 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] zp ZP_WORD:49 [ sgn_u16::return#0 ] zp ZP_WORD:53 [ sgn_u16::return#1 ] reg byte a [ sgn_u16::$0 ] reg byte a [ sgn_u16::$1 ] zp ZP_WORD:17 [ sgn_u16::return#4 ] +Uplifting [bitmap_clear] best 32952 combination +Uplifting [RADIX] best 32952 combination +Uplifting [] best 32952 combination Attempting to uplift remaining variables inzp ZP_BYTE:72 [ bitmap_init::$5 ] -Uplifting [bitmap_init] best 32862 combination reg byte a [ bitmap_init::$5 ] +Uplifting [bitmap_init] best 32892 combination reg byte a [ bitmap_init::$5 ] Attempting to uplift remaining variables inzp ZP_BYTE:73 [ bitmap_init::$6 ] -Uplifting [bitmap_init] best 32802 combination reg byte a [ bitmap_init::$6 ] -Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::a#2 main::a#1 ] -Uplifting [main] best 32802 combination zp ZP_BYTE:3 [ main::a#2 main::a#1 ] +Uplifting [bitmap_init] best 32832 combination reg byte a [ bitmap_init::$6 ] +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::i#5 main::i#1 ] +Uplifting [main] best 32832 combination zp ZP_BYTE:2 [ main::i#5 main::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::a#5 main::a#1 ] +Uplifting [main] best 32832 combination zp ZP_BYTE:3 [ main::a#5 main::a#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:70 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 32802 combination zp ZP_BYTE:70 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 32832 combination zp ZP_BYTE:70 [ bitmap_init::$7 ] Coalescing zero page register [ zp ZP_WORD:8 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] ] with [ zp ZP_WORD:13 [ bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] ] - score: 4 Coalescing zero page register [ zp ZP_WORD:8 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] ] with [ zp ZP_WORD:33 [ main::$7 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:17 [ sgn_u16::return#4 ] ] with [ zp ZP_WORD:49 [ sgn_u16::return#0 ] ] - score: 1 @@ -3743,8 +3759,8 @@ Coalescing zero page register [ zp ZP_WORD:15 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u1 Coalescing zero page register [ zp ZP_WORD:21 [ memset::num#2 memset::end#0 ] ] with [ zp ZP_WORD:6 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] ] Coalescing zero page register [ zp ZP_WORD:23 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:8 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 main::$7 ] ] Coalescing zero page register [ zp ZP_WORD:31 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp ZP_WORD:10 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:70 [ bitmap_init::$7 ] ] with [ zp ZP_BYTE:2 [ main::i#2 main::i#1 ] ] -Allocated (was zp ZP_BYTE:3) zp ZP_BYTE:2 [ main::a#2 main::a#1 ] +Coalescing zero page register [ zp ZP_BYTE:70 [ bitmap_init::$7 ] ] with [ zp ZP_BYTE:2 [ main::i#5 main::i#1 ] ] +Allocated (was zp ZP_BYTE:3) zp ZP_BYTE:2 [ main::a#5 main::a#1 ] Allocated (was zp ZP_WORD:15) zp ZP_WORD:3 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] Allocated (was zp ZP_WORD:17) zp ZP_WORD:5 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ] Allocated (was zp ZP_WORD:19) zp ZP_WORD:7 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ] @@ -3757,7 +3773,7 @@ Allocated (was zp ZP_WORD:43) zp ZP_WORD:19 [ bitmap_line::dx#0 ] Allocated (was zp ZP_WORD:51) zp ZP_WORD:21 [ bitmap_line::sx#0 ] Allocated (was zp ZP_WORD:57) zp ZP_WORD:23 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] Allocated (was zp ZP_WORD:59) zp ZP_WORD:25 [ bitmap_plot::$1 ] -Allocated (was zp ZP_BYTE:70) zp ZP_BYTE:27 [ bitmap_init::$7 main::i#2 main::i#1 ] +Allocated (was zp ZP_BYTE:70) zp ZP_BYTE:27 [ bitmap_init::$7 main::i#5 main::i#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -3830,36 +3846,29 @@ main: { // [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 - // [11] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [11] phi (byte) main::a#2 = (byte) 0 [phi:main::@4->main::@1#0] -- vbuz1=vbuc1 + // [11] phi from main::@4 to main::@2 [phi:main::@4->main::@2] + b2_from_b4: + // [11] phi (byte) main::a#5 = (byte) 0 [phi:main::@4->main::@2#0] -- vbuz1=vbuc1 lda #0 sta a - // [11] phi (byte) main::i#2 = (byte) 0 [phi:main::@4->main::@1#1] -- vbuz1=vbuc1 + // [11] phi (byte) main::i#5 = (byte) 0 [phi:main::@4->main::@2#1] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [12] if((byte) main::i#2!=(byte) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 - lda #8 - cmp i - bne b2 - jmp b3 - // main::@3 - b3: - // [13] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 - inc SCREEN+$3e7 - jmp b3 + jmp b2 + // [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [11] phi (byte) main::a#5 = (byte) main::a#1 [phi:main::@1->main::@2#0] -- register_copy + // [11] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 // main::@2 b2: - // [14] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#2) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + // [12] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#5) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy a lda COSTAB,y sta _7 lda #0 sta _7+1 - // [15] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 -- vwuz1=vwuz1_plus_vbuc1 + // [13] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 -- vwuz1=vwuz1_plus_vbuc1 lda #$78 clc adc bitmap_line.x1 @@ -3867,19 +3876,19 @@ main: { bcc !+ inc bitmap_line.x1+1 !: - // [16] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#2) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + // [14] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#5) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy a lda SINTAB,y sta bitmap_line.y1 lda #0 sta bitmap_line.y1+1 - // [17] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#2) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + // [15] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#5) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy a lda COSTAB+$20,y sta _11 lda #0 sta _11+1 - // [18] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 -- vwuz1=vwuz1_plus_vbuc1 + // [16] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 -- vwuz1=vwuz1_plus_vbuc1 lda #$78 clc adc bitmap_line.x2 @@ -3887,28 +3896,36 @@ main: { bcc !+ inc bitmap_line.x2+1 !: - // [19] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#2) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + // [17] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#5) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy a lda SINTAB+$20,y sta bitmap_line.y2 lda #0 sta bitmap_line.y2+1 - // [20] call bitmap_line + // [18] call bitmap_line jsr bitmap_line jmp b7 // main::@7 b7: - // [21] (byte) main::a#1 ← (byte) main::a#2 + (byte) $20 -- vbuz1=vbuz1_plus_vbuc1 + // [19] (byte) main::a#1 ← (byte) main::a#5 + (byte) $20 -- vbuz1=vbuz1_plus_vbuc1 lax a axs #-[$20] stx a - // [22] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [20] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuz1=_inc_vbuz1 inc i - // [11] phi from main::@7 to main::@1 [phi:main::@7->main::@1] - b1_from_b7: - // [11] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@7->main::@1#0] -- register_copy - // [11] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@7->main::@1#1] -- register_copy jmp b1 + // main::@1 + b1: + // [21] if((byte) main::i#1!=(byte) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #8 + cmp i + bne b2_from_b1 + jmp b3 + // main::@3 + b3: + // [22] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + inc SCREEN+$3e7 + jmp b3 } // bitmap_line // Draw a line on the bitmap using bresenhams algorithm @@ -4600,9 +4617,10 @@ Removing instruction jmp b5 Removing instruction jmp b6 Removing instruction jmp toD0181 Removing instruction jmp b4 +Removing instruction jmp b2 +Removing instruction jmp b7 Removing instruction jmp b1 Removing instruction jmp b3 -Removing instruction jmp b7 Removing instruction jmp b12 Removing instruction jmp b13 Removing instruction jmp b18 @@ -4642,6 +4660,7 @@ Removing instruction lda e+1 Removing instruction lda e1+1 Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b2_from_b1 with b2 Replacing label b7_from_b16 with b7 Replacing label b7_from_b16 with b7 Replacing label b6_from_b7 with b6 @@ -4665,6 +4684,7 @@ Removing instruction b5_from_main: Removing instruction bitmap_clear_from_b5: Removing instruction toD0181_from_b6: Removing instruction toD0181: +Removing instruction b2_from_b1: Removing instruction b6_from_b5: Removing instruction b6_from_b7: Removing instruction b7_from_b16: @@ -4695,9 +4715,9 @@ Removing instruction bitmap_init_from_main: Removing instruction b5: Removing instruction b6: Removing instruction b4: -Removing instruction b1_from_b4: +Removing instruction b2_from_b4: Removing instruction b7: -Removing instruction b1_from_b7: +Removing instruction b1: Removing instruction abs_u16_from_bitmap_line: Removing instruction b12: Removing instruction abs_u16_from_b12: @@ -4738,6 +4758,7 @@ Skipping double jump to breturn in jmp breturn_from_b1 Succesful ASM optimization Pass5DoubleJumpElimination Relabelling long label breturn_from_b1 to b2 Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b2 Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp b2 @@ -4749,7 +4770,7 @@ Removing instruction breturn: Removing instruction b2: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [119] beq b4 to bne +Fixing long branch [117] beq b4 to bne FINAL SYMBOL TABLE (label) @1 @@ -4929,11 +4950,11 @@ FINAL SYMBOL TABLE (label) main::@6 (label) main::@7 (byte) main::a -(byte) main::a#1 a zp ZP_BYTE:2 11.0 -(byte) main::a#2 a zp ZP_BYTE:2 2.4444444444444446 +(byte) main::a#1 a zp ZP_BYTE:2 7.333333333333333 +(byte) main::a#5 a zp ZP_BYTE:2 2.75 (byte) main::i -(byte) main::i#1 i zp ZP_BYTE:27 22.0 -(byte) main::i#2 i zp ZP_BYTE:27 3.3000000000000003 +(byte) main::i#1 i zp ZP_BYTE:27 16.5 +(byte) main::i#5 i zp ZP_BYTE:27 2.4444444444444446 (label) main::toD0181 (word~) main::toD0181_$0 (number~) main::toD0181_$1 @@ -4980,7 +5001,7 @@ FINAL SYMBOL TABLE (word) sgn_u16::w#1 w zp ZP_WORD:3 4.0 (word) sgn_u16::w#2 w zp ZP_WORD:3 6.0 -zp ZP_BYTE:2 [ main::a#2 main::a#1 ] +zp ZP_BYTE:2 [ main::a#5 main::a#1 ] reg byte x [ bitmap_plot::y#4 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ] zp ZP_WORD:3 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] zp ZP_WORD:5 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ] @@ -5003,14 +5024,14 @@ reg byte a [ sgn_u16::$0 ] reg byte a [ sgn_u16::$1 ] reg byte a [ abs_u16::$0 ] reg byte a [ abs_u16::$1 ] -zp ZP_BYTE:27 [ bitmap_init::$7 main::i#2 main::i#1 ] +zp ZP_BYTE:27 [ bitmap_init::$7 main::i#5 main::i#1 ] reg byte a [ bitmap_init::$4 ] reg byte a [ bitmap_init::$5 ] reg byte a [ bitmap_init::$6 ] FINAL ASSEMBLER -Score: 27289 +Score: 27259 // File Comments // Tests the simple bitmap plotter @@ -5065,36 +5086,26 @@ main: { // [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 - // [11] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - // [11] phi (byte) main::a#2 = (byte) 0 [phi:main::@4->main::@1#0] -- vbuz1=vbuc1 + // [11] phi from main::@4 to main::@2 [phi:main::@4->main::@2] + // [11] phi (byte) main::a#5 = (byte) 0 [phi:main::@4->main::@2#0] -- vbuz1=vbuc1 lda #0 sta a - // [11] phi (byte) main::i#2 = (byte) 0 [phi:main::@4->main::@1#1] -- vbuz1=vbuc1 + // [11] phi (byte) main::i#5 = (byte) 0 [phi:main::@4->main::@2#1] -- vbuz1=vbuc1 sta i - // main::@1 - b1: - // for( byte i=0, a=0; i!=8; i++, a+=32) - // [12] if((byte) main::i#2!=(byte) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 - lda #8 - cmp i - bne b2 - // main::@3 - b3: - // (*(SCREEN+999))++; - // [13] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 - inc SCREEN+$3e7 - jmp b3 + // [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [11] phi (byte) main::a#5 = (byte) main::a#1 [phi:main::@1->main::@2#0] -- register_copy + // [11] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy // main::@2 b2: // (word)COSTAB[a] - // [14] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#2) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + // [12] (word~) main::$7 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#5) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy a lda COSTAB,y sta _7 lda #0 sta _7+1 // bitmap_line( (word)COSTAB[a]+120, (word)SINTAB[a], (word)COSTAB[a+32]+120, (word)SINTAB[a+32]) - // [15] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 -- vwuz1=vwuz1_plus_vbuc1 + // [13] (word) bitmap_line::x1#0 ← (word~) main::$7 + (byte) $78 -- vwuz1=vwuz1_plus_vbuc1 lda #$78 clc adc bitmap_line.x1 @@ -5102,20 +5113,20 @@ main: { bcc !+ inc bitmap_line.x1+1 !: - // [16] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#2) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + // [14] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#5) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy a lda SINTAB,y sta bitmap_line.y1 lda #0 sta bitmap_line.y1+1 // (word)COSTAB[a+32] - // [17] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#2) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + // [15] (word~) main::$11 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#5) -- vwuz1=_word_pbuc1_derefidx_vbuz2 lda COSTAB+$20,y sta _11 lda #0 sta _11+1 // bitmap_line( (word)COSTAB[a]+120, (word)SINTAB[a], (word)COSTAB[a+32]+120, (word)SINTAB[a+32]) - // [18] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 -- vwuz1=vwuz1_plus_vbuc1 + // [16] (word) bitmap_line::x2#0 ← (word~) main::$11 + (byte) $78 -- vwuz1=vwuz1_plus_vbuc1 lda #$78 clc adc bitmap_line.x2 @@ -5123,27 +5134,34 @@ main: { bcc !+ inc bitmap_line.x2+1 !: - // [19] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#2) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + // [17] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#5) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy a lda SINTAB+$20,y sta bitmap_line.y2 lda #0 sta bitmap_line.y2+1 - // [20] call bitmap_line + // [18] call bitmap_line jsr bitmap_line // main::@7 // a+=32 - // [21] (byte) main::a#1 ← (byte) main::a#2 + (byte) $20 -- vbuz1=vbuz1_plus_vbuc1 + // [19] (byte) main::a#1 ← (byte) main::a#5 + (byte) $20 -- vbuz1=vbuz1_plus_vbuc1 lax a axs #-[$20] stx a // for( byte i=0, a=0; i!=8; i++, a+=32) - // [22] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [20] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuz1=_inc_vbuz1 inc i - // [11] phi from main::@7 to main::@1 [phi:main::@7->main::@1] - // [11] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@7->main::@1#0] -- register_copy - // [11] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@7->main::@1#1] -- register_copy - jmp b1 + // main::@1 + // [21] if((byte) main::i#1!=(byte) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #8 + cmp i + bne b2 + // main::@3 + b3: + // (*(SCREEN+999))++; + // [22] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + inc SCREEN+$3e7 + jmp b3 } // bitmap_line // Draw a line on the bitmap using bresenhams algorithm diff --git a/src/test/ref/bitmap-plot-3.sym b/src/test/ref/bitmap-plot-3.sym index df9504024..610cb8511 100644 --- a/src/test/ref/bitmap-plot-3.sym +++ b/src/test/ref/bitmap-plot-3.sym @@ -175,11 +175,11 @@ (label) main::@6 (label) main::@7 (byte) main::a -(byte) main::a#1 a zp ZP_BYTE:2 11.0 -(byte) main::a#2 a zp ZP_BYTE:2 2.4444444444444446 +(byte) main::a#1 a zp ZP_BYTE:2 7.333333333333333 +(byte) main::a#5 a zp ZP_BYTE:2 2.75 (byte) main::i -(byte) main::i#1 i zp ZP_BYTE:27 22.0 -(byte) main::i#2 i zp ZP_BYTE:27 3.3000000000000003 +(byte) main::i#1 i zp ZP_BYTE:27 16.5 +(byte) main::i#5 i zp ZP_BYTE:27 2.4444444444444446 (label) main::toD0181 (word~) main::toD0181_$0 (number~) main::toD0181_$1 @@ -226,7 +226,7 @@ (word) sgn_u16::w#1 w zp ZP_WORD:3 4.0 (word) sgn_u16::w#2 w zp ZP_WORD:3 6.0 -zp ZP_BYTE:2 [ main::a#2 main::a#1 ] +zp ZP_BYTE:2 [ main::a#5 main::a#1 ] reg byte x [ bitmap_plot::y#4 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ] zp ZP_WORD:3 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] zp ZP_WORD:5 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ] @@ -249,7 +249,7 @@ reg byte a [ sgn_u16::$0 ] reg byte a [ sgn_u16::$1 ] reg byte a [ abs_u16::$0 ] reg byte a [ abs_u16::$1 ] -zp ZP_BYTE:27 [ bitmap_init::$7 main::i#2 main::i#1 ] +zp ZP_BYTE:27 [ bitmap_init::$7 main::i#5 main::i#1 ] reg byte a [ bitmap_init::$4 ] reg byte a [ bitmap_init::$5 ] reg byte a [ bitmap_init::$6 ] diff --git a/src/test/ref/bitmap-plotter.asm b/src/test/ref/bitmap-plotter.asm index c3d8552e7..b4d7fd7a4 100644 --- a/src/test/ref/bitmap-plotter.asm +++ b/src/test/ref/bitmap-plotter.asm @@ -33,10 +33,6 @@ main: { } plots: { ldx #0 - b1: - cpx #plots_cnt - bcc b2 - rts b2: lda plots_x,x sta plot.x @@ -44,7 +40,9 @@ plots: { sta plot.y jsr plot inx - jmp b1 + cpx #plots_cnt + bcc b2 + rts } // plot(byte zeropage(7) x, byte zeropage(2) y) plot: { @@ -140,7 +138,14 @@ init_screen: { sta b lda #>BITMAP sta b+1 - b1: + b2: + lda #0 + tay + sta (b),y + inc b + bne !+ + inc b+1 + !: lda b+1 cmp #>BITMAP+$2000 bne b2 @@ -151,14 +156,6 @@ init_screen: { sta c lda #>SCREEN sta c+1 - b3: - lda c+1 - cmp #>SCREEN+$400 - bne b4 - lda c - cmp #SCREEN+$400 + bne b4 + lda c + cmp # (const byte*) BITMAP#0 -Constant right-side identified [64] (byte*~) init_screen::$0 ← (const byte*) BITMAP#0 + (word) $2000 -Constant right-side identified [69] (byte*~) init_screen::$2 ← (const byte*) SCREEN#0 + (word) $400 +Constant right-side identified [44] (byte~) init_plot_tables::$1 ← > (const byte*) BITMAP#0 +Constant right-side identified [67] (byte*~) init_screen::$0 ← (const byte*) BITMAP#0 + (word) $2000 +Constant right-side identified [72] (byte*~) init_screen::$2 ← (const byte*) SCREEN#0 + (word) $400 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::$0 = BMM#0|DEN#0 Constant (const word) main::$3 = (word)SCREEN#0 @@ -651,6 +656,16 @@ Constant (const byte) init_plot_tables::$1 = >BITMAP#0 Constant (const byte*) init_screen::$0 = BITMAP#0+$2000 Constant (const byte*) init_screen::$2 = SCREEN#0+$400 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [79] if((const byte) plots::i#0<(const byte) plots_cnt#0) goto plots::@2 +Successful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) init_screen::b#1 = (byte*) init_screen::b#2 +Alias (byte*) init_screen::c#1 = (byte*) init_screen::c#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) init_screen::b#5 (const byte*) init_screen::b#0 +Identical Phi Values (byte*) init_screen::c#5 (const byte*) init_screen::c#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [2] (byte~) main::$1 ← (const byte) main::$0 | (const byte) RSEL#0 Constant right-side identified [5] (word~) main::$4 ← (const word) main::$3 / (byte) $40 Constant right-side identified [6] (word~) main::$6 ← (const word) main::$5 / (word) $400 @@ -659,6 +674,9 @@ Constant (const byte) main::$1 = main::$0|RSEL#0 Constant (const word) main::$4 = main::$3/$40 Constant (const word) main::$6 = main::$5/$400 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [73] if((const byte*) init_screen::b#0!=(const byte*) init_screen::$0) goto init_screen::@2 +if() condition always true - replacing block destination [75] if((const byte*) init_screen::c#0!=(const byte*) init_screen::$2) goto init_screen::@8 +Successful SSA optimization Pass2ConstantIfs Constant right-side identified [2] (byte~) main::$2 ← (const byte) main::$1 | (byte) 3 Constant right-side identified [4] (word~) main::$7 ← (const word) main::$4 | (const word) main::$6 Successful SSA optimization Pass2ConstantRValueConsolidation @@ -704,10 +722,13 @@ Constant inlined main::$7 = (word)(const byte*) SCREEN#0/(byte) $40|(word)(const Constant inlined init_screen::$0 = (const byte*) BITMAP#0+(word) $2000 Constant inlined main::$8 = (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) BITMAP#0/(word) $400 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting plots::@8(between plots::@1 and plots::@2) Added new block during phi lifting init_plot_tables::@9(between init_plot_tables::@2 and init_plot_tables::@1) Added new block during phi lifting init_plot_tables::@10(between init_plot_tables::@1 and init_plot_tables::@2) Added new block during phi lifting init_plot_tables::@11(between init_plot_tables::@6 and init_plot_tables::@5) Added new block during phi lifting init_plot_tables::@12(between init_plot_tables::@5 and init_plot_tables::@6) +Added new block during phi lifting init_screen::@13(between init_screen::@1 and init_screen::@2) +Added new block during phi lifting init_screen::@14(between init_screen::@7 and init_screen::@8) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 @@ -717,38 +738,47 @@ Adding NOP phi() at start of @end Adding NOP phi() at start of main::@5 Adding NOP phi() at start of main::@6 Adding NOP phi() at start of plots +Adding NOP phi() at start of plots::@1_1 Adding NOP phi() at start of init_plot_tables Adding NOP phi() at start of init_plot_tables::@3 Adding NOP phi() at start of init_plot_tables::@4 Adding NOP phi() at start of init_screen +Adding NOP phi() at start of init_screen::@1_1 Adding NOP phi() at start of init_screen::@3 +Adding NOP phi() at start of init_screen::@7_1 CALL GRAPH Calls in [] to main:4 Calls in [main] to init_screen:11 init_plot_tables:13 plots:17 -Calls in [plots] to plot:25 +Calls in [plots] to plot:24 Created 9 initial phi equivalence classes -Coalesced [27] plots::i#5 ← plots::i#1 -Coalesced [62] init_plot_tables::yoffs#7 ← init_plot_tables::yoffs#1 -Coalesced [67] init_plot_tables::y#5 ← init_plot_tables::y#1 -Coalesced [68] init_plot_tables::yoffs#5 ← init_plot_tables::yoffs#4 -Coalesced (already) [69] init_plot_tables::yoffs#6 ← init_plot_tables::yoffs#2 -Coalesced [70] init_plot_tables::x#5 ← init_plot_tables::x#1 -Coalesced [71] init_plot_tables::bits#5 ← init_plot_tables::bits#4 -Coalesced [72] init_plot_tables::bits#6 ← init_plot_tables::bits#1 -Coalesced [82] init_screen::c#4 ← init_screen::c#1 -Coalesced [85] init_screen::b#4 ← init_screen::b#1 +Coalesced [28] plots::i#8 ← plots::i#1 +Coalesced [63] init_plot_tables::yoffs#7 ← init_plot_tables::yoffs#1 +Coalesced [68] init_plot_tables::y#5 ← init_plot_tables::y#1 +Coalesced [69] init_plot_tables::yoffs#5 ← init_plot_tables::yoffs#4 +Coalesced (already) [70] init_plot_tables::yoffs#6 ← init_plot_tables::yoffs#2 +Coalesced [71] init_plot_tables::x#5 ← init_plot_tables::x#1 +Coalesced [72] init_plot_tables::bits#5 ← init_plot_tables::bits#4 +Coalesced [73] init_plot_tables::bits#6 ← init_plot_tables::bits#1 +Coalesced [87] init_screen::c#6 ← init_screen::c#1 +Coalesced [88] init_screen::b#6 ← init_screen::b#1 Coalesced down to 7 phi equivalence classes Culled Empty Block (label) @1 Culled Empty Block (label) @2 Culled Empty Block (label) @6 Culled Empty Block (label) main::@6 +Culled Empty Block (label) plots::@1_1 +Culled Empty Block (label) plots::@8 Culled Empty Block (label) init_plot_tables::@3 Culled Empty Block (label) init_plot_tables::@4 Culled Empty Block (label) init_plot_tables::@11 Culled Empty Block (label) init_plot_tables::@12 Culled Empty Block (label) init_plot_tables::@9 +Culled Empty Block (label) init_screen::@1_1 Culled Empty Block (label) init_screen::@3 +Culled Empty Block (label) init_screen::@7_1 +Culled Empty Block (label) init_screen::@14 +Culled Empty Block (label) init_screen::@13 Renumbering block @5 to @1 Renumbering block main::@2 to main::@1 Renumbering block main::@3 to main::@2 @@ -803,22 +833,22 @@ main::@4: scope:[main] from main::@2 to:main::@1 plots: scope:[plots] from main::@2 [15] phi() - to:plots::@1 -plots::@1: scope:[plots] from plots plots::@3 - [16] (byte) plots::i#2 ← phi( plots/(byte) 0 plots::@3/(byte) plots::i#1 ) - [17] if((byte) plots::i#2<(const byte) plots_cnt#0) goto plots::@2 - to:plots::@return -plots::@return: scope:[plots] from plots::@1 - [18] return - to:@return -plots::@2: scope:[plots] from plots::@1 - [19] (byte) plot::x#0 ← *((const byte[]) plots_x#0 + (byte) plots::i#2) - [20] (byte) plot::y#0 ← *((const byte[]) plots_y#0 + (byte) plots::i#2) - [21] call plot + to:plots::@2 +plots::@2: scope:[plots] from plots plots::@1 + [16] (byte) plots::i#5 ← phi( plots::@1/(byte) plots::i#1 plots/(byte) 0 ) + [17] (byte) plot::x#0 ← *((const byte[]) plots_x#0 + (byte) plots::i#5) + [18] (byte) plot::y#0 ← *((const byte[]) plots_y#0 + (byte) plots::i#5) + [19] call plot to:plots::@3 plots::@3: scope:[plots] from plots::@2 - [22] (byte) plots::i#1 ← ++ (byte) plots::i#2 + [20] (byte) plots::i#1 ← ++ (byte) plots::i#5 to:plots::@1 +plots::@1: scope:[plots] from plots::@3 + [21] if((byte) plots::i#1<(const byte) plots_cnt#0) goto plots::@2 + to:plots::@return +plots::@return: scope:[plots] from plots::@1 + [22] return + to:@return plot: scope:[plot] from plots::@2 [23] (byte~) plot::$6 ← *((const byte[$100]) plot_xhi#0 + (byte) plot::x#0) [24] (byte*) plot::plotter_x#1 ← (byte*) 0 hi= (byte~) plot::$6 @@ -880,26 +910,26 @@ init_plot_tables::@return: scope:[init_plot_tables] from init_plot_tables::@4 to:@return init_screen: scope:[init_screen] from main [60] phi() + to:init_screen::@2 +init_screen::@2: scope:[init_screen] from init_screen init_screen::@1 + [61] (byte*) init_screen::b#4 ← phi( init_screen::@1/(byte*) init_screen::b#1 init_screen/(const byte*) BITMAP#0 ) + [62] *((byte*) init_screen::b#4) ← (byte) 0 + [63] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#4 to:init_screen::@1 -init_screen::@1: scope:[init_screen] from init_screen init_screen::@2 - [61] (byte*) init_screen::b#2 ← phi( init_screen/(const byte*) BITMAP#0 init_screen::@2/(byte*) init_screen::b#1 ) - [62] if((byte*) init_screen::b#2!=(const byte*) BITMAP#0+(word) $2000) goto init_screen::@2 +init_screen::@1: scope:[init_screen] from init_screen::@2 + [64] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word) $2000) goto init_screen::@2 + to:init_screen::@4 +init_screen::@4: scope:[init_screen] from init_screen::@1 init_screen::@3 + [65] (byte*) init_screen::c#4 ← phi( init_screen::@3/(byte*) init_screen::c#1 init_screen::@1/(const byte*) SCREEN#0 ) + [66] *((byte*) init_screen::c#4) ← (byte) $14 + [67] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#4 to:init_screen::@3 -init_screen::@3: scope:[init_screen] from init_screen::@1 init_screen::@4 - [63] (byte*) init_screen::c#2 ← phi( init_screen::@1/(const byte*) SCREEN#0 init_screen::@4/(byte*) init_screen::c#1 ) - [64] if((byte*) init_screen::c#2!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@4 +init_screen::@3: scope:[init_screen] from init_screen::@4 + [68] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@4 to:init_screen::@return init_screen::@return: scope:[init_screen] from init_screen::@3 - [65] return + [69] return to:@return -init_screen::@4: scope:[init_screen] from init_screen::@3 - [66] *((byte*) init_screen::c#2) ← (byte) $14 - [67] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2 - to:init_screen::@3 -init_screen::@2: scope:[init_screen] from init_screen::@1 - [68] *((byte*) init_screen::b#2) ← (byte) 0 - [69] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#2 - to:init_screen::@1 VARIABLE REGISTER WEIGHTS @@ -935,11 +965,11 @@ VARIABLE REGISTER WEIGHTS (byte*) init_plot_tables::yoffs#4 11.0 (void()) init_screen() (byte*) init_screen::b -(byte*) init_screen::b#1 22.0 -(byte*) init_screen::b#2 14.666666666666666 +(byte*) init_screen::b#1 16.5 +(byte*) init_screen::b#4 16.5 (byte*) init_screen::c -(byte*) init_screen::c#1 22.0 -(byte*) init_screen::c#2 14.666666666666666 +(byte*) init_screen::c#1 16.5 +(byte*) init_screen::c#4 16.5 (void()) main() (void()) plot((byte) plot::x , (byte) plot::y) (byte~) plot::$5 4.0 @@ -966,20 +996,20 @@ VARIABLE REGISTER WEIGHTS (byte[$100]) plot_ylo (void()) plots() (byte) plots::i -(byte) plots::i#1 202.0 -(byte) plots::i#2 101.0 +(byte) plots::i#1 151.5 +(byte) plots::i#5 101.0 (byte) plots_cnt (byte[]) plots_x (byte[]) plots_y Initial phi equivalence classes -[ plots::i#2 plots::i#1 ] +[ plots::i#5 plots::i#1 ] [ init_plot_tables::x#2 init_plot_tables::x#1 ] [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] [ init_plot_tables::y#2 init_plot_tables::y#1 ] [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] -[ init_screen::b#2 init_screen::b#1 ] -[ init_screen::c#2 init_screen::c#1 ] +[ init_screen::b#4 init_screen::b#1 ] +[ init_screen::c#4 init_screen::c#1 ] Added variable plot::x#0 to zero page equivalence class [ plot::x#0 ] Added variable plot::y#0 to zero page equivalence class [ plot::y#0 ] Added variable plot::$6 to zero page equivalence class [ plot::$6 ] @@ -998,13 +1028,13 @@ Added variable init_plot_tables::$7 to zero page equivalence class [ init_plot_t Added variable init_plot_tables::$8 to zero page equivalence class [ init_plot_tables::$8 ] Added variable init_plot_tables::$9 to zero page equivalence class [ init_plot_tables::$9 ] Complete equivalence classes -[ plots::i#2 plots::i#1 ] +[ plots::i#5 plots::i#1 ] [ init_plot_tables::x#2 init_plot_tables::x#1 ] [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] [ init_plot_tables::y#2 init_plot_tables::y#1 ] [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] -[ init_screen::b#2 init_screen::b#1 ] -[ init_screen::c#2 init_screen::c#1 ] +[ init_screen::b#4 init_screen::b#1 ] +[ init_screen::c#4 init_screen::c#1 ] [ plot::x#0 ] [ plot::y#0 ] [ plot::$6 ] @@ -1022,13 +1052,13 @@ Complete equivalence classes [ init_plot_tables::$7 ] [ init_plot_tables::$8 ] [ init_plot_tables::$9 ] -Allocated zp ZP_BYTE:2 [ plots::i#2 plots::i#1 ] +Allocated zp ZP_BYTE:2 [ plots::i#5 plots::i#1 ] Allocated zp ZP_BYTE:3 [ init_plot_tables::x#2 init_plot_tables::x#1 ] Allocated zp ZP_BYTE:4 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] Allocated zp ZP_BYTE:5 [ init_plot_tables::y#2 init_plot_tables::y#1 ] Allocated zp ZP_WORD:6 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] -Allocated zp ZP_WORD:8 [ init_screen::b#2 init_screen::b#1 ] -Allocated zp ZP_WORD:10 [ init_screen::c#2 init_screen::c#1 ] +Allocated zp ZP_WORD:8 [ init_screen::b#4 init_screen::b#1 ] +Allocated zp ZP_WORD:10 [ init_screen::c#4 init_screen::c#1 ] Allocated zp ZP_BYTE:12 [ plot::x#0 ] Allocated zp ZP_BYTE:13 [ plot::y#0 ] Allocated zp ZP_BYTE:14 [ plot::$6 ] @@ -1133,44 +1163,45 @@ main: { // plots plots: { .label i = 2 - // [16] phi from plots to plots::@1 [phi:plots->plots::@1] - b1_from_plots: - // [16] phi (byte) plots::i#2 = (byte) 0 [phi:plots->plots::@1#0] -- vbuz1=vbuc1 + // [16] phi from plots to plots::@2 [phi:plots->plots::@2] + b2_from_plots: + // [16] phi (byte) plots::i#5 = (byte) 0 [phi:plots->plots::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // plots::@1 - b1: - // [17] if((byte) plots::i#2<(const byte) plots_cnt#0) goto plots::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #plots_cnt - bcc b2 - jmp breturn - // plots::@return - breturn: - // [18] return - rts + jmp b2 + // [16] phi from plots::@1 to plots::@2 [phi:plots::@1->plots::@2] + b2_from_b1: + // [16] phi (byte) plots::i#5 = (byte) plots::i#1 [phi:plots::@1->plots::@2#0] -- register_copy + jmp b2 // plots::@2 b2: - // [19] (byte) plot::x#0 ← *((const byte[]) plots_x#0 + (byte) plots::i#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [17] (byte) plot::x#0 ← *((const byte[]) plots_x#0 + (byte) plots::i#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy i lda plots_x,y sta plot.x - // [20] (byte) plot::y#0 ← *((const byte[]) plots_y#0 + (byte) plots::i#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [18] (byte) plot::y#0 ← *((const byte[]) plots_y#0 + (byte) plots::i#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy i lda plots_y,y sta plot.y - // [21] call plot + // [19] call plot jsr plot jmp b3 // plots::@3 b3: - // [22] (byte) plots::i#1 ← ++ (byte) plots::i#2 -- vbuz1=_inc_vbuz1 + // [20] (byte) plots::i#1 ← ++ (byte) plots::i#5 -- vbuz1=_inc_vbuz1 inc i - // [16] phi from plots::@3 to plots::@1 [phi:plots::@3->plots::@1] - b1_from_b3: - // [16] phi (byte) plots::i#2 = (byte) plots::i#1 [phi:plots::@3->plots::@1#0] -- register_copy jmp b1 + // plots::@1 + b1: + // [21] if((byte) plots::i#1<(const byte) plots_cnt#0) goto plots::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #plots_cnt + bcc b2_from_b1 + jmp breturn + // plots::@return + breturn: + // [22] return + rts } // plot // plot(byte zeropage($c) x, byte zeropage($d) y) @@ -1397,75 +1428,77 @@ init_plot_tables: { init_screen: { .label b = 8 .label c = $a - // [61] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] - b1_from_init_screen: - // [61] phi (byte*) init_screen::b#2 = (const byte*) BITMAP#0 [phi:init_screen->init_screen::@1#0] -- pbuz1=pbuc1 + // [61] phi from init_screen to init_screen::@2 [phi:init_screen->init_screen::@2] + b2_from_init_screen: + // [61] phi (byte*) init_screen::b#4 = (const byte*) BITMAP#0 [phi:init_screen->init_screen::@2#0] -- pbuz1=pbuc1 lda #BITMAP sta b+1 - jmp b1 - // init_screen::@1 - b1: - // [62] if((byte*) init_screen::b#2!=(const byte*) BITMAP#0+(word) $2000) goto init_screen::@2 -- pbuz1_neq_pbuc1_then_la1 - lda b+1 - cmp #>BITMAP+$2000 - bne b2 - lda b - cmp #init_screen::@3] - b3_from_b1: - // [63] phi (byte*) init_screen::c#2 = (const byte*) SCREEN#0 [phi:init_screen::@1->init_screen::@3#0] -- pbuz1=pbuc1 - lda #SCREEN - sta c+1 - jmp b3 - // init_screen::@3 - b3: - // [64] if((byte*) init_screen::c#2!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@4 -- pbuz1_neq_pbuc1_then_la1 - lda c+1 - cmp #>SCREEN+$400 - bne b4 - lda c - cmp #init_screen::@3] - b3_from_b4: - // [63] phi (byte*) init_screen::c#2 = (byte*) init_screen::c#1 [phi:init_screen::@4->init_screen::@3#0] -- register_copy - jmp b3 + jmp b2 + // [61] phi from init_screen::@1 to init_screen::@2 [phi:init_screen::@1->init_screen::@2] + b2_from_b1: + // [61] phi (byte*) init_screen::b#4 = (byte*) init_screen::b#1 [phi:init_screen::@1->init_screen::@2#0] -- register_copy + jmp b2 // init_screen::@2 b2: - // [68] *((byte*) init_screen::b#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [62] *((byte*) init_screen::b#4) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (b),y - // [69] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#2 -- pbuz1=_inc_pbuz1 + // [63] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#4 -- pbuz1=_inc_pbuz1 inc b bne !+ inc b+1 !: - // [61] phi from init_screen::@2 to init_screen::@1 [phi:init_screen::@2->init_screen::@1] - b1_from_b2: - // [61] phi (byte*) init_screen::b#2 = (byte*) init_screen::b#1 [phi:init_screen::@2->init_screen::@1#0] -- register_copy jmp b1 + // init_screen::@1 + b1: + // [64] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word) $2000) goto init_screen::@2 -- pbuz1_neq_pbuc1_then_la1 + lda b+1 + cmp #>BITMAP+$2000 + bne b2_from_b1 + lda b + cmp #init_screen::@4] + b4_from_b1: + // [65] phi (byte*) init_screen::c#4 = (const byte*) SCREEN#0 [phi:init_screen::@1->init_screen::@4#0] -- pbuz1=pbuc1 + lda #SCREEN + sta c+1 + jmp b4 + // [65] phi from init_screen::@3 to init_screen::@4 [phi:init_screen::@3->init_screen::@4] + b4_from_b3: + // [65] phi (byte*) init_screen::c#4 = (byte*) init_screen::c#1 [phi:init_screen::@3->init_screen::@4#0] -- register_copy + jmp b4 + // init_screen::@4 + b4: + // [66] *((byte*) init_screen::c#4) ← (byte) $14 -- _deref_pbuz1=vbuc1 + lda #$14 + ldy #0 + sta (c),y + // [67] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#4 -- pbuz1=_inc_pbuz1 + inc c + bne !+ + inc c+1 + !: + jmp b3 + // init_screen::@3 + b3: + // [68] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@4 -- pbuz1_neq_pbuc1_then_la1 + lda c+1 + cmp #>SCREEN+$400 + bne b4_from_b3 + lda c + cmp #(const byte*) BITMAP#0 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ init_plot_tables::x#2 init_plot_tables::x#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] Statement [40] *((const byte[$100]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ) always clobbers reg byte a Statement [55] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (word)(number) $28*(number) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ init_plot_tables::y#2 init_plot_tables::y#1 ] -Statement [62] if((byte*) init_screen::b#2!=(const byte*) BITMAP#0+(word) $2000) goto init_screen::@2 [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] ) always clobbers reg byte a -Statement [64] if((byte*) init_screen::c#2!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@4 [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] ) always clobbers reg byte a -Statement [66] *((byte*) init_screen::c#2) ← (byte) $14 [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] ) always clobbers reg byte a reg byte y -Statement [68] *((byte*) init_screen::b#2) ← (byte) 0 [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] ) always clobbers reg byte a reg byte y +Statement [62] *((byte*) init_screen::b#4) ← (byte) 0 [ init_screen::b#4 ] ( main:2::init_screen:8 [ init_screen::b#4 ] ) always clobbers reg byte a reg byte y +Statement [64] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word) $2000) goto init_screen::@2 [ init_screen::b#1 ] ( main:2::init_screen:8 [ init_screen::b#1 ] ) always clobbers reg byte a +Statement [66] *((byte*) init_screen::c#4) ← (byte) $14 [ init_screen::c#4 ] ( main:2::init_screen:8 [ init_screen::c#4 ] ) always clobbers reg byte a reg byte y +Statement [68] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@4 [ init_screen::c#1 ] ( main:2::init_screen:8 [ init_screen::c#1 ] ) always clobbers reg byte a Statement [4] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [5] *((const byte*) FGCOL#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) D011#0) ← (const byte) BMM#0|(const byte) DEN#0|(const byte) RSEL#0|(byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [7] *((const byte*) D018#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) BITMAP#0/(word) $400 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@1 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [26] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$7 [ plot::x#0 plot::y#0 plot::plotter_x#2 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 ] ) always clobbers reg byte a -Statement [30] (word) plot::plotter_y#2 ← (word) plot::plotter_y#1 lo= (byte~) plot::$9 [ plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ) always clobbers reg byte a -Statement [31] (byte*) plot::plotter#0 ← (byte*) plot::plotter_x#2 + (word) plot::plotter_y#2 [ plot::x#0 plot::plotter#0 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::plotter#0 ] ) always clobbers reg byte a -Statement [32] (byte~) plot::$5 ← *((byte*) plot::plotter#0) | *((const byte[$100]) plot_bit#0 + (byte) plot::x#0) [ plot::plotter#0 plot::$5 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::plotter#0 plot::$5 ] ) always clobbers reg byte a reg byte y -Statement [33] *((byte*) plot::plotter#0) ← (byte~) plot::$5 [ ] ( main:2::plots:13::plot:21 [ plots::i#2 ] ) always clobbers reg byte y +Statement [26] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$7 [ plot::x#0 plot::y#0 plot::plotter_x#2 ] ( main:2::plots:13::plot:19 [ plots::i#5 plot::x#0 plot::y#0 plot::plotter_x#2 ] ) always clobbers reg byte a +Statement [30] (word) plot::plotter_y#2 ← (word) plot::plotter_y#1 lo= (byte~) plot::$9 [ plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ( main:2::plots:13::plot:19 [ plots::i#5 plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ) always clobbers reg byte a +Statement [31] (byte*) plot::plotter#0 ← (byte*) plot::plotter_x#2 + (word) plot::plotter_y#2 [ plot::x#0 plot::plotter#0 ] ( main:2::plots:13::plot:19 [ plots::i#5 plot::x#0 plot::plotter#0 ] ) always clobbers reg byte a +Statement [32] (byte~) plot::$5 ← *((byte*) plot::plotter#0) | *((const byte[$100]) plot_bit#0 + (byte) plot::x#0) [ plot::plotter#0 plot::$5 ] ( main:2::plots:13::plot:19 [ plots::i#5 plot::plotter#0 plot::$5 ] ) always clobbers reg byte a reg byte y +Statement [33] *((byte*) plot::plotter#0) ← (byte~) plot::$5 [ ] ( main:2::plots:13::plot:19 [ plots::i#5 ] ) always clobbers reg byte y Statement [37] (byte~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (byte) $f8 [ init_plot_tables::x#2 init_plot_tables::bits#3 init_plot_tables::$0 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 init_plot_tables::$0 ] ) always clobbers reg byte a Statement [39] *((const byte[$100]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← >(const byte*) BITMAP#0 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ) always clobbers reg byte a Statement [40] *((const byte[$100]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ) always clobbers reg byte a Statement [48] (byte~) init_plot_tables::$10 ← (byte) init_plot_tables::y#2 & (byte) 7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$10 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$10 ] ) always clobbers reg byte a Statement [55] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (word)(number) $28*(number) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ) always clobbers reg byte a -Statement [62] if((byte*) init_screen::b#2!=(const byte*) BITMAP#0+(word) $2000) goto init_screen::@2 [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] ) always clobbers reg byte a -Statement [64] if((byte*) init_screen::c#2!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@4 [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] ) always clobbers reg byte a -Statement [66] *((byte*) init_screen::c#2) ← (byte) $14 [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] ) always clobbers reg byte a reg byte y -Statement [68] *((byte*) init_screen::b#2) ← (byte) 0 [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_BYTE:2 [ plots::i#2 plots::i#1 ] : zp ZP_BYTE:2 , reg byte x , +Statement [62] *((byte*) init_screen::b#4) ← (byte) 0 [ init_screen::b#4 ] ( main:2::init_screen:8 [ init_screen::b#4 ] ) always clobbers reg byte a reg byte y +Statement [64] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word) $2000) goto init_screen::@2 [ init_screen::b#1 ] ( main:2::init_screen:8 [ init_screen::b#1 ] ) always clobbers reg byte a +Statement [66] *((byte*) init_screen::c#4) ← (byte) $14 [ init_screen::c#4 ] ( main:2::init_screen:8 [ init_screen::c#4 ] ) always clobbers reg byte a reg byte y +Statement [68] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@4 [ init_screen::c#1 ] ( main:2::init_screen:8 [ init_screen::c#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ plots::i#5 plots::i#1 ] : zp ZP_BYTE:2 , reg byte x , Potential registers zp ZP_BYTE:3 [ init_plot_tables::x#2 init_plot_tables::x#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:4 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:5 [ init_plot_tables::y#2 init_plot_tables::y#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , Potential registers zp ZP_WORD:6 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] : zp ZP_WORD:6 , -Potential registers zp ZP_WORD:8 [ init_screen::b#2 init_screen::b#1 ] : zp ZP_WORD:8 , -Potential registers zp ZP_WORD:10 [ init_screen::c#2 init_screen::c#1 ] : zp ZP_WORD:10 , +Potential registers zp ZP_WORD:8 [ init_screen::b#4 init_screen::b#1 ] : zp ZP_WORD:8 , +Potential registers zp ZP_WORD:10 [ init_screen::c#4 init_screen::c#1 ] : zp ZP_WORD:10 , Potential registers zp ZP_BYTE:12 [ plot::x#0 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:13 [ plot::y#0 ] : zp ZP_BYTE:13 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:14 [ plot::$6 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y , @@ -1547,49 +1580,49 @@ Potential registers zp ZP_BYTE:32 [ init_plot_tables::$8 ] : zp ZP_BYTE:32 , reg Potential registers zp ZP_BYTE:33 [ init_plot_tables::$9 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [plots] 303: zp ZP_BYTE:2 [ plots::i#2 plots::i#1 ] +Uplift Scope [plots] 252.5: zp ZP_BYTE:2 [ plots::i#5 plots::i#1 ] Uplift Scope [init_plot_tables] 39.88: zp ZP_WORD:6 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] 24.93: zp ZP_BYTE:4 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] 23.83: zp ZP_BYTE:3 [ init_plot_tables::x#2 init_plot_tables::x#1 ] 22: zp ZP_BYTE:5 [ init_plot_tables::y#2 init_plot_tables::y#1 ] 22: zp ZP_BYTE:29 [ init_plot_tables::$0 ] 22: zp ZP_BYTE:31 [ init_plot_tables::$7 ] 22: zp ZP_BYTE:32 [ init_plot_tables::$8 ] 22: zp ZP_BYTE:33 [ init_plot_tables::$9 ] 5.5: zp ZP_BYTE:30 [ init_plot_tables::$10 ] -Uplift Scope [init_screen] 36.67: zp ZP_WORD:8 [ init_screen::b#2 init_screen::b#1 ] 36.67: zp ZP_WORD:10 [ init_screen::c#2 init_screen::c#1 ] +Uplift Scope [init_screen] 33: zp ZP_WORD:8 [ init_screen::b#4 init_screen::b#1 ] 33: zp ZP_WORD:10 [ init_screen::c#4 init_screen::c#1 ] Uplift Scope [plot] 15: zp ZP_BYTE:13 [ plot::y#0 ] 9.73: zp ZP_BYTE:12 [ plot::x#0 ] 4: zp ZP_BYTE:14 [ plot::$6 ] 4: zp ZP_BYTE:17 [ plot::$7 ] 4: zp ZP_BYTE:20 [ plot::$8 ] 4: zp ZP_BYTE:23 [ plot::$9 ] 4: zp ZP_WORD:24 [ plot::plotter_y#2 ] 4: zp ZP_BYTE:28 [ plot::$5 ] 3: zp ZP_WORD:26 [ plot::plotter#0 ] 2: zp ZP_WORD:15 [ plot::plotter_x#1 ] 2: zp ZP_WORD:21 [ plot::plotter_y#1 ] 0.8: zp ZP_WORD:18 [ plot::plotter_x#2 ] Uplift Scope [main] Uplift Scope [] -Uplifting [plots] best 8915 combination reg byte x [ plots::i#2 plots::i#1 ] -Uplifting [init_plot_tables] best 8395 combination zp ZP_WORD:6 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] reg byte a [ init_plot_tables::$0 ] zp ZP_BYTE:31 [ init_plot_tables::$7 ] zp ZP_BYTE:32 [ init_plot_tables::$8 ] zp ZP_BYTE:33 [ init_plot_tables::$9 ] zp ZP_BYTE:30 [ init_plot_tables::$10 ] +Uplifting [plots] best 9275 combination reg byte x [ plots::i#5 plots::i#1 ] +Uplifting [init_plot_tables] best 8755 combination zp ZP_WORD:6 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] reg byte a [ init_plot_tables::$0 ] zp ZP_BYTE:31 [ init_plot_tables::$7 ] zp ZP_BYTE:32 [ init_plot_tables::$8 ] zp ZP_BYTE:33 [ init_plot_tables::$9 ] zp ZP_BYTE:30 [ init_plot_tables::$10 ] Limited combination testing to 100 combinations of 34560 possible. -Uplifting [init_screen] best 8395 combination zp ZP_WORD:8 [ init_screen::b#2 init_screen::b#1 ] zp ZP_WORD:10 [ init_screen::c#2 init_screen::c#1 ] -Uplifting [plot] best 8383 combination zp ZP_BYTE:13 [ plot::y#0 ] zp ZP_BYTE:12 [ plot::x#0 ] reg byte a [ plot::$6 ] reg byte a [ plot::$7 ] zp ZP_BYTE:20 [ plot::$8 ] zp ZP_BYTE:23 [ plot::$9 ] zp ZP_WORD:24 [ plot::plotter_y#2 ] zp ZP_BYTE:28 [ plot::$5 ] zp ZP_WORD:26 [ plot::plotter#0 ] zp ZP_WORD:15 [ plot::plotter_x#1 ] zp ZP_WORD:21 [ plot::plotter_y#1 ] zp ZP_WORD:18 [ plot::plotter_x#2 ] +Uplifting [init_screen] best 8755 combination zp ZP_WORD:8 [ init_screen::b#4 init_screen::b#1 ] zp ZP_WORD:10 [ init_screen::c#4 init_screen::c#1 ] +Uplifting [plot] best 8743 combination zp ZP_BYTE:13 [ plot::y#0 ] zp ZP_BYTE:12 [ plot::x#0 ] reg byte a [ plot::$6 ] reg byte a [ plot::$7 ] zp ZP_BYTE:20 [ plot::$8 ] zp ZP_BYTE:23 [ plot::$9 ] zp ZP_WORD:24 [ plot::plotter_y#2 ] zp ZP_BYTE:28 [ plot::$5 ] zp ZP_WORD:26 [ plot::plotter#0 ] zp ZP_WORD:15 [ plot::plotter_x#1 ] zp ZP_WORD:21 [ plot::plotter_y#1 ] zp ZP_WORD:18 [ plot::plotter_x#2 ] Limited combination testing to 100 combinations of 9216 possible. -Uplifting [main] best 8383 combination -Uplifting [] best 8383 combination +Uplifting [main] best 8743 combination +Uplifting [] best 8743 combination Attempting to uplift remaining variables inzp ZP_BYTE:31 [ init_plot_tables::$7 ] -Uplifting [init_plot_tables] best 8323 combination reg byte a [ init_plot_tables::$7 ] +Uplifting [init_plot_tables] best 8683 combination reg byte a [ init_plot_tables::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:32 [ init_plot_tables::$8 ] -Uplifting [init_plot_tables] best 8263 combination reg byte a [ init_plot_tables::$8 ] +Uplifting [init_plot_tables] best 8623 combination reg byte a [ init_plot_tables::$8 ] Attempting to uplift remaining variables inzp ZP_BYTE:33 [ init_plot_tables::$9 ] -Uplifting [init_plot_tables] best 8203 combination reg byte a [ init_plot_tables::$9 ] +Uplifting [init_plot_tables] best 8563 combination reg byte a [ init_plot_tables::$9 ] Attempting to uplift remaining variables inzp ZP_BYTE:13 [ plot::y#0 ] -Uplifting [plot] best 8203 combination zp ZP_BYTE:13 [ plot::y#0 ] +Uplifting [plot] best 8563 combination zp ZP_BYTE:13 [ plot::y#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:12 [ plot::x#0 ] -Uplifting [plot] best 8203 combination zp ZP_BYTE:12 [ plot::x#0 ] +Uplifting [plot] best 8563 combination zp ZP_BYTE:12 [ plot::x#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:30 [ init_plot_tables::$10 ] -Uplifting [init_plot_tables] best 8203 combination zp ZP_BYTE:30 [ init_plot_tables::$10 ] +Uplifting [init_plot_tables] best 8563 combination zp ZP_BYTE:30 [ init_plot_tables::$10 ] Attempting to uplift remaining variables inzp ZP_BYTE:20 [ plot::$8 ] -Uplifting [plot] best 8197 combination reg byte a [ plot::$8 ] +Uplifting [plot] best 8557 combination reg byte a [ plot::$8 ] Attempting to uplift remaining variables inzp ZP_BYTE:23 [ plot::$9 ] -Uplifting [plot] best 8191 combination reg byte a [ plot::$9 ] +Uplifting [plot] best 8551 combination reg byte a [ plot::$9 ] Attempting to uplift remaining variables inzp ZP_BYTE:28 [ plot::$5 ] -Uplifting [plot] best 8185 combination reg byte a [ plot::$5 ] +Uplifting [plot] best 8545 combination reg byte a [ plot::$5 ] Coalescing zero page register [ zp ZP_WORD:15 [ plot::plotter_x#1 ] ] with [ zp ZP_WORD:18 [ plot::plotter_x#2 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:21 [ plot::plotter_y#1 ] ] with [ zp ZP_WORD:24 [ plot::plotter_y#2 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:15 [ plot::plotter_x#1 plot::plotter_x#2 ] ] with [ zp ZP_WORD:26 [ plot::plotter#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:8 [ init_screen::b#2 init_screen::b#1 ] ] with [ zp ZP_WORD:6 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] ] -Coalescing zero page register [ zp ZP_WORD:15 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 ] ] with [ zp ZP_WORD:10 [ init_screen::c#2 init_screen::c#1 ] ] +Coalescing zero page register [ zp ZP_WORD:8 [ init_screen::b#4 init_screen::b#1 ] ] with [ zp ZP_WORD:6 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] ] +Coalescing zero page register [ zp ZP_WORD:15 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 ] ] with [ zp ZP_WORD:10 [ init_screen::c#4 init_screen::c#1 ] ] Coalescing zero page register [ zp ZP_BYTE:30 [ init_plot_tables::$10 ] ] with [ zp ZP_BYTE:12 [ plot::x#0 ] ] -Coalescing zero page register [ zp ZP_WORD:21 [ plot::plotter_y#1 plot::plotter_y#2 ] ] with [ zp ZP_WORD:8 [ init_screen::b#2 init_screen::b#1 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] ] +Coalescing zero page register [ zp ZP_WORD:21 [ plot::plotter_y#1 plot::plotter_y#2 ] ] with [ zp ZP_WORD:8 [ init_screen::b#4 init_screen::b#1 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] ] Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:2 [ plot::y#0 ] -Allocated (was zp ZP_WORD:15) zp ZP_WORD:3 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ] -Allocated (was zp ZP_WORD:21) zp ZP_WORD:5 [ plot::plotter_y#1 plot::plotter_y#2 init_screen::b#2 init_screen::b#1 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] +Allocated (was zp ZP_WORD:15) zp ZP_WORD:3 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#4 init_screen::c#1 ] +Allocated (was zp ZP_WORD:21) zp ZP_WORD:5 [ plot::plotter_y#1 plot::plotter_y#2 init_screen::b#4 init_screen::b#1 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] Allocated (was zp ZP_BYTE:30) zp ZP_BYTE:7 [ init_plot_tables::$10 plot::x#0 ] ASSEMBLER BEFORE OPTIMIZATION @@ -1676,40 +1709,41 @@ main: { } // plots plots: { - // [16] phi from plots to plots::@1 [phi:plots->plots::@1] - b1_from_plots: - // [16] phi (byte) plots::i#2 = (byte) 0 [phi:plots->plots::@1#0] -- vbuxx=vbuc1 + // [16] phi from plots to plots::@2 [phi:plots->plots::@2] + b2_from_plots: + // [16] phi (byte) plots::i#5 = (byte) 0 [phi:plots->plots::@2#0] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // plots::@1 - b1: - // [17] if((byte) plots::i#2<(const byte) plots_cnt#0) goto plots::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #plots_cnt - bcc b2 - jmp breturn - // plots::@return - breturn: - // [18] return - rts + jmp b2 + // [16] phi from plots::@1 to plots::@2 [phi:plots::@1->plots::@2] + b2_from_b1: + // [16] phi (byte) plots::i#5 = (byte) plots::i#1 [phi:plots::@1->plots::@2#0] -- register_copy + jmp b2 // plots::@2 b2: - // [19] (byte) plot::x#0 ← *((const byte[]) plots_x#0 + (byte) plots::i#2) -- vbuz1=pbuc1_derefidx_vbuxx + // [17] (byte) plot::x#0 ← *((const byte[]) plots_x#0 + (byte) plots::i#5) -- vbuz1=pbuc1_derefidx_vbuxx lda plots_x,x sta plot.x - // [20] (byte) plot::y#0 ← *((const byte[]) plots_y#0 + (byte) plots::i#2) -- vbuz1=pbuc1_derefidx_vbuxx + // [18] (byte) plot::y#0 ← *((const byte[]) plots_y#0 + (byte) plots::i#5) -- vbuz1=pbuc1_derefidx_vbuxx lda plots_y,x sta plot.y - // [21] call plot + // [19] call plot jsr plot jmp b3 // plots::@3 b3: - // [22] (byte) plots::i#1 ← ++ (byte) plots::i#2 -- vbuxx=_inc_vbuxx + // [20] (byte) plots::i#1 ← ++ (byte) plots::i#5 -- vbuxx=_inc_vbuxx inx - // [16] phi from plots::@3 to plots::@1 [phi:plots::@3->plots::@1] - b1_from_b3: - // [16] phi (byte) plots::i#2 = (byte) plots::i#1 [phi:plots::@3->plots::@1#0] -- register_copy jmp b1 + // plots::@1 + b1: + // [21] if((byte) plots::i#1<(const byte) plots_cnt#0) goto plots::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #plots_cnt + bcc b2_from_b1 + jmp breturn + // plots::@return + breturn: + // [22] return + rts } // plot // plot(byte zeropage(7) x, byte zeropage(2) y) @@ -1889,75 +1923,77 @@ init_plot_tables: { init_screen: { .label b = 5 .label c = 3 - // [61] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] - b1_from_init_screen: - // [61] phi (byte*) init_screen::b#2 = (const byte*) BITMAP#0 [phi:init_screen->init_screen::@1#0] -- pbuz1=pbuc1 + // [61] phi from init_screen to init_screen::@2 [phi:init_screen->init_screen::@2] + b2_from_init_screen: + // [61] phi (byte*) init_screen::b#4 = (const byte*) BITMAP#0 [phi:init_screen->init_screen::@2#0] -- pbuz1=pbuc1 lda #BITMAP sta b+1 - jmp b1 - // init_screen::@1 - b1: - // [62] if((byte*) init_screen::b#2!=(const byte*) BITMAP#0+(word) $2000) goto init_screen::@2 -- pbuz1_neq_pbuc1_then_la1 - lda b+1 - cmp #>BITMAP+$2000 - bne b2 - lda b - cmp #init_screen::@3] - b3_from_b1: - // [63] phi (byte*) init_screen::c#2 = (const byte*) SCREEN#0 [phi:init_screen::@1->init_screen::@3#0] -- pbuz1=pbuc1 - lda #SCREEN - sta c+1 - jmp b3 - // init_screen::@3 - b3: - // [64] if((byte*) init_screen::c#2!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@4 -- pbuz1_neq_pbuc1_then_la1 - lda c+1 - cmp #>SCREEN+$400 - bne b4 - lda c - cmp #init_screen::@3] - b3_from_b4: - // [63] phi (byte*) init_screen::c#2 = (byte*) init_screen::c#1 [phi:init_screen::@4->init_screen::@3#0] -- register_copy - jmp b3 + jmp b2 + // [61] phi from init_screen::@1 to init_screen::@2 [phi:init_screen::@1->init_screen::@2] + b2_from_b1: + // [61] phi (byte*) init_screen::b#4 = (byte*) init_screen::b#1 [phi:init_screen::@1->init_screen::@2#0] -- register_copy + jmp b2 // init_screen::@2 b2: - // [68] *((byte*) init_screen::b#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [62] *((byte*) init_screen::b#4) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (b),y - // [69] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#2 -- pbuz1=_inc_pbuz1 + // [63] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#4 -- pbuz1=_inc_pbuz1 inc b bne !+ inc b+1 !: - // [61] phi from init_screen::@2 to init_screen::@1 [phi:init_screen::@2->init_screen::@1] - b1_from_b2: - // [61] phi (byte*) init_screen::b#2 = (byte*) init_screen::b#1 [phi:init_screen::@2->init_screen::@1#0] -- register_copy jmp b1 + // init_screen::@1 + b1: + // [64] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word) $2000) goto init_screen::@2 -- pbuz1_neq_pbuc1_then_la1 + lda b+1 + cmp #>BITMAP+$2000 + bne b2_from_b1 + lda b + cmp #init_screen::@4] + b4_from_b1: + // [65] phi (byte*) init_screen::c#4 = (const byte*) SCREEN#0 [phi:init_screen::@1->init_screen::@4#0] -- pbuz1=pbuc1 + lda #SCREEN + sta c+1 + jmp b4 + // [65] phi from init_screen::@3 to init_screen::@4 [phi:init_screen::@3->init_screen::@4] + b4_from_b3: + // [65] phi (byte*) init_screen::c#4 = (byte*) init_screen::c#1 [phi:init_screen::@3->init_screen::@4#0] -- register_copy + jmp b4 + // init_screen::@4 + b4: + // [66] *((byte*) init_screen::c#4) ← (byte) $14 -- _deref_pbuz1=vbuc1 + lda #$14 + ldy #0 + sta (c),y + // [67] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#4 -- pbuz1=_inc_pbuz1 + inc c + bne !+ + inc c+1 + !: + jmp b3 + // init_screen::@3 + b3: + // [68] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@4 -- pbuz1_neq_pbuc1_then_la1 + lda c+1 + cmp #>SCREEN+$400 + bne b4_from_b3 + lda c + cmp #0 Replacing instruction ldx #0 with TAX Replacing instruction ldy #0 with TAY Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b2_from_b1 with b2 Replacing label b6_from_b1 with b2 Replacing label b1_from_b2 with b1 Replacing label b4_from_b3 with b4 Replacing label b3_from_b4 with b3 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b4_from_b3 with b4 +Replacing label b4_from_b3 with b4 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction bend_from_b1: Removing instruction b3_from_main: Removing instruction init_plot_tables_from_b3: +Removing instruction b2_from_b1: Removing instruction b1_from_b2: Removing instruction b6_from_b1: Removing instruction b6: @@ -2013,6 +2058,8 @@ Removing instruction b2_from_b6: Removing instruction b3_from_b4: Removing instruction b4_from_b3: Removing instruction b4_from_b5: +Removing instruction b2_from_b1: +Removing instruction b4_from_b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction init_screen_from_main: @@ -2020,28 +2067,31 @@ Removing instruction b3: Removing instruction b2: Removing instruction plots_from_b2: Removing instruction b4: -Removing instruction b1_from_plots: -Removing instruction breturn: +Removing instruction b2_from_plots: Removing instruction b3: -Removing instruction b1_from_b3: +Removing instruction b1: +Removing instruction breturn: Removing instruction breturn: Removing instruction b1_from_init_plot_tables: Removing instruction b2_from_b1: Removing instruction b3_from_b2: Removing instruction b5: Removing instruction breturn: -Removing instruction b1_from_init_screen: -Removing instruction b3_from_b1: +Removing instruction b2_from_init_screen: +Removing instruction b1: +Removing instruction b4_from_b1: +Removing instruction b3: Removing instruction breturn: -Removing instruction b3_from_b4: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 +Removing instruction jmp b2 +Removing instruction jmp b4 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -2104,11 +2154,11 @@ FINAL SYMBOL TABLE (label) init_screen::@4 (label) init_screen::@return (byte*) init_screen::b -(byte*) init_screen::b#1 b zp ZP_WORD:5 22.0 -(byte*) init_screen::b#2 b zp ZP_WORD:5 14.666666666666666 +(byte*) init_screen::b#1 b zp ZP_WORD:5 16.5 +(byte*) init_screen::b#4 b zp ZP_WORD:5 16.5 (byte*) init_screen::c -(byte*) init_screen::c#1 c zp ZP_WORD:3 22.0 -(byte*) init_screen::c#2 c zp ZP_WORD:3 14.666666666666666 +(byte*) init_screen::c#1 c zp ZP_WORD:3 16.5 +(byte*) init_screen::c#4 c zp ZP_WORD:3 16.5 (void()) main() (label) main::@1 (label) main::@2 @@ -2149,8 +2199,8 @@ FINAL SYMBOL TABLE (label) plots::@3 (label) plots::@return (byte) plots::i -(byte) plots::i#1 reg byte x 202.0 -(byte) plots::i#2 reg byte x 101.0 +(byte) plots::i#1 reg byte x 151.5 +(byte) plots::i#5 reg byte x 101.0 (byte) plots_cnt (const byte) plots_cnt#0 plots_cnt = (byte) 8 (byte[]) plots_x @@ -2158,16 +2208,16 @@ FINAL SYMBOL TABLE (byte[]) plots_y (const byte[]) plots_y#0 plots_y = { (byte) $a, (byte) $28, (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28 } -reg byte x [ plots::i#2 plots::i#1 ] +reg byte x [ plots::i#5 plots::i#1 ] reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] zp ZP_BYTE:2 [ plot::y#0 ] reg byte a [ plot::$6 ] -zp ZP_WORD:3 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ] +zp ZP_WORD:3 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#4 init_screen::c#1 ] reg byte a [ plot::$7 ] reg byte a [ plot::$8 ] -zp ZP_WORD:5 [ plot::plotter_y#1 plot::plotter_y#2 init_screen::b#2 init_screen::b#1 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] +zp ZP_WORD:5 [ plot::plotter_y#1 plot::plotter_y#2 init_screen::b#4 init_screen::b#1 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] reg byte a [ plot::$9 ] reg byte a [ plot::$5 ] reg byte a [ init_plot_tables::$0 ] @@ -2178,7 +2228,7 @@ reg byte a [ init_plot_tables::$9 ] FINAL ASSEMBLER -Score: 6531 +Score: 6171 // File Comments // Upstart @@ -2253,37 +2303,34 @@ main: { } // plots plots: { - // [16] phi from plots to plots::@1 [phi:plots->plots::@1] - // [16] phi (byte) plots::i#2 = (byte) 0 [phi:plots->plots::@1#0] -- vbuxx=vbuc1 + // [16] phi from plots to plots::@2 [phi:plots->plots::@2] + // [16] phi (byte) plots::i#5 = (byte) 0 [phi:plots->plots::@2#0] -- vbuxx=vbuc1 ldx #0 - // plots::@1 - b1: + // [16] phi from plots::@1 to plots::@2 [phi:plots::@1->plots::@2] + // [16] phi (byte) plots::i#5 = (byte) plots::i#1 [phi:plots::@1->plots::@2#0] -- register_copy + // plots::@2 + b2: + // plot(plots_x[i], plots_y[i]) + // [17] (byte) plot::x#0 ← *((const byte[]) plots_x#0 + (byte) plots::i#5) -- vbuz1=pbuc1_derefidx_vbuxx + lda plots_x,x + sta plot.x + // [18] (byte) plot::y#0 ← *((const byte[]) plots_y#0 + (byte) plots::i#5) -- vbuz1=pbuc1_derefidx_vbuxx + lda plots_y,x + sta plot.y + // [19] call plot + jsr plot + // plots::@3 // for(byte i=0; iplots::@1] - // [16] phi (byte) plots::i#2 = (byte) plots::i#1 [phi:plots::@3->plots::@1#0] -- register_copy - jmp b1 } // plot // plot(byte zeropage(7) x, byte zeropage(2) y) @@ -2461,32 +2508,58 @@ init_plot_tables: { init_screen: { .label b = 5 .label c = 3 - // [61] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] - // [61] phi (byte*) init_screen::b#2 = (const byte*) BITMAP#0 [phi:init_screen->init_screen::@1#0] -- pbuz1=pbuc1 + // [61] phi from init_screen to init_screen::@2 [phi:init_screen->init_screen::@2] + // [61] phi (byte*) init_screen::b#4 = (const byte*) BITMAP#0 [phi:init_screen->init_screen::@2#0] -- pbuz1=pbuc1 lda #BITMAP sta b+1 - // init_screen::@1 - b1: + // [61] phi from init_screen::@1 to init_screen::@2 [phi:init_screen::@1->init_screen::@2] + // [61] phi (byte*) init_screen::b#4 = (byte*) init_screen::b#1 [phi:init_screen::@1->init_screen::@2#0] -- register_copy + // init_screen::@2 + b2: + // *b = 0 + // [62] *((byte*) init_screen::b#4) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (b),y // for(byte* b = BITMAP; b!=BITMAP+$2000; b++) - // [62] if((byte*) init_screen::b#2!=(const byte*) BITMAP#0+(word) $2000) goto init_screen::@2 -- pbuz1_neq_pbuc1_then_la1 + // [63] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#4 -- pbuz1=_inc_pbuz1 + inc b + bne !+ + inc b+1 + !: + // init_screen::@1 + // [64] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word) $2000) goto init_screen::@2 -- pbuz1_neq_pbuc1_then_la1 lda b+1 cmp #>BITMAP+$2000 bne b2 lda b cmp #init_screen::@3] - // [63] phi (byte*) init_screen::c#2 = (const byte*) SCREEN#0 [phi:init_screen::@1->init_screen::@3#0] -- pbuz1=pbuc1 + // [65] phi from init_screen::@1 to init_screen::@4 [phi:init_screen::@1->init_screen::@4] + // [65] phi (byte*) init_screen::c#4 = (const byte*) SCREEN#0 [phi:init_screen::@1->init_screen::@4#0] -- pbuz1=pbuc1 lda #SCREEN sta c+1 - // init_screen::@3 - b3: + // [65] phi from init_screen::@3 to init_screen::@4 [phi:init_screen::@3->init_screen::@4] + // [65] phi (byte*) init_screen::c#4 = (byte*) init_screen::c#1 [phi:init_screen::@3->init_screen::@4#0] -- register_copy + // init_screen::@4 + b4: + // *c = $14 + // [66] *((byte*) init_screen::c#4) ← (byte) $14 -- _deref_pbuz1=vbuc1 + lda #$14 + ldy #0 + sta (c),y // for(byte* c = SCREEN; c!=SCREEN+$400;c++) - // [64] if((byte*) init_screen::c#2!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@4 -- pbuz1_neq_pbuc1_then_la1 + // [67] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#4 -- pbuz1=_inc_pbuz1 + inc c + bne !+ + inc c+1 + !: + // init_screen::@3 + // [68] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@4 -- pbuz1_neq_pbuc1_then_la1 lda c+1 cmp #>SCREEN+$400 bne b4 @@ -2495,40 +2568,8 @@ init_screen: { bne b4 // init_screen::@return // } - // [65] return + // [69] return rts - // init_screen::@4 - b4: - // *c = $14 - // [66] *((byte*) init_screen::c#2) ← (byte) $14 -- _deref_pbuz1=vbuc1 - lda #$14 - ldy #0 - sta (c),y - // for(byte* c = SCREEN; c!=SCREEN+$400;c++) - // [67] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2 -- pbuz1=_inc_pbuz1 - inc c - bne !+ - inc c+1 - !: - // [63] phi from init_screen::@4 to init_screen::@3 [phi:init_screen::@4->init_screen::@3] - // [63] phi (byte*) init_screen::c#2 = (byte*) init_screen::c#1 [phi:init_screen::@4->init_screen::@3#0] -- register_copy - jmp b3 - // init_screen::@2 - b2: - // *b = 0 - // [68] *((byte*) init_screen::b#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 - lda #0 - tay - sta (b),y - // for(byte* b = BITMAP; b!=BITMAP+$2000; b++) - // [69] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#2 -- pbuz1=_inc_pbuz1 - inc b - bne !+ - inc b+1 - !: - // [61] phi from init_screen::@2 to init_screen::@1 [phi:init_screen::@2->init_screen::@1] - // [61] phi (byte*) init_screen::b#2 = (byte*) init_screen::b#1 [phi:init_screen::@2->init_screen::@1#0] -- register_copy - jmp b1 } // File Data plots_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28 diff --git a/src/test/ref/bitmap-plotter.sym b/src/test/ref/bitmap-plotter.sym index 34cf8ec1d..9eb86c229 100644 --- a/src/test/ref/bitmap-plotter.sym +++ b/src/test/ref/bitmap-plotter.sym @@ -55,11 +55,11 @@ (label) init_screen::@4 (label) init_screen::@return (byte*) init_screen::b -(byte*) init_screen::b#1 b zp ZP_WORD:5 22.0 -(byte*) init_screen::b#2 b zp ZP_WORD:5 14.666666666666666 +(byte*) init_screen::b#1 b zp ZP_WORD:5 16.5 +(byte*) init_screen::b#4 b zp ZP_WORD:5 16.5 (byte*) init_screen::c -(byte*) init_screen::c#1 c zp ZP_WORD:3 22.0 -(byte*) init_screen::c#2 c zp ZP_WORD:3 14.666666666666666 +(byte*) init_screen::c#1 c zp ZP_WORD:3 16.5 +(byte*) init_screen::c#4 c zp ZP_WORD:3 16.5 (void()) main() (label) main::@1 (label) main::@2 @@ -100,8 +100,8 @@ (label) plots::@3 (label) plots::@return (byte) plots::i -(byte) plots::i#1 reg byte x 202.0 -(byte) plots::i#2 reg byte x 101.0 +(byte) plots::i#1 reg byte x 151.5 +(byte) plots::i#5 reg byte x 101.0 (byte) plots_cnt (const byte) plots_cnt#0 plots_cnt = (byte) 8 (byte[]) plots_x @@ -109,16 +109,16 @@ (byte[]) plots_y (const byte[]) plots_y#0 plots_y = { (byte) $a, (byte) $28, (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28 } -reg byte x [ plots::i#2 plots::i#1 ] +reg byte x [ plots::i#5 plots::i#1 ] reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] zp ZP_BYTE:2 [ plot::y#0 ] reg byte a [ plot::$6 ] -zp ZP_WORD:3 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ] +zp ZP_WORD:3 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#4 init_screen::c#1 ] reg byte a [ plot::$7 ] reg byte a [ plot::$8 ] -zp ZP_WORD:5 [ plot::plotter_y#1 plot::plotter_y#2 init_screen::b#2 init_screen::b#1 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] +zp ZP_WORD:5 [ plot::plotter_y#1 plot::plotter_y#2 init_screen::b#4 init_screen::b#1 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] reg byte a [ plot::$9 ] reg byte a [ plot::$5 ] reg byte a [ init_plot_tables::$0 ] diff --git a/src/test/ref/bool-ifs-min.asm b/src/test/ref/bool-ifs-min.asm index cd01e9f93..eb3694ab2 100644 --- a/src/test/ref/bool-ifs-min.asm +++ b/src/test/ref/bool-ifs-min.asm @@ -5,13 +5,7 @@ main: { .label screen = $400 ldx #0 - b1: - txa - and #1 - cpx #$a - bcs b2 - cmp #0 - bne b2 + b3: lda #'*' sta screen,x b2: @@ -19,4 +13,12 @@ main: { cpx #$15 bne b1 rts + b1: + txa + and #1 + cpx #$a + bcs b2 + cmp #0 + bne b2 + jmp b3 } diff --git a/src/test/ref/bool-ifs-min.cfg b/src/test/ref/bool-ifs-min.cfg index a3fd52baf..b08122f1b 100644 --- a/src/test/ref/bool-ifs-min.cfg +++ b/src/test/ref/bool-ifs-min.cfg @@ -9,22 +9,23 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] (byte~) main::$1 ← (byte) main::i#2 & (byte) 1 - [7] if((byte) main::i#2>=(byte) $a) goto main::@2 - to:main::@4 -main::@4: scope:[main] from main::@1 - [8] if((byte~) main::$1!=(byte) 0) goto main::@2 to:main::@3 -main::@3: scope:[main] from main::@4 - [9] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' +main::@3: scope:[main] from main main::@4 + [5] (byte) main::i#9 ← phi( main::@4/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) main::screen#0 + (byte) main::i#9) ← (byte) '*' to:main::@2 main::@2: scope:[main] from main::@1 main::@3 main::@4 - [10] (byte) main::i#1 ← ++ (byte) main::i#2 - [11] if((byte) main::i#1!=(byte) $15) goto main::@1 + [7] (byte) main::i#5 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#9 main::@4/(byte) main::i#1 ) + [8] (byte) main::i#1 ← ++ (byte) main::i#5 + [9] if((byte) main::i#1!=(byte) $15) goto main::@1 to:main::@return main::@return: scope:[main] from main::@2 - [12] return + [10] return to:@return +main::@1: scope:[main] from main::@2 + [11] (byte~) main::$6 ← (byte) main::i#1 & (byte) 1 + [12] if((byte) main::i#1>=(byte) $a) goto main::@2 + to:main::@4 +main::@4: scope:[main] from main::@1 + [13] if((byte~) main::$6!=(byte) 0) goto main::@2 + to:main::@3 diff --git a/src/test/ref/bool-ifs-min.log b/src/test/ref/bool-ifs-min.log index 622e7cff4..73619acaa 100644 --- a/src/test/ref/bool-ifs-min.log +++ b/src/test/ref/bool-ifs-min.log @@ -105,22 +105,60 @@ Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [4] if((byte) main::i#2>=(byte) $a) goto main::@2 Negating conditional jump and destination [10] if((byte~) main::$1!=(byte) 0) goto main::@2 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Alias (byte) main::i#6 = (byte) main::i#7 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#8 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [13] (byte~) main::$7 ← (const byte) main::i#0 & (byte) 1 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) main::$7 = main::i#0&1 +Successful SSA optimization Pass2ConstantIdentification +Removing PHI-reference to removed block (main::@1_1) in block main::@2 +if() condition always false - eliminating [14] if((const byte) main::i#0>=(byte) $a) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Simplifying constant evaluating to zero (const byte) main::i#0&(byte) 1 in +Successful SSA optimization PassNSimplifyConstantZero +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#6 +Alias (byte~) main::$6 = (byte~) main::$1 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#10 (const byte) main::i#0 +Identical Phi Values (byte~) main::$8 (const byte) main::$7 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (main::@5_1) in block main::@2 +if() condition always false - eliminating [12] if((const byte) main::$7!=(byte) 0) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Eliminating unused constant (const byte) main::$7 +Successful SSA optimization PassNEliminateUnusedVars Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@6(between main::@2 and main::@1) +Added new block during phi lifting main::@6(between main::@1 and main::@2) +Added new block during phi lifting main::@7(between main::@5 and main::@2) +Added new block during phi lifting main::@8(between main::@5 and main::@3) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 +Adding NOP phi() at start of main::@5_1 CALL GRAPH Calls in [] to main:2 -Created 1 initial phi equivalence classes -Coalesced [14] main::i#5 ← main::i#1 +Created 2 initial phi equivalence classes +Coalesced [10] main::i#12 ← main::i#9 +Coalesced [18] main::i#14 ← main::i#1 +Coalesced (already) [19] main::i#13 ← main::i#1 +Coalesced (already) [20] main::i#11 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@5_1 +Culled Empty Block (label) main::@8 +Culled Empty Block (label) main::@7 Culled Empty Block (label) main::@6 Renumbering block main::@5 to main::@4 Adding NOP phi() at start of @begin @@ -140,43 +178,45 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] (byte~) main::$1 ← (byte) main::i#2 & (byte) 1 - [7] if((byte) main::i#2>=(byte) $a) goto main::@2 - to:main::@4 -main::@4: scope:[main] from main::@1 - [8] if((byte~) main::$1!=(byte) 0) goto main::@2 to:main::@3 -main::@3: scope:[main] from main::@4 - [9] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' +main::@3: scope:[main] from main main::@4 + [5] (byte) main::i#9 ← phi( main::@4/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) main::screen#0 + (byte) main::i#9) ← (byte) '*' to:main::@2 main::@2: scope:[main] from main::@1 main::@3 main::@4 - [10] (byte) main::i#1 ← ++ (byte) main::i#2 - [11] if((byte) main::i#1!=(byte) $15) goto main::@1 + [7] (byte) main::i#5 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#9 main::@4/(byte) main::i#1 ) + [8] (byte) main::i#1 ← ++ (byte) main::i#5 + [9] if((byte) main::i#1!=(byte) $15) goto main::@1 to:main::@return main::@return: scope:[main] from main::@2 - [12] return + [10] return to:@return +main::@1: scope:[main] from main::@2 + [11] (byte~) main::$6 ← (byte) main::i#1 & (byte) 1 + [12] if((byte) main::i#1>=(byte) $a) goto main::@2 + to:main::@4 +main::@4: scope:[main] from main::@1 + [13] if((byte~) main::$6!=(byte) 0) goto main::@2 + to:main::@3 VARIABLE REGISTER WEIGHTS (void()) main() -(byte~) main::$1 11.0 +(byte~) main::$6 551.0 (byte) main::i -(byte) main::i#1 16.5 -(byte) main::i#2 11.0 +(byte) main::i#1 1041.4 +(byte) main::i#5 2114.0 +(byte) main::i#9 61.5 (byte*) main::screen Initial phi equivalence classes -[ main::i#2 main::i#1 ] -Added variable main::$1 to zero page equivalence class [ main::$1 ] +[ main::i#5 main::i#9 main::i#1 ] +Added variable main::$6 to zero page equivalence class [ main::$6 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ main::$1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::$1 ] +[ main::i#5 main::i#9 main::i#1 ] +[ main::$6 ] +Allocated zp ZP_BYTE:2 [ main::i#5 main::i#9 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::$6 ] INITIAL ASM Target platform is c64basic @@ -206,73 +246,78 @@ bend: // main main: { .label screen = $400 - .label _1 = 3 .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + .label _6 = 3 + // [5] phi from main to main::@3 [phi:main->main::@3] + b3_from_main: + // [5] phi (byte) main::i#9 = (byte) 0 [phi:main->main::@3#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] (byte~) main::$1 ← (byte) main::i#2 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 - lda #1 - and i - sta _1 - // [7] if((byte) main::i#2>=(byte) $a) goto main::@2 -- vbuz1_ge_vbuc1_then_la1 - lda i - cmp #$a - bcs b2 - jmp b4 - // main::@4 - b4: - // [8] if((byte~) main::$1!=(byte) 0) goto main::@2 -- vbuz1_neq_0_then_la1 - lda _1 - cmp #0 - bne b2 jmp b3 // main::@3 b3: - // [9] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2 + // [6] *((const byte*) main::screen#0 + (byte) main::i#9) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2 lda #'*' ldy i sta screen,y + // [7] phi from main::@1 main::@3 main::@4 to main::@2 [phi:main::@1/main::@3/main::@4->main::@2] + b2_from_b1: + b2_from_b3: + b2_from_b4: + // [7] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@1/main::@3/main::@4->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [10] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [8] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuz1=_inc_vbuz1 inc i - // [11] if((byte) main::i#1!=(byte) $15) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + // [9] if((byte) main::i#1!=(byte) $15) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$15 cmp i - bne b1_from_b2 + bne b1 jmp breturn // main::@return breturn: - // [12] return + // [10] return rts + // main::@1 + b1: + // [11] (byte~) main::$6 ← (byte) main::i#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + lda #1 + and i + sta _6 + // [12] if((byte) main::i#1>=(byte) $a) goto main::@2 -- vbuz1_ge_vbuc1_then_la1 + lda i + cmp #$a + bcs b2_from_b1 + jmp b4 + // main::@4 + b4: + // [13] if((byte~) main::$6!=(byte) 0) goto main::@2 -- vbuz1_neq_0_then_la1 + lda _6 + cmp #0 + bne b2_from_b4 + // [5] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + b3_from_b4: + // [5] phi (byte) main::i#9 = (byte) main::i#1 [phi:main::@4->main::@3#0] -- register_copy + jmp b3 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [9] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Statement [6] (byte~) main::$1 ← (byte) main::i#2 & (byte) 1 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) always clobbers reg byte a -Statement [9] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ main::$1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Statement [6] *((const byte*) main::screen#0 + (byte) main::i#9) ← (byte) '*' [ main::i#9 ] ( main:2 [ main::i#9 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#5 main::i#9 main::i#1 ] +Statement [11] (byte~) main::$6 ← (byte) main::i#1 & (byte) 1 [ main::i#1 main::$6 ] ( main:2 [ main::i#1 main::$6 ] ) always clobbers reg byte a +Statement [6] *((const byte*) main::screen#0 + (byte) main::i#9) ← (byte) '*' [ main::i#9 ] ( main:2 [ main::i#9 ] ) always clobbers reg byte a +Statement [11] (byte~) main::$6 ← (byte) main::i#1 & (byte) 1 [ main::i#1 main::$6 ] ( main:2 [ main::i#1 main::$6 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#5 main::i#9 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::$6 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 27.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 11: zp ZP_BYTE:3 [ main::$1 ] +Uplift Scope [main] 3,216.9: zp ZP_BYTE:2 [ main::i#5 main::i#9 main::i#1 ] 551: zp ZP_BYTE:3 [ main::$6 ] Uplift Scope [] -Uplifting [main] best 483 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$1 ] -Uplifting [] best 483 combination +Uplifting [main] best 24618 combination reg byte x [ main::i#5 main::i#9 main::i#1 ] reg byte a [ main::$6 ] +Uplifting [] best 24618 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -301,78 +346,82 @@ bend: // main main: { .label screen = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@3 [phi:main->main::@3] + b3_from_main: + // [5] phi (byte) main::i#9 = (byte) 0 [phi:main->main::@3#0] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] (byte~) main::$1 ← (byte) main::i#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - // [7] if((byte) main::i#2>=(byte) $a) goto main::@2 -- vbuxx_ge_vbuc1_then_la1 - cpx #$a - bcs b2 - jmp b4 - // main::@4 - b4: - // [8] if((byte~) main::$1!=(byte) 0) goto main::@2 -- vbuaa_neq_0_then_la1 - cmp #0 - bne b2 jmp b3 // main::@3 b3: - // [9] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 + // [6] *((const byte*) main::screen#0 + (byte) main::i#9) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 lda #'*' sta screen,x + // [7] phi from main::@1 main::@3 main::@4 to main::@2 [phi:main::@1/main::@3/main::@4->main::@2] + b2_from_b1: + b2_from_b3: + b2_from_b4: + // [7] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@1/main::@3/main::@4->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [10] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [8] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuxx=_inc_vbuxx inx - // [11] if((byte) main::i#1!=(byte) $15) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + // [9] if((byte) main::i#1!=(byte) $15) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$15 - bne b1_from_b2 + bne b1 jmp breturn // main::@return breturn: - // [12] return + // [10] return rts + // main::@1 + b1: + // [11] (byte~) main::$6 ← (byte) main::i#1 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + // [12] if((byte) main::i#1>=(byte) $a) goto main::@2 -- vbuxx_ge_vbuc1_then_la1 + cpx #$a + bcs b2_from_b1 + jmp b4 + // main::@4 + b4: + // [13] if((byte~) main::$6!=(byte) 0) goto main::@2 -- vbuaa_neq_0_then_la1 + cmp #0 + bne b2_from_b4 + // [5] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + b3_from_b4: + // [5] phi (byte) main::i#9 = (byte) main::i#1 [phi:main::@4->main::@3#0] -- register_copy + jmp b3 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 -Removing instruction jmp b4 Removing instruction jmp b3 Removing instruction jmp b2 Removing instruction jmp breturn +Removing instruction jmp b4 Succesful ASM optimization Pass5NextJumpElimination -Replacing label b1_from_b2 with b1 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b4 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b1_from_b2: +Removing instruction b2_from_b1: +Removing instruction b2_from_b3: +Removing instruction b2_from_b4: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b4: -Removing instruction b3: +Removing instruction b3_from_main: Removing instruction breturn: +Removing instruction b4: +Removing instruction b3_from_b4: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Removing instruction jmp b1 -Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -381,24 +430,25 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (void()) main() -(byte~) main::$1 reg byte a 11.0 +(byte~) main::$6 reg byte a 551.0 (label) main::@1 (label) main::@2 (label) main::@3 (label) main::@4 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 11.0 +(byte) main::i#1 reg byte x 1041.4 +(byte) main::i#5 reg byte x 2114.0 +(byte) main::i#9 reg byte x 61.5 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -reg byte x [ main::i#2 main::i#1 ] -reg byte a [ main::$1 ] +reg byte x [ main::i#5 main::i#9 main::i#1 ] +reg byte a [ main::$6 ] FINAL ASSEMBLER -Score: 291 +Score: 15576 // File Comments // A test of boolean conditions using && || and ! @@ -417,42 +467,46 @@ Score: 291 // main main: { .label screen = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@3 [phi:main->main::@3] + // [5] phi (byte) main::i#9 = (byte) 0 [phi:main->main::@3#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - // main::@1 - b1: - // i&1 - // [6] (byte~) main::$1 ← (byte) main::i#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - // if( (i<10) && ((i&1)==0) ) - // [7] if((byte) main::i#2>=(byte) $a) goto main::@2 -- vbuxx_ge_vbuc1_then_la1 - cpx #$a - bcs b2 - // main::@4 - // [8] if((byte~) main::$1!=(byte) 0) goto main::@2 -- vbuaa_neq_0_then_la1 - cmp #0 - bne b2 // main::@3 + b3: // screen[i] = '*' - // [9] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 + // [6] *((const byte*) main::screen#0 + (byte) main::i#9) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 lda #'*' sta screen,x + // [7] phi from main::@1 main::@3 main::@4 to main::@2 [phi:main::@1/main::@3/main::@4->main::@2] + // [7] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@1/main::@3/main::@4->main::@2#0] -- register_copy // main::@2 b2: // for( char i : 0..20) - // [10] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [8] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuxx=_inc_vbuxx inx - // [11] if((byte) main::i#1!=(byte) $15) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + // [9] if((byte) main::i#1!=(byte) $15) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$15 bne b1 // main::@return // } - // [12] return + // [10] return rts + // main::@1 + b1: + // i&1 + // [11] (byte~) main::$6 ← (byte) main::i#1 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + // if( (i<10) && ((i&1)==0) ) + // [12] if((byte) main::i#1>=(byte) $a) goto main::@2 -- vbuxx_ge_vbuc1_then_la1 + cpx #$a + bcs b2 + // main::@4 + // [13] if((byte~) main::$6!=(byte) 0) goto main::@2 -- vbuaa_neq_0_then_la1 + cmp #0 + bne b2 + // [5] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + // [5] phi (byte) main::i#9 = (byte) main::i#1 [phi:main::@4->main::@3#0] -- register_copy + jmp b3 } // File Data diff --git a/src/test/ref/bool-ifs-min.sym b/src/test/ref/bool-ifs-min.sym index 77d304fc3..44f9da6db 100644 --- a/src/test/ref/bool-ifs-min.sym +++ b/src/test/ref/bool-ifs-min.sym @@ -2,17 +2,18 @@ (label) @begin (label) @end (void()) main() -(byte~) main::$1 reg byte a 11.0 +(byte~) main::$6 reg byte a 551.0 (label) main::@1 (label) main::@2 (label) main::@3 (label) main::@4 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 11.0 +(byte) main::i#1 reg byte x 1041.4 +(byte) main::i#5 reg byte x 2114.0 +(byte) main::i#9 reg byte x 61.5 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -reg byte x [ main::i#2 main::i#1 ] -reg byte a [ main::$1 ] +reg byte x [ main::i#5 main::i#9 main::i#1 ] +reg byte a [ main::$6 ] diff --git a/src/test/ref/bool-vars.asm b/src/test/ref/bool-vars.asm index e4b28d49a..edc92601f 100644 --- a/src/test/ref/bool-vars.asm +++ b/src/test/ref/bool-vars.asm @@ -59,6 +59,14 @@ bool_complex: { bool_not: { .label screen = $450 ldx #0 + b4: + lda #' ' + sta screen,x + b3: + inx + cpx #$15 + bne b1 + rts b1: txa and #1 @@ -68,19 +76,19 @@ bool_not: { beq b4 lda #'*' sta screen,x - b3: - inx - cpx #$15 - bne b1 - rts - b4: - lda #' ' - sta screen,x jmp b3 } bool_or: { .label screen = $428 ldx #0 + b2: + lda #'*' + sta screen,x + b3: + inx + cpx #$15 + bne b1 + rts b1: txa and #1 @@ -90,19 +98,19 @@ bool_or: { beq b2 lda #' ' sta screen,x - b3: - inx - cpx #$15 - bne b1 - rts - b2: - lda #'*' - sta screen,x jmp b3 } bool_and: { .label screen = $400 ldx #0 + b2: + lda #'*' + sta screen,x + b3: + inx + cpx #$15 + bne b1 + rts b1: txa and #1 @@ -113,13 +121,5 @@ bool_and: { b4: lda #' ' sta screen,x - b3: - inx - cpx #$15 - bne b1 - rts - b2: - lda #'*' - sta screen,x jmp b3 } diff --git a/src/test/ref/bool-vars.cfg b/src/test/ref/bool-vars.cfg index 402c02d77..e71e984a4 100644 --- a/src/test/ref/bool-vars.cfg +++ b/src/test/ref/bool-vars.cfg @@ -60,73 +60,76 @@ bool_complex::@4: scope:[bool_complex] from bool_complex::@5 bool_complex::@7 to:bool_complex::@3 bool_not: scope:[bool_not] from main::@2 [27] phi() - to:bool_not::@1 -bool_not::@1: scope:[bool_not] from bool_not bool_not::@3 - [28] (byte) bool_not::i#2 ← phi( bool_not/(byte) 0 bool_not::@3/(byte) bool_not::i#1 ) - [29] (byte~) bool_not::$1 ← (byte) bool_not::i#2 & (byte) 1 - [30] if((byte) bool_not::i#2<(byte) $a) goto bool_not::@4 - to:bool_not::@5 -bool_not::@5: scope:[bool_not] from bool_not::@1 - [31] if((byte~) bool_not::$1==(byte) 0) goto bool_not::@4 - to:bool_not::@2 -bool_not::@2: scope:[bool_not] from bool_not::@5 - [32] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) '*' + to:bool_not::@4 +bool_not::@4: scope:[bool_not] from bool_not bool_not::@1 bool_not::@5 + [28] (byte) bool_not::i#7 ← phi( bool_not::@1/(byte) bool_not::i#1 bool_not/(byte) 0 bool_not::@5/(byte) bool_not::i#1 ) + [29] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#7) ← (byte) ' ' to:bool_not::@3 bool_not::@3: scope:[bool_not] from bool_not::@2 bool_not::@4 - [33] (byte) bool_not::i#1 ← ++ (byte) bool_not::i#2 - [34] if((byte) bool_not::i#1!=(byte) $15) goto bool_not::@1 + [30] (byte) bool_not::i#8 ← phi( bool_not::@2/(byte) bool_not::i#1 bool_not::@4/(byte) bool_not::i#7 ) + [31] (byte) bool_not::i#1 ← ++ (byte) bool_not::i#8 + [32] if((byte) bool_not::i#1!=(byte) $15) goto bool_not::@1 to:bool_not::@return bool_not::@return: scope:[bool_not] from bool_not::@3 - [35] return + [33] return to:@return -bool_not::@4: scope:[bool_not] from bool_not::@1 bool_not::@5 - [36] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) ' ' +bool_not::@1: scope:[bool_not] from bool_not::@3 + [34] (byte~) bool_not::$6 ← (byte) bool_not::i#1 & (byte) 1 + [35] if((byte) bool_not::i#1<(byte) $a) goto bool_not::@4 + to:bool_not::@5 +bool_not::@5: scope:[bool_not] from bool_not::@1 + [36] if((byte~) bool_not::$6==(byte) 0) goto bool_not::@4 + to:bool_not::@2 +bool_not::@2: scope:[bool_not] from bool_not::@5 + [37] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#1) ← (byte) '*' to:bool_not::@3 bool_or: scope:[bool_or] from main::@1 - [37] phi() - to:bool_or::@1 -bool_or::@1: scope:[bool_or] from bool_or bool_or::@3 - [38] (byte) bool_or::i#2 ← phi( bool_or/(byte) 0 bool_or::@3/(byte) bool_or::i#1 ) - [39] (byte~) bool_or::$1 ← (byte) bool_or::i#2 & (byte) 1 - [40] if((byte) bool_or::i#2<(byte) $a) goto bool_or::@2 - to:bool_or::@5 -bool_or::@5: scope:[bool_or] from bool_or::@1 - [41] if((byte~) bool_or::$1==(byte) 0) goto bool_or::@2 - to:bool_or::@4 -bool_or::@4: scope:[bool_or] from bool_or::@5 - [42] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) ' ' + [38] phi() + to:bool_or::@2 +bool_or::@2: scope:[bool_or] from bool_or bool_or::@1 bool_or::@5 + [39] (byte) bool_or::i#6 ← phi( bool_or::@1/(byte) bool_or::i#1 bool_or/(byte) 0 bool_or::@5/(byte) bool_or::i#1 ) + [40] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#6) ← (byte) '*' to:bool_or::@3 bool_or::@3: scope:[bool_or] from bool_or::@2 bool_or::@4 - [43] (byte) bool_or::i#1 ← ++ (byte) bool_or::i#2 - [44] if((byte) bool_or::i#1!=(byte) $15) goto bool_or::@1 + [41] (byte) bool_or::i#8 ← phi( bool_or::@2/(byte) bool_or::i#6 bool_or::@4/(byte) bool_or::i#1 ) + [42] (byte) bool_or::i#1 ← ++ (byte) bool_or::i#8 + [43] if((byte) bool_or::i#1!=(byte) $15) goto bool_or::@1 to:bool_or::@return bool_or::@return: scope:[bool_or] from bool_or::@3 - [45] return + [44] return to:@return -bool_or::@2: scope:[bool_or] from bool_or::@1 bool_or::@5 - [46] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) '*' +bool_or::@1: scope:[bool_or] from bool_or::@3 + [45] (byte~) bool_or::$5 ← (byte) bool_or::i#1 & (byte) 1 + [46] if((byte) bool_or::i#1<(byte) $a) goto bool_or::@2 + to:bool_or::@5 +bool_or::@5: scope:[bool_or] from bool_or::@1 + [47] if((byte~) bool_or::$5==(byte) 0) goto bool_or::@2 + to:bool_or::@4 +bool_or::@4: scope:[bool_or] from bool_or::@5 + [48] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#1) ← (byte) ' ' to:bool_or::@3 bool_and: scope:[bool_and] from main - [47] phi() - to:bool_and::@1 -bool_and::@1: scope:[bool_and] from bool_and bool_and::@3 - [48] (byte) bool_and::i#2 ← phi( bool_and/(byte) 0 bool_and::@3/(byte) bool_and::i#1 ) - [49] (byte~) bool_and::$1 ← (byte) bool_and::i#2 & (byte) 1 - [50] if((byte) bool_and::i#2>=(byte) $a) goto bool_and::@4 - to:bool_and::@5 -bool_and::@5: scope:[bool_and] from bool_and::@1 - [51] if((byte~) bool_and::$1==(byte) 0) goto bool_and::@2 - to:bool_and::@4 -bool_and::@4: scope:[bool_and] from bool_and::@1 bool_and::@5 - [52] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) ' ' + [49] phi() + to:bool_and::@2 +bool_and::@2: scope:[bool_and] from bool_and bool_and::@5 + [50] (byte) bool_and::i#11 ← phi( bool_and::@5/(byte) bool_and::i#1 bool_and/(byte) 0 ) + [51] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#11) ← (byte) '*' to:bool_and::@3 bool_and::@3: scope:[bool_and] from bool_and::@2 bool_and::@4 - [53] (byte) bool_and::i#1 ← ++ (byte) bool_and::i#2 + [52] (byte) bool_and::i#8 ← phi( bool_and::@2/(byte) bool_and::i#11 bool_and::@4/(byte) bool_and::i#1 ) + [53] (byte) bool_and::i#1 ← ++ (byte) bool_and::i#8 [54] if((byte) bool_and::i#1!=(byte) $15) goto bool_and::@1 to:bool_and::@return bool_and::@return: scope:[bool_and] from bool_and::@3 [55] return to:@return -bool_and::@2: scope:[bool_and] from bool_and::@5 - [56] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) '*' +bool_and::@1: scope:[bool_and] from bool_and::@3 + [56] (byte~) bool_and::$5 ← (byte) bool_and::i#1 & (byte) 1 + [57] if((byte) bool_and::i#1>=(byte) $a) goto bool_and::@4 + to:bool_and::@5 +bool_and::@5: scope:[bool_and] from bool_and::@1 + [58] if((byte~) bool_and::$5==(byte) 0) goto bool_and::@2 + to:bool_and::@4 +bool_and::@4: scope:[bool_and] from bool_and::@1 bool_and::@5 + [59] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#1) ← (byte) ' ' to:bool_and::@3 diff --git a/src/test/ref/bool-vars.log b/src/test/ref/bool-vars.log index 24085e8b2..ecc0cb390 100644 --- a/src/test/ref/bool-vars.log +++ b/src/test/ref/bool-vars.log @@ -437,6 +437,62 @@ Simple Condition (bool) bool_or::o2#0 [47] if((byte~) bool_or::$1==(byte) 0) got Simple Condition (bool) bool_not::o2#0 [48] if((byte~) bool_not::$1==(byte) 0) goto bool_not::@4 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [9] if((byte) bool_and::i#2>=(byte) $a) goto bool_and::@4 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) bool_and::i#1 = (byte) bool_and::i#2 +Alias (byte) bool_and::i#6 = (byte) bool_and::i#9 +Alias (byte) bool_or::i#1 = (byte) bool_or::i#2 +Alias (byte) bool_or::i#7 = (byte) bool_or::i#9 +Alias (byte) bool_not::i#1 = (byte) bool_not::i#2 +Alias (byte) bool_not::i#6 = (byte) bool_not::i#9 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) bool_and::i#10 (const byte) bool_and::i#0 +Identical Phi Values (byte) bool_or::i#10 (const byte) bool_or::i#0 +Identical Phi Values (byte) bool_not::i#10 (const byte) bool_not::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [59] (byte~) bool_and::$6 ← (const byte) bool_and::i#0 & (byte) 1 +Constant right-side identified [62] (byte~) bool_or::$6 ← (const byte) bool_or::i#0 & (byte) 1 +Constant right-side identified [65] (byte~) bool_not::$7 ← (const byte) bool_not::i#0 & (byte) 1 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) bool_and::$6 = bool_and::i#0&1 +Constant (const byte) bool_or::$6 = bool_or::i#0&1 +Constant (const byte) bool_not::$7 = bool_not::i#0&1 +Successful SSA optimization Pass2ConstantIdentification +Removing PHI-reference to removed block (bool_and::@1_1) in block bool_and::@4 +if() condition always false - eliminating [60] if((const byte) bool_and::i#0>=(byte) $a) goto bool_and::@4 +Removing PHI-reference to removed block (bool_or::@1_1) in block bool_or::@7 +Removing PHI-reference to removed block (bool_or::@1_1) in block bool_or::@7 +if() condition always true - replacing block destination [63] if((const byte) bool_or::i#0<(byte) $a) goto bool_or::@2 +Removing PHI-reference to removed block (bool_not::@1_1) in block bool_not::@7 +Removing PHI-reference to removed block (bool_not::@1_1) in block bool_not::@7 +if() condition always true - replacing block destination [66] if((const byte) bool_not::i#0<(byte) $a) goto bool_not::@4 +Successful SSA optimization Pass2ConstantIfs +Simplifying constant evaluating to zero (const byte) bool_and::i#0&(byte) 1 in +Simplifying constant evaluating to zero (const byte) bool_or::i#0&(byte) 1 in +Simplifying constant evaluating to zero (const byte) bool_not::i#0&(byte) 1 in +Successful SSA optimization PassNSimplifyConstantZero +Eliminating unused constant (const byte) bool_or::$6 +Eliminating unused constant (const byte) bool_not::$7 +Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) bool_and::i#1 = (byte) bool_and::i#6 +Alias (byte~) bool_and::$5 = (byte~) bool_and::$1 +Alias (byte) bool_or::i#1 = (byte) bool_or::i#7 +Alias (byte~) bool_or::$5 = (byte~) bool_or::$1 +Alias (byte) bool_not::i#1 = (byte) bool_not::i#6 +Alias (byte~) bool_not::$6 = (byte~) bool_not::$1 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) bool_and::i#12 (const byte) bool_and::i#0 +Identical Phi Values (byte~) bool_and::$7 (const byte) bool_and::$6 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (bool_and::@7_1) in block bool_and::@4 +if() condition always true - replacing block destination [54] if((const byte) bool_and::$6==(byte) 0) goto bool_and::@2 +Successful SSA optimization Pass2ConstantIfs +Eliminating unused constant (const byte) bool_and::$6 +Successful SSA optimization PassNEliminateUnusedVars +Alias (byte) bool_and::i#1 = (byte) bool_and::i#7 +Successful SSA optimization Pass2AliasElimination Inlining constant with var siblings (const byte) bool_and::i#0 Inlining constant with var siblings (const byte) bool_or::i#0 Inlining constant with var siblings (const byte) bool_not::i#0 @@ -446,9 +502,11 @@ Constant inlined bool_or::i#0 = (byte) 0 Constant inlined bool_not::i#0 = (byte) 0 Constant inlined bool_and::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting bool_and::@8(between bool_and::@3 and bool_and::@1) -Added new block during phi lifting bool_or::@8(between bool_or::@3 and bool_or::@1) -Added new block during phi lifting bool_not::@8(between bool_not::@3 and bool_not::@1) +Added new block during phi lifting bool_and::@8(between bool_and::@7 and bool_and::@2) +Added new block during phi lifting bool_or::@8(between bool_or::@1 and bool_or::@2) +Added new block during phi lifting bool_or::@9(between bool_or::@7 and bool_or::@2) +Added new block during phi lifting bool_not::@8(between bool_not::@1 and bool_not::@4) +Added new block during phi lifting bool_not::@9(between bool_not::@7 and bool_not::@4) Added new block during phi lifting bool_complex::@10(between bool_complex::@3 and bool_complex::@1) Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 @@ -461,23 +519,41 @@ Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::@4 Adding NOP phi() at start of bool_complex Adding NOP phi() at start of bool_not +Adding NOP phi() at start of bool_not::@1_1 Adding NOP phi() at start of bool_or +Adding NOP phi() at start of bool_or::@1_1 Adding NOP phi() at start of bool_and +Adding NOP phi() at start of bool_and::@1_1 +Adding NOP phi() at start of bool_and::@7_1 CALL GRAPH Calls in [] to main:2 Calls in [main] to bool_and:6 bool_or:8 bool_not:10 bool_complex:12 -Created 4 initial phi equivalence classes +Created 7 initial phi equivalence classes Coalesced [28] bool_complex::i#6 ← bool_complex::i#1 -Coalesced [39] bool_not::i#6 ← bool_not::i#1 -Coalesced [50] bool_or::i#6 ← bool_or::i#1 -Coalesced [61] bool_and::i#6 ← bool_and::i#1 +Coalesced [34] bool_not::i#14 ← bool_not::i#7 +Coalesced [43] bool_not::i#13 ← bool_not::i#1 +Coalesced (already) [44] bool_not::i#12 ← bool_not::i#1 +Coalesced (already) [45] bool_not::i#11 ← bool_not::i#1 +Coalesced [50] bool_or::i#13 ← bool_or::i#6 +Coalesced [59] bool_or::i#14 ← bool_or::i#1 +Coalesced (already) [60] bool_or::i#12 ← bool_or::i#1 +Coalesced (already) [61] bool_or::i#11 ← bool_or::i#1 +Coalesced [67] bool_and::i#14 ← bool_and::i#11 +Coalesced [76] bool_and::i#15 ← bool_and::i#1 +Coalesced (already) [77] bool_and::i#13 ← bool_and::i#1 Coalesced down to 4 phi equivalence classes Culled Empty Block (label) @6 Culled Empty Block (label) main::@4 Culled Empty Block (label) bool_complex::@10 +Culled Empty Block (label) bool_not::@1_1 +Culled Empty Block (label) bool_not::@9 Culled Empty Block (label) bool_not::@8 +Culled Empty Block (label) bool_or::@1_1 +Culled Empty Block (label) bool_or::@9 Culled Empty Block (label) bool_or::@8 +Culled Empty Block (label) bool_and::@1_1 +Culled Empty Block (label) bool_and::@7_1 Culled Empty Block (label) bool_and::@8 Renumbering block @5 to @1 Renumbering block bool_and::@7 to bool_and::@5 @@ -561,84 +637,88 @@ bool_complex::@4: scope:[bool_complex] from bool_complex::@5 bool_complex::@7 to:bool_complex::@3 bool_not: scope:[bool_not] from main::@2 [27] phi() - to:bool_not::@1 -bool_not::@1: scope:[bool_not] from bool_not bool_not::@3 - [28] (byte) bool_not::i#2 ← phi( bool_not/(byte) 0 bool_not::@3/(byte) bool_not::i#1 ) - [29] (byte~) bool_not::$1 ← (byte) bool_not::i#2 & (byte) 1 - [30] if((byte) bool_not::i#2<(byte) $a) goto bool_not::@4 - to:bool_not::@5 -bool_not::@5: scope:[bool_not] from bool_not::@1 - [31] if((byte~) bool_not::$1==(byte) 0) goto bool_not::@4 - to:bool_not::@2 -bool_not::@2: scope:[bool_not] from bool_not::@5 - [32] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) '*' + to:bool_not::@4 +bool_not::@4: scope:[bool_not] from bool_not bool_not::@1 bool_not::@5 + [28] (byte) bool_not::i#7 ← phi( bool_not::@1/(byte) bool_not::i#1 bool_not/(byte) 0 bool_not::@5/(byte) bool_not::i#1 ) + [29] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#7) ← (byte) ' ' to:bool_not::@3 bool_not::@3: scope:[bool_not] from bool_not::@2 bool_not::@4 - [33] (byte) bool_not::i#1 ← ++ (byte) bool_not::i#2 - [34] if((byte) bool_not::i#1!=(byte) $15) goto bool_not::@1 + [30] (byte) bool_not::i#8 ← phi( bool_not::@2/(byte) bool_not::i#1 bool_not::@4/(byte) bool_not::i#7 ) + [31] (byte) bool_not::i#1 ← ++ (byte) bool_not::i#8 + [32] if((byte) bool_not::i#1!=(byte) $15) goto bool_not::@1 to:bool_not::@return bool_not::@return: scope:[bool_not] from bool_not::@3 - [35] return + [33] return to:@return -bool_not::@4: scope:[bool_not] from bool_not::@1 bool_not::@5 - [36] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) ' ' +bool_not::@1: scope:[bool_not] from bool_not::@3 + [34] (byte~) bool_not::$6 ← (byte) bool_not::i#1 & (byte) 1 + [35] if((byte) bool_not::i#1<(byte) $a) goto bool_not::@4 + to:bool_not::@5 +bool_not::@5: scope:[bool_not] from bool_not::@1 + [36] if((byte~) bool_not::$6==(byte) 0) goto bool_not::@4 + to:bool_not::@2 +bool_not::@2: scope:[bool_not] from bool_not::@5 + [37] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#1) ← (byte) '*' to:bool_not::@3 bool_or: scope:[bool_or] from main::@1 - [37] phi() - to:bool_or::@1 -bool_or::@1: scope:[bool_or] from bool_or bool_or::@3 - [38] (byte) bool_or::i#2 ← phi( bool_or/(byte) 0 bool_or::@3/(byte) bool_or::i#1 ) - [39] (byte~) bool_or::$1 ← (byte) bool_or::i#2 & (byte) 1 - [40] if((byte) bool_or::i#2<(byte) $a) goto bool_or::@2 - to:bool_or::@5 -bool_or::@5: scope:[bool_or] from bool_or::@1 - [41] if((byte~) bool_or::$1==(byte) 0) goto bool_or::@2 - to:bool_or::@4 -bool_or::@4: scope:[bool_or] from bool_or::@5 - [42] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) ' ' + [38] phi() + to:bool_or::@2 +bool_or::@2: scope:[bool_or] from bool_or bool_or::@1 bool_or::@5 + [39] (byte) bool_or::i#6 ← phi( bool_or::@1/(byte) bool_or::i#1 bool_or/(byte) 0 bool_or::@5/(byte) bool_or::i#1 ) + [40] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#6) ← (byte) '*' to:bool_or::@3 bool_or::@3: scope:[bool_or] from bool_or::@2 bool_or::@4 - [43] (byte) bool_or::i#1 ← ++ (byte) bool_or::i#2 - [44] if((byte) bool_or::i#1!=(byte) $15) goto bool_or::@1 + [41] (byte) bool_or::i#8 ← phi( bool_or::@2/(byte) bool_or::i#6 bool_or::@4/(byte) bool_or::i#1 ) + [42] (byte) bool_or::i#1 ← ++ (byte) bool_or::i#8 + [43] if((byte) bool_or::i#1!=(byte) $15) goto bool_or::@1 to:bool_or::@return bool_or::@return: scope:[bool_or] from bool_or::@3 - [45] return + [44] return to:@return -bool_or::@2: scope:[bool_or] from bool_or::@1 bool_or::@5 - [46] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) '*' +bool_or::@1: scope:[bool_or] from bool_or::@3 + [45] (byte~) bool_or::$5 ← (byte) bool_or::i#1 & (byte) 1 + [46] if((byte) bool_or::i#1<(byte) $a) goto bool_or::@2 + to:bool_or::@5 +bool_or::@5: scope:[bool_or] from bool_or::@1 + [47] if((byte~) bool_or::$5==(byte) 0) goto bool_or::@2 + to:bool_or::@4 +bool_or::@4: scope:[bool_or] from bool_or::@5 + [48] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#1) ← (byte) ' ' to:bool_or::@3 bool_and: scope:[bool_and] from main - [47] phi() - to:bool_and::@1 -bool_and::@1: scope:[bool_and] from bool_and bool_and::@3 - [48] (byte) bool_and::i#2 ← phi( bool_and/(byte) 0 bool_and::@3/(byte) bool_and::i#1 ) - [49] (byte~) bool_and::$1 ← (byte) bool_and::i#2 & (byte) 1 - [50] if((byte) bool_and::i#2>=(byte) $a) goto bool_and::@4 - to:bool_and::@5 -bool_and::@5: scope:[bool_and] from bool_and::@1 - [51] if((byte~) bool_and::$1==(byte) 0) goto bool_and::@2 - to:bool_and::@4 -bool_and::@4: scope:[bool_and] from bool_and::@1 bool_and::@5 - [52] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) ' ' + [49] phi() + to:bool_and::@2 +bool_and::@2: scope:[bool_and] from bool_and bool_and::@5 + [50] (byte) bool_and::i#11 ← phi( bool_and::@5/(byte) bool_and::i#1 bool_and/(byte) 0 ) + [51] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#11) ← (byte) '*' to:bool_and::@3 bool_and::@3: scope:[bool_and] from bool_and::@2 bool_and::@4 - [53] (byte) bool_and::i#1 ← ++ (byte) bool_and::i#2 + [52] (byte) bool_and::i#8 ← phi( bool_and::@2/(byte) bool_and::i#11 bool_and::@4/(byte) bool_and::i#1 ) + [53] (byte) bool_and::i#1 ← ++ (byte) bool_and::i#8 [54] if((byte) bool_and::i#1!=(byte) $15) goto bool_and::@1 to:bool_and::@return bool_and::@return: scope:[bool_and] from bool_and::@3 [55] return to:@return -bool_and::@2: scope:[bool_and] from bool_and::@5 - [56] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) '*' +bool_and::@1: scope:[bool_and] from bool_and::@3 + [56] (byte~) bool_and::$5 ← (byte) bool_and::i#1 & (byte) 1 + [57] if((byte) bool_and::i#1>=(byte) $a) goto bool_and::@4 + to:bool_and::@5 +bool_and::@5: scope:[bool_and] from bool_and::@1 + [58] if((byte~) bool_and::$5==(byte) 0) goto bool_and::@2 + to:bool_and::@4 +bool_and::@4: scope:[bool_and] from bool_and::@1 bool_and::@5 + [59] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#1) ← (byte) ' ' to:bool_and::@3 VARIABLE REGISTER WEIGHTS (void()) bool_and() -(byte~) bool_and::$1 11.0 +(byte~) bool_and::$5 101.0 (byte) bool_and::i -(byte) bool_and::i#1 16.5 -(byte) bool_and::i#2 11.0 +(byte) bool_and::i#1 117.83333333333331 +(byte) bool_and::i#11 61.5 +(byte) bool_and::i#8 213.0 (bool) bool_and::o1 (bool) bool_and::o2 (bool) bool_and::o3 @@ -657,19 +737,21 @@ VARIABLE REGISTER WEIGHTS (bool) bool_complex::o5 (byte*) bool_complex::screen (void()) bool_not() -(byte~) bool_not::$1 11.0 +(byte~) bool_not::$6 101.0 (byte) bool_not::i -(byte) bool_not::i#1 16.5 -(byte) bool_not::i#2 11.0 +(byte) bool_not::i#1 134.66666666666666 +(byte) bool_not::i#7 112.0 +(byte) bool_not::i#8 213.0 (bool) bool_not::o1 (bool) bool_not::o2 (bool) bool_not::o3 (byte*) bool_not::screen (void()) bool_or() -(byte~) bool_or::$1 11.0 +(byte~) bool_or::$5 101.0 (byte) bool_or::i -(byte) bool_or::i#1 16.5 -(byte) bool_or::i#2 11.0 +(byte) bool_or::i#1 134.66666666666666 +(byte) bool_or::i#6 112.0 +(byte) bool_or::i#8 213.0 (bool) bool_or::o1 (bool) bool_or::o2 (bool) bool_or::o3 @@ -678,36 +760,36 @@ VARIABLE REGISTER WEIGHTS Initial phi equivalence classes [ bool_complex::i#2 bool_complex::i#1 ] -[ bool_not::i#2 bool_not::i#1 ] -[ bool_or::i#2 bool_or::i#1 ] -[ bool_and::i#2 bool_and::i#1 ] +[ bool_not::i#8 bool_not::i#7 bool_not::i#1 ] +[ bool_or::i#8 bool_or::i#6 bool_or::i#1 ] +[ bool_and::i#8 bool_and::i#11 bool_and::i#1 ] Added variable bool_complex::o1#0 to zero page equivalence class [ bool_complex::o1#0 ] Added variable bool_complex::$1 to zero page equivalence class [ bool_complex::$1 ] Added variable bool_complex::o2#0 to zero page equivalence class [ bool_complex::o2#0 ] -Added variable bool_not::$1 to zero page equivalence class [ bool_not::$1 ] -Added variable bool_or::$1 to zero page equivalence class [ bool_or::$1 ] -Added variable bool_and::$1 to zero page equivalence class [ bool_and::$1 ] +Added variable bool_not::$6 to zero page equivalence class [ bool_not::$6 ] +Added variable bool_or::$5 to zero page equivalence class [ bool_or::$5 ] +Added variable bool_and::$5 to zero page equivalence class [ bool_and::$5 ] Complete equivalence classes [ bool_complex::i#2 bool_complex::i#1 ] -[ bool_not::i#2 bool_not::i#1 ] -[ bool_or::i#2 bool_or::i#1 ] -[ bool_and::i#2 bool_and::i#1 ] +[ bool_not::i#8 bool_not::i#7 bool_not::i#1 ] +[ bool_or::i#8 bool_or::i#6 bool_or::i#1 ] +[ bool_and::i#8 bool_and::i#11 bool_and::i#1 ] [ bool_complex::o1#0 ] [ bool_complex::$1 ] [ bool_complex::o2#0 ] -[ bool_not::$1 ] -[ bool_or::$1 ] -[ bool_and::$1 ] +[ bool_not::$6 ] +[ bool_or::$5 ] +[ bool_and::$5 ] Allocated zp ZP_BYTE:2 [ bool_complex::i#2 bool_complex::i#1 ] -Allocated zp ZP_BYTE:3 [ bool_not::i#2 bool_not::i#1 ] -Allocated zp ZP_BYTE:4 [ bool_or::i#2 bool_or::i#1 ] -Allocated zp ZP_BYTE:5 [ bool_and::i#2 bool_and::i#1 ] +Allocated zp ZP_BYTE:3 [ bool_not::i#8 bool_not::i#7 bool_not::i#1 ] +Allocated zp ZP_BYTE:4 [ bool_or::i#8 bool_or::i#6 bool_or::i#1 ] +Allocated zp ZP_BYTE:5 [ bool_and::i#8 bool_and::i#11 bool_and::i#1 ] Allocated zp ZP_BOOL:6 [ bool_complex::o1#0 ] Allocated zp ZP_BYTE:7 [ bool_complex::$1 ] Allocated zp ZP_BOOL:8 [ bool_complex::o2#0 ] -Allocated zp ZP_BYTE:9 [ bool_not::$1 ] -Allocated zp ZP_BYTE:10 [ bool_or::$1 ] -Allocated zp ZP_BYTE:11 [ bool_and::$1 ] +Allocated zp ZP_BYTE:9 [ bool_not::$6 ] +Allocated zp ZP_BYTE:10 [ bool_or::$5 ] +Allocated zp ZP_BYTE:11 [ bool_and::$5 ] INITIAL ASM Target platform is c64basic @@ -737,7 +819,7 @@ bend: // main main: { // [5] call bool_and - // [47] phi from main to bool_and [phi:main->bool_and] + // [49] phi from main to bool_and [phi:main->bool_and] bool_and_from_main: jsr bool_and // [6] phi from main to main::@1 [phi:main->main::@1] @@ -746,7 +828,7 @@ main: { // main::@1 b1: // [7] call bool_or - // [37] phi from main::@1 to bool_or [phi:main::@1->bool_or] + // [38] phi from main::@1 to bool_or [phi:main::@1->bool_or] bool_or_from_b1: jsr bool_or // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -868,185 +950,199 @@ bool_complex: { // bool_not bool_not: { .label screen = $450 - .label _1 = 9 .label i = 3 - // [28] phi from bool_not to bool_not::@1 [phi:bool_not->bool_not::@1] - b1_from_bool_not: - // [28] phi (byte) bool_not::i#2 = (byte) 0 [phi:bool_not->bool_not::@1#0] -- vbuz1=vbuc1 + .label _6 = 9 + // [28] phi from bool_not to bool_not::@4 [phi:bool_not->bool_not::@4] + b4_from_bool_not: + // [28] phi (byte) bool_not::i#7 = (byte) 0 [phi:bool_not->bool_not::@4#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // [28] phi from bool_not::@3 to bool_not::@1 [phi:bool_not::@3->bool_not::@1] - b1_from_b3: - // [28] phi (byte) bool_not::i#2 = (byte) bool_not::i#1 [phi:bool_not::@3->bool_not::@1#0] -- register_copy - jmp b1 - // bool_not::@1 - b1: - // [29] (byte~) bool_not::$1 ← (byte) bool_not::i#2 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 - lda #1 - and i - sta _1 - // [30] if((byte) bool_not::i#2<(byte) $a) goto bool_not::@4 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$a - bcc b4 - jmp b5 - // bool_not::@5 - b5: - // [31] if((byte~) bool_not::$1==(byte) 0) goto bool_not::@4 -- vbuz1_eq_0_then_la1 - lda _1 - cmp #0 - beq b4 - jmp b2 - // bool_not::@2 - b2: - // [32] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2 - lda #'*' - ldy i - sta screen,y - jmp b3 - // bool_not::@3 - b3: - // [33] (byte) bool_not::i#1 ← ++ (byte) bool_not::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [34] if((byte) bool_not::i#1!=(byte) $15) goto bool_not::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$15 - cmp i - bne b1_from_b3 - jmp breturn - // bool_not::@return - breturn: - // [35] return - rts + jmp b4 + // [28] phi from bool_not::@1 bool_not::@5 to bool_not::@4 [phi:bool_not::@1/bool_not::@5->bool_not::@4] + b4_from_b1: + b4_from_b5: + // [28] phi (byte) bool_not::i#7 = (byte) bool_not::i#1 [phi:bool_not::@1/bool_not::@5->bool_not::@4#0] -- register_copy + jmp b4 // bool_not::@4 b4: - // [36] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 + // [29] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#7) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 lda #' ' ldy i sta screen,y + // [30] phi from bool_not::@2 bool_not::@4 to bool_not::@3 [phi:bool_not::@2/bool_not::@4->bool_not::@3] + b3_from_b2: + b3_from_b4: + // [30] phi (byte) bool_not::i#8 = (byte) bool_not::i#1 [phi:bool_not::@2/bool_not::@4->bool_not::@3#0] -- register_copy jmp b3 + // bool_not::@3 + b3: + // [31] (byte) bool_not::i#1 ← ++ (byte) bool_not::i#8 -- vbuz1=_inc_vbuz1 + inc i + // [32] if((byte) bool_not::i#1!=(byte) $15) goto bool_not::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$15 + cmp i + bne b1 + jmp breturn + // bool_not::@return + breturn: + // [33] return + rts + // bool_not::@1 + b1: + // [34] (byte~) bool_not::$6 ← (byte) bool_not::i#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + lda #1 + and i + sta _6 + // [35] if((byte) bool_not::i#1<(byte) $a) goto bool_not::@4 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$a + bcc b4_from_b1 + jmp b5 + // bool_not::@5 + b5: + // [36] if((byte~) bool_not::$6==(byte) 0) goto bool_not::@4 -- vbuz1_eq_0_then_la1 + lda _6 + cmp #0 + beq b4_from_b5 + jmp b2 + // bool_not::@2 + b2: + // [37] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#1) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'*' + ldy i + sta screen,y + jmp b3_from_b2 } // bool_or bool_or: { .label screen = $428 - .label _1 = $a .label i = 4 - // [38] phi from bool_or to bool_or::@1 [phi:bool_or->bool_or::@1] - b1_from_bool_or: - // [38] phi (byte) bool_or::i#2 = (byte) 0 [phi:bool_or->bool_or::@1#0] -- vbuz1=vbuc1 + .label _5 = $a + // [39] phi from bool_or to bool_or::@2 [phi:bool_or->bool_or::@2] + b2_from_bool_or: + // [39] phi (byte) bool_or::i#6 = (byte) 0 [phi:bool_or->bool_or::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // [38] phi from bool_or::@3 to bool_or::@1 [phi:bool_or::@3->bool_or::@1] - b1_from_b3: - // [38] phi (byte) bool_or::i#2 = (byte) bool_or::i#1 [phi:bool_or::@3->bool_or::@1#0] -- register_copy - jmp b1 - // bool_or::@1 - b1: - // [39] (byte~) bool_or::$1 ← (byte) bool_or::i#2 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 - lda #1 - and i - sta _1 - // [40] if((byte) bool_or::i#2<(byte) $a) goto bool_or::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$a - bcc b2 - jmp b5 - // bool_or::@5 - b5: - // [41] if((byte~) bool_or::$1==(byte) 0) goto bool_or::@2 -- vbuz1_eq_0_then_la1 - lda _1 - cmp #0 - beq b2 - jmp b4 - // bool_or::@4 - b4: - // [42] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 - lda #' ' - ldy i - sta screen,y - jmp b3 - // bool_or::@3 - b3: - // [43] (byte) bool_or::i#1 ← ++ (byte) bool_or::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [44] if((byte) bool_or::i#1!=(byte) $15) goto bool_or::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$15 - cmp i - bne b1_from_b3 - jmp breturn - // bool_or::@return - breturn: - // [45] return - rts + jmp b2 + // [39] phi from bool_or::@1 bool_or::@5 to bool_or::@2 [phi:bool_or::@1/bool_or::@5->bool_or::@2] + b2_from_b1: + b2_from_b5: + // [39] phi (byte) bool_or::i#6 = (byte) bool_or::i#1 [phi:bool_or::@1/bool_or::@5->bool_or::@2#0] -- register_copy + jmp b2 // bool_or::@2 b2: - // [46] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2 + // [40] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#6) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2 lda #'*' ldy i sta screen,y + // [41] phi from bool_or::@2 bool_or::@4 to bool_or::@3 [phi:bool_or::@2/bool_or::@4->bool_or::@3] + b3_from_b2: + b3_from_b4: + // [41] phi (byte) bool_or::i#8 = (byte) bool_or::i#6 [phi:bool_or::@2/bool_or::@4->bool_or::@3#0] -- register_copy jmp b3 + // bool_or::@3 + b3: + // [42] (byte) bool_or::i#1 ← ++ (byte) bool_or::i#8 -- vbuz1=_inc_vbuz1 + inc i + // [43] if((byte) bool_or::i#1!=(byte) $15) goto bool_or::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$15 + cmp i + bne b1 + jmp breturn + // bool_or::@return + breturn: + // [44] return + rts + // bool_or::@1 + b1: + // [45] (byte~) bool_or::$5 ← (byte) bool_or::i#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + lda #1 + and i + sta _5 + // [46] if((byte) bool_or::i#1<(byte) $a) goto bool_or::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$a + bcc b2_from_b1 + jmp b5 + // bool_or::@5 + b5: + // [47] if((byte~) bool_or::$5==(byte) 0) goto bool_or::@2 -- vbuz1_eq_0_then_la1 + lda _5 + cmp #0 + beq b2_from_b5 + jmp b4 + // bool_or::@4 + b4: + // [48] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#1) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #' ' + ldy i + sta screen,y + jmp b3_from_b4 } // bool_and bool_and: { .label screen = $400 - .label _1 = $b .label i = 5 - // [48] phi from bool_and to bool_and::@1 [phi:bool_and->bool_and::@1] - b1_from_bool_and: - // [48] phi (byte) bool_and::i#2 = (byte) 0 [phi:bool_and->bool_and::@1#0] -- vbuz1=vbuc1 + .label _5 = $b + // [50] phi from bool_and to bool_and::@2 [phi:bool_and->bool_and::@2] + b2_from_bool_and: + // [50] phi (byte) bool_and::i#11 = (byte) 0 [phi:bool_and->bool_and::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // [48] phi from bool_and::@3 to bool_and::@1 [phi:bool_and::@3->bool_and::@1] - b1_from_b3: - // [48] phi (byte) bool_and::i#2 = (byte) bool_and::i#1 [phi:bool_and::@3->bool_and::@1#0] -- register_copy - jmp b1 + jmp b2 + // [50] phi from bool_and::@5 to bool_and::@2 [phi:bool_and::@5->bool_and::@2] + b2_from_b5: + // [50] phi (byte) bool_and::i#11 = (byte) bool_and::i#1 [phi:bool_and::@5->bool_and::@2#0] -- register_copy + jmp b2 + // bool_and::@2 + b2: + // [51] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#11) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'*' + ldy i + sta screen,y + // [52] phi from bool_and::@2 bool_and::@4 to bool_and::@3 [phi:bool_and::@2/bool_and::@4->bool_and::@3] + b3_from_b2: + b3_from_b4: + // [52] phi (byte) bool_and::i#8 = (byte) bool_and::i#11 [phi:bool_and::@2/bool_and::@4->bool_and::@3#0] -- register_copy + jmp b3 + // bool_and::@3 + b3: + // [53] (byte) bool_and::i#1 ← ++ (byte) bool_and::i#8 -- vbuz1=_inc_vbuz1 + inc i + // [54] if((byte) bool_and::i#1!=(byte) $15) goto bool_and::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$15 + cmp i + bne b1 + jmp breturn + // bool_and::@return + breturn: + // [55] return + rts // bool_and::@1 b1: - // [49] (byte~) bool_and::$1 ← (byte) bool_and::i#2 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + // [56] (byte~) bool_and::$5 ← (byte) bool_and::i#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 lda #1 and i - sta _1 - // [50] if((byte) bool_and::i#2>=(byte) $a) goto bool_and::@4 -- vbuz1_ge_vbuc1_then_la1 + sta _5 + // [57] if((byte) bool_and::i#1>=(byte) $a) goto bool_and::@4 -- vbuz1_ge_vbuc1_then_la1 lda i cmp #$a bcs b4 jmp b5 // bool_and::@5 b5: - // [51] if((byte~) bool_and::$1==(byte) 0) goto bool_and::@2 -- vbuz1_eq_0_then_la1 - lda _1 + // [58] if((byte~) bool_and::$5==(byte) 0) goto bool_and::@2 -- vbuz1_eq_0_then_la1 + lda _5 cmp #0 - beq b2 + beq b2_from_b5 jmp b4 // bool_and::@4 b4: - // [52] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 + // [59] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#1) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 lda #' ' ldy i sta screen,y - jmp b3 - // bool_and::@3 - b3: - // [53] (byte) bool_and::i#1 ← ++ (byte) bool_and::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [54] if((byte) bool_and::i#1!=(byte) $15) goto bool_and::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$15 - cmp i - bne b1_from_b3 - jmp breturn - // bool_and::@return - breturn: - // [55] return - rts - // bool_and::@2 - b2: - // [56] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2 - lda #'*' - ldy i - sta screen,y - jmp b3 + jmp b3_from_b4 } // File Data @@ -1063,15 +1159,18 @@ Statement [20] if((bool) bool_complex::o1#0) goto bool_complex::@4 [ bool_comple Statement [21] if((bool) bool_complex::o2#0) goto bool_complex::@4 [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a Statement [22] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) '*' [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a Statement [26] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) ' ' [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a -Statement [32] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) '*' [ bool_not::i#2 ] ( main:2::bool_not:9 [ bool_not::i#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ bool_not::i#2 bool_not::i#1 ] -Statement [36] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) ' ' [ bool_not::i#2 ] ( main:2::bool_not:9 [ bool_not::i#2 ] ) always clobbers reg byte a -Statement [42] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) ' ' [ bool_or::i#2 ] ( main:2::bool_or:7 [ bool_or::i#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ bool_or::i#2 bool_or::i#1 ] -Statement [46] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) '*' [ bool_or::i#2 ] ( main:2::bool_or:7 [ bool_or::i#2 ] ) always clobbers reg byte a -Statement [52] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) ' ' [ bool_and::i#2 ] ( main:2::bool_and:5 [ bool_and::i#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ bool_and::i#2 bool_and::i#1 ] -Statement [56] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) '*' [ bool_and::i#2 ] ( main:2::bool_and:5 [ bool_and::i#2 ] ) always clobbers reg byte a +Statement [29] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#7) ← (byte) ' ' [ bool_not::i#7 ] ( main:2::bool_not:9 [ bool_not::i#7 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ bool_not::i#8 bool_not::i#7 bool_not::i#1 ] +Statement [34] (byte~) bool_not::$6 ← (byte) bool_not::i#1 & (byte) 1 [ bool_not::i#1 bool_not::$6 ] ( main:2::bool_not:9 [ bool_not::i#1 bool_not::$6 ] ) always clobbers reg byte a +Statement [37] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#1) ← (byte) '*' [ bool_not::i#1 ] ( main:2::bool_not:9 [ bool_not::i#1 ] ) always clobbers reg byte a +Statement [40] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#6) ← (byte) '*' [ bool_or::i#6 ] ( main:2::bool_or:7 [ bool_or::i#6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ bool_or::i#8 bool_or::i#6 bool_or::i#1 ] +Statement [45] (byte~) bool_or::$5 ← (byte) bool_or::i#1 & (byte) 1 [ bool_or::i#1 bool_or::$5 ] ( main:2::bool_or:7 [ bool_or::i#1 bool_or::$5 ] ) always clobbers reg byte a +Statement [48] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#1) ← (byte) ' ' [ bool_or::i#1 ] ( main:2::bool_or:7 [ bool_or::i#1 ] ) always clobbers reg byte a +Statement [51] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#11) ← (byte) '*' [ bool_and::i#11 ] ( main:2::bool_and:5 [ bool_and::i#11 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ bool_and::i#8 bool_and::i#11 bool_and::i#1 ] +Statement [56] (byte~) bool_and::$5 ← (byte) bool_and::i#1 & (byte) 1 [ bool_and::i#1 bool_and::$5 ] ( main:2::bool_and:5 [ bool_and::i#1 bool_and::$5 ] ) always clobbers reg byte a +Statement [59] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#1) ← (byte) ' ' [ bool_and::i#1 ] ( main:2::bool_and:5 [ bool_and::i#1 ] ) always clobbers reg byte a Statement [15] (bool) bool_complex::o1#0 ← (byte) bool_complex::i#2 < (byte) $a [ bool_complex::i#2 bool_complex::o1#0 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::o1#0 ] ) always clobbers reg byte a Statement [16] (byte~) bool_complex::$1 ← (byte) bool_complex::i#2 & (byte) 1 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::$1 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::$1 ] ) always clobbers reg byte a Statement [17] (bool) bool_complex::o2#0 ← (byte~) bool_complex::$1 == (byte) 0 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::o2#0 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::o2#0 ] ) always clobbers reg byte a @@ -1081,40 +1180,40 @@ Statement [20] if((bool) bool_complex::o1#0) goto bool_complex::@4 [ bool_comple Statement [21] if((bool) bool_complex::o2#0) goto bool_complex::@4 [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a Statement [22] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) '*' [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a Statement [26] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) ' ' [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a -Statement [29] (byte~) bool_not::$1 ← (byte) bool_not::i#2 & (byte) 1 [ bool_not::i#2 bool_not::$1 ] ( main:2::bool_not:9 [ bool_not::i#2 bool_not::$1 ] ) always clobbers reg byte a -Statement [32] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) '*' [ bool_not::i#2 ] ( main:2::bool_not:9 [ bool_not::i#2 ] ) always clobbers reg byte a -Statement [36] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) ' ' [ bool_not::i#2 ] ( main:2::bool_not:9 [ bool_not::i#2 ] ) always clobbers reg byte a -Statement [39] (byte~) bool_or::$1 ← (byte) bool_or::i#2 & (byte) 1 [ bool_or::i#2 bool_or::$1 ] ( main:2::bool_or:7 [ bool_or::i#2 bool_or::$1 ] ) always clobbers reg byte a -Statement [42] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) ' ' [ bool_or::i#2 ] ( main:2::bool_or:7 [ bool_or::i#2 ] ) always clobbers reg byte a -Statement [46] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) '*' [ bool_or::i#2 ] ( main:2::bool_or:7 [ bool_or::i#2 ] ) always clobbers reg byte a -Statement [49] (byte~) bool_and::$1 ← (byte) bool_and::i#2 & (byte) 1 [ bool_and::i#2 bool_and::$1 ] ( main:2::bool_and:5 [ bool_and::i#2 bool_and::$1 ] ) always clobbers reg byte a -Statement [52] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) ' ' [ bool_and::i#2 ] ( main:2::bool_and:5 [ bool_and::i#2 ] ) always clobbers reg byte a -Statement [56] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) '*' [ bool_and::i#2 ] ( main:2::bool_and:5 [ bool_and::i#2 ] ) always clobbers reg byte a +Statement [29] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#7) ← (byte) ' ' [ bool_not::i#7 ] ( main:2::bool_not:9 [ bool_not::i#7 ] ) always clobbers reg byte a +Statement [34] (byte~) bool_not::$6 ← (byte) bool_not::i#1 & (byte) 1 [ bool_not::i#1 bool_not::$6 ] ( main:2::bool_not:9 [ bool_not::i#1 bool_not::$6 ] ) always clobbers reg byte a +Statement [37] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#1) ← (byte) '*' [ bool_not::i#1 ] ( main:2::bool_not:9 [ bool_not::i#1 ] ) always clobbers reg byte a +Statement [40] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#6) ← (byte) '*' [ bool_or::i#6 ] ( main:2::bool_or:7 [ bool_or::i#6 ] ) always clobbers reg byte a +Statement [45] (byte~) bool_or::$5 ← (byte) bool_or::i#1 & (byte) 1 [ bool_or::i#1 bool_or::$5 ] ( main:2::bool_or:7 [ bool_or::i#1 bool_or::$5 ] ) always clobbers reg byte a +Statement [48] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#1) ← (byte) ' ' [ bool_or::i#1 ] ( main:2::bool_or:7 [ bool_or::i#1 ] ) always clobbers reg byte a +Statement [51] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#11) ← (byte) '*' [ bool_and::i#11 ] ( main:2::bool_and:5 [ bool_and::i#11 ] ) always clobbers reg byte a +Statement [56] (byte~) bool_and::$5 ← (byte) bool_and::i#1 & (byte) 1 [ bool_and::i#1 bool_and::$5 ] ( main:2::bool_and:5 [ bool_and::i#1 bool_and::$5 ] ) always clobbers reg byte a +Statement [59] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#1) ← (byte) ' ' [ bool_and::i#1 ] ( main:2::bool_and:5 [ bool_and::i#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ bool_complex::i#2 bool_complex::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ bool_not::i#2 bool_not::i#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:4 [ bool_or::i#2 bool_or::i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:5 [ bool_and::i#2 bool_and::i#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ bool_not::i#8 bool_not::i#7 bool_not::i#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ bool_or::i#8 bool_or::i#6 bool_or::i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:5 [ bool_and::i#8 bool_and::i#11 bool_and::i#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , Potential registers zp ZP_BOOL:6 [ bool_complex::o1#0 ] : zp ZP_BOOL:6 , Potential registers zp ZP_BYTE:7 [ bool_complex::$1 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BOOL:8 [ bool_complex::o2#0 ] : zp ZP_BOOL:8 , -Potential registers zp ZP_BYTE:9 [ bool_not::$1 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:10 [ bool_or::$1 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:11 [ bool_and::$1 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ bool_not::$6 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:10 [ bool_or::$5 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:11 [ bool_and::$5 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES +Uplift Scope [bool_or] 459.67: zp ZP_BYTE:4 [ bool_or::i#8 bool_or::i#6 bool_or::i#1 ] 101: zp ZP_BYTE:10 [ bool_or::$5 ] +Uplift Scope [bool_not] 459.67: zp ZP_BYTE:3 [ bool_not::i#8 bool_not::i#7 bool_not::i#1 ] 101: zp ZP_BYTE:9 [ bool_not::$6 ] +Uplift Scope [bool_and] 392.33: zp ZP_BYTE:5 [ bool_and::i#8 bool_and::i#11 bool_and::i#1 ] 101: zp ZP_BYTE:11 [ bool_and::$5 ] Uplift Scope [bool_complex] 23.1: zp ZP_BYTE:2 [ bool_complex::i#2 bool_complex::i#1 ] 22: zp ZP_BYTE:7 [ bool_complex::$1 ] 8.25: zp ZP_BOOL:8 [ bool_complex::o2#0 ] 6.6: zp ZP_BOOL:6 [ bool_complex::o1#0 ] -Uplift Scope [bool_and] 27.5: zp ZP_BYTE:5 [ bool_and::i#2 bool_and::i#1 ] 11: zp ZP_BYTE:11 [ bool_and::$1 ] -Uplift Scope [bool_or] 27.5: zp ZP_BYTE:4 [ bool_or::i#2 bool_or::i#1 ] 11: zp ZP_BYTE:10 [ bool_or::$1 ] -Uplift Scope [bool_not] 27.5: zp ZP_BYTE:3 [ bool_not::i#2 bool_not::i#1 ] 11: zp ZP_BYTE:9 [ bool_not::$1 ] Uplift Scope [main] Uplift Scope [] -Uplifting [bool_complex] best 3583 combination reg byte x [ bool_complex::i#2 bool_complex::i#1 ] reg byte a [ bool_complex::$1 ] zp ZP_BOOL:8 [ bool_complex::o2#0 ] zp ZP_BOOL:6 [ bool_complex::o1#0 ] -Uplifting [bool_and] best 3333 combination reg byte x [ bool_and::i#2 bool_and::i#1 ] reg byte a [ bool_and::$1 ] -Uplifting [bool_or] best 3083 combination reg byte x [ bool_or::i#2 bool_or::i#1 ] reg byte a [ bool_or::$1 ] -Uplifting [bool_not] best 2833 combination reg byte x [ bool_not::i#2 bool_not::i#1 ] reg byte a [ bool_not::$1 ] -Uplifting [main] best 2833 combination -Uplifting [] best 2833 combination +Uplifting [bool_or] best 18208 combination reg byte x [ bool_or::i#8 bool_or::i#6 bool_or::i#1 ] reg byte a [ bool_or::$5 ] +Uplifting [bool_not] best 16248 combination reg byte x [ bool_not::i#8 bool_not::i#7 bool_not::i#1 ] reg byte a [ bool_not::$6 ] +Uplifting [bool_and] best 14288 combination reg byte x [ bool_and::i#8 bool_and::i#11 bool_and::i#1 ] reg byte a [ bool_and::$5 ] +Uplifting [bool_complex] best 14038 combination reg byte x [ bool_complex::i#2 bool_complex::i#1 ] reg byte a [ bool_complex::$1 ] zp ZP_BOOL:8 [ bool_complex::o2#0 ] zp ZP_BOOL:6 [ bool_complex::o1#0 ] +Uplifting [main] best 14038 combination +Uplifting [] best 14038 combination Allocated (was zp ZP_BOOL:6) zp ZP_BOOL:2 [ bool_complex::o1#0 ] Allocated (was zp ZP_BOOL:8) zp ZP_BOOL:3 [ bool_complex::o2#0 ] @@ -1145,7 +1244,7 @@ bend: // main main: { // [5] call bool_and - // [47] phi from main to bool_and [phi:main->bool_and] + // [49] phi from main to bool_and [phi:main->bool_and] bool_and_from_main: jsr bool_and // [6] phi from main to main::@1 [phi:main->main::@1] @@ -1154,7 +1253,7 @@ main: { // main::@1 b1: // [7] call bool_or - // [37] phi from main::@1 to bool_or [phi:main::@1->bool_or] + // [38] phi from main::@1 to bool_or [phi:main::@1->bool_or] bool_or_from_b1: jsr bool_or // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1267,158 +1366,172 @@ bool_complex: { // bool_not bool_not: { .label screen = $450 - // [28] phi from bool_not to bool_not::@1 [phi:bool_not->bool_not::@1] - b1_from_bool_not: - // [28] phi (byte) bool_not::i#2 = (byte) 0 [phi:bool_not->bool_not::@1#0] -- vbuxx=vbuc1 + // [28] phi from bool_not to bool_not::@4 [phi:bool_not->bool_not::@4] + b4_from_bool_not: + // [28] phi (byte) bool_not::i#7 = (byte) 0 [phi:bool_not->bool_not::@4#0] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // [28] phi from bool_not::@3 to bool_not::@1 [phi:bool_not::@3->bool_not::@1] - b1_from_b3: - // [28] phi (byte) bool_not::i#2 = (byte) bool_not::i#1 [phi:bool_not::@3->bool_not::@1#0] -- register_copy - jmp b1 - // bool_not::@1 - b1: - // [29] (byte~) bool_not::$1 ← (byte) bool_not::i#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - // [30] if((byte) bool_not::i#2<(byte) $a) goto bool_not::@4 -- vbuxx_lt_vbuc1_then_la1 - cpx #$a - bcc b4 - jmp b5 - // bool_not::@5 - b5: - // [31] if((byte~) bool_not::$1==(byte) 0) goto bool_not::@4 -- vbuaa_eq_0_then_la1 - cmp #0 - beq b4 - jmp b2 - // bool_not::@2 - b2: - // [32] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #'*' + jmp b4 + // [28] phi from bool_not::@1 bool_not::@5 to bool_not::@4 [phi:bool_not::@1/bool_not::@5->bool_not::@4] + b4_from_b1: + b4_from_b5: + // [28] phi (byte) bool_not::i#7 = (byte) bool_not::i#1 [phi:bool_not::@1/bool_not::@5->bool_not::@4#0] -- register_copy + jmp b4 + // bool_not::@4 + b4: + // [29] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#7) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #' ' sta screen,x + // [30] phi from bool_not::@2 bool_not::@4 to bool_not::@3 [phi:bool_not::@2/bool_not::@4->bool_not::@3] + b3_from_b2: + b3_from_b4: + // [30] phi (byte) bool_not::i#8 = (byte) bool_not::i#1 [phi:bool_not::@2/bool_not::@4->bool_not::@3#0] -- register_copy jmp b3 // bool_not::@3 b3: - // [33] (byte) bool_not::i#1 ← ++ (byte) bool_not::i#2 -- vbuxx=_inc_vbuxx + // [31] (byte) bool_not::i#1 ← ++ (byte) bool_not::i#8 -- vbuxx=_inc_vbuxx inx - // [34] if((byte) bool_not::i#1!=(byte) $15) goto bool_not::@1 -- vbuxx_neq_vbuc1_then_la1 + // [32] if((byte) bool_not::i#1!=(byte) $15) goto bool_not::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$15 - bne b1_from_b3 + bne b1 jmp breturn // bool_not::@return breturn: - // [35] return + // [33] return rts - // bool_not::@4 - b4: - // [36] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #' ' + // bool_not::@1 + b1: + // [34] (byte~) bool_not::$6 ← (byte) bool_not::i#1 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + // [35] if((byte) bool_not::i#1<(byte) $a) goto bool_not::@4 -- vbuxx_lt_vbuc1_then_la1 + cpx #$a + bcc b4_from_b1 + jmp b5 + // bool_not::@5 + b5: + // [36] if((byte~) bool_not::$6==(byte) 0) goto bool_not::@4 -- vbuaa_eq_0_then_la1 + cmp #0 + beq b4_from_b5 + jmp b2 + // bool_not::@2 + b2: + // [37] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#1) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'*' sta screen,x - jmp b3 + jmp b3_from_b2 } // bool_or bool_or: { .label screen = $428 - // [38] phi from bool_or to bool_or::@1 [phi:bool_or->bool_or::@1] - b1_from_bool_or: - // [38] phi (byte) bool_or::i#2 = (byte) 0 [phi:bool_or->bool_or::@1#0] -- vbuxx=vbuc1 + // [39] phi from bool_or to bool_or::@2 [phi:bool_or->bool_or::@2] + b2_from_bool_or: + // [39] phi (byte) bool_or::i#6 = (byte) 0 [phi:bool_or->bool_or::@2#0] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // [38] phi from bool_or::@3 to bool_or::@1 [phi:bool_or::@3->bool_or::@1] - b1_from_b3: - // [38] phi (byte) bool_or::i#2 = (byte) bool_or::i#1 [phi:bool_or::@3->bool_or::@1#0] -- register_copy - jmp b1 - // bool_or::@1 - b1: - // [39] (byte~) bool_or::$1 ← (byte) bool_or::i#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - // [40] if((byte) bool_or::i#2<(byte) $a) goto bool_or::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$a - bcc b2 - jmp b5 - // bool_or::@5 - b5: - // [41] if((byte~) bool_or::$1==(byte) 0) goto bool_or::@2 -- vbuaa_eq_0_then_la1 - cmp #0 - beq b2 - jmp b4 - // bool_or::@4 - b4: - // [42] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #' ' + jmp b2 + // [39] phi from bool_or::@1 bool_or::@5 to bool_or::@2 [phi:bool_or::@1/bool_or::@5->bool_or::@2] + b2_from_b1: + b2_from_b5: + // [39] phi (byte) bool_or::i#6 = (byte) bool_or::i#1 [phi:bool_or::@1/bool_or::@5->bool_or::@2#0] -- register_copy + jmp b2 + // bool_or::@2 + b2: + // [40] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#6) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'*' sta screen,x + // [41] phi from bool_or::@2 bool_or::@4 to bool_or::@3 [phi:bool_or::@2/bool_or::@4->bool_or::@3] + b3_from_b2: + b3_from_b4: + // [41] phi (byte) bool_or::i#8 = (byte) bool_or::i#6 [phi:bool_or::@2/bool_or::@4->bool_or::@3#0] -- register_copy jmp b3 // bool_or::@3 b3: - // [43] (byte) bool_or::i#1 ← ++ (byte) bool_or::i#2 -- vbuxx=_inc_vbuxx + // [42] (byte) bool_or::i#1 ← ++ (byte) bool_or::i#8 -- vbuxx=_inc_vbuxx inx - // [44] if((byte) bool_or::i#1!=(byte) $15) goto bool_or::@1 -- vbuxx_neq_vbuc1_then_la1 + // [43] if((byte) bool_or::i#1!=(byte) $15) goto bool_or::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$15 - bne b1_from_b3 + bne b1 jmp breturn // bool_or::@return breturn: - // [45] return + // [44] return rts - // bool_or::@2 - b2: - // [46] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #'*' + // bool_or::@1 + b1: + // [45] (byte~) bool_or::$5 ← (byte) bool_or::i#1 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + // [46] if((byte) bool_or::i#1<(byte) $a) goto bool_or::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #$a + bcc b2_from_b1 + jmp b5 + // bool_or::@5 + b5: + // [47] if((byte~) bool_or::$5==(byte) 0) goto bool_or::@2 -- vbuaa_eq_0_then_la1 + cmp #0 + beq b2_from_b5 + jmp b4 + // bool_or::@4 + b4: + // [48] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#1) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #' ' sta screen,x - jmp b3 + jmp b3_from_b4 } // bool_and bool_and: { .label screen = $400 - // [48] phi from bool_and to bool_and::@1 [phi:bool_and->bool_and::@1] - b1_from_bool_and: - // [48] phi (byte) bool_and::i#2 = (byte) 0 [phi:bool_and->bool_and::@1#0] -- vbuxx=vbuc1 + // [50] phi from bool_and to bool_and::@2 [phi:bool_and->bool_and::@2] + b2_from_bool_and: + // [50] phi (byte) bool_and::i#11 = (byte) 0 [phi:bool_and->bool_and::@2#0] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // [48] phi from bool_and::@3 to bool_and::@1 [phi:bool_and::@3->bool_and::@1] - b1_from_b3: - // [48] phi (byte) bool_and::i#2 = (byte) bool_and::i#1 [phi:bool_and::@3->bool_and::@1#0] -- register_copy - jmp b1 - // bool_and::@1 - b1: - // [49] (byte~) bool_and::$1 ← (byte) bool_and::i#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - // [50] if((byte) bool_and::i#2>=(byte) $a) goto bool_and::@4 -- vbuxx_ge_vbuc1_then_la1 - cpx #$a - bcs b4 - jmp b5 - // bool_and::@5 - b5: - // [51] if((byte~) bool_and::$1==(byte) 0) goto bool_and::@2 -- vbuaa_eq_0_then_la1 - cmp #0 - beq b2 - jmp b4 - // bool_and::@4 - b4: - // [52] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #' ' + jmp b2 + // [50] phi from bool_and::@5 to bool_and::@2 [phi:bool_and::@5->bool_and::@2] + b2_from_b5: + // [50] phi (byte) bool_and::i#11 = (byte) bool_and::i#1 [phi:bool_and::@5->bool_and::@2#0] -- register_copy + jmp b2 + // bool_and::@2 + b2: + // [51] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#11) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'*' sta screen,x + // [52] phi from bool_and::@2 bool_and::@4 to bool_and::@3 [phi:bool_and::@2/bool_and::@4->bool_and::@3] + b3_from_b2: + b3_from_b4: + // [52] phi (byte) bool_and::i#8 = (byte) bool_and::i#11 [phi:bool_and::@2/bool_and::@4->bool_and::@3#0] -- register_copy jmp b3 // bool_and::@3 b3: - // [53] (byte) bool_and::i#1 ← ++ (byte) bool_and::i#2 -- vbuxx=_inc_vbuxx + // [53] (byte) bool_and::i#1 ← ++ (byte) bool_and::i#8 -- vbuxx=_inc_vbuxx inx // [54] if((byte) bool_and::i#1!=(byte) $15) goto bool_and::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$15 - bne b1_from_b3 + bne b1 jmp breturn // bool_and::@return breturn: // [55] return rts - // bool_and::@2 - b2: - // [56] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #'*' + // bool_and::@1 + b1: + // [56] (byte~) bool_and::$5 ← (byte) bool_and::i#1 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + // [57] if((byte) bool_and::i#1>=(byte) $a) goto bool_and::@4 -- vbuxx_ge_vbuc1_then_la1 + cpx #$a + bcs b4 + jmp b5 + // bool_and::@5 + b5: + // [58] if((byte~) bool_and::$5==(byte) 0) goto bool_and::@2 -- vbuaa_eq_0_then_la1 + cmp #0 + beq b2_from_b5 + jmp b4 + // bool_and::@4 + b4: + // [59] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#1) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #' ' sta screen,x - jmp b3 + jmp b3_from_b4 } // File Data @@ -1435,26 +1548,31 @@ Removing instruction jmp b7 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp breturn -Removing instruction jmp b1 +Removing instruction jmp b4 +Removing instruction jmp b3 +Removing instruction jmp breturn Removing instruction jmp b5 Removing instruction jmp b2 +Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp breturn -Removing instruction jmp b1 Removing instruction jmp b5 Removing instruction jmp b4 +Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp breturn -Removing instruction jmp b1 Removing instruction jmp b5 Removing instruction jmp b4 -Removing instruction jmp b3 -Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Replacing label b1_from_b3 with b1 -Replacing label b1_from_b3 with b1 -Replacing label b1_from_b3 with b1 -Replacing label b1_from_b3 with b1 +Replacing label b4_from_b1 with b4 +Replacing label b4_from_b5 with b4 +Replacing label b3_from_b2 with b3 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b5 with b2 +Replacing label b3_from_b4 with b3 +Replacing label b2_from_b5 with b2 +Replacing label b3_from_b4 with b3 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: @@ -1466,9 +1584,17 @@ Removing instruction bool_not_from_b2: Removing instruction b3_from_b2: Removing instruction bool_complex_from_b3: Removing instruction b1_from_b3: -Removing instruction b1_from_b3: -Removing instruction b1_from_b3: -Removing instruction b1_from_b3: +Removing instruction b4_from_b1: +Removing instruction b4_from_b5: +Removing instruction b3_from_b2: +Removing instruction b3_from_b4: +Removing instruction b2_from_b1: +Removing instruction b2_from_b5: +Removing instruction b3_from_b2: +Removing instruction b3_from_b4: +Removing instruction b2_from_b5: +Removing instruction b3_from_b2: +Removing instruction b3_from_b4: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction bool_and_from_main: @@ -1479,25 +1605,25 @@ Removing instruction breturn: Removing instruction b1_from_bool_complex: Removing instruction b7: Removing instruction breturn: -Removing instruction b1_from_bool_not: +Removing instruction b4_from_bool_not: +Removing instruction breturn: Removing instruction b5: Removing instruction b2: +Removing instruction b2_from_bool_or: Removing instruction breturn: -Removing instruction b1_from_bool_or: Removing instruction b5: Removing instruction b4: +Removing instruction b2_from_bool_and: Removing instruction breturn: -Removing instruction b1_from_bool_and: Removing instruction b5: -Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin Removing instruction jmp b1 -Removing instruction jmp b1 -Removing instruction jmp b1 -Removing instruction jmp b1 +Removing instruction jmp b4 +Removing instruction jmp b2 +Removing instruction jmp b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -1507,7 +1633,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (void()) bool_and() -(byte~) bool_and::$1 reg byte a 11.0 +(byte~) bool_and::$5 reg byte a 101.0 (label) bool_and::@1 (label) bool_and::@2 (label) bool_and::@3 @@ -1515,8 +1641,9 @@ FINAL SYMBOL TABLE (label) bool_and::@5 (label) bool_and::@return (byte) bool_and::i -(byte) bool_and::i#1 reg byte x 16.5 -(byte) bool_and::i#2 reg byte x 11.0 +(byte) bool_and::i#1 reg byte x 117.83333333333331 +(byte) bool_and::i#11 reg byte x 61.5 +(byte) bool_and::i#8 reg byte x 213.0 (bool) bool_and::o1 (bool) bool_and::o2 (bool) bool_and::o3 @@ -1545,7 +1672,7 @@ FINAL SYMBOL TABLE (byte*) bool_complex::screen (const byte*) bool_complex::screen#0 screen = (byte*) 1144 (void()) bool_not() -(byte~) bool_not::$1 reg byte a 11.0 +(byte~) bool_not::$6 reg byte a 101.0 (label) bool_not::@1 (label) bool_not::@2 (label) bool_not::@3 @@ -1553,15 +1680,16 @@ FINAL SYMBOL TABLE (label) bool_not::@5 (label) bool_not::@return (byte) bool_not::i -(byte) bool_not::i#1 reg byte x 16.5 -(byte) bool_not::i#2 reg byte x 11.0 +(byte) bool_not::i#1 reg byte x 134.66666666666666 +(byte) bool_not::i#7 reg byte x 112.0 +(byte) bool_not::i#8 reg byte x 213.0 (bool) bool_not::o1 (bool) bool_not::o2 (bool) bool_not::o3 (byte*) bool_not::screen (const byte*) bool_not::screen#0 screen = (byte*) 1104 (void()) bool_or() -(byte~) bool_or::$1 reg byte a 11.0 +(byte~) bool_or::$5 reg byte a 101.0 (label) bool_or::@1 (label) bool_or::@2 (label) bool_or::@3 @@ -1569,8 +1697,9 @@ FINAL SYMBOL TABLE (label) bool_or::@5 (label) bool_or::@return (byte) bool_or::i -(byte) bool_or::i#1 reg byte x 16.5 -(byte) bool_or::i#2 reg byte x 11.0 +(byte) bool_or::i#1 reg byte x 134.66666666666666 +(byte) bool_or::i#6 reg byte x 112.0 +(byte) bool_or::i#8 reg byte x 213.0 (bool) bool_or::o1 (bool) bool_or::o2 (bool) bool_or::o3 @@ -1583,19 +1712,19 @@ FINAL SYMBOL TABLE (label) main::@return reg byte x [ bool_complex::i#2 bool_complex::i#1 ] -reg byte x [ bool_not::i#2 bool_not::i#1 ] -reg byte x [ bool_or::i#2 bool_or::i#1 ] -reg byte x [ bool_and::i#2 bool_and::i#1 ] +reg byte x [ bool_not::i#8 bool_not::i#7 bool_not::i#1 ] +reg byte x [ bool_or::i#8 bool_or::i#6 bool_or::i#1 ] +reg byte x [ bool_and::i#8 bool_and::i#11 bool_and::i#1 ] zp ZP_BOOL:2 [ bool_complex::o1#0 ] reg byte a [ bool_complex::$1 ] zp ZP_BOOL:3 [ bool_complex::o2#0 ] -reg byte a [ bool_not::$1 ] -reg byte a [ bool_or::$1 ] -reg byte a [ bool_and::$1 ] +reg byte a [ bool_not::$6 ] +reg byte a [ bool_or::$5 ] +reg byte a [ bool_and::$5 ] FINAL ASSEMBLER -Score: 2059 +Score: 10024 // File Comments // A test of boolean conditions using && || and ! @@ -1615,13 +1744,13 @@ Score: 2059 main: { // bool_and() // [5] call bool_and - // [47] phi from main to bool_and [phi:main->bool_and] + // [49] phi from main to bool_and [phi:main->bool_and] jsr bool_and // [6] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_or() // [7] call bool_or - // [37] phi from main::@1 to bool_or [phi:main::@1->bool_or] + // [38] phi from main::@1 to bool_or [phi:main::@1->bool_or] jsr bool_or // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -1723,129 +1852,121 @@ bool_complex: { // bool_not bool_not: { .label screen = $450 - // [28] phi from bool_not to bool_not::@1 [phi:bool_not->bool_not::@1] - // [28] phi (byte) bool_not::i#2 = (byte) 0 [phi:bool_not->bool_not::@1#0] -- vbuxx=vbuc1 + // [28] phi from bool_not to bool_not::@4 [phi:bool_not->bool_not::@4] + // [28] phi (byte) bool_not::i#7 = (byte) 0 [phi:bool_not->bool_not::@4#0] -- vbuxx=vbuc1 ldx #0 - // [28] phi from bool_not::@3 to bool_not::@1 [phi:bool_not::@3->bool_not::@1] - // [28] phi (byte) bool_not::i#2 = (byte) bool_not::i#1 [phi:bool_not::@3->bool_not::@1#0] -- register_copy - // bool_not::@1 - b1: - // i&1 - // [29] (byte~) bool_not::$1 ← (byte) bool_not::i#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - // if(o3) - // [30] if((byte) bool_not::i#2<(byte) $a) goto bool_not::@4 -- vbuxx_lt_vbuc1_then_la1 - cpx #$a - bcc b4 - // bool_not::@5 - // [31] if((byte~) bool_not::$1==(byte) 0) goto bool_not::@4 -- vbuaa_eq_0_then_la1 - cmp #0 - beq b4 - // bool_not::@2 - // screen[i] = '*' - // [32] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #'*' + // [28] phi from bool_not::@1 bool_not::@5 to bool_not::@4 [phi:bool_not::@1/bool_not::@5->bool_not::@4] + // [28] phi (byte) bool_not::i#7 = (byte) bool_not::i#1 [phi:bool_not::@1/bool_not::@5->bool_not::@4#0] -- register_copy + // bool_not::@4 + b4: + // screen[i] = ' ' + // [29] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#7) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #' ' sta screen,x + // [30] phi from bool_not::@2 bool_not::@4 to bool_not::@3 [phi:bool_not::@2/bool_not::@4->bool_not::@3] + // [30] phi (byte) bool_not::i#8 = (byte) bool_not::i#1 [phi:bool_not::@2/bool_not::@4->bool_not::@3#0] -- register_copy // bool_not::@3 b3: // for( byte i : 0..20) - // [33] (byte) bool_not::i#1 ← ++ (byte) bool_not::i#2 -- vbuxx=_inc_vbuxx + // [31] (byte) bool_not::i#1 ← ++ (byte) bool_not::i#8 -- vbuxx=_inc_vbuxx inx - // [34] if((byte) bool_not::i#1!=(byte) $15) goto bool_not::@1 -- vbuxx_neq_vbuc1_then_la1 + // [32] if((byte) bool_not::i#1!=(byte) $15) goto bool_not::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$15 bne b1 // bool_not::@return // } - // [35] return + // [33] return rts - // bool_not::@4 - b4: - // screen[i] = ' ' - // [36] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #' ' + // bool_not::@1 + b1: + // i&1 + // [34] (byte~) bool_not::$6 ← (byte) bool_not::i#1 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + // if(o3) + // [35] if((byte) bool_not::i#1<(byte) $a) goto bool_not::@4 -- vbuxx_lt_vbuc1_then_la1 + cpx #$a + bcc b4 + // bool_not::@5 + // [36] if((byte~) bool_not::$6==(byte) 0) goto bool_not::@4 -- vbuaa_eq_0_then_la1 + cmp #0 + beq b4 + // bool_not::@2 + // screen[i] = '*' + // [37] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#1) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'*' sta screen,x jmp b3 } // bool_or bool_or: { .label screen = $428 - // [38] phi from bool_or to bool_or::@1 [phi:bool_or->bool_or::@1] - // [38] phi (byte) bool_or::i#2 = (byte) 0 [phi:bool_or->bool_or::@1#0] -- vbuxx=vbuc1 + // [39] phi from bool_or to bool_or::@2 [phi:bool_or->bool_or::@2] + // [39] phi (byte) bool_or::i#6 = (byte) 0 [phi:bool_or->bool_or::@2#0] -- vbuxx=vbuc1 ldx #0 - // [38] phi from bool_or::@3 to bool_or::@1 [phi:bool_or::@3->bool_or::@1] - // [38] phi (byte) bool_or::i#2 = (byte) bool_or::i#1 [phi:bool_or::@3->bool_or::@1#0] -- register_copy - // bool_or::@1 - b1: - // i&1 - // [39] (byte~) bool_or::$1 ← (byte) bool_or::i#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - // if(o3) - // [40] if((byte) bool_or::i#2<(byte) $a) goto bool_or::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$a - bcc b2 - // bool_or::@5 - // [41] if((byte~) bool_or::$1==(byte) 0) goto bool_or::@2 -- vbuaa_eq_0_then_la1 - cmp #0 - beq b2 - // bool_or::@4 - // screen[i] = ' ' - // [42] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #' ' + // [39] phi from bool_or::@1 bool_or::@5 to bool_or::@2 [phi:bool_or::@1/bool_or::@5->bool_or::@2] + // [39] phi (byte) bool_or::i#6 = (byte) bool_or::i#1 [phi:bool_or::@1/bool_or::@5->bool_or::@2#0] -- register_copy + // bool_or::@2 + b2: + // screen[i] = '*' + // [40] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#6) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'*' sta screen,x + // [41] phi from bool_or::@2 bool_or::@4 to bool_or::@3 [phi:bool_or::@2/bool_or::@4->bool_or::@3] + // [41] phi (byte) bool_or::i#8 = (byte) bool_or::i#6 [phi:bool_or::@2/bool_or::@4->bool_or::@3#0] -- register_copy // bool_or::@3 b3: // for( byte i : 0..20) - // [43] (byte) bool_or::i#1 ← ++ (byte) bool_or::i#2 -- vbuxx=_inc_vbuxx + // [42] (byte) bool_or::i#1 ← ++ (byte) bool_or::i#8 -- vbuxx=_inc_vbuxx inx - // [44] if((byte) bool_or::i#1!=(byte) $15) goto bool_or::@1 -- vbuxx_neq_vbuc1_then_la1 + // [43] if((byte) bool_or::i#1!=(byte) $15) goto bool_or::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$15 bne b1 // bool_or::@return // } - // [45] return + // [44] return rts - // bool_or::@2 - b2: - // screen[i] = '*' - // [46] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #'*' + // bool_or::@1 + b1: + // i&1 + // [45] (byte~) bool_or::$5 ← (byte) bool_or::i#1 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + // if(o3) + // [46] if((byte) bool_or::i#1<(byte) $a) goto bool_or::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #$a + bcc b2 + // bool_or::@5 + // [47] if((byte~) bool_or::$5==(byte) 0) goto bool_or::@2 -- vbuaa_eq_0_then_la1 + cmp #0 + beq b2 + // bool_or::@4 + // screen[i] = ' ' + // [48] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#1) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #' ' sta screen,x jmp b3 } // bool_and bool_and: { .label screen = $400 - // [48] phi from bool_and to bool_and::@1 [phi:bool_and->bool_and::@1] - // [48] phi (byte) bool_and::i#2 = (byte) 0 [phi:bool_and->bool_and::@1#0] -- vbuxx=vbuc1 + // [50] phi from bool_and to bool_and::@2 [phi:bool_and->bool_and::@2] + // [50] phi (byte) bool_and::i#11 = (byte) 0 [phi:bool_and->bool_and::@2#0] -- vbuxx=vbuc1 ldx #0 - // [48] phi from bool_and::@3 to bool_and::@1 [phi:bool_and::@3->bool_and::@1] - // [48] phi (byte) bool_and::i#2 = (byte) bool_and::i#1 [phi:bool_and::@3->bool_and::@1#0] -- register_copy - // bool_and::@1 - b1: - // i&1 - // [49] (byte~) bool_and::$1 ← (byte) bool_and::i#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - // if(o3) - // [50] if((byte) bool_and::i#2>=(byte) $a) goto bool_and::@4 -- vbuxx_ge_vbuc1_then_la1 - cpx #$a - bcs b4 - // bool_and::@5 - // [51] if((byte~) bool_and::$1==(byte) 0) goto bool_and::@2 -- vbuaa_eq_0_then_la1 - cmp #0 - beq b2 - // bool_and::@4 - b4: - // screen[i] = ' ' - // [52] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #' ' + // [50] phi from bool_and::@5 to bool_and::@2 [phi:bool_and::@5->bool_and::@2] + // [50] phi (byte) bool_and::i#11 = (byte) bool_and::i#1 [phi:bool_and::@5->bool_and::@2#0] -- register_copy + // bool_and::@2 + b2: + // screen[i] = '*' + // [51] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#11) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'*' sta screen,x + // [52] phi from bool_and::@2 bool_and::@4 to bool_and::@3 [phi:bool_and::@2/bool_and::@4->bool_and::@3] + // [52] phi (byte) bool_and::i#8 = (byte) bool_and::i#11 [phi:bool_and::@2/bool_and::@4->bool_and::@3#0] -- register_copy // bool_and::@3 b3: // for( byte i : 0..20) - // [53] (byte) bool_and::i#1 ← ++ (byte) bool_and::i#2 -- vbuxx=_inc_vbuxx + // [53] (byte) bool_and::i#1 ← ++ (byte) bool_and::i#8 -- vbuxx=_inc_vbuxx inx // [54] if((byte) bool_and::i#1!=(byte) $15) goto bool_and::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$15 @@ -1854,11 +1975,25 @@ bool_and: { // } // [55] return rts - // bool_and::@2 - b2: - // screen[i] = '*' - // [56] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #'*' + // bool_and::@1 + b1: + // i&1 + // [56] (byte~) bool_and::$5 ← (byte) bool_and::i#1 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + // if(o3) + // [57] if((byte) bool_and::i#1>=(byte) $a) goto bool_and::@4 -- vbuxx_ge_vbuc1_then_la1 + cpx #$a + bcs b4 + // bool_and::@5 + // [58] if((byte~) bool_and::$5==(byte) 0) goto bool_and::@2 -- vbuaa_eq_0_then_la1 + cmp #0 + beq b2 + // bool_and::@4 + b4: + // screen[i] = ' ' + // [59] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#1) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #' ' sta screen,x jmp b3 } diff --git a/src/test/ref/bool-vars.sym b/src/test/ref/bool-vars.sym index 1b35c6c86..8a9979b3b 100644 --- a/src/test/ref/bool-vars.sym +++ b/src/test/ref/bool-vars.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (void()) bool_and() -(byte~) bool_and::$1 reg byte a 11.0 +(byte~) bool_and::$5 reg byte a 101.0 (label) bool_and::@1 (label) bool_and::@2 (label) bool_and::@3 @@ -10,8 +10,9 @@ (label) bool_and::@5 (label) bool_and::@return (byte) bool_and::i -(byte) bool_and::i#1 reg byte x 16.5 -(byte) bool_and::i#2 reg byte x 11.0 +(byte) bool_and::i#1 reg byte x 117.83333333333331 +(byte) bool_and::i#11 reg byte x 61.5 +(byte) bool_and::i#8 reg byte x 213.0 (bool) bool_and::o1 (bool) bool_and::o2 (bool) bool_and::o3 @@ -40,7 +41,7 @@ (byte*) bool_complex::screen (const byte*) bool_complex::screen#0 screen = (byte*) 1144 (void()) bool_not() -(byte~) bool_not::$1 reg byte a 11.0 +(byte~) bool_not::$6 reg byte a 101.0 (label) bool_not::@1 (label) bool_not::@2 (label) bool_not::@3 @@ -48,15 +49,16 @@ (label) bool_not::@5 (label) bool_not::@return (byte) bool_not::i -(byte) bool_not::i#1 reg byte x 16.5 -(byte) bool_not::i#2 reg byte x 11.0 +(byte) bool_not::i#1 reg byte x 134.66666666666666 +(byte) bool_not::i#7 reg byte x 112.0 +(byte) bool_not::i#8 reg byte x 213.0 (bool) bool_not::o1 (bool) bool_not::o2 (bool) bool_not::o3 (byte*) bool_not::screen (const byte*) bool_not::screen#0 screen = (byte*) 1104 (void()) bool_or() -(byte~) bool_or::$1 reg byte a 11.0 +(byte~) bool_or::$5 reg byte a 101.0 (label) bool_or::@1 (label) bool_or::@2 (label) bool_or::@3 @@ -64,8 +66,9 @@ (label) bool_or::@5 (label) bool_or::@return (byte) bool_or::i -(byte) bool_or::i#1 reg byte x 16.5 -(byte) bool_or::i#2 reg byte x 11.0 +(byte) bool_or::i#1 reg byte x 134.66666666666666 +(byte) bool_or::i#6 reg byte x 112.0 +(byte) bool_or::i#8 reg byte x 213.0 (bool) bool_or::o1 (bool) bool_or::o2 (bool) bool_or::o3 @@ -78,12 +81,12 @@ (label) main::@return reg byte x [ bool_complex::i#2 bool_complex::i#1 ] -reg byte x [ bool_not::i#2 bool_not::i#1 ] -reg byte x [ bool_or::i#2 bool_or::i#1 ] -reg byte x [ bool_and::i#2 bool_and::i#1 ] +reg byte x [ bool_not::i#8 bool_not::i#7 bool_not::i#1 ] +reg byte x [ bool_or::i#8 bool_or::i#6 bool_or::i#1 ] +reg byte x [ bool_and::i#8 bool_and::i#11 bool_and::i#1 ] zp ZP_BOOL:2 [ bool_complex::o1#0 ] reg byte a [ bool_complex::$1 ] zp ZP_BOOL:3 [ bool_complex::o2#0 ] -reg byte a [ bool_not::$1 ] -reg byte a [ bool_or::$1 ] -reg byte a [ bool_and::$1 ] +reg byte a [ bool_not::$6 ] +reg byte a [ bool_or::$5 ] +reg byte a [ bool_and::$5 ] diff --git a/src/test/ref/c-types.asm b/src/test/ref/c-types.asm index bd7fa9c88..81e0fa808 100644 --- a/src/test/ref/c-types.asm +++ b/src/test/ref/c-types.asm @@ -343,14 +343,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [143] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [143] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [143] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [144] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [143] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [146] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [144] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [147] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [145] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [143] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [143] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [146] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [143] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [143] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [143] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [144] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [143] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [146] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [144] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [147] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [145] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [143] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [143] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [146] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [143] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [143] phi from memset to memset::@2 [phi:memset->memset::@2] + // [143] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [143] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [143] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [144] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [144] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [145] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [146] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -5472,24 +5504,8 @@ memset: { bne b2 // memset::@return // } - // [145] return + // [147] return rts - // memset::@2 - b2: - // *dst = c - // [146] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [147] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [143] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [143] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/c-types.sym b/src/test/ref/c-types.sym index 7ed5f0cd1..9292c020f 100644 --- a/src/test/ref/c-types.sym +++ b/src/test/ref/c-types.sym @@ -18,8 +18,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:10 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:10 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:10 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:10 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -180,6 +180,6 @@ reg byte a [ print_char::ch#16 print_char::ch#6 print_char::ch#7 ] zp ZP_WORD:6 [ print_char_cursor#144 print_char_cursor#145 print_char_cursor#94 print_char_cursor#149 print_char_cursor#26 print_char_cursor#136 print_char_cursor#156 print_char_cursor#161 print_char_cursor#162 print_char_cursor#163 print_char_cursor#1 ] reg byte x [ print_byte::b#5 print_byte::b#1 print_byte::b#2 ] zp ZP_WORD:8 [ print_str::str#5 print_str::str#7 print_str::str#0 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 print_sword::w#7 print_sword::w#0 print_sword::w#10 ] -zp ZP_WORD:10 [ memset::dst#2 memset::dst#1 print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] +zp ZP_WORD:10 [ memset::dst#4 memset::dst#1 print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] diff --git a/src/test/ref/c64dtv-gfxexplorer.asm b/src/test/ref/c64dtv-gfxexplorer.asm index 5ddb9957d..adef9796c 100644 --- a/src/test/ref/c64dtv-gfxexplorer.asm +++ b/src/test/ref/c64dtv-gfxexplorer.asm @@ -1132,10 +1132,6 @@ print_str_at: { // Render all form values from the form_fields_val array form_render_values: { ldx #0 - b1: - cpx #form_fields_cnt - bcc b2 - rts b2: jsr form_field_ptr ldy form_fields_val,x @@ -1143,7 +1139,9 @@ form_render_values: { ldy form_field_ptr.x sta (form_field_ptr.line),y inx - jmp b1 + cpx #form_fields_cnt + bcc b2 + rts } // Get the screen address of a form field // field_idx is the index of the field to get the screen address for @@ -1255,16 +1253,14 @@ apply_preset: { sta preset+1 b2: ldy #0 - // Copy preset values into the fields - b13: - cpy #form_fields_cnt - bne b14 - rts b14: lda (preset),y sta form_fields_val,y iny - jmp b13 + // Copy preset values into the fields + cpy #form_fields_cnt + bne b14 + rts } // Reads keyboard and allows the user to navigate and change the fields of the form // Returns 0 if space is not pressed, non-0 if space is pressed @@ -1922,11 +1918,6 @@ gfx_init_vic_bitmap: { jsr bitmap_clear lda #0 sta l - b1: - lda l - cmp #lines_cnt - bcc b2 - rts b2: ldy l lda lines_x,y @@ -1938,7 +1929,10 @@ gfx_init_vic_bitmap: { sta bitmap_line.y1 jsr bitmap_line inc l - jmp b1 + lda l + cmp #lines_cnt + bcc b2 + rts lines_x: .byte 0, $ff, $ff, 0, 0, $80, $ff, $80, 0, $80 lines_y: .byte 0, 0, $c7, $c7, 0, 0, $64, $c7, $64, 0 } diff --git a/src/test/ref/c64dtv-gfxexplorer.cfg b/src/test/ref/c64dtv-gfxexplorer.cfg index cc8634c73..ea9a78c47 100644 --- a/src/test/ref/c64dtv-gfxexplorer.cfg +++ b/src/test/ref/c64dtv-gfxexplorer.cfg @@ -625,22 +625,22 @@ print_str_at::@2: scope:[print_str_at] from print_str_at::@1 to:print_str_at::@1 form_render_values: scope:[form_render_values] from form_mode::@14 form_mode::@18 [328] phi() - to:form_render_values::@1 -form_render_values::@1: scope:[form_render_values] from form_render_values form_render_values::@3 - [329] (byte) form_render_values::idx#2 ← phi( form_render_values/(byte) 0 form_render_values::@3/(byte) form_render_values::idx#1 ) - [330] if((byte) form_render_values::idx#2<(const byte) form_fields_cnt#0) goto form_render_values::@2 - to:form_render_values::@return -form_render_values::@return: scope:[form_render_values] from form_render_values::@1 - [331] return - to:@return -form_render_values::@2: scope:[form_render_values] from form_render_values::@1 - [332] (byte) form_field_ptr::field_idx#0 ← (byte) form_render_values::idx#2 - [333] call form_field_ptr + to:form_render_values::@2 +form_render_values::@2: scope:[form_render_values] from form_render_values form_render_values::@1 + [329] (byte) form_render_values::idx#5 ← phi( form_render_values::@1/(byte) form_render_values::idx#1 form_render_values/(byte) 0 ) + [330] (byte) form_field_ptr::field_idx#0 ← (byte) form_render_values::idx#5 + [331] call form_field_ptr to:form_render_values::@3 form_render_values::@3: scope:[form_render_values] from form_render_values::@2 - [334] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#2)) - [335] (byte) form_render_values::idx#1 ← ++ (byte) form_render_values::idx#2 + [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) + [333] (byte) form_render_values::idx#1 ← ++ (byte) form_render_values::idx#5 to:form_render_values::@1 +form_render_values::@1: scope:[form_render_values] from form_render_values::@3 + [334] if((byte) form_render_values::idx#1<(const byte) form_fields_cnt#0) goto form_render_values::@2 + to:form_render_values::@return +form_render_values::@return: scope:[form_render_values] from form_render_values::@1 + [335] return + to:@return form_field_ptr: scope:[form_field_ptr] from form_control form_render_values::@2 [336] (byte) form_field_ptr::field_idx#2 ← phi( form_control/(byte) form_field_ptr::field_idx#1 form_render_values::@2/(byte) form_field_ptr::field_idx#0 ) [337] (byte) form_field_ptr::y#0 ← *((const byte[]) form_fields_y#0 + (byte) form_field_ptr::field_idx#2) @@ -688,18 +688,18 @@ apply_preset::@1: scope:[apply_preset] from apply_preset::@12 to:apply_preset::@2 apply_preset::@2: scope:[apply_preset] from apply_preset apply_preset::@1 apply_preset::@10 apply_preset::@11 apply_preset::@12 apply_preset::@3 apply_preset::@4 apply_preset::@5 apply_preset::@6 apply_preset::@7 apply_preset::@8 apply_preset::@9 [353] (byte*) apply_preset::preset#15 ← phi( apply_preset/(const byte[]) preset_stdchar#0 apply_preset::@11/(const byte[]) preset_sixsfred2#0 apply_preset::@1/(const byte[]) preset_8bpppixelcell#0 apply_preset::@3/(const byte[]) preset_ecmchar#0 apply_preset::@4/(const byte[]) preset_stdbm#0 apply_preset::@12/(const byte[]) preset_stdchar#0 apply_preset::@5/(const byte[]) preset_mcbm#0 apply_preset::@6/(const byte[]) preset_hi_stdchar#0 apply_preset::@7/(const byte[]) preset_hi_ecmchar#0 apply_preset::@8/(const byte[]) preset_twoplane#0 apply_preset::@9/(const byte[]) preset_chunky#0 apply_preset::@10/(const byte[]) preset_sixsfred#0 ) + to:apply_preset::@14 +apply_preset::@14: scope:[apply_preset] from apply_preset::@13 apply_preset::@2 + [354] (byte) apply_preset::i#4 ← phi( apply_preset::@13/(byte) apply_preset::i#1 apply_preset::@2/(byte) 0 ) + [355] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#4) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#4) + [356] (byte) apply_preset::i#1 ← ++ (byte) apply_preset::i#4 to:apply_preset::@13 -apply_preset::@13: scope:[apply_preset] from apply_preset::@14 apply_preset::@2 - [354] (byte) apply_preset::i#2 ← phi( apply_preset::@2/(byte) 0 apply_preset::@14/(byte) apply_preset::i#1 ) - [355] if((byte) apply_preset::i#2!=(const byte) form_fields_cnt#0) goto apply_preset::@14 +apply_preset::@13: scope:[apply_preset] from apply_preset::@14 + [357] if((byte) apply_preset::i#1!=(const byte) form_fields_cnt#0) goto apply_preset::@14 to:apply_preset::@return apply_preset::@return: scope:[apply_preset] from apply_preset::@13 - [356] return + [358] return to:@return -apply_preset::@14: scope:[apply_preset] from apply_preset::@13 - [357] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#2) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#2) - [358] (byte) apply_preset::i#1 ← ++ (byte) apply_preset::i#2 - to:apply_preset::@13 form_control: scope:[form_control] from form_mode::@5 [359] (byte) form_field_ptr::field_idx#1 ← (byte) form_field_idx#28 [360] call form_field_ptr @@ -1219,24 +1219,24 @@ gfx_init_vic_bitmap: scope:[gfx_init_vic_bitmap] from gfx_init::@6 gfx_init_vic_bitmap::@3: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap [604] phi() [605] call bitmap_clear - to:gfx_init_vic_bitmap::@1 -gfx_init_vic_bitmap::@1: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@3 gfx_init_vic_bitmap::@4 - [606] (byte) gfx_init_vic_bitmap::l#2 ← phi( gfx_init_vic_bitmap::@3/(byte) 0 gfx_init_vic_bitmap::@4/(byte) gfx_init_vic_bitmap::l#1 ) - [607] if((byte) gfx_init_vic_bitmap::l#2<(const byte) gfx_init_vic_bitmap::lines_cnt#0) goto gfx_init_vic_bitmap::@2 - to:gfx_init_vic_bitmap::@return -gfx_init_vic_bitmap::@return: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@1 - [608] return - to:@return -gfx_init_vic_bitmap::@2: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@1 - [609] (byte) bitmap_line::x0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0 + (byte) gfx_init_vic_bitmap::l#2) - [610] (byte) bitmap_line::x1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#2) - [611] (byte) bitmap_line::y0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0 + (byte) gfx_init_vic_bitmap::l#2) - [612] (byte) bitmap_line::y1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#2) - [613] call bitmap_line + to:gfx_init_vic_bitmap::@2 +gfx_init_vic_bitmap::@2: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@1 gfx_init_vic_bitmap::@3 + [606] (byte) gfx_init_vic_bitmap::l#5 ← phi( gfx_init_vic_bitmap::@1/(byte) gfx_init_vic_bitmap::l#1 gfx_init_vic_bitmap::@3/(byte) 0 ) + [607] (byte) bitmap_line::x0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0 + (byte) gfx_init_vic_bitmap::l#5) + [608] (byte) bitmap_line::x1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#5) + [609] (byte) bitmap_line::y0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0 + (byte) gfx_init_vic_bitmap::l#5) + [610] (byte) bitmap_line::y1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#5) + [611] call bitmap_line to:gfx_init_vic_bitmap::@4 gfx_init_vic_bitmap::@4: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@2 - [614] (byte) gfx_init_vic_bitmap::l#1 ← ++ (byte) gfx_init_vic_bitmap::l#2 + [612] (byte) gfx_init_vic_bitmap::l#1 ← ++ (byte) gfx_init_vic_bitmap::l#5 to:gfx_init_vic_bitmap::@1 +gfx_init_vic_bitmap::@1: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@4 + [613] if((byte) gfx_init_vic_bitmap::l#1<(const byte) gfx_init_vic_bitmap::lines_cnt#0) goto gfx_init_vic_bitmap::@2 + to:gfx_init_vic_bitmap::@return +gfx_init_vic_bitmap::@return: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@1 + [614] return + to:@return bitmap_line: scope:[bitmap_line] from gfx_init_vic_bitmap::@2 [615] if((byte) bitmap_line::x0#0<(byte) bitmap_line::x1#0) goto bitmap_line::@1 to:bitmap_line::@2 diff --git a/src/test/ref/c64dtv-gfxexplorer.log b/src/test/ref/c64dtv-gfxexplorer.log index c6eea1998..a79618917 100644 --- a/src/test/ref/c64dtv-gfxexplorer.log +++ b/src/test/ref/c64dtv-gfxexplorer.log @@ -10074,6 +10074,9 @@ Eliminating unused constant (const byte) keyboard_modifiers#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 8 in if((byte) keyboard_event_scan::row#1!=(number) 8) goto keyboard_event_scan::@8 Adding number conversion cast (unumber) 8 in if((byte) keyboard_event_scan::col#1!=(number) 8) goto keyboard_event_scan::@11 Adding number conversion cast (unumber) 0 in if((byte) bitmap_init::x#1!=(number) 0) goto bitmap_init::@1 @@ -10192,39 +10195,47 @@ Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $19 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) bitmap_init::$10 = (byte~) bitmap_init::$6 +Alias (byte) apply_preset::i#1 = (byte) apply_preset::i#2 Alias (word~) gfx_mode::$26 = (word~) gfx_mode::$24 Alias (word~) gfx_mode::$40 = (word~) gfx_mode::$38 +Alias (byte) gfx_init_vic_bitmap::l#1 = (byte) gfx_init_vic_bitmap::l#2 +Alias (byte) gfx_init_vic_bitmap::l#5 = (byte) gfx_init_vic_bitmap::l#6 Alias (dword~) form_mode::$15 = (dword~) form_mode::$12 +Alias (byte) form_render_values::idx#1 = (byte) form_render_values::idx#2 +Alias (byte) form_render_values::idx#5 = (byte) form_render_values::idx#6 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) keyboard_events_size#11 (byte) keyboard_events_size#24 Identical Phi Values (signed byte) form_cursor_count#13 (signed byte) form_cursor_count#16 Identical Phi Values (byte) keyboard_events_size#13 (byte) keyboard_events_size#24 Identical Phi Values (byte) form_field_idx#14 (byte) form_field_idx#18 +Identical Phi Values (byte) apply_preset::i#5 (const byte) apply_preset::i#0 +Identical Phi Values (byte) gfx_init_vic_bitmap::l#7 (const byte) gfx_init_vic_bitmap::l#0 +Identical Phi Values (byte) form_render_values::idx#7 (const byte) form_render_values::idx#0 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte) keyboard_events_size#45 (byte) keyboard_events_size#24 Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [47] (byte) KEY_MODIFIER_SHIFT#0 ← (const byte) KEY_MODIFIER_LSHIFT#0 | (const byte) KEY_MODIFIER_RSHIFT#0 Constant right-side identified [115] (byte~) bitmap_init::$1 ← > (const byte*) bitmap_init::bitmap#0 -Constant right-side identified [353] (byte*~) render_preset_name::$11 ← (const byte*) FORM_SCREEN#0 + (byte)(number) $28*(number) 2 -Constant right-side identified [377] (byte~) gfx_mode::$12 ← (const byte) VIC_DEN#0 | (const byte) VIC_RSEL#0 -Constant right-side identified [464] (byte) gfx_mode::vic_control2#1 ← (const byte) gfx_mode::vic_control2#0 | (const byte) VIC_MCM#0 -Constant right-side identified [606] (dword~) gfx_init_plane_8bppchunky::$0 ← (const dword) PLANE_8BPP_CHUNKY#0 / (word) $4000 -Constant right-side identified [628] (dword~) gfx_init_plane_horisontal::$0 ← (const dword) PLANE_HORISONTAL#0 / (word) $4000 -Constant right-side identified [632] (word~) gfx_init_plane_horisontal::$3 ← (const dword) PLANE_HORISONTAL#0 & (word) $3fff -Constant right-side identified [650] (dword~) gfx_init_plane_horisontal2::$0 ← (const dword) PLANE_HORISONTAL2#0 / (word) $4000 -Constant right-side identified [654] (word~) gfx_init_plane_horisontal2::$3 ← (const dword) PLANE_HORISONTAL2#0 & (word) $3fff -Constant right-side identified [669] (dword~) gfx_init_plane_vertical::$0 ← (const dword) PLANE_VERTICAL#0 / (word) $4000 -Constant right-side identified [673] (word~) gfx_init_plane_vertical::$3 ← (const dword) PLANE_VERTICAL#0 & (word) $3fff -Constant right-side identified [686] (dword~) gfx_init_plane_charset8::$0 ← (const dword) PLANE_CHARSET8#0 / (word) $4000 -Constant right-side identified [690] (word~) gfx_init_plane_charset8::$3 ← (const dword) PLANE_CHARSET8#0 & (word) $3fff -Constant right-side identified [755] (dword~) form_mode::$15 ← (const dword) DTV_COLOR_BANK_DEFAULT#0 / (word) $400 -Constant right-side identified [770] (byte~) form_mode::$22 ← (const byte) VIC_DEN#0 | (const byte) VIC_RSEL#0 -Constant right-side identified [783] (byte~) form_mode::$32 ← < (const byte*) FORM_SCREEN#0 -Constant right-side identified [785] (byte~) form_mode::$33 ← > (const byte*) FORM_SCREEN#0 -Constant right-side identified [810] (signed byte) form_cursor_count#26 ← (const signed byte) FORM_CURSOR_BLINK#0 / (signed byte) 2 -Constant right-side identified [838] (signed byte~) form_control::$3 ← (const signed byte) FORM_CURSOR_BLINK#0 / (signed byte) 2 -Constant right-side identified [858] (byte) form_field_idx#7 ← (const byte) form_fields_cnt#0 - (byte) 1 -Constant right-side identified [860] (signed byte) form_cursor_count#7 ← (const signed byte) FORM_CURSOR_BLINK#0 / (signed byte) 2 +Constant right-side identified [355] (byte*~) render_preset_name::$11 ← (const byte*) FORM_SCREEN#0 + (byte)(number) $28*(number) 2 +Constant right-side identified [379] (byte~) gfx_mode::$12 ← (const byte) VIC_DEN#0 | (const byte) VIC_RSEL#0 +Constant right-side identified [466] (byte) gfx_mode::vic_control2#1 ← (const byte) gfx_mode::vic_control2#0 | (const byte) VIC_MCM#0 +Constant right-side identified [611] (dword~) gfx_init_plane_8bppchunky::$0 ← (const dword) PLANE_8BPP_CHUNKY#0 / (word) $4000 +Constant right-side identified [633] (dword~) gfx_init_plane_horisontal::$0 ← (const dword) PLANE_HORISONTAL#0 / (word) $4000 +Constant right-side identified [637] (word~) gfx_init_plane_horisontal::$3 ← (const dword) PLANE_HORISONTAL#0 & (word) $3fff +Constant right-side identified [655] (dword~) gfx_init_plane_horisontal2::$0 ← (const dword) PLANE_HORISONTAL2#0 / (word) $4000 +Constant right-side identified [659] (word~) gfx_init_plane_horisontal2::$3 ← (const dword) PLANE_HORISONTAL2#0 & (word) $3fff +Constant right-side identified [674] (dword~) gfx_init_plane_vertical::$0 ← (const dword) PLANE_VERTICAL#0 / (word) $4000 +Constant right-side identified [678] (word~) gfx_init_plane_vertical::$3 ← (const dword) PLANE_VERTICAL#0 & (word) $3fff +Constant right-side identified [691] (dword~) gfx_init_plane_charset8::$0 ← (const dword) PLANE_CHARSET8#0 / (word) $4000 +Constant right-side identified [695] (word~) gfx_init_plane_charset8::$3 ← (const dword) PLANE_CHARSET8#0 & (word) $3fff +Constant right-side identified [760] (dword~) form_mode::$15 ← (const dword) DTV_COLOR_BANK_DEFAULT#0 / (word) $400 +Constant right-side identified [775] (byte~) form_mode::$22 ← (const byte) VIC_DEN#0 | (const byte) VIC_RSEL#0 +Constant right-side identified [788] (byte~) form_mode::$32 ← < (const byte*) FORM_SCREEN#0 +Constant right-side identified [790] (byte~) form_mode::$33 ← > (const byte*) FORM_SCREEN#0 +Constant right-side identified [815] (signed byte) form_cursor_count#26 ← (const signed byte) FORM_CURSOR_BLINK#0 / (signed byte) 2 +Constant right-side identified [846] (signed byte~) form_control::$3 ← (const signed byte) FORM_CURSOR_BLINK#0 / (signed byte) 2 +Constant right-side identified [866] (byte) form_field_idx#7 ← (const byte) form_fields_cnt#0 - (byte) 1 +Constant right-side identified [868] (signed byte) form_cursor_count#7 ← (const signed byte) FORM_CURSOR_BLINK#0 / (signed byte) 2 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) KEY_MODIFIER_SHIFT#0 = KEY_MODIFIER_LSHIFT#0|KEY_MODIFIER_RSHIFT#0 Constant (const byte) keyboard_modifiers#2 = KEY_MODIFIER_LSHIFT#0 @@ -10264,22 +10275,26 @@ Constant (const signed byte) form_control::$3 = FORM_CURSOR_BLINK#0/2 Constant (const byte) form_field_idx#7 = form_fields_cnt#0-1 Constant (const signed byte) form_cursor_count#7 = FORM_CURSOR_BLINK#0/2 Successful SSA optimization Pass2ConstantIdentification -Constant value identified (byte)gfx_init_plane_8bppchunky::$0 in [607] (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#0 ← (byte)(const dword) gfx_init_plane_8bppchunky::$0 -Constant value identified (byte)gfx_init_plane_horisontal::$0 in [629] (byte) gfx_init_plane_horisontal::gfxbCpuBank#0 ← (byte)(const dword) gfx_init_plane_horisontal::$0 -Constant value identified (byte)gfx_init_plane_horisontal2::$0 in [651] (byte) gfx_init_plane_horisontal2::gfxbCpuBank#0 ← (byte)(const dword) gfx_init_plane_horisontal2::$0 -Constant value identified (byte)gfx_init_plane_vertical::$0 in [670] (byte) gfx_init_plane_vertical::gfxbCpuBank#0 ← (byte)(const dword) gfx_init_plane_vertical::$0 -Constant value identified (byte)gfx_init_plane_charset8::$0 in [687] (byte) gfx_init_plane_charset8::gfxbCpuBank#0 ← (byte)(const dword) gfx_init_plane_charset8::$0 -Constant value identified (word)form_mode::$15 in [756] (word~) form_mode::$13 ← (word)(const dword) form_mode::$15 -Constant value identified (word)form_mode::$15 in [760] (word~) form_mode::$16 ← (word)(const dword) form_mode::$15 +Constant value identified (byte)gfx_init_plane_8bppchunky::$0 in [612] (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#0 ← (byte)(const dword) gfx_init_plane_8bppchunky::$0 +Constant value identified (byte)gfx_init_plane_horisontal::$0 in [634] (byte) gfx_init_plane_horisontal::gfxbCpuBank#0 ← (byte)(const dword) gfx_init_plane_horisontal::$0 +Constant value identified (byte)gfx_init_plane_horisontal2::$0 in [656] (byte) gfx_init_plane_horisontal2::gfxbCpuBank#0 ← (byte)(const dword) gfx_init_plane_horisontal2::$0 +Constant value identified (byte)gfx_init_plane_vertical::$0 in [675] (byte) gfx_init_plane_vertical::gfxbCpuBank#0 ← (byte)(const dword) gfx_init_plane_vertical::$0 +Constant value identified (byte)gfx_init_plane_charset8::$0 in [692] (byte) gfx_init_plane_charset8::gfxbCpuBank#0 ← (byte)(const dword) gfx_init_plane_charset8::$0 +Constant value identified (word)form_mode::$15 in [761] (word~) form_mode::$13 ← (word)(const dword) form_mode::$15 +Constant value identified (word)form_mode::$15 in [765] (word~) form_mode::$16 ← (word)(const dword) form_mode::$15 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [883] if((const byte) apply_preset::i#0!=(const byte) form_fields_cnt#0) goto apply_preset::@46 +if() condition always true - replacing block destination [885] if((const byte) gfx_init_vic_bitmap::l#0<(const byte) gfx_init_vic_bitmap::lines_cnt#0) goto gfx_init_vic_bitmap::@2 +if() condition always true - replacing block destination [887] if((const byte) form_render_values::idx#0<(const byte) form_fields_cnt#0) goto form_render_values::@2 +Successful SSA optimization Pass2ConstantIfs Simplifying constant evaluating to zero (const dword) PLANE_HORISONTAL#0&(word) $3fff in Simplifying constant evaluating to zero (const dword) PLANE_HORISONTAL2#0&(word) $3fff in Simplifying constant evaluating to zero (const dword) PLANE_CHARSET8#0&(word) $3fff in Simplifying constant evaluating to zero <(const byte*) FORM_SCREEN#0 in Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero $4000 in [633] (word~) gfx_init_plane_horisontal::$4 ← (word) $4000 + (const word) gfx_init_plane_horisontal::$3 -Simplifying expression containing zero $4000 in [655] (word~) gfx_init_plane_horisontal2::$4 ← (word) $4000 + (const word) gfx_init_plane_horisontal2::$3 -Simplifying expression containing zero $4000 in [691] (word~) gfx_init_plane_charset8::$4 ← (word) $4000 + (const word) gfx_init_plane_charset8::$3 +Simplifying expression containing zero $4000 in [638] (word~) gfx_init_plane_horisontal::$4 ← (word) $4000 + (const word) gfx_init_plane_horisontal::$3 +Simplifying expression containing zero $4000 in [660] (word~) gfx_init_plane_horisontal2::$4 ← (word) $4000 + (const word) gfx_init_plane_horisontal2::$3 +Simplifying expression containing zero $4000 in [696] (word~) gfx_init_plane_charset8::$4 ← (word) $4000 + (const word) gfx_init_plane_charset8::$3 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const word) gfx_init_plane_horisontal::$3 Eliminating unused constant (const word) gfx_init_plane_horisontal2::$3 @@ -10814,7 +10829,7 @@ Consolidated array index constant in *(form_fields_val#0+$1b) Consolidated array index constant in assignment *(gfx_init_vic_bitmap::lines_x#0+1 + gfx_init_vic_bitmap::$3) Consolidated array index constant in assignment *(gfx_init_vic_bitmap::lines_y#0+1 + gfx_init_vic_bitmap::$4) Successful SSA optimization Pass2ConstantAdditionElimination -Alias (byte) gfx_init_vic_bitmap::l#2 = (byte~) gfx_init_vic_bitmap::$3 (byte~) gfx_init_vic_bitmap::$4 +Alias (byte) gfx_init_vic_bitmap::l#5 = (byte~) gfx_init_vic_bitmap::$3 (byte~) gfx_init_vic_bitmap::$4 Successful SSA optimization Pass2AliasElimination Successful SSA optimization Pass2ConstantStringConsolidation Inlining constant with var siblings (const byte*) render_preset_name::name#1 @@ -10878,6 +10893,7 @@ Added new block during phi lifting bitmap_line_ydxi::@6(between bitmap_line_ydxi Added new block during phi lifting bitmap_line_ydxi::@7(between bitmap_line_ydxi::@5 and bitmap_line_ydxi::@2) Added new block during phi lifting bitmap_line_ydxd::@6(between bitmap_line_ydxd::@2 and bitmap_line_ydxd::@1) Added new block during phi lifting bitmap_line_ydxd::@7(between bitmap_line_ydxd::@5 and bitmap_line_ydxd::@2) +Added new block during phi lifting apply_preset::@51(between apply_preset::@45 and apply_preset::@46) Added new block during phi lifting gfx_mode::@53(between gfx_mode::@1 and gfx_mode::@2) Added new block during phi lifting gfx_mode::@54(between gfx_mode::@2 and gfx_mode::@3) Added new block during phi lifting gfx_mode::@55(between gfx_mode::@3 and gfx_mode::@4) @@ -10900,6 +10916,7 @@ Added new block during phi lifting gfx_init_screen3::@5(between gfx_init_screen3 Added new block during phi lifting gfx_init_screen3::@6(between gfx_init_screen3::@2 and gfx_init_screen3::@2) Added new block during phi lifting gfx_init_screen4::@5(between gfx_init_screen4::@3 and gfx_init_screen4::@1) Added new block during phi lifting gfx_init_screen4::@6(between gfx_init_screen4::@2 and gfx_init_screen4::@2) +Added new block during phi lifting gfx_init_vic_bitmap::@10(between gfx_init_vic_bitmap::@1 and gfx_init_vic_bitmap::@2) Added new block during phi lifting gfx_init_plane_8bppchunky::@10(between gfx_init_plane_8bppchunky::@5 and gfx_init_plane_8bppchunky::@1) Added new block during phi lifting gfx_init_plane_8bppchunky::@11(between gfx_init_plane_8bppchunky::@3 and gfx_init_plane_8bppchunky::@2) Added new block during phi lifting gfx_init_plane_8bppchunky::@12(between gfx_init_plane_8bppchunky::@2 and gfx_init_plane_8bppchunky::@3) @@ -10917,6 +10934,7 @@ Added new block during phi lifting gfx_init_plane_fill::@8(between gfx_init_plan Added new block during phi lifting form_mode::@34(between form_mode::@1 and form_mode::@1) Added new block during phi lifting form_mode::@35(between form_mode::@14 and form_mode::@3) Added new block during phi lifting form_set_screen::@3(between form_set_screen::@1 and form_set_screen::@1) +Added new block during phi lifting form_render_values::@8(between form_render_values::@1 and form_render_values::@2) Added new block during phi lifting form_control::@36(between form_control::@33 and form_control::@1) Added new block during phi lifting form_control::@37(between form_control::@11 and form_control::@22) Added new block during phi lifting form_control::@38(between form_control::@19 and form_control::@22) @@ -10994,7 +11012,9 @@ Adding NOP phi() at start of render_preset_name::@3 Adding NOP phi() at start of render_preset_name::@2 Adding NOP phi() at start of render_preset_name::@1 Adding NOP phi() at start of form_render_values +Adding NOP phi() at start of form_render_values::@1_1 Adding NOP phi() at start of apply_preset::@33 +Adding NOP phi() at start of apply_preset::@45_1 Adding NOP phi() at start of apply_preset::@11 Adding NOP phi() at start of apply_preset::@10 Adding NOP phi() at start of apply_preset::@9 @@ -11061,6 +11081,7 @@ Adding NOP phi() at start of gfx_init_plane_8bppchunky::@9 Adding NOP phi() at start of gfx_init_vic_bitmap Adding NOP phi() at start of gfx_init_vic_bitmap::@7 Adding NOP phi() at start of gfx_init_vic_bitmap::@8 +Adding NOP phi() at start of gfx_init_vic_bitmap::@1_1 Adding NOP phi() at start of bitmap_line::@30 Adding NOP phi() at start of bitmap_line::@29 Adding NOP phi() at start of bitmap_line::@32 @@ -11084,26 +11105,26 @@ Calls in [gfx_mode] to get_plane:71 get_plane:94 get_vic_screen:117 get_vic_char Calls in [keyboard_event_scan] to keyboard_matrix_read:209 keyboard_event_pressed:220 keyboard_event_pressed:226 keyboard_event_pressed:233 keyboard_event_pressed:240 Calls in [form_mode] to print_set_screen:345 print_cls:347 print_str_lines:349 print_set_screen:351 print_cls:353 print_str_lines:355 form_set_screen:357 form_render_values:359 render_preset_name:362 form_control:389 apply_preset:396 form_render_values:398 render_preset_name:401 Calls in [render_preset_name] to print_str_at:426 -Calls in [form_render_values] to form_field_ptr:455 -Calls in [form_control] to form_field_ptr:496 keyboard_event_scan:505 keyboard_event_get:507 -Calls in [print_str_lines] to print_ln:578 -Calls in [print_cls] to memset:593 -Calls in [gfx_init] to gfx_init_screen0:610 gfx_init_screen1:612 gfx_init_screen2:614 gfx_init_screen3:616 gfx_init_screen4:618 gfx_init_charset:620 gfx_init_vic_bitmap:622 gfx_init_plane_8bppchunky:624 gfx_init_plane_charset8:626 gfx_init_plane_horisontal:628 gfx_init_plane_vertical:630 gfx_init_plane_horisontal2:632 gfx_init_plane_vertical2:634 gfx_init_plane_blank:636 gfx_init_plane_full:638 -Calls in [gfx_init_plane_full] to gfx_init_plane_fill:642 -Calls in [gfx_init_plane_fill] to dtvSetCpuBankSegment1:651 dtvSetCpuBankSegment1:666 -Calls in [gfx_init_plane_blank] to gfx_init_plane_fill:678 -Calls in [gfx_init_plane_vertical2] to gfx_init_plane_fill:682 -Calls in [gfx_init_plane_horisontal2] to dtvSetCpuBankSegment1:686 dtvSetCpuBankSegment1:700 -Calls in [gfx_init_plane_vertical] to dtvSetCpuBankSegment1:708 dtvSetCpuBankSegment1:720 -Calls in [gfx_init_plane_horisontal] to dtvSetCpuBankSegment1:728 dtvSetCpuBankSegment1:744 -Calls in [gfx_init_plane_charset8] to dtvSetCpuBankSegment1:755 dtvSetCpuBankSegment1:783 -Calls in [gfx_init_plane_8bppchunky] to dtvSetCpuBankSegment1:799 dtvSetCpuBankSegment1:808 dtvSetCpuBankSegment1:821 -Calls in [gfx_init_vic_bitmap] to bitmap_init:833 bitmap_clear:835 bitmap_line:844 -Calls in [bitmap_line] to bitmap_line_ydxi:862 bitmap_line_xdyi:875 bitmap_line_ydxd:889 bitmap_line_xdyd:901 bitmap_line_ydxd:917 bitmap_line_xdyd:929 bitmap_line_ydxi:943 bitmap_line_xdyi:955 -Calls in [bitmap_line_xdyi] to bitmap_plot:967 -Calls in [bitmap_line_ydxi] to bitmap_plot:1001 -Calls in [bitmap_line_xdyd] to bitmap_plot:1028 -Calls in [bitmap_line_ydxd] to bitmap_plot:1055 +Calls in [form_render_values] to form_field_ptr:454 +Calls in [form_control] to form_field_ptr:498 keyboard_event_scan:507 keyboard_event_get:509 +Calls in [print_str_lines] to print_ln:580 +Calls in [print_cls] to memset:595 +Calls in [gfx_init] to gfx_init_screen0:612 gfx_init_screen1:614 gfx_init_screen2:616 gfx_init_screen3:618 gfx_init_screen4:620 gfx_init_charset:622 gfx_init_vic_bitmap:624 gfx_init_plane_8bppchunky:626 gfx_init_plane_charset8:628 gfx_init_plane_horisontal:630 gfx_init_plane_vertical:632 gfx_init_plane_horisontal2:634 gfx_init_plane_vertical2:636 gfx_init_plane_blank:638 gfx_init_plane_full:640 +Calls in [gfx_init_plane_full] to gfx_init_plane_fill:644 +Calls in [gfx_init_plane_fill] to dtvSetCpuBankSegment1:653 dtvSetCpuBankSegment1:668 +Calls in [gfx_init_plane_blank] to gfx_init_plane_fill:680 +Calls in [gfx_init_plane_vertical2] to gfx_init_plane_fill:684 +Calls in [gfx_init_plane_horisontal2] to dtvSetCpuBankSegment1:688 dtvSetCpuBankSegment1:702 +Calls in [gfx_init_plane_vertical] to dtvSetCpuBankSegment1:710 dtvSetCpuBankSegment1:722 +Calls in [gfx_init_plane_horisontal] to dtvSetCpuBankSegment1:730 dtvSetCpuBankSegment1:746 +Calls in [gfx_init_plane_charset8] to dtvSetCpuBankSegment1:757 dtvSetCpuBankSegment1:785 +Calls in [gfx_init_plane_8bppchunky] to dtvSetCpuBankSegment1:801 dtvSetCpuBankSegment1:810 dtvSetCpuBankSegment1:823 +Calls in [gfx_init_vic_bitmap] to bitmap_init:835 bitmap_clear:837 bitmap_line:845 +Calls in [bitmap_line] to bitmap_line_ydxi:865 bitmap_line_xdyi:878 bitmap_line_ydxd:892 bitmap_line_xdyd:904 bitmap_line_ydxd:920 bitmap_line_xdyd:932 bitmap_line_ydxi:946 bitmap_line_xdyi:958 +Calls in [bitmap_line_xdyi] to bitmap_plot:970 +Calls in [bitmap_line_ydxi] to bitmap_plot:1004 +Calls in [bitmap_line_xdyd] to bitmap_plot:1031 +Calls in [bitmap_line_ydxd] to bitmap_plot:1058 Created 192 initial phi equivalence classes Coalesced [28] form_cursor_count#61 ← form_cursor_count#16 @@ -11181,227 +11202,227 @@ Coalesced [410] form_mode::i#3 ← form_mode::i#1 Coalesced [440] print_str_at::str#5 ← print_str_at::str#1 Coalesced [447] print_str_at::str#6 ← print_str_at::str#0 Coalesced [448] print_str_at::at#5 ← print_str_at::at#0 -Coalesced [454] form_field_ptr::field_idx#4 ← form_field_ptr::field_idx#0 -Coalesced [458] form_render_values::idx#5 ← form_render_values::idx#1 -Coalesced [482] apply_preset::i#4 ← apply_preset::i#1 -Coalesced [495] form_field_ptr::field_idx#3 ← form_field_ptr::field_idx#1 -Coalesced (already) [504] keyboard_events_size#149 ← keyboard_events_size#47 -Coalesced [519] form_field_idx#74 ← form_field_idx#31 -Coalesced [522] form_field_idx#71 ← form_field_idx#6 -Coalesced [526] form_field_idx#72 ← form_field_idx#5 -Coalesced [534] form_cursor_count#67 ← form_cursor_count#15 -Coalesced (already) [535] form_field_idx#75 ← form_field_idx#28 -Coalesced (already) [540] form_cursor_count#66 ← form_cursor_count#15 -Coalesced (already) [541] form_field_idx#73 ← form_field_idx#28 -Coalesced (already) [542] form_cursor_count#68 ← form_cursor_count#15 -Coalesced (already) [543] form_field_idx#76 ← form_field_idx#28 -Coalesced [546] form_cursor_count#65 ← form_cursor_count#5 -Coalesced [557] form_set_screen::line#3 ← form_set_screen::line#1 -Coalesced [558] form_set_screen::y#3 ← form_set_screen::y#1 -Coalesced [560] print_str_lines::str#10 ← print_str_lines::str#5 -Not coalescing [561] print_char_cursor#73 ← print_screen#1 -Coalesced [562] print_line_cursor#73 ← print_screen#1 -Coalesced [566] print_str_lines::str#12 ← print_str_lines::str#3 -Coalesced [567] print_char_cursor#75 ← print_char_cursor#22 -Coalesced [574] print_char_cursor#78 ← print_char_cursor#1 -Coalesced [579] print_str_lines::str#11 ← print_str_lines::str#0 -Not coalescing [580] print_char_cursor#74 ← print_line_cursor#22 -Coalesced [581] print_line_cursor#74 ← print_line_cursor#22 -Coalesced (already) [582] print_str_lines::str#13 ← print_str_lines::str#0 -Coalesced [583] print_char_cursor#76 ← print_char_cursor#38 -Coalesced (already) [584] print_char_cursor#77 ← print_char_cursor#20 -Coalesced [585] print_line_cursor#75 ← print_line_cursor#2 -Coalesced (already) [591] print_line_cursor#76 ← print_line_cursor#22 -Coalesced [605] memset::dst#5 ← memset::dst#1 -Coalesced [607] print_screen#1 ← print_set_screen::screen#2 -Coalesced [650] dtvSetCpuBankSegment1::cpuBankIdx#15 ← dtvSetCpuBankSegment1::cpuBankIdx#11 -Coalesced [657] gfx_init_plane_fill::gfxb#7 ← gfx_init_plane_fill::gfxb#3 -Coalesced [669] gfx_init_plane_fill::gfxb#5 ← gfx_init_plane_fill::gfxb#1 -Coalesced [670] gfx_init_plane_fill::by#5 ← gfx_init_plane_fill::by#1 -Coalesced (already) [671] gfx_init_plane_fill::gfxb#8 ← gfx_init_plane_fill::gfxb#1 -Coalesced [672] gfx_init_plane_fill::bx#3 ← gfx_init_plane_fill::bx#1 -Coalesced [689] gfx_init_plane_horisontal2::gfxa#6 ← gfx_init_plane_horisontal2::gfxa#3 -Coalesced [703] gfx_init_plane_horisontal2::ay#5 ← gfx_init_plane_horisontal2::ay#1 -Coalesced [704] gfx_init_plane_horisontal2::gfxa#5 ← gfx_init_plane_horisontal2::gfxa#1 -Coalesced (already) [705] gfx_init_plane_horisontal2::gfxa#7 ← gfx_init_plane_horisontal2::gfxa#1 -Coalesced [706] gfx_init_plane_horisontal2::ax#3 ← gfx_init_plane_horisontal2::ax#1 -Coalesced [711] gfx_init_plane_vertical::gfxb#6 ← gfx_init_plane_vertical::gfxb#3 -Coalesced [723] gfx_init_plane_vertical::gfxb#5 ← gfx_init_plane_vertical::gfxb#1 -Coalesced [724] gfx_init_plane_vertical::by#5 ← gfx_init_plane_vertical::by#1 -Coalesced (already) [725] gfx_init_plane_vertical::gfxb#7 ← gfx_init_plane_vertical::gfxb#1 -Coalesced [726] gfx_init_plane_vertical::bx#3 ← gfx_init_plane_vertical::bx#1 -Coalesced [731] gfx_init_plane_horisontal::gfxa#10 ← gfx_init_plane_horisontal::gfxa#6 -Coalesced [737] gfx_init_plane_horisontal::gfxa#13 ← gfx_init_plane_horisontal::gfxa#2 -Coalesced [747] gfx_init_plane_horisontal::ay#8 ← gfx_init_plane_horisontal::ay#1 -Coalesced [748] gfx_init_plane_horisontal::gfxa#9 ← gfx_init_plane_horisontal::gfxa#7 -Coalesced (already) [749] gfx_init_plane_horisontal::gfxa#11 ← gfx_init_plane_horisontal::gfxa#7 -Coalesced [750] gfx_init_plane_horisontal::ax#6 ← gfx_init_plane_horisontal::ax#1 -Coalesced [753] gfx_init_plane_horisontal::gfxa#12 ← gfx_init_plane_horisontal::gfxa#1 -Coalesced [758] gfx_init_plane_charset8::chargen#10 ← gfx_init_plane_charset8::chargen#3 -Coalesced [759] gfx_init_plane_charset8::gfxa#10 ← gfx_init_plane_charset8::gfxa#6 -Coalesced [760] gfx_init_plane_charset8::col#10 ← gfx_init_plane_charset8::col#6 -Coalesced [764] gfx_init_plane_charset8::bits#5 ← gfx_init_plane_charset8::bits#0 -Coalesced [765] gfx_init_plane_charset8::gfxa#12 ← gfx_init_plane_charset8::gfxa#5 -Coalesced [766] gfx_init_plane_charset8::col#12 ← gfx_init_plane_charset8::col#5 -Not coalescing [770] gfx_init_plane_charset8::c#3 ← gfx_init_plane_charset8::col#2 -Coalesced [786] gfx_init_plane_charset8::chargen#9 ← gfx_init_plane_charset8::chargen#1 -Coalesced [787] gfx_init_plane_charset8::gfxa#9 ← gfx_init_plane_charset8::gfxa#1 -Coalesced [788] gfx_init_plane_charset8::col#9 ← gfx_init_plane_charset8::col#1 -Coalesced [789] gfx_init_plane_charset8::ch#9 ← gfx_init_plane_charset8::ch#1 -Coalesced (already) [790] gfx_init_plane_charset8::chargen#11 ← gfx_init_plane_charset8::chargen#1 -Coalesced (already) [791] gfx_init_plane_charset8::gfxa#11 ← gfx_init_plane_charset8::gfxa#1 -Coalesced (already) [792] gfx_init_plane_charset8::col#11 ← gfx_init_plane_charset8::col#1 -Coalesced [793] gfx_init_plane_charset8::cr#7 ← gfx_init_plane_charset8::cr#1 -Coalesced [794] gfx_init_plane_charset8::bits#6 ← gfx_init_plane_charset8::bits#1 -Coalesced (already) [795] gfx_init_plane_charset8::gfxa#13 ← gfx_init_plane_charset8::gfxa#1 -Coalesced (already) [796] gfx_init_plane_charset8::col#13 ← gfx_init_plane_charset8::col#1 -Coalesced [797] gfx_init_plane_charset8::cp#5 ← gfx_init_plane_charset8::cp#1 -Coalesced [802] gfx_init_plane_8bppchunky::gfxb#8 ← gfx_init_plane_8bppchunky::gfxb#5 -Coalesced [803] gfx_init_plane_8bppchunky::gfxbCpuBank#11 ← gfx_init_plane_8bppchunky::gfxbCpuBank#7 -Coalesced [807] dtvSetCpuBankSegment1::cpuBankIdx#14 ← dtvSetCpuBankSegment1::cpuBankIdx#1 -Coalesced [810] gfx_init_plane_8bppchunky::gfxbCpuBank#14 ← gfx_init_plane_8bppchunky::gfxbCpuBank#2 -Coalesced [824] gfx_init_plane_8bppchunky::gfxb#7 ← gfx_init_plane_8bppchunky::gfxb#1 -Coalesced [825] gfx_init_plane_8bppchunky::y#8 ← gfx_init_plane_8bppchunky::y#1 -Coalesced [826] gfx_init_plane_8bppchunky::gfxbCpuBank#10 ← gfx_init_plane_8bppchunky::gfxbCpuBank#8 -Coalesced (already) [827] gfx_init_plane_8bppchunky::gfxb#9 ← gfx_init_plane_8bppchunky::gfxb#1 -Coalesced [828] gfx_init_plane_8bppchunky::x#6 ← gfx_init_plane_8bppchunky::x#1 -Coalesced (already) [829] gfx_init_plane_8bppchunky::gfxbCpuBank#12 ← gfx_init_plane_8bppchunky::gfxbCpuBank#8 -Coalesced [830] gfx_init_plane_8bppchunky::gfxb#10 ← gfx_init_plane_8bppchunky::gfxb#3 -Coalesced (already) [831] gfx_init_plane_8bppchunky::gfxbCpuBank#13 ← gfx_init_plane_8bppchunky::gfxbCpuBank#4 -Coalesced [846] gfx_init_vic_bitmap::l#5 ← gfx_init_vic_bitmap::l#1 -Coalesced [857] bitmap_line_ydxi::xd#8 ← bitmap_line_ydxi::xd#0 -Coalesced [858] bitmap_line_ydxi::x#9 ← bitmap_line_ydxi::x#0 -Coalesced [859] bitmap_line_ydxi::y#9 ← bitmap_line_ydxi::y#0 -Coalesced [860] bitmap_line_ydxi::yd#8 ← bitmap_line_ydxi::yd#0 -Coalesced [861] bitmap_line_ydxi::y1#8 ← bitmap_line_ydxi::y1#0 -Coalesced [870] bitmap_line_xdyi::yd#7 ← bitmap_line_xdyi::yd#0 -Coalesced [871] bitmap_line_xdyi::x#8 ← bitmap_line_xdyi::x#0 -Coalesced [872] bitmap_line_xdyi::y#8 ← bitmap_line_xdyi::y#0 -Coalesced [873] bitmap_line_xdyi::xd#7 ← bitmap_line_xdyi::xd#0 -Coalesced [874] bitmap_line_xdyi::x1#7 ← bitmap_line_xdyi::x1#0 -Coalesced [884] bitmap_line_ydxd::xd#7 ← bitmap_line_ydxd::xd#0 -Coalesced [885] bitmap_line_ydxd::x#8 ← bitmap_line_ydxd::x#0 -Coalesced [886] bitmap_line_ydxd::y#9 ← bitmap_line_ydxd::y#0 -Coalesced [887] bitmap_line_ydxd::yd#7 ← bitmap_line_ydxd::yd#0 -Coalesced [888] bitmap_line_ydxd::y1#7 ← bitmap_line_ydxd::y1#0 -Coalesced [896] bitmap_line_xdyd::yd#7 ← bitmap_line_xdyd::yd#0 -Coalesced [897] bitmap_line_xdyd::x#8 ← bitmap_line_xdyd::x#0 -Coalesced [898] bitmap_line_xdyd::y#8 ← bitmap_line_xdyd::y#0 -Coalesced [899] bitmap_line_xdyd::xd#7 ← bitmap_line_xdyd::xd#0 -Coalesced [900] bitmap_line_xdyd::x1#7 ← bitmap_line_xdyd::x1#0 -Coalesced [912] bitmap_line_ydxd::xd#8 ← bitmap_line_ydxd::xd#1 -Coalesced [913] bitmap_line_ydxd::x#9 ← bitmap_line_ydxd::x#1 -Coalesced [914] bitmap_line_ydxd::y#10 ← bitmap_line_ydxd::y#1 -Coalesced [915] bitmap_line_ydxd::yd#8 ← bitmap_line_ydxd::yd#1 -Coalesced [916] bitmap_line_ydxd::y1#8 ← bitmap_line_ydxd::y1#1 -Coalesced [924] bitmap_line_xdyd::yd#8 ← bitmap_line_xdyd::yd#1 -Coalesced [925] bitmap_line_xdyd::x#9 ← bitmap_line_xdyd::x#1 -Coalesced [926] bitmap_line_xdyd::y#9 ← bitmap_line_xdyd::y#1 -Coalesced [927] bitmap_line_xdyd::xd#8 ← bitmap_line_xdyd::xd#1 -Coalesced [928] bitmap_line_xdyd::x1#8 ← bitmap_line_xdyd::x1#1 -Coalesced [938] bitmap_line_ydxi::xd#7 ← bitmap_line_ydxi::xd#1 -Coalesced [939] bitmap_line_ydxi::x#8 ← bitmap_line_ydxi::x#1 -Coalesced [940] bitmap_line_ydxi::y#8 ← bitmap_line_ydxi::y#1 -Coalesced [941] bitmap_line_ydxi::yd#7 ← bitmap_line_ydxi::yd#1 -Coalesced [942] bitmap_line_ydxi::y1#7 ← bitmap_line_ydxi::y1#1 -Coalesced [950] bitmap_line_xdyi::yd#8 ← bitmap_line_xdyi::yd#1 -Coalesced [951] bitmap_line_xdyi::x#9 ← bitmap_line_xdyi::x#1 -Coalesced [952] bitmap_line_xdyi::y#9 ← bitmap_line_xdyi::y#1 -Coalesced [953] bitmap_line_xdyi::xd#8 ← bitmap_line_xdyi::xd#1 -Coalesced [954] bitmap_line_xdyi::x1#8 ← bitmap_line_xdyi::x1#1 -Coalesced [959] bitmap_line_xdyi::x#10 ← bitmap_line_xdyi::x#6 -Coalesced [960] bitmap_line_xdyi::y#10 ← bitmap_line_xdyi::y#5 -Coalesced [961] bitmap_line_xdyi::e#7 ← bitmap_line_xdyi::e#0 -Coalesced [965] bitmap_plot::x#6 ← bitmap_plot::x#0 -Coalesced [966] bitmap_plot::y#6 ← bitmap_plot::y#0 -Coalesced [973] bitmap_line_xdyi::y#12 ← bitmap_line_xdyi::y#2 -Coalesced [974] bitmap_line_xdyi::e#9 ← bitmap_line_xdyi::e#2 -Coalesced [979] bitmap_line_xdyi::x#11 ← bitmap_line_xdyi::x#2 -Coalesced [980] bitmap_line_xdyi::y#11 ← bitmap_line_xdyi::y#6 -Coalesced [981] bitmap_line_xdyi::e#8 ← bitmap_line_xdyi::e#6 -Coalesced (already) [982] bitmap_line_xdyi::y#13 ← bitmap_line_xdyi::y#3 -Coalesced [983] bitmap_line_xdyi::e#10 ← bitmap_line_xdyi::e#1 -Coalesced [993] bitmap_line_ydxi::x#10 ← bitmap_line_ydxi::x#5 -Coalesced [994] bitmap_line_ydxi::y#10 ← bitmap_line_ydxi::y#6 -Coalesced [995] bitmap_line_ydxi::e#7 ← bitmap_line_ydxi::e#0 -Coalesced [999] bitmap_plot::x#8 ← bitmap_plot::x#2 -Coalesced [1000] bitmap_plot::y#8 ← bitmap_plot::y#2 -Coalesced [1007] bitmap_line_ydxi::x#12 ← bitmap_line_ydxi::x#2 -Coalesced [1008] bitmap_line_ydxi::e#9 ← bitmap_line_ydxi::e#2 -Coalesced [1013] bitmap_line_ydxi::x#11 ← bitmap_line_ydxi::x#6 -Coalesced [1014] bitmap_line_ydxi::y#11 ← bitmap_line_ydxi::y#2 -Coalesced [1015] bitmap_line_ydxi::e#8 ← bitmap_line_ydxi::e#6 -Coalesced (already) [1016] bitmap_line_ydxi::x#13 ← bitmap_line_ydxi::x#3 -Coalesced [1017] bitmap_line_ydxi::e#10 ← bitmap_line_ydxi::e#1 -Coalesced [1020] bitmap_line_xdyd::x#10 ← bitmap_line_xdyd::x#6 -Coalesced [1021] bitmap_line_xdyd::y#10 ← bitmap_line_xdyd::y#5 -Coalesced [1022] bitmap_line_xdyd::e#7 ← bitmap_line_xdyd::e#0 -Coalesced [1026] bitmap_plot::x#5 ← bitmap_plot::x#1 -Coalesced [1027] bitmap_plot::y#5 ← bitmap_plot::y#1 -Coalesced [1034] bitmap_line_xdyd::y#12 ← bitmap_line_xdyd::y#2 -Coalesced [1035] bitmap_line_xdyd::e#9 ← bitmap_line_xdyd::e#2 -Coalesced [1040] bitmap_line_xdyd::x#11 ← bitmap_line_xdyd::x#2 -Coalesced [1041] bitmap_line_xdyd::y#11 ← bitmap_line_xdyd::y#6 -Coalesced [1042] bitmap_line_xdyd::e#8 ← bitmap_line_xdyd::e#6 -Coalesced (already) [1043] bitmap_line_xdyd::y#13 ← bitmap_line_xdyd::y#3 -Coalesced [1044] bitmap_line_xdyd::e#10 ← bitmap_line_xdyd::e#1 -Coalesced [1047] bitmap_line_ydxd::x#10 ← bitmap_line_ydxd::x#5 -Coalesced [1048] bitmap_line_ydxd::y#11 ← bitmap_line_ydxd::y#7 -Coalesced [1049] bitmap_line_ydxd::e#7 ← bitmap_line_ydxd::e#0 -Coalesced [1053] bitmap_plot::x#7 ← bitmap_plot::x#3 -Coalesced [1054] bitmap_plot::y#7 ← bitmap_plot::y#3 -Coalesced [1061] bitmap_line_ydxd::x#12 ← bitmap_line_ydxd::x#2 -Coalesced [1062] bitmap_line_ydxd::e#9 ← bitmap_line_ydxd::e#2 -Coalesced [1067] bitmap_line_ydxd::x#11 ← bitmap_line_ydxd::x#6 -Coalesced [1068] bitmap_line_ydxd::y#12 ← bitmap_line_ydxd::y#3 -Coalesced [1069] bitmap_line_ydxd::e#8 ← bitmap_line_ydxd::e#6 -Coalesced (already) [1070] bitmap_line_ydxd::x#13 ← bitmap_line_ydxd::x#3 -Coalesced [1071] bitmap_line_ydxd::e#10 ← bitmap_line_ydxd::e#1 -Coalesced [1075] bitmap_clear::bitmap#7 ← bitmap_clear::bitmap#3 -Coalesced [1084] bitmap_clear::bitmap#6 ← bitmap_clear::bitmap#1 -Coalesced [1085] bitmap_clear::y#5 ← bitmap_clear::y#1 -Coalesced (already) [1086] bitmap_clear::bitmap#8 ← bitmap_clear::bitmap#1 -Coalesced [1087] bitmap_clear::x#3 ← bitmap_clear::x#1 -Coalesced [1110] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 -Coalesced [1115] bitmap_init::y#5 ← bitmap_init::y#1 -Coalesced [1116] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 -Coalesced (already) [1117] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 -Coalesced [1118] bitmap_init::x#5 ← bitmap_init::x#1 -Coalesced [1119] bitmap_init::bits#5 ← bitmap_init::bits#4 -Coalesced [1120] bitmap_init::bits#6 ← bitmap_init::bits#1 -Coalesced [1123] gfx_init_charset::chargen#6 ← gfx_init_charset::chargen#3 -Coalesced [1124] gfx_init_charset::charset#6 ← gfx_init_charset::charset#3 -Coalesced [1135] gfx_init_charset::chargen#5 ← gfx_init_charset::chargen#1 -Coalesced [1136] gfx_init_charset::charset#5 ← gfx_init_charset::charset#1 -Coalesced [1137] gfx_init_charset::c#5 ← gfx_init_charset::c#1 -Coalesced (already) [1138] gfx_init_charset::chargen#7 ← gfx_init_charset::chargen#1 -Coalesced (already) [1139] gfx_init_charset::charset#7 ← gfx_init_charset::charset#1 -Coalesced [1140] gfx_init_charset::l#3 ← gfx_init_charset::l#1 -Coalesced [1143] gfx_init_screen4::ch#6 ← gfx_init_screen4::ch#3 -Coalesced [1152] gfx_init_screen4::ch#5 ← gfx_init_screen4::ch#1 -Coalesced [1153] gfx_init_screen4::cy#5 ← gfx_init_screen4::cy#1 -Coalesced (already) [1154] gfx_init_screen4::ch#7 ← gfx_init_screen4::ch#1 -Coalesced [1155] gfx_init_screen4::cx#3 ← gfx_init_screen4::cx#1 -Coalesced [1158] gfx_init_screen3::ch#6 ← gfx_init_screen3::ch#3 -Coalesced [1171] gfx_init_screen3::cy#5 ← gfx_init_screen3::cy#1 -Coalesced [1172] gfx_init_screen3::ch#5 ← gfx_init_screen3::ch#1 -Coalesced [1173] gfx_init_screen3::cx#3 ← gfx_init_screen3::cx#1 -Coalesced (already) [1174] gfx_init_screen3::ch#7 ← gfx_init_screen3::ch#1 -Coalesced [1177] gfx_init_screen2::ch#6 ← gfx_init_screen2::ch#3 -Coalesced [1191] gfx_init_screen2::cy#5 ← gfx_init_screen2::cy#1 -Coalesced [1192] gfx_init_screen2::ch#5 ← gfx_init_screen2::ch#1 -Coalesced [1193] gfx_init_screen2::cx#3 ← gfx_init_screen2::cx#1 -Coalesced (already) [1194] gfx_init_screen2::ch#7 ← gfx_init_screen2::ch#1 -Coalesced [1197] gfx_init_screen1::ch#6 ← gfx_init_screen1::ch#3 -Coalesced [1208] gfx_init_screen1::cy#5 ← gfx_init_screen1::cy#1 -Coalesced [1209] gfx_init_screen1::ch#5 ← gfx_init_screen1::ch#1 -Coalesced [1210] gfx_init_screen1::cx#3 ← gfx_init_screen1::cx#1 -Coalesced (already) [1211] gfx_init_screen1::ch#7 ← gfx_init_screen1::ch#1 -Coalesced [1214] gfx_init_screen0::ch#6 ← gfx_init_screen0::ch#3 -Coalesced [1227] gfx_init_screen0::cy#5 ← gfx_init_screen0::cy#1 -Coalesced [1228] gfx_init_screen0::ch#5 ← gfx_init_screen0::ch#1 -Coalesced [1229] gfx_init_screen0::cx#3 ← gfx_init_screen0::cx#1 -Coalesced (already) [1230] gfx_init_screen0::ch#7 ← gfx_init_screen0::ch#1 +Coalesced [453] form_field_ptr::field_idx#4 ← form_field_ptr::field_idx#0 +Coalesced [459] form_render_values::idx#8 ← form_render_values::idx#1 +Coalesced [484] apply_preset::i#6 ← apply_preset::i#1 +Coalesced [497] form_field_ptr::field_idx#3 ← form_field_ptr::field_idx#1 +Coalesced (already) [506] keyboard_events_size#149 ← keyboard_events_size#47 +Coalesced [521] form_field_idx#74 ← form_field_idx#31 +Coalesced [524] form_field_idx#71 ← form_field_idx#6 +Coalesced [528] form_field_idx#72 ← form_field_idx#5 +Coalesced [536] form_cursor_count#67 ← form_cursor_count#15 +Coalesced (already) [537] form_field_idx#75 ← form_field_idx#28 +Coalesced (already) [542] form_cursor_count#66 ← form_cursor_count#15 +Coalesced (already) [543] form_field_idx#73 ← form_field_idx#28 +Coalesced (already) [544] form_cursor_count#68 ← form_cursor_count#15 +Coalesced (already) [545] form_field_idx#76 ← form_field_idx#28 +Coalesced [548] form_cursor_count#65 ← form_cursor_count#5 +Coalesced [559] form_set_screen::line#3 ← form_set_screen::line#1 +Coalesced [560] form_set_screen::y#3 ← form_set_screen::y#1 +Coalesced [562] print_str_lines::str#10 ← print_str_lines::str#5 +Not coalescing [563] print_char_cursor#73 ← print_screen#1 +Coalesced [564] print_line_cursor#73 ← print_screen#1 +Coalesced [568] print_str_lines::str#12 ← print_str_lines::str#3 +Coalesced [569] print_char_cursor#75 ← print_char_cursor#22 +Coalesced [576] print_char_cursor#78 ← print_char_cursor#1 +Coalesced [581] print_str_lines::str#11 ← print_str_lines::str#0 +Not coalescing [582] print_char_cursor#74 ← print_line_cursor#22 +Coalesced [583] print_line_cursor#74 ← print_line_cursor#22 +Coalesced (already) [584] print_str_lines::str#13 ← print_str_lines::str#0 +Coalesced [585] print_char_cursor#76 ← print_char_cursor#38 +Coalesced (already) [586] print_char_cursor#77 ← print_char_cursor#20 +Coalesced [587] print_line_cursor#75 ← print_line_cursor#2 +Coalesced (already) [593] print_line_cursor#76 ← print_line_cursor#22 +Coalesced [607] memset::dst#5 ← memset::dst#1 +Coalesced [609] print_screen#1 ← print_set_screen::screen#2 +Coalesced [652] dtvSetCpuBankSegment1::cpuBankIdx#15 ← dtvSetCpuBankSegment1::cpuBankIdx#11 +Coalesced [659] gfx_init_plane_fill::gfxb#7 ← gfx_init_plane_fill::gfxb#3 +Coalesced [671] gfx_init_plane_fill::gfxb#5 ← gfx_init_plane_fill::gfxb#1 +Coalesced [672] gfx_init_plane_fill::by#5 ← gfx_init_plane_fill::by#1 +Coalesced (already) [673] gfx_init_plane_fill::gfxb#8 ← gfx_init_plane_fill::gfxb#1 +Coalesced [674] gfx_init_plane_fill::bx#3 ← gfx_init_plane_fill::bx#1 +Coalesced [691] gfx_init_plane_horisontal2::gfxa#6 ← gfx_init_plane_horisontal2::gfxa#3 +Coalesced [705] gfx_init_plane_horisontal2::ay#5 ← gfx_init_plane_horisontal2::ay#1 +Coalesced [706] gfx_init_plane_horisontal2::gfxa#5 ← gfx_init_plane_horisontal2::gfxa#1 +Coalesced (already) [707] gfx_init_plane_horisontal2::gfxa#7 ← gfx_init_plane_horisontal2::gfxa#1 +Coalesced [708] gfx_init_plane_horisontal2::ax#3 ← gfx_init_plane_horisontal2::ax#1 +Coalesced [713] gfx_init_plane_vertical::gfxb#6 ← gfx_init_plane_vertical::gfxb#3 +Coalesced [725] gfx_init_plane_vertical::gfxb#5 ← gfx_init_plane_vertical::gfxb#1 +Coalesced [726] gfx_init_plane_vertical::by#5 ← gfx_init_plane_vertical::by#1 +Coalesced (already) [727] gfx_init_plane_vertical::gfxb#7 ← gfx_init_plane_vertical::gfxb#1 +Coalesced [728] gfx_init_plane_vertical::bx#3 ← gfx_init_plane_vertical::bx#1 +Coalesced [733] gfx_init_plane_horisontal::gfxa#10 ← gfx_init_plane_horisontal::gfxa#6 +Coalesced [739] gfx_init_plane_horisontal::gfxa#13 ← gfx_init_plane_horisontal::gfxa#2 +Coalesced [749] gfx_init_plane_horisontal::ay#8 ← gfx_init_plane_horisontal::ay#1 +Coalesced [750] gfx_init_plane_horisontal::gfxa#9 ← gfx_init_plane_horisontal::gfxa#7 +Coalesced (already) [751] gfx_init_plane_horisontal::gfxa#11 ← gfx_init_plane_horisontal::gfxa#7 +Coalesced [752] gfx_init_plane_horisontal::ax#6 ← gfx_init_plane_horisontal::ax#1 +Coalesced [755] gfx_init_plane_horisontal::gfxa#12 ← gfx_init_plane_horisontal::gfxa#1 +Coalesced [760] gfx_init_plane_charset8::chargen#10 ← gfx_init_plane_charset8::chargen#3 +Coalesced [761] gfx_init_plane_charset8::gfxa#10 ← gfx_init_plane_charset8::gfxa#6 +Coalesced [762] gfx_init_plane_charset8::col#10 ← gfx_init_plane_charset8::col#6 +Coalesced [766] gfx_init_plane_charset8::bits#5 ← gfx_init_plane_charset8::bits#0 +Coalesced [767] gfx_init_plane_charset8::gfxa#12 ← gfx_init_plane_charset8::gfxa#5 +Coalesced [768] gfx_init_plane_charset8::col#12 ← gfx_init_plane_charset8::col#5 +Not coalescing [772] gfx_init_plane_charset8::c#3 ← gfx_init_plane_charset8::col#2 +Coalesced [788] gfx_init_plane_charset8::chargen#9 ← gfx_init_plane_charset8::chargen#1 +Coalesced [789] gfx_init_plane_charset8::gfxa#9 ← gfx_init_plane_charset8::gfxa#1 +Coalesced [790] gfx_init_plane_charset8::col#9 ← gfx_init_plane_charset8::col#1 +Coalesced [791] gfx_init_plane_charset8::ch#9 ← gfx_init_plane_charset8::ch#1 +Coalesced (already) [792] gfx_init_plane_charset8::chargen#11 ← gfx_init_plane_charset8::chargen#1 +Coalesced (already) [793] gfx_init_plane_charset8::gfxa#11 ← gfx_init_plane_charset8::gfxa#1 +Coalesced (already) [794] gfx_init_plane_charset8::col#11 ← gfx_init_plane_charset8::col#1 +Coalesced [795] gfx_init_plane_charset8::cr#7 ← gfx_init_plane_charset8::cr#1 +Coalesced [796] gfx_init_plane_charset8::bits#6 ← gfx_init_plane_charset8::bits#1 +Coalesced (already) [797] gfx_init_plane_charset8::gfxa#13 ← gfx_init_plane_charset8::gfxa#1 +Coalesced (already) [798] gfx_init_plane_charset8::col#13 ← gfx_init_plane_charset8::col#1 +Coalesced [799] gfx_init_plane_charset8::cp#5 ← gfx_init_plane_charset8::cp#1 +Coalesced [804] gfx_init_plane_8bppchunky::gfxb#8 ← gfx_init_plane_8bppchunky::gfxb#5 +Coalesced [805] gfx_init_plane_8bppchunky::gfxbCpuBank#11 ← gfx_init_plane_8bppchunky::gfxbCpuBank#7 +Coalesced [809] dtvSetCpuBankSegment1::cpuBankIdx#14 ← dtvSetCpuBankSegment1::cpuBankIdx#1 +Coalesced [812] gfx_init_plane_8bppchunky::gfxbCpuBank#14 ← gfx_init_plane_8bppchunky::gfxbCpuBank#2 +Coalesced [826] gfx_init_plane_8bppchunky::gfxb#7 ← gfx_init_plane_8bppchunky::gfxb#1 +Coalesced [827] gfx_init_plane_8bppchunky::y#8 ← gfx_init_plane_8bppchunky::y#1 +Coalesced [828] gfx_init_plane_8bppchunky::gfxbCpuBank#10 ← gfx_init_plane_8bppchunky::gfxbCpuBank#8 +Coalesced (already) [829] gfx_init_plane_8bppchunky::gfxb#9 ← gfx_init_plane_8bppchunky::gfxb#1 +Coalesced [830] gfx_init_plane_8bppchunky::x#6 ← gfx_init_plane_8bppchunky::x#1 +Coalesced (already) [831] gfx_init_plane_8bppchunky::gfxbCpuBank#12 ← gfx_init_plane_8bppchunky::gfxbCpuBank#8 +Coalesced [832] gfx_init_plane_8bppchunky::gfxb#10 ← gfx_init_plane_8bppchunky::gfxb#3 +Coalesced (already) [833] gfx_init_plane_8bppchunky::gfxbCpuBank#13 ← gfx_init_plane_8bppchunky::gfxbCpuBank#4 +Coalesced [849] gfx_init_vic_bitmap::l#8 ← gfx_init_vic_bitmap::l#1 +Coalesced [860] bitmap_line_ydxi::xd#8 ← bitmap_line_ydxi::xd#0 +Coalesced [861] bitmap_line_ydxi::x#9 ← bitmap_line_ydxi::x#0 +Coalesced [862] bitmap_line_ydxi::y#9 ← bitmap_line_ydxi::y#0 +Coalesced [863] bitmap_line_ydxi::yd#8 ← bitmap_line_ydxi::yd#0 +Coalesced [864] bitmap_line_ydxi::y1#8 ← bitmap_line_ydxi::y1#0 +Coalesced [873] bitmap_line_xdyi::yd#7 ← bitmap_line_xdyi::yd#0 +Coalesced [874] bitmap_line_xdyi::x#8 ← bitmap_line_xdyi::x#0 +Coalesced [875] bitmap_line_xdyi::y#8 ← bitmap_line_xdyi::y#0 +Coalesced [876] bitmap_line_xdyi::xd#7 ← bitmap_line_xdyi::xd#0 +Coalesced [877] bitmap_line_xdyi::x1#7 ← bitmap_line_xdyi::x1#0 +Coalesced [887] bitmap_line_ydxd::xd#7 ← bitmap_line_ydxd::xd#0 +Coalesced [888] bitmap_line_ydxd::x#8 ← bitmap_line_ydxd::x#0 +Coalesced [889] bitmap_line_ydxd::y#9 ← bitmap_line_ydxd::y#0 +Coalesced [890] bitmap_line_ydxd::yd#7 ← bitmap_line_ydxd::yd#0 +Coalesced [891] bitmap_line_ydxd::y1#7 ← bitmap_line_ydxd::y1#0 +Coalesced [899] bitmap_line_xdyd::yd#7 ← bitmap_line_xdyd::yd#0 +Coalesced [900] bitmap_line_xdyd::x#8 ← bitmap_line_xdyd::x#0 +Coalesced [901] bitmap_line_xdyd::y#8 ← bitmap_line_xdyd::y#0 +Coalesced [902] bitmap_line_xdyd::xd#7 ← bitmap_line_xdyd::xd#0 +Coalesced [903] bitmap_line_xdyd::x1#7 ← bitmap_line_xdyd::x1#0 +Coalesced [915] bitmap_line_ydxd::xd#8 ← bitmap_line_ydxd::xd#1 +Coalesced [916] bitmap_line_ydxd::x#9 ← bitmap_line_ydxd::x#1 +Coalesced [917] bitmap_line_ydxd::y#10 ← bitmap_line_ydxd::y#1 +Coalesced [918] bitmap_line_ydxd::yd#8 ← bitmap_line_ydxd::yd#1 +Coalesced [919] bitmap_line_ydxd::y1#8 ← bitmap_line_ydxd::y1#1 +Coalesced [927] bitmap_line_xdyd::yd#8 ← bitmap_line_xdyd::yd#1 +Coalesced [928] bitmap_line_xdyd::x#9 ← bitmap_line_xdyd::x#1 +Coalesced [929] bitmap_line_xdyd::y#9 ← bitmap_line_xdyd::y#1 +Coalesced [930] bitmap_line_xdyd::xd#8 ← bitmap_line_xdyd::xd#1 +Coalesced [931] bitmap_line_xdyd::x1#8 ← bitmap_line_xdyd::x1#1 +Coalesced [941] bitmap_line_ydxi::xd#7 ← bitmap_line_ydxi::xd#1 +Coalesced [942] bitmap_line_ydxi::x#8 ← bitmap_line_ydxi::x#1 +Coalesced [943] bitmap_line_ydxi::y#8 ← bitmap_line_ydxi::y#1 +Coalesced [944] bitmap_line_ydxi::yd#7 ← bitmap_line_ydxi::yd#1 +Coalesced [945] bitmap_line_ydxi::y1#7 ← bitmap_line_ydxi::y1#1 +Coalesced [953] bitmap_line_xdyi::yd#8 ← bitmap_line_xdyi::yd#1 +Coalesced [954] bitmap_line_xdyi::x#9 ← bitmap_line_xdyi::x#1 +Coalesced [955] bitmap_line_xdyi::y#9 ← bitmap_line_xdyi::y#1 +Coalesced [956] bitmap_line_xdyi::xd#8 ← bitmap_line_xdyi::xd#1 +Coalesced [957] bitmap_line_xdyi::x1#8 ← bitmap_line_xdyi::x1#1 +Coalesced [962] bitmap_line_xdyi::x#10 ← bitmap_line_xdyi::x#6 +Coalesced [963] bitmap_line_xdyi::y#10 ← bitmap_line_xdyi::y#5 +Coalesced [964] bitmap_line_xdyi::e#7 ← bitmap_line_xdyi::e#0 +Coalesced [968] bitmap_plot::x#6 ← bitmap_plot::x#0 +Coalesced [969] bitmap_plot::y#6 ← bitmap_plot::y#0 +Coalesced [976] bitmap_line_xdyi::y#12 ← bitmap_line_xdyi::y#2 +Coalesced [977] bitmap_line_xdyi::e#9 ← bitmap_line_xdyi::e#2 +Coalesced [982] bitmap_line_xdyi::x#11 ← bitmap_line_xdyi::x#2 +Coalesced [983] bitmap_line_xdyi::y#11 ← bitmap_line_xdyi::y#6 +Coalesced [984] bitmap_line_xdyi::e#8 ← bitmap_line_xdyi::e#6 +Coalesced (already) [985] bitmap_line_xdyi::y#13 ← bitmap_line_xdyi::y#3 +Coalesced [986] bitmap_line_xdyi::e#10 ← bitmap_line_xdyi::e#1 +Coalesced [996] bitmap_line_ydxi::x#10 ← bitmap_line_ydxi::x#5 +Coalesced [997] bitmap_line_ydxi::y#10 ← bitmap_line_ydxi::y#6 +Coalesced [998] bitmap_line_ydxi::e#7 ← bitmap_line_ydxi::e#0 +Coalesced [1002] bitmap_plot::x#8 ← bitmap_plot::x#2 +Coalesced [1003] bitmap_plot::y#8 ← bitmap_plot::y#2 +Coalesced [1010] bitmap_line_ydxi::x#12 ← bitmap_line_ydxi::x#2 +Coalesced [1011] bitmap_line_ydxi::e#9 ← bitmap_line_ydxi::e#2 +Coalesced [1016] bitmap_line_ydxi::x#11 ← bitmap_line_ydxi::x#6 +Coalesced [1017] bitmap_line_ydxi::y#11 ← bitmap_line_ydxi::y#2 +Coalesced [1018] bitmap_line_ydxi::e#8 ← bitmap_line_ydxi::e#6 +Coalesced (already) [1019] bitmap_line_ydxi::x#13 ← bitmap_line_ydxi::x#3 +Coalesced [1020] bitmap_line_ydxi::e#10 ← bitmap_line_ydxi::e#1 +Coalesced [1023] bitmap_line_xdyd::x#10 ← bitmap_line_xdyd::x#6 +Coalesced [1024] bitmap_line_xdyd::y#10 ← bitmap_line_xdyd::y#5 +Coalesced [1025] bitmap_line_xdyd::e#7 ← bitmap_line_xdyd::e#0 +Coalesced [1029] bitmap_plot::x#5 ← bitmap_plot::x#1 +Coalesced [1030] bitmap_plot::y#5 ← bitmap_plot::y#1 +Coalesced [1037] bitmap_line_xdyd::y#12 ← bitmap_line_xdyd::y#2 +Coalesced [1038] bitmap_line_xdyd::e#9 ← bitmap_line_xdyd::e#2 +Coalesced [1043] bitmap_line_xdyd::x#11 ← bitmap_line_xdyd::x#2 +Coalesced [1044] bitmap_line_xdyd::y#11 ← bitmap_line_xdyd::y#6 +Coalesced [1045] bitmap_line_xdyd::e#8 ← bitmap_line_xdyd::e#6 +Coalesced (already) [1046] bitmap_line_xdyd::y#13 ← bitmap_line_xdyd::y#3 +Coalesced [1047] bitmap_line_xdyd::e#10 ← bitmap_line_xdyd::e#1 +Coalesced [1050] bitmap_line_ydxd::x#10 ← bitmap_line_ydxd::x#5 +Coalesced [1051] bitmap_line_ydxd::y#11 ← bitmap_line_ydxd::y#7 +Coalesced [1052] bitmap_line_ydxd::e#7 ← bitmap_line_ydxd::e#0 +Coalesced [1056] bitmap_plot::x#7 ← bitmap_plot::x#3 +Coalesced [1057] bitmap_plot::y#7 ← bitmap_plot::y#3 +Coalesced [1064] bitmap_line_ydxd::x#12 ← bitmap_line_ydxd::x#2 +Coalesced [1065] bitmap_line_ydxd::e#9 ← bitmap_line_ydxd::e#2 +Coalesced [1070] bitmap_line_ydxd::x#11 ← bitmap_line_ydxd::x#6 +Coalesced [1071] bitmap_line_ydxd::y#12 ← bitmap_line_ydxd::y#3 +Coalesced [1072] bitmap_line_ydxd::e#8 ← bitmap_line_ydxd::e#6 +Coalesced (already) [1073] bitmap_line_ydxd::x#13 ← bitmap_line_ydxd::x#3 +Coalesced [1074] bitmap_line_ydxd::e#10 ← bitmap_line_ydxd::e#1 +Coalesced [1078] bitmap_clear::bitmap#7 ← bitmap_clear::bitmap#3 +Coalesced [1087] bitmap_clear::bitmap#6 ← bitmap_clear::bitmap#1 +Coalesced [1088] bitmap_clear::y#5 ← bitmap_clear::y#1 +Coalesced (already) [1089] bitmap_clear::bitmap#8 ← bitmap_clear::bitmap#1 +Coalesced [1090] bitmap_clear::x#3 ← bitmap_clear::x#1 +Coalesced [1113] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 +Coalesced [1118] bitmap_init::y#5 ← bitmap_init::y#1 +Coalesced [1119] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 +Coalesced (already) [1120] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 +Coalesced [1121] bitmap_init::x#5 ← bitmap_init::x#1 +Coalesced [1122] bitmap_init::bits#5 ← bitmap_init::bits#4 +Coalesced [1123] bitmap_init::bits#6 ← bitmap_init::bits#1 +Coalesced [1126] gfx_init_charset::chargen#6 ← gfx_init_charset::chargen#3 +Coalesced [1127] gfx_init_charset::charset#6 ← gfx_init_charset::charset#3 +Coalesced [1138] gfx_init_charset::chargen#5 ← gfx_init_charset::chargen#1 +Coalesced [1139] gfx_init_charset::charset#5 ← gfx_init_charset::charset#1 +Coalesced [1140] gfx_init_charset::c#5 ← gfx_init_charset::c#1 +Coalesced (already) [1141] gfx_init_charset::chargen#7 ← gfx_init_charset::chargen#1 +Coalesced (already) [1142] gfx_init_charset::charset#7 ← gfx_init_charset::charset#1 +Coalesced [1143] gfx_init_charset::l#3 ← gfx_init_charset::l#1 +Coalesced [1146] gfx_init_screen4::ch#6 ← gfx_init_screen4::ch#3 +Coalesced [1155] gfx_init_screen4::ch#5 ← gfx_init_screen4::ch#1 +Coalesced [1156] gfx_init_screen4::cy#5 ← gfx_init_screen4::cy#1 +Coalesced (already) [1157] gfx_init_screen4::ch#7 ← gfx_init_screen4::ch#1 +Coalesced [1158] gfx_init_screen4::cx#3 ← gfx_init_screen4::cx#1 +Coalesced [1161] gfx_init_screen3::ch#6 ← gfx_init_screen3::ch#3 +Coalesced [1174] gfx_init_screen3::cy#5 ← gfx_init_screen3::cy#1 +Coalesced [1175] gfx_init_screen3::ch#5 ← gfx_init_screen3::ch#1 +Coalesced [1176] gfx_init_screen3::cx#3 ← gfx_init_screen3::cx#1 +Coalesced (already) [1177] gfx_init_screen3::ch#7 ← gfx_init_screen3::ch#1 +Coalesced [1180] gfx_init_screen2::ch#6 ← gfx_init_screen2::ch#3 +Coalesced [1194] gfx_init_screen2::cy#5 ← gfx_init_screen2::cy#1 +Coalesced [1195] gfx_init_screen2::ch#5 ← gfx_init_screen2::ch#1 +Coalesced [1196] gfx_init_screen2::cx#3 ← gfx_init_screen2::cx#1 +Coalesced (already) [1197] gfx_init_screen2::ch#7 ← gfx_init_screen2::ch#1 +Coalesced [1200] gfx_init_screen1::ch#6 ← gfx_init_screen1::ch#3 +Coalesced [1211] gfx_init_screen1::cy#5 ← gfx_init_screen1::cy#1 +Coalesced [1212] gfx_init_screen1::ch#5 ← gfx_init_screen1::ch#1 +Coalesced [1213] gfx_init_screen1::cx#3 ← gfx_init_screen1::cx#1 +Coalesced (already) [1214] gfx_init_screen1::ch#7 ← gfx_init_screen1::ch#1 +Coalesced [1217] gfx_init_screen0::ch#6 ← gfx_init_screen0::ch#3 +Coalesced [1230] gfx_init_screen0::cy#5 ← gfx_init_screen0::cy#1 +Coalesced [1231] gfx_init_screen0::ch#5 ← gfx_init_screen0::ch#1 +Coalesced [1232] gfx_init_screen0::cx#3 ← gfx_init_screen0::cx#1 +Coalesced (already) [1233] gfx_init_screen0::ch#7 ← gfx_init_screen0::ch#1 Coalesced down to 120 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @17 @@ -11474,7 +11495,11 @@ Culled Empty Block (label) render_preset_name::@4 Culled Empty Block (label) render_preset_name::@3 Culled Empty Block (label) render_preset_name::@2 Culled Empty Block (label) render_preset_name::@1 +Culled Empty Block (label) form_render_values::@1_1 +Culled Empty Block (label) form_render_values::@8 Culled Empty Block (label) apply_preset::@33 +Culled Empty Block (label) apply_preset::@45_1 +Culled Empty Block (label) apply_preset::@51 Culled Empty Block (label) apply_preset::@10 Culled Empty Block (label) apply_preset::@9 Culled Empty Block (label) apply_preset::@8 @@ -11526,6 +11551,8 @@ Culled Empty Block (label) gfx_init_plane_8bppchunky::@10 Culled Empty Block (label) gfx_init_plane_8bppchunky::@11 Culled Empty Block (label) gfx_init_plane_8bppchunky::@12 Culled Empty Block (label) gfx_init_vic_bitmap::@8 +Culled Empty Block (label) gfx_init_vic_bitmap::@1_1 +Culled Empty Block (label) gfx_init_vic_bitmap::@10 Culled Empty Block (label) bitmap_line::@30 Culled Empty Block (label) bitmap_line::@29 Culled Empty Block (label) bitmap_line::@32 @@ -12429,22 +12456,22 @@ print_str_at::@2: scope:[print_str_at] from print_str_at::@1 to:print_str_at::@1 form_render_values: scope:[form_render_values] from form_mode::@14 form_mode::@18 [328] phi() - to:form_render_values::@1 -form_render_values::@1: scope:[form_render_values] from form_render_values form_render_values::@3 - [329] (byte) form_render_values::idx#2 ← phi( form_render_values/(byte) 0 form_render_values::@3/(byte) form_render_values::idx#1 ) - [330] if((byte) form_render_values::idx#2<(const byte) form_fields_cnt#0) goto form_render_values::@2 - to:form_render_values::@return -form_render_values::@return: scope:[form_render_values] from form_render_values::@1 - [331] return - to:@return -form_render_values::@2: scope:[form_render_values] from form_render_values::@1 - [332] (byte) form_field_ptr::field_idx#0 ← (byte) form_render_values::idx#2 - [333] call form_field_ptr + to:form_render_values::@2 +form_render_values::@2: scope:[form_render_values] from form_render_values form_render_values::@1 + [329] (byte) form_render_values::idx#5 ← phi( form_render_values::@1/(byte) form_render_values::idx#1 form_render_values/(byte) 0 ) + [330] (byte) form_field_ptr::field_idx#0 ← (byte) form_render_values::idx#5 + [331] call form_field_ptr to:form_render_values::@3 form_render_values::@3: scope:[form_render_values] from form_render_values::@2 - [334] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#2)) - [335] (byte) form_render_values::idx#1 ← ++ (byte) form_render_values::idx#2 + [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) + [333] (byte) form_render_values::idx#1 ← ++ (byte) form_render_values::idx#5 to:form_render_values::@1 +form_render_values::@1: scope:[form_render_values] from form_render_values::@3 + [334] if((byte) form_render_values::idx#1<(const byte) form_fields_cnt#0) goto form_render_values::@2 + to:form_render_values::@return +form_render_values::@return: scope:[form_render_values] from form_render_values::@1 + [335] return + to:@return form_field_ptr: scope:[form_field_ptr] from form_control form_render_values::@2 [336] (byte) form_field_ptr::field_idx#2 ← phi( form_control/(byte) form_field_ptr::field_idx#1 form_render_values::@2/(byte) form_field_ptr::field_idx#0 ) [337] (byte) form_field_ptr::y#0 ← *((const byte[]) form_fields_y#0 + (byte) form_field_ptr::field_idx#2) @@ -12492,18 +12519,18 @@ apply_preset::@1: scope:[apply_preset] from apply_preset::@12 to:apply_preset::@2 apply_preset::@2: scope:[apply_preset] from apply_preset apply_preset::@1 apply_preset::@10 apply_preset::@11 apply_preset::@12 apply_preset::@3 apply_preset::@4 apply_preset::@5 apply_preset::@6 apply_preset::@7 apply_preset::@8 apply_preset::@9 [353] (byte*) apply_preset::preset#15 ← phi( apply_preset/(const byte[]) preset_stdchar#0 apply_preset::@11/(const byte[]) preset_sixsfred2#0 apply_preset::@1/(const byte[]) preset_8bpppixelcell#0 apply_preset::@3/(const byte[]) preset_ecmchar#0 apply_preset::@4/(const byte[]) preset_stdbm#0 apply_preset::@12/(const byte[]) preset_stdchar#0 apply_preset::@5/(const byte[]) preset_mcbm#0 apply_preset::@6/(const byte[]) preset_hi_stdchar#0 apply_preset::@7/(const byte[]) preset_hi_ecmchar#0 apply_preset::@8/(const byte[]) preset_twoplane#0 apply_preset::@9/(const byte[]) preset_chunky#0 apply_preset::@10/(const byte[]) preset_sixsfred#0 ) + to:apply_preset::@14 +apply_preset::@14: scope:[apply_preset] from apply_preset::@13 apply_preset::@2 + [354] (byte) apply_preset::i#4 ← phi( apply_preset::@13/(byte) apply_preset::i#1 apply_preset::@2/(byte) 0 ) + [355] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#4) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#4) + [356] (byte) apply_preset::i#1 ← ++ (byte) apply_preset::i#4 to:apply_preset::@13 -apply_preset::@13: scope:[apply_preset] from apply_preset::@14 apply_preset::@2 - [354] (byte) apply_preset::i#2 ← phi( apply_preset::@2/(byte) 0 apply_preset::@14/(byte) apply_preset::i#1 ) - [355] if((byte) apply_preset::i#2!=(const byte) form_fields_cnt#0) goto apply_preset::@14 +apply_preset::@13: scope:[apply_preset] from apply_preset::@14 + [357] if((byte) apply_preset::i#1!=(const byte) form_fields_cnt#0) goto apply_preset::@14 to:apply_preset::@return apply_preset::@return: scope:[apply_preset] from apply_preset::@13 - [356] return + [358] return to:@return -apply_preset::@14: scope:[apply_preset] from apply_preset::@13 - [357] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#2) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#2) - [358] (byte) apply_preset::i#1 ← ++ (byte) apply_preset::i#2 - to:apply_preset::@13 form_control: scope:[form_control] from form_mode::@5 [359] (byte) form_field_ptr::field_idx#1 ← (byte) form_field_idx#28 [360] call form_field_ptr @@ -13023,24 +13050,24 @@ gfx_init_vic_bitmap: scope:[gfx_init_vic_bitmap] from gfx_init::@6 gfx_init_vic_bitmap::@3: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap [604] phi() [605] call bitmap_clear - to:gfx_init_vic_bitmap::@1 -gfx_init_vic_bitmap::@1: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@3 gfx_init_vic_bitmap::@4 - [606] (byte) gfx_init_vic_bitmap::l#2 ← phi( gfx_init_vic_bitmap::@3/(byte) 0 gfx_init_vic_bitmap::@4/(byte) gfx_init_vic_bitmap::l#1 ) - [607] if((byte) gfx_init_vic_bitmap::l#2<(const byte) gfx_init_vic_bitmap::lines_cnt#0) goto gfx_init_vic_bitmap::@2 - to:gfx_init_vic_bitmap::@return -gfx_init_vic_bitmap::@return: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@1 - [608] return - to:@return -gfx_init_vic_bitmap::@2: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@1 - [609] (byte) bitmap_line::x0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0 + (byte) gfx_init_vic_bitmap::l#2) - [610] (byte) bitmap_line::x1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#2) - [611] (byte) bitmap_line::y0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0 + (byte) gfx_init_vic_bitmap::l#2) - [612] (byte) bitmap_line::y1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#2) - [613] call bitmap_line + to:gfx_init_vic_bitmap::@2 +gfx_init_vic_bitmap::@2: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@1 gfx_init_vic_bitmap::@3 + [606] (byte) gfx_init_vic_bitmap::l#5 ← phi( gfx_init_vic_bitmap::@1/(byte) gfx_init_vic_bitmap::l#1 gfx_init_vic_bitmap::@3/(byte) 0 ) + [607] (byte) bitmap_line::x0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0 + (byte) gfx_init_vic_bitmap::l#5) + [608] (byte) bitmap_line::x1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#5) + [609] (byte) bitmap_line::y0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0 + (byte) gfx_init_vic_bitmap::l#5) + [610] (byte) bitmap_line::y1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#5) + [611] call bitmap_line to:gfx_init_vic_bitmap::@4 gfx_init_vic_bitmap::@4: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@2 - [614] (byte) gfx_init_vic_bitmap::l#1 ← ++ (byte) gfx_init_vic_bitmap::l#2 + [612] (byte) gfx_init_vic_bitmap::l#1 ← ++ (byte) gfx_init_vic_bitmap::l#5 to:gfx_init_vic_bitmap::@1 +gfx_init_vic_bitmap::@1: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@4 + [613] if((byte) gfx_init_vic_bitmap::l#1<(const byte) gfx_init_vic_bitmap::lines_cnt#0) goto gfx_init_vic_bitmap::@2 + to:gfx_init_vic_bitmap::@return +gfx_init_vic_bitmap::@return: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@1 + [614] return + to:@return bitmap_line: scope:[bitmap_line] from gfx_init_vic_bitmap::@2 [615] if((byte) bitmap_line::x0#0<(byte) bitmap_line::x1#0) goto bitmap_line::@1 to:bitmap_line::@2 @@ -13602,8 +13629,8 @@ VARIABLE REGISTER WEIGHTS (byte*) VIC_SCREEN4 (void()) apply_preset((byte) apply_preset::idx) (byte) apply_preset::i -(byte) apply_preset::i#1 2002.0 -(byte) apply_preset::i#2 1668.3333333333335 +(byte) apply_preset::i#1 1501.5 +(byte) apply_preset::i#4 2002.0 (byte) apply_preset::idx (byte) apply_preset::idx#0 11.18181818181818 (byte*) apply_preset::preset @@ -13904,8 +13931,8 @@ VARIABLE REGISTER WEIGHTS (void()) form_render_values() (byte*) form_render_values::field (byte) form_render_values::idx -(byte) form_render_values::idx#1 2002.0 -(byte) form_render_values::idx#2 1001.0 +(byte) form_render_values::idx#1 1501.5 +(byte) form_render_values::idx#5 1001.0 (void()) form_set_screen((byte*) form_set_screen::screen) (byte~) form_set_screen::$0 202.0 (byte~) form_set_screen::$1 202.0 @@ -14163,8 +14190,8 @@ VARIABLE REGISTER WEIGHTS (byte) gfx_init_screen4::cy#4 3.6666666666666665 (void()) gfx_init_vic_bitmap() (byte) gfx_init_vic_bitmap::l -(byte) gfx_init_vic_bitmap::l#1 22.0 -(byte) gfx_init_vic_bitmap::l#2 11.0 +(byte) gfx_init_vic_bitmap::l#1 16.5 +(byte) gfx_init_vic_bitmap::l#5 11.0 (byte) gfx_init_vic_bitmap::lines_cnt (byte[]) gfx_init_vic_bitmap::lines_x (byte[]) gfx_init_vic_bitmap::lines_y @@ -14428,10 +14455,10 @@ Initial phi equivalence classes [ render_preset_name::name#13 ] [ print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 ] [ print_str_at::at#2 print_str_at::at#0 ] -[ form_render_values::idx#2 form_render_values::idx#1 ] +[ form_render_values::idx#5 form_render_values::idx#1 ] [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] [ apply_preset::preset#15 ] -[ apply_preset::i#2 apply_preset::i#1 ] +[ apply_preset::i#4 apply_preset::i#1 ] [ form_control::return#2 ] [ form_set_screen::line#2 form_set_screen::line#1 ] [ form_set_screen::y#2 form_set_screen::y#1 ] @@ -14466,7 +14493,7 @@ Initial phi equivalence classes [ gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 ] [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] [ 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_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] +[ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 ] [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] @@ -14689,10 +14716,10 @@ Complete equivalence classes [ render_preset_name::name#13 ] [ print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 ] [ print_str_at::at#2 print_str_at::at#0 ] -[ form_render_values::idx#2 form_render_values::idx#1 ] +[ form_render_values::idx#5 form_render_values::idx#1 ] [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] [ apply_preset::preset#15 ] -[ apply_preset::i#2 apply_preset::i#1 ] +[ apply_preset::i#4 apply_preset::i#1 ] [ form_control::return#2 ] [ form_set_screen::line#2 form_set_screen::line#1 ] [ form_set_screen::y#2 form_set_screen::y#1 ] @@ -14727,7 +14754,7 @@ Complete equivalence classes [ gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 ] [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] [ 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_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] +[ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 ] [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] @@ -14949,10 +14976,10 @@ Allocated zp ZP_BYTE:34 [ render_preset_name::idx#10 render_preset_name::idx#0 r Allocated zp ZP_WORD:35 [ render_preset_name::name#13 ] Allocated zp ZP_WORD:37 [ print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 ] Allocated zp ZP_WORD:39 [ print_str_at::at#2 print_str_at::at#0 ] -Allocated zp ZP_BYTE:41 [ form_render_values::idx#2 form_render_values::idx#1 ] +Allocated zp ZP_BYTE:41 [ form_render_values::idx#5 form_render_values::idx#1 ] Allocated zp ZP_BYTE:42 [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] Allocated zp ZP_WORD:43 [ apply_preset::preset#15 ] -Allocated zp ZP_BYTE:45 [ apply_preset::i#2 apply_preset::i#1 ] +Allocated zp ZP_BYTE:45 [ apply_preset::i#4 apply_preset::i#1 ] Allocated zp ZP_BYTE:46 [ form_control::return#2 ] Allocated zp ZP_WORD:47 [ form_set_screen::line#2 form_set_screen::line#1 ] Allocated zp ZP_BYTE:49 [ form_set_screen::y#2 form_set_screen::y#1 ] @@ -14987,7 +15014,7 @@ Allocated zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchun Allocated zp ZP_WORD:91 [ gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 ] Allocated zp ZP_BYTE:93 [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] Allocated zp ZP_WORD:94 [ gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::gfxb#3 gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::gfxb#1 ] -Allocated zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] +Allocated zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 ] Allocated zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Allocated zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Allocated zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] @@ -17591,29 +17618,22 @@ print_str_at: { // Render all form values from the form_fields_val array form_render_values: { .label idx = $29 - // [329] phi from form_render_values to form_render_values::@1 [phi:form_render_values->form_render_values::@1] - b1_from_form_render_values: - // [329] phi (byte) form_render_values::idx#2 = (byte) 0 [phi:form_render_values->form_render_values::@1#0] -- vbuz1=vbuc1 + // [329] phi from form_render_values to form_render_values::@2 [phi:form_render_values->form_render_values::@2] + b2_from_form_render_values: + // [329] phi (byte) form_render_values::idx#5 = (byte) 0 [phi:form_render_values->form_render_values::@2#0] -- vbuz1=vbuc1 lda #0 sta idx - jmp b1 - // form_render_values::@1 - b1: - // [330] if((byte) form_render_values::idx#2<(const byte) form_fields_cnt#0) goto form_render_values::@2 -- vbuz1_lt_vbuc1_then_la1 - lda idx - cmp #form_fields_cnt - bcc b2 - jmp breturn - // form_render_values::@return - breturn: - // [331] return - rts + jmp b2 + // [329] phi from form_render_values::@1 to form_render_values::@2 [phi:form_render_values::@1->form_render_values::@2] + b2_from_b1: + // [329] phi (byte) form_render_values::idx#5 = (byte) form_render_values::idx#1 [phi:form_render_values::@1->form_render_values::@2#0] -- register_copy + jmp b2 // form_render_values::@2 b2: - // [332] (byte) form_field_ptr::field_idx#0 ← (byte) form_render_values::idx#2 -- vbuz1=vbuz2 + // [330] (byte) form_field_ptr::field_idx#0 ← (byte) form_render_values::idx#5 -- vbuz1=vbuz2 lda idx sta form_field_ptr.field_idx - // [333] call form_field_ptr + // [331] call form_field_ptr // [336] phi from form_render_values::@2 to form_field_ptr [phi:form_render_values::@2->form_field_ptr] form_field_ptr_from_b2: // [336] phi (byte) form_field_ptr::field_idx#2 = (byte) form_field_ptr::field_idx#0 [phi:form_render_values::@2->form_field_ptr#0] -- register_copy @@ -17621,18 +17641,26 @@ form_render_values: { jmp b3 // form_render_values::@3 b3: - // [334] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#2)) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_pbuc2_derefidx_vbuz3 + // [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_pbuc2_derefidx_vbuz3 ldx idx ldy form_fields_val,x lda print_hextab,y ldy form_field_ptr.x sta (form_field_ptr.line),y - // [335] (byte) form_render_values::idx#1 ← ++ (byte) form_render_values::idx#2 -- vbuz1=_inc_vbuz1 + // [333] (byte) form_render_values::idx#1 ← ++ (byte) form_render_values::idx#5 -- vbuz1=_inc_vbuz1 inc idx - // [329] phi from form_render_values::@3 to form_render_values::@1 [phi:form_render_values::@3->form_render_values::@1] - b1_from_b3: - // [329] phi (byte) form_render_values::idx#2 = (byte) form_render_values::idx#1 [phi:form_render_values::@3->form_render_values::@1#0] -- register_copy jmp b1 + // form_render_values::@1 + b1: + // [334] if((byte) form_render_values::idx#1<(const byte) form_fields_cnt#0) goto form_render_values::@2 -- vbuz1_lt_vbuc1_then_la1 + lda idx + cmp #form_fields_cnt + bcc b2_from_b1 + jmp breturn + // form_render_values::@return + breturn: + // [335] return + rts } // form_field_ptr // Get the screen address of a form field @@ -17841,36 +17869,37 @@ apply_preset: { jmp b2 // apply_preset::@2 b2: - // [354] phi from apply_preset::@2 to apply_preset::@13 [phi:apply_preset::@2->apply_preset::@13] - b13_from_b2: - // [354] phi (byte) apply_preset::i#2 = (byte) 0 [phi:apply_preset::@2->apply_preset::@13#0] -- vbuz1=vbuc1 + // [354] phi from apply_preset::@2 to apply_preset::@14 [phi:apply_preset::@2->apply_preset::@14] + b14_from_b2: + // [354] phi (byte) apply_preset::i#4 = (byte) 0 [phi:apply_preset::@2->apply_preset::@14#0] -- vbuz1=vbuc1 lda #0 sta i + jmp b14 + // [354] phi from apply_preset::@13 to apply_preset::@14 [phi:apply_preset::@13->apply_preset::@14] + b14_from_b13: + // [354] phi (byte) apply_preset::i#4 = (byte) apply_preset::i#1 [phi:apply_preset::@13->apply_preset::@14#0] -- register_copy + jmp b14 + // apply_preset::@14 + b14: + // [355] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#4) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#4) -- pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz1 + ldy i + lda (preset),y + sta form_fields_val,y + // [356] (byte) apply_preset::i#1 ← ++ (byte) apply_preset::i#4 -- vbuz1=_inc_vbuz1 + inc i jmp b13 // Copy preset values into the fields // apply_preset::@13 b13: - // [355] if((byte) apply_preset::i#2!=(const byte) form_fields_cnt#0) goto apply_preset::@14 -- vbuz1_neq_vbuc1_then_la1 + // [357] if((byte) apply_preset::i#1!=(const byte) form_fields_cnt#0) goto apply_preset::@14 -- vbuz1_neq_vbuc1_then_la1 lda #form_fields_cnt cmp i - bne b14 + bne b14_from_b13 jmp breturn // apply_preset::@return breturn: - // [356] return + // [358] return rts - // apply_preset::@14 - b14: - // [357] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#2) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#2) -- pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz1 - ldy i - lda (preset),y - sta form_fields_val,y - // [358] (byte) apply_preset::i#1 ← ++ (byte) apply_preset::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [354] phi from apply_preset::@14 to apply_preset::@13 [phi:apply_preset::@14->apply_preset::@13] - b13_from_b14: - // [354] phi (byte) apply_preset::i#2 = (byte) apply_preset::i#1 [phi:apply_preset::@14->apply_preset::@13#0] -- register_copy - jmp b13 } // form_control // Reads keyboard and allows the user to navigate and change the fields of the form @@ -19471,52 +19500,53 @@ gfx_init_vic_bitmap: { b3: // [605] call bitmap_clear jsr bitmap_clear - // [606] phi from gfx_init_vic_bitmap::@3 to gfx_init_vic_bitmap::@1 [phi:gfx_init_vic_bitmap::@3->gfx_init_vic_bitmap::@1] - b1_from_b3: - // [606] phi (byte) gfx_init_vic_bitmap::l#2 = (byte) 0 [phi:gfx_init_vic_bitmap::@3->gfx_init_vic_bitmap::@1#0] -- vbuz1=vbuc1 + // [606] phi from gfx_init_vic_bitmap::@3 to gfx_init_vic_bitmap::@2 [phi:gfx_init_vic_bitmap::@3->gfx_init_vic_bitmap::@2] + b2_from_b3: + // [606] phi (byte) gfx_init_vic_bitmap::l#5 = (byte) 0 [phi:gfx_init_vic_bitmap::@3->gfx_init_vic_bitmap::@2#0] -- vbuz1=vbuc1 lda #0 sta l - jmp b1 - // gfx_init_vic_bitmap::@1 - b1: - // [607] if((byte) gfx_init_vic_bitmap::l#2<(const byte) gfx_init_vic_bitmap::lines_cnt#0) goto gfx_init_vic_bitmap::@2 -- vbuz1_lt_vbuc1_then_la1 - lda l - cmp #lines_cnt - bcc b2 - jmp breturn - // gfx_init_vic_bitmap::@return - breturn: - // [608] return - rts + jmp b2 + // [606] phi from gfx_init_vic_bitmap::@1 to gfx_init_vic_bitmap::@2 [phi:gfx_init_vic_bitmap::@1->gfx_init_vic_bitmap::@2] + b2_from_b1: + // [606] phi (byte) gfx_init_vic_bitmap::l#5 = (byte) gfx_init_vic_bitmap::l#1 [phi:gfx_init_vic_bitmap::@1->gfx_init_vic_bitmap::@2#0] -- register_copy + jmp b2 // gfx_init_vic_bitmap::@2 b2: - // [609] (byte) bitmap_line::x0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0 + (byte) gfx_init_vic_bitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [607] (byte) bitmap_line::x0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0 + (byte) gfx_init_vic_bitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_x,y sta bitmap_line.x0 - // [610] (byte) bitmap_line::x1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [608] (byte) bitmap_line::x1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_x+1,y sta bitmap_line.x1 - // [611] (byte) bitmap_line::y0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0 + (byte) gfx_init_vic_bitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [609] (byte) bitmap_line::y0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0 + (byte) gfx_init_vic_bitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_y,y sta bitmap_line.y0 - // [612] (byte) bitmap_line::y1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [610] (byte) bitmap_line::y1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_y+1,y sta bitmap_line.y1 - // [613] call bitmap_line + // [611] call bitmap_line jsr bitmap_line jmp b4 // gfx_init_vic_bitmap::@4 b4: - // [614] (byte) gfx_init_vic_bitmap::l#1 ← ++ (byte) gfx_init_vic_bitmap::l#2 -- vbuz1=_inc_vbuz1 + // [612] (byte) gfx_init_vic_bitmap::l#1 ← ++ (byte) gfx_init_vic_bitmap::l#5 -- vbuz1=_inc_vbuz1 inc l - // [606] phi from gfx_init_vic_bitmap::@4 to gfx_init_vic_bitmap::@1 [phi:gfx_init_vic_bitmap::@4->gfx_init_vic_bitmap::@1] - b1_from_b4: - // [606] phi (byte) gfx_init_vic_bitmap::l#2 = (byte) gfx_init_vic_bitmap::l#1 [phi:gfx_init_vic_bitmap::@4->gfx_init_vic_bitmap::@1#0] -- register_copy jmp b1 + // gfx_init_vic_bitmap::@1 + b1: + // [613] if((byte) gfx_init_vic_bitmap::l#1<(const byte) gfx_init_vic_bitmap::lines_cnt#0) goto gfx_init_vic_bitmap::@2 -- vbuz1_lt_vbuc1_then_la1 + lda l + cmp #lines_cnt + bcc b2_from_b1 + jmp breturn + // gfx_init_vic_bitmap::@return + breturn: + // [614] return + rts lines_x: .byte 0, $ff, $ff, 0, 0, $80, $ff, $80, 0, $80 lines_y: .byte 0, 0, $c7, $c7, 0, 0, $64, $c7, $64, 0 } @@ -21152,12 +21182,12 @@ Statement [318] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name Statement [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] Statement [325] *((byte*) print_str_at::at#2) ← *((byte*) print_str_at::str#2) [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y -Statement [334] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#2)) [ form_render_values::idx#2 ] ( main:2::form_mode:13::form_render_values:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#2 ] main:2::form_mode:13::form_render_values:301 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ form_render_values::idx#2 form_render_values::idx#1 ] -Statement [338] (word) form_field_ptr::line#0 ← *((const byte[$19]) form_line_hi#0 + (byte) form_field_ptr::y#0) w= *((const byte[$19]) form_line_lo#0 + (byte) form_field_ptr::y#0) [ form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ( main:2::form_mode:13::form_render_values:267::form_field_ptr:333 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#2 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_render_values:301::form_field_ptr:333 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#2 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_control:292::form_field_ptr:360 [ form_mode::preset_current#6 keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ) always clobbers reg byte a +Statement [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) [ form_render_values::idx#5 ] ( main:2::form_mode:13::form_render_values:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 ] main:2::form_mode:13::form_render_values:301 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ form_render_values::idx#5 form_render_values::idx#1 ] +Statement [338] (word) form_field_ptr::line#0 ← *((const byte[$19]) form_line_hi#0 + (byte) form_field_ptr::y#0) w= *((const byte[$19]) form_line_lo#0 + (byte) form_field_ptr::y#0) [ form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ( main:2::form_mode:13::form_render_values:267::form_field_ptr:331 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_render_values:301::form_field_ptr:331 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_control:292::form_field_ptr:360 [ form_mode::preset_current#6 keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:42 [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] -Statement [357] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#2) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#2) [ apply_preset::preset#15 apply_preset::i#2 ] ( main:2::form_mode:13::apply_preset:299 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 apply_preset::preset#15 apply_preset::i#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:45 [ apply_preset::i#2 apply_preset::i#1 ] +Statement [355] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#4) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#4) [ apply_preset::preset#15 apply_preset::i#4 ] ( main:2::form_mode:13::apply_preset:299 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 apply_preset::preset#15 apply_preset::i#4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:45 [ apply_preset::i#4 apply_preset::i#1 ] Statement [365] if((signed byte) form_cursor_count#15<(const signed byte) FORM_CURSOR_BLINK#0/(signed byte) 2) goto form_control::@2 [ keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ) always clobbers reg byte a Statement [366] (byte~) form_control::$13 ← *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) & (byte) $7f [ keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 form_control::$13 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 form_control::$13 ] ) always clobbers reg byte a Statement [375] (byte~) form_control::$15 ← *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) & (byte) $7f [ keyboard_events_size#24 keyboard_modifiers#21 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_control::$15 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#24 keyboard_modifiers#21 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_control::$15 ] ) always clobbers reg byte a @@ -21239,28 +21269,28 @@ Statement [593] *((byte*) gfx_init_plane_8bppchunky::gfxb#4) ← (byte) gfx_init Removing always clobbered register reg byte y as potential for zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:93 [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] Statement [596] if((word) gfx_init_plane_8bppchunky::x#1!=(word) $140) goto gfx_init_plane_8bppchunky::@2 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxb#1 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#1 ] ( main:2::gfx_init:10::gfx_init_plane_8bppchunky:461 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxb#1 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#1 ] ) always clobbers reg byte a -Statement [616] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] +Statement [616] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:300 [ bitmap_line::x0#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:301 [ bitmap_line::x1#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:302 [ bitmap_line::y0#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:303 [ bitmap_line::y1#0 ] -Statement [618] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ) always clobbers reg byte a +Statement [618] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:304 [ bitmap_line::xd#2 ] -Statement [633] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ) always clobbers reg byte a -Statement [647] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ) always clobbers reg byte a -Statement [649] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ) always clobbers reg byte a +Statement [633] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ) always clobbers reg byte a +Statement [647] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ) always clobbers reg byte a +Statement [649] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:307 [ bitmap_line::xd#1 ] -Statement [663] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a -Statement [678] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a +Statement [663] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a +Statement [678] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] -Statement [684] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a -Statement [687] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a -Statement [693] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a +Statement [684] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a +Statement [687] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a +Statement [693] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:103 [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:104 [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] @@ -21282,10 +21312,10 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:119 [ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:120 [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:122 [ 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 ] -Statement [694] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a -Statement [695] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a -Statement [696] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] +Statement [694] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a +Statement [695] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a +Statement [696] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] @@ -21310,16 +21340,16 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:119 [ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:120 [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:122 [ 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 ] -Statement [697] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y -Statement [700] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a -Statement [706] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a -Statement [709] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a -Statement [715] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a -Statement [721] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a -Statement [724] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a -Statement [730] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a -Statement [736] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a -Statement [739] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a +Statement [697] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y +Statement [700] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a +Statement [706] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a +Statement [709] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a +Statement [715] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a +Statement [721] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a +Statement [724] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a +Statement [730] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a +Statement [736] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a +Statement [739] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a Statement [744] (word) bitmap_clear::bitmap#0 ← *((const byte[$100]) bitmap_plot_xhi#0) w= *((const byte[$100]) bitmap_plot_xlo#0) [ bitmap_clear::bitmap#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_clear:605 [ bitmap_clear::bitmap#0 ] ) always clobbers reg byte a Statement [745] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word) bitmap_clear::bitmap#0 [ bitmap_clear::bitmap#5 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_clear:605 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a Statement [748] *((byte*) bitmap_clear::bitmap#2) ← (byte) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_clear:605 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y @@ -21488,10 +21518,10 @@ Statement [290] if(*((const byte*) RASTER#0)!=(byte) $ff) goto form_mode::@4 [ k Statement [318] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#13 [ print_str_at::str#1 ] ( main:2::form_mode:13::render_preset_name:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#1 ] main:2::form_mode:13::render_preset_name:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#1 ] ) always clobbers reg byte a Statement [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y Statement [325] *((byte*) print_str_at::at#2) ← *((byte*) print_str_at::str#2) [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y -Statement [334] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#2)) [ form_render_values::idx#2 ] ( main:2::form_mode:13::form_render_values:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#2 ] main:2::form_mode:13::form_render_values:301 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:41 [ form_render_values::idx#2 form_render_values::idx#1 ] -Statement [338] (word) form_field_ptr::line#0 ← *((const byte[$19]) form_line_hi#0 + (byte) form_field_ptr::y#0) w= *((const byte[$19]) form_line_lo#0 + (byte) form_field_ptr::y#0) [ form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ( main:2::form_mode:13::form_render_values:267::form_field_ptr:333 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#2 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_render_values:301::form_field_ptr:333 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#2 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_control:292::form_field_ptr:360 [ form_mode::preset_current#6 keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ) always clobbers reg byte a -Statement [357] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#2) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#2) [ apply_preset::preset#15 apply_preset::i#2 ] ( main:2::form_mode:13::apply_preset:299 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 apply_preset::preset#15 apply_preset::i#2 ] ) always clobbers reg byte a +Statement [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) [ form_render_values::idx#5 ] ( main:2::form_mode:13::form_render_values:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 ] main:2::form_mode:13::form_render_values:301 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:41 [ form_render_values::idx#5 form_render_values::idx#1 ] +Statement [338] (word) form_field_ptr::line#0 ← *((const byte[$19]) form_line_hi#0 + (byte) form_field_ptr::y#0) w= *((const byte[$19]) form_line_lo#0 + (byte) form_field_ptr::y#0) [ form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ( main:2::form_mode:13::form_render_values:267::form_field_ptr:331 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_render_values:301::form_field_ptr:331 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_control:292::form_field_ptr:360 [ form_mode::preset_current#6 keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ) always clobbers reg byte a +Statement [355] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#4) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#4) [ apply_preset::preset#15 apply_preset::i#4 ] ( main:2::form_mode:13::apply_preset:299 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 apply_preset::preset#15 apply_preset::i#4 ] ) always clobbers reg byte a Statement [365] if((signed byte) form_cursor_count#15<(const signed byte) FORM_CURSOR_BLINK#0/(signed byte) 2) goto form_control::@2 [ keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ) always clobbers reg byte a Statement [366] (byte~) form_control::$13 ← *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) & (byte) $7f [ keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 form_control::$13 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 form_control::$13 ] ) always clobbers reg byte a reg byte y Statement [367] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← (byte~) form_control::$13 [ keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ) always clobbers reg byte y @@ -21544,29 +21574,29 @@ Statement [591] (word~) gfx_init_plane_8bppchunky::$8 ← (word) gfx_init_plane_ Statement [592] (byte) gfx_init_plane_8bppchunky::c#0 ← (byte)(word~) gfx_init_plane_8bppchunky::$8 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::c#0 ] ( main:2::gfx_init:10::gfx_init_plane_8bppchunky:461 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::c#0 ] ) always clobbers reg byte a Statement [593] *((byte*) gfx_init_plane_8bppchunky::gfxb#4) ← (byte) gfx_init_plane_8bppchunky::c#0 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::gfxb#4 ] ( main:2::gfx_init:10::gfx_init_plane_8bppchunky:461 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::gfxb#4 ] ) always clobbers reg byte y Statement [596] if((word) gfx_init_plane_8bppchunky::x#1!=(word) $140) goto gfx_init_plane_8bppchunky::@2 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxb#1 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#1 ] ( main:2::gfx_init:10::gfx_init_plane_8bppchunky:461 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxb#1 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#1 ] ) always clobbers reg byte a -Statement [616] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ) always clobbers reg byte a -Statement [618] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ) always clobbers reg byte a -Statement [633] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ) always clobbers reg byte a -Statement [647] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ) always clobbers reg byte a -Statement [649] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ) always clobbers reg byte a -Statement [663] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a -Statement [678] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a -Statement [684] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a -Statement [687] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a -Statement [693] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a -Statement [694] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a -Statement [695] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a -Statement [696] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y -Statement [697] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y -Statement [700] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a -Statement [706] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a -Statement [709] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a -Statement [715] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a -Statement [721] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a -Statement [724] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a -Statement [730] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a -Statement [736] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a -Statement [739] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a +Statement [616] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ) always clobbers reg byte a +Statement [618] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ) always clobbers reg byte a +Statement [633] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ) always clobbers reg byte a +Statement [647] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ) always clobbers reg byte a +Statement [649] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ) always clobbers reg byte a +Statement [663] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a +Statement [678] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a +Statement [684] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a +Statement [687] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a +Statement [693] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a +Statement [694] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a +Statement [695] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a +Statement [696] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y +Statement [697] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y +Statement [700] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a +Statement [706] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a +Statement [709] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a +Statement [715] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a +Statement [721] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a +Statement [724] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a +Statement [730] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a +Statement [736] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a +Statement [739] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a Statement [744] (word) bitmap_clear::bitmap#0 ← *((const byte[$100]) bitmap_plot_xhi#0) w= *((const byte[$100]) bitmap_plot_xlo#0) [ bitmap_clear::bitmap#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_clear:605 [ bitmap_clear::bitmap#0 ] ) always clobbers reg byte a Statement [745] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word) bitmap_clear::bitmap#0 [ bitmap_clear::bitmap#5 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_clear:605 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a Statement [748] *((byte*) bitmap_clear::bitmap#2) ← (byte) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_clear:605 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y @@ -21704,9 +21734,9 @@ Statement [290] if(*((const byte*) RASTER#0)!=(byte) $ff) goto form_mode::@4 [ k Statement [318] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#13 [ print_str_at::str#1 ] ( main:2::form_mode:13::render_preset_name:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#1 ] main:2::form_mode:13::render_preset_name:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#1 ] ) always clobbers reg byte a Statement [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y Statement [325] *((byte*) print_str_at::at#2) ← *((byte*) print_str_at::str#2) [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y -Statement [334] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#2)) [ form_render_values::idx#2 ] ( main:2::form_mode:13::form_render_values:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#2 ] main:2::form_mode:13::form_render_values:301 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#2 ] ) always clobbers reg byte a reg byte y -Statement [338] (word) form_field_ptr::line#0 ← *((const byte[$19]) form_line_hi#0 + (byte) form_field_ptr::y#0) w= *((const byte[$19]) form_line_lo#0 + (byte) form_field_ptr::y#0) [ form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ( main:2::form_mode:13::form_render_values:267::form_field_ptr:333 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#2 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_render_values:301::form_field_ptr:333 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#2 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_control:292::form_field_ptr:360 [ form_mode::preset_current#6 keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ) always clobbers reg byte a -Statement [357] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#2) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#2) [ apply_preset::preset#15 apply_preset::i#2 ] ( main:2::form_mode:13::apply_preset:299 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 apply_preset::preset#15 apply_preset::i#2 ] ) always clobbers reg byte a +Statement [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) [ form_render_values::idx#5 ] ( main:2::form_mode:13::form_render_values:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 ] main:2::form_mode:13::form_render_values:301 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 ] ) always clobbers reg byte a reg byte y +Statement [338] (word) form_field_ptr::line#0 ← *((const byte[$19]) form_line_hi#0 + (byte) form_field_ptr::y#0) w= *((const byte[$19]) form_line_lo#0 + (byte) form_field_ptr::y#0) [ form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ( main:2::form_mode:13::form_render_values:267::form_field_ptr:331 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_render_values:301::form_field_ptr:331 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_control:292::form_field_ptr:360 [ form_mode::preset_current#6 keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ) always clobbers reg byte a +Statement [355] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#4) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#4) [ apply_preset::preset#15 apply_preset::i#4 ] ( main:2::form_mode:13::apply_preset:299 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 apply_preset::preset#15 apply_preset::i#4 ] ) always clobbers reg byte a Statement [365] if((signed byte) form_cursor_count#15<(const signed byte) FORM_CURSOR_BLINK#0/(signed byte) 2) goto form_control::@2 [ keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ) always clobbers reg byte a Statement [366] (byte~) form_control::$13 ← *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) & (byte) $7f [ keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 form_control::$13 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 form_control::$13 ] ) always clobbers reg byte a reg byte y Statement [367] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← (byte~) form_control::$13 [ keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ) always clobbers reg byte y @@ -21758,29 +21788,29 @@ Statement [591] (word~) gfx_init_plane_8bppchunky::$8 ← (word) gfx_init_plane_ Statement [592] (byte) gfx_init_plane_8bppchunky::c#0 ← (byte)(word~) gfx_init_plane_8bppchunky::$8 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::c#0 ] ( main:2::gfx_init:10::gfx_init_plane_8bppchunky:461 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::c#0 ] ) always clobbers reg byte a Statement [593] *((byte*) gfx_init_plane_8bppchunky::gfxb#4) ← (byte) gfx_init_plane_8bppchunky::c#0 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::gfxb#4 ] ( main:2::gfx_init:10::gfx_init_plane_8bppchunky:461 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::gfxb#4 ] ) always clobbers reg byte y Statement [596] if((word) gfx_init_plane_8bppchunky::x#1!=(word) $140) goto gfx_init_plane_8bppchunky::@2 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxb#1 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#1 ] ( main:2::gfx_init:10::gfx_init_plane_8bppchunky:461 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::gfxb#1 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::x#1 ] ) always clobbers reg byte a -Statement [616] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ) always clobbers reg byte a -Statement [618] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ) always clobbers reg byte a -Statement [633] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ) always clobbers reg byte a -Statement [647] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ) always clobbers reg byte a -Statement [649] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ) always clobbers reg byte a -Statement [663] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613 [ gfx_init_vic_bitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a -Statement [678] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a -Statement [684] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a -Statement [687] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a -Statement [693] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a -Statement [694] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a -Statement [695] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a -Statement [696] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y -Statement [697] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y -Statement [700] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a -Statement [706] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a -Statement [709] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a -Statement [715] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a -Statement [721] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a -Statement [724] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a -Statement [730] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a -Statement [736] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a -Statement [739] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:613::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a +Statement [616] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ) always clobbers reg byte a +Statement [618] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ) always clobbers reg byte a +Statement [633] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ) always clobbers reg byte a +Statement [647] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ) always clobbers reg byte a +Statement [649] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ) always clobbers reg byte a +Statement [663] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611 [ gfx_init_vic_bitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a +Statement [678] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a +Statement [684] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a +Statement [687] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a +Statement [693] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a +Statement [694] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a +Statement [695] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a +Statement [696] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y +Statement [697] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:632::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyi:676::bitmap_plot:682 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670::bitmap_plot:704 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662::bitmap_plot:719 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656::bitmap_plot:734 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y +Statement [700] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a +Statement [706] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a +Statement [709] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:625 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxi:670 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a +Statement [715] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a +Statement [721] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a +Statement [724] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:646 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_xdyd:662 [ gfx_init_vic_bitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a +Statement [730] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a +Statement [736] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a +Statement [739] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:640 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_line:611::bitmap_line_ydxd:656 [ gfx_init_vic_bitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a Statement [744] (word) bitmap_clear::bitmap#0 ← *((const byte[$100]) bitmap_plot_xhi#0) w= *((const byte[$100]) bitmap_plot_xlo#0) [ bitmap_clear::bitmap#0 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_clear:605 [ bitmap_clear::bitmap#0 ] ) always clobbers reg byte a Statement [745] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word) bitmap_clear::bitmap#0 [ bitmap_clear::bitmap#5 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_clear:605 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a Statement [748] *((byte*) bitmap_clear::bitmap#2) ← (byte) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::gfx_init:10::gfx_init_vic_bitmap:459::bitmap_clear:605 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y @@ -21838,10 +21868,10 @@ Potential registers zp ZP_BYTE:34 [ render_preset_name::idx#10 render_preset_nam Potential registers zp ZP_WORD:35 [ render_preset_name::name#13 ] : zp ZP_WORD:35 , Potential registers zp ZP_WORD:37 [ print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 ] : zp ZP_WORD:37 , Potential registers zp ZP_WORD:39 [ print_str_at::at#2 print_str_at::at#0 ] : zp ZP_WORD:39 , -Potential registers zp ZP_BYTE:41 [ form_render_values::idx#2 form_render_values::idx#1 ] : zp ZP_BYTE:41 , reg byte x , +Potential registers zp ZP_BYTE:41 [ form_render_values::idx#5 form_render_values::idx#1 ] : zp ZP_BYTE:41 , reg byte x , Potential registers zp ZP_BYTE:42 [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] : zp ZP_BYTE:42 , reg byte x , reg byte y , Potential registers zp ZP_WORD:43 [ apply_preset::preset#15 ] : zp ZP_WORD:43 , -Potential registers zp ZP_BYTE:45 [ apply_preset::i#2 apply_preset::i#1 ] : zp ZP_BYTE:45 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:45 [ apply_preset::i#4 apply_preset::i#1 ] : zp ZP_BYTE:45 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:46 [ form_control::return#2 ] : zp ZP_BYTE:46 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:47 [ form_set_screen::line#2 form_set_screen::line#1 ] : zp ZP_WORD:47 , Potential registers zp ZP_BYTE:49 [ form_set_screen::y#2 form_set_screen::y#1 ] : zp ZP_BYTE:49 , reg byte x , reg byte y , @@ -21876,7 +21906,7 @@ Potential registers zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plan Potential registers zp ZP_WORD:91 [ gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 ] : zp ZP_WORD:91 , Potential registers zp ZP_BYTE:93 [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] : zp ZP_BYTE:93 , reg byte x , Potential registers zp ZP_WORD:94 [ gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::gfxb#3 gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::gfxb#1 ] : zp ZP_WORD:94 , -Potential registers zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] : zp ZP_BYTE:96 , reg byte x , +Potential registers zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 ] : zp ZP_BYTE:96 , reg byte x , Potential registers zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] : zp ZP_BYTE:97 , reg byte x , Potential registers zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] : zp ZP_BYTE:98 , reg byte x , Potential registers zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] : zp ZP_BYTE:99 , reg byte x , @@ -22077,10 +22107,10 @@ Uplift Scope [keyboard_matrix_read] 20,002: zp ZP_BYTE:240 [ keyboard_matrix_rea Uplift Scope [gfx_init_plane_charset8] 4,004: zp ZP_BYTE:89 [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] 2,002: zp ZP_BYTE:296 [ gfx_init_plane_charset8::$7 ] 1,723.94: zp ZP_BYTE:88 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] 1,044.93: zp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] 845.22: zp ZP_WORD:85 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] 783: zp ZP_BYTE:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] 192.31: zp ZP_WORD:81 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] 165.93: zp ZP_BYTE:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] 17.79: zp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] Uplift Scope [gfx_mode] 2,104.5: zp ZP_WORD:8 [ gfx_mode::col#2 gfx_mode::col#3 gfx_mode::col#1 ] 2,002: zp ZP_BYTE:10 [ gfx_mode::cx#2 gfx_mode::cx#1 ] 1,663.27: zp ZP_WORD:6 [ gfx_mode::vic_colors#2 gfx_mode::vic_colors#3 gfx_mode::vic_colors#1 gfx_mode::vic_colors#0 ] 353.5: zp ZP_BYTE:11 [ gfx_mode::j#2 gfx_mode::j#1 ] 353.5: zp ZP_BYTE:12 [ gfx_mode::i#2 gfx_mode::i#1 ] 202: zp ZP_BYTE:238 [ gfx_mode::keyboard_event#0 ] 180.36: zp ZP_BYTE:5 [ gfx_mode::cy#4 gfx_mode::cy#1 ] 44: zp ZP_BYTE:2 [ 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#3 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 ] 12: zp ZP_BYTE:3 [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ] 4: zp ZP_BYTE:158 [ gfx_mode::$20 ] 4: zp ZP_DWORD:164 [ gfx_mode::$22 ] 4: zp ZP_BYTE:174 [ gfx_mode::$25 ] 4: zp ZP_BYTE:175 [ gfx_mode::$27 ] 4: zp ZP_WORD:176 [ gfx_mode::$28 ] 4: zp ZP_BYTE:178 [ gfx_mode::$29 ] 4: zp ZP_BYTE:179 [ gfx_mode::$30 ] 4: zp ZP_BYTE:180 [ gfx_mode::$31 ] 4: zp ZP_BYTE:181 [ gfx_mode::$32 ] 4: zp ZP_BYTE:182 [ gfx_mode::$33 ] 4: zp ZP_BYTE:183 [ gfx_mode::$34 ] 4: zp ZP_DWORD:189 [ gfx_mode::$36 ] 4: zp ZP_BYTE:199 [ gfx_mode::$39 ] 4: zp ZP_BYTE:200 [ gfx_mode::$41 ] 4: zp ZP_WORD:201 [ gfx_mode::$42 ] 4: zp ZP_BYTE:203 [ gfx_mode::$43 ] 4: zp ZP_BYTE:204 [ gfx_mode::$44 ] 4: zp ZP_BYTE:205 [ gfx_mode::$45 ] 4: zp ZP_BYTE:206 [ gfx_mode::$46 ] 4: zp ZP_BYTE:207 [ gfx_mode::$47 ] 4: zp ZP_WORD:212 [ gfx_mode::$54 ] 4: zp ZP_WORD:222 [ gfx_mode::$59 ] 4: zp ZP_BYTE:224 [ gfx_mode::$60 ] 4: zp ZP_BYTE:225 [ gfx_mode::$61 ] 4: zp ZP_BYTE:226 [ gfx_mode::$62 ] 4: zp ZP_BYTE:229 [ gfx_mode::$64 ] 4: zp ZP_BYTE:230 [ gfx_mode::$65 ] 4: zp ZP_BYTE:231 [ gfx_mode::$66 ] 4: zp ZP_BYTE:232 [ gfx_mode::$67 ] 4: zp ZP_BYTE:233 [ gfx_mode::$68 ] 4: zp ZP_BYTE:234 [ gfx_mode::$69 ] 4: zp ZP_BYTE:235 [ gfx_mode::$70 ] 4: zp ZP_BYTE:236 [ gfx_mode::$71 ] 2: zp ZP_BYTE:4 [ gfx_mode::vic_control2#2 ] 2: zp ZP_WORD:172 [ gfx_mode::$26 ] 2: zp ZP_WORD:197 [ gfx_mode::$40 ] 2: zp ZP_WORD:210 [ gfx_mode::$53 ] 2: zp ZP_WORD:214 [ gfx_mode::$55 ] 2: zp ZP_WORD:220 [ gfx_mode::$58 ] 1: zp ZP_DWORD:168 [ gfx_mode::plane_a#0 ] 1: zp ZP_DWORD:193 [ gfx_mode::plane_b#0 ] 0.8: zp ZP_BYTE:159 [ gfx_mode::plane_a_offs#0 ] 0.8: zp ZP_BYTE:184 [ gfx_mode::plane_b_offs#0 ] 0.5: zp ZP_BYTE:216 [ gfx_mode::$56 ] Uplift Scope [print_str_at] 3,005.5: zp ZP_WORD:37 [ print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 ] 2,002: zp ZP_WORD:39 [ print_str_at::at#2 print_str_at::at#0 ] -Uplift Scope [apply_preset] 3,670.33: zp ZP_BYTE:45 [ apply_preset::i#2 apply_preset::i#1 ] 200.2: zp ZP_WORD:43 [ apply_preset::preset#15 ] 11.18: zp ZP_BYTE:261 [ apply_preset::idx#0 ] -Uplift Scope [form_render_values] 3,003: zp ZP_BYTE:41 [ form_render_values::idx#2 form_render_values::idx#1 ] +Uplift Scope [apply_preset] 3,503.5: zp ZP_BYTE:45 [ apply_preset::i#4 apply_preset::i#1 ] 200.2: zp ZP_WORD:43 [ apply_preset::preset#15 ] 11.18: zp ZP_BYTE:261 [ apply_preset::idx#0 ] Uplift Scope [form_mode] 2,002: zp ZP_BYTE:260 [ form_mode::$36 ] 442.75: zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] 353.5: zp ZP_BYTE:30 [ form_mode::i#2 form_mode::i#1 ] Uplift Scope [print_str_lines] 1,939.17: zp ZP_WORD:50 [ print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 ] 667.33: zp ZP_BYTE:275 [ print_str_lines::ch#0 ] +Uplift Scope [form_render_values] 2,502.5: zp ZP_BYTE:41 [ form_render_values::idx#5 form_render_values::idx#1 ] Uplift Scope [form_field_ptr] 2,341.67: zp ZP_BYTE:42 [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] 33.9: zp ZP_BYTE:265 [ form_field_ptr::x#0 ] 6: zp ZP_BYTE:262 [ form_field_ptr::y#0 ] 0.06: zp ZP_WORD:263 [ form_field_ptr::line#0 ] Uplift Scope [form_control] 2,002: zp ZP_BYTE:259 [ form_control::return#0 ] 333.67: zp ZP_BYTE:46 [ form_control::return#2 ] 4: zp ZP_BYTE:266 [ form_control::$13 ] 4: zp ZP_BYTE:269 [ form_control::$15 ] 4: zp ZP_BYTE:270 [ form_control::$16 ] 4: zp ZP_BYTE:271 [ form_control::$24 ] 4: zp ZP_BYTE:272 [ form_control::$14 ] 2.67: zp ZP_BYTE:268 [ form_control::key_event#0 ] Uplift Scope [bitmap_plot] 1,012: zp ZP_BYTE:104 [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] 506.5: zp ZP_BYTE:103 [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] 4: zp ZP_WORD:313 [ bitmap_plot::plotter_y#0 ] 4: zp ZP_BYTE:317 [ bitmap_plot::$1 ] 2: zp ZP_WORD:311 [ bitmap_plot::plotter_x#0 ] 1: zp ZP_WORD:315 [ bitmap_plot::plotter#0 ] @@ -22106,8 +22136,8 @@ Uplift Scope [dtvSetCpuBankSegment1] 311: zp ZP_BYTE:67 [ dtvSetCpuBankSegment1: Uplift Scope [keyboard_event_get] 202: zp ZP_BYTE:237 [ keyboard_event_get::return#3 ] 30.25: zp ZP_BYTE:13 [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] 4: zp ZP_BYTE:267 [ keyboard_event_get::return#4 ] Uplift Scope [render_preset_name] 217.36: zp ZP_BYTE:34 [ render_preset_name::idx#10 render_preset_name::idx#0 render_preset_name::idx#1 ] 2: zp ZP_WORD:35 [ render_preset_name::name#13 ] Uplift Scope [bitmap_init] 39.88: zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 24.93: zp ZP_BYTE:128 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 23.83: zp ZP_BYTE:127 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp ZP_BYTE:323 [ bitmap_init::$0 ] 22: zp ZP_BYTE:325 [ bitmap_init::$7 ] 22: zp ZP_BYTE:326 [ bitmap_init::$8 ] 22: zp ZP_BYTE:327 [ bitmap_init::$9 ] 5.5: zp ZP_BYTE:324 [ bitmap_init::$10 ] -Uplift Scope [gfx_init_vic_bitmap] 33: zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] Uplift Scope [keyboard_event_pressed] 4: zp ZP_BYTE:242 [ keyboard_event_pressed::return#0 ] 4: zp ZP_BYTE:244 [ keyboard_event_pressed::return#1 ] 4: zp ZP_BYTE:246 [ keyboard_event_pressed::return#2 ] 4: zp ZP_BYTE:248 [ keyboard_event_pressed::return#3 ] 4: zp ZP_BYTE:254 [ keyboard_event_pressed::$0 ] 4: zp ZP_BYTE:256 [ keyboard_event_pressed::$1 ] 2: zp ZP_BYTE:255 [ keyboard_event_pressed::row_bits#0 ] 1.67: zp ZP_BYTE:257 [ keyboard_event_pressed::return#10 ] 1.33: zp ZP_BYTE:19 [ keyboard_event_pressed::keycode#4 ] +Uplift Scope [gfx_init_vic_bitmap] 27.5: zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 ] Uplift Scope [get_vic_screen] 10.8: zp ZP_BYTE:20 [ get_vic_screen::idx#2 get_vic_screen::idx#0 get_vic_screen::idx#1 ] 4: zp ZP_WORD:208 [ get_vic_screen::return#10 ] 4: zp ZP_WORD:227 [ get_vic_screen::return#11 ] 1: zp ZP_WORD:21 [ get_vic_screen::return#5 ] Uplift Scope [get_plane] 10.29: zp ZP_BYTE:25 [ get_plane::idx#10 get_plane::idx#1 get_plane::idx#0 ] 4: zp ZP_DWORD:160 [ get_plane::return#16 ] 4: zp ZP_DWORD:185 [ get_plane::return#17 ] 1: zp ZP_DWORD:26 [ get_plane::return#14 ] Uplift Scope [bitmap_line] 1.75: zp ZP_BYTE:303 [ bitmap_line::y1#0 ] 1.67: zp ZP_BYTE:302 [ bitmap_line::y0#0 ] 1.32: zp ZP_BYTE:301 [ bitmap_line::x1#0 ] 1.26: zp ZP_BYTE:300 [ bitmap_line::x0#0 ] 0.89: zp ZP_BYTE:305 [ bitmap_line::yd#2 ] 0.89: zp ZP_BYTE:306 [ bitmap_line::yd#1 ] 0.89: zp ZP_BYTE:308 [ bitmap_line::yd#10 ] 0.89: zp ZP_BYTE:309 [ bitmap_line::yd#11 ] 0.7: zp ZP_BYTE:304 [ bitmap_line::xd#2 ] 0.7: zp ZP_BYTE:307 [ bitmap_line::xd#1 ] @@ -22123,358 +22153,358 @@ Uplift Scope [gfx_init_plane_vertical2] Uplift Scope [gfx_init_plane_blank] Uplift Scope [gfx_init_plane_full] -Uplifting [keyboard_event_scan] best 15481010 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] zp ZP_BYTE:252 [ keyboard_event_scan::event_type#0 ] zp ZP_BYTE:253 [ keyboard_event_scan::$23 ] zp ZP_BYTE:16 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp ZP_BYTE:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp ZP_BYTE:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp ZP_BYTE:241 [ keyboard_event_scan::row_scan#0 ] zp ZP_BYTE:243 [ keyboard_event_scan::$0 ] zp ZP_BYTE:245 [ keyboard_event_scan::$3 ] zp ZP_BYTE:247 [ keyboard_event_scan::$6 ] zp ZP_BYTE:249 [ keyboard_event_scan::$9 ] +Uplifting [keyboard_event_scan] best 15487040 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] zp ZP_BYTE:252 [ keyboard_event_scan::event_type#0 ] zp ZP_BYTE:253 [ keyboard_event_scan::$23 ] zp ZP_BYTE:16 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp ZP_BYTE:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp ZP_BYTE:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp ZP_BYTE:241 [ keyboard_event_scan::row_scan#0 ] zp ZP_BYTE:243 [ keyboard_event_scan::$0 ] zp ZP_BYTE:245 [ keyboard_event_scan::$3 ] zp ZP_BYTE:247 [ keyboard_event_scan::$6 ] zp ZP_BYTE:249 [ keyboard_event_scan::$9 ] Limited combination testing to 10 combinations of 5308416 possible. -Uplifting [] best 15480992 combination zp ZP_BYTE:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] zp ZP_WORD:52 [ print_char_cursor#20 print_char_cursor#22 print_char_cursor#73 print_char_cursor#74 print_char_cursor#38 print_char_cursor#1 ] zp ZP_WORD:54 [ print_line_cursor#21 print_line_cursor#2 print_set_screen::screen#2 print_line_cursor#22 ] zp ZP_BYTE:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] zp ZP_BYTE:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] reg byte x [ keyboard_modifiers#21 keyboard_modifiers#20 keyboard_modifiers#19 keyboard_modifiers#18 keyboard_modifiers#3 keyboard_modifiers#4 keyboard_modifiers#5 ] +Uplifting [] best 15487022 combination zp ZP_BYTE:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] zp ZP_WORD:52 [ print_char_cursor#20 print_char_cursor#22 print_char_cursor#73 print_char_cursor#74 print_char_cursor#38 print_char_cursor#1 ] zp ZP_WORD:54 [ print_line_cursor#21 print_line_cursor#2 print_set_screen::screen#2 print_line_cursor#22 ] zp ZP_BYTE:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] zp ZP_BYTE:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] reg byte x [ keyboard_modifiers#21 keyboard_modifiers#20 keyboard_modifiers#19 keyboard_modifiers#18 keyboard_modifiers#3 keyboard_modifiers#4 keyboard_modifiers#5 ] Limited combination testing to 10 combinations of 16 possible. -Uplifting [keyboard_matrix_read] best 15390989 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] zp ZP_BYTE:258 [ keyboard_matrix_read::return#0 ] +Uplifting [keyboard_matrix_read] best 15397019 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] zp ZP_BYTE:258 [ keyboard_matrix_read::return#0 ] Limited combination testing to 10 combinations of 64 possible. -Uplifting [gfx_init_plane_charset8] best 15375989 combination reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] reg byte a [ gfx_init_plane_charset8::$7 ] zp ZP_BYTE:88 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] zp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] zp ZP_WORD:85 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] zp ZP_BYTE:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] zp ZP_WORD:81 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] zp ZP_BYTE:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] zp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] +Uplifting [gfx_init_plane_charset8] best 15382019 combination reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] reg byte a [ gfx_init_plane_charset8::$7 ] zp ZP_BYTE:88 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] zp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] zp ZP_WORD:85 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] zp ZP_BYTE:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] zp ZP_WORD:81 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] zp ZP_BYTE:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] zp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] Limited combination testing to 10 combinations of 1152 possible. -Uplifting [print_str_at] best 15375989 combination zp ZP_WORD:37 [ print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 ] zp ZP_WORD:39 [ print_str_at::at#2 print_str_at::at#0 ] -Uplifting [apply_preset] best 15363656 combination reg byte y [ apply_preset::i#2 apply_preset::i#1 ] zp ZP_WORD:43 [ apply_preset::preset#15 ] reg byte a [ apply_preset::idx#0 ] +Uplifting [print_str_at] best 15382019 combination zp ZP_WORD:37 [ print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 ] zp ZP_WORD:39 [ print_str_at::at#2 print_str_at::at#0 ] +Uplifting [apply_preset] best 15369686 combination reg byte y [ apply_preset::i#4 apply_preset::i#1 ] zp ZP_WORD:43 [ apply_preset::preset#15 ] reg byte a [ apply_preset::idx#0 ] Limited combination testing to 10 combinations of 12 possible. -Uplifting [form_render_values] best 15348656 combination reg byte x [ form_render_values::idx#2 form_render_values::idx#1 ] -Uplifting [form_mode] best 15341456 combination reg byte a [ form_mode::$36 ] zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] reg byte x [ form_mode::i#2 form_mode::i#1 ] +Uplifting [form_mode] best 15362486 combination reg byte a [ form_mode::$36 ] zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] reg byte x [ form_mode::i#2 form_mode::i#1 ] Limited combination testing to 10 combinations of 24 possible. -Uplifting [print_str_lines] best 15329456 combination zp ZP_WORD:50 [ print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 ] reg byte a [ print_str_lines::ch#0 ] -Uplifting [form_field_ptr] best 15326443 combination reg byte x [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] zp ZP_BYTE:265 [ form_field_ptr::x#0 ] reg byte a [ form_field_ptr::y#0 ] zp ZP_WORD:263 [ form_field_ptr::line#0 ] +Uplifting [print_str_lines] best 15350486 combination zp ZP_WORD:50 [ print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 ] reg byte a [ print_str_lines::ch#0 ] +Uplifting [form_render_values] best 15335486 combination reg byte x [ form_render_values::idx#5 form_render_values::idx#1 ] +Uplifting [form_field_ptr] best 15332473 combination reg byte x [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] zp ZP_BYTE:265 [ form_field_ptr::x#0 ] reg byte a [ form_field_ptr::y#0 ] zp ZP_WORD:263 [ form_field_ptr::line#0 ] Limited combination testing to 10 combinations of 24 possible. -Uplifting [form_control] best 15319434 combination reg byte a [ form_control::return#0 ] reg byte x [ form_control::return#2 ] zp ZP_BYTE:266 [ form_control::$13 ] zp ZP_BYTE:269 [ form_control::$15 ] zp ZP_BYTE:270 [ form_control::$16 ] zp ZP_BYTE:271 [ form_control::$24 ] zp ZP_BYTE:272 [ form_control::$14 ] zp ZP_BYTE:268 [ form_control::key_event#0 ] +Uplifting [form_control] best 15325464 combination reg byte a [ form_control::return#0 ] reg byte x [ form_control::return#2 ] zp ZP_BYTE:266 [ form_control::$13 ] zp ZP_BYTE:269 [ form_control::$15 ] zp ZP_BYTE:270 [ form_control::$16 ] zp ZP_BYTE:271 [ form_control::$24 ] zp ZP_BYTE:272 [ form_control::$14 ] zp ZP_BYTE:268 [ form_control::key_event#0 ] Limited combination testing to 10 combinations of 65536 possible. -Uplifting [bitmap_plot] best 15317025 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp ZP_WORD:313 [ bitmap_plot::plotter_y#0 ] zp ZP_BYTE:317 [ bitmap_plot::$1 ] zp ZP_WORD:311 [ bitmap_plot::plotter_x#0 ] zp ZP_WORD:315 [ bitmap_plot::plotter#0 ] +Uplifting [bitmap_plot] best 15323055 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp ZP_WORD:313 [ bitmap_plot::plotter_y#0 ] zp ZP_BYTE:317 [ bitmap_plot::$1 ] zp ZP_WORD:311 [ bitmap_plot::plotter_x#0 ] zp ZP_WORD:315 [ bitmap_plot::plotter#0 ] Limited combination testing to 10 combinations of 36 possible. -Uplifting [gfx_init_screen2] best 15315825 combination reg byte a [ gfx_init_screen2::$0 ] reg byte a [ gfx_init_screen2::$3 ] zp ZP_BYTE:336 [ gfx_init_screen2::$4 ] zp ZP_BYTE:147 [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ] zp ZP_BYTE:333 [ gfx_init_screen2::col#0 ] zp ZP_WORD:148 [ gfx_init_screen2::ch#2 gfx_init_screen2::ch#3 gfx_init_screen2::ch#1 ] zp ZP_BYTE:334 [ gfx_init_screen2::col2#0 ] zp ZP_BYTE:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ] +Uplifting [gfx_init_screen2] best 15321855 combination reg byte a [ gfx_init_screen2::$0 ] reg byte a [ gfx_init_screen2::$3 ] zp ZP_BYTE:336 [ gfx_init_screen2::$4 ] zp ZP_BYTE:147 [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ] zp ZP_BYTE:333 [ gfx_init_screen2::col#0 ] zp ZP_WORD:148 [ gfx_init_screen2::ch#2 gfx_init_screen2::ch#3 gfx_init_screen2::ch#1 ] zp ZP_BYTE:334 [ gfx_init_screen2::col2#0 ] zp ZP_BYTE:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ] Limited combination testing to 10 combinations of 2304 possible. -Uplifting [gfx_init_plane_8bppchunky] best 15314595 combination reg byte x [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] zp ZP_WORD:94 [ gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::gfxb#3 gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::gfxb#1 ] reg byte a [ gfx_init_plane_8bppchunky::c#0 ] zp ZP_WORD:91 [ gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 ] zp ZP_WORD:297 [ gfx_init_plane_8bppchunky::$8 ] zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ] +Uplifting [gfx_init_plane_8bppchunky] best 15320625 combination reg byte x [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] zp ZP_WORD:94 [ gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::gfxb#3 gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::gfxb#1 ] reg byte a [ gfx_init_plane_8bppchunky::c#0 ] zp ZP_WORD:91 [ gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 ] zp ZP_WORD:297 [ gfx_init_plane_8bppchunky::$8 ] zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ] Limited combination testing to 10 combinations of 16 possible. -Uplifting [bitmap_line_xdyi] best 15313995 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] reg byte x [ bitmap_line_xdyi::$6 ] zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] +Uplifting [bitmap_line_xdyi] best 15320025 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] reg byte x [ bitmap_line_xdyi::$6 ] zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [bitmap_line_xdyd] best 15313395 combination zp ZP_BYTE:116 [ 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 ] zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] reg byte x [ bitmap_line_xdyd::$6 ] zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] +Uplifting [bitmap_line_xdyd] best 15319425 combination zp ZP_BYTE:116 [ 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 ] zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] reg byte x [ bitmap_line_xdyd::$6 ] zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [bitmap_line_ydxi] best 15312389 combination zp ZP_BYTE:110 [ 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 ] reg byte x [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] reg byte a [ bitmap_line_ydxi::$6 ] zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] +Uplifting [bitmap_line_ydxi] best 15318419 combination zp ZP_BYTE:110 [ 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 ] reg byte x [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] reg byte a [ bitmap_line_ydxi::$6 ] zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [bitmap_line_ydxd] best 15311383 combination zp ZP_BYTE:122 [ 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_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] reg byte a [ bitmap_line_ydxd::$6 ] zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] +Uplifting [bitmap_line_ydxd] best 15317413 combination zp ZP_BYTE:122 [ 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_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] reg byte a [ bitmap_line_ydxd::$6 ] zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [gfx_init_screen0] best 15310183 combination reg byte a [ gfx_init_screen0::$0 ] reg byte a [ gfx_init_screen0::$2 ] zp ZP_BYTE:342 [ gfx_init_screen0::$3 ] zp ZP_BYTE:155 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] zp ZP_WORD:156 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] zp ZP_BYTE:340 [ gfx_init_screen0::$1 ] zp ZP_BYTE:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] +Uplifting [gfx_init_screen0] best 15316213 combination reg byte a [ gfx_init_screen0::$0 ] reg byte a [ gfx_init_screen0::$2 ] zp ZP_BYTE:342 [ gfx_init_screen0::$3 ] zp ZP_BYTE:155 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] zp ZP_WORD:156 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] zp ZP_BYTE:340 [ gfx_init_screen0::$1 ] zp ZP_BYTE:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] Limited combination testing to 10 combinations of 768 possible. -Uplifting [gfx_init_screen3] best 15308983 combination reg byte a [ gfx_init_screen3::$0 ] reg byte a [ gfx_init_screen3::$2 ] zp ZP_BYTE:331 [ gfx_init_screen3::$3 ] zp ZP_BYTE:143 [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ] zp ZP_WORD:144 [ gfx_init_screen3::ch#2 gfx_init_screen3::ch#3 gfx_init_screen3::ch#1 ] zp ZP_BYTE:329 [ gfx_init_screen3::$1 ] zp ZP_BYTE:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ] +Uplifting [gfx_init_screen3] best 15315013 combination reg byte a [ gfx_init_screen3::$0 ] reg byte a [ gfx_init_screen3::$2 ] zp ZP_BYTE:331 [ gfx_init_screen3::$3 ] zp ZP_BYTE:143 [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ] zp ZP_WORD:144 [ gfx_init_screen3::ch#2 gfx_init_screen3::ch#3 gfx_init_screen3::ch#1 ] zp ZP_BYTE:329 [ gfx_init_screen3::$1 ] zp ZP_BYTE:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ] Limited combination testing to 10 combinations of 768 possible. -Uplifting [gfx_init_plane_horisontal] best 15307483 combination zp ZP_WORD:77 [ 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 ] reg byte a [ gfx_init_plane_horisontal::$7 ] reg byte x [ gfx_init_plane_horisontal::ax#2 gfx_init_plane_horisontal::ax#1 ] zp ZP_BYTE:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ] +Uplifting [gfx_init_plane_horisontal] best 15313513 combination zp ZP_WORD:77 [ 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 ] reg byte a [ gfx_init_plane_horisontal::$7 ] reg byte x [ gfx_init_plane_horisontal::ax#2 gfx_init_plane_horisontal::ax#1 ] zp ZP_BYTE:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ] Limited combination testing to 10 combinations of 16 possible. -Uplifting [gfx_init_screen1] best 15305883 combination reg byte x [ gfx_init_screen1::cx#2 gfx_init_screen1::cx#1 ] reg byte a [ gfx_init_screen1::$0 ] zp ZP_BYTE:338 [ gfx_init_screen1::$1 ] zp ZP_WORD:152 [ gfx_init_screen1::ch#2 gfx_init_screen1::ch#3 gfx_init_screen1::ch#1 ] zp ZP_BYTE:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ] +Uplifting [gfx_init_screen1] best 15311913 combination reg byte x [ gfx_init_screen1::cx#2 gfx_init_screen1::cx#1 ] reg byte a [ gfx_init_screen1::$0 ] zp ZP_BYTE:338 [ gfx_init_screen1::$1 ] zp ZP_WORD:152 [ gfx_init_screen1::ch#2 gfx_init_screen1::ch#3 gfx_init_screen1::ch#1 ] zp ZP_BYTE:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ] Limited combination testing to 10 combinations of 64 possible. -Uplifting [form_set_screen] best 15303783 combination reg byte x [ form_set_screen::y#2 form_set_screen::y#1 ] reg byte a [ form_set_screen::$0 ] zp ZP_BYTE:274 [ form_set_screen::$1 ] zp ZP_WORD:47 [ form_set_screen::line#2 form_set_screen::line#1 ] +Uplifting [form_set_screen] best 15309813 combination reg byte x [ form_set_screen::y#2 form_set_screen::y#1 ] reg byte a [ form_set_screen::$0 ] zp ZP_BYTE:274 [ form_set_screen::$1 ] zp ZP_WORD:47 [ form_set_screen::line#2 form_set_screen::line#1 ] Limited combination testing to 10 combinations of 48 possible. -Uplifting [gfx_init_plane_horisontal2] best 15302783 combination reg byte a [ gfx_init_plane_horisontal2::$7 ] reg byte a [ gfx_init_plane_horisontal2::row#0 ] zp ZP_BYTE:71 [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ] zp ZP_WORD:69 [ gfx_init_plane_horisontal2::gfxa#2 gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::gfxa#1 ] zp ZP_BYTE:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ] +Uplifting [gfx_init_plane_horisontal2] best 15308813 combination reg byte a [ gfx_init_plane_horisontal2::$7 ] reg byte a [ gfx_init_plane_horisontal2::row#0 ] zp ZP_BYTE:71 [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ] zp ZP_WORD:69 [ gfx_init_plane_horisontal2::gfxa#2 gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::gfxa#1 ] zp ZP_BYTE:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ] Limited combination testing to 10 combinations of 64 possible. -Uplifting [gfx_init_charset] best 15301883 combination zp ZP_WORD:135 [ gfx_init_charset::charset#2 gfx_init_charset::charset#3 gfx_init_charset::charset#1 ] reg byte x [ gfx_init_charset::l#2 gfx_init_charset::l#1 ] zp ZP_WORD:133 [ gfx_init_charset::chargen#2 gfx_init_charset::chargen#3 gfx_init_charset::chargen#1 ] zp ZP_BYTE:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ] -Uplifting [gfx_init_plane_fill] best 15300977 combination zp ZP_WORD:64 [ gfx_init_plane_fill::gfxb#2 gfx_init_plane_fill::gfxb#3 gfx_init_plane_fill::gfxb#1 gfx_init_plane_fill::gfxb#6 ] reg byte x [ gfx_init_plane_fill::bx#2 gfx_init_plane_fill::bx#1 ] zp ZP_BYTE:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ] zp ZP_BYTE:62 [ gfx_init_plane_fill::fill#6 ] zp ZP_DWORD:280 [ gfx_init_plane_fill::$0 ] zp ZP_WORD:284 [ gfx_init_plane_fill::$1 ] reg byte a [ gfx_init_plane_fill::gfxbCpuBank#0 ] zp ZP_WORD:287 [ gfx_init_plane_fill::$4 ] zp ZP_WORD:289 [ gfx_init_plane_fill::$5 ] zp ZP_WORD:291 [ gfx_init_plane_fill::gfxb#0 ] zp ZP_DWORD:58 [ gfx_init_plane_fill::plane_addr#3 ] +Uplifting [gfx_init_charset] best 15307913 combination zp ZP_WORD:135 [ gfx_init_charset::charset#2 gfx_init_charset::charset#3 gfx_init_charset::charset#1 ] reg byte x [ gfx_init_charset::l#2 gfx_init_charset::l#1 ] zp ZP_WORD:133 [ gfx_init_charset::chargen#2 gfx_init_charset::chargen#3 gfx_init_charset::chargen#1 ] zp ZP_BYTE:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ] +Uplifting [gfx_init_plane_fill] best 15307007 combination zp ZP_WORD:64 [ gfx_init_plane_fill::gfxb#2 gfx_init_plane_fill::gfxb#3 gfx_init_plane_fill::gfxb#1 gfx_init_plane_fill::gfxb#6 ] reg byte x [ gfx_init_plane_fill::bx#2 gfx_init_plane_fill::bx#1 ] zp ZP_BYTE:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ] zp ZP_BYTE:62 [ gfx_init_plane_fill::fill#6 ] zp ZP_DWORD:280 [ gfx_init_plane_fill::$0 ] zp ZP_WORD:284 [ gfx_init_plane_fill::$1 ] reg byte a [ gfx_init_plane_fill::gfxbCpuBank#0 ] zp ZP_WORD:287 [ gfx_init_plane_fill::$4 ] zp ZP_WORD:289 [ gfx_init_plane_fill::$5 ] zp ZP_WORD:291 [ gfx_init_plane_fill::gfxb#0 ] zp ZP_DWORD:58 [ gfx_init_plane_fill::plane_addr#3 ] Limited combination testing to 10 combinations of 32 possible. -Uplifting [bitmap_clear] best 15300077 combination zp ZP_WORD:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:321 [ bitmap_clear::bitmap#0 ] -Uplifting [gfx_init_screen4] best 15299177 combination zp ZP_WORD:139 [ gfx_init_screen4::ch#2 gfx_init_screen4::ch#3 gfx_init_screen4::ch#1 ] reg byte x [ gfx_init_screen4::cx#2 gfx_init_screen4::cx#1 ] zp ZP_BYTE:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ] -Uplifting [gfx_init_plane_vertical] best 15298277 combination zp ZP_WORD:73 [ gfx_init_plane_vertical::gfxb#2 gfx_init_plane_vertical::gfxb#3 gfx_init_plane_vertical::gfxb#1 ] reg byte x [ gfx_init_plane_vertical::bx#2 gfx_init_plane_vertical::bx#1 ] zp ZP_BYTE:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ] -Uplifting [memset] best 15298277 combination zp ZP_WORD:56 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:278 [ memset::end#0 ] zp ZP_WORD:276 [ memset::str#0 ] -Uplifting [dtvSetCpuBankSegment1] best 15298138 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#13 dtvSetCpuBankSegment1::cpuBankIdx#1 dtvSetCpuBankSegment1::cpuBankIdx#11 ] -Uplifting [keyboard_event_get] best 15297229 combination reg byte a [ keyboard_event_get::return#3 ] reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] zp ZP_BYTE:267 [ keyboard_event_get::return#4 ] +Uplifting [bitmap_clear] best 15306107 combination zp ZP_WORD:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:321 [ bitmap_clear::bitmap#0 ] +Uplifting [gfx_init_screen4] best 15305207 combination zp ZP_WORD:139 [ gfx_init_screen4::ch#2 gfx_init_screen4::ch#3 gfx_init_screen4::ch#1 ] reg byte x [ gfx_init_screen4::cx#2 gfx_init_screen4::cx#1 ] zp ZP_BYTE:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ] +Uplifting [gfx_init_plane_vertical] best 15304307 combination zp ZP_WORD:73 [ gfx_init_plane_vertical::gfxb#2 gfx_init_plane_vertical::gfxb#3 gfx_init_plane_vertical::gfxb#1 ] reg byte x [ gfx_init_plane_vertical::bx#2 gfx_init_plane_vertical::bx#1 ] zp ZP_BYTE:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ] +Uplifting [memset] best 15304307 combination zp ZP_WORD:56 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:278 [ memset::end#0 ] zp ZP_WORD:276 [ memset::str#0 ] +Uplifting [dtvSetCpuBankSegment1] best 15304168 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#13 dtvSetCpuBankSegment1::cpuBankIdx#1 dtvSetCpuBankSegment1::cpuBankIdx#11 ] +Uplifting [keyboard_event_get] best 15303259 combination reg byte a [ keyboard_event_get::return#3 ] reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] zp ZP_BYTE:267 [ keyboard_event_get::return#4 ] Limited combination testing to 10 combinations of 64 possible. -Uplifting [render_preset_name] best 15296893 combination reg byte a [ render_preset_name::idx#10 render_preset_name::idx#0 render_preset_name::idx#1 ] zp ZP_WORD:35 [ render_preset_name::name#13 ] -Uplifting [bitmap_init] best 15296593 combination zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] zp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] zp ZP_BYTE:323 [ bitmap_init::$0 ] zp ZP_BYTE:325 [ bitmap_init::$7 ] zp ZP_BYTE:326 [ bitmap_init::$8 ] zp ZP_BYTE:327 [ bitmap_init::$9 ] zp ZP_BYTE:324 [ bitmap_init::$10 ] +Uplifting [render_preset_name] best 15302923 combination reg byte a [ render_preset_name::idx#10 render_preset_name::idx#0 render_preset_name::idx#1 ] zp ZP_WORD:35 [ render_preset_name::name#13 ] +Uplifting [bitmap_init] best 15302623 combination zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] zp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] zp ZP_BYTE:323 [ bitmap_init::$0 ] zp ZP_BYTE:325 [ bitmap_init::$7 ] zp ZP_BYTE:326 [ bitmap_init::$8 ] zp ZP_BYTE:327 [ bitmap_init::$9 ] zp ZP_BYTE:324 [ bitmap_init::$10 ] Limited combination testing to 10 combinations of 34560 possible. -Uplifting [gfx_init_vic_bitmap] best 15296593 combination zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] -Uplifting [keyboard_event_pressed] best 15296581 combination reg byte a [ keyboard_event_pressed::return#0 ] reg byte a [ keyboard_event_pressed::return#1 ] zp ZP_BYTE:246 [ keyboard_event_pressed::return#2 ] zp ZP_BYTE:248 [ keyboard_event_pressed::return#3 ] zp ZP_BYTE:254 [ keyboard_event_pressed::$0 ] zp ZP_BYTE:256 [ keyboard_event_pressed::$1 ] zp ZP_BYTE:255 [ keyboard_event_pressed::row_bits#0 ] zp ZP_BYTE:257 [ keyboard_event_pressed::return#10 ] zp ZP_BYTE:19 [ keyboard_event_pressed::keycode#4 ] +Uplifting [keyboard_event_pressed] best 15302611 combination reg byte a [ keyboard_event_pressed::return#0 ] reg byte a [ keyboard_event_pressed::return#1 ] zp ZP_BYTE:246 [ keyboard_event_pressed::return#2 ] zp ZP_BYTE:248 [ keyboard_event_pressed::return#3 ] zp ZP_BYTE:254 [ keyboard_event_pressed::$0 ] zp ZP_BYTE:256 [ keyboard_event_pressed::$1 ] zp ZP_BYTE:255 [ keyboard_event_pressed::row_bits#0 ] zp ZP_BYTE:257 [ keyboard_event_pressed::return#10 ] zp ZP_BYTE:19 [ keyboard_event_pressed::keycode#4 ] Limited combination testing to 10 combinations of 147456 possible. -Uplifting [get_vic_screen] best 15296560 combination reg byte a [ get_vic_screen::idx#2 get_vic_screen::idx#0 get_vic_screen::idx#1 ] zp ZP_WORD:208 [ get_vic_screen::return#10 ] zp ZP_WORD:227 [ get_vic_screen::return#11 ] zp ZP_WORD:21 [ get_vic_screen::return#5 ] -Uplifting [get_plane] best 15296512 combination reg byte a [ get_plane::idx#10 get_plane::idx#1 get_plane::idx#0 ] zp ZP_DWORD:160 [ get_plane::return#16 ] zp ZP_DWORD:185 [ get_plane::return#17 ] zp ZP_DWORD:26 [ get_plane::return#14 ] -Uplifting [bitmap_line] best 15296466 combination zp ZP_BYTE:303 [ bitmap_line::y1#0 ] zp ZP_BYTE:302 [ bitmap_line::y0#0 ] reg byte x [ bitmap_line::x1#0 ] zp ZP_BYTE:300 [ bitmap_line::x0#0 ] zp ZP_BYTE:305 [ bitmap_line::yd#2 ] zp ZP_BYTE:306 [ bitmap_line::yd#1 ] zp ZP_BYTE:308 [ bitmap_line::yd#10 ] zp ZP_BYTE:309 [ bitmap_line::yd#11 ] zp ZP_BYTE:304 [ bitmap_line::xd#2 ] zp ZP_BYTE:307 [ bitmap_line::xd#1 ] +Uplifting [gfx_init_vic_bitmap] best 15302611 combination zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 ] +Uplifting [get_vic_screen] best 15302590 combination reg byte a [ get_vic_screen::idx#2 get_vic_screen::idx#0 get_vic_screen::idx#1 ] zp ZP_WORD:208 [ get_vic_screen::return#10 ] zp ZP_WORD:227 [ get_vic_screen::return#11 ] zp ZP_WORD:21 [ get_vic_screen::return#5 ] +Uplifting [get_plane] best 15302542 combination reg byte a [ get_plane::idx#10 get_plane::idx#1 get_plane::idx#0 ] zp ZP_DWORD:160 [ get_plane::return#16 ] zp ZP_DWORD:185 [ get_plane::return#17 ] zp ZP_DWORD:26 [ get_plane::return#14 ] +Uplifting [bitmap_line] best 15302496 combination zp ZP_BYTE:303 [ bitmap_line::y1#0 ] zp ZP_BYTE:302 [ bitmap_line::y0#0 ] reg byte x [ bitmap_line::x1#0 ] zp ZP_BYTE:300 [ bitmap_line::x0#0 ] zp ZP_BYTE:305 [ bitmap_line::yd#2 ] zp ZP_BYTE:306 [ bitmap_line::yd#1 ] zp ZP_BYTE:308 [ bitmap_line::yd#10 ] zp ZP_BYTE:309 [ bitmap_line::yd#11 ] zp ZP_BYTE:304 [ bitmap_line::xd#2 ] zp ZP_BYTE:307 [ bitmap_line::xd#1 ] Limited combination testing to 10 combinations of 186624 possible. -Uplifting [get_vic_charset] best 15296457 combination zp ZP_WORD:218 [ get_vic_charset::return#4 ] reg byte a [ get_vic_charset::idx#0 ] zp ZP_WORD:23 [ get_vic_charset::return#2 ] -Uplifting [RADIX] best 15296457 combination -Uplifting [print_ln] best 15296457 combination -Uplifting [print_cls] best 15296457 combination -Uplifting [print_set_screen] best 15296457 combination -Uplifting [keyboard_init] best 15296457 combination -Uplifting [main] best 15296457 combination -Uplifting [gfx_init] best 15296457 combination -Uplifting [gfx_init_plane_vertical2] best 15296457 combination -Uplifting [gfx_init_plane_blank] best 15296457 combination -Uplifting [gfx_init_plane_full] best 15296457 combination +Uplifting [get_vic_charset] best 15302487 combination zp ZP_WORD:218 [ get_vic_charset::return#4 ] reg byte a [ get_vic_charset::idx#0 ] zp ZP_WORD:23 [ get_vic_charset::return#2 ] +Uplifting [RADIX] best 15302487 combination +Uplifting [print_ln] best 15302487 combination +Uplifting [print_cls] best 15302487 combination +Uplifting [print_set_screen] best 15302487 combination +Uplifting [keyboard_init] best 15302487 combination +Uplifting [main] best 15302487 combination +Uplifting [gfx_init] best 15302487 combination +Uplifting [gfx_init_plane_vertical2] best 15302487 combination +Uplifting [gfx_init_plane_blank] best 15302487 combination +Uplifting [gfx_init_plane_full] best 15302487 combination Attempting to uplift remaining variables inzp ZP_BYTE:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] -Uplifting [] best 15296457 combination zp ZP_BYTE:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] +Uplifting [] best 15302487 combination zp ZP_BYTE:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:252 [ keyboard_event_scan::event_type#0 ] -Uplifting [keyboard_event_scan] best 14696457 combination reg byte a [ keyboard_event_scan::event_type#0 ] +Uplifting [keyboard_event_scan] best 14702487 combination reg byte a [ keyboard_event_scan::event_type#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:253 [ keyboard_event_scan::$23 ] -Uplifting [keyboard_event_scan] best 14096457 combination reg byte a [ keyboard_event_scan::$23 ] +Uplifting [keyboard_event_scan] best 14102487 combination reg byte a [ keyboard_event_scan::$23 ] Attempting to uplift remaining variables inzp ZP_BYTE:16 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] -Uplifting [keyboard_event_scan] best 12596457 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] +Uplifting [keyboard_event_scan] best 12602487 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] -Uplifting [keyboard_event_scan] best 12596457 combination zp ZP_BYTE:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] +Uplifting [keyboard_event_scan] best 12602487 combination zp ZP_BYTE:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Uplifting [keyboard_event_scan] best 12596457 combination zp ZP_BYTE:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] +Uplifting [keyboard_event_scan] best 12602487 combination zp ZP_BYTE:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:241 [ keyboard_event_scan::row_scan#0 ] -Uplifting [keyboard_event_scan] best 12596457 combination zp ZP_BYTE:241 [ keyboard_event_scan::row_scan#0 ] +Uplifting [keyboard_event_scan] best 12602487 combination zp ZP_BYTE:241 [ keyboard_event_scan::row_scan#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:258 [ keyboard_matrix_read::return#0 ] -Uplifting [keyboard_matrix_read] best 12566454 combination reg byte a [ keyboard_matrix_read::return#0 ] +Uplifting [keyboard_matrix_read] best 12572484 combination reg byte a [ keyboard_matrix_read::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:10 [ gfx_mode::cx#2 gfx_mode::cx#1 ] -Uplifting [gfx_mode] best 12557454 combination reg byte x [ gfx_mode::cx#2 gfx_mode::cx#1 ] +Uplifting [gfx_mode] best 12563484 combination reg byte x [ gfx_mode::cx#2 gfx_mode::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:88 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] -Uplifting [gfx_init_plane_charset8] best 12548454 combination reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] +Uplifting [gfx_init_plane_charset8] best 12554484 combination reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] -Uplifting [gfx_init_plane_charset8] best 12548454 combination zp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] +Uplifting [gfx_init_plane_charset8] best 12554484 combination zp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] -Uplifting [gfx_init_plane_charset8] best 12548454 combination zp ZP_BYTE:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] +Uplifting [gfx_init_plane_charset8] best 12554484 combination zp ZP_BYTE:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] -Uplifting [bitmap_line_xdyi] best 12548454 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] +Uplifting [bitmap_line_xdyi] best 12554484 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:110 [ 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 ] -Uplifting [bitmap_line_ydxi] best 12548454 combination zp ZP_BYTE:110 [ 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 ] +Uplifting [bitmap_line_ydxi] best 12554484 combination zp ZP_BYTE:110 [ 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 ] Attempting to uplift remaining variables inzp ZP_BYTE:116 [ 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 ] -Uplifting [bitmap_line_xdyd] best 12548454 combination zp ZP_BYTE:116 [ 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 ] +Uplifting [bitmap_line_xdyd] best 12554484 combination zp ZP_BYTE:116 [ 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 ] Attempting to uplift remaining variables inzp ZP_BYTE:122 [ 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 ] -Uplifting [bitmap_line_ydxd] best 12548454 combination zp ZP_BYTE:122 [ 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 ] +Uplifting [bitmap_line_ydxd] best 12554484 combination zp ZP_BYTE:122 [ 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 ] Attempting to uplift remaining variables inzp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] -Uplifting [form_mode] best 12548454 combination zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] +Uplifting [form_mode] best 12554484 combination zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:11 [ gfx_mode::j#2 gfx_mode::j#1 ] -Uplifting [gfx_mode] best 12547254 combination reg byte x [ gfx_mode::j#2 gfx_mode::j#1 ] +Uplifting [gfx_mode] best 12553284 combination reg byte x [ gfx_mode::j#2 gfx_mode::j#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:12 [ gfx_mode::i#2 gfx_mode::i#1 ] -Uplifting [gfx_mode] best 12546054 combination reg byte x [ gfx_mode::i#2 gfx_mode::i#1 ] +Uplifting [gfx_mode] best 12552084 combination reg byte x [ gfx_mode::i#2 gfx_mode::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] -Uplifting [] best 12546054 combination zp ZP_BYTE:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] +Uplifting [] best 12552084 combination zp ZP_BYTE:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] -Uplifting [bitmap_line_xdyi] best 12546054 combination zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] +Uplifting [bitmap_line_xdyi] best 12552084 combination zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] -Uplifting [bitmap_line_xdyd] best 12546054 combination zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] +Uplifting [bitmap_line_xdyd] best 12552084 combination zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:238 [ gfx_mode::keyboard_event#0 ] -Uplifting [gfx_mode] best 12545454 combination reg byte a [ gfx_mode::keyboard_event#0 ] +Uplifting [gfx_mode] best 12551484 combination reg byte a [ gfx_mode::keyboard_event#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:274 [ form_set_screen::$1 ] -Uplifting [form_set_screen] best 12544854 combination reg byte a [ form_set_screen::$1 ] +Uplifting [form_set_screen] best 12550884 combination reg byte a [ form_set_screen::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:331 [ gfx_init_screen3::$3 ] -Uplifting [gfx_init_screen3] best 12544254 combination reg byte a [ gfx_init_screen3::$3 ] +Uplifting [gfx_init_screen3] best 12550284 combination reg byte a [ gfx_init_screen3::$3 ] Attempting to uplift remaining variables inzp ZP_BYTE:336 [ gfx_init_screen2::$4 ] -Uplifting [gfx_init_screen2] best 12543654 combination reg byte a [ gfx_init_screen2::$4 ] +Uplifting [gfx_init_screen2] best 12549684 combination reg byte a [ gfx_init_screen2::$4 ] Attempting to uplift remaining variables inzp ZP_BYTE:338 [ gfx_init_screen1::$1 ] -Uplifting [gfx_init_screen1] best 12543054 combination reg byte a [ gfx_init_screen1::$1 ] +Uplifting [gfx_init_screen1] best 12549084 combination reg byte a [ gfx_init_screen1::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:342 [ gfx_init_screen0::$3 ] -Uplifting [gfx_init_screen0] best 12542454 combination reg byte a [ gfx_init_screen0::$3 ] +Uplifting [gfx_init_screen0] best 12548484 combination reg byte a [ gfx_init_screen0::$3 ] Attempting to uplift remaining variables inzp ZP_BYTE:143 [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ] -Uplifting [gfx_init_screen3] best 12541454 combination reg byte x [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ] +Uplifting [gfx_init_screen3] best 12547484 combination reg byte x [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:155 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] -Uplifting [gfx_init_screen0] best 12540454 combination reg byte x [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] +Uplifting [gfx_init_screen0] best 12546484 combination reg byte x [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:71 [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ] -Uplifting [gfx_init_plane_horisontal2] best 12539554 combination reg byte x [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ] +Uplifting [gfx_init_plane_horisontal2] best 12545584 combination reg byte x [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:147 [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ] -Uplifting [gfx_init_screen2] best 12538554 combination reg byte x [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ] +Uplifting [gfx_init_screen2] best 12544584 combination reg byte x [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ gfx_mode::cy#4 gfx_mode::cy#1 ] -Uplifting [gfx_mode] best 12538554 combination zp ZP_BYTE:5 [ gfx_mode::cy#4 gfx_mode::cy#1 ] +Uplifting [gfx_mode] best 12544584 combination zp ZP_BYTE:5 [ gfx_mode::cy#4 gfx_mode::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] -Uplifting [gfx_init_plane_charset8] best 12538554 combination zp ZP_BYTE:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] +Uplifting [gfx_init_plane_charset8] best 12544584 combination zp ZP_BYTE:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:333 [ gfx_init_screen2::col#0 ] -Uplifting [gfx_init_screen2] best 12538454 combination reg byte y [ gfx_init_screen2::col#0 ] +Uplifting [gfx_init_screen2] best 12544484 combination reg byte y [ gfx_init_screen2::col#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] -Uplifting [bitmap_line_xdyi] best 12538454 combination zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] +Uplifting [bitmap_line_xdyi] best 12544484 combination zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] -Uplifting [bitmap_line_ydxi] best 12538454 combination zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] +Uplifting [bitmap_line_ydxi] best 12544484 combination zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] -Uplifting [bitmap_line_xdyd] best 12538454 combination zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] +Uplifting [bitmap_line_xdyd] best 12544484 combination zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] -Uplifting [bitmap_line_ydxd] best 12538454 combination zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] +Uplifting [bitmap_line_ydxd] best 12544484 combination zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] -Uplifting [] best 12538454 combination zp ZP_BYTE:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] +Uplifting [] best 12544484 combination zp ZP_BYTE:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:329 [ gfx_init_screen3::$1 ] -Uplifting [gfx_init_screen3] best 12538454 combination zp ZP_BYTE:329 [ gfx_init_screen3::$1 ] +Uplifting [gfx_init_screen3] best 12544484 combination zp ZP_BYTE:329 [ gfx_init_screen3::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:334 [ gfx_init_screen2::col2#0 ] -Uplifting [gfx_init_screen2] best 12538454 combination zp ZP_BYTE:334 [ gfx_init_screen2::col2#0 ] +Uplifting [gfx_init_screen2] best 12544484 combination zp ZP_BYTE:334 [ gfx_init_screen2::col2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:340 [ gfx_init_screen0::$1 ] -Uplifting [gfx_init_screen0] best 12538454 combination zp ZP_BYTE:340 [ gfx_init_screen0::$1 ] +Uplifting [gfx_init_screen0] best 12544484 combination zp ZP_BYTE:340 [ gfx_init_screen0::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ 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#3 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 ] -Uplifting [gfx_mode] best 12538435 combination reg byte x [ 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#3 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 ] +Uplifting [gfx_mode] best 12544465 combination reg byte x [ 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#3 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:265 [ form_field_ptr::x#0 ] -Uplifting [form_field_ptr] best 12538435 combination zp ZP_BYTE:265 [ form_field_ptr::x#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] -Uplifting [gfx_init_vic_bitmap] best 12538435 combination zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] +Uplifting [form_field_ptr] best 12544465 combination zp ZP_BYTE:265 [ form_field_ptr::x#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ] -Uplifting [gfx_init_plane_horisontal2] best 12538435 combination zp ZP_BYTE:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ] +Uplifting [gfx_init_plane_horisontal2] best 12544465 combination zp ZP_BYTE:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ] -Uplifting [gfx_init_screen1] best 12538435 combination zp ZP_BYTE:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ] +Uplifting [gfx_init_screen1] best 12544465 combination zp ZP_BYTE:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ] -Uplifting [gfx_init_screen3] best 12538435 combination zp ZP_BYTE:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ] +Uplifting [gfx_init_screen3] best 12544465 combination zp ZP_BYTE:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] -Uplifting [gfx_init_screen0] best 12538435 combination zp ZP_BYTE:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] +Uplifting [gfx_init_screen0] best 12544465 combination zp ZP_BYTE:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ] -Uplifting [gfx_init_plane_horisontal] best 12538435 combination zp ZP_BYTE:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ] +Uplifting [gfx_init_plane_horisontal] best 12544465 combination zp ZP_BYTE:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ] -Uplifting [gfx_init_screen2] best 12538435 combination zp ZP_BYTE:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ] +Uplifting [gfx_init_screen2] best 12544465 combination zp ZP_BYTE:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 ] +Uplifting [gfx_init_vic_bitmap] best 12544465 combination zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ] -Uplifting [gfx_init_plane_8bppchunky] best 12538435 combination zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ] +Uplifting [gfx_init_plane_8bppchunky] best 12544465 combination zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] -Uplifting [bitmap_init] best 12538255 combination reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] +Uplifting [bitmap_init] best 12544285 combination reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:323 [ bitmap_init::$0 ] -Uplifting [bitmap_init] best 12538215 combination reg byte a [ bitmap_init::$0 ] +Uplifting [bitmap_init] best 12544245 combination reg byte a [ bitmap_init::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:325 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 12538155 combination reg byte a [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 12544185 combination reg byte a [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:326 [ bitmap_init::$8 ] -Uplifting [bitmap_init] best 12538095 combination reg byte a [ bitmap_init::$8 ] +Uplifting [bitmap_init] best 12544125 combination reg byte a [ bitmap_init::$8 ] Attempting to uplift remaining variables inzp ZP_BYTE:327 [ bitmap_init::$9 ] -Uplifting [bitmap_init] best 12538035 combination reg byte a [ bitmap_init::$9 ] +Uplifting [bitmap_init] best 12544065 combination reg byte a [ bitmap_init::$9 ] Attempting to uplift remaining variables inzp ZP_BYTE:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ] -Uplifting [gfx_init_plane_fill] best 12538035 combination zp ZP_BYTE:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ] +Uplifting [gfx_init_plane_fill] best 12544065 combination zp ZP_BYTE:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ] -Uplifting [gfx_init_plane_vertical] best 12538035 combination zp ZP_BYTE:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ] +Uplifting [gfx_init_plane_vertical] best 12544065 combination zp ZP_BYTE:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] -Uplifting [bitmap_clear] best 12538035 combination zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] +Uplifting [bitmap_clear] best 12544065 combination zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ] -Uplifting [gfx_init_screen4] best 12538035 combination zp ZP_BYTE:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ] +Uplifting [gfx_init_screen4] best 12544065 combination zp ZP_BYTE:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ] -Uplifting [gfx_init_charset] best 12538035 combination zp ZP_BYTE:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ] +Uplifting [gfx_init_charset] best 12544065 combination zp ZP_BYTE:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] -Uplifting [bitmap_line_xdyi] best 12538035 combination zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] +Uplifting [bitmap_line_xdyi] best 12544065 combination zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] -Uplifting [bitmap_line_ydxi] best 12538035 combination zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] +Uplifting [bitmap_line_ydxi] best 12544065 combination zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] -Uplifting [bitmap_line_xdyd] best 12538035 combination zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] +Uplifting [bitmap_line_xdyd] best 12544065 combination zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] -Uplifting [bitmap_line_ydxd] best 12538035 combination zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] +Uplifting [bitmap_line_ydxd] best 12544065 combination zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] -Uplifting [gfx_init_plane_charset8] best 12538035 combination zp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] +Uplifting [gfx_init_plane_charset8] best 12544065 combination zp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] -Uplifting [bitmap_line_xdyi] best 12538035 combination zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] +Uplifting [bitmap_line_xdyi] best 12544065 combination zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] -Uplifting [bitmap_line_ydxi] best 12538035 combination zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] +Uplifting [bitmap_line_ydxi] best 12544065 combination zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] -Uplifting [bitmap_line_xdyd] best 12538035 combination zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] +Uplifting [bitmap_line_xdyd] best 12544065 combination zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] -Uplifting [bitmap_line_ydxd] best 12538035 combination zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] +Uplifting [bitmap_line_ydxd] best 12544065 combination zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:3 [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ] -Uplifting [gfx_mode] best 12538024 combination reg byte x [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ] +Uplifting [gfx_mode] best 12544054 combination reg byte x [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] -Uplifting [bitmap_line_xdyi] best 12538024 combination zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] +Uplifting [bitmap_line_xdyi] best 12544054 combination zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] -Uplifting [bitmap_line_ydxi] best 12538024 combination zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] +Uplifting [bitmap_line_ydxi] best 12544054 combination zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] -Uplifting [bitmap_line_xdyd] best 12538024 combination zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] +Uplifting [bitmap_line_xdyd] best 12544054 combination zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] -Uplifting [bitmap_line_ydxd] best 12538024 combination zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] +Uplifting [bitmap_line_ydxd] best 12544054 combination zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:62 [ gfx_init_plane_fill::fill#6 ] -Uplifting [gfx_init_plane_fill] best 12538024 combination zp ZP_BYTE:62 [ gfx_init_plane_fill::fill#6 ] +Uplifting [gfx_init_plane_fill] best 12544054 combination zp ZP_BYTE:62 [ gfx_init_plane_fill::fill#6 ] Attempting to uplift remaining variables inzp ZP_BYTE:324 [ bitmap_init::$10 ] -Uplifting [bitmap_init] best 12538024 combination zp ZP_BYTE:324 [ bitmap_init::$10 ] +Uplifting [bitmap_init] best 12544054 combination zp ZP_BYTE:324 [ bitmap_init::$10 ] Attempting to uplift remaining variables inzp ZP_BYTE:158 [ gfx_mode::$20 ] -Uplifting [gfx_mode] best 12538018 combination reg byte a [ gfx_mode::$20 ] +Uplifting [gfx_mode] best 12544048 combination reg byte a [ gfx_mode::$20 ] Attempting to uplift remaining variables inzp ZP_BYTE:174 [ gfx_mode::$25 ] -Uplifting [gfx_mode] best 12538012 combination reg byte a [ gfx_mode::$25 ] +Uplifting [gfx_mode] best 12544042 combination reg byte a [ gfx_mode::$25 ] Attempting to uplift remaining variables inzp ZP_BYTE:175 [ gfx_mode::$27 ] -Uplifting [gfx_mode] best 12538006 combination reg byte a [ gfx_mode::$27 ] +Uplifting [gfx_mode] best 12544036 combination reg byte a [ gfx_mode::$27 ] Attempting to uplift remaining variables inzp ZP_BYTE:178 [ gfx_mode::$29 ] -Uplifting [gfx_mode] best 12538000 combination reg byte a [ gfx_mode::$29 ] +Uplifting [gfx_mode] best 12544030 combination reg byte a [ gfx_mode::$29 ] Attempting to uplift remaining variables inzp ZP_BYTE:179 [ gfx_mode::$30 ] -Uplifting [gfx_mode] best 12537994 combination reg byte a [ gfx_mode::$30 ] +Uplifting [gfx_mode] best 12544024 combination reg byte a [ gfx_mode::$30 ] Attempting to uplift remaining variables inzp ZP_BYTE:180 [ gfx_mode::$31 ] -Uplifting [gfx_mode] best 12537988 combination reg byte a [ gfx_mode::$31 ] +Uplifting [gfx_mode] best 12544018 combination reg byte a [ gfx_mode::$31 ] Attempting to uplift remaining variables inzp ZP_BYTE:181 [ gfx_mode::$32 ] -Uplifting [gfx_mode] best 12537982 combination reg byte a [ gfx_mode::$32 ] +Uplifting [gfx_mode] best 12544012 combination reg byte a [ gfx_mode::$32 ] Attempting to uplift remaining variables inzp ZP_BYTE:182 [ gfx_mode::$33 ] -Uplifting [gfx_mode] best 12537976 combination reg byte a [ gfx_mode::$33 ] +Uplifting [gfx_mode] best 12544006 combination reg byte a [ gfx_mode::$33 ] Attempting to uplift remaining variables inzp ZP_BYTE:183 [ gfx_mode::$34 ] -Uplifting [gfx_mode] best 12537970 combination reg byte a [ gfx_mode::$34 ] +Uplifting [gfx_mode] best 12544000 combination reg byte a [ gfx_mode::$34 ] Attempting to uplift remaining variables inzp ZP_BYTE:199 [ gfx_mode::$39 ] -Uplifting [gfx_mode] best 12537964 combination reg byte a [ gfx_mode::$39 ] +Uplifting [gfx_mode] best 12543994 combination reg byte a [ gfx_mode::$39 ] Attempting to uplift remaining variables inzp ZP_BYTE:200 [ gfx_mode::$41 ] -Uplifting [gfx_mode] best 12537958 combination reg byte a [ gfx_mode::$41 ] +Uplifting [gfx_mode] best 12543988 combination reg byte a [ gfx_mode::$41 ] Attempting to uplift remaining variables inzp ZP_BYTE:203 [ gfx_mode::$43 ] -Uplifting [gfx_mode] best 12537952 combination reg byte a [ gfx_mode::$43 ] +Uplifting [gfx_mode] best 12543982 combination reg byte a [ gfx_mode::$43 ] Attempting to uplift remaining variables inzp ZP_BYTE:204 [ gfx_mode::$44 ] -Uplifting [gfx_mode] best 12537946 combination reg byte a [ gfx_mode::$44 ] +Uplifting [gfx_mode] best 12543976 combination reg byte a [ gfx_mode::$44 ] Attempting to uplift remaining variables inzp ZP_BYTE:205 [ gfx_mode::$45 ] -Uplifting [gfx_mode] best 12537940 combination reg byte a [ gfx_mode::$45 ] +Uplifting [gfx_mode] best 12543970 combination reg byte a [ gfx_mode::$45 ] Attempting to uplift remaining variables inzp ZP_BYTE:206 [ gfx_mode::$46 ] -Uplifting [gfx_mode] best 12537934 combination reg byte a [ gfx_mode::$46 ] +Uplifting [gfx_mode] best 12543964 combination reg byte a [ gfx_mode::$46 ] Attempting to uplift remaining variables inzp ZP_BYTE:207 [ gfx_mode::$47 ] -Uplifting [gfx_mode] best 12537928 combination reg byte a [ gfx_mode::$47 ] +Uplifting [gfx_mode] best 12543958 combination reg byte a [ gfx_mode::$47 ] Attempting to uplift remaining variables inzp ZP_BYTE:224 [ gfx_mode::$60 ] -Uplifting [gfx_mode] best 12537922 combination reg byte a [ gfx_mode::$60 ] +Uplifting [gfx_mode] best 12543952 combination reg byte a [ gfx_mode::$60 ] Attempting to uplift remaining variables inzp ZP_BYTE:225 [ gfx_mode::$61 ] -Uplifting [gfx_mode] best 12537916 combination reg byte a [ gfx_mode::$61 ] +Uplifting [gfx_mode] best 12543946 combination reg byte a [ gfx_mode::$61 ] Attempting to uplift remaining variables inzp ZP_BYTE:226 [ gfx_mode::$62 ] -Uplifting [gfx_mode] best 12537910 combination reg byte a [ gfx_mode::$62 ] +Uplifting [gfx_mode] best 12543940 combination reg byte a [ gfx_mode::$62 ] Attempting to uplift remaining variables inzp ZP_BYTE:229 [ gfx_mode::$64 ] -Uplifting [gfx_mode] best 12537904 combination reg byte a [ gfx_mode::$64 ] +Uplifting [gfx_mode] best 12543934 combination reg byte a [ gfx_mode::$64 ] Attempting to uplift remaining variables inzp ZP_BYTE:230 [ gfx_mode::$65 ] -Uplifting [gfx_mode] best 12537898 combination reg byte a [ gfx_mode::$65 ] +Uplifting [gfx_mode] best 12543928 combination reg byte a [ gfx_mode::$65 ] Attempting to uplift remaining variables inzp ZP_BYTE:231 [ gfx_mode::$66 ] -Uplifting [gfx_mode] best 12537892 combination reg byte a [ gfx_mode::$66 ] +Uplifting [gfx_mode] best 12543922 combination reg byte a [ gfx_mode::$66 ] Attempting to uplift remaining variables inzp ZP_BYTE:232 [ gfx_mode::$67 ] -Uplifting [gfx_mode] best 12537886 combination reg byte a [ gfx_mode::$67 ] +Uplifting [gfx_mode] best 12543916 combination reg byte a [ gfx_mode::$67 ] Attempting to uplift remaining variables inzp ZP_BYTE:233 [ gfx_mode::$68 ] -Uplifting [gfx_mode] best 12537880 combination reg byte a [ gfx_mode::$68 ] +Uplifting [gfx_mode] best 12543910 combination reg byte a [ gfx_mode::$68 ] Attempting to uplift remaining variables inzp ZP_BYTE:234 [ gfx_mode::$69 ] -Uplifting [gfx_mode] best 12537874 combination reg byte a [ gfx_mode::$69 ] +Uplifting [gfx_mode] best 12543904 combination reg byte a [ gfx_mode::$69 ] Attempting to uplift remaining variables inzp ZP_BYTE:235 [ gfx_mode::$70 ] -Uplifting [gfx_mode] best 12537868 combination reg byte a [ gfx_mode::$70 ] +Uplifting [gfx_mode] best 12543898 combination reg byte a [ gfx_mode::$70 ] Attempting to uplift remaining variables inzp ZP_BYTE:236 [ gfx_mode::$71 ] -Uplifting [gfx_mode] best 12537862 combination reg byte a [ gfx_mode::$71 ] +Uplifting [gfx_mode] best 12543892 combination reg byte a [ gfx_mode::$71 ] Attempting to uplift remaining variables inzp ZP_BYTE:243 [ keyboard_event_scan::$0 ] -Uplifting [keyboard_event_scan] best 12537856 combination reg byte a [ keyboard_event_scan::$0 ] +Uplifting [keyboard_event_scan] best 12543886 combination reg byte a [ keyboard_event_scan::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:245 [ keyboard_event_scan::$3 ] -Uplifting [keyboard_event_scan] best 12537850 combination reg byte a [ keyboard_event_scan::$3 ] +Uplifting [keyboard_event_scan] best 12543880 combination reg byte a [ keyboard_event_scan::$3 ] Attempting to uplift remaining variables inzp ZP_BYTE:246 [ keyboard_event_pressed::return#2 ] -Uplifting [keyboard_event_pressed] best 12537844 combination reg byte a [ keyboard_event_pressed::return#2 ] +Uplifting [keyboard_event_pressed] best 12543874 combination reg byte a [ keyboard_event_pressed::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:247 [ keyboard_event_scan::$6 ] -Uplifting [keyboard_event_scan] best 12537838 combination reg byte a [ keyboard_event_scan::$6 ] +Uplifting [keyboard_event_scan] best 12543868 combination reg byte a [ keyboard_event_scan::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:248 [ keyboard_event_pressed::return#3 ] -Uplifting [keyboard_event_pressed] best 12537832 combination reg byte a [ keyboard_event_pressed::return#3 ] +Uplifting [keyboard_event_pressed] best 12543862 combination reg byte a [ keyboard_event_pressed::return#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:249 [ keyboard_event_scan::$9 ] -Uplifting [keyboard_event_scan] best 12537826 combination reg byte a [ keyboard_event_scan::$9 ] +Uplifting [keyboard_event_scan] best 12543856 combination reg byte a [ keyboard_event_scan::$9 ] Attempting to uplift remaining variables inzp ZP_BYTE:254 [ keyboard_event_pressed::$0 ] -Uplifting [keyboard_event_pressed] best 12537822 combination reg byte a [ keyboard_event_pressed::$0 ] +Uplifting [keyboard_event_pressed] best 12543852 combination reg byte a [ keyboard_event_pressed::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:256 [ keyboard_event_pressed::$1 ] -Uplifting [keyboard_event_pressed] best 12537818 combination reg byte a [ keyboard_event_pressed::$1 ] +Uplifting [keyboard_event_pressed] best 12543848 combination reg byte a [ keyboard_event_pressed::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:266 [ form_control::$13 ] -Uplifting [form_control] best 12537812 combination reg byte a [ form_control::$13 ] +Uplifting [form_control] best 12543842 combination reg byte a [ form_control::$13 ] Attempting to uplift remaining variables inzp ZP_BYTE:267 [ keyboard_event_get::return#4 ] -Uplifting [keyboard_event_get] best 12537806 combination reg byte a [ keyboard_event_get::return#4 ] +Uplifting [keyboard_event_get] best 12543836 combination reg byte a [ keyboard_event_get::return#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:269 [ form_control::$15 ] -Uplifting [form_control] best 12537800 combination reg byte a [ form_control::$15 ] +Uplifting [form_control] best 12543830 combination reg byte a [ form_control::$15 ] Attempting to uplift remaining variables inzp ZP_BYTE:270 [ form_control::$16 ] -Uplifting [form_control] best 12537796 combination reg byte a [ form_control::$16 ] +Uplifting [form_control] best 12543826 combination reg byte a [ form_control::$16 ] Attempting to uplift remaining variables inzp ZP_BYTE:271 [ form_control::$24 ] -Uplifting [form_control] best 12537792 combination reg byte a [ form_control::$24 ] +Uplifting [form_control] best 12543822 combination reg byte a [ form_control::$24 ] Attempting to uplift remaining variables inzp ZP_BYTE:272 [ form_control::$14 ] -Uplifting [form_control] best 12537786 combination reg byte a [ form_control::$14 ] +Uplifting [form_control] best 12543816 combination reg byte a [ form_control::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:317 [ bitmap_plot::$1 ] -Uplifting [bitmap_plot] best 12537780 combination reg byte a [ bitmap_plot::$1 ] +Uplifting [bitmap_plot] best 12543810 combination reg byte a [ bitmap_plot::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:268 [ form_control::key_event#0 ] -Uplifting [form_control] best 12537768 combination reg byte a [ form_control::key_event#0 ] +Uplifting [form_control] best 12543798 combination reg byte a [ form_control::key_event#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ gfx_mode::vic_control2#2 ] -Uplifting [gfx_mode] best 12537759 combination reg byte a [ gfx_mode::vic_control2#2 ] +Uplifting [gfx_mode] best 12543789 combination reg byte a [ gfx_mode::vic_control2#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:255 [ keyboard_event_pressed::row_bits#0 ] -Uplifting [keyboard_event_pressed] best 12537759 combination zp ZP_BYTE:255 [ keyboard_event_pressed::row_bits#0 ] +Uplifting [keyboard_event_pressed] best 12543789 combination zp ZP_BYTE:255 [ keyboard_event_pressed::row_bits#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:303 [ bitmap_line::y1#0 ] -Uplifting [bitmap_line] best 12537759 combination zp ZP_BYTE:303 [ bitmap_line::y1#0 ] +Uplifting [bitmap_line] best 12543789 combination zp ZP_BYTE:303 [ bitmap_line::y1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:302 [ bitmap_line::y0#0 ] -Uplifting [bitmap_line] best 12537759 combination zp ZP_BYTE:302 [ bitmap_line::y0#0 ] +Uplifting [bitmap_line] best 12543789 combination zp ZP_BYTE:302 [ bitmap_line::y0#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:257 [ keyboard_event_pressed::return#10 ] -Uplifting [keyboard_event_pressed] best 12537744 combination reg byte a [ keyboard_event_pressed::return#10 ] +Uplifting [keyboard_event_pressed] best 12543774 combination reg byte a [ keyboard_event_pressed::return#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:19 [ keyboard_event_pressed::keycode#4 ] -Uplifting [keyboard_event_pressed] best 12537744 combination zp ZP_BYTE:19 [ keyboard_event_pressed::keycode#4 ] +Uplifting [keyboard_event_pressed] best 12543774 combination zp ZP_BYTE:19 [ keyboard_event_pressed::keycode#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:300 [ bitmap_line::x0#0 ] -Uplifting [bitmap_line] best 12537744 combination zp ZP_BYTE:300 [ bitmap_line::x0#0 ] +Uplifting [bitmap_line] best 12543774 combination zp ZP_BYTE:300 [ bitmap_line::x0#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:305 [ bitmap_line::yd#2 ] -Uplifting [bitmap_line] best 12537734 combination reg byte y [ bitmap_line::yd#2 ] +Uplifting [bitmap_line] best 12543764 combination reg byte y [ bitmap_line::yd#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:306 [ bitmap_line::yd#1 ] -Uplifting [bitmap_line] best 12537724 combination reg byte y [ bitmap_line::yd#1 ] +Uplifting [bitmap_line] best 12543754 combination reg byte y [ bitmap_line::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:308 [ bitmap_line::yd#10 ] -Uplifting [bitmap_line] best 12537714 combination reg byte y [ bitmap_line::yd#10 ] +Uplifting [bitmap_line] best 12543744 combination reg byte y [ bitmap_line::yd#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:309 [ bitmap_line::yd#11 ] -Uplifting [bitmap_line] best 12537704 combination reg byte y [ bitmap_line::yd#11 ] +Uplifting [bitmap_line] best 12543734 combination reg byte y [ bitmap_line::yd#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:159 [ gfx_mode::plane_a_offs#0 ] -Uplifting [gfx_mode] best 12537702 combination reg byte x [ gfx_mode::plane_a_offs#0 ] +Uplifting [gfx_mode] best 12543732 combination reg byte x [ gfx_mode::plane_a_offs#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:184 [ gfx_mode::plane_b_offs#0 ] -Uplifting [gfx_mode] best 12537700 combination reg byte x [ gfx_mode::plane_b_offs#0 ] +Uplifting [gfx_mode] best 12543730 combination reg byte x [ gfx_mode::plane_b_offs#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:304 [ bitmap_line::xd#2 ] -Uplifting [bitmap_line] best 12537700 combination zp ZP_BYTE:304 [ bitmap_line::xd#2 ] +Uplifting [bitmap_line] best 12543730 combination zp ZP_BYTE:304 [ bitmap_line::xd#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:307 [ bitmap_line::xd#1 ] -Uplifting [bitmap_line] best 12537700 combination zp ZP_BYTE:307 [ bitmap_line::xd#1 ] +Uplifting [bitmap_line] best 12543730 combination zp ZP_BYTE:307 [ bitmap_line::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:216 [ gfx_mode::$56 ] -Uplifting [gfx_mode] best 12537700 combination zp ZP_BYTE:216 [ gfx_mode::$56 ] +Uplifting [gfx_mode] best 12543730 combination zp ZP_BYTE:216 [ gfx_mode::$56 ] Coalescing zero page register [ zp ZP_WORD:6 [ gfx_mode::vic_colors#2 gfx_mode::vic_colors#3 gfx_mode::vic_colors#1 gfx_mode::vic_colors#0 ] ] with [ zp ZP_WORD:227 [ get_vic_screen::return#11 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:21 [ get_vic_screen::return#5 ] ] with [ zp ZP_WORD:208 [ get_vic_screen::return#10 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:23 [ get_vic_charset::return#2 ] ] with [ zp ZP_WORD:218 [ get_vic_charset::return#4 ] ] - score: 1 @@ -22526,7 +22556,7 @@ Coalescing zero page register [ zp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gf Coalescing zero page register [ zp ZP_WORD:81 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] ] with [ zp ZP_WORD:77 [ 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 ] ] Coalescing zero page register [ zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ] ] with [ zp ZP_BYTE:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] ] Coalescing zero page register [ zp ZP_WORD:91 [ gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 ] ] with [ zp ZP_WORD:85 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] ] with [ zp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 ] ] with [ zp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] ] Coalescing zero page register [ zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] ] with [ zp ZP_BYTE:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] ] Coalescing zero page register [ zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] ] with [ zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] ] Coalescing zero page register [ zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 bitmap_line::y1#0 ] ] with [ zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] ] @@ -22558,7 +22588,7 @@ Coalescing zero page register [ zp ZP_WORD:64 [ gfx_init_plane_fill::gfxb#2 gfx_ Coalescing zero page register [ zp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ] ] with [ zp ZP_BYTE:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 gfx_mode::cy#4 gfx_mode::cy#1 ] ] Coalescing zero page register [ zp ZP_WORD:81 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#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 ] ] with [ zp ZP_WORD:73 [ gfx_init_plane_vertical::gfxb#2 gfx_init_plane_vertical::gfxb#3 gfx_init_plane_vertical::gfxb#1 gfx_init_plane_horisontal2::gfxa#2 gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::gfxa#1 ] ] Coalescing zero page register [ zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] ] with [ zp ZP_BYTE:19 [ keyboard_event_pressed::keycode#4 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] ] with [ zp ZP_BYTE:62 [ gfx_init_plane_fill::fill#6 keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] ] +Coalescing zero page register [ zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] ] with [ zp ZP_BYTE:62 [ gfx_init_plane_fill::fill#6 keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] ] Coalescing zero page register [ zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#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 ] ] with [ zp ZP_BYTE:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] ] Coalescing zero page register [ zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] ] with [ zp ZP_BYTE:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] ] Coalescing zero page register [ zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 bitmap_line::y1#0 bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] ] with [ zp ZP_BYTE:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] ] @@ -22584,7 +22614,7 @@ Coalescing zero page register [ zp ZP_WORD:284 [ gfx_init_plane_fill::$1 gfx_mod Coalescing zero page register [ zp ZP_BYTE:340 [ gfx_init_screen0::$1 gfx_init_screen2::col2#0 bitmap_init::$10 keyboard_event_pressed::row_bits#0 ] ] with [ zp ZP_BYTE:241 [ keyboard_event_scan::row_scan#0 gfx_mode::$56 bitmap_clear::y#4 bitmap_clear::y#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] ] Allocated (was zp ZP_DWORD:58) zp ZP_DWORD:2 [ gfx_init_plane_fill::plane_addr#3 get_plane::return#14 get_plane::return#16 get_plane::return#17 gfx_mode::$22 gfx_mode::plane_a#0 gfx_mode::$36 gfx_mode::plane_b#0 ] Allocated (was zp ZP_WORD:81) zp ZP_WORD:6 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#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_vertical::gfxb#2 gfx_init_plane_vertical::gfxb#3 gfx_init_plane_vertical::gfxb#1 gfx_init_plane_horisontal2::gfxa#2 gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::gfxa#1 print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 form_set_screen::line#2 form_set_screen::line#1 render_preset_name::name#13 print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 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::$53 gfx_mode::$54 gfx_mode::$55 ] -Allocated (was zp ZP_BYTE:96) zp ZP_BYTE:8 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 gfx_init_plane_fill::fill#6 keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] +Allocated (was zp ZP_BYTE:96) zp ZP_BYTE:8 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 gfx_init_plane_fill::fill#6 keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] Allocated (was zp ZP_BYTE:106) zp ZP_BYTE:9 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] Allocated (was zp ZP_BYTE:118) zp ZP_BYTE:10 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 keyboard_event_scan::row#2 keyboard_event_scan::row#1 gfx_mode::cy#4 gfx_mode::cy#1 ] Allocated (was zp ZP_WORD:133) zp ZP_WORD:11 [ gfx_init_charset::chargen#2 gfx_init_charset::chargen#3 gfx_init_charset::chargen#1 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#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 memset::dst#2 memset::dst#4 memset::dst#1 memset::str#0 print_char_cursor#20 print_char_cursor#22 print_char_cursor#73 print_char_cursor#74 print_char_cursor#38 print_char_cursor#1 print_str_at::at#2 print_str_at::at#0 gfx_mode::col#2 gfx_mode::col#3 gfx_mode::col#1 ] @@ -24700,25 +24730,19 @@ print_str_at: { // form_render_values // Render all form values from the form_fields_val array form_render_values: { - // [329] phi from form_render_values to form_render_values::@1 [phi:form_render_values->form_render_values::@1] - b1_from_form_render_values: - // [329] phi (byte) form_render_values::idx#2 = (byte) 0 [phi:form_render_values->form_render_values::@1#0] -- vbuxx=vbuc1 + // [329] phi from form_render_values to form_render_values::@2 [phi:form_render_values->form_render_values::@2] + b2_from_form_render_values: + // [329] phi (byte) form_render_values::idx#5 = (byte) 0 [phi:form_render_values->form_render_values::@2#0] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // form_render_values::@1 - b1: - // [330] if((byte) form_render_values::idx#2<(const byte) form_fields_cnt#0) goto form_render_values::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #form_fields_cnt - bcc b2 - jmp breturn - // form_render_values::@return - breturn: - // [331] return - rts + jmp b2 + // [329] phi from form_render_values::@1 to form_render_values::@2 [phi:form_render_values::@1->form_render_values::@2] + b2_from_b1: + // [329] phi (byte) form_render_values::idx#5 = (byte) form_render_values::idx#1 [phi:form_render_values::@1->form_render_values::@2#0] -- register_copy + jmp b2 // form_render_values::@2 b2: - // [332] (byte) form_field_ptr::field_idx#0 ← (byte) form_render_values::idx#2 - // [333] call form_field_ptr + // [330] (byte) form_field_ptr::field_idx#0 ← (byte) form_render_values::idx#5 + // [331] call form_field_ptr // [336] phi from form_render_values::@2 to form_field_ptr [phi:form_render_values::@2->form_field_ptr] form_field_ptr_from_b2: // [336] phi (byte) form_field_ptr::field_idx#2 = (byte) form_field_ptr::field_idx#0 [phi:form_render_values::@2->form_field_ptr#0] -- register_copy @@ -24726,17 +24750,24 @@ form_render_values: { jmp b3 // form_render_values::@3 b3: - // [334] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#2)) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_pbuc2_derefidx_vbuxx + // [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_pbuc2_derefidx_vbuxx ldy form_fields_val,x lda print_hextab,y ldy form_field_ptr.x sta (form_field_ptr.line),y - // [335] (byte) form_render_values::idx#1 ← ++ (byte) form_render_values::idx#2 -- vbuxx=_inc_vbuxx + // [333] (byte) form_render_values::idx#1 ← ++ (byte) form_render_values::idx#5 -- vbuxx=_inc_vbuxx inx - // [329] phi from form_render_values::@3 to form_render_values::@1 [phi:form_render_values::@3->form_render_values::@1] - b1_from_b3: - // [329] phi (byte) form_render_values::idx#2 = (byte) form_render_values::idx#1 [phi:form_render_values::@3->form_render_values::@1#0] -- register_copy jmp b1 + // form_render_values::@1 + b1: + // [334] if((byte) form_render_values::idx#1<(const byte) form_fields_cnt#0) goto form_render_values::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #form_fields_cnt + bcc b2_from_b1 + jmp breturn + // form_render_values::@return + breturn: + // [335] return + rts } // form_field_ptr // Get the screen address of a form field @@ -24927,33 +24958,34 @@ apply_preset: { jmp b2 // apply_preset::@2 b2: - // [354] phi from apply_preset::@2 to apply_preset::@13 [phi:apply_preset::@2->apply_preset::@13] - b13_from_b2: - // [354] phi (byte) apply_preset::i#2 = (byte) 0 [phi:apply_preset::@2->apply_preset::@13#0] -- vbuyy=vbuc1 + // [354] phi from apply_preset::@2 to apply_preset::@14 [phi:apply_preset::@2->apply_preset::@14] + b14_from_b2: + // [354] phi (byte) apply_preset::i#4 = (byte) 0 [phi:apply_preset::@2->apply_preset::@14#0] -- vbuyy=vbuc1 ldy #0 + jmp b14 + // [354] phi from apply_preset::@13 to apply_preset::@14 [phi:apply_preset::@13->apply_preset::@14] + b14_from_b13: + // [354] phi (byte) apply_preset::i#4 = (byte) apply_preset::i#1 [phi:apply_preset::@13->apply_preset::@14#0] -- register_copy + jmp b14 + // apply_preset::@14 + b14: + // [355] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#4) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#4) -- pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuyy + lda (preset),y + sta form_fields_val,y + // [356] (byte) apply_preset::i#1 ← ++ (byte) apply_preset::i#4 -- vbuyy=_inc_vbuyy + iny jmp b13 // Copy preset values into the fields // apply_preset::@13 b13: - // [355] if((byte) apply_preset::i#2!=(const byte) form_fields_cnt#0) goto apply_preset::@14 -- vbuyy_neq_vbuc1_then_la1 + // [357] if((byte) apply_preset::i#1!=(const byte) form_fields_cnt#0) goto apply_preset::@14 -- vbuyy_neq_vbuc1_then_la1 cpy #form_fields_cnt - bne b14 + bne b14_from_b13 jmp breturn // apply_preset::@return breturn: - // [356] return + // [358] return rts - // apply_preset::@14 - b14: - // [357] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#2) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#2) -- pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuyy - lda (preset),y - sta form_fields_val,y - // [358] (byte) apply_preset::i#1 ← ++ (byte) apply_preset::i#2 -- vbuyy=_inc_vbuyy - iny - // [354] phi from apply_preset::@14 to apply_preset::@13 [phi:apply_preset::@14->apply_preset::@13] - b13_from_b14: - // [354] phi (byte) apply_preset::i#2 = (byte) apply_preset::i#1 [phi:apply_preset::@14->apply_preset::@13#0] -- register_copy - jmp b13 } // form_control // Reads keyboard and allows the user to navigate and change the fields of the form @@ -26444,51 +26476,52 @@ gfx_init_vic_bitmap: { b3: // [605] call bitmap_clear jsr bitmap_clear - // [606] phi from gfx_init_vic_bitmap::@3 to gfx_init_vic_bitmap::@1 [phi:gfx_init_vic_bitmap::@3->gfx_init_vic_bitmap::@1] - b1_from_b3: - // [606] phi (byte) gfx_init_vic_bitmap::l#2 = (byte) 0 [phi:gfx_init_vic_bitmap::@3->gfx_init_vic_bitmap::@1#0] -- vbuz1=vbuc1 + // [606] phi from gfx_init_vic_bitmap::@3 to gfx_init_vic_bitmap::@2 [phi:gfx_init_vic_bitmap::@3->gfx_init_vic_bitmap::@2] + b2_from_b3: + // [606] phi (byte) gfx_init_vic_bitmap::l#5 = (byte) 0 [phi:gfx_init_vic_bitmap::@3->gfx_init_vic_bitmap::@2#0] -- vbuz1=vbuc1 lda #0 sta l - jmp b1 - // gfx_init_vic_bitmap::@1 - b1: - // [607] if((byte) gfx_init_vic_bitmap::l#2<(const byte) gfx_init_vic_bitmap::lines_cnt#0) goto gfx_init_vic_bitmap::@2 -- vbuz1_lt_vbuc1_then_la1 - lda l - cmp #lines_cnt - bcc b2 - jmp breturn - // gfx_init_vic_bitmap::@return - breturn: - // [608] return - rts + jmp b2 + // [606] phi from gfx_init_vic_bitmap::@1 to gfx_init_vic_bitmap::@2 [phi:gfx_init_vic_bitmap::@1->gfx_init_vic_bitmap::@2] + b2_from_b1: + // [606] phi (byte) gfx_init_vic_bitmap::l#5 = (byte) gfx_init_vic_bitmap::l#1 [phi:gfx_init_vic_bitmap::@1->gfx_init_vic_bitmap::@2#0] -- register_copy + jmp b2 // gfx_init_vic_bitmap::@2 b2: - // [609] (byte) bitmap_line::x0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0 + (byte) gfx_init_vic_bitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [607] (byte) bitmap_line::x0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0 + (byte) gfx_init_vic_bitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_x,y sta bitmap_line.x0 - // [610] (byte) bitmap_line::x1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#2) -- vbuxx=pbuc1_derefidx_vbuz1 + // [608] (byte) bitmap_line::x1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#5) -- vbuxx=pbuc1_derefidx_vbuz1 ldy l ldx lines_x+1,y - // [611] (byte) bitmap_line::y0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0 + (byte) gfx_init_vic_bitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [609] (byte) bitmap_line::y0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0 + (byte) gfx_init_vic_bitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_y,y sta bitmap_line.y0 - // [612] (byte) bitmap_line::y1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [610] (byte) bitmap_line::y1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_y+1,y sta bitmap_line.y1 - // [613] call bitmap_line + // [611] call bitmap_line jsr bitmap_line jmp b4 // gfx_init_vic_bitmap::@4 b4: - // [614] (byte) gfx_init_vic_bitmap::l#1 ← ++ (byte) gfx_init_vic_bitmap::l#2 -- vbuz1=_inc_vbuz1 + // [612] (byte) gfx_init_vic_bitmap::l#1 ← ++ (byte) gfx_init_vic_bitmap::l#5 -- vbuz1=_inc_vbuz1 inc l - // [606] phi from gfx_init_vic_bitmap::@4 to gfx_init_vic_bitmap::@1 [phi:gfx_init_vic_bitmap::@4->gfx_init_vic_bitmap::@1] - b1_from_b4: - // [606] phi (byte) gfx_init_vic_bitmap::l#2 = (byte) gfx_init_vic_bitmap::l#1 [phi:gfx_init_vic_bitmap::@4->gfx_init_vic_bitmap::@1#0] -- register_copy jmp b1 + // gfx_init_vic_bitmap::@1 + b1: + // [613] if((byte) gfx_init_vic_bitmap::l#1<(const byte) gfx_init_vic_bitmap::lines_cnt#0) goto gfx_init_vic_bitmap::@2 -- vbuz1_lt_vbuc1_then_la1 + lda l + cmp #lines_cnt + bcc b2_from_b1 + jmp breturn + // gfx_init_vic_bitmap::@return + breturn: + // [614] return + rts lines_x: .byte 0, $ff, $ff, 0, 0, $80, $ff, $80, 0, $80 lines_y: .byte 0, 0, $c7, $c7, 0, 0, $64, $c7, $64, 0 } @@ -27941,9 +27974,10 @@ Removing instruction jmp b2 Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn +Removing instruction jmp b2 +Removing instruction jmp b3 Removing instruction jmp b1 Removing instruction jmp breturn -Removing instruction jmp b3 Removing instruction jmp breturn Removing instruction jmp b3 Removing instruction jmp b4 @@ -27957,6 +27991,7 @@ Removing instruction jmp b11 Removing instruction jmp b12 Removing instruction jmp b1 Removing instruction jmp b2 +Removing instruction jmp b14 Removing instruction jmp b13 Removing instruction jmp breturn Removing instruction jmp b18 @@ -28055,9 +28090,10 @@ Removing instruction jmp b5 Removing instruction jmp b6 Removing instruction jmp breturn Removing instruction jmp b3 +Removing instruction jmp b2 +Removing instruction jmp b4 Removing instruction jmp b1 Removing instruction jmp breturn -Removing instruction jmp b4 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp b4 @@ -28177,8 +28213,10 @@ Replacing label b1_from_b1 with b1 Replacing label b3_from_b19 with b3_from_b6 Replacing label b2_from_render_preset_name with b2_from_b12 Replacing label b1_from_b12 with b1 +Replacing label b2_from_b1 with b2 Replacing label b2_from_apply_preset with b2_from_b12 Replacing label b1_from_b12 with b1 +Replacing label b14_from_b13 with b14 Replacing label b21_from_b18 with b1 Replacing label b22_from_b9 with b14 Replacing label b23_from_b13 with b23 @@ -28210,6 +28248,7 @@ Replacing label b3_from_b2 with b3 Replacing label b2_from_b3 with b2 Replacing label b2_from_b3 with b2 Replacing label b1_from_b5 with b1 +Replacing label b2_from_b1 with b2 Replacing label b2_from_b4 with b2 Replacing label b1_from_b2 with b1 Replacing label b2_from_b4 with b2 @@ -28321,11 +28360,13 @@ Removing instruction b2_from_render_preset_name: Removing instruction b1_from_b12: Removing instruction b2_from_b1: Removing instruction print_str_at_from_b2: +Removing instruction b2_from_b1: Removing instruction form_field_ptr_from_b2: Removing instruction b2_from_apply_preset: Removing instruction b1_from_b12: Removing instruction b2_from_b1: -Removing instruction b13_from_b2: +Removing instruction b14_from_b2: +Removing instruction b14_from_b13: Removing instruction b21_from_b18: Removing instruction b21: Removing instruction b1_from_b21: @@ -28414,6 +28455,7 @@ Removing instruction b3_from_b2: Removing instruction b6_from_b5: Removing instruction dtvSetCpuBankSegment1_from_b6: Removing instruction b3_from_gfx_init_vic_bitmap: +Removing instruction b2_from_b1: Removing instruction b1_from_bitmap_line_xdyi: Removing instruction b1_from_b2: Removing instruction b2_from_b3: @@ -28564,10 +28606,10 @@ Removing instruction breturn: Removing instruction b1_from_print_str_at: Removing instruction breturn: Removing instruction b1_from_b2: -Removing instruction b1_from_form_render_values: -Removing instruction breturn: +Removing instruction b2_from_form_render_values: Removing instruction b3: -Removing instruction b1_from_b3: +Removing instruction b1: +Removing instruction breturn: Removing instruction breturn: Removing instruction b3: Removing instruction b4: @@ -28579,8 +28621,8 @@ Removing instruction b9: Removing instruction b10: Removing instruction b11: Removing instruction b12: +Removing instruction b13: Removing instruction breturn: -Removing instruction b13_from_b14: Removing instruction form_field_ptr_from_form_control: Removing instruction b18: Removing instruction b1_from_b18: @@ -28675,10 +28717,10 @@ Removing instruction b6: Removing instruction breturn: Removing instruction bitmap_init_from_gfx_init_vic_bitmap: Removing instruction b3: -Removing instruction b1_from_b3: -Removing instruction breturn: +Removing instruction b2_from_b3: Removing instruction b4: -Removing instruction b1_from_b4: +Removing instruction b1: +Removing instruction breturn: Removing instruction b2: Removing instruction b3: Removing instruction b4: @@ -28830,6 +28872,8 @@ Removing instruction jmp b23 Removing instruction jmp b24 Removing instruction jmp b7 Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b14 Removing instruction jmp b1 Removing instruction jmp b14 Removing instruction jmp b1 @@ -28847,6 +28891,7 @@ Removing instruction jmp b3 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b1 @@ -28895,7 +28940,7 @@ Fixing long branch [722] beq b11 to bne Fixing long branch [726] beq b12 to bne Fixing long branch [730] beq b13 to bne Fixing long branch [734] beq b14 to bne -Fixing long branch [1286] bmi b2 to bpl +Fixing long branch [1282] bmi b2 to bpl FINAL SYMBOL TABLE (label) @1 @@ -29098,8 +29143,8 @@ FINAL SYMBOL TABLE (label) apply_preset::@9 (label) apply_preset::@return (byte) apply_preset::i -(byte) apply_preset::i#1 reg byte y 2002.0 -(byte) apply_preset::i#2 reg byte y 1668.3333333333335 +(byte) apply_preset::i#1 reg byte y 1501.5 +(byte) apply_preset::i#4 reg byte y 2002.0 (byte) apply_preset::idx (byte) apply_preset::idx#0 reg byte a 11.18181818181818 (byte*) apply_preset::preset @@ -29510,8 +29555,8 @@ FINAL SYMBOL TABLE (label) form_render_values::@return (byte*) form_render_values::field (byte) form_render_values::idx -(byte) form_render_values::idx#1 reg byte x 2002.0 -(byte) form_render_values::idx#2 reg byte x 1001.0 +(byte) form_render_values::idx#1 reg byte x 1501.5 +(byte) form_render_values::idx#5 reg byte x 1001.0 (void()) form_set_screen((byte*) form_set_screen::screen) (byte~) form_set_screen::$0 reg byte a 202.0 (byte~) form_set_screen::$1 reg byte a 202.0 @@ -29890,8 +29935,8 @@ FINAL SYMBOL TABLE (label) gfx_init_vic_bitmap::@4 (label) gfx_init_vic_bitmap::@return (byte) gfx_init_vic_bitmap::l -(byte) gfx_init_vic_bitmap::l#1 l zp ZP_BYTE:8 22.0 -(byte) gfx_init_vic_bitmap::l#2 l zp ZP_BYTE:8 11.0 +(byte) gfx_init_vic_bitmap::l#1 l zp ZP_BYTE:8 16.5 +(byte) gfx_init_vic_bitmap::l#5 l zp ZP_BYTE:8 11.0 (byte) gfx_init_vic_bitmap::lines_cnt (const byte) gfx_init_vic_bitmap::lines_cnt#0 lines_cnt = (byte) 9 (byte[]) gfx_init_vic_bitmap::lines_x @@ -30268,9 +30313,9 @@ 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 ] reg byte x [ form_mode::i#2 form_mode::i#1 ] reg byte a [ render_preset_name::idx#10 render_preset_name::idx#0 render_preset_name::idx#1 ] -reg byte x [ form_render_values::idx#2 form_render_values::idx#1 ] +reg byte x [ form_render_values::idx#5 form_render_values::idx#1 ] reg byte x [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] -reg byte y [ apply_preset::i#2 apply_preset::i#1 ] +reg byte y [ apply_preset::i#4 apply_preset::i#1 ] reg byte x [ form_control::return#2 ] reg byte x [ form_set_screen::y#2 form_set_screen::y#1 ] zp ZP_DWORD:2 [ gfx_init_plane_fill::plane_addr#3 get_plane::return#14 get_plane::return#16 get_plane::return#17 gfx_mode::$22 gfx_mode::plane_a#0 gfx_mode::$36 gfx_mode::plane_b#0 ] @@ -30283,7 +30328,7 @@ zp ZP_WORD:6 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::charg reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] reg byte x [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] -zp ZP_BYTE:8 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 gfx_init_plane_fill::fill#6 keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] +zp ZP_BYTE:8 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 gfx_init_plane_fill::fill#6 keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] zp ZP_BYTE:9 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] @@ -30411,7 +30456,7 @@ reg byte a [ gfx_init_screen0::$3 ] FINAL ASSEMBLER -Score: 10133400 +Score: 10127370 // File Comments // Interactive Explorer for C64DTV Screen Modes @@ -32423,40 +32468,37 @@ print_str_at: { // form_render_values // Render all form values from the form_fields_val array form_render_values: { - // [329] phi from form_render_values to form_render_values::@1 [phi:form_render_values->form_render_values::@1] - // [329] phi (byte) form_render_values::idx#2 = (byte) 0 [phi:form_render_values->form_render_values::@1#0] -- vbuxx=vbuc1 + // [329] phi from form_render_values to form_render_values::@2 [phi:form_render_values->form_render_values::@2] + // [329] phi (byte) form_render_values::idx#5 = (byte) 0 [phi:form_render_values->form_render_values::@2#0] -- vbuxx=vbuc1 ldx #0 - // form_render_values::@1 - b1: - // for( byte idx=0; idxform_render_values::@2] + // [329] phi (byte) form_render_values::idx#5 = (byte) form_render_values::idx#1 [phi:form_render_values::@1->form_render_values::@2#0] -- register_copy // form_render_values::@2 b2: // form_field_ptr(idx) - // [332] (byte) form_field_ptr::field_idx#0 ← (byte) form_render_values::idx#2 - // [333] call form_field_ptr + // [330] (byte) form_field_ptr::field_idx#0 ← (byte) form_render_values::idx#5 + // [331] call form_field_ptr // [336] phi from form_render_values::@2 to form_field_ptr [phi:form_render_values::@2->form_field_ptr] // [336] phi (byte) form_field_ptr::field_idx#2 = (byte) form_field_ptr::field_idx#0 [phi:form_render_values::@2->form_field_ptr#0] -- register_copy jsr form_field_ptr // form_render_values::@3 // *field = print_hextab[form_fields_val[idx]] - // [334] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#2)) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_pbuc2_derefidx_vbuxx + // [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_pbuc2_derefidx_vbuxx ldy form_fields_val,x lda print_hextab,y ldy form_field_ptr.x sta (form_field_ptr.line),y // for( byte idx=0; idxform_render_values::@1] - // [329] phi (byte) form_render_values::idx#2 = (byte) form_render_values::idx#1 [phi:form_render_values::@3->form_render_values::@1#0] -- register_copy - jmp b1 + // form_render_values::@1 + // [334] if((byte) form_render_values::idx#1<(const byte) form_fields_cnt#0) goto form_render_values::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #form_fields_cnt + bcc b2 + // form_render_values::@return + // } + // [335] return + rts } // form_field_ptr // Get the screen address of a form field @@ -32635,32 +32677,29 @@ apply_preset: { sta preset+1 // apply_preset::@2 b2: - // [354] phi from apply_preset::@2 to apply_preset::@13 [phi:apply_preset::@2->apply_preset::@13] - // [354] phi (byte) apply_preset::i#2 = (byte) 0 [phi:apply_preset::@2->apply_preset::@13#0] -- vbuyy=vbuc1 + // [354] phi from apply_preset::@2 to apply_preset::@14 [phi:apply_preset::@2->apply_preset::@14] + // [354] phi (byte) apply_preset::i#4 = (byte) 0 [phi:apply_preset::@2->apply_preset::@14#0] -- vbuyy=vbuc1 ldy #0 + // [354] phi from apply_preset::@13 to apply_preset::@14 [phi:apply_preset::@13->apply_preset::@14] + // [354] phi (byte) apply_preset::i#4 = (byte) apply_preset::i#1 [phi:apply_preset::@13->apply_preset::@14#0] -- register_copy + // apply_preset::@14 + b14: + // form_fields_val[i] = preset[i] + // [355] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#4) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#4) -- pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuyy + lda (preset),y + sta form_fields_val,y + // for( byte i=0; i != form_fields_cnt; i++) + // [356] (byte) apply_preset::i#1 ← ++ (byte) apply_preset::i#4 -- vbuyy=_inc_vbuyy + iny // Copy preset values into the fields // apply_preset::@13 - b13: - // for( byte i=0; i != form_fields_cnt; i++) - // [355] if((byte) apply_preset::i#2!=(const byte) form_fields_cnt#0) goto apply_preset::@14 -- vbuyy_neq_vbuc1_then_la1 + // [357] if((byte) apply_preset::i#1!=(const byte) form_fields_cnt#0) goto apply_preset::@14 -- vbuyy_neq_vbuc1_then_la1 cpy #form_fields_cnt bne b14 // apply_preset::@return // } - // [356] return + // [358] return rts - // apply_preset::@14 - b14: - // form_fields_val[i] = preset[i] - // [357] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#2) ← *((byte*) apply_preset::preset#15 + (byte) apply_preset::i#2) -- pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuyy - lda (preset),y - sta form_fields_val,y - // for( byte i=0; i != form_fields_cnt; i++) - // [358] (byte) apply_preset::i#1 ← ++ (byte) apply_preset::i#2 -- vbuyy=_inc_vbuyy - iny - // [354] phi from apply_preset::@14 to apply_preset::@13 [phi:apply_preset::@14->apply_preset::@13] - // [354] phi (byte) apply_preset::i#2 = (byte) apply_preset::i#1 [phi:apply_preset::@14->apply_preset::@13#0] -- register_copy - jmp b13 } // form_control // Reads keyboard and allows the user to navigate and change the fields of the form @@ -33993,45 +34032,42 @@ gfx_init_vic_bitmap: { // bitmap_clear() // [605] call bitmap_clear jsr bitmap_clear - // [606] phi from gfx_init_vic_bitmap::@3 to gfx_init_vic_bitmap::@1 [phi:gfx_init_vic_bitmap::@3->gfx_init_vic_bitmap::@1] - // [606] phi (byte) gfx_init_vic_bitmap::l#2 = (byte) 0 [phi:gfx_init_vic_bitmap::@3->gfx_init_vic_bitmap::@1#0] -- vbuz1=vbuc1 + // [606] phi from gfx_init_vic_bitmap::@3 to gfx_init_vic_bitmap::@2 [phi:gfx_init_vic_bitmap::@3->gfx_init_vic_bitmap::@2] + // [606] phi (byte) gfx_init_vic_bitmap::l#5 = (byte) 0 [phi:gfx_init_vic_bitmap::@3->gfx_init_vic_bitmap::@2#0] -- vbuz1=vbuc1 lda #0 sta l - // gfx_init_vic_bitmap::@1 - b1: + // [606] phi from gfx_init_vic_bitmap::@1 to gfx_init_vic_bitmap::@2 [phi:gfx_init_vic_bitmap::@1->gfx_init_vic_bitmap::@2] + // [606] phi (byte) gfx_init_vic_bitmap::l#5 = (byte) gfx_init_vic_bitmap::l#1 [phi:gfx_init_vic_bitmap::@1->gfx_init_vic_bitmap::@2#0] -- register_copy + // gfx_init_vic_bitmap::@2 + b2: + // bitmap_line(lines_x[l], lines_x[l+1], lines_y[l], lines_y[l+1]) + // [607] (byte) bitmap_line::x0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0 + (byte) gfx_init_vic_bitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy l + lda lines_x,y + sta bitmap_line.x0 + // [608] (byte) bitmap_line::x1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_x#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#5) -- vbuxx=pbuc1_derefidx_vbuz1 + ldx lines_x+1,y + // [609] (byte) bitmap_line::y0#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0 + (byte) gfx_init_vic_bitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + lda lines_y,y + sta bitmap_line.y0 + // [610] (byte) bitmap_line::y1#0 ← *((const byte[]) gfx_init_vic_bitmap::lines_y#0+(byte) 1 + (byte) gfx_init_vic_bitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + lda lines_y+1,y + sta bitmap_line.y1 + // [611] call bitmap_line + jsr bitmap_line + // gfx_init_vic_bitmap::@4 // for(byte l=0; lgfx_init_vic_bitmap::@1] - // [606] phi (byte) gfx_init_vic_bitmap::l#2 = (byte) gfx_init_vic_bitmap::l#1 [phi:gfx_init_vic_bitmap::@4->gfx_init_vic_bitmap::@1#0] -- register_copy - jmp b1 lines_x: .byte 0, $ff, $ff, 0, 0, $80, $ff, $80, 0, $80 lines_y: .byte 0, 0, $c7, $c7, 0, 0, $64, $c7, $64, 0 } diff --git a/src/test/ref/c64dtv-gfxexplorer.sym b/src/test/ref/c64dtv-gfxexplorer.sym index 9fb0e5988..45bf68b6c 100644 --- a/src/test/ref/c64dtv-gfxexplorer.sym +++ b/src/test/ref/c64dtv-gfxexplorer.sym @@ -198,8 +198,8 @@ (label) apply_preset::@9 (label) apply_preset::@return (byte) apply_preset::i -(byte) apply_preset::i#1 reg byte y 2002.0 -(byte) apply_preset::i#2 reg byte y 1668.3333333333335 +(byte) apply_preset::i#1 reg byte y 1501.5 +(byte) apply_preset::i#4 reg byte y 2002.0 (byte) apply_preset::idx (byte) apply_preset::idx#0 reg byte a 11.18181818181818 (byte*) apply_preset::preset @@ -610,8 +610,8 @@ (label) form_render_values::@return (byte*) form_render_values::field (byte) form_render_values::idx -(byte) form_render_values::idx#1 reg byte x 2002.0 -(byte) form_render_values::idx#2 reg byte x 1001.0 +(byte) form_render_values::idx#1 reg byte x 1501.5 +(byte) form_render_values::idx#5 reg byte x 1001.0 (void()) form_set_screen((byte*) form_set_screen::screen) (byte~) form_set_screen::$0 reg byte a 202.0 (byte~) form_set_screen::$1 reg byte a 202.0 @@ -990,8 +990,8 @@ (label) gfx_init_vic_bitmap::@4 (label) gfx_init_vic_bitmap::@return (byte) gfx_init_vic_bitmap::l -(byte) gfx_init_vic_bitmap::l#1 l zp ZP_BYTE:8 22.0 -(byte) gfx_init_vic_bitmap::l#2 l zp ZP_BYTE:8 11.0 +(byte) gfx_init_vic_bitmap::l#1 l zp ZP_BYTE:8 16.5 +(byte) gfx_init_vic_bitmap::l#5 l zp ZP_BYTE:8 11.0 (byte) gfx_init_vic_bitmap::lines_cnt (const byte) gfx_init_vic_bitmap::lines_cnt#0 lines_cnt = (byte) 9 (byte[]) gfx_init_vic_bitmap::lines_x @@ -1368,9 +1368,9 @@ 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 ] reg byte x [ form_mode::i#2 form_mode::i#1 ] reg byte a [ render_preset_name::idx#10 render_preset_name::idx#0 render_preset_name::idx#1 ] -reg byte x [ form_render_values::idx#2 form_render_values::idx#1 ] +reg byte x [ form_render_values::idx#5 form_render_values::idx#1 ] reg byte x [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] -reg byte y [ apply_preset::i#2 apply_preset::i#1 ] +reg byte y [ apply_preset::i#4 apply_preset::i#1 ] reg byte x [ form_control::return#2 ] reg byte x [ form_set_screen::y#2 form_set_screen::y#1 ] zp ZP_DWORD:2 [ gfx_init_plane_fill::plane_addr#3 get_plane::return#14 get_plane::return#16 get_plane::return#17 gfx_mode::$22 gfx_mode::plane_a#0 gfx_mode::$36 gfx_mode::plane_b#0 ] @@ -1383,7 +1383,7 @@ zp ZP_WORD:6 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::charg reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] reg byte x [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] -zp ZP_BYTE:8 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 gfx_init_plane_fill::fill#6 keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] +zp ZP_BYTE:8 [ gfx_init_vic_bitmap::l#5 gfx_init_vic_bitmap::l#1 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 gfx_init_plane_fill::fill#6 keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] zp ZP_BYTE:9 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] diff --git a/src/test/ref/c64dtv-gfxmodes.asm b/src/test/ref/c64dtv-gfxmodes.asm index 4283c3cb6..74df997f8 100644 --- a/src/test/ref/c64dtv-gfxmodes.asm +++ b/src/test/ref/c64dtv-gfxmodes.asm @@ -156,18 +156,21 @@ menu: { sta c lda #>COLS sta c+1 + b3: + lda #LIGHT_GREEN + ldy #0 + sta (c),y + inc c + bne !+ + inc c+1 + !: // Char Colors - b2: lda c+1 cmp #>COLS+$3e8 - beq !b3+ - jmp b3 - !b3: + bne b3 lda c cmp #str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp # (const byte*) bitmap_init::bitmap#0 Constant right-side identified [220] (dword~) menu::$6 ← (const dword) DTV_COLOR_BANK_DEFAULT#0 / (word) $400 @@ -9101,48 +9106,48 @@ Constant right-side identified [498] (dword~) mode_mcchar::$6 ← (const dword) Constant right-side identified [513] (byte~) mode_mcchar::$13 ← (const byte) VIC_DEN#0 | (const byte) VIC_RSEL#0 Constant right-side identified [516] (byte~) mode_mcchar::$15 ← (const byte) VIC_CSEL#0 | (const byte) VIC_MCM#0 Constant right-side identified [564] (byte~) mode_stdbitmap::$7 ← (const byte) VIC_BMM#0 | (const byte) VIC_DEN#0 -Constant right-side identified [615] (byte*~) mode_hicolstdchar::$6 ← (const byte*) mode_hicolstdchar::COLORS#0 / (word) $400 -Constant right-side identified [630] (byte~) mode_hicolstdchar::$13 ← (const byte) VIC_DEN#0 | (const byte) VIC_RSEL#0 -Constant right-side identified [669] (byte*~) mode_hicolecmchar::$6 ← (const byte*) mode_hicolecmchar::COLORS#0 / (word) $400 -Constant right-side identified [684] (byte~) mode_hicolecmchar::$13 ← (const byte) VIC_DEN#0 | (const byte) VIC_RSEL#0 -Constant right-side identified [727] (byte*~) mode_hicolmcchar::$6 ← (const byte*) mode_hicolmcchar::COLORS#0 / (word) $400 -Constant right-side identified [742] (byte~) mode_hicolmcchar::$13 ← (const byte) VIC_DEN#0 | (const byte) VIC_RSEL#0 -Constant right-side identified [745] (byte~) mode_hicolmcchar::$15 ← (const byte) VIC_CSEL#0 | (const byte) VIC_MCM#0 -Constant right-side identified [780] (byte) dtv_control#39 ← (const byte) DTV_HIGHCOLOR#0 | (const byte) DTV_LINEAR#0 -Constant right-side identified [783] (byte~) mode_twoplanebitmap::$2 ← (const byte) VIC_ECM#0 | (const byte) VIC_BMM#0 -Constant right-side identified [789] (byte~) mode_twoplanebitmap::$6 ← < (const byte*) mode_twoplanebitmap::PLANEA#0 -Constant right-side identified [791] (byte~) mode_twoplanebitmap::$7 ← > (const byte*) mode_twoplanebitmap::PLANEA#0 -Constant right-side identified [797] (byte~) mode_twoplanebitmap::$8 ← < (const byte*) mode_twoplanebitmap::PLANEB#0 -Constant right-side identified [799] (byte~) mode_twoplanebitmap::$9 ← > (const byte*) mode_twoplanebitmap::PLANEB#0 -Constant right-side identified [805] (byte*~) mode_twoplanebitmap::$12 ← (const byte*) mode_twoplanebitmap::COLORS#0 / (word) $400 -Constant right-side identified [853] (byte) dtv_control#42 ← (const byte) DTV_HIGHCOLOR#0 | (const byte) DTV_LINEAR#0 -Constant right-side identified [856] (byte~) mode_sixsfred::$2 ← (const byte) VIC_ECM#0 | (const byte) VIC_BMM#0 -Constant right-side identified [861] (byte~) mode_sixsfred::$6 ← (const byte) VIC_MCM#0 | (const byte) VIC_CSEL#0 -Constant right-side identified [863] (byte~) mode_sixsfred::$7 ← < (const byte*) mode_sixsfred::PLANEA#0 -Constant right-side identified [865] (byte~) mode_sixsfred::$8 ← > (const byte*) mode_sixsfred::PLANEA#0 -Constant right-side identified [871] (byte~) mode_sixsfred::$9 ← < (const byte*) mode_sixsfred::PLANEB#0 -Constant right-side identified [873] (byte~) mode_sixsfred::$10 ← > (const byte*) mode_sixsfred::PLANEB#0 -Constant right-side identified [879] (byte*~) mode_sixsfred::$13 ← (const byte*) mode_sixsfred::COLORS#0 / (word) $400 -Constant right-side identified [921] (byte~) mode_sixsfred2::$0 ← (const byte) VIC_ECM#0 | (const byte) VIC_BMM#0 -Constant right-side identified [926] (byte~) mode_sixsfred2::$4 ← (const byte) VIC_MCM#0 | (const byte) VIC_CSEL#0 -Constant right-side identified [928] (byte~) mode_sixsfred2::$5 ← < (const byte*) mode_sixsfred2::PLANEA#0 -Constant right-side identified [930] (byte~) mode_sixsfred2::$6 ← > (const byte*) mode_sixsfred2::PLANEA#0 -Constant right-side identified [936] (byte~) mode_sixsfred2::$7 ← < (const byte*) mode_sixsfred2::PLANEB#0 -Constant right-side identified [938] (byte~) mode_sixsfred2::$8 ← > (const byte*) mode_sixsfred2::PLANEB#0 -Constant right-side identified [944] (byte*~) mode_sixsfred2::$11 ← (const byte*) mode_sixsfred2::COLORS#0 / (word) $400 -Constant right-side identified [987] (byte~) mode_8bpppixelcell::$2 ← (const byte) DTV_HIGHCOLOR#0 | (const byte) DTV_LINEAR#0 -Constant right-side identified [992] (byte~) mode_8bpppixelcell::$4 ← (const byte) VIC_ECM#0 | (const byte) VIC_DEN#0 -Constant right-side identified [996] (byte~) mode_8bpppixelcell::$7 ← (const byte) VIC_MCM#0 | (const byte) VIC_CSEL#0 -Constant right-side identified [998] (byte~) mode_8bpppixelcell::$8 ← < (const byte*) mode_8bpppixelcell::PLANEA#0 -Constant right-side identified [1000] (byte~) mode_8bpppixelcell::$9 ← > (const byte*) mode_8bpppixelcell::PLANEA#0 -Constant right-side identified [1006] (byte~) mode_8bpppixelcell::$10 ← < (const byte*) mode_8bpppixelcell::PLANEB#0 -Constant right-side identified [1008] (byte~) mode_8bpppixelcell::$11 ← > (const byte*) mode_8bpppixelcell::PLANEB#0 -Constant right-side identified [1053] (byte~) mode_8bppchunkybmm::$3 ← (const byte) DTV_HIGHCOLOR#0 | (const byte) DTV_LINEAR#0 -Constant right-side identified [1060] (byte~) mode_8bppchunkybmm::$6 ← (const byte) VIC_ECM#0 | (const byte) VIC_DEN#0 -Constant right-side identified [1064] (byte~) mode_8bppchunkybmm::$9 ← (const byte) VIC_MCM#0 | (const byte) VIC_CSEL#0 -Constant right-side identified [1066] (word~) mode_8bppchunkybmm::$12 ← < (const dword) mode_8bppchunkybmm::PLANEB#0 -Constant right-side identified [1072] (word~) mode_8bppchunkybmm::$14 ← > (const dword) mode_8bppchunkybmm::PLANEB#0 -Constant right-side identified [1083] (dword~) mode_8bppchunkybmm::$16 ← (const dword) mode_8bppchunkybmm::PLANEB#0 / (word) $4000 +Constant right-side identified [618] (byte*~) mode_hicolstdchar::$6 ← (const byte*) mode_hicolstdchar::COLORS#0 / (word) $400 +Constant right-side identified [633] (byte~) mode_hicolstdchar::$13 ← (const byte) VIC_DEN#0 | (const byte) VIC_RSEL#0 +Constant right-side identified [672] (byte*~) mode_hicolecmchar::$6 ← (const byte*) mode_hicolecmchar::COLORS#0 / (word) $400 +Constant right-side identified [687] (byte~) mode_hicolecmchar::$13 ← (const byte) VIC_DEN#0 | (const byte) VIC_RSEL#0 +Constant right-side identified [730] (byte*~) mode_hicolmcchar::$6 ← (const byte*) mode_hicolmcchar::COLORS#0 / (word) $400 +Constant right-side identified [745] (byte~) mode_hicolmcchar::$13 ← (const byte) VIC_DEN#0 | (const byte) VIC_RSEL#0 +Constant right-side identified [748] (byte~) mode_hicolmcchar::$15 ← (const byte) VIC_CSEL#0 | (const byte) VIC_MCM#0 +Constant right-side identified [783] (byte) dtv_control#39 ← (const byte) DTV_HIGHCOLOR#0 | (const byte) DTV_LINEAR#0 +Constant right-side identified [786] (byte~) mode_twoplanebitmap::$2 ← (const byte) VIC_ECM#0 | (const byte) VIC_BMM#0 +Constant right-side identified [792] (byte~) mode_twoplanebitmap::$6 ← < (const byte*) mode_twoplanebitmap::PLANEA#0 +Constant right-side identified [794] (byte~) mode_twoplanebitmap::$7 ← > (const byte*) mode_twoplanebitmap::PLANEA#0 +Constant right-side identified [800] (byte~) mode_twoplanebitmap::$8 ← < (const byte*) mode_twoplanebitmap::PLANEB#0 +Constant right-side identified [802] (byte~) mode_twoplanebitmap::$9 ← > (const byte*) mode_twoplanebitmap::PLANEB#0 +Constant right-side identified [808] (byte*~) mode_twoplanebitmap::$12 ← (const byte*) mode_twoplanebitmap::COLORS#0 / (word) $400 +Constant right-side identified [856] (byte) dtv_control#42 ← (const byte) DTV_HIGHCOLOR#0 | (const byte) DTV_LINEAR#0 +Constant right-side identified [859] (byte~) mode_sixsfred::$2 ← (const byte) VIC_ECM#0 | (const byte) VIC_BMM#0 +Constant right-side identified [864] (byte~) mode_sixsfred::$6 ← (const byte) VIC_MCM#0 | (const byte) VIC_CSEL#0 +Constant right-side identified [866] (byte~) mode_sixsfred::$7 ← < (const byte*) mode_sixsfred::PLANEA#0 +Constant right-side identified [868] (byte~) mode_sixsfred::$8 ← > (const byte*) mode_sixsfred::PLANEA#0 +Constant right-side identified [874] (byte~) mode_sixsfred::$9 ← < (const byte*) mode_sixsfred::PLANEB#0 +Constant right-side identified [876] (byte~) mode_sixsfred::$10 ← > (const byte*) mode_sixsfred::PLANEB#0 +Constant right-side identified [882] (byte*~) mode_sixsfred::$13 ← (const byte*) mode_sixsfred::COLORS#0 / (word) $400 +Constant right-side identified [924] (byte~) mode_sixsfred2::$0 ← (const byte) VIC_ECM#0 | (const byte) VIC_BMM#0 +Constant right-side identified [929] (byte~) mode_sixsfred2::$4 ← (const byte) VIC_MCM#0 | (const byte) VIC_CSEL#0 +Constant right-side identified [931] (byte~) mode_sixsfred2::$5 ← < (const byte*) mode_sixsfred2::PLANEA#0 +Constant right-side identified [933] (byte~) mode_sixsfred2::$6 ← > (const byte*) mode_sixsfred2::PLANEA#0 +Constant right-side identified [939] (byte~) mode_sixsfred2::$7 ← < (const byte*) mode_sixsfred2::PLANEB#0 +Constant right-side identified [941] (byte~) mode_sixsfred2::$8 ← > (const byte*) mode_sixsfred2::PLANEB#0 +Constant right-side identified [947] (byte*~) mode_sixsfred2::$11 ← (const byte*) mode_sixsfred2::COLORS#0 / (word) $400 +Constant right-side identified [990] (byte~) mode_8bpppixelcell::$2 ← (const byte) DTV_HIGHCOLOR#0 | (const byte) DTV_LINEAR#0 +Constant right-side identified [995] (byte~) mode_8bpppixelcell::$4 ← (const byte) VIC_ECM#0 | (const byte) VIC_DEN#0 +Constant right-side identified [999] (byte~) mode_8bpppixelcell::$7 ← (const byte) VIC_MCM#0 | (const byte) VIC_CSEL#0 +Constant right-side identified [1001] (byte~) mode_8bpppixelcell::$8 ← < (const byte*) mode_8bpppixelcell::PLANEA#0 +Constant right-side identified [1003] (byte~) mode_8bpppixelcell::$9 ← > (const byte*) mode_8bpppixelcell::PLANEA#0 +Constant right-side identified [1009] (byte~) mode_8bpppixelcell::$10 ← < (const byte*) mode_8bpppixelcell::PLANEB#0 +Constant right-side identified [1011] (byte~) mode_8bpppixelcell::$11 ← > (const byte*) mode_8bpppixelcell::PLANEB#0 +Constant right-side identified [1056] (byte~) mode_8bppchunkybmm::$3 ← (const byte) DTV_HIGHCOLOR#0 | (const byte) DTV_LINEAR#0 +Constant right-side identified [1063] (byte~) mode_8bppchunkybmm::$6 ← (const byte) VIC_ECM#0 | (const byte) VIC_DEN#0 +Constant right-side identified [1067] (byte~) mode_8bppchunkybmm::$9 ← (const byte) VIC_MCM#0 | (const byte) VIC_CSEL#0 +Constant right-side identified [1069] (word~) mode_8bppchunkybmm::$12 ← < (const dword) mode_8bppchunkybmm::PLANEB#0 +Constant right-side identified [1075] (word~) mode_8bppchunkybmm::$14 ← > (const dword) mode_8bppchunkybmm::PLANEB#0 +Constant right-side identified [1086] (dword~) mode_8bppchunkybmm::$16 ← (const dword) mode_8bppchunkybmm::PLANEB#0 / (word) $4000 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const void*) memset::str#0 = (void*)print_screen#1 Constant (const byte) bitmap_init::$1 = >bitmap_init::bitmap#0 @@ -9245,14 +9250,16 @@ Constant value identified (word)mode_ecmchar::$6 in [439] (word~) mode_ecmchar:: Constant value identified (word)mode_ecmchar::$6 in [443] (word~) mode_ecmchar::$7 ← (word)(const dword) mode_ecmchar::$6 Constant value identified (word)mode_mcchar::$6 in [499] (word~) mode_mcchar::$4 ← (word)(const dword) mode_mcchar::$6 Constant value identified (word)mode_mcchar::$6 in [503] (word~) mode_mcchar::$7 ← (word)(const dword) mode_mcchar::$6 -Constant value identified (word)mode_hicolstdchar::$6 in [616] (word~) mode_hicolstdchar::$4 ← (word)(const byte*) mode_hicolstdchar::$6 -Constant value identified (word)mode_hicolstdchar::$6 in [620] (word~) mode_hicolstdchar::$7 ← (word)(const byte*) mode_hicolstdchar::$6 -Constant value identified (word)mode_hicolecmchar::$6 in [670] (word~) mode_hicolecmchar::$4 ← (word)(const byte*) mode_hicolecmchar::$6 -Constant value identified (word)mode_hicolecmchar::$6 in [674] (word~) mode_hicolecmchar::$7 ← (word)(const byte*) mode_hicolecmchar::$6 -Constant value identified (word)mode_hicolmcchar::$6 in [728] (word~) mode_hicolmcchar::$4 ← (word)(const byte*) mode_hicolmcchar::$6 -Constant value identified (word)mode_hicolmcchar::$6 in [732] (word~) mode_hicolmcchar::$7 ← (word)(const byte*) mode_hicolmcchar::$6 -Constant value identified (byte)mode_8bppchunkybmm::$16 in [1084] (byte) mode_8bppchunkybmm::gfxbCpuBank#0 ← (byte)(const dword) mode_8bppchunkybmm::$16 +Constant value identified (word)mode_hicolstdchar::$6 in [619] (word~) mode_hicolstdchar::$4 ← (word)(const byte*) mode_hicolstdchar::$6 +Constant value identified (word)mode_hicolstdchar::$6 in [623] (word~) mode_hicolstdchar::$7 ← (word)(const byte*) mode_hicolstdchar::$6 +Constant value identified (word)mode_hicolecmchar::$6 in [673] (word~) mode_hicolecmchar::$4 ← (word)(const byte*) mode_hicolecmchar::$6 +Constant value identified (word)mode_hicolecmchar::$6 in [677] (word~) mode_hicolecmchar::$7 ← (word)(const byte*) mode_hicolecmchar::$6 +Constant value identified (word)mode_hicolmcchar::$6 in [731] (word~) mode_hicolmcchar::$4 ← (word)(const byte*) mode_hicolmcchar::$6 +Constant value identified (word)mode_hicolmcchar::$6 in [735] (word~) mode_hicolmcchar::$7 ← (word)(const byte*) mode_hicolmcchar::$6 +Constant value identified (byte)mode_8bppchunkybmm::$16 in [1087] (byte) mode_8bppchunkybmm::gfxbCpuBank#0 ← (byte)(const dword) mode_8bppchunkybmm::$16 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [1111] if((const byte) mode_stdbitmap::l#0<(const byte) mode_stdbitmap::lines_cnt#0) goto mode_stdbitmap::@8 +Successful SSA optimization Pass2ConstantIfs Simplifying constant evaluating to zero <(const byte*) mode_twoplanebitmap::PLANEA#0 in Simplifying constant evaluating to zero <(const byte*) mode_twoplanebitmap::PLANEB#0 in Simplifying constant evaluating to zero <(const byte*) mode_sixsfred::PLANEA#0 in @@ -9263,66 +9270,70 @@ Simplifying constant evaluating to zero <(const byte*) mode_8bpppixelcell::PLANE Simplifying constant evaluating to zero <(const byte*) mode_8bpppixelcell::PLANEB#0 in Simplifying constant evaluating to zero <(const dword) mode_8bppchunkybmm::PLANEB#0 in Successful SSA optimization PassNSimplifyConstantZero +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) menu::c#1 = (byte*) menu::c#2 Alias (byte~) mode_8bppchunkybmm::$4 = (byte~) mode_8bppchunkybmm::$1 Successful SSA optimization Pass2AliasElimination -Identified duplicate assignment right side [959] (byte~) mode_8bppchunkybmm::$5 ← (byte~) mode_8bppchunkybmm::$4 | (const byte) DTV_COLORRAM_OFF#0 +Identical Phi Values (byte*) menu::c#5 (const byte*) menu::c#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identified duplicate assignment right side [961] (byte~) mode_8bppchunkybmm::$5 ← (byte~) mode_8bppchunkybmm::$4 | (const byte) DTV_COLORRAM_OFF#0 Successful SSA optimization Pass2DuplicateRValueIdentification Constant right-side identified [212] (dword~) menu::$1 ← (const dword) menu::$0 / (dword) $10000 Constant right-side identified [223] (word~) menu::$10 ← (const word) menu::$9 / (word) $4000 Constant right-side identified [227] (byte~) menu::$14 ← (const byte) menu::$13 | (byte) 3 Constant right-side identified [230] (word~) menu::$16 ← (const word) menu::$15 & (word) $3fff Constant right-side identified [232] (word~) menu::$19 ← (const word) menu::$18 & (word) $3fff -Constant right-side identified [365] (dword~) mode_stdchar::$1 ← (const dword) mode_stdchar::$0 / (dword) $10000 -Constant right-side identified [376] (word~) mode_stdchar::$10 ← (const word) mode_stdchar::$9 / (word) $4000 -Constant right-side identified [380] (byte~) mode_stdchar::$14 ← (const byte) mode_stdchar::$13 | (byte) 3 -Constant right-side identified [383] (word~) mode_stdchar::$16 ← (const word) mode_stdchar::$15 & (word) $3fff -Constant right-side identified [385] (word~) mode_stdchar::$19 ← (const word) mode_stdchar::$18 & (word) $3fff -Constant right-side identified [414] (dword~) mode_ecmchar::$1 ← (const dword) mode_ecmchar::$0 / (dword) $10000 -Constant right-side identified [425] (word~) mode_ecmchar::$10 ← (const word) mode_ecmchar::$9 / (word) $4000 -Constant right-side identified [429] (byte~) mode_ecmchar::$14 ← (const byte) mode_ecmchar::$13 | (const byte) VIC_ECM#0 -Constant right-side identified [433] (word~) mode_ecmchar::$17 ← (const word) mode_ecmchar::$16 & (word) $3fff -Constant right-side identified [435] (word~) mode_ecmchar::$20 ← (const word) mode_ecmchar::$19 & (word) $3fff -Constant right-side identified [467] (dword~) mode_mcchar::$1 ← (const dword) mode_mcchar::$0 / (dword) $10000 -Constant right-side identified [478] (word~) mode_mcchar::$10 ← (const word) mode_mcchar::$9 / (word) $4000 -Constant right-side identified [482] (byte~) mode_mcchar::$14 ← (const byte) mode_mcchar::$13 | (byte) 3 -Constant right-side identified [485] (word~) mode_mcchar::$17 ← (const word) mode_mcchar::$16 & (word) $3fff -Constant right-side identified [487] (word~) mode_mcchar::$20 ← (const word) mode_mcchar::$19 & (word) $3fff -Constant right-side identified [518] (dword~) mode_stdbitmap::$1 ← (const dword) mode_stdbitmap::$0 / (dword) $10000 -Constant right-side identified [523] (word~) mode_stdbitmap::$4 ← (const word) mode_stdbitmap::$3 / (word) $4000 -Constant right-side identified [527] (byte~) mode_stdbitmap::$8 ← (const byte) mode_stdbitmap::$7 | (const byte) VIC_RSEL#0 -Constant right-side identified [531] (word~) mode_stdbitmap::$11 ← (const word) mode_stdbitmap::$10 & (word) $3fff -Constant right-side identified [533] (word~) mode_stdbitmap::$14 ← (const word) mode_stdbitmap::$13 & (word) $3fff -Constant right-side identified [571] (dword~) mode_hicolstdchar::$1 ← (const dword) mode_hicolstdchar::$0 / (dword) $10000 -Constant right-side identified [582] (word~) mode_hicolstdchar::$10 ← (const word) mode_hicolstdchar::$9 / (word) $4000 -Constant right-side identified [586] (byte~) mode_hicolstdchar::$14 ← (const byte) mode_hicolstdchar::$13 | (byte) 3 -Constant right-side identified [589] (word~) mode_hicolstdchar::$16 ← (const word) mode_hicolstdchar::$15 & (word) $3fff -Constant right-side identified [591] (word~) mode_hicolstdchar::$19 ← (const word) mode_hicolstdchar::$18 & (word) $3fff -Constant right-side identified [618] (dword~) mode_hicolecmchar::$1 ← (const dword) mode_hicolecmchar::$0 / (dword) $10000 -Constant right-side identified [629] (word~) mode_hicolecmchar::$10 ← (const word) mode_hicolecmchar::$9 / (word) $4000 -Constant right-side identified [633] (byte~) mode_hicolecmchar::$14 ← (const byte) mode_hicolecmchar::$13 | (const byte) VIC_ECM#0 -Constant right-side identified [637] (word~) mode_hicolecmchar::$17 ← (const word) mode_hicolecmchar::$16 & (word) $3fff -Constant right-side identified [639] (word~) mode_hicolecmchar::$20 ← (const word) mode_hicolecmchar::$19 & (word) $3fff -Constant right-side identified [669] (dword~) mode_hicolmcchar::$1 ← (const dword) mode_hicolmcchar::$0 / (dword) $10000 -Constant right-side identified [680] (word~) mode_hicolmcchar::$10 ← (const word) mode_hicolmcchar::$9 / (word) $4000 -Constant right-side identified [684] (byte~) mode_hicolmcchar::$14 ← (const byte) mode_hicolmcchar::$13 | (byte) 3 -Constant right-side identified [687] (word~) mode_hicolmcchar::$17 ← (const word) mode_hicolmcchar::$16 & (word) $3fff -Constant right-side identified [689] (word~) mode_hicolmcchar::$20 ← (const word) mode_hicolmcchar::$19 & (word) $3fff -Constant right-side identified [719] (byte~) mode_twoplanebitmap::$3 ← (const byte) mode_twoplanebitmap::$2 | (const byte) VIC_DEN#0 -Constant right-side identified [736] (byte~) mode_twoplanebitmap::$11 ← < (const byte*) mode_twoplanebitmap::$12 -Constant right-side identified [738] (byte~) mode_twoplanebitmap::$13 ← > (const byte*) mode_twoplanebitmap::$12 -Constant right-side identified [783] (byte~) mode_sixsfred::$3 ← (const byte) mode_sixsfred::$2 | (const byte) VIC_DEN#0 -Constant right-side identified [800] (byte~) mode_sixsfred::$12 ← < (const byte*) mode_sixsfred::$13 -Constant right-side identified [802] (byte~) mode_sixsfred::$14 ← > (const byte*) mode_sixsfred::$13 -Constant right-side identified [840] (byte~) mode_sixsfred2::$1 ← (const byte) mode_sixsfred2::$0 | (const byte) VIC_DEN#0 -Constant right-side identified [857] (byte~) mode_sixsfred2::$10 ← < (const byte*) mode_sixsfred2::$11 -Constant right-side identified [859] (byte~) mode_sixsfred2::$12 ← > (const byte*) mode_sixsfred2::$11 -Constant right-side identified [898] (byte) dtv_control#48 ← (const byte) mode_8bpppixelcell::$2 | (const byte) DTV_CHUNKY#0 -Constant right-side identified [901] (byte~) mode_8bpppixelcell::$5 ← (const byte) mode_8bpppixelcell::$4 | (const byte) VIC_RSEL#0 -Constant right-side identified [956] (byte~) mode_8bppchunkybmm::$4 ← (const byte) mode_8bppchunkybmm::$3 | (const byte) DTV_CHUNKY#0 -Constant right-side identified [961] (byte~) mode_8bppchunkybmm::$7 ← (const byte) mode_8bppchunkybmm::$6 | (const byte) VIC_RSEL#0 -Constant right-side identified [965] (byte~) mode_8bppchunkybmm::$11 ← < (const word) mode_8bppchunkybmm::$12 -Constant right-side identified [967] (byte~) mode_8bppchunkybmm::$13 ← > (const word) mode_8bppchunkybmm::$12 -Constant right-side identified [969] (byte~) mode_8bppchunkybmm::$15 ← < (const word) mode_8bppchunkybmm::$14 +Constant right-side identified [367] (dword~) mode_stdchar::$1 ← (const dword) mode_stdchar::$0 / (dword) $10000 +Constant right-side identified [378] (word~) mode_stdchar::$10 ← (const word) mode_stdchar::$9 / (word) $4000 +Constant right-side identified [382] (byte~) mode_stdchar::$14 ← (const byte) mode_stdchar::$13 | (byte) 3 +Constant right-side identified [385] (word~) mode_stdchar::$16 ← (const word) mode_stdchar::$15 & (word) $3fff +Constant right-side identified [387] (word~) mode_stdchar::$19 ← (const word) mode_stdchar::$18 & (word) $3fff +Constant right-side identified [416] (dword~) mode_ecmchar::$1 ← (const dword) mode_ecmchar::$0 / (dword) $10000 +Constant right-side identified [427] (word~) mode_ecmchar::$10 ← (const word) mode_ecmchar::$9 / (word) $4000 +Constant right-side identified [431] (byte~) mode_ecmchar::$14 ← (const byte) mode_ecmchar::$13 | (const byte) VIC_ECM#0 +Constant right-side identified [435] (word~) mode_ecmchar::$17 ← (const word) mode_ecmchar::$16 & (word) $3fff +Constant right-side identified [437] (word~) mode_ecmchar::$20 ← (const word) mode_ecmchar::$19 & (word) $3fff +Constant right-side identified [469] (dword~) mode_mcchar::$1 ← (const dword) mode_mcchar::$0 / (dword) $10000 +Constant right-side identified [480] (word~) mode_mcchar::$10 ← (const word) mode_mcchar::$9 / (word) $4000 +Constant right-side identified [484] (byte~) mode_mcchar::$14 ← (const byte) mode_mcchar::$13 | (byte) 3 +Constant right-side identified [487] (word~) mode_mcchar::$17 ← (const word) mode_mcchar::$16 & (word) $3fff +Constant right-side identified [489] (word~) mode_mcchar::$20 ← (const word) mode_mcchar::$19 & (word) $3fff +Constant right-side identified [520] (dword~) mode_stdbitmap::$1 ← (const dword) mode_stdbitmap::$0 / (dword) $10000 +Constant right-side identified [525] (word~) mode_stdbitmap::$4 ← (const word) mode_stdbitmap::$3 / (word) $4000 +Constant right-side identified [529] (byte~) mode_stdbitmap::$8 ← (const byte) mode_stdbitmap::$7 | (const byte) VIC_RSEL#0 +Constant right-side identified [533] (word~) mode_stdbitmap::$11 ← (const word) mode_stdbitmap::$10 & (word) $3fff +Constant right-side identified [535] (word~) mode_stdbitmap::$14 ← (const word) mode_stdbitmap::$13 & (word) $3fff +Constant right-side identified [573] (dword~) mode_hicolstdchar::$1 ← (const dword) mode_hicolstdchar::$0 / (dword) $10000 +Constant right-side identified [584] (word~) mode_hicolstdchar::$10 ← (const word) mode_hicolstdchar::$9 / (word) $4000 +Constant right-side identified [588] (byte~) mode_hicolstdchar::$14 ← (const byte) mode_hicolstdchar::$13 | (byte) 3 +Constant right-side identified [591] (word~) mode_hicolstdchar::$16 ← (const word) mode_hicolstdchar::$15 & (word) $3fff +Constant right-side identified [593] (word~) mode_hicolstdchar::$19 ← (const word) mode_hicolstdchar::$18 & (word) $3fff +Constant right-side identified [620] (dword~) mode_hicolecmchar::$1 ← (const dword) mode_hicolecmchar::$0 / (dword) $10000 +Constant right-side identified [631] (word~) mode_hicolecmchar::$10 ← (const word) mode_hicolecmchar::$9 / (word) $4000 +Constant right-side identified [635] (byte~) mode_hicolecmchar::$14 ← (const byte) mode_hicolecmchar::$13 | (const byte) VIC_ECM#0 +Constant right-side identified [639] (word~) mode_hicolecmchar::$17 ← (const word) mode_hicolecmchar::$16 & (word) $3fff +Constant right-side identified [641] (word~) mode_hicolecmchar::$20 ← (const word) mode_hicolecmchar::$19 & (word) $3fff +Constant right-side identified [671] (dword~) mode_hicolmcchar::$1 ← (const dword) mode_hicolmcchar::$0 / (dword) $10000 +Constant right-side identified [682] (word~) mode_hicolmcchar::$10 ← (const word) mode_hicolmcchar::$9 / (word) $4000 +Constant right-side identified [686] (byte~) mode_hicolmcchar::$14 ← (const byte) mode_hicolmcchar::$13 | (byte) 3 +Constant right-side identified [689] (word~) mode_hicolmcchar::$17 ← (const word) mode_hicolmcchar::$16 & (word) $3fff +Constant right-side identified [691] (word~) mode_hicolmcchar::$20 ← (const word) mode_hicolmcchar::$19 & (word) $3fff +Constant right-side identified [721] (byte~) mode_twoplanebitmap::$3 ← (const byte) mode_twoplanebitmap::$2 | (const byte) VIC_DEN#0 +Constant right-side identified [738] (byte~) mode_twoplanebitmap::$11 ← < (const byte*) mode_twoplanebitmap::$12 +Constant right-side identified [740] (byte~) mode_twoplanebitmap::$13 ← > (const byte*) mode_twoplanebitmap::$12 +Constant right-side identified [785] (byte~) mode_sixsfred::$3 ← (const byte) mode_sixsfred::$2 | (const byte) VIC_DEN#0 +Constant right-side identified [802] (byte~) mode_sixsfred::$12 ← < (const byte*) mode_sixsfred::$13 +Constant right-side identified [804] (byte~) mode_sixsfred::$14 ← > (const byte*) mode_sixsfred::$13 +Constant right-side identified [842] (byte~) mode_sixsfred2::$1 ← (const byte) mode_sixsfred2::$0 | (const byte) VIC_DEN#0 +Constant right-side identified [859] (byte~) mode_sixsfred2::$10 ← < (const byte*) mode_sixsfred2::$11 +Constant right-side identified [861] (byte~) mode_sixsfred2::$12 ← > (const byte*) mode_sixsfred2::$11 +Constant right-side identified [900] (byte) dtv_control#48 ← (const byte) mode_8bpppixelcell::$2 | (const byte) DTV_CHUNKY#0 +Constant right-side identified [903] (byte~) mode_8bpppixelcell::$5 ← (const byte) mode_8bpppixelcell::$4 | (const byte) VIC_RSEL#0 +Constant right-side identified [958] (byte~) mode_8bppchunkybmm::$4 ← (const byte) mode_8bppchunkybmm::$3 | (const byte) DTV_CHUNKY#0 +Constant right-side identified [963] (byte~) mode_8bppchunkybmm::$7 ← (const byte) mode_8bppchunkybmm::$6 | (const byte) VIC_RSEL#0 +Constant right-side identified [967] (byte~) mode_8bppchunkybmm::$11 ← < (const word) mode_8bppchunkybmm::$12 +Constant right-side identified [969] (byte~) mode_8bppchunkybmm::$13 ← > (const word) mode_8bppchunkybmm::$12 +Constant right-side identified [971] (byte~) mode_8bppchunkybmm::$15 ← < (const word) mode_8bppchunkybmm::$14 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::$2 = (byte*)memset::str#0 Constant (const byte*) memset::dst#0 = (byte*)memset::str#0 @@ -9403,21 +9414,23 @@ Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 = mode_8bppchunkybmm:: Successful SSA optimization Pass2ConstantIdentification Constant value identified (byte)menu::$1 in [213] (byte~) menu::$2 ← (byte)(const dword) menu::$1 Constant value identified (byte)menu::$10 in [224] (byte~) menu::$11 ← (byte)(const word) menu::$10 -Constant value identified (byte)mode_stdchar::$1 in [366] (byte~) mode_stdchar::$2 ← (byte)(const dword) mode_stdchar::$1 -Constant value identified (byte)mode_stdchar::$10 in [377] (byte~) mode_stdchar::$11 ← (byte)(const word) mode_stdchar::$10 -Constant value identified (byte)mode_ecmchar::$1 in [415] (byte~) mode_ecmchar::$2 ← (byte)(const dword) mode_ecmchar::$1 -Constant value identified (byte)mode_ecmchar::$10 in [426] (byte~) mode_ecmchar::$11 ← (byte)(const word) mode_ecmchar::$10 -Constant value identified (byte)mode_mcchar::$1 in [468] (byte~) mode_mcchar::$2 ← (byte)(const dword) mode_mcchar::$1 -Constant value identified (byte)mode_mcchar::$10 in [479] (byte~) mode_mcchar::$11 ← (byte)(const word) mode_mcchar::$10 -Constant value identified (byte)mode_stdbitmap::$1 in [519] (byte~) mode_stdbitmap::$2 ← (byte)(const dword) mode_stdbitmap::$1 -Constant value identified (byte)mode_stdbitmap::$4 in [524] (byte~) mode_stdbitmap::$5 ← (byte)(const word) mode_stdbitmap::$4 -Constant value identified (byte)mode_hicolstdchar::$1 in [572] (byte~) mode_hicolstdchar::$2 ← (byte)(const dword) mode_hicolstdchar::$1 -Constant value identified (byte)mode_hicolstdchar::$10 in [583] (byte~) mode_hicolstdchar::$11 ← (byte)(const word) mode_hicolstdchar::$10 -Constant value identified (byte)mode_hicolecmchar::$1 in [619] (byte~) mode_hicolecmchar::$2 ← (byte)(const dword) mode_hicolecmchar::$1 -Constant value identified (byte)mode_hicolecmchar::$10 in [630] (byte~) mode_hicolecmchar::$11 ← (byte)(const word) mode_hicolecmchar::$10 -Constant value identified (byte)mode_hicolmcchar::$1 in [670] (byte~) mode_hicolmcchar::$2 ← (byte)(const dword) mode_hicolmcchar::$1 -Constant value identified (byte)mode_hicolmcchar::$10 in [681] (byte~) mode_hicolmcchar::$11 ← (byte)(const word) mode_hicolmcchar::$10 +Constant value identified (byte)mode_stdchar::$1 in [368] (byte~) mode_stdchar::$2 ← (byte)(const dword) mode_stdchar::$1 +Constant value identified (byte)mode_stdchar::$10 in [379] (byte~) mode_stdchar::$11 ← (byte)(const word) mode_stdchar::$10 +Constant value identified (byte)mode_ecmchar::$1 in [417] (byte~) mode_ecmchar::$2 ← (byte)(const dword) mode_ecmchar::$1 +Constant value identified (byte)mode_ecmchar::$10 in [428] (byte~) mode_ecmchar::$11 ← (byte)(const word) mode_ecmchar::$10 +Constant value identified (byte)mode_mcchar::$1 in [470] (byte~) mode_mcchar::$2 ← (byte)(const dword) mode_mcchar::$1 +Constant value identified (byte)mode_mcchar::$10 in [481] (byte~) mode_mcchar::$11 ← (byte)(const word) mode_mcchar::$10 +Constant value identified (byte)mode_stdbitmap::$1 in [521] (byte~) mode_stdbitmap::$2 ← (byte)(const dword) mode_stdbitmap::$1 +Constant value identified (byte)mode_stdbitmap::$4 in [526] (byte~) mode_stdbitmap::$5 ← (byte)(const word) mode_stdbitmap::$4 +Constant value identified (byte)mode_hicolstdchar::$1 in [574] (byte~) mode_hicolstdchar::$2 ← (byte)(const dword) mode_hicolstdchar::$1 +Constant value identified (byte)mode_hicolstdchar::$10 in [585] (byte~) mode_hicolstdchar::$11 ← (byte)(const word) mode_hicolstdchar::$10 +Constant value identified (byte)mode_hicolecmchar::$1 in [621] (byte~) mode_hicolecmchar::$2 ← (byte)(const dword) mode_hicolecmchar::$1 +Constant value identified (byte)mode_hicolecmchar::$10 in [632] (byte~) mode_hicolecmchar::$11 ← (byte)(const word) mode_hicolecmchar::$10 +Constant value identified (byte)mode_hicolmcchar::$1 in [672] (byte~) mode_hicolmcchar::$2 ← (byte)(const dword) mode_hicolmcchar::$1 +Constant value identified (byte)mode_hicolmcchar::$10 in [683] (byte~) mode_hicolmcchar::$11 ← (byte)(const word) mode_hicolmcchar::$10 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [1005] if((const byte*) menu::c#0!=(const byte*) menu::$27) goto menu::@4 +Successful SSA optimization Pass2ConstantIfs Simplifying constant evaluating to zero (const dword) menu::$0/(dword) $10000 in Simplifying constant evaluating to zero (const word) menu::$15&(word) $3fff in Simplifying constant evaluating to zero (const dword) mode_stdchar::$0/(dword) $10000 in @@ -9440,13 +9453,13 @@ Simplifying constant evaluating to zero >(const byte*) mode_sixsfred2::$11 in Simplifying constant evaluating to zero <(const word) mode_8bppchunkybmm::$12 in Simplifying constant evaluating to zero >(const word) mode_8bppchunkybmm::$12 in Simplifying constant evaluating to zero (byte)(const dword) menu::$1 in [213] (byte~) menu::$2 ← (byte)(const dword) menu::$1 -Simplifying constant evaluating to zero (byte)(const dword) mode_stdchar::$1 in [366] (byte~) mode_stdchar::$2 ← (byte)(const dword) mode_stdchar::$1 -Simplifying constant evaluating to zero (byte)(const dword) mode_ecmchar::$1 in [415] (byte~) mode_ecmchar::$2 ← (byte)(const dword) mode_ecmchar::$1 -Simplifying constant evaluating to zero (byte)(const dword) mode_mcchar::$1 in [468] (byte~) mode_mcchar::$2 ← (byte)(const dword) mode_mcchar::$1 -Simplifying constant evaluating to zero (byte)(const dword) mode_stdbitmap::$1 in [519] (byte~) mode_stdbitmap::$2 ← (byte)(const dword) mode_stdbitmap::$1 -Simplifying constant evaluating to zero (byte)(const dword) mode_hicolstdchar::$1 in [572] (byte~) mode_hicolstdchar::$2 ← (byte)(const dword) mode_hicolstdchar::$1 -Simplifying constant evaluating to zero (byte)(const dword) mode_hicolecmchar::$1 in [619] (byte~) mode_hicolecmchar::$2 ← (byte)(const dword) mode_hicolecmchar::$1 -Simplifying constant evaluating to zero (byte)(const dword) mode_hicolmcchar::$1 in [670] (byte~) mode_hicolmcchar::$2 ← (byte)(const dword) mode_hicolmcchar::$1 +Simplifying constant evaluating to zero (byte)(const dword) mode_stdchar::$1 in [368] (byte~) mode_stdchar::$2 ← (byte)(const dword) mode_stdchar::$1 +Simplifying constant evaluating to zero (byte)(const dword) mode_ecmchar::$1 in [417] (byte~) mode_ecmchar::$2 ← (byte)(const dword) mode_ecmchar::$1 +Simplifying constant evaluating to zero (byte)(const dword) mode_mcchar::$1 in [470] (byte~) mode_mcchar::$2 ← (byte)(const dword) mode_mcchar::$1 +Simplifying constant evaluating to zero (byte)(const dword) mode_stdbitmap::$1 in [521] (byte~) mode_stdbitmap::$2 ← (byte)(const dword) mode_stdbitmap::$1 +Simplifying constant evaluating to zero (byte)(const dword) mode_hicolstdchar::$1 in [574] (byte~) mode_hicolstdchar::$2 ← (byte)(const dword) mode_hicolstdchar::$1 +Simplifying constant evaluating to zero (byte)(const dword) mode_hicolecmchar::$1 in [621] (byte~) mode_hicolecmchar::$2 ← (byte)(const dword) mode_hicolecmchar::$1 +Simplifying constant evaluating to zero (byte)(const dword) mode_hicolmcchar::$1 in [672] (byte~) mode_hicolmcchar::$2 ← (byte)(const dword) mode_hicolmcchar::$1 Successful SSA optimization PassNSimplifyConstantZero Eliminating unused constant (const dword) menu::$0 Eliminating unused constant (const word) menu::$15 @@ -9625,17 +9638,22 @@ Eliminating unused constant (const word) mode_hicolmcchar::$7 Eliminating unused constant (const word) mode_hicolmcchar::$17 Eliminating unused constant (const word) mode_hicolmcchar::$18 Successful SSA optimization PassNEliminateUnusedVars -Constant right-side identified [214] (byte~) menu::$12 ← (byte) 3 ^ (const byte) menu::$11 -Constant right-side identified [354] (byte~) mode_stdchar::$12 ← (byte) 3 ^ (const byte) mode_stdchar::$11 -Constant right-side identified [390] (byte~) mode_ecmchar::$12 ← (byte) 3 ^ (const byte) mode_ecmchar::$11 -Constant right-side identified [429] (byte~) mode_mcchar::$12 ← (byte) 3 ^ (const byte) mode_mcchar::$11 -Constant right-side identified [465] (byte~) mode_stdbitmap::$6 ← (byte) 3 ^ (const byte) mode_stdbitmap::$5 -Constant right-side identified [510] (byte~) mode_hicolstdchar::$12 ← (byte) 3 ^ (const byte) mode_hicolstdchar::$11 -Constant right-side identified [544] (byte~) mode_hicolecmchar::$12 ← (byte) 3 ^ (const byte) mode_hicolecmchar::$11 -Constant right-side identified [581] (byte~) mode_hicolmcchar::$12 ← (byte) 3 ^ (const byte) mode_hicolmcchar::$11 -Constant right-side identified [613] (byte~) mode_twoplanebitmap::$5 ← (const byte) mode_twoplanebitmap::$4 | (byte) 3 -Constant right-side identified [673] (byte~) mode_sixsfred::$5 ← (const byte) mode_sixsfred::$4 | (byte) 3 -Constant right-side identified [726] (byte~) mode_sixsfred2::$3 ← (const byte) mode_sixsfred2::$2 | (byte) 3 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) memset::dst#1 = (byte*) memset::dst#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) memset::dst#5 (const byte*) memset::dst#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [216] (byte~) menu::$12 ← (byte) 3 ^ (const byte) menu::$11 +Constant right-side identified [356] (byte~) mode_stdchar::$12 ← (byte) 3 ^ (const byte) mode_stdchar::$11 +Constant right-side identified [392] (byte~) mode_ecmchar::$12 ← (byte) 3 ^ (const byte) mode_ecmchar::$11 +Constant right-side identified [431] (byte~) mode_mcchar::$12 ← (byte) 3 ^ (const byte) mode_mcchar::$11 +Constant right-side identified [467] (byte~) mode_stdbitmap::$6 ← (byte) 3 ^ (const byte) mode_stdbitmap::$5 +Constant right-side identified [512] (byte~) mode_hicolstdchar::$12 ← (byte) 3 ^ (const byte) mode_hicolstdchar::$11 +Constant right-side identified [546] (byte~) mode_hicolecmchar::$12 ← (byte) 3 ^ (const byte) mode_hicolecmchar::$11 +Constant right-side identified [583] (byte~) mode_hicolmcchar::$12 ← (byte) 3 ^ (const byte) mode_hicolmcchar::$11 +Constant right-side identified [615] (byte~) mode_twoplanebitmap::$5 ← (const byte) mode_twoplanebitmap::$4 | (byte) 3 +Constant right-side identified [675] (byte~) mode_sixsfred::$5 ← (const byte) mode_sixsfred::$4 | (byte) 3 +Constant right-side identified [728] (byte~) mode_sixsfred2::$3 ← (const byte) mode_sixsfred2::$2 | (byte) 3 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) menu::$12 = 3^menu::$11 Constant (const word) menu::$21 = menu::$20 @@ -9657,15 +9675,17 @@ Constant (const byte) mode_twoplanebitmap::$5 = mode_twoplanebitmap::$4|3 Constant (const byte) mode_sixsfred::$5 = mode_sixsfred::$4|3 Constant (const byte) mode_sixsfred2::$3 = mode_sixsfred2::$2|3 Successful SSA optimization Pass2ConstantIdentification -Constant value identified (byte)menu::$21 in [219] (byte~) menu::$22 ← (byte)(const word) menu::$21 -Constant value identified (byte)mode_stdchar::$21 in [359] (byte~) mode_stdchar::$22 ← (byte)(const word) mode_stdchar::$21 -Constant value identified (byte)mode_ecmchar::$22 in [395] (byte~) mode_ecmchar::$23 ← (byte)(const word) mode_ecmchar::$22 -Constant value identified (byte)mode_mcchar::$22 in [434] (byte~) mode_mcchar::$23 ← (byte)(const word) mode_mcchar::$22 -Constant value identified (byte)mode_stdbitmap::$16 in [470] (byte~) mode_stdbitmap::$17 ← (byte)(const word) mode_stdbitmap::$16 -Constant value identified (byte)mode_hicolstdchar::$21 in [515] (byte~) mode_hicolstdchar::$22 ← (byte)(const word) mode_hicolstdchar::$21 -Constant value identified (byte)mode_hicolecmchar::$22 in [549] (byte~) mode_hicolecmchar::$23 ← (byte)(const word) mode_hicolecmchar::$22 -Constant value identified (byte)mode_hicolmcchar::$22 in [586] (byte~) mode_hicolmcchar::$23 ← (byte)(const word) mode_hicolmcchar::$22 +Constant value identified (byte)menu::$21 in [221] (byte~) menu::$22 ← (byte)(const word) menu::$21 +Constant value identified (byte)mode_stdchar::$21 in [361] (byte~) mode_stdchar::$22 ← (byte)(const word) mode_stdchar::$21 +Constant value identified (byte)mode_ecmchar::$22 in [397] (byte~) mode_ecmchar::$23 ← (byte)(const word) mode_ecmchar::$22 +Constant value identified (byte)mode_mcchar::$22 in [436] (byte~) mode_mcchar::$23 ← (byte)(const word) mode_mcchar::$22 +Constant value identified (byte)mode_stdbitmap::$16 in [472] (byte~) mode_stdbitmap::$17 ← (byte)(const word) mode_stdbitmap::$16 +Constant value identified (byte)mode_hicolstdchar::$21 in [517] (byte~) mode_hicolstdchar::$22 ← (byte)(const word) mode_hicolstdchar::$21 +Constant value identified (byte)mode_hicolecmchar::$22 in [551] (byte~) mode_hicolecmchar::$23 ← (byte)(const word) mode_hicolecmchar::$22 +Constant value identified (byte)mode_hicolmcchar::$22 in [588] (byte~) mode_hicolmcchar::$23 ← (byte)(const word) mode_hicolmcchar::$22 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [871] if((const byte*) memset::dst#0!=(const byte*) memset::end#0) goto memset::@5 +Successful SSA optimization Pass2ConstantIfs Constant (const byte) menu::$22 = (byte)menu::$21 Constant (const byte) mode_stdchar::$22 = (byte)mode_stdchar::$21 Constant (const byte) mode_ecmchar::$23 = (byte)mode_ecmchar::$22 @@ -10099,8 +10119,9 @@ Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in assignment *(mode_stdbitmap::lines_x#0+1 + mode_stdbitmap::$30) Consolidated array index constant in assignment *(mode_stdbitmap::lines_y#0+1 + mode_stdbitmap::$31) Successful SSA optimization Pass2ConstantAdditionElimination -Alias (byte) mode_stdbitmap::l#2 = (byte~) mode_stdbitmap::$30 (byte~) mode_stdbitmap::$31 +Alias (byte) mode_stdbitmap::l#5 = (byte~) mode_stdbitmap::$30 (byte~) mode_stdbitmap::$31 Successful SSA optimization Pass2AliasElimination +Added new block during phi lifting memset::@10(between memset::@4 and memset::@5) Added new block during phi lifting print_str_lines::@12(between print_str_lines::@1 and print_str_lines::@4) Added new block during phi lifting print_str_lines::@13(between print_str_lines::@5 and print_str_lines::@4) Added new block during phi lifting print_str_lines::@14(between print_str_lines::@4 and print_str_lines::@5) @@ -10120,6 +10141,7 @@ Added new block during phi lifting bitmap_line_ydxi::@7(between bitmap_line_ydxi Added new block during phi lifting bitmap_line_ydxd::@6(between bitmap_line_ydxd::@2 and bitmap_line_ydxd::@1) Added new block during phi lifting bitmap_line_ydxd::@7(between bitmap_line_ydxd::@5 and bitmap_line_ydxd::@2) Added new block during phi lifting menu::@78(between menu::@1 and menu::@1) +Added new block during phi lifting menu::@79(between menu::@3 and menu::@4) Added new block during phi lifting mode_ctrl::@40(between mode_ctrl::@19 and mode_ctrl::@1) Added new block during phi lifting mode_ctrl::@41(between mode_ctrl::@33 and mode_ctrl::@13) Added new block during phi lifting mode_ctrl::@42(between mode_ctrl::@34 and mode_ctrl::@14) @@ -10140,6 +10162,7 @@ Added new block during phi lifting mode_mcchar::@10(between mode_mcchar::@4 and Added new block during phi lifting mode_stdbitmap::@17(between mode_stdbitmap::@1 and mode_stdbitmap::@1) Added new block during phi lifting mode_stdbitmap::@18(between mode_stdbitmap::@5 and mode_stdbitmap::@3) Added new block during phi lifting mode_stdbitmap::@19(between mode_stdbitmap::@4 and mode_stdbitmap::@4) +Added new block during phi lifting mode_stdbitmap::@20(between mode_stdbitmap::@7 and mode_stdbitmap::@8) Added new block during phi lifting mode_hicolstdchar::@8(between mode_hicolstdchar::@1 and mode_hicolstdchar::@1) Added new block during phi lifting mode_hicolstdchar::@9(between mode_hicolstdchar::@5 and mode_hicolstdchar::@3) Added new block during phi lifting mode_hicolstdchar::@10(between mode_hicolstdchar::@4 and mode_hicolstdchar::@4) @@ -10194,6 +10217,7 @@ Adding NOP phi() at start of main::@1 Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@7 Adding NOP phi() at start of menu::@2 +Adding NOP phi() at start of menu::@3_1 Adding NOP phi() at start of menu::@51 Adding NOP phi() at start of menu::@52 Adding NOP phi() at start of menu::@53 @@ -10264,6 +10288,7 @@ Adding NOP phi() at start of mode_hicolstdchar::@7 Adding NOP phi() at start of mode_stdbitmap::@6 Adding NOP phi() at start of mode_stdbitmap::@13 Adding NOP phi() at start of mode_stdbitmap::@14 +Adding NOP phi() at start of mode_stdbitmap::@7_1 Adding NOP phi() at start of mode_stdbitmap::@9 Adding NOP phi() at start of mode_stdbitmap::@16 Adding NOP phi() at start of bitmap_line::@30 @@ -10290,314 +10315,315 @@ Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@4_1 Adding NOP phi() at start of memset::@1 Adding NOP phi() at start of print_set_screen CALL GRAPH Calls in [] to main:8 Calls in [main] to menu:17 -Calls in [menu] to print_set_screen:37 print_cls:39 print_str_lines:41 keyboard_key_pressed:45 mode_stdchar:50 keyboard_key_pressed:54 mode_ecmchar:59 keyboard_key_pressed:62 mode_mcchar:67 keyboard_key_pressed:70 mode_stdbitmap:75 keyboard_key_pressed:78 mode_hicolstdchar:83 keyboard_key_pressed:86 mode_hicolecmchar:91 keyboard_key_pressed:94 mode_hicolmcchar:99 keyboard_key_pressed:102 mode_sixsfred2:107 keyboard_key_pressed:110 mode_twoplanebitmap:115 keyboard_key_pressed:118 mode_sixsfred:123 keyboard_key_pressed:126 mode_8bpppixelcell:131 keyboard_key_pressed:134 mode_8bppchunkybmm:139 -Calls in [mode_8bppchunkybmm] to dtvSetCpuBankSegment1:160 dtvSetCpuBankSegment1:169 dtvSetCpuBankSegment1:182 mode_ctrl:184 -Calls in [mode_ctrl] to keyboard_key_pressed:201 keyboard_key_pressed:207 keyboard_key_pressed:214 keyboard_key_pressed:221 keyboard_key_pressed:228 keyboard_key_pressed:235 keyboard_key_pressed:242 keyboard_key_pressed:249 -Calls in [keyboard_key_pressed] to keyboard_matrix_read:272 -Calls in [mode_8bpppixelcell] to mode_ctrl:345 -Calls in [mode_sixsfred] to mode_ctrl:421 -Calls in [mode_twoplanebitmap] to mode_ctrl:499 -Calls in [mode_sixsfred2] to mode_ctrl:576 -Calls in [mode_hicolmcchar] to mode_ctrl:626 -Calls in [mode_hicolecmchar] to mode_ctrl:671 -Calls in [mode_hicolstdchar] to mode_ctrl:713 -Calls in [mode_stdbitmap] to bitmap_init:751 bitmap_clear:753 mode_ctrl:758 bitmap_line:765 -Calls in [bitmap_line] to bitmap_line_ydxi:788 bitmap_line_xdyi:801 bitmap_line_ydxd:815 bitmap_line_xdyd:827 bitmap_line_ydxd:843 bitmap_line_xdyd:855 bitmap_line_ydxi:869 bitmap_line_xdyi:881 -Calls in [bitmap_line_xdyi] to bitmap_plot:893 -Calls in [bitmap_line_ydxi] to bitmap_plot:927 -Calls in [bitmap_line_xdyd] to bitmap_plot:954 -Calls in [bitmap_line_ydxd] to bitmap_plot:981 -Calls in [mode_mcchar] to mode_ctrl:1083 -Calls in [mode_ecmchar] to mode_ctrl:1130 -Calls in [mode_stdchar] to mode_ctrl:1174 -Calls in [print_str_lines] to print_ln:1200 -Calls in [print_cls] to memset:1215 +Calls in [menu] to print_set_screen:40 print_cls:42 print_str_lines:44 keyboard_key_pressed:48 mode_stdchar:53 keyboard_key_pressed:57 mode_ecmchar:62 keyboard_key_pressed:65 mode_mcchar:70 keyboard_key_pressed:73 mode_stdbitmap:78 keyboard_key_pressed:81 mode_hicolstdchar:86 keyboard_key_pressed:89 mode_hicolecmchar:94 keyboard_key_pressed:97 mode_hicolmcchar:102 keyboard_key_pressed:105 mode_sixsfred2:110 keyboard_key_pressed:113 mode_twoplanebitmap:118 keyboard_key_pressed:121 mode_sixsfred:126 keyboard_key_pressed:129 mode_8bpppixelcell:134 keyboard_key_pressed:137 mode_8bppchunkybmm:142 +Calls in [mode_8bppchunkybmm] to dtvSetCpuBankSegment1:161 dtvSetCpuBankSegment1:170 dtvSetCpuBankSegment1:183 mode_ctrl:185 +Calls in [mode_ctrl] to keyboard_key_pressed:202 keyboard_key_pressed:208 keyboard_key_pressed:215 keyboard_key_pressed:222 keyboard_key_pressed:229 keyboard_key_pressed:236 keyboard_key_pressed:243 keyboard_key_pressed:250 +Calls in [keyboard_key_pressed] to keyboard_matrix_read:273 +Calls in [mode_8bpppixelcell] to mode_ctrl:346 +Calls in [mode_sixsfred] to mode_ctrl:422 +Calls in [mode_twoplanebitmap] to mode_ctrl:500 +Calls in [mode_sixsfred2] to mode_ctrl:577 +Calls in [mode_hicolmcchar] to mode_ctrl:627 +Calls in [mode_hicolecmchar] to mode_ctrl:672 +Calls in [mode_hicolstdchar] to mode_ctrl:714 +Calls in [mode_stdbitmap] to bitmap_init:752 bitmap_clear:754 bitmap_line:762 mode_ctrl:766 +Calls in [bitmap_line] to bitmap_line_ydxi:790 bitmap_line_xdyi:803 bitmap_line_ydxd:817 bitmap_line_xdyd:829 bitmap_line_ydxd:845 bitmap_line_xdyd:857 bitmap_line_ydxi:871 bitmap_line_xdyi:883 +Calls in [bitmap_line_xdyi] to bitmap_plot:895 +Calls in [bitmap_line_ydxi] to bitmap_plot:929 +Calls in [bitmap_line_xdyd] to bitmap_plot:956 +Calls in [bitmap_line_ydxd] to bitmap_plot:983 +Calls in [mode_mcchar] to mode_ctrl:1085 +Calls in [mode_ecmchar] to mode_ctrl:1132 +Calls in [mode_stdchar] to mode_ctrl:1176 +Calls in [print_str_lines] to print_ln:1202 +Calls in [print_cls] to memset:1217 Created 188 initial phi equivalence classes -Coalesced [143] menu::c#4 ← menu::c#1 -Coalesced [144] menu::i#3 ← menu::i#1 -Coalesced [163] mode_8bppchunkybmm::gfxb#8 ← mode_8bppchunkybmm::gfxb#5 -Coalesced [164] mode_8bppchunkybmm::gfxbCpuBank#11 ← mode_8bppchunkybmm::gfxbCpuBank#7 -Coalesced [168] dtvSetCpuBankSegment1::cpuBankIdx#4 ← dtvSetCpuBankSegment1::cpuBankIdx#1 -Coalesced [171] mode_8bppchunkybmm::gfxbCpuBank#13 ← mode_8bppchunkybmm::gfxbCpuBank#2 -Coalesced [187] mode_8bppchunkybmm::gfxb#7 ← mode_8bppchunkybmm::gfxb#1 -Coalesced [188] mode_8bppchunkybmm::y#8 ← mode_8bppchunkybmm::y#1 -Coalesced [189] mode_8bppchunkybmm::gfxbCpuBank#10 ← mode_8bppchunkybmm::gfxbCpuBank#8 -Coalesced (already) [190] mode_8bppchunkybmm::gfxb#9 ← mode_8bppchunkybmm::gfxb#1 -Coalesced [191] mode_8bppchunkybmm::x#6 ← mode_8bppchunkybmm::x#1 -Coalesced (already) [192] mode_8bppchunkybmm::gfxbCpuBank#12 ← mode_8bppchunkybmm::gfxbCpuBank#8 -Coalesced [193] mode_8bppchunkybmm::gfxb#10 ← mode_8bppchunkybmm::gfxb#3 -Coalesced (already) [194] mode_8bppchunkybmm::gfxbCpuBank#14 ← mode_8bppchunkybmm::gfxbCpuBank#4 -Coalesced [195] mode_8bppchunkybmm::i#3 ← mode_8bppchunkybmm::i#1 -Coalesced [197] dtv_control#291 ← dtv_control#144 -Coalesced [212] mode_ctrl::ctrl#29 ← mode_ctrl::ctrl#1 -Coalesced [219] mode_ctrl::ctrl#31 ← mode_ctrl::ctrl#2 -Coalesced [226] mode_ctrl::ctrl#33 ← mode_ctrl::ctrl#3 -Coalesced [233] mode_ctrl::ctrl#35 ← mode_ctrl::ctrl#4 -Coalesced [240] mode_ctrl::ctrl#37 ← mode_ctrl::ctrl#5 -Coalesced [247] mode_ctrl::ctrl#39 ← mode_ctrl::ctrl#6 -Coalesced [259] dtv_control#293 ← dtv_control#17 -Coalesced (already) [260] dtv_control#292 ← dtv_control#114 -Coalesced [261] mode_ctrl::ctrl#41 ← mode_ctrl::ctrl#22 -Coalesced [262] mode_ctrl::ctrl#40 ← mode_ctrl::ctrl#13 -Coalesced [263] mode_ctrl::ctrl#38 ← mode_ctrl::ctrl#12 -Coalesced [264] mode_ctrl::ctrl#36 ← mode_ctrl::ctrl#11 -Coalesced [265] mode_ctrl::ctrl#34 ← mode_ctrl::ctrl#10 -Coalesced [266] mode_ctrl::ctrl#32 ← mode_ctrl::ctrl#17 -Coalesced [267] mode_ctrl::ctrl#30 ← mode_ctrl::ctrl#0 -Coalesced [306] mode_8bpppixelcell::gfxa#6 ← mode_8bpppixelcell::gfxa#3 -Coalesced [320] mode_8bpppixelcell::chargen#11 ← mode_8bpppixelcell::chargen#4 -Coalesced [321] mode_8bpppixelcell::gfxb#11 ← mode_8bpppixelcell::gfxb#7 -Coalesced [322] mode_8bpppixelcell::col#11 ← mode_8bpppixelcell::col#7 -Coalesced [326] mode_8bpppixelcell::bits#6 ← mode_8bpppixelcell::bits#0 -Coalesced [327] mode_8bpppixelcell::gfxb#13 ← mode_8bpppixelcell::gfxb#5 -Coalesced [328] mode_8bpppixelcell::col#13 ← mode_8bpppixelcell::col#5 -Not coalescing [332] mode_8bpppixelcell::c#3 ← mode_8bpppixelcell::col#2 -Coalesced [348] mode_8bpppixelcell::chargen#9 ← mode_8bpppixelcell::chargen#1 -Coalesced [349] mode_8bpppixelcell::gfxb#9 ← mode_8bpppixelcell::gfxb#1 -Coalesced [350] mode_8bpppixelcell::col#9 ← mode_8bpppixelcell::col#1 -Coalesced [351] mode_8bpppixelcell::ch#9 ← mode_8bpppixelcell::ch#1 -Coalesced (already) [352] mode_8bpppixelcell::chargen#10 ← mode_8bpppixelcell::chargen#1 -Coalesced (already) [353] mode_8bpppixelcell::gfxb#10 ← mode_8bpppixelcell::gfxb#1 -Coalesced (already) [354] mode_8bpppixelcell::col#10 ← mode_8bpppixelcell::col#1 -Coalesced [355] mode_8bpppixelcell::cr#7 ← mode_8bpppixelcell::cr#1 -Coalesced [356] mode_8bpppixelcell::bits#5 ← mode_8bpppixelcell::bits#1 -Coalesced (already) [357] mode_8bpppixelcell::gfxb#12 ← mode_8bpppixelcell::gfxb#1 -Coalesced (already) [358] mode_8bpppixelcell::col#12 ← mode_8bpppixelcell::col#1 -Coalesced [359] mode_8bpppixelcell::cp#5 ← mode_8bpppixelcell::cp#1 -Coalesced [360] mode_8bpppixelcell::ay#5 ← mode_8bpppixelcell::ay#1 -Coalesced [361] mode_8bpppixelcell::gfxa#5 ← mode_8bpppixelcell::gfxa#1 -Coalesced [362] mode_8bpppixelcell::ax#3 ← mode_8bpppixelcell::ax#1 -Coalesced (already) [363] mode_8bpppixelcell::gfxa#7 ← mode_8bpppixelcell::gfxa#1 -Coalesced [364] mode_8bpppixelcell::i#3 ← mode_8bpppixelcell::i#1 -Coalesced [388] mode_sixsfred::col#6 ← mode_sixsfred::col#3 -Coalesced [400] mode_sixsfred::gfxa#6 ← mode_sixsfred::gfxa#3 -Coalesced [412] mode_sixsfred::gfxb#6 ← mode_sixsfred::gfxb#3 -Coalesced [424] mode_sixsfred::gfxb#5 ← mode_sixsfred::gfxb#1 -Coalesced [425] mode_sixsfred::by#5 ← mode_sixsfred::by#1 -Coalesced (already) [426] mode_sixsfred::gfxb#7 ← mode_sixsfred::gfxb#1 -Coalesced [427] mode_sixsfred::bx#3 ← mode_sixsfred::bx#1 -Coalesced [428] mode_sixsfred::ay#5 ← mode_sixsfred::ay#1 -Coalesced [429] mode_sixsfred::gfxa#5 ← mode_sixsfred::gfxa#1 -Coalesced (already) [430] mode_sixsfred::gfxa#7 ← mode_sixsfred::gfxa#1 -Coalesced [431] mode_sixsfred::ax#3 ← mode_sixsfred::ax#1 -Coalesced [432] mode_sixsfred::cy#5 ← mode_sixsfred::cy#1 -Coalesced [433] mode_sixsfred::col#5 ← mode_sixsfred::col#1 -Coalesced [434] mode_sixsfred::cx#3 ← mode_sixsfred::cx#1 -Coalesced (already) [435] mode_sixsfred::col#7 ← mode_sixsfred::col#1 -Coalesced [436] mode_sixsfred::i#3 ← mode_sixsfred::i#1 -Coalesced [462] mode_twoplanebitmap::col#6 ← mode_twoplanebitmap::col#3 -Coalesced [476] mode_twoplanebitmap::gfxa#11 ← mode_twoplanebitmap::gfxa#7 -Coalesced [482] mode_twoplanebitmap::gfxa#12 ← mode_twoplanebitmap::gfxa#2 -Coalesced [490] mode_twoplanebitmap::gfxb#6 ← mode_twoplanebitmap::gfxb#3 -Coalesced [502] mode_twoplanebitmap::gfxb#5 ← mode_twoplanebitmap::gfxb#1 -Coalesced [503] mode_twoplanebitmap::by#5 ← mode_twoplanebitmap::by#1 -Coalesced (already) [504] mode_twoplanebitmap::gfxb#7 ← mode_twoplanebitmap::gfxb#1 -Coalesced [505] mode_twoplanebitmap::bx#3 ← mode_twoplanebitmap::bx#1 -Coalesced [506] mode_twoplanebitmap::ay#8 ← mode_twoplanebitmap::ay#1 -Coalesced [507] mode_twoplanebitmap::gfxa#9 ← mode_twoplanebitmap::gfxa#6 -Coalesced (already) [508] mode_twoplanebitmap::gfxa#10 ← mode_twoplanebitmap::gfxa#6 -Coalesced [509] mode_twoplanebitmap::ax#6 ← mode_twoplanebitmap::ax#1 -Coalesced [512] mode_twoplanebitmap::gfxa#13 ← mode_twoplanebitmap::gfxa#1 -Coalesced [513] mode_twoplanebitmap::cy#5 ← mode_twoplanebitmap::cy#1 -Coalesced [514] mode_twoplanebitmap::col#5 ← mode_twoplanebitmap::col#1 -Coalesced [515] mode_twoplanebitmap::cx#3 ← mode_twoplanebitmap::cx#1 -Coalesced (already) [516] mode_twoplanebitmap::col#7 ← mode_twoplanebitmap::col#1 -Coalesced [517] mode_twoplanebitmap::i#3 ← mode_twoplanebitmap::i#1 -Coalesced [541] mode_sixsfred2::col#6 ← mode_sixsfred2::col#3 -Coalesced [555] mode_sixsfred2::gfxa#6 ← mode_sixsfred2::gfxa#3 -Coalesced [567] mode_sixsfred2::gfxb#6 ← mode_sixsfred2::gfxb#3 -Coalesced [579] mode_sixsfred2::gfxb#5 ← mode_sixsfred2::gfxb#1 -Coalesced [580] mode_sixsfred2::by#5 ← mode_sixsfred2::by#1 -Coalesced (already) [581] mode_sixsfred2::gfxb#7 ← mode_sixsfred2::gfxb#1 -Coalesced [582] mode_sixsfred2::bx#3 ← mode_sixsfred2::bx#1 -Coalesced [583] mode_sixsfred2::ay#5 ← mode_sixsfred2::ay#1 -Coalesced [584] mode_sixsfred2::gfxa#5 ← mode_sixsfred2::gfxa#1 -Coalesced (already) [585] mode_sixsfred2::gfxa#7 ← mode_sixsfred2::gfxa#1 -Coalesced [586] mode_sixsfred2::ax#3 ← mode_sixsfred2::ax#1 -Coalesced [587] mode_sixsfred2::cy#5 ← mode_sixsfred2::cy#1 -Coalesced [588] mode_sixsfred2::col#5 ← mode_sixsfred2::col#1 -Coalesced [589] mode_sixsfred2::cx#3 ← mode_sixsfred2::cx#1 -Coalesced (already) [590] mode_sixsfred2::col#7 ← mode_sixsfred2::col#1 -Coalesced [591] mode_sixsfred2::i#3 ← mode_sixsfred2::i#1 -Coalesced [610] mode_hicolmcchar::col#6 ← mode_hicolmcchar::col#3 -Coalesced [611] mode_hicolmcchar::ch#6 ← mode_hicolmcchar::ch#3 -Coalesced [629] mode_hicolmcchar::cy#5 ← mode_hicolmcchar::cy#1 -Coalesced [630] mode_hicolmcchar::col#5 ← mode_hicolmcchar::col#1 -Coalesced [631] mode_hicolmcchar::ch#5 ← mode_hicolmcchar::ch#1 -Coalesced [632] mode_hicolmcchar::cx#3 ← mode_hicolmcchar::cx#1 -Coalesced (already) [633] mode_hicolmcchar::col#7 ← mode_hicolmcchar::col#1 -Coalesced (already) [634] mode_hicolmcchar::ch#7 ← mode_hicolmcchar::ch#1 -Coalesced [635] mode_hicolmcchar::i#3 ← mode_hicolmcchar::i#1 -Coalesced [655] mode_hicolecmchar::col#6 ← mode_hicolecmchar::col#3 -Coalesced [656] mode_hicolecmchar::ch#6 ← mode_hicolecmchar::ch#3 -Coalesced [674] mode_hicolecmchar::cy#5 ← mode_hicolecmchar::cy#1 -Coalesced [675] mode_hicolecmchar::col#5 ← mode_hicolecmchar::col#1 -Coalesced [676] mode_hicolecmchar::ch#5 ← mode_hicolecmchar::ch#1 -Coalesced [677] mode_hicolecmchar::cx#3 ← mode_hicolecmchar::cx#1 -Coalesced (already) [678] mode_hicolecmchar::col#7 ← mode_hicolecmchar::col#1 -Coalesced (already) [679] mode_hicolecmchar::ch#7 ← mode_hicolecmchar::ch#1 -Coalesced [680] mode_hicolecmchar::i#3 ← mode_hicolecmchar::i#1 -Coalesced [697] mode_hicolstdchar::col#6 ← mode_hicolstdchar::col#3 -Coalesced [698] mode_hicolstdchar::ch#6 ← mode_hicolstdchar::ch#3 -Coalesced [716] mode_hicolstdchar::cy#5 ← mode_hicolstdchar::cy#1 -Coalesced [717] mode_hicolstdchar::col#5 ← mode_hicolstdchar::col#1 -Coalesced [718] mode_hicolstdchar::ch#5 ← mode_hicolstdchar::ch#1 -Coalesced [719] mode_hicolstdchar::cx#3 ← mode_hicolstdchar::cx#1 -Coalesced (already) [720] mode_hicolstdchar::col#7 ← mode_hicolstdchar::col#1 -Coalesced (already) [721] mode_hicolstdchar::ch#7 ← mode_hicolstdchar::ch#1 -Coalesced [722] mode_hicolstdchar::i#3 ← mode_hicolstdchar::i#1 -Coalesced [737] mode_stdbitmap::ch#6 ← mode_stdbitmap::ch#3 -Coalesced [767] mode_stdbitmap::l#5 ← mode_stdbitmap::l#1 -Coalesced [768] mode_stdbitmap::cy#5 ← mode_stdbitmap::cy#1 -Coalesced [769] mode_stdbitmap::ch#5 ← mode_stdbitmap::ch#1 -Coalesced [770] mode_stdbitmap::cx#3 ← mode_stdbitmap::cx#1 -Coalesced (already) [771] mode_stdbitmap::ch#7 ← mode_stdbitmap::ch#1 -Coalesced [772] mode_stdbitmap::i#3 ← mode_stdbitmap::i#1 -Coalesced [783] bitmap_line_ydxi::xd#8 ← bitmap_line_ydxi::xd#0 -Coalesced [784] bitmap_line_ydxi::x#9 ← bitmap_line_ydxi::x#0 -Coalesced [785] bitmap_line_ydxi::y#9 ← bitmap_line_ydxi::y#0 -Coalesced [786] bitmap_line_ydxi::yd#8 ← bitmap_line_ydxi::yd#0 -Coalesced [787] bitmap_line_ydxi::y1#8 ← bitmap_line_ydxi::y1#0 -Coalesced [796] bitmap_line_xdyi::yd#7 ← bitmap_line_xdyi::yd#0 -Coalesced [797] bitmap_line_xdyi::x#8 ← bitmap_line_xdyi::x#0 -Coalesced [798] bitmap_line_xdyi::y#8 ← bitmap_line_xdyi::y#0 -Coalesced [799] bitmap_line_xdyi::xd#7 ← bitmap_line_xdyi::xd#0 -Coalesced [800] bitmap_line_xdyi::x1#7 ← bitmap_line_xdyi::x1#0 -Coalesced [810] bitmap_line_ydxd::xd#7 ← bitmap_line_ydxd::xd#0 -Coalesced [811] bitmap_line_ydxd::x#8 ← bitmap_line_ydxd::x#0 -Coalesced [812] bitmap_line_ydxd::y#9 ← bitmap_line_ydxd::y#0 -Coalesced [813] bitmap_line_ydxd::yd#7 ← bitmap_line_ydxd::yd#0 -Coalesced [814] bitmap_line_ydxd::y1#7 ← bitmap_line_ydxd::y1#0 -Coalesced [822] bitmap_line_xdyd::yd#7 ← bitmap_line_xdyd::yd#0 -Coalesced [823] bitmap_line_xdyd::x#8 ← bitmap_line_xdyd::x#0 -Coalesced [824] bitmap_line_xdyd::y#8 ← bitmap_line_xdyd::y#0 -Coalesced [825] bitmap_line_xdyd::xd#7 ← bitmap_line_xdyd::xd#0 -Coalesced [826] bitmap_line_xdyd::x1#7 ← bitmap_line_xdyd::x1#0 -Coalesced [838] bitmap_line_ydxd::xd#8 ← bitmap_line_ydxd::xd#1 -Coalesced [839] bitmap_line_ydxd::x#9 ← bitmap_line_ydxd::x#1 -Coalesced [840] bitmap_line_ydxd::y#10 ← bitmap_line_ydxd::y#1 -Coalesced [841] bitmap_line_ydxd::yd#8 ← bitmap_line_ydxd::yd#1 -Coalesced [842] bitmap_line_ydxd::y1#8 ← bitmap_line_ydxd::y1#1 -Coalesced [850] bitmap_line_xdyd::yd#8 ← bitmap_line_xdyd::yd#1 -Coalesced [851] bitmap_line_xdyd::x#9 ← bitmap_line_xdyd::x#1 -Coalesced [852] bitmap_line_xdyd::y#9 ← bitmap_line_xdyd::y#1 -Coalesced [853] bitmap_line_xdyd::xd#8 ← bitmap_line_xdyd::xd#1 -Coalesced [854] bitmap_line_xdyd::x1#8 ← bitmap_line_xdyd::x1#1 -Coalesced [864] bitmap_line_ydxi::xd#7 ← bitmap_line_ydxi::xd#1 -Coalesced [865] bitmap_line_ydxi::x#8 ← bitmap_line_ydxi::x#1 -Coalesced [866] bitmap_line_ydxi::y#8 ← bitmap_line_ydxi::y#1 -Coalesced [867] bitmap_line_ydxi::yd#7 ← bitmap_line_ydxi::yd#1 -Coalesced [868] bitmap_line_ydxi::y1#7 ← bitmap_line_ydxi::y1#1 -Coalesced [876] bitmap_line_xdyi::yd#8 ← bitmap_line_xdyi::yd#1 -Coalesced [877] bitmap_line_xdyi::x#9 ← bitmap_line_xdyi::x#1 -Coalesced [878] bitmap_line_xdyi::y#9 ← bitmap_line_xdyi::y#1 -Coalesced [879] bitmap_line_xdyi::xd#8 ← bitmap_line_xdyi::xd#1 -Coalesced [880] bitmap_line_xdyi::x1#8 ← bitmap_line_xdyi::x1#1 -Coalesced [885] bitmap_line_xdyi::x#10 ← bitmap_line_xdyi::x#6 -Coalesced [886] bitmap_line_xdyi::y#10 ← bitmap_line_xdyi::y#5 -Coalesced [887] bitmap_line_xdyi::e#7 ← bitmap_line_xdyi::e#0 -Coalesced [891] bitmap_plot::x#6 ← bitmap_plot::x#0 -Coalesced [892] bitmap_plot::y#6 ← bitmap_plot::y#0 -Coalesced [899] bitmap_line_xdyi::y#12 ← bitmap_line_xdyi::y#2 -Coalesced [900] bitmap_line_xdyi::e#9 ← bitmap_line_xdyi::e#2 -Coalesced [905] bitmap_line_xdyi::x#11 ← bitmap_line_xdyi::x#2 -Coalesced [906] bitmap_line_xdyi::y#11 ← bitmap_line_xdyi::y#6 -Coalesced [907] bitmap_line_xdyi::e#8 ← bitmap_line_xdyi::e#6 -Coalesced (already) [908] bitmap_line_xdyi::y#13 ← bitmap_line_xdyi::y#3 -Coalesced [909] bitmap_line_xdyi::e#10 ← bitmap_line_xdyi::e#1 -Coalesced [919] bitmap_line_ydxi::x#10 ← bitmap_line_ydxi::x#5 -Coalesced [920] bitmap_line_ydxi::y#10 ← bitmap_line_ydxi::y#6 -Coalesced [921] bitmap_line_ydxi::e#7 ← bitmap_line_ydxi::e#0 -Coalesced [925] bitmap_plot::x#8 ← bitmap_plot::x#2 -Coalesced [926] bitmap_plot::y#8 ← bitmap_plot::y#2 -Coalesced [933] bitmap_line_ydxi::x#12 ← bitmap_line_ydxi::x#2 -Coalesced [934] bitmap_line_ydxi::e#9 ← bitmap_line_ydxi::e#2 -Coalesced [939] bitmap_line_ydxi::x#11 ← bitmap_line_ydxi::x#6 -Coalesced [940] bitmap_line_ydxi::y#11 ← bitmap_line_ydxi::y#2 -Coalesced [941] bitmap_line_ydxi::e#8 ← bitmap_line_ydxi::e#6 -Coalesced (already) [942] bitmap_line_ydxi::x#13 ← bitmap_line_ydxi::x#3 -Coalesced [943] bitmap_line_ydxi::e#10 ← bitmap_line_ydxi::e#1 -Coalesced [946] bitmap_line_xdyd::x#10 ← bitmap_line_xdyd::x#6 -Coalesced [947] bitmap_line_xdyd::y#10 ← bitmap_line_xdyd::y#5 -Coalesced [948] bitmap_line_xdyd::e#7 ← bitmap_line_xdyd::e#0 -Coalesced [952] bitmap_plot::x#5 ← bitmap_plot::x#1 -Coalesced [953] bitmap_plot::y#5 ← bitmap_plot::y#1 -Coalesced [960] bitmap_line_xdyd::y#12 ← bitmap_line_xdyd::y#2 -Coalesced [961] bitmap_line_xdyd::e#9 ← bitmap_line_xdyd::e#2 -Coalesced [966] bitmap_line_xdyd::x#11 ← bitmap_line_xdyd::x#2 -Coalesced [967] bitmap_line_xdyd::y#11 ← bitmap_line_xdyd::y#6 -Coalesced [968] bitmap_line_xdyd::e#8 ← bitmap_line_xdyd::e#6 -Coalesced (already) [969] bitmap_line_xdyd::y#13 ← bitmap_line_xdyd::y#3 -Coalesced [970] bitmap_line_xdyd::e#10 ← bitmap_line_xdyd::e#1 -Coalesced [973] bitmap_line_ydxd::x#10 ← bitmap_line_ydxd::x#5 -Coalesced [974] bitmap_line_ydxd::y#11 ← bitmap_line_ydxd::y#7 -Coalesced [975] bitmap_line_ydxd::e#7 ← bitmap_line_ydxd::e#0 -Coalesced [979] bitmap_plot::x#7 ← bitmap_plot::x#3 -Coalesced [980] bitmap_plot::y#7 ← bitmap_plot::y#3 -Coalesced [987] bitmap_line_ydxd::x#12 ← bitmap_line_ydxd::x#2 -Coalesced [988] bitmap_line_ydxd::e#9 ← bitmap_line_ydxd::e#2 -Coalesced [993] bitmap_line_ydxd::x#11 ← bitmap_line_ydxd::x#6 -Coalesced [994] bitmap_line_ydxd::y#12 ← bitmap_line_ydxd::y#3 -Coalesced [995] bitmap_line_ydxd::e#8 ← bitmap_line_ydxd::e#6 -Coalesced (already) [996] bitmap_line_ydxd::x#13 ← bitmap_line_ydxd::x#3 -Coalesced [997] bitmap_line_ydxd::e#10 ← bitmap_line_ydxd::e#1 -Coalesced [1001] bitmap_clear::bitmap#7 ← bitmap_clear::bitmap#3 -Coalesced [1010] bitmap_clear::bitmap#6 ← bitmap_clear::bitmap#1 -Coalesced [1011] bitmap_clear::y#5 ← bitmap_clear::y#1 -Coalesced (already) [1012] bitmap_clear::bitmap#8 ← bitmap_clear::bitmap#1 -Coalesced [1013] bitmap_clear::x#3 ← bitmap_clear::x#1 -Coalesced [1036] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 -Coalesced [1041] bitmap_init::y#5 ← bitmap_init::y#1 -Coalesced [1042] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 -Coalesced (already) [1043] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 -Coalesced [1044] bitmap_init::x#5 ← bitmap_init::x#1 -Coalesced [1045] bitmap_init::bits#5 ← bitmap_init::bits#4 -Coalesced [1046] bitmap_init::bits#6 ← bitmap_init::bits#1 -Coalesced [1065] mode_mcchar::col#6 ← mode_mcchar::col#3 -Coalesced [1066] mode_mcchar::ch#6 ← mode_mcchar::ch#3 -Coalesced [1086] mode_mcchar::cy#5 ← mode_mcchar::cy#1 -Coalesced [1087] mode_mcchar::col#5 ← mode_mcchar::col#1 -Coalesced [1088] mode_mcchar::ch#5 ← mode_mcchar::ch#1 -Coalesced [1089] mode_mcchar::cx#3 ← mode_mcchar::cx#1 -Coalesced (already) [1090] mode_mcchar::col#7 ← mode_mcchar::col#1 -Coalesced (already) [1091] mode_mcchar::ch#7 ← mode_mcchar::ch#1 -Coalesced [1092] mode_mcchar::i#3 ← mode_mcchar::i#1 -Coalesced [1112] mode_ecmchar::col#6 ← mode_ecmchar::col#3 -Coalesced [1113] mode_ecmchar::ch#6 ← mode_ecmchar::ch#3 -Coalesced [1133] mode_ecmchar::cy#5 ← mode_ecmchar::cy#1 -Coalesced [1134] mode_ecmchar::col#5 ← mode_ecmchar::col#1 -Coalesced [1135] mode_ecmchar::ch#5 ← mode_ecmchar::ch#1 -Coalesced [1136] mode_ecmchar::cx#3 ← mode_ecmchar::cx#1 -Coalesced (already) [1137] mode_ecmchar::col#7 ← mode_ecmchar::col#1 -Coalesced (already) [1138] mode_ecmchar::ch#7 ← mode_ecmchar::ch#1 -Coalesced [1139] mode_ecmchar::i#3 ← mode_ecmchar::i#1 -Coalesced [1156] mode_stdchar::col#6 ← mode_stdchar::col#3 -Coalesced [1157] mode_stdchar::ch#6 ← mode_stdchar::ch#3 -Coalesced [1177] mode_stdchar::cy#5 ← mode_stdchar::cy#1 -Coalesced [1178] mode_stdchar::col#5 ← mode_stdchar::col#1 -Coalesced [1179] mode_stdchar::ch#5 ← mode_stdchar::ch#1 -Coalesced [1180] mode_stdchar::cx#3 ← mode_stdchar::cx#1 -Coalesced (already) [1181] mode_stdchar::col#7 ← mode_stdchar::col#1 -Coalesced (already) [1182] mode_stdchar::ch#7 ← mode_stdchar::ch#1 -Coalesced [1183] mode_stdchar::i#3 ← mode_stdchar::i#1 -Coalesced [1188] print_str_lines::str#10 ← print_str_lines::str#2 -Coalesced [1189] print_char_cursor#101 ← print_char_cursor#19 -Coalesced [1196] print_char_cursor#104 ← print_char_cursor#1 -Coalesced [1201] print_str_lines::str#9 ← print_str_lines::str#0 -Not coalescing [1202] print_char_cursor#100 ← print_line_cursor#19 -Coalesced [1203] print_line_cursor#100 ← print_line_cursor#19 -Coalesced (already) [1204] print_str_lines::str#11 ← print_str_lines::str#0 -Coalesced [1205] print_char_cursor#102 ← print_char_cursor#32 -Coalesced (already) [1206] print_char_cursor#103 ← print_char_cursor#17 -Coalesced [1207] print_line_cursor#101 ← print_line_cursor#17 -Coalesced (already) [1213] print_line_cursor#102 ← print_line_cursor#19 -Coalesced [1226] memset::dst#4 ← memset::dst#1 +Coalesced [144] menu::c#6 ← menu::c#1 +Coalesced [145] menu::i#3 ← menu::i#1 +Coalesced [164] mode_8bppchunkybmm::gfxb#8 ← mode_8bppchunkybmm::gfxb#5 +Coalesced [165] mode_8bppchunkybmm::gfxbCpuBank#11 ← mode_8bppchunkybmm::gfxbCpuBank#7 +Coalesced [169] dtvSetCpuBankSegment1::cpuBankIdx#4 ← dtvSetCpuBankSegment1::cpuBankIdx#1 +Coalesced [172] mode_8bppchunkybmm::gfxbCpuBank#13 ← mode_8bppchunkybmm::gfxbCpuBank#2 +Coalesced [188] mode_8bppchunkybmm::gfxb#7 ← mode_8bppchunkybmm::gfxb#1 +Coalesced [189] mode_8bppchunkybmm::y#8 ← mode_8bppchunkybmm::y#1 +Coalesced [190] mode_8bppchunkybmm::gfxbCpuBank#10 ← mode_8bppchunkybmm::gfxbCpuBank#8 +Coalesced (already) [191] mode_8bppchunkybmm::gfxb#9 ← mode_8bppchunkybmm::gfxb#1 +Coalesced [192] mode_8bppchunkybmm::x#6 ← mode_8bppchunkybmm::x#1 +Coalesced (already) [193] mode_8bppchunkybmm::gfxbCpuBank#12 ← mode_8bppchunkybmm::gfxbCpuBank#8 +Coalesced [194] mode_8bppchunkybmm::gfxb#10 ← mode_8bppchunkybmm::gfxb#3 +Coalesced (already) [195] mode_8bppchunkybmm::gfxbCpuBank#14 ← mode_8bppchunkybmm::gfxbCpuBank#4 +Coalesced [196] mode_8bppchunkybmm::i#3 ← mode_8bppchunkybmm::i#1 +Coalesced [198] dtv_control#291 ← dtv_control#144 +Coalesced [213] mode_ctrl::ctrl#29 ← mode_ctrl::ctrl#1 +Coalesced [220] mode_ctrl::ctrl#31 ← mode_ctrl::ctrl#2 +Coalesced [227] mode_ctrl::ctrl#33 ← mode_ctrl::ctrl#3 +Coalesced [234] mode_ctrl::ctrl#35 ← mode_ctrl::ctrl#4 +Coalesced [241] mode_ctrl::ctrl#37 ← mode_ctrl::ctrl#5 +Coalesced [248] mode_ctrl::ctrl#39 ← mode_ctrl::ctrl#6 +Coalesced [260] dtv_control#293 ← dtv_control#17 +Coalesced (already) [261] dtv_control#292 ← dtv_control#114 +Coalesced [262] mode_ctrl::ctrl#41 ← mode_ctrl::ctrl#22 +Coalesced [263] mode_ctrl::ctrl#40 ← mode_ctrl::ctrl#13 +Coalesced [264] mode_ctrl::ctrl#38 ← mode_ctrl::ctrl#12 +Coalesced [265] mode_ctrl::ctrl#36 ← mode_ctrl::ctrl#11 +Coalesced [266] mode_ctrl::ctrl#34 ← mode_ctrl::ctrl#10 +Coalesced [267] mode_ctrl::ctrl#32 ← mode_ctrl::ctrl#17 +Coalesced [268] mode_ctrl::ctrl#30 ← mode_ctrl::ctrl#0 +Coalesced [307] mode_8bpppixelcell::gfxa#6 ← mode_8bpppixelcell::gfxa#3 +Coalesced [321] mode_8bpppixelcell::chargen#11 ← mode_8bpppixelcell::chargen#4 +Coalesced [322] mode_8bpppixelcell::gfxb#11 ← mode_8bpppixelcell::gfxb#7 +Coalesced [323] mode_8bpppixelcell::col#11 ← mode_8bpppixelcell::col#7 +Coalesced [327] mode_8bpppixelcell::bits#6 ← mode_8bpppixelcell::bits#0 +Coalesced [328] mode_8bpppixelcell::gfxb#13 ← mode_8bpppixelcell::gfxb#5 +Coalesced [329] mode_8bpppixelcell::col#13 ← mode_8bpppixelcell::col#5 +Not coalescing [333] mode_8bpppixelcell::c#3 ← mode_8bpppixelcell::col#2 +Coalesced [349] mode_8bpppixelcell::chargen#9 ← mode_8bpppixelcell::chargen#1 +Coalesced [350] mode_8bpppixelcell::gfxb#9 ← mode_8bpppixelcell::gfxb#1 +Coalesced [351] mode_8bpppixelcell::col#9 ← mode_8bpppixelcell::col#1 +Coalesced [352] mode_8bpppixelcell::ch#9 ← mode_8bpppixelcell::ch#1 +Coalesced (already) [353] mode_8bpppixelcell::chargen#10 ← mode_8bpppixelcell::chargen#1 +Coalesced (already) [354] mode_8bpppixelcell::gfxb#10 ← mode_8bpppixelcell::gfxb#1 +Coalesced (already) [355] mode_8bpppixelcell::col#10 ← mode_8bpppixelcell::col#1 +Coalesced [356] mode_8bpppixelcell::cr#7 ← mode_8bpppixelcell::cr#1 +Coalesced [357] mode_8bpppixelcell::bits#5 ← mode_8bpppixelcell::bits#1 +Coalesced (already) [358] mode_8bpppixelcell::gfxb#12 ← mode_8bpppixelcell::gfxb#1 +Coalesced (already) [359] mode_8bpppixelcell::col#12 ← mode_8bpppixelcell::col#1 +Coalesced [360] mode_8bpppixelcell::cp#5 ← mode_8bpppixelcell::cp#1 +Coalesced [361] mode_8bpppixelcell::ay#5 ← mode_8bpppixelcell::ay#1 +Coalesced [362] mode_8bpppixelcell::gfxa#5 ← mode_8bpppixelcell::gfxa#1 +Coalesced [363] mode_8bpppixelcell::ax#3 ← mode_8bpppixelcell::ax#1 +Coalesced (already) [364] mode_8bpppixelcell::gfxa#7 ← mode_8bpppixelcell::gfxa#1 +Coalesced [365] mode_8bpppixelcell::i#3 ← mode_8bpppixelcell::i#1 +Coalesced [389] mode_sixsfred::col#6 ← mode_sixsfred::col#3 +Coalesced [401] mode_sixsfred::gfxa#6 ← mode_sixsfred::gfxa#3 +Coalesced [413] mode_sixsfred::gfxb#6 ← mode_sixsfred::gfxb#3 +Coalesced [425] mode_sixsfred::gfxb#5 ← mode_sixsfred::gfxb#1 +Coalesced [426] mode_sixsfred::by#5 ← mode_sixsfred::by#1 +Coalesced (already) [427] mode_sixsfred::gfxb#7 ← mode_sixsfred::gfxb#1 +Coalesced [428] mode_sixsfred::bx#3 ← mode_sixsfred::bx#1 +Coalesced [429] mode_sixsfred::ay#5 ← mode_sixsfred::ay#1 +Coalesced [430] mode_sixsfred::gfxa#5 ← mode_sixsfred::gfxa#1 +Coalesced (already) [431] mode_sixsfred::gfxa#7 ← mode_sixsfred::gfxa#1 +Coalesced [432] mode_sixsfred::ax#3 ← mode_sixsfred::ax#1 +Coalesced [433] mode_sixsfred::cy#5 ← mode_sixsfred::cy#1 +Coalesced [434] mode_sixsfred::col#5 ← mode_sixsfred::col#1 +Coalesced [435] mode_sixsfred::cx#3 ← mode_sixsfred::cx#1 +Coalesced (already) [436] mode_sixsfred::col#7 ← mode_sixsfred::col#1 +Coalesced [437] mode_sixsfred::i#3 ← mode_sixsfred::i#1 +Coalesced [463] mode_twoplanebitmap::col#6 ← mode_twoplanebitmap::col#3 +Coalesced [477] mode_twoplanebitmap::gfxa#11 ← mode_twoplanebitmap::gfxa#7 +Coalesced [483] mode_twoplanebitmap::gfxa#12 ← mode_twoplanebitmap::gfxa#2 +Coalesced [491] mode_twoplanebitmap::gfxb#6 ← mode_twoplanebitmap::gfxb#3 +Coalesced [503] mode_twoplanebitmap::gfxb#5 ← mode_twoplanebitmap::gfxb#1 +Coalesced [504] mode_twoplanebitmap::by#5 ← mode_twoplanebitmap::by#1 +Coalesced (already) [505] mode_twoplanebitmap::gfxb#7 ← mode_twoplanebitmap::gfxb#1 +Coalesced [506] mode_twoplanebitmap::bx#3 ← mode_twoplanebitmap::bx#1 +Coalesced [507] mode_twoplanebitmap::ay#8 ← mode_twoplanebitmap::ay#1 +Coalesced [508] mode_twoplanebitmap::gfxa#9 ← mode_twoplanebitmap::gfxa#6 +Coalesced (already) [509] mode_twoplanebitmap::gfxa#10 ← mode_twoplanebitmap::gfxa#6 +Coalesced [510] mode_twoplanebitmap::ax#6 ← mode_twoplanebitmap::ax#1 +Coalesced [513] mode_twoplanebitmap::gfxa#13 ← mode_twoplanebitmap::gfxa#1 +Coalesced [514] mode_twoplanebitmap::cy#5 ← mode_twoplanebitmap::cy#1 +Coalesced [515] mode_twoplanebitmap::col#5 ← mode_twoplanebitmap::col#1 +Coalesced [516] mode_twoplanebitmap::cx#3 ← mode_twoplanebitmap::cx#1 +Coalesced (already) [517] mode_twoplanebitmap::col#7 ← mode_twoplanebitmap::col#1 +Coalesced [518] mode_twoplanebitmap::i#3 ← mode_twoplanebitmap::i#1 +Coalesced [542] mode_sixsfred2::col#6 ← mode_sixsfred2::col#3 +Coalesced [556] mode_sixsfred2::gfxa#6 ← mode_sixsfred2::gfxa#3 +Coalesced [568] mode_sixsfred2::gfxb#6 ← mode_sixsfred2::gfxb#3 +Coalesced [580] mode_sixsfred2::gfxb#5 ← mode_sixsfred2::gfxb#1 +Coalesced [581] mode_sixsfred2::by#5 ← mode_sixsfred2::by#1 +Coalesced (already) [582] mode_sixsfred2::gfxb#7 ← mode_sixsfred2::gfxb#1 +Coalesced [583] mode_sixsfred2::bx#3 ← mode_sixsfred2::bx#1 +Coalesced [584] mode_sixsfred2::ay#5 ← mode_sixsfred2::ay#1 +Coalesced [585] mode_sixsfred2::gfxa#5 ← mode_sixsfred2::gfxa#1 +Coalesced (already) [586] mode_sixsfred2::gfxa#7 ← mode_sixsfred2::gfxa#1 +Coalesced [587] mode_sixsfred2::ax#3 ← mode_sixsfred2::ax#1 +Coalesced [588] mode_sixsfred2::cy#5 ← mode_sixsfred2::cy#1 +Coalesced [589] mode_sixsfred2::col#5 ← mode_sixsfred2::col#1 +Coalesced [590] mode_sixsfred2::cx#3 ← mode_sixsfred2::cx#1 +Coalesced (already) [591] mode_sixsfred2::col#7 ← mode_sixsfred2::col#1 +Coalesced [592] mode_sixsfred2::i#3 ← mode_sixsfred2::i#1 +Coalesced [611] mode_hicolmcchar::col#6 ← mode_hicolmcchar::col#3 +Coalesced [612] mode_hicolmcchar::ch#6 ← mode_hicolmcchar::ch#3 +Coalesced [630] mode_hicolmcchar::cy#5 ← mode_hicolmcchar::cy#1 +Coalesced [631] mode_hicolmcchar::col#5 ← mode_hicolmcchar::col#1 +Coalesced [632] mode_hicolmcchar::ch#5 ← mode_hicolmcchar::ch#1 +Coalesced [633] mode_hicolmcchar::cx#3 ← mode_hicolmcchar::cx#1 +Coalesced (already) [634] mode_hicolmcchar::col#7 ← mode_hicolmcchar::col#1 +Coalesced (already) [635] mode_hicolmcchar::ch#7 ← mode_hicolmcchar::ch#1 +Coalesced [636] mode_hicolmcchar::i#3 ← mode_hicolmcchar::i#1 +Coalesced [656] mode_hicolecmchar::col#6 ← mode_hicolecmchar::col#3 +Coalesced [657] mode_hicolecmchar::ch#6 ← mode_hicolecmchar::ch#3 +Coalesced [675] mode_hicolecmchar::cy#5 ← mode_hicolecmchar::cy#1 +Coalesced [676] mode_hicolecmchar::col#5 ← mode_hicolecmchar::col#1 +Coalesced [677] mode_hicolecmchar::ch#5 ← mode_hicolecmchar::ch#1 +Coalesced [678] mode_hicolecmchar::cx#3 ← mode_hicolecmchar::cx#1 +Coalesced (already) [679] mode_hicolecmchar::col#7 ← mode_hicolecmchar::col#1 +Coalesced (already) [680] mode_hicolecmchar::ch#7 ← mode_hicolecmchar::ch#1 +Coalesced [681] mode_hicolecmchar::i#3 ← mode_hicolecmchar::i#1 +Coalesced [698] mode_hicolstdchar::col#6 ← mode_hicolstdchar::col#3 +Coalesced [699] mode_hicolstdchar::ch#6 ← mode_hicolstdchar::ch#3 +Coalesced [717] mode_hicolstdchar::cy#5 ← mode_hicolstdchar::cy#1 +Coalesced [718] mode_hicolstdchar::col#5 ← mode_hicolstdchar::col#1 +Coalesced [719] mode_hicolstdchar::ch#5 ← mode_hicolstdchar::ch#1 +Coalesced [720] mode_hicolstdchar::cx#3 ← mode_hicolstdchar::cx#1 +Coalesced (already) [721] mode_hicolstdchar::col#7 ← mode_hicolstdchar::col#1 +Coalesced (already) [722] mode_hicolstdchar::ch#7 ← mode_hicolstdchar::ch#1 +Coalesced [723] mode_hicolstdchar::i#3 ← mode_hicolstdchar::i#1 +Coalesced [738] mode_stdbitmap::ch#6 ← mode_stdbitmap::ch#3 +Coalesced [769] mode_stdbitmap::l#8 ← mode_stdbitmap::l#1 +Coalesced [770] mode_stdbitmap::cy#5 ← mode_stdbitmap::cy#1 +Coalesced [771] mode_stdbitmap::ch#5 ← mode_stdbitmap::ch#1 +Coalesced [772] mode_stdbitmap::cx#3 ← mode_stdbitmap::cx#1 +Coalesced (already) [773] mode_stdbitmap::ch#7 ← mode_stdbitmap::ch#1 +Coalesced [774] mode_stdbitmap::i#3 ← mode_stdbitmap::i#1 +Coalesced [785] bitmap_line_ydxi::xd#8 ← bitmap_line_ydxi::xd#0 +Coalesced [786] bitmap_line_ydxi::x#9 ← bitmap_line_ydxi::x#0 +Coalesced [787] bitmap_line_ydxi::y#9 ← bitmap_line_ydxi::y#0 +Coalesced [788] bitmap_line_ydxi::yd#8 ← bitmap_line_ydxi::yd#0 +Coalesced [789] bitmap_line_ydxi::y1#8 ← bitmap_line_ydxi::y1#0 +Coalesced [798] bitmap_line_xdyi::yd#7 ← bitmap_line_xdyi::yd#0 +Coalesced [799] bitmap_line_xdyi::x#8 ← bitmap_line_xdyi::x#0 +Coalesced [800] bitmap_line_xdyi::y#8 ← bitmap_line_xdyi::y#0 +Coalesced [801] bitmap_line_xdyi::xd#7 ← bitmap_line_xdyi::xd#0 +Coalesced [802] bitmap_line_xdyi::x1#7 ← bitmap_line_xdyi::x1#0 +Coalesced [812] bitmap_line_ydxd::xd#7 ← bitmap_line_ydxd::xd#0 +Coalesced [813] bitmap_line_ydxd::x#8 ← bitmap_line_ydxd::x#0 +Coalesced [814] bitmap_line_ydxd::y#9 ← bitmap_line_ydxd::y#0 +Coalesced [815] bitmap_line_ydxd::yd#7 ← bitmap_line_ydxd::yd#0 +Coalesced [816] bitmap_line_ydxd::y1#7 ← bitmap_line_ydxd::y1#0 +Coalesced [824] bitmap_line_xdyd::yd#7 ← bitmap_line_xdyd::yd#0 +Coalesced [825] bitmap_line_xdyd::x#8 ← bitmap_line_xdyd::x#0 +Coalesced [826] bitmap_line_xdyd::y#8 ← bitmap_line_xdyd::y#0 +Coalesced [827] bitmap_line_xdyd::xd#7 ← bitmap_line_xdyd::xd#0 +Coalesced [828] bitmap_line_xdyd::x1#7 ← bitmap_line_xdyd::x1#0 +Coalesced [840] bitmap_line_ydxd::xd#8 ← bitmap_line_ydxd::xd#1 +Coalesced [841] bitmap_line_ydxd::x#9 ← bitmap_line_ydxd::x#1 +Coalesced [842] bitmap_line_ydxd::y#10 ← bitmap_line_ydxd::y#1 +Coalesced [843] bitmap_line_ydxd::yd#8 ← bitmap_line_ydxd::yd#1 +Coalesced [844] bitmap_line_ydxd::y1#8 ← bitmap_line_ydxd::y1#1 +Coalesced [852] bitmap_line_xdyd::yd#8 ← bitmap_line_xdyd::yd#1 +Coalesced [853] bitmap_line_xdyd::x#9 ← bitmap_line_xdyd::x#1 +Coalesced [854] bitmap_line_xdyd::y#9 ← bitmap_line_xdyd::y#1 +Coalesced [855] bitmap_line_xdyd::xd#8 ← bitmap_line_xdyd::xd#1 +Coalesced [856] bitmap_line_xdyd::x1#8 ← bitmap_line_xdyd::x1#1 +Coalesced [866] bitmap_line_ydxi::xd#7 ← bitmap_line_ydxi::xd#1 +Coalesced [867] bitmap_line_ydxi::x#8 ← bitmap_line_ydxi::x#1 +Coalesced [868] bitmap_line_ydxi::y#8 ← bitmap_line_ydxi::y#1 +Coalesced [869] bitmap_line_ydxi::yd#7 ← bitmap_line_ydxi::yd#1 +Coalesced [870] bitmap_line_ydxi::y1#7 ← bitmap_line_ydxi::y1#1 +Coalesced [878] bitmap_line_xdyi::yd#8 ← bitmap_line_xdyi::yd#1 +Coalesced [879] bitmap_line_xdyi::x#9 ← bitmap_line_xdyi::x#1 +Coalesced [880] bitmap_line_xdyi::y#9 ← bitmap_line_xdyi::y#1 +Coalesced [881] bitmap_line_xdyi::xd#8 ← bitmap_line_xdyi::xd#1 +Coalesced [882] bitmap_line_xdyi::x1#8 ← bitmap_line_xdyi::x1#1 +Coalesced [887] bitmap_line_xdyi::x#10 ← bitmap_line_xdyi::x#6 +Coalesced [888] bitmap_line_xdyi::y#10 ← bitmap_line_xdyi::y#5 +Coalesced [889] bitmap_line_xdyi::e#7 ← bitmap_line_xdyi::e#0 +Coalesced [893] bitmap_plot::x#6 ← bitmap_plot::x#0 +Coalesced [894] bitmap_plot::y#6 ← bitmap_plot::y#0 +Coalesced [901] bitmap_line_xdyi::y#12 ← bitmap_line_xdyi::y#2 +Coalesced [902] bitmap_line_xdyi::e#9 ← bitmap_line_xdyi::e#2 +Coalesced [907] bitmap_line_xdyi::x#11 ← bitmap_line_xdyi::x#2 +Coalesced [908] bitmap_line_xdyi::y#11 ← bitmap_line_xdyi::y#6 +Coalesced [909] bitmap_line_xdyi::e#8 ← bitmap_line_xdyi::e#6 +Coalesced (already) [910] bitmap_line_xdyi::y#13 ← bitmap_line_xdyi::y#3 +Coalesced [911] bitmap_line_xdyi::e#10 ← bitmap_line_xdyi::e#1 +Coalesced [921] bitmap_line_ydxi::x#10 ← bitmap_line_ydxi::x#5 +Coalesced [922] bitmap_line_ydxi::y#10 ← bitmap_line_ydxi::y#6 +Coalesced [923] bitmap_line_ydxi::e#7 ← bitmap_line_ydxi::e#0 +Coalesced [927] bitmap_plot::x#8 ← bitmap_plot::x#2 +Coalesced [928] bitmap_plot::y#8 ← bitmap_plot::y#2 +Coalesced [935] bitmap_line_ydxi::x#12 ← bitmap_line_ydxi::x#2 +Coalesced [936] bitmap_line_ydxi::e#9 ← bitmap_line_ydxi::e#2 +Coalesced [941] bitmap_line_ydxi::x#11 ← bitmap_line_ydxi::x#6 +Coalesced [942] bitmap_line_ydxi::y#11 ← bitmap_line_ydxi::y#2 +Coalesced [943] bitmap_line_ydxi::e#8 ← bitmap_line_ydxi::e#6 +Coalesced (already) [944] bitmap_line_ydxi::x#13 ← bitmap_line_ydxi::x#3 +Coalesced [945] bitmap_line_ydxi::e#10 ← bitmap_line_ydxi::e#1 +Coalesced [948] bitmap_line_xdyd::x#10 ← bitmap_line_xdyd::x#6 +Coalesced [949] bitmap_line_xdyd::y#10 ← bitmap_line_xdyd::y#5 +Coalesced [950] bitmap_line_xdyd::e#7 ← bitmap_line_xdyd::e#0 +Coalesced [954] bitmap_plot::x#5 ← bitmap_plot::x#1 +Coalesced [955] bitmap_plot::y#5 ← bitmap_plot::y#1 +Coalesced [962] bitmap_line_xdyd::y#12 ← bitmap_line_xdyd::y#2 +Coalesced [963] bitmap_line_xdyd::e#9 ← bitmap_line_xdyd::e#2 +Coalesced [968] bitmap_line_xdyd::x#11 ← bitmap_line_xdyd::x#2 +Coalesced [969] bitmap_line_xdyd::y#11 ← bitmap_line_xdyd::y#6 +Coalesced [970] bitmap_line_xdyd::e#8 ← bitmap_line_xdyd::e#6 +Coalesced (already) [971] bitmap_line_xdyd::y#13 ← bitmap_line_xdyd::y#3 +Coalesced [972] bitmap_line_xdyd::e#10 ← bitmap_line_xdyd::e#1 +Coalesced [975] bitmap_line_ydxd::x#10 ← bitmap_line_ydxd::x#5 +Coalesced [976] bitmap_line_ydxd::y#11 ← bitmap_line_ydxd::y#7 +Coalesced [977] bitmap_line_ydxd::e#7 ← bitmap_line_ydxd::e#0 +Coalesced [981] bitmap_plot::x#7 ← bitmap_plot::x#3 +Coalesced [982] bitmap_plot::y#7 ← bitmap_plot::y#3 +Coalesced [989] bitmap_line_ydxd::x#12 ← bitmap_line_ydxd::x#2 +Coalesced [990] bitmap_line_ydxd::e#9 ← bitmap_line_ydxd::e#2 +Coalesced [995] bitmap_line_ydxd::x#11 ← bitmap_line_ydxd::x#6 +Coalesced [996] bitmap_line_ydxd::y#12 ← bitmap_line_ydxd::y#3 +Coalesced [997] bitmap_line_ydxd::e#8 ← bitmap_line_ydxd::e#6 +Coalesced (already) [998] bitmap_line_ydxd::x#13 ← bitmap_line_ydxd::x#3 +Coalesced [999] bitmap_line_ydxd::e#10 ← bitmap_line_ydxd::e#1 +Coalesced [1003] bitmap_clear::bitmap#7 ← bitmap_clear::bitmap#3 +Coalesced [1012] bitmap_clear::bitmap#6 ← bitmap_clear::bitmap#1 +Coalesced [1013] bitmap_clear::y#5 ← bitmap_clear::y#1 +Coalesced (already) [1014] bitmap_clear::bitmap#8 ← bitmap_clear::bitmap#1 +Coalesced [1015] bitmap_clear::x#3 ← bitmap_clear::x#1 +Coalesced [1038] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 +Coalesced [1043] bitmap_init::y#5 ← bitmap_init::y#1 +Coalesced [1044] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 +Coalesced (already) [1045] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 +Coalesced [1046] bitmap_init::x#5 ← bitmap_init::x#1 +Coalesced [1047] bitmap_init::bits#5 ← bitmap_init::bits#4 +Coalesced [1048] bitmap_init::bits#6 ← bitmap_init::bits#1 +Coalesced [1067] mode_mcchar::col#6 ← mode_mcchar::col#3 +Coalesced [1068] mode_mcchar::ch#6 ← mode_mcchar::ch#3 +Coalesced [1088] mode_mcchar::cy#5 ← mode_mcchar::cy#1 +Coalesced [1089] mode_mcchar::col#5 ← mode_mcchar::col#1 +Coalesced [1090] mode_mcchar::ch#5 ← mode_mcchar::ch#1 +Coalesced [1091] mode_mcchar::cx#3 ← mode_mcchar::cx#1 +Coalesced (already) [1092] mode_mcchar::col#7 ← mode_mcchar::col#1 +Coalesced (already) [1093] mode_mcchar::ch#7 ← mode_mcchar::ch#1 +Coalesced [1094] mode_mcchar::i#3 ← mode_mcchar::i#1 +Coalesced [1114] mode_ecmchar::col#6 ← mode_ecmchar::col#3 +Coalesced [1115] mode_ecmchar::ch#6 ← mode_ecmchar::ch#3 +Coalesced [1135] mode_ecmchar::cy#5 ← mode_ecmchar::cy#1 +Coalesced [1136] mode_ecmchar::col#5 ← mode_ecmchar::col#1 +Coalesced [1137] mode_ecmchar::ch#5 ← mode_ecmchar::ch#1 +Coalesced [1138] mode_ecmchar::cx#3 ← mode_ecmchar::cx#1 +Coalesced (already) [1139] mode_ecmchar::col#7 ← mode_ecmchar::col#1 +Coalesced (already) [1140] mode_ecmchar::ch#7 ← mode_ecmchar::ch#1 +Coalesced [1141] mode_ecmchar::i#3 ← mode_ecmchar::i#1 +Coalesced [1158] mode_stdchar::col#6 ← mode_stdchar::col#3 +Coalesced [1159] mode_stdchar::ch#6 ← mode_stdchar::ch#3 +Coalesced [1179] mode_stdchar::cy#5 ← mode_stdchar::cy#1 +Coalesced [1180] mode_stdchar::col#5 ← mode_stdchar::col#1 +Coalesced [1181] mode_stdchar::ch#5 ← mode_stdchar::ch#1 +Coalesced [1182] mode_stdchar::cx#3 ← mode_stdchar::cx#1 +Coalesced (already) [1183] mode_stdchar::col#7 ← mode_stdchar::col#1 +Coalesced (already) [1184] mode_stdchar::ch#7 ← mode_stdchar::ch#1 +Coalesced [1185] mode_stdchar::i#3 ← mode_stdchar::i#1 +Coalesced [1190] print_str_lines::str#10 ← print_str_lines::str#2 +Coalesced [1191] print_char_cursor#101 ← print_char_cursor#19 +Coalesced [1198] print_char_cursor#104 ← print_char_cursor#1 +Coalesced [1203] print_str_lines::str#9 ← print_str_lines::str#0 +Not coalescing [1204] print_char_cursor#100 ← print_line_cursor#19 +Coalesced [1205] print_line_cursor#100 ← print_line_cursor#19 +Coalesced (already) [1206] print_str_lines::str#11 ← print_str_lines::str#0 +Coalesced [1207] print_char_cursor#102 ← print_char_cursor#32 +Coalesced (already) [1208] print_char_cursor#103 ← print_char_cursor#17 +Coalesced [1209] print_line_cursor#101 ← print_line_cursor#17 +Coalesced (already) [1215] print_line_cursor#102 ← print_line_cursor#19 +Coalesced [1229] memset::dst#6 ← memset::dst#1 Coalesced down to 125 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @17 @@ -10609,6 +10635,7 @@ Culled Empty Block (label) @72 Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@7 Culled Empty Block (label) menu::@2 +Culled Empty Block (label) menu::@3_1 Culled Empty Block (label) menu::@53 Culled Empty Block (label) menu::@9 Culled Empty Block (label) menu::@56 @@ -10623,6 +10650,7 @@ Culled Empty Block (label) menu::@72 Culled Empty Block (label) menu::@74 Culled Empty Block (label) menu::@76 Culled Empty Block (label) menu::@77 +Culled Empty Block (label) menu::@79 Culled Empty Block (label) menu::@78 Culled Empty Block (label) mode_8bppchunkybmm::@9 Culled Empty Block (label) mode_8bppchunkybmm::@12 @@ -10689,7 +10717,9 @@ Culled Empty Block (label) mode_hicolstdchar::@9 Culled Empty Block (label) mode_hicolstdchar::@10 Culled Empty Block (label) mode_hicolstdchar::@8 Culled Empty Block (label) mode_stdbitmap::@14 +Culled Empty Block (label) mode_stdbitmap::@7_1 Culled Empty Block (label) mode_stdbitmap::@16 +Culled Empty Block (label) mode_stdbitmap::@20 Culled Empty Block (label) mode_stdbitmap::@18 Culled Empty Block (label) mode_stdbitmap::@19 Culled Empty Block (label) mode_stdbitmap::@17 @@ -10735,7 +10765,9 @@ Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) print_ln::@3 Culled Empty Block (label) print_cls::@1 Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@4_1 Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@10 Renumbering block @71 to @1 Renumbering block memset::@4 to memset::@1 Renumbering block memset::@5 to memset::@2 @@ -10966,187 +10998,187 @@ menu::@1: scope:[menu] from menu menu::@1 [20] *((const byte*) DTV_PALETTE#0 + (byte) menu::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) menu::i#2) [21] (byte) menu::i#1 ← ++ (byte) menu::i#2 [22] if((byte) menu::i#1!=(byte) $10) goto menu::@1 + to:menu::@3 +menu::@3: scope:[menu] from menu::@1 menu::@2 + [23] (byte*) menu::c#4 ← phi( menu::@2/(byte*) menu::c#1 menu::@1/(const byte*) COLS#0 ) + [24] *((byte*) menu::c#4) ← (const byte) LIGHT_GREEN#0 + [25] (byte*) menu::c#1 ← ++ (byte*) menu::c#4 to:menu::@2 -menu::@2: scope:[menu] from menu::@1 menu::@3 - [23] (byte*) menu::c#2 ← phi( menu::@1/(const byte*) COLS#0 menu::@3/(byte*) menu::c#1 ) - [24] if((byte*) menu::c#2!=(const byte*) COLS#0+(word) $3e8) goto menu::@3 +menu::@2: scope:[menu] from menu::@3 + [26] if((byte*) menu::c#1!=(const byte*) COLS#0+(word) $3e8) goto menu::@3 to:menu::@4 menu::@4: scope:[menu] from menu::@2 - [25] *((const byte*) BGCOL#0) ← (byte) 0 - [26] *((const byte*) BORDERCOL#0) ← (byte) 0 - [27] call print_set_screen + [27] *((const byte*) BGCOL#0) ← (byte) 0 + [28] *((const byte*) BORDERCOL#0) ← (byte) 0 + [29] call print_set_screen to:menu::@29 menu::@29: scope:[menu] from menu::@4 - [28] phi() - [29] call print_cls + [30] phi() + [31] call print_cls to:menu::@30 menu::@30: scope:[menu] from menu::@29 - [30] phi() - [31] call print_str_lines + [32] phi() + [33] call print_str_lines to:menu::@5 menu::@5: scope:[menu] from menu::@30 menu::@42 - [32] phi() - [33] call keyboard_key_pressed - [34] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + [34] phi() + [35] call keyboard_key_pressed + [36] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 to:menu::@31 menu::@31: scope:[menu] from menu::@5 - [35] (byte~) menu::$29 ← (byte) keyboard_key_pressed::return#2 - [36] if((byte~) menu::$29==(byte) 0) goto menu::@6 + [37] (byte~) menu::$29 ← (byte) keyboard_key_pressed::return#2 + [38] if((byte~) menu::$29==(byte) 0) goto menu::@6 to:menu::@17 menu::@17: scope:[menu] from menu::@31 - [37] phi() - [38] call mode_stdchar + [39] phi() + [40] call mode_stdchar to:menu::@return menu::@return: scope:[menu] from menu::@17 menu::@18 menu::@19 menu::@20 menu::@21 menu::@22 menu::@23 menu::@24 menu::@25 menu::@26 menu::@27 menu::@28 - [39] return + [41] return to:@return menu::@6: scope:[menu] from menu::@31 - [40] phi() - [41] call keyboard_key_pressed - [42] (byte) keyboard_key_pressed::return#24 ← (byte) keyboard_key_pressed::return#0 + [42] phi() + [43] call keyboard_key_pressed + [44] (byte) keyboard_key_pressed::return#24 ← (byte) keyboard_key_pressed::return#0 to:menu::@32 menu::@32: scope:[menu] from menu::@6 - [43] (byte~) menu::$33 ← (byte) keyboard_key_pressed::return#24 - [44] if((byte~) menu::$33==(byte) 0) goto menu::@7 + [45] (byte~) menu::$33 ← (byte) keyboard_key_pressed::return#24 + [46] if((byte~) menu::$33==(byte) 0) goto menu::@7 to:menu::@18 menu::@18: scope:[menu] from menu::@32 - [45] phi() - [46] call mode_ecmchar + [47] phi() + [48] call mode_ecmchar to:menu::@return menu::@7: scope:[menu] from menu::@32 - [47] phi() - [48] call keyboard_key_pressed - [49] (byte) keyboard_key_pressed::return#25 ← (byte) keyboard_key_pressed::return#0 + [49] phi() + [50] call keyboard_key_pressed + [51] (byte) keyboard_key_pressed::return#25 ← (byte) keyboard_key_pressed::return#0 to:menu::@33 menu::@33: scope:[menu] from menu::@7 - [50] (byte~) menu::$37 ← (byte) keyboard_key_pressed::return#25 - [51] if((byte~) menu::$37==(byte) 0) goto menu::@8 + [52] (byte~) menu::$37 ← (byte) keyboard_key_pressed::return#25 + [53] if((byte~) menu::$37==(byte) 0) goto menu::@8 to:menu::@19 menu::@19: scope:[menu] from menu::@33 - [52] phi() - [53] call mode_mcchar + [54] phi() + [55] call mode_mcchar to:menu::@return menu::@8: scope:[menu] from menu::@33 - [54] phi() - [55] call keyboard_key_pressed - [56] (byte) keyboard_key_pressed::return#26 ← (byte) keyboard_key_pressed::return#0 + [56] phi() + [57] call keyboard_key_pressed + [58] (byte) keyboard_key_pressed::return#26 ← (byte) keyboard_key_pressed::return#0 to:menu::@34 menu::@34: scope:[menu] from menu::@8 - [57] (byte~) menu::$41 ← (byte) keyboard_key_pressed::return#26 - [58] if((byte~) menu::$41==(byte) 0) goto menu::@9 + [59] (byte~) menu::$41 ← (byte) keyboard_key_pressed::return#26 + [60] if((byte~) menu::$41==(byte) 0) goto menu::@9 to:menu::@20 menu::@20: scope:[menu] from menu::@34 - [59] phi() - [60] call mode_stdbitmap + [61] phi() + [62] call mode_stdbitmap to:menu::@return menu::@9: scope:[menu] from menu::@34 - [61] phi() - [62] call keyboard_key_pressed - [63] (byte) keyboard_key_pressed::return#27 ← (byte) keyboard_key_pressed::return#0 + [63] phi() + [64] call keyboard_key_pressed + [65] (byte) keyboard_key_pressed::return#27 ← (byte) keyboard_key_pressed::return#0 to:menu::@35 menu::@35: scope:[menu] from menu::@9 - [64] (byte~) menu::$45 ← (byte) keyboard_key_pressed::return#27 - [65] if((byte~) menu::$45==(byte) 0) goto menu::@10 + [66] (byte~) menu::$45 ← (byte) keyboard_key_pressed::return#27 + [67] if((byte~) menu::$45==(byte) 0) goto menu::@10 to:menu::@21 menu::@21: scope:[menu] from menu::@35 - [66] phi() - [67] call mode_hicolstdchar + [68] phi() + [69] call mode_hicolstdchar to:menu::@return menu::@10: scope:[menu] from menu::@35 - [68] phi() - [69] call keyboard_key_pressed - [70] (byte) keyboard_key_pressed::return#28 ← (byte) keyboard_key_pressed::return#0 + [70] phi() + [71] call keyboard_key_pressed + [72] (byte) keyboard_key_pressed::return#28 ← (byte) keyboard_key_pressed::return#0 to:menu::@36 menu::@36: scope:[menu] from menu::@10 - [71] (byte~) menu::$49 ← (byte) keyboard_key_pressed::return#28 - [72] if((byte~) menu::$49==(byte) 0) goto menu::@11 + [73] (byte~) menu::$49 ← (byte) keyboard_key_pressed::return#28 + [74] if((byte~) menu::$49==(byte) 0) goto menu::@11 to:menu::@22 menu::@22: scope:[menu] from menu::@36 - [73] phi() - [74] call mode_hicolecmchar + [75] phi() + [76] call mode_hicolecmchar to:menu::@return menu::@11: scope:[menu] from menu::@36 - [75] phi() - [76] call keyboard_key_pressed - [77] (byte) keyboard_key_pressed::return#29 ← (byte) keyboard_key_pressed::return#0 + [77] phi() + [78] call keyboard_key_pressed + [79] (byte) keyboard_key_pressed::return#29 ← (byte) keyboard_key_pressed::return#0 to:menu::@37 menu::@37: scope:[menu] from menu::@11 - [78] (byte~) menu::$53 ← (byte) keyboard_key_pressed::return#29 - [79] if((byte~) menu::$53==(byte) 0) goto menu::@12 + [80] (byte~) menu::$53 ← (byte) keyboard_key_pressed::return#29 + [81] if((byte~) menu::$53==(byte) 0) goto menu::@12 to:menu::@23 menu::@23: scope:[menu] from menu::@37 - [80] phi() - [81] call mode_hicolmcchar + [82] phi() + [83] call mode_hicolmcchar to:menu::@return menu::@12: scope:[menu] from menu::@37 - [82] phi() - [83] call keyboard_key_pressed - [84] (byte) keyboard_key_pressed::return#30 ← (byte) keyboard_key_pressed::return#0 + [84] phi() + [85] call keyboard_key_pressed + [86] (byte) keyboard_key_pressed::return#30 ← (byte) keyboard_key_pressed::return#0 to:menu::@38 menu::@38: scope:[menu] from menu::@12 - [85] (byte~) menu::$57 ← (byte) keyboard_key_pressed::return#30 - [86] if((byte~) menu::$57==(byte) 0) goto menu::@13 + [87] (byte~) menu::$57 ← (byte) keyboard_key_pressed::return#30 + [88] if((byte~) menu::$57==(byte) 0) goto menu::@13 to:menu::@24 menu::@24: scope:[menu] from menu::@38 - [87] phi() - [88] call mode_sixsfred2 + [89] phi() + [90] call mode_sixsfred2 to:menu::@return menu::@13: scope:[menu] from menu::@38 - [89] phi() - [90] call keyboard_key_pressed - [91] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 + [91] phi() + [92] call keyboard_key_pressed + [93] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 to:menu::@39 menu::@39: scope:[menu] from menu::@13 - [92] (byte~) menu::$61 ← (byte) keyboard_key_pressed::return#10 - [93] if((byte~) menu::$61==(byte) 0) goto menu::@14 + [94] (byte~) menu::$61 ← (byte) keyboard_key_pressed::return#10 + [95] if((byte~) menu::$61==(byte) 0) goto menu::@14 to:menu::@25 menu::@25: scope:[menu] from menu::@39 - [94] phi() - [95] call mode_twoplanebitmap + [96] phi() + [97] call mode_twoplanebitmap to:menu::@return menu::@14: scope:[menu] from menu::@39 - [96] phi() - [97] call keyboard_key_pressed - [98] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 + [98] phi() + [99] call keyboard_key_pressed + [100] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 to:menu::@40 menu::@40: scope:[menu] from menu::@14 - [99] (byte~) menu::$65 ← (byte) keyboard_key_pressed::return#11 - [100] if((byte~) menu::$65==(byte) 0) goto menu::@15 + [101] (byte~) menu::$65 ← (byte) keyboard_key_pressed::return#11 + [102] if((byte~) menu::$65==(byte) 0) goto menu::@15 to:menu::@26 menu::@26: scope:[menu] from menu::@40 - [101] phi() - [102] call mode_sixsfred + [103] phi() + [104] call mode_sixsfred to:menu::@return menu::@15: scope:[menu] from menu::@40 - [103] phi() - [104] call keyboard_key_pressed - [105] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 + [105] phi() + [106] call keyboard_key_pressed + [107] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 to:menu::@41 menu::@41: scope:[menu] from menu::@15 - [106] (byte~) menu::$69 ← (byte) keyboard_key_pressed::return#12 - [107] if((byte~) menu::$69==(byte) 0) goto menu::@16 + [108] (byte~) menu::$69 ← (byte) keyboard_key_pressed::return#12 + [109] if((byte~) menu::$69==(byte) 0) goto menu::@16 to:menu::@27 menu::@27: scope:[menu] from menu::@41 - [108] phi() - [109] call mode_8bpppixelcell + [110] phi() + [111] call mode_8bpppixelcell to:menu::@return menu::@16: scope:[menu] from menu::@41 - [110] phi() - [111] call keyboard_key_pressed - [112] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 + [112] phi() + [113] call keyboard_key_pressed + [114] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 to:menu::@42 menu::@42: scope:[menu] from menu::@16 - [113] (byte~) menu::$73 ← (byte) keyboard_key_pressed::return#13 - [114] if((byte~) menu::$73==(byte) 0) goto menu::@5 + [115] (byte~) menu::$73 ← (byte) keyboard_key_pressed::return#13 + [116] if((byte~) menu::$73==(byte) 0) goto menu::@5 to:menu::@28 menu::@28: scope:[menu] from menu::@42 - [115] phi() - [116] call mode_8bppchunkybmm + [117] phi() + [118] call mode_8bppchunkybmm to:menu::@return -menu::@3: scope:[menu] from menu::@2 - [117] *((byte*) menu::c#2) ← (const byte) LIGHT_GREEN#0 - [118] (byte*) menu::c#1 ← ++ (byte*) menu::c#2 - to:menu::@2 mode_8bppchunkybmm: scope:[mode_8bppchunkybmm] from menu::@28 [119] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0|(const byte) DTV_COLORRAM_OFF#0 [120] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 @@ -11936,28 +11968,28 @@ mode_stdbitmap::@6: scope:[mode_stdbitmap] from mode_stdbitmap::@5 mode_stdbitmap::@10: scope:[mode_stdbitmap] from mode_stdbitmap::@6 [579] phi() [580] call bitmap_clear - to:mode_stdbitmap::@7 -mode_stdbitmap::@7: scope:[mode_stdbitmap] from mode_stdbitmap::@10 mode_stdbitmap::@11 - [581] (byte) mode_stdbitmap::l#2 ← phi( mode_stdbitmap::@10/(byte) 0 mode_stdbitmap::@11/(byte) mode_stdbitmap::l#1 ) - [582] if((byte) mode_stdbitmap::l#2<(const byte) mode_stdbitmap::lines_cnt#0) goto mode_stdbitmap::@8 - to:mode_stdbitmap::@9 -mode_stdbitmap::@9: scope:[mode_stdbitmap] from mode_stdbitmap::@7 - [583] phi() - [584] call mode_ctrl - to:mode_stdbitmap::@return -mode_stdbitmap::@return: scope:[mode_stdbitmap] from mode_stdbitmap::@9 - [585] return - to:@return -mode_stdbitmap::@8: scope:[mode_stdbitmap] from mode_stdbitmap::@7 - [586] (byte) bitmap_line::x0#0 ← *((const byte[]) mode_stdbitmap::lines_x#0 + (byte) mode_stdbitmap::l#2) - [587] (byte) bitmap_line::x1#0 ← *((const byte[]) mode_stdbitmap::lines_x#0+(byte) 1 + (byte) mode_stdbitmap::l#2) - [588] (byte) bitmap_line::y0#0 ← *((const byte[]) mode_stdbitmap::lines_y#0 + (byte) mode_stdbitmap::l#2) - [589] (byte) bitmap_line::y1#0 ← *((const byte[]) mode_stdbitmap::lines_y#0+(byte) 1 + (byte) mode_stdbitmap::l#2) - [590] call bitmap_line + to:mode_stdbitmap::@8 +mode_stdbitmap::@8: scope:[mode_stdbitmap] from mode_stdbitmap::@10 mode_stdbitmap::@7 + [581] (byte) mode_stdbitmap::l#5 ← phi( mode_stdbitmap::@7/(byte) mode_stdbitmap::l#1 mode_stdbitmap::@10/(byte) 0 ) + [582] (byte) bitmap_line::x0#0 ← *((const byte[]) mode_stdbitmap::lines_x#0 + (byte) mode_stdbitmap::l#5) + [583] (byte) bitmap_line::x1#0 ← *((const byte[]) mode_stdbitmap::lines_x#0+(byte) 1 + (byte) mode_stdbitmap::l#5) + [584] (byte) bitmap_line::y0#0 ← *((const byte[]) mode_stdbitmap::lines_y#0 + (byte) mode_stdbitmap::l#5) + [585] (byte) bitmap_line::y1#0 ← *((const byte[]) mode_stdbitmap::lines_y#0+(byte) 1 + (byte) mode_stdbitmap::l#5) + [586] call bitmap_line to:mode_stdbitmap::@11 mode_stdbitmap::@11: scope:[mode_stdbitmap] from mode_stdbitmap::@8 - [591] (byte) mode_stdbitmap::l#1 ← ++ (byte) mode_stdbitmap::l#2 + [587] (byte) mode_stdbitmap::l#1 ← ++ (byte) mode_stdbitmap::l#5 to:mode_stdbitmap::@7 +mode_stdbitmap::@7: scope:[mode_stdbitmap] from mode_stdbitmap::@11 + [588] if((byte) mode_stdbitmap::l#1<(const byte) mode_stdbitmap::lines_cnt#0) goto mode_stdbitmap::@8 + to:mode_stdbitmap::@9 +mode_stdbitmap::@9: scope:[mode_stdbitmap] from mode_stdbitmap::@7 + [589] phi() + [590] call mode_ctrl + to:mode_stdbitmap::@return +mode_stdbitmap::@return: scope:[mode_stdbitmap] from mode_stdbitmap::@9 + [591] return + to:@return bitmap_line: scope:[bitmap_line] from mode_stdbitmap::@8 [592] if((byte) bitmap_line::x0#0<(byte) bitmap_line::x1#0) goto bitmap_line::@1 to:bitmap_line::@2 @@ -12487,18 +12519,18 @@ print_cls::@return: scope:[print_cls] from print_cls to:@return memset: scope:[memset] from print_cls [887] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [888] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [889] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [890] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [888] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [889] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [891] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [890] return + [892] return to:@return -memset::@2: scope:[memset] from memset::@1 - [891] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [892] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 print_set_screen: scope:[print_set_screen] from menu::@4 [893] phi() to:print_set_screen::@return @@ -12876,8 +12908,8 @@ VARIABLE REGISTER WEIGHTS (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst -(byte*) memset::dst#1 202.0 -(byte*) memset::dst#2 134.66666666666666 +(byte*) memset::dst#1 151.5 +(byte*) memset::dst#4 151.5 (byte*) memset::end (word) memset::num (void*) memset::return @@ -12898,8 +12930,8 @@ VARIABLE REGISTER WEIGHTS (byte*) menu::CHARSET (byte*) menu::SCREEN (byte*) menu::c -(byte*) menu::c#1 202.0 -(byte*) menu::c#2 134.66666666666666 +(byte*) menu::c#1 151.5 +(byte*) menu::c#4 151.5 (byte) menu::i (byte) menu::i#1 151.5 (byte) menu::i#2 202.0 @@ -13247,8 +13279,8 @@ VARIABLE REGISTER WEIGHTS (byte) mode_stdbitmap::i#1 151.5 (byte) mode_stdbitmap::i#2 202.0 (byte) mode_stdbitmap::l -(byte) mode_stdbitmap::l#1 202.0 -(byte) mode_stdbitmap::l#2 101.0 +(byte) mode_stdbitmap::l#1 151.5 +(byte) mode_stdbitmap::l#5 100.99999999999999 (byte) mode_stdbitmap::lines_cnt (byte[]) mode_stdbitmap::lines_x (byte[]) mode_stdbitmap::lines_y @@ -13348,7 +13380,7 @@ VARIABLE REGISTER WEIGHTS Initial phi equivalence classes [ menu::i#2 menu::i#1 ] -[ menu::c#2 menu::c#1 ] +[ menu::c#4 menu::c#1 ] [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 ] @@ -13419,7 +13451,7 @@ Initial phi equivalence classes [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] [ mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 ] -[ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] +[ mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] @@ -13471,7 +13503,7 @@ Initial phi equivalence classes [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 ] [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] -[ memset::dst#2 memset::dst#1 ] +[ memset::dst#4 memset::dst#1 ] Added variable keyboard_key_pressed::return#2 to zero page equivalence class [ keyboard_key_pressed::return#2 ] Added variable menu::$29 to zero page equivalence class [ menu::$29 ] Added variable keyboard_key_pressed::return#24 to zero page equivalence class [ keyboard_key_pressed::return#24 ] @@ -13603,7 +13635,7 @@ Added variable mode_stdchar::$30 to zero page equivalence class [ mode_stdchar:: Added variable print_str_lines::ch#0 to zero page equivalence class [ print_str_lines::ch#0 ] Complete equivalence classes [ menu::i#2 menu::i#1 ] -[ menu::c#2 menu::c#1 ] +[ menu::c#4 menu::c#1 ] [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 ] @@ -13674,7 +13706,7 @@ Complete equivalence classes [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] [ mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 ] -[ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] +[ mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] @@ -13726,7 +13758,7 @@ Complete equivalence classes [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 ] [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] -[ memset::dst#2 memset::dst#1 ] +[ memset::dst#4 memset::dst#1 ] [ keyboard_key_pressed::return#2 ] [ menu::$29 ] [ keyboard_key_pressed::return#24 ] @@ -13857,7 +13889,7 @@ Complete equivalence classes [ mode_stdchar::$30 ] [ print_str_lines::ch#0 ] Allocated zp ZP_BYTE:2 [ menu::i#2 menu::i#1 ] -Allocated zp ZP_WORD:3 [ menu::c#2 menu::c#1 ] +Allocated zp ZP_WORD:3 [ menu::c#4 menu::c#1 ] Allocated zp ZP_BYTE:5 [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] Allocated zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] Allocated zp ZP_WORD:7 [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 ] @@ -13928,7 +13960,7 @@ Allocated zp ZP_BYTE:91 [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] Allocated zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] Allocated zp ZP_BYTE:93 [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] Allocated zp ZP_WORD:94 [ mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 ] -Allocated zp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] +Allocated zp ZP_BYTE:96 [ mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] Allocated zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Allocated zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Allocated zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] @@ -13980,7 +14012,7 @@ Allocated zp ZP_WORD:151 [ mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::c Allocated zp ZP_WORD:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] Allocated zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 ] Allocated zp ZP_WORD:157 [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] -Allocated zp ZP_WORD:159 [ memset::dst#2 memset::dst#1 ] +Allocated zp ZP_WORD:159 [ memset::dst#4 memset::dst#1 ] Allocated zp ZP_BYTE:161 [ keyboard_key_pressed::return#2 ] Allocated zp ZP_BYTE:162 [ menu::$29 ] Allocated zp ZP_BYTE:163 [ keyboard_key_pressed::return#24 ] @@ -14334,472 +14366,473 @@ menu: { lda #$10 cmp i bne b1_from_b1 - // [23] phi from menu::@1 to menu::@2 [phi:menu::@1->menu::@2] - b2_from_b1: - // [23] phi (byte*) menu::c#2 = (const byte*) COLS#0 [phi:menu::@1->menu::@2#0] -- pbuz1=pbuc1 + // [23] phi from menu::@1 to menu::@3 [phi:menu::@1->menu::@3] + b3_from_b1: + // [23] phi (byte*) menu::c#4 = (const byte*) COLS#0 [phi:menu::@1->menu::@3#0] -- pbuz1=pbuc1 lda #COLS sta c+1 + jmp b3 + // [23] phi from menu::@2 to menu::@3 [phi:menu::@2->menu::@3] + b3_from_b2: + // [23] phi (byte*) menu::c#4 = (byte*) menu::c#1 [phi:menu::@2->menu::@3#0] -- register_copy + jmp b3 + // menu::@3 + b3: + // [24] *((byte*) menu::c#4) ← (const byte) LIGHT_GREEN#0 -- _deref_pbuz1=vbuc1 + lda #LIGHT_GREEN + ldy #0 + sta (c),y + // [25] (byte*) menu::c#1 ← ++ (byte*) menu::c#4 -- pbuz1=_inc_pbuz1 + inc c + bne !+ + inc c+1 + !: jmp b2 // Char Colors // menu::@2 b2: - // [24] if((byte*) menu::c#2!=(const byte*) COLS#0+(word) $3e8) goto menu::@3 -- pbuz1_neq_pbuc1_then_la1 + // [26] if((byte*) menu::c#1!=(const byte*) COLS#0+(word) $3e8) goto menu::@3 -- pbuz1_neq_pbuc1_then_la1 lda c+1 cmp #>COLS+$3e8 - bne b3 + bne b3_from_b2 lda c cmp #print_set_screen] print_set_screen_from_b4: jsr print_set_screen - // [28] phi from menu::@4 to menu::@29 [phi:menu::@4->menu::@29] + // [30] phi from menu::@4 to menu::@29 [phi:menu::@4->menu::@29] b29_from_b4: jmp b29 // menu::@29 b29: - // [29] call print_cls + // [31] call print_cls // [884] phi from menu::@29 to print_cls [phi:menu::@29->print_cls] print_cls_from_b29: jsr print_cls - // [30] phi from menu::@29 to menu::@30 [phi:menu::@29->menu::@30] + // [32] phi from menu::@29 to menu::@30 [phi:menu::@29->menu::@30] b30_from_b29: jmp b30 // menu::@30 b30: - // [31] call print_str_lines + // [33] call print_str_lines // [864] phi from menu::@30 to print_str_lines [phi:menu::@30->print_str_lines] print_str_lines_from_b30: jsr print_str_lines - // [32] phi from menu::@30 menu::@42 to menu::@5 [phi:menu::@30/menu::@42->menu::@5] + // [34] phi from menu::@30 menu::@42 to menu::@5 [phi:menu::@30/menu::@42->menu::@5] b5_from_b30: b5_from_b42: jmp b5 // menu::@5 b5: - // [33] call keyboard_key_pressed + // [35] call keyboard_key_pressed // [211] phi from menu::@5 to keyboard_key_pressed [phi:menu::@5->keyboard_key_pressed] keyboard_key_pressed_from_b5: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_1#0 [phi:menu::@5->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_1 sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [34] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [36] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_2 jmp b31 // menu::@31 b31: - // [35] (byte~) menu::$29 ← (byte) keyboard_key_pressed::return#2 -- vbuz1=vbuz2 + // [37] (byte~) menu::$29 ← (byte) keyboard_key_pressed::return#2 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_2 sta _29 - // [36] if((byte~) menu::$29==(byte) 0) goto menu::@6 -- vbuz1_eq_0_then_la1 + // [38] if((byte~) menu::$29==(byte) 0) goto menu::@6 -- vbuz1_eq_0_then_la1 lda _29 cmp #0 beq b6_from_b31 - // [37] phi from menu::@31 to menu::@17 [phi:menu::@31->menu::@17] + // [39] phi from menu::@31 to menu::@17 [phi:menu::@31->menu::@17] b17_from_b31: jmp b17 // menu::@17 b17: - // [38] call mode_stdchar + // [40] call mode_stdchar jsr mode_stdchar jmp breturn // menu::@return breturn: - // [39] return + // [41] return rts - // [40] phi from menu::@31 to menu::@6 [phi:menu::@31->menu::@6] + // [42] phi from menu::@31 to menu::@6 [phi:menu::@31->menu::@6] b6_from_b31: jmp b6 // menu::@6 b6: - // [41] call keyboard_key_pressed + // [43] call keyboard_key_pressed // [211] phi from menu::@6 to keyboard_key_pressed [phi:menu::@6->keyboard_key_pressed] keyboard_key_pressed_from_b6: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_2#0 [phi:menu::@6->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_2 sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [42] (byte) keyboard_key_pressed::return#24 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [44] (byte) keyboard_key_pressed::return#24 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_24 jmp b32 // menu::@32 b32: - // [43] (byte~) menu::$33 ← (byte) keyboard_key_pressed::return#24 -- vbuz1=vbuz2 + // [45] (byte~) menu::$33 ← (byte) keyboard_key_pressed::return#24 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_24 sta _33 - // [44] if((byte~) menu::$33==(byte) 0) goto menu::@7 -- vbuz1_eq_0_then_la1 + // [46] if((byte~) menu::$33==(byte) 0) goto menu::@7 -- vbuz1_eq_0_then_la1 lda _33 cmp #0 beq b7_from_b32 - // [45] phi from menu::@32 to menu::@18 [phi:menu::@32->menu::@18] + // [47] phi from menu::@32 to menu::@18 [phi:menu::@32->menu::@18] b18_from_b32: jmp b18 // menu::@18 b18: - // [46] call mode_ecmchar + // [48] call mode_ecmchar jsr mode_ecmchar jmp breturn - // [47] phi from menu::@32 to menu::@7 [phi:menu::@32->menu::@7] + // [49] phi from menu::@32 to menu::@7 [phi:menu::@32->menu::@7] b7_from_b32: jmp b7 // menu::@7 b7: - // [48] call keyboard_key_pressed + // [50] call keyboard_key_pressed // [211] phi from menu::@7 to keyboard_key_pressed [phi:menu::@7->keyboard_key_pressed] keyboard_key_pressed_from_b7: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_3#0 [phi:menu::@7->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_3 sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [49] (byte) keyboard_key_pressed::return#25 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [51] (byte) keyboard_key_pressed::return#25 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_25 jmp b33 // menu::@33 b33: - // [50] (byte~) menu::$37 ← (byte) keyboard_key_pressed::return#25 -- vbuz1=vbuz2 + // [52] (byte~) menu::$37 ← (byte) keyboard_key_pressed::return#25 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_25 sta _37 - // [51] if((byte~) menu::$37==(byte) 0) goto menu::@8 -- vbuz1_eq_0_then_la1 + // [53] if((byte~) menu::$37==(byte) 0) goto menu::@8 -- vbuz1_eq_0_then_la1 lda _37 cmp #0 beq b8_from_b33 - // [52] phi from menu::@33 to menu::@19 [phi:menu::@33->menu::@19] + // [54] phi from menu::@33 to menu::@19 [phi:menu::@33->menu::@19] b19_from_b33: jmp b19 // menu::@19 b19: - // [53] call mode_mcchar + // [55] call mode_mcchar jsr mode_mcchar jmp breturn - // [54] phi from menu::@33 to menu::@8 [phi:menu::@33->menu::@8] + // [56] phi from menu::@33 to menu::@8 [phi:menu::@33->menu::@8] b8_from_b33: jmp b8 // menu::@8 b8: - // [55] call keyboard_key_pressed + // [57] call keyboard_key_pressed // [211] phi from menu::@8 to keyboard_key_pressed [phi:menu::@8->keyboard_key_pressed] keyboard_key_pressed_from_b8: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_4#0 [phi:menu::@8->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_4 sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [56] (byte) keyboard_key_pressed::return#26 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [58] (byte) keyboard_key_pressed::return#26 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_26 jmp b34 // menu::@34 b34: - // [57] (byte~) menu::$41 ← (byte) keyboard_key_pressed::return#26 -- vbuz1=vbuz2 + // [59] (byte~) menu::$41 ← (byte) keyboard_key_pressed::return#26 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_26 sta _41 - // [58] if((byte~) menu::$41==(byte) 0) goto menu::@9 -- vbuz1_eq_0_then_la1 + // [60] if((byte~) menu::$41==(byte) 0) goto menu::@9 -- vbuz1_eq_0_then_la1 lda _41 cmp #0 beq b9_from_b34 - // [59] phi from menu::@34 to menu::@20 [phi:menu::@34->menu::@20] + // [61] phi from menu::@34 to menu::@20 [phi:menu::@34->menu::@20] b20_from_b34: jmp b20 // menu::@20 b20: - // [60] call mode_stdbitmap + // [62] call mode_stdbitmap jsr mode_stdbitmap jmp breturn - // [61] phi from menu::@34 to menu::@9 [phi:menu::@34->menu::@9] + // [63] phi from menu::@34 to menu::@9 [phi:menu::@34->menu::@9] b9_from_b34: jmp b9 // menu::@9 b9: - // [62] call keyboard_key_pressed + // [64] call keyboard_key_pressed // [211] phi from menu::@9 to keyboard_key_pressed [phi:menu::@9->keyboard_key_pressed] keyboard_key_pressed_from_b9: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_6#0 [phi:menu::@9->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_6 sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [63] (byte) keyboard_key_pressed::return#27 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [65] (byte) keyboard_key_pressed::return#27 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_27 jmp b35 // menu::@35 b35: - // [64] (byte~) menu::$45 ← (byte) keyboard_key_pressed::return#27 -- vbuz1=vbuz2 + // [66] (byte~) menu::$45 ← (byte) keyboard_key_pressed::return#27 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_27 sta _45 - // [65] if((byte~) menu::$45==(byte) 0) goto menu::@10 -- vbuz1_eq_0_then_la1 + // [67] if((byte~) menu::$45==(byte) 0) goto menu::@10 -- vbuz1_eq_0_then_la1 lda _45 cmp #0 beq b10_from_b35 - // [66] phi from menu::@35 to menu::@21 [phi:menu::@35->menu::@21] + // [68] phi from menu::@35 to menu::@21 [phi:menu::@35->menu::@21] b21_from_b35: jmp b21 // menu::@21 b21: - // [67] call mode_hicolstdchar + // [69] call mode_hicolstdchar jsr mode_hicolstdchar jmp breturn - // [68] phi from menu::@35 to menu::@10 [phi:menu::@35->menu::@10] + // [70] phi from menu::@35 to menu::@10 [phi:menu::@35->menu::@10] b10_from_b35: jmp b10 // menu::@10 b10: - // [69] call keyboard_key_pressed + // [71] call keyboard_key_pressed // [211] phi from menu::@10 to keyboard_key_pressed [phi:menu::@10->keyboard_key_pressed] keyboard_key_pressed_from_b10: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_7#0 [phi:menu::@10->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_7 sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [70] (byte) keyboard_key_pressed::return#28 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [72] (byte) keyboard_key_pressed::return#28 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_28 jmp b36 // menu::@36 b36: - // [71] (byte~) menu::$49 ← (byte) keyboard_key_pressed::return#28 -- vbuz1=vbuz2 + // [73] (byte~) menu::$49 ← (byte) keyboard_key_pressed::return#28 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_28 sta _49 - // [72] if((byte~) menu::$49==(byte) 0) goto menu::@11 -- vbuz1_eq_0_then_la1 + // [74] if((byte~) menu::$49==(byte) 0) goto menu::@11 -- vbuz1_eq_0_then_la1 lda _49 cmp #0 beq b11_from_b36 - // [73] phi from menu::@36 to menu::@22 [phi:menu::@36->menu::@22] + // [75] phi from menu::@36 to menu::@22 [phi:menu::@36->menu::@22] b22_from_b36: jmp b22 // menu::@22 b22: - // [74] call mode_hicolecmchar + // [76] call mode_hicolecmchar jsr mode_hicolecmchar jmp breturn - // [75] phi from menu::@36 to menu::@11 [phi:menu::@36->menu::@11] + // [77] phi from menu::@36 to menu::@11 [phi:menu::@36->menu::@11] b11_from_b36: jmp b11 // menu::@11 b11: - // [76] call keyboard_key_pressed + // [78] call keyboard_key_pressed // [211] phi from menu::@11 to keyboard_key_pressed [phi:menu::@11->keyboard_key_pressed] keyboard_key_pressed_from_b11: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_8#0 [phi:menu::@11->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_8 sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [77] (byte) keyboard_key_pressed::return#29 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [79] (byte) keyboard_key_pressed::return#29 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_29 jmp b37 // menu::@37 b37: - // [78] (byte~) menu::$53 ← (byte) keyboard_key_pressed::return#29 -- vbuz1=vbuz2 + // [80] (byte~) menu::$53 ← (byte) keyboard_key_pressed::return#29 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_29 sta _53 - // [79] if((byte~) menu::$53==(byte) 0) goto menu::@12 -- vbuz1_eq_0_then_la1 + // [81] if((byte~) menu::$53==(byte) 0) goto menu::@12 -- vbuz1_eq_0_then_la1 lda _53 cmp #0 beq b12_from_b37 - // [80] phi from menu::@37 to menu::@23 [phi:menu::@37->menu::@23] + // [82] phi from menu::@37 to menu::@23 [phi:menu::@37->menu::@23] b23_from_b37: jmp b23 // menu::@23 b23: - // [81] call mode_hicolmcchar + // [83] call mode_hicolmcchar jsr mode_hicolmcchar jmp breturn - // [82] phi from menu::@37 to menu::@12 [phi:menu::@37->menu::@12] + // [84] phi from menu::@37 to menu::@12 [phi:menu::@37->menu::@12] b12_from_b37: jmp b12 // menu::@12 b12: - // [83] call keyboard_key_pressed + // [85] call keyboard_key_pressed // [211] phi from menu::@12 to keyboard_key_pressed [phi:menu::@12->keyboard_key_pressed] keyboard_key_pressed_from_b12: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_A#0 [phi:menu::@12->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_A sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [84] (byte) keyboard_key_pressed::return#30 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [86] (byte) keyboard_key_pressed::return#30 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_30 jmp b38 // menu::@38 b38: - // [85] (byte~) menu::$57 ← (byte) keyboard_key_pressed::return#30 -- vbuz1=vbuz2 + // [87] (byte~) menu::$57 ← (byte) keyboard_key_pressed::return#30 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_30 sta _57 - // [86] if((byte~) menu::$57==(byte) 0) goto menu::@13 -- vbuz1_eq_0_then_la1 + // [88] if((byte~) menu::$57==(byte) 0) goto menu::@13 -- vbuz1_eq_0_then_la1 lda _57 cmp #0 beq b13_from_b38 - // [87] phi from menu::@38 to menu::@24 [phi:menu::@38->menu::@24] + // [89] phi from menu::@38 to menu::@24 [phi:menu::@38->menu::@24] b24_from_b38: jmp b24 // menu::@24 b24: - // [88] call mode_sixsfred2 + // [90] call mode_sixsfred2 jsr mode_sixsfred2 jmp breturn - // [89] phi from menu::@38 to menu::@13 [phi:menu::@38->menu::@13] + // [91] phi from menu::@38 to menu::@13 [phi:menu::@38->menu::@13] b13_from_b38: jmp b13 // menu::@13 b13: - // [90] call keyboard_key_pressed + // [92] call keyboard_key_pressed // [211] phi from menu::@13 to keyboard_key_pressed [phi:menu::@13->keyboard_key_pressed] keyboard_key_pressed_from_b13: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_B#0 [phi:menu::@13->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_B sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [91] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [93] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_10 jmp b39 // menu::@39 b39: - // [92] (byte~) menu::$61 ← (byte) keyboard_key_pressed::return#10 -- vbuz1=vbuz2 + // [94] (byte~) menu::$61 ← (byte) keyboard_key_pressed::return#10 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_10 sta _61 - // [93] if((byte~) menu::$61==(byte) 0) goto menu::@14 -- vbuz1_eq_0_then_la1 + // [95] if((byte~) menu::$61==(byte) 0) goto menu::@14 -- vbuz1_eq_0_then_la1 lda _61 cmp #0 beq b14_from_b39 - // [94] phi from menu::@39 to menu::@25 [phi:menu::@39->menu::@25] + // [96] phi from menu::@39 to menu::@25 [phi:menu::@39->menu::@25] b25_from_b39: jmp b25 // menu::@25 b25: - // [95] call mode_twoplanebitmap + // [97] call mode_twoplanebitmap jsr mode_twoplanebitmap jmp breturn - // [96] phi from menu::@39 to menu::@14 [phi:menu::@39->menu::@14] + // [98] phi from menu::@39 to menu::@14 [phi:menu::@39->menu::@14] b14_from_b39: jmp b14 // menu::@14 b14: - // [97] call keyboard_key_pressed + // [99] call keyboard_key_pressed // [211] phi from menu::@14 to keyboard_key_pressed [phi:menu::@14->keyboard_key_pressed] keyboard_key_pressed_from_b14: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_C#0 [phi:menu::@14->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_C sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [98] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [100] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_11 jmp b40 // menu::@40 b40: - // [99] (byte~) menu::$65 ← (byte) keyboard_key_pressed::return#11 -- vbuz1=vbuz2 + // [101] (byte~) menu::$65 ← (byte) keyboard_key_pressed::return#11 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_11 sta _65 - // [100] if((byte~) menu::$65==(byte) 0) goto menu::@15 -- vbuz1_eq_0_then_la1 + // [102] if((byte~) menu::$65==(byte) 0) goto menu::@15 -- vbuz1_eq_0_then_la1 lda _65 cmp #0 beq b15_from_b40 - // [101] phi from menu::@40 to menu::@26 [phi:menu::@40->menu::@26] + // [103] phi from menu::@40 to menu::@26 [phi:menu::@40->menu::@26] b26_from_b40: jmp b26 // menu::@26 b26: - // [102] call mode_sixsfred + // [104] call mode_sixsfred jsr mode_sixsfred jmp breturn - // [103] phi from menu::@40 to menu::@15 [phi:menu::@40->menu::@15] + // [105] phi from menu::@40 to menu::@15 [phi:menu::@40->menu::@15] b15_from_b40: jmp b15 // menu::@15 b15: - // [104] call keyboard_key_pressed + // [106] call keyboard_key_pressed // [211] phi from menu::@15 to keyboard_key_pressed [phi:menu::@15->keyboard_key_pressed] keyboard_key_pressed_from_b15: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_D#0 [phi:menu::@15->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_D sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [105] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [107] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_12 jmp b41 // menu::@41 b41: - // [106] (byte~) menu::$69 ← (byte) keyboard_key_pressed::return#12 -- vbuz1=vbuz2 + // [108] (byte~) menu::$69 ← (byte) keyboard_key_pressed::return#12 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_12 sta _69 - // [107] if((byte~) menu::$69==(byte) 0) goto menu::@16 -- vbuz1_eq_0_then_la1 + // [109] if((byte~) menu::$69==(byte) 0) goto menu::@16 -- vbuz1_eq_0_then_la1 lda _69 cmp #0 beq b16_from_b41 - // [108] phi from menu::@41 to menu::@27 [phi:menu::@41->menu::@27] + // [110] phi from menu::@41 to menu::@27 [phi:menu::@41->menu::@27] b27_from_b41: jmp b27 // menu::@27 b27: - // [109] call mode_8bpppixelcell + // [111] call mode_8bpppixelcell jsr mode_8bpppixelcell jmp breturn - // [110] phi from menu::@41 to menu::@16 [phi:menu::@41->menu::@16] + // [112] phi from menu::@41 to menu::@16 [phi:menu::@41->menu::@16] b16_from_b41: jmp b16 // menu::@16 b16: - // [111] call keyboard_key_pressed + // [113] call keyboard_key_pressed // [211] phi from menu::@16 to keyboard_key_pressed [phi:menu::@16->keyboard_key_pressed] keyboard_key_pressed_from_b16: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_E#0 [phi:menu::@16->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_E sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [112] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [114] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_13 jmp b42 // menu::@42 b42: - // [113] (byte~) menu::$73 ← (byte) keyboard_key_pressed::return#13 -- vbuz1=vbuz2 + // [115] (byte~) menu::$73 ← (byte) keyboard_key_pressed::return#13 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_13 sta _73 - // [114] if((byte~) menu::$73==(byte) 0) goto menu::@5 -- vbuz1_eq_0_then_la1 + // [116] if((byte~) menu::$73==(byte) 0) goto menu::@5 -- vbuz1_eq_0_then_la1 lda _73 cmp #0 beq b5_from_b42 - // [115] phi from menu::@42 to menu::@28 [phi:menu::@42->menu::@28] + // [117] phi from menu::@42 to menu::@28 [phi:menu::@42->menu::@28] b28_from_b42: jmp b28 // menu::@28 b28: - // [116] call mode_8bppchunkybmm + // [118] call mode_8bppchunkybmm jsr mode_8bppchunkybmm jmp breturn - // menu::@3 - b3: - // [117] *((byte*) menu::c#2) ← (const byte) LIGHT_GREEN#0 -- _deref_pbuz1=vbuc1 - lda #LIGHT_GREEN - ldy #0 - sta (c),y - // [118] (byte*) menu::c#1 ← ++ (byte*) menu::c#2 -- pbuz1=_inc_pbuz1 - inc c - bne !+ - inc c+1 - !: - // [23] phi from menu::@3 to menu::@2 [phi:menu::@3->menu::@2] - b2_from_b3: - // [23] phi (byte*) menu::c#2 = (byte*) menu::c#1 [phi:menu::@3->menu::@2#0] -- register_copy - jmp b2 } // mode_8bppchunkybmm //Chunky 8bpp Bitmap Mode (BMM = 0, ECM/MCM/HICOL/LINEAR/CHUNK/COLDIS = 1) @@ -17616,24 +17649,54 @@ mode_stdbitmap: { b10: // [580] call bitmap_clear jsr bitmap_clear - // [581] phi from mode_stdbitmap::@10 to mode_stdbitmap::@7 [phi:mode_stdbitmap::@10->mode_stdbitmap::@7] - b7_from_b10: - // [581] phi (byte) mode_stdbitmap::l#2 = (byte) 0 [phi:mode_stdbitmap::@10->mode_stdbitmap::@7#0] -- vbuz1=vbuc1 + // [581] phi from mode_stdbitmap::@10 to mode_stdbitmap::@8 [phi:mode_stdbitmap::@10->mode_stdbitmap::@8] + b8_from_b10: + // [581] phi (byte) mode_stdbitmap::l#5 = (byte) 0 [phi:mode_stdbitmap::@10->mode_stdbitmap::@8#0] -- vbuz1=vbuc1 lda #0 sta l + jmp b8 + // [581] phi from mode_stdbitmap::@7 to mode_stdbitmap::@8 [phi:mode_stdbitmap::@7->mode_stdbitmap::@8] + b8_from_b7: + // [581] phi (byte) mode_stdbitmap::l#5 = (byte) mode_stdbitmap::l#1 [phi:mode_stdbitmap::@7->mode_stdbitmap::@8#0] -- register_copy + jmp b8 + // mode_stdbitmap::@8 + b8: + // [582] (byte) bitmap_line::x0#0 ← *((const byte[]) mode_stdbitmap::lines_x#0 + (byte) mode_stdbitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy l + lda lines_x,y + sta bitmap_line.x0 + // [583] (byte) bitmap_line::x1#0 ← *((const byte[]) mode_stdbitmap::lines_x#0+(byte) 1 + (byte) mode_stdbitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy l + lda lines_x+1,y + sta bitmap_line.x1 + // [584] (byte) bitmap_line::y0#0 ← *((const byte[]) mode_stdbitmap::lines_y#0 + (byte) mode_stdbitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy l + lda lines_y,y + sta bitmap_line.y0 + // [585] (byte) bitmap_line::y1#0 ← *((const byte[]) mode_stdbitmap::lines_y#0+(byte) 1 + (byte) mode_stdbitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy l + lda lines_y+1,y + sta bitmap_line.y1 + // [586] call bitmap_line + jsr bitmap_line + jmp b11 + // mode_stdbitmap::@11 + b11: + // [587] (byte) mode_stdbitmap::l#1 ← ++ (byte) mode_stdbitmap::l#5 -- vbuz1=_inc_vbuz1 + inc l jmp b7 // mode_stdbitmap::@7 b7: - // [582] if((byte) mode_stdbitmap::l#2<(const byte) mode_stdbitmap::lines_cnt#0) goto mode_stdbitmap::@8 -- vbuz1_lt_vbuc1_then_la1 + // [588] if((byte) mode_stdbitmap::l#1<(const byte) mode_stdbitmap::lines_cnt#0) goto mode_stdbitmap::@8 -- vbuz1_lt_vbuc1_then_la1 lda l cmp #lines_cnt - bcc b8 - // [583] phi from mode_stdbitmap::@7 to mode_stdbitmap::@9 [phi:mode_stdbitmap::@7->mode_stdbitmap::@9] + bcc b8_from_b7 + // [589] phi from mode_stdbitmap::@7 to mode_stdbitmap::@9 [phi:mode_stdbitmap::@7->mode_stdbitmap::@9] b9_from_b7: jmp b9 // mode_stdbitmap::@9 b9: - // [584] call mode_ctrl + // [590] call mode_ctrl // [155] phi from mode_stdbitmap::@9 to mode_ctrl [phi:mode_stdbitmap::@9->mode_ctrl] mode_ctrl_from_b9: // [155] phi (byte) dtv_control#144 = (byte) 0 [phi:mode_stdbitmap::@9->mode_ctrl#0] -- vbuz1=vbuc1 @@ -17643,37 +17706,8 @@ mode_stdbitmap: { jmp breturn // mode_stdbitmap::@return breturn: - // [585] return + // [591] return rts - // mode_stdbitmap::@8 - b8: - // [586] (byte) bitmap_line::x0#0 ← *((const byte[]) mode_stdbitmap::lines_x#0 + (byte) mode_stdbitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy l - lda lines_x,y - sta bitmap_line.x0 - // [587] (byte) bitmap_line::x1#0 ← *((const byte[]) mode_stdbitmap::lines_x#0+(byte) 1 + (byte) mode_stdbitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy l - lda lines_x+1,y - sta bitmap_line.x1 - // [588] (byte) bitmap_line::y0#0 ← *((const byte[]) mode_stdbitmap::lines_y#0 + (byte) mode_stdbitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy l - lda lines_y,y - sta bitmap_line.y0 - // [589] (byte) bitmap_line::y1#0 ← *((const byte[]) mode_stdbitmap::lines_y#0+(byte) 1 + (byte) mode_stdbitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy l - lda lines_y+1,y - sta bitmap_line.y1 - // [590] call bitmap_line - jsr bitmap_line - jmp b11 - // mode_stdbitmap::@11 - b11: - // [591] (byte) mode_stdbitmap::l#1 ← ++ (byte) mode_stdbitmap::l#2 -- vbuz1=_inc_vbuz1 - inc l - // [581] phi from mode_stdbitmap::@11 to mode_stdbitmap::@7 [phi:mode_stdbitmap::@11->mode_stdbitmap::@7] - b7_from_b11: - // [581] phi (byte) mode_stdbitmap::l#2 = (byte) mode_stdbitmap::l#1 [phi:mode_stdbitmap::@11->mode_stdbitmap::@7#0] -- register_copy - jmp b7 lines_x: .byte 0, $ff, $ff, 0, 0, $80, $ff, $80, 0, $80 lines_y: .byte 0, 0, $c7, $c7, 0, 0, $64, $c7, $64, 0 } @@ -19396,43 +19430,44 @@ memset: { .label str = menu.SCREEN .label end = str+num .label dst = $9f - // [888] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [888] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [888] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [888] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [889] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [888] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [891] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [889] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [892] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [890] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [888] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [888] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [891] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #(const dword) mode_8bppchunkybmm::PLANEB#0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [125] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 8 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [126] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [127] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [128] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [137] if((byte*) mode_8bppchunkybmm::gfxb#3!=(word) $8000) goto mode_8bppchunkybmm::@5 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxbCpuBank#4 ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxbCpuBank#4 ] ) always clobbers reg byte a +Statement [24] *((byte*) menu::c#4) ← (const byte) LIGHT_GREEN#0 [ menu::c#4 ] ( main:2::menu:9 [ menu::c#4 ] ) always clobbers reg byte a reg byte y +Statement [26] if((byte*) menu::c#1!=(const byte*) COLS#0+(word) $3e8) goto menu::@3 [ menu::c#1 ] ( main:2::menu:9 [ menu::c#1 ] ) always clobbers reg byte a +Statement [27] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2::menu:9 [ ] ) always clobbers reg byte a +Statement [28] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9 [ ] ) always clobbers reg byte a +Statement [119] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0|(const byte) DTV_COLORRAM_OFF#0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [120] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [121] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [122] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [123] *((const byte*) DTV_PLANEB_START_MI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [124] *((const byte*) DTV_PLANEB_START_HI#0) ← <>(const dword) mode_8bppchunkybmm::PLANEB#0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [125] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 8 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [126] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [127] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [128] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [137] if((byte*) mode_8bppchunkybmm::gfxb#3!=(word) $8000) goto mode_8bppchunkybmm::@5 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxbCpuBank#4 ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxbCpuBank#4 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ mode_8bppchunkybmm::gfxbCpuBank#4 mode_8bppchunkybmm::gfxbCpuBank#7 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::gfxbCpuBank#2 ] -Statement [142] (word~) mode_8bppchunkybmm::$26 ← (word) mode_8bppchunkybmm::x#2 + (byte) mode_8bppchunkybmm::y#6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::$26 ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::$26 ] ) always clobbers reg byte a -Statement [143] (byte) mode_8bppchunkybmm::c#0 ← (byte)(word~) mode_8bppchunkybmm::$26 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::c#0 ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::c#0 ] ) always clobbers reg byte a -Statement [144] *((byte*) mode_8bppchunkybmm::gfxb#4) ← (byte) mode_8bppchunkybmm::c#0 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 ] ) always clobbers reg byte y +Statement [142] (word~) mode_8bppchunkybmm::$26 ← (word) mode_8bppchunkybmm::x#2 + (byte) mode_8bppchunkybmm::y#6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::$26 ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::$26 ] ) always clobbers reg byte a +Statement [143] (byte) mode_8bppchunkybmm::c#0 ← (byte)(word~) mode_8bppchunkybmm::$26 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::c#0 ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::c#0 ] ) always clobbers reg byte a +Statement [144] *((byte*) mode_8bppchunkybmm::gfxb#4) ← (byte) mode_8bppchunkybmm::c#0 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:9 [ mode_8bppchunkybmm::gfxbCpuBank#4 mode_8bppchunkybmm::gfxbCpuBank#7 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::gfxbCpuBank#2 ] -Statement [147] if((word) mode_8bppchunkybmm::x#1!=(word) $140) goto mode_8bppchunkybmm::@4 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#1 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#1 ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#1 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#1 ] ) always clobbers reg byte a -Statement [157] if(*((const byte*) RASTER#0)!=(byte) $ff) goto mode_ctrl::@2 [ dtv_control#114 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 ] ) always clobbers reg byte a +Statement [147] if((word) mode_8bppchunkybmm::x#1!=(word) $140) goto mode_8bppchunkybmm::@4 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#1 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#1 ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#1 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#1 ] ) always clobbers reg byte a +Statement [157] if(*((const byte*) RASTER#0)!=(byte) $ff) goto mode_ctrl::@2 [ dtv_control#114 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] -Statement [169] (byte) mode_ctrl::ctrl#1 ← (byte) mode_ctrl::ctrl#0 | (const byte) DTV_LINEAR#0 [ dtv_control#114 mode_ctrl::ctrl#1 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#1 ] ) always clobbers reg byte a -Statement [175] (byte) mode_ctrl::ctrl#2 ← (byte) mode_ctrl::ctrl#17 | (const byte) DTV_HIGHCOLOR#0 [ dtv_control#114 mode_ctrl::ctrl#2 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#2 ] ) always clobbers reg byte a -Statement [181] (byte) mode_ctrl::ctrl#3 ← (byte) mode_ctrl::ctrl#10 | (const byte) DTV_OVERSCAN#0 [ dtv_control#114 mode_ctrl::ctrl#3 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#3 ] ) always clobbers reg byte a -Statement [187] (byte) mode_ctrl::ctrl#4 ← (byte) mode_ctrl::ctrl#11 | (const byte) DTV_BORDER_OFF#0 [ dtv_control#114 mode_ctrl::ctrl#4 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#4 ] ) always clobbers reg byte a -Statement [193] (byte) mode_ctrl::ctrl#5 ← (byte) mode_ctrl::ctrl#12 | (const byte) DTV_CHUNKY#0 [ dtv_control#114 mode_ctrl::ctrl#5 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#5 ] ) always clobbers reg byte a -Statement [199] (byte) mode_ctrl::ctrl#6 ← (byte) mode_ctrl::ctrl#13 | (const byte) DTV_COLORRAM_OFF#0 [ dtv_control#114 mode_ctrl::ctrl#6 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#6 ] ) always clobbers reg byte a -Statement [213] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#20 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::menu:9::keyboard_key_pressed:33 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:41 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:48 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:55 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:62 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:69 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:76 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:83 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:90 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:97 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:104 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:111 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a +Statement [169] (byte) mode_ctrl::ctrl#1 ← (byte) mode_ctrl::ctrl#0 | (const byte) DTV_LINEAR#0 [ dtv_control#114 mode_ctrl::ctrl#1 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#1 ] ) always clobbers reg byte a +Statement [175] (byte) mode_ctrl::ctrl#2 ← (byte) mode_ctrl::ctrl#17 | (const byte) DTV_HIGHCOLOR#0 [ dtv_control#114 mode_ctrl::ctrl#2 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#2 ] ) always clobbers reg byte a +Statement [181] (byte) mode_ctrl::ctrl#3 ← (byte) mode_ctrl::ctrl#10 | (const byte) DTV_OVERSCAN#0 [ dtv_control#114 mode_ctrl::ctrl#3 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#3 ] ) always clobbers reg byte a +Statement [187] (byte) mode_ctrl::ctrl#4 ← (byte) mode_ctrl::ctrl#11 | (const byte) DTV_BORDER_OFF#0 [ dtv_control#114 mode_ctrl::ctrl#4 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#4 ] ) always clobbers reg byte a +Statement [193] (byte) mode_ctrl::ctrl#5 ← (byte) mode_ctrl::ctrl#12 | (const byte) DTV_CHUNKY#0 [ dtv_control#114 mode_ctrl::ctrl#5 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#5 ] ) always clobbers reg byte a +Statement [199] (byte) mode_ctrl::ctrl#6 ← (byte) mode_ctrl::ctrl#13 | (const byte) DTV_COLORRAM_OFF#0 [ dtv_control#114 mode_ctrl::ctrl#6 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#6 ] ) always clobbers reg byte a +Statement [213] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#20 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::menu:9::keyboard_key_pressed:35 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:43 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:50 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:57 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:64 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:71 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:78 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:85 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:92 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:99 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:106 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:113 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:204 [ keyboard_key_pressed::colidx#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ mode_ctrl::ctrl#14 mode_ctrl::ctrl#22 mode_ctrl::ctrl#6 mode_ctrl::ctrl#13 mode_ctrl::ctrl#5 mode_ctrl::ctrl#12 mode_ctrl::ctrl#4 mode_ctrl::ctrl#11 mode_ctrl::ctrl#3 mode_ctrl::ctrl#10 mode_ctrl::ctrl#2 mode_ctrl::ctrl#17 mode_ctrl::ctrl#1 mode_ctrl::ctrl#0 ] -Statement [220] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::menu:9::keyboard_key_pressed:33::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:41::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:48::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:55::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:62::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:69::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:76::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:83::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:90::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:97::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:104::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:111::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a -Statement [221] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::menu:9::keyboard_key_pressed:33::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:41::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:48::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:55::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:62::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:69::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:76::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:83::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:90::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:97::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:104::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:111::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [220] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::menu:9::keyboard_key_pressed:35::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:43::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:50::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:57::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:64::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:71::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:78::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:85::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:92::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:99::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:106::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:113::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a +Statement [221] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::menu:9::keyboard_key_pressed:35::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:43::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:50::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:57::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:64::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:71::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:78::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:85::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:92::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:99::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:106::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:113::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a Statement asm { .byte$32,$dd lda$ff .byte$32,$00 } always clobbers reg byte a -Statement [227] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [228] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [229] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [230] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [231] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_8bpppixelcell::PLANEA#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [232] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [233] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [234] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [235] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [236] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [237] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_8bpppixelcell::PLANEB#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [238] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [239] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [240] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [241] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [242] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [250] (byte~) mode_8bpppixelcell::$15 ← (byte~) mode_8bpppixelcell::$14 << (byte) 4 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 ] ( main:2::menu:9::mode_8bpppixelcell:109 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 ] ) always clobbers reg byte a +Statement [227] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [228] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [229] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [230] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [231] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_8bpppixelcell::PLANEA#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [232] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [233] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [234] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [235] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [236] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [237] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_8bpppixelcell::PLANEB#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [238] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [239] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [240] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [241] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [242] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [250] (byte~) mode_8bpppixelcell::$15 ← (byte~) mode_8bpppixelcell::$14 << (byte) 4 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 ] ( main:2::menu:9::mode_8bpppixelcell:111 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ] -Statement [251] (byte~) mode_8bpppixelcell::$16 ← (byte) mode_8bpppixelcell::ax#2 & (byte) $f [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 mode_8bpppixelcell::$16 ] ( main:2::menu:9::mode_8bpppixelcell:109 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 mode_8bpppixelcell::$16 ] ) always clobbers reg byte a +Statement [251] (byte~) mode_8bpppixelcell::$16 ← (byte) mode_8bpppixelcell::ax#2 & (byte) $f [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 mode_8bpppixelcell::$16 ] ( main:2::menu:9::mode_8bpppixelcell:111 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 mode_8bpppixelcell::$16 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:212 [ mode_8bpppixelcell::$15 ] -Statement [253] *((byte*) mode_8bpppixelcell::gfxa#2) ← (byte~) mode_8bpppixelcell::$17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 ] ( main:2::menu:9::mode_8bpppixelcell:109 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 ] ) always clobbers reg byte y +Statement [253] *((byte*) mode_8bpppixelcell::gfxa#2) ← (byte~) mode_8bpppixelcell::$17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 ] ( main:2::menu:9::mode_8bpppixelcell:111 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ] -Statement [259] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [262] (byte) mode_8bpppixelcell::bits#0 ← *((byte*) mode_8bpppixelcell::chargen#2) [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::col#5 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#0 ] ( main:2::menu:9::mode_8bpppixelcell:109 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::col#5 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#0 ] ) always clobbers reg byte a reg byte y +Statement [259] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [262] (byte) mode_8bpppixelcell::bits#0 ← *((byte*) mode_8bpppixelcell::chargen#2) [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::col#5 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#0 ] ( main:2::menu:9::mode_8bpppixelcell:111 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::col#5 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:21 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:28 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:28 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:24 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] -Statement [269] *((byte*) mode_8bpppixelcell::gfxb#2) ← (byte) mode_8bpppixelcell::c#2 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#1 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#2 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::col#2 mode_8bpppixelcell::cp#2 ] ( main:2::menu:9::mode_8bpppixelcell:109 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#1 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#2 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::col#2 mode_8bpppixelcell::cp#2 ] ) always clobbers reg byte y +Statement [269] *((byte*) mode_8bpppixelcell::gfxb#2) ← (byte) mode_8bpppixelcell::c#2 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#1 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#2 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::col#2 mode_8bpppixelcell::cp#2 ] ( main:2::menu:9::mode_8bpppixelcell:111 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#1 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#2 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::col#2 mode_8bpppixelcell::cp#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:25 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:29 [ mode_8bpppixelcell::cp#2 mode_8bpppixelcell::cp#1 ] -Statement [279] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [282] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [283] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [284] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [285] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [286] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_sixsfred::PLANEA#0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [287] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [288] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [289] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [290] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [291] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [292] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_sixsfred::PLANEB#0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [293] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [294] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [295] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [296] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [297] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(const byte*) mode_sixsfred::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [298] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [303] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [306] (byte~) mode_sixsfred::$17 ← (byte) mode_sixsfred::cx#2 + (byte) mode_sixsfred::cy#4 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 mode_sixsfred::$17 ] ( main:2::menu:9::mode_sixsfred:102 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 mode_sixsfred::$17 ] ) always clobbers reg byte a +Statement [279] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [282] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [283] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [284] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [285] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [286] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_sixsfred::PLANEA#0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [287] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [288] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [289] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [290] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [291] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [292] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_sixsfred::PLANEB#0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [293] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [294] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [295] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [296] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [297] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(const byte*) mode_sixsfred::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [298] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [303] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [306] (byte~) mode_sixsfred::$17 ← (byte) mode_sixsfred::cx#2 + (byte) mode_sixsfred::cy#4 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 mode_sixsfred::$17 ] ( main:2::menu:9::mode_sixsfred:104 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 mode_sixsfred::$17 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ mode_sixsfred::cx#2 mode_sixsfred::cx#1 ] -Statement [308] *((byte*) mode_sixsfred::col#2) ← (byte~) mode_sixsfred::$18 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 ] ( main:2::menu:9::mode_sixsfred:102 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 ] ) always clobbers reg byte y +Statement [308] *((byte*) mode_sixsfred::col#2) ← (byte~) mode_sixsfred::$18 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 ] ( main:2::menu:9::mode_sixsfred:104 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ mode_sixsfred::cx#2 mode_sixsfred::cx#1 ] -Statement [316] (byte~) mode_sixsfred::$21 ← (byte) mode_sixsfred::ay#4 >> (byte) 1 [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 mode_sixsfred::$21 ] ( main:2::menu:9::mode_sixsfred:102 [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 mode_sixsfred::$21 ] ) always clobbers reg byte a +Statement [316] (byte~) mode_sixsfred::$21 ← (byte) mode_sixsfred::ay#4 >> (byte) 1 [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 mode_sixsfred::$21 ] ( main:2::menu:9::mode_sixsfred:104 [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 mode_sixsfred::$21 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:39 [ mode_sixsfred::ax#2 mode_sixsfred::ax#1 ] -Statement [318] *((byte*) mode_sixsfred::gfxa#2) ← *((const byte[]) mode_sixsfred::row_bitmask#0 + (byte) mode_sixsfred::row#0) [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 ] ( main:2::menu:9::mode_sixsfred:102 [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 ] ) always clobbers reg byte a reg byte y +Statement [318] *((byte*) mode_sixsfred::gfxa#2) ← *((const byte[]) mode_sixsfred::row_bitmask#0 + (byte) mode_sixsfred::row#0) [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 ] ( main:2::menu:9::mode_sixsfred:104 [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:39 [ mode_sixsfred::ax#2 mode_sixsfred::ax#1 ] -Statement [326] *((byte*) mode_sixsfred::gfxb#2) ← (byte) $1b [ mode_sixsfred::by#4 mode_sixsfred::gfxb#2 mode_sixsfred::bx#2 ] ( main:2::menu:9::mode_sixsfred:102 [ mode_sixsfred::by#4 mode_sixsfred::gfxb#2 mode_sixsfred::bx#2 ] ) always clobbers reg byte a reg byte y +Statement [326] *((byte*) mode_sixsfred::gfxb#2) ← (byte) $1b [ mode_sixsfred::by#4 mode_sixsfred::gfxb#2 mode_sixsfred::bx#2 ] ( main:2::menu:9::mode_sixsfred:104 [ mode_sixsfred::by#4 mode_sixsfred::gfxb#2 mode_sixsfred::bx#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:40 [ mode_sixsfred::by#4 mode_sixsfred::by#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:40 [ mode_sixsfred::by#4 mode_sixsfred::by#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:43 [ mode_sixsfred::bx#2 mode_sixsfred::bx#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:43 [ mode_sixsfred::bx#2 mode_sixsfred::bx#1 ] -Statement [335] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [336] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [337] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [338] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [339] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_twoplanebitmap::PLANEA#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [340] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [341] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [342] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [343] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [344] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [345] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_twoplanebitmap::PLANEB#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [346] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [347] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [348] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [349] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [350] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(const byte*) mode_twoplanebitmap::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [351] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [356] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [357] *((const byte*) BGCOL1#0) ← (byte) $70 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [358] *((const byte*) BGCOL2#0) ← (byte) $d4 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [362] (byte~) mode_twoplanebitmap::$17 ← (byte~) mode_twoplanebitmap::$16 << (byte) 4 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 ] ) always clobbers reg byte a +Statement [335] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [336] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [337] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [338] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [339] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_twoplanebitmap::PLANEA#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [340] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [341] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [342] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [343] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [344] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [345] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_twoplanebitmap::PLANEB#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [346] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [347] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [348] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [349] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [350] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(const byte*) mode_twoplanebitmap::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [351] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [356] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [357] *((const byte*) BGCOL1#0) ← (byte) $70 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [358] *((const byte*) BGCOL2#0) ← (byte) $d4 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [362] (byte~) mode_twoplanebitmap::$17 ← (byte~) mode_twoplanebitmap::$16 << (byte) 4 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:45 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:46 [ mode_twoplanebitmap::cx#2 mode_twoplanebitmap::cx#1 ] -Statement [363] (byte~) mode_twoplanebitmap::$18 ← (byte) mode_twoplanebitmap::cx#2 & (byte) $f [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 mode_twoplanebitmap::$18 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 mode_twoplanebitmap::$18 ] ) always clobbers reg byte a +Statement [363] (byte~) mode_twoplanebitmap::$18 ← (byte) mode_twoplanebitmap::cx#2 & (byte) $f [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 mode_twoplanebitmap::$18 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 mode_twoplanebitmap::$18 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 ] -Statement [365] *((byte*) mode_twoplanebitmap::col#2) ← (byte~) mode_twoplanebitmap::$19 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 ] ) always clobbers reg byte y +Statement [365] *((byte*) mode_twoplanebitmap::col#2) ← (byte~) mode_twoplanebitmap::$19 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:45 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:46 [ mode_twoplanebitmap::cx#2 mode_twoplanebitmap::cx#1 ] -Statement [375] *((byte*) mode_twoplanebitmap::gfxa#3) ← (byte) $ff [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ) always clobbers reg byte a reg byte y +Statement [375] *((byte*) mode_twoplanebitmap::gfxa#3) ← (byte) $ff [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:49 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:49 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ mode_twoplanebitmap::ax#2 mode_twoplanebitmap::ax#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:52 [ mode_twoplanebitmap::ax#2 mode_twoplanebitmap::ax#1 ] -Statement [384] *((byte*) mode_twoplanebitmap::gfxb#2) ← (byte) $f [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::bx#2 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::bx#2 ] ) always clobbers reg byte a reg byte y +Statement [384] *((byte*) mode_twoplanebitmap::gfxb#2) ← (byte) $f [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::bx#2 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::bx#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:53 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:53 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:56 [ mode_twoplanebitmap::bx#2 mode_twoplanebitmap::bx#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:56 [ mode_twoplanebitmap::bx#2 mode_twoplanebitmap::bx#1 ] -Statement [393] *((byte*) mode_twoplanebitmap::gfxa#3) ← (byte) 0 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ) always clobbers reg byte a reg byte y -Statement [395] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_LINEAR#0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [396] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [397] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [398] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [399] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_sixsfred2::PLANEA#0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [400] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [401] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [402] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [403] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [404] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [405] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_sixsfred2::PLANEB#0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [406] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [407] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [408] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [409] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [410] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(const byte*) mode_sixsfred2::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [411] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [416] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [420] (byte~) mode_sixsfred2::$16 ← (byte~) mode_sixsfred2::$15 << (byte) 4 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 ] ) always clobbers reg byte a +Statement [393] *((byte*) mode_twoplanebitmap::gfxa#3) ← (byte) 0 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ) always clobbers reg byte a reg byte y +Statement [395] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_LINEAR#0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [396] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [397] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [398] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [399] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_sixsfred2::PLANEA#0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [400] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [401] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [402] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [403] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [404] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [405] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_sixsfred2::PLANEB#0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [406] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [407] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [408] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [409] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [410] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(const byte*) mode_sixsfred2::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [411] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [416] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [420] (byte~) mode_sixsfred2::$16 ← (byte~) mode_sixsfred2::$15 << (byte) 4 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:59 [ mode_sixsfred2::cx#2 mode_sixsfred2::cx#1 ] -Statement [421] (byte~) mode_sixsfred2::$17 ← (byte) mode_sixsfred2::cy#4 & (byte) 3 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 mode_sixsfred2::$17 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 mode_sixsfred2::$17 ] ) always clobbers reg byte a +Statement [421] (byte~) mode_sixsfred2::$17 ← (byte) mode_sixsfred2::cy#4 & (byte) 3 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 mode_sixsfred2::$17 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 mode_sixsfred2::$17 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:226 [ mode_sixsfred2::$16 ] -Statement [423] *((byte*) mode_sixsfred2::col#2) ← (byte~) mode_sixsfred2::$18 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 ] ) always clobbers reg byte y +Statement [423] *((byte*) mode_sixsfred2::col#2) ← (byte~) mode_sixsfred2::$18 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:59 [ mode_sixsfred2::cx#2 mode_sixsfred2::cx#1 ] -Statement [431] (byte~) mode_sixsfred2::$21 ← (byte) mode_sixsfred2::ay#4 >> (byte) 1 [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 mode_sixsfred2::$21 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 mode_sixsfred2::$21 ] ) always clobbers reg byte a +Statement [431] (byte~) mode_sixsfred2::$21 ← (byte) mode_sixsfred2::ay#4 >> (byte) 1 [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 mode_sixsfred2::$21 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 mode_sixsfred2::$21 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:62 [ mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:65 [ mode_sixsfred2::ax#2 mode_sixsfred2::ax#1 ] -Statement [433] *((byte*) mode_sixsfred2::gfxa#2) ← *((const byte[]) mode_sixsfred2::row_bitmask#0 + (byte) mode_sixsfred2::row#0) [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 ] ) always clobbers reg byte a reg byte y +Statement [433] *((byte*) mode_sixsfred2::gfxa#2) ← *((const byte[]) mode_sixsfred2::row_bitmask#0 + (byte) mode_sixsfred2::row#0) [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:62 [ mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:65 [ mode_sixsfred2::ax#2 mode_sixsfred2::ax#1 ] -Statement [441] *((byte*) mode_sixsfred2::gfxb#2) ← (byte) $1b [ mode_sixsfred2::by#4 mode_sixsfred2::gfxb#2 mode_sixsfred2::bx#2 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::by#4 mode_sixsfred2::gfxb#2 mode_sixsfred2::bx#2 ] ) always clobbers reg byte a reg byte y +Statement [441] *((byte*) mode_sixsfred2::gfxb#2) ← (byte) $1b [ mode_sixsfred2::by#4 mode_sixsfred2::gfxb#2 mode_sixsfred2::bx#2 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::by#4 mode_sixsfred2::gfxb#2 mode_sixsfred2::bx#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:66 [ mode_sixsfred2::by#4 mode_sixsfred2::by#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:66 [ mode_sixsfred2::by#4 mode_sixsfred2::by#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:69 [ mode_sixsfred2::bx#2 mode_sixsfred2::bx#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:69 [ mode_sixsfred2::bx#2 mode_sixsfred2::bx#1 ] -Statement [450] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [451] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const byte*) mode_hicolmcchar::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [452] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [453] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [454] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [455] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_hicolmcchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [456] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [457] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0|(const byte) VIC_MCM#0 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [458] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_hicolmcchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [463] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [464] *((const byte*) BGCOL1#0) ← (byte) $50 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [465] *((const byte*) BGCOL2#0) ← (byte) $54 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [466] *((const byte*) BGCOL3#0) ← (byte) $58 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [470] (byte~) mode_hicolmcchar::$27 ← (byte~) mode_hicolmcchar::$26 << (byte) 4 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 ] ( main:2::menu:9::mode_hicolmcchar:81 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 ] ) always clobbers reg byte a +Statement [450] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [451] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const byte*) mode_hicolmcchar::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [452] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [453] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [454] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [455] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_hicolmcchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [456] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [457] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0|(const byte) VIC_MCM#0 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [458] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_hicolmcchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [463] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [464] *((const byte*) BGCOL1#0) ← (byte) $50 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [465] *((const byte*) BGCOL2#0) ← (byte) $54 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [466] *((const byte*) BGCOL3#0) ← (byte) $58 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [470] (byte~) mode_hicolmcchar::$27 ← (byte~) mode_hicolmcchar::$26 << (byte) 4 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 ] ( main:2::menu:9::mode_hicolmcchar:83 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:72 [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] -Statement [471] (byte~) mode_hicolmcchar::$28 ← (byte) mode_hicolmcchar::cx#2 & (byte) $f [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 mode_hicolmcchar::$28 ] ( main:2::menu:9::mode_hicolmcchar:81 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 mode_hicolmcchar::$28 ] ) always clobbers reg byte a +Statement [471] (byte~) mode_hicolmcchar::$28 ← (byte) mode_hicolmcchar::cx#2 & (byte) $f [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 mode_hicolmcchar::$28 ] ( main:2::menu:9::mode_hicolmcchar:83 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 mode_hicolmcchar::$28 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] -Statement [473] *((byte*) mode_hicolmcchar::col#2) ← (byte) mode_hicolmcchar::v#0 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::v#0 ] ( main:2::menu:9::mode_hicolmcchar:81 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::v#0 ] ) always clobbers reg byte y +Statement [473] *((byte*) mode_hicolmcchar::col#2) ← (byte) mode_hicolmcchar::v#0 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::v#0 ] ( main:2::menu:9::mode_hicolmcchar:83 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::v#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:72 [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:234 [ mode_hicolmcchar::v#0 ] -Statement [475] *((byte*) mode_hicolmcchar::ch#2) ← (byte) mode_hicolmcchar::v#0 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::col#1 mode_hicolmcchar::cx#2 mode_hicolmcchar::ch#2 ] ( main:2::menu:9::mode_hicolmcchar:81 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::col#1 mode_hicolmcchar::cx#2 mode_hicolmcchar::ch#2 ] ) always clobbers reg byte y -Statement [484] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [485] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const byte*) mode_hicolecmchar::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [486] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [487] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [488] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [489] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_hicolecmchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [490] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(const byte) VIC_ECM#0|(byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [491] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [492] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_hicolecmchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [497] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [498] *((const byte*) BGCOL1#0) ← (byte) $50 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [499] *((const byte*) BGCOL2#0) ← (byte) $54 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [500] *((const byte*) BGCOL3#0) ← (byte) $58 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [501] *((const byte*) BGCOL4#0) ← (byte) $5c [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [505] (byte~) mode_hicolecmchar::$27 ← (byte~) mode_hicolecmchar::$26 << (byte) 4 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 ] ( main:2::menu:9::mode_hicolecmchar:74 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 ] ) always clobbers reg byte a +Statement [475] *((byte*) mode_hicolmcchar::ch#2) ← (byte) mode_hicolmcchar::v#0 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::col#1 mode_hicolmcchar::cx#2 mode_hicolmcchar::ch#2 ] ( main:2::menu:9::mode_hicolmcchar:83 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::col#1 mode_hicolmcchar::cx#2 mode_hicolmcchar::ch#2 ] ) always clobbers reg byte y +Statement [484] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [485] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const byte*) mode_hicolecmchar::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [486] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [487] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [488] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [489] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_hicolecmchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [490] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(const byte) VIC_ECM#0|(byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [491] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [492] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_hicolecmchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [497] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [498] *((const byte*) BGCOL1#0) ← (byte) $50 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [499] *((const byte*) BGCOL2#0) ← (byte) $54 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [500] *((const byte*) BGCOL3#0) ← (byte) $58 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [501] *((const byte*) BGCOL4#0) ← (byte) $5c [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [505] (byte~) mode_hicolecmchar::$27 ← (byte~) mode_hicolecmchar::$26 << (byte) 4 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 ] ( main:2::menu:9::mode_hicolecmchar:76 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:79 [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] -Statement [506] (byte~) mode_hicolecmchar::$28 ← (byte) mode_hicolecmchar::cx#2 & (byte) $f [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 mode_hicolecmchar::$28 ] ( main:2::menu:9::mode_hicolecmchar:74 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 mode_hicolecmchar::$28 ] ) always clobbers reg byte a +Statement [506] (byte~) mode_hicolecmchar::$28 ← (byte) mode_hicolecmchar::cx#2 & (byte) $f [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 mode_hicolecmchar::$28 ] ( main:2::menu:9::mode_hicolecmchar:76 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 mode_hicolecmchar::$28 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:236 [ mode_hicolecmchar::$27 ] -Statement [508] *((byte*) mode_hicolecmchar::col#2) ← (byte) mode_hicolecmchar::v#0 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::v#0 ] ( main:2::menu:9::mode_hicolecmchar:74 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::v#0 ] ) always clobbers reg byte y +Statement [508] *((byte*) mode_hicolecmchar::col#2) ← (byte) mode_hicolecmchar::v#0 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::v#0 ] ( main:2::menu:9::mode_hicolecmchar:76 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::v#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:79 [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:238 [ mode_hicolecmchar::v#0 ] -Statement [510] *((byte*) mode_hicolecmchar::ch#2) ← (byte) mode_hicolecmchar::v#0 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::col#1 mode_hicolecmchar::cx#2 mode_hicolecmchar::ch#2 ] ( main:2::menu:9::mode_hicolecmchar:74 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::col#1 mode_hicolecmchar::cx#2 mode_hicolecmchar::ch#2 ] ) always clobbers reg byte y -Statement [519] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [520] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const byte*) mode_hicolstdchar::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [521] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [522] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [523] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [524] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_hicolstdchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [525] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [526] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [527] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_hicolstdchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [532] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [533] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [537] (byte~) mode_hicolstdchar::$26 ← (byte~) mode_hicolstdchar::$25 << (byte) 4 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 ] ( main:2::menu:9::mode_hicolstdchar:67 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 ] ) always clobbers reg byte a +Statement [510] *((byte*) mode_hicolecmchar::ch#2) ← (byte) mode_hicolecmchar::v#0 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::col#1 mode_hicolecmchar::cx#2 mode_hicolecmchar::ch#2 ] ( main:2::menu:9::mode_hicolecmchar:76 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::col#1 mode_hicolecmchar::cx#2 mode_hicolecmchar::ch#2 ] ) always clobbers reg byte y +Statement [519] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [520] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const byte*) mode_hicolstdchar::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [521] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [522] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [523] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [524] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_hicolstdchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [525] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [526] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [527] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_hicolstdchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [532] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [533] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [537] (byte~) mode_hicolstdchar::$26 ← (byte~) mode_hicolstdchar::$25 << (byte) 4 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 ] ( main:2::menu:9::mode_hicolstdchar:69 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:86 [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] -Statement [538] (byte~) mode_hicolstdchar::$27 ← (byte) mode_hicolstdchar::cx#2 & (byte) $f [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 mode_hicolstdchar::$27 ] ( main:2::menu:9::mode_hicolstdchar:67 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 mode_hicolstdchar::$27 ] ) always clobbers reg byte a +Statement [538] (byte~) mode_hicolstdchar::$27 ← (byte) mode_hicolstdchar::cx#2 & (byte) $f [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 mode_hicolstdchar::$27 ] ( main:2::menu:9::mode_hicolstdchar:69 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 mode_hicolstdchar::$27 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:240 [ mode_hicolstdchar::$26 ] -Statement [540] *((byte*) mode_hicolstdchar::col#2) ← (byte) mode_hicolstdchar::v#0 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::v#0 ] ( main:2::menu:9::mode_hicolstdchar:67 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::v#0 ] ) always clobbers reg byte y +Statement [540] *((byte*) mode_hicolstdchar::col#2) ← (byte) mode_hicolstdchar::v#0 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::v#0 ] ( main:2::menu:9::mode_hicolstdchar:69 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::v#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:86 [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:242 [ mode_hicolstdchar::v#0 ] -Statement [542] *((byte*) mode_hicolstdchar::ch#2) ← (byte) mode_hicolstdchar::v#0 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::col#1 mode_hicolstdchar::cx#2 mode_hicolstdchar::ch#2 ] ( main:2::menu:9::mode_hicolstdchar:67 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::col#1 mode_hicolstdchar::cx#2 mode_hicolstdchar::ch#2 ] ) always clobbers reg byte y -Statement [551] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [552] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [553] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [554] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_stdbitmap::BITMAP#0/(word) $4000 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [555] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [556] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [557] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_stdbitmap::BITMAP#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [559] *((const byte*) DTV_PALETTE#0 + (byte) mode_stdbitmap::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_stdbitmap::i#2) [ mode_stdbitmap::i#2 ] ( main:2::menu:9::mode_stdbitmap:60 [ mode_stdbitmap::i#2 ] ) always clobbers reg byte a +Statement [542] *((byte*) mode_hicolstdchar::ch#2) ← (byte) mode_hicolstdchar::v#0 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::col#1 mode_hicolstdchar::cx#2 mode_hicolstdchar::ch#2 ] ( main:2::menu:9::mode_hicolstdchar:69 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::col#1 mode_hicolstdchar::cx#2 mode_hicolstdchar::ch#2 ] ) always clobbers reg byte y +Statement [551] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [552] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [553] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [554] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_stdbitmap::BITMAP#0/(word) $4000 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [555] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [556] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [557] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_stdbitmap::BITMAP#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [559] *((const byte*) DTV_PALETTE#0 + (byte) mode_stdbitmap::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_stdbitmap::i#2) [ mode_stdbitmap::i#2 ] ( main:2::menu:9::mode_stdbitmap:62 [ mode_stdbitmap::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:91 [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] -Statement [562] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [563] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [566] (byte~) mode_stdbitmap::$22 ← (byte) mode_stdbitmap::cx#2 + (byte) mode_stdbitmap::cy#4 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::$22 ] ( main:2::menu:9::mode_stdbitmap:60 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::$22 ] ) always clobbers reg byte a +Statement [562] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [563] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [566] (byte~) mode_stdbitmap::$22 ← (byte) mode_stdbitmap::cx#2 + (byte) mode_stdbitmap::cy#4 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::$22 ] ( main:2::menu:9::mode_stdbitmap:62 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::$22 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:93 [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] -Statement [568] (byte) mode_stdbitmap::col2#0 ← (byte) $f - (byte) mode_stdbitmap::col#0 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col#0 mode_stdbitmap::col2#0 ] ( main:2::menu:9::mode_stdbitmap:60 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col#0 mode_stdbitmap::col2#0 ] ) always clobbers reg byte a +Statement [568] (byte) mode_stdbitmap::col2#0 ← (byte) $f - (byte) mode_stdbitmap::col#0 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col#0 mode_stdbitmap::col2#0 ] ( main:2::menu:9::mode_stdbitmap:62 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col#0 mode_stdbitmap::col2#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:244 [ mode_stdbitmap::col#0 ] -Statement [569] (byte~) mode_stdbitmap::$25 ← (byte) mode_stdbitmap::col#0 << (byte) 4 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col2#0 mode_stdbitmap::$25 ] ( main:2::menu:9::mode_stdbitmap:60 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col2#0 mode_stdbitmap::$25 ] ) always clobbers reg byte a +Statement [569] (byte~) mode_stdbitmap::$25 ← (byte) mode_stdbitmap::col#0 << (byte) 4 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col2#0 mode_stdbitmap::$25 ] ( main:2::menu:9::mode_stdbitmap:62 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col2#0 mode_stdbitmap::$25 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] -Statement [571] *((byte*) mode_stdbitmap::ch#2) ← (byte~) mode_stdbitmap::$26 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 ] ( main:2::menu:9::mode_stdbitmap:60 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 ] ) always clobbers reg byte y +Statement [571] *((byte*) mode_stdbitmap::ch#2) ← (byte~) mode_stdbitmap::$26 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 ] ( main:2::menu:9::mode_stdbitmap:62 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:93 [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] -Statement [593] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590 [ mode_stdbitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] +Statement [593] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586 [ mode_stdbitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:96 [ mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:248 [ bitmap_line::x0#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:249 [ bitmap_line::x1#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:250 [ bitmap_line::y0#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:251 [ bitmap_line::y1#0 ] -Statement [595] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590 [ mode_stdbitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ) always clobbers reg byte a +Statement [595] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586 [ mode_stdbitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:252 [ bitmap_line::xd#2 ] -Statement [610] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590 [ mode_stdbitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ) always clobbers reg byte a -Statement [624] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590 [ mode_stdbitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ) always clobbers reg byte a -Statement [626] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590 [ mode_stdbitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ) always clobbers reg byte a +Statement [610] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586 [ mode_stdbitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ) always clobbers reg byte a +Statement [624] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586 [ mode_stdbitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ) always clobbers reg byte a +Statement [626] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586 [ mode_stdbitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:255 [ bitmap_line::xd#1 ] -Statement [640] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590 [ mode_stdbitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a -Statement [655] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a +Statement [640] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586 [ mode_stdbitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a +Statement [655] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] -Statement [661] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a -Statement [664] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a -Statement [670] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a +Statement [661] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a +Statement [664] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a +Statement [670] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:103 [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:104 [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] @@ -19790,10 +19825,10 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:119 [ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:120 [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:122 [ 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 ] -Statement [671] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a -Statement [672] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a -Statement [673] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] +Statement [671] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a +Statement [672] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a +Statement [673] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:96 [ mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] @@ -19818,115 +19853,115 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:119 [ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:120 [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:122 [ 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 ] -Statement [674] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y -Statement [677] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a -Statement [683] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a -Statement [686] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a -Statement [692] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a -Statement [698] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a -Statement [701] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a -Statement [707] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a -Statement [713] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a -Statement [716] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a -Statement [721] (word) bitmap_clear::bitmap#0 ← *((const byte[$100]) bitmap_plot_xhi#0) w= *((const byte[$100]) bitmap_plot_xlo#0) [ bitmap_clear::bitmap#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_clear:580 [ bitmap_clear::bitmap#0 ] ) always clobbers reg byte a -Statement [722] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word) bitmap_clear::bitmap#0 [ bitmap_clear::bitmap#5 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_clear:580 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a -Statement [725] *((byte*) bitmap_clear::bitmap#2) ← (byte) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_clear:580 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y +Statement [674] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y +Statement [677] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a +Statement [683] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a +Statement [686] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a +Statement [692] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a +Statement [698] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a +Statement [701] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a +Statement [707] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a +Statement [713] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a +Statement [716] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a +Statement [721] (word) bitmap_clear::bitmap#0 ← *((const byte[$100]) bitmap_plot_xhi#0) w= *((const byte[$100]) bitmap_plot_xlo#0) [ bitmap_clear::bitmap#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_clear:580 [ bitmap_clear::bitmap#0 ] ) always clobbers reg byte a +Statement [722] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word) bitmap_clear::bitmap#0 [ bitmap_clear::bitmap#5 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_clear:580 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a +Statement [725] *((byte*) bitmap_clear::bitmap#2) ← (byte) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_clear:580 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:126 [ bitmap_clear::x#2 bitmap_clear::x#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:126 [ bitmap_clear::x#2 bitmap_clear::x#1 ] -Statement [736] *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_init::x#2) ← >(const byte*) mode_stdbitmap::BITMAP#0 [ bitmap_init::x#2 bitmap_init::bits#3 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_init:578 [ bitmap_init::x#2 bitmap_init::bits#3 ] ) always clobbers reg byte a +Statement [736] *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_init::x#2) ← >(const byte*) mode_stdbitmap::BITMAP#0 [ bitmap_init::x#2 bitmap_init::bits#3 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_init:578 [ bitmap_init::x#2 bitmap_init::bits#3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:127 [ bitmap_init::x#2 bitmap_init::x#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:128 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] -Statement [737] *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::x#2 bitmap_init::bits#3 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_init:578 [ bitmap_init::x#2 bitmap_init::bits#3 ] ) always clobbers reg byte a -Statement [752] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_init:578 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a +Statement [737] *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::x#2 bitmap_init::bits#3 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_init:578 [ bitmap_init::x#2 bitmap_init::bits#3 ] ) always clobbers reg byte a +Statement [752] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_init:578 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] -Statement [757] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [758] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [759] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [760] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [761] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [762] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_mcchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [763] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [764] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0|(const byte) VIC_MCM#0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [765] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_mcchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [767] *((const byte*) DTV_PALETTE#0 + (byte) mode_mcchar::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_mcchar::i#2) [ mode_mcchar::i#2 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::i#2 ] ) always clobbers reg byte a +Statement [757] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [758] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [759] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [760] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [761] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [762] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_mcchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [763] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [764] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0|(const byte) VIC_MCM#0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [765] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_mcchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [767] *((const byte*) DTV_PALETTE#0 + (byte) mode_mcchar::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_mcchar::i#2) [ mode_mcchar::i#2 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:132 [ mode_mcchar::i#2 mode_mcchar::i#1 ] -Statement [770] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [771] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [772] *((const byte*) BGCOL2#0) ← (const byte) GREEN#0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [773] *((const byte*) BGCOL3#0) ← (const byte) BLUE#0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [776] (byte~) mode_mcchar::$26 ← (byte) mode_mcchar::cx#2 + (byte) mode_mcchar::cy#4 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 mode_mcchar::$26 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 mode_mcchar::$26 ] ) always clobbers reg byte a +Statement [770] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [771] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [772] *((const byte*) BGCOL2#0) ← (const byte) GREEN#0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [773] *((const byte*) BGCOL3#0) ← (const byte) BLUE#0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [776] (byte~) mode_mcchar::$26 ← (byte) mode_mcchar::cx#2 + (byte) mode_mcchar::cy#4 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 mode_mcchar::$26 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 mode_mcchar::$26 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:134 [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] -Statement [778] *((byte*) mode_mcchar::col#2) ← (byte~) mode_mcchar::$27 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 ] ) always clobbers reg byte y +Statement [778] *((byte*) mode_mcchar::col#2) ← (byte~) mode_mcchar::$27 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:134 [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] -Statement [780] (byte~) mode_mcchar::$28 ← (byte) mode_mcchar::cy#4 & (byte) $f [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$28 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$28 ] ) always clobbers reg byte a -Statement [781] (byte~) mode_mcchar::$29 ← (byte~) mode_mcchar::$28 << (byte) 4 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 ] ) always clobbers reg byte a -Statement [782] (byte~) mode_mcchar::$30 ← (byte) mode_mcchar::cx#2 & (byte) $f [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 mode_mcchar::$30 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 mode_mcchar::$30 ] ) always clobbers reg byte a +Statement [780] (byte~) mode_mcchar::$28 ← (byte) mode_mcchar::cy#4 & (byte) $f [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$28 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$28 ] ) always clobbers reg byte a +Statement [781] (byte~) mode_mcchar::$29 ← (byte~) mode_mcchar::$28 << (byte) 4 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 ] ) always clobbers reg byte a +Statement [782] (byte~) mode_mcchar::$30 ← (byte) mode_mcchar::cx#2 & (byte) $f [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 mode_mcchar::$30 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 mode_mcchar::$30 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:279 [ mode_mcchar::$29 ] -Statement [784] *((byte*) mode_mcchar::ch#2) ← (byte~) mode_mcchar::$31 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 ] ) always clobbers reg byte y -Statement [793] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [794] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [795] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [796] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [797] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [798] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_ecmchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [799] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(const byte) VIC_ECM#0|(byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [800] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [801] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_ecmchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [803] *((const byte*) DTV_PALETTE#0 + (byte) mode_ecmchar::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_ecmchar::i#2) [ mode_ecmchar::i#2 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::i#2 ] ) always clobbers reg byte a +Statement [784] *((byte*) mode_mcchar::ch#2) ← (byte~) mode_mcchar::$31 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 ] ) always clobbers reg byte y +Statement [793] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [794] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [795] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [796] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [797] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [798] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_ecmchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [799] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(const byte) VIC_ECM#0|(byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [800] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [801] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_ecmchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [803] *((const byte*) DTV_PALETTE#0 + (byte) mode_ecmchar::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_ecmchar::i#2) [ mode_ecmchar::i#2 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:139 [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] -Statement [806] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [807] *((const byte*) BGCOL1#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [808] *((const byte*) BGCOL2#0) ← (byte) 2 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [809] *((const byte*) BGCOL3#0) ← (byte) 5 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [810] *((const byte*) BGCOL4#0) ← (byte) 6 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [813] (byte~) mode_ecmchar::$26 ← (byte) mode_ecmchar::cx#2 + (byte) mode_ecmchar::cy#4 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 mode_ecmchar::$26 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 mode_ecmchar::$26 ] ) always clobbers reg byte a +Statement [806] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [807] *((const byte*) BGCOL1#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [808] *((const byte*) BGCOL2#0) ← (byte) 2 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [809] *((const byte*) BGCOL3#0) ← (byte) 5 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [810] *((const byte*) BGCOL4#0) ← (byte) 6 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [813] (byte~) mode_ecmchar::$26 ← (byte) mode_ecmchar::cx#2 + (byte) mode_ecmchar::cy#4 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 mode_ecmchar::$26 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 mode_ecmchar::$26 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:141 [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] -Statement [815] *((byte*) mode_ecmchar::col#2) ← (byte~) mode_ecmchar::$27 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 ] ) always clobbers reg byte y +Statement [815] *((byte*) mode_ecmchar::col#2) ← (byte~) mode_ecmchar::$27 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:141 [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] -Statement [817] (byte~) mode_ecmchar::$28 ← (byte) mode_ecmchar::cy#4 & (byte) $f [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$28 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$28 ] ) always clobbers reg byte a -Statement [818] (byte~) mode_ecmchar::$29 ← (byte~) mode_ecmchar::$28 << (byte) 4 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 ] ) always clobbers reg byte a -Statement [819] (byte~) mode_ecmchar::$30 ← (byte) mode_ecmchar::cx#2 & (byte) $f [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 mode_ecmchar::$30 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 mode_ecmchar::$30 ] ) always clobbers reg byte a +Statement [817] (byte~) mode_ecmchar::$28 ← (byte) mode_ecmchar::cy#4 & (byte) $f [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$28 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$28 ] ) always clobbers reg byte a +Statement [818] (byte~) mode_ecmchar::$29 ← (byte~) mode_ecmchar::$28 << (byte) 4 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 ] ) always clobbers reg byte a +Statement [819] (byte~) mode_ecmchar::$30 ← (byte) mode_ecmchar::cx#2 & (byte) $f [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 mode_ecmchar::$30 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 mode_ecmchar::$30 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:285 [ mode_ecmchar::$29 ] -Statement [821] *((byte*) mode_ecmchar::ch#2) ← (byte~) mode_ecmchar::$31 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 ] ) always clobbers reg byte y -Statement [830] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [831] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [832] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [833] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [834] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [835] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_stdchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [836] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [837] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [838] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_stdchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [840] *((const byte*) DTV_PALETTE#0 + (byte) mode_stdchar::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_stdchar::i#2) [ mode_stdchar::i#2 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::i#2 ] ) always clobbers reg byte a +Statement [821] *((byte*) mode_ecmchar::ch#2) ← (byte~) mode_ecmchar::$31 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 ] ) always clobbers reg byte y +Statement [830] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [831] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [832] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [833] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [834] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [835] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_stdchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [836] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [837] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [838] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_stdchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [840] *((const byte*) DTV_PALETTE#0 + (byte) mode_stdchar::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_stdchar::i#2) [ mode_stdchar::i#2 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:146 [ mode_stdchar::i#2 mode_stdchar::i#1 ] -Statement [843] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [844] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [847] (byte~) mode_stdchar::$25 ← (byte) mode_stdchar::cx#2 + (byte) mode_stdchar::cy#4 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 mode_stdchar::$25 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 mode_stdchar::$25 ] ) always clobbers reg byte a +Statement [843] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [844] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [847] (byte~) mode_stdchar::$25 ← (byte) mode_stdchar::cx#2 + (byte) mode_stdchar::cy#4 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 mode_stdchar::$25 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 mode_stdchar::$25 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:148 [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] -Statement [849] *((byte*) mode_stdchar::col#2) ← (byte~) mode_stdchar::$26 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 ] ) always clobbers reg byte y +Statement [849] *((byte*) mode_stdchar::col#2) ← (byte~) mode_stdchar::$26 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:148 [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] -Statement [851] (byte~) mode_stdchar::$27 ← (byte) mode_stdchar::cy#4 & (byte) $f [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$27 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$27 ] ) always clobbers reg byte a -Statement [852] (byte~) mode_stdchar::$28 ← (byte~) mode_stdchar::$27 << (byte) 4 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 ] ) always clobbers reg byte a -Statement [853] (byte~) mode_stdchar::$29 ← (byte) mode_stdchar::cx#2 & (byte) $f [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ) always clobbers reg byte a +Statement [851] (byte~) mode_stdchar::$27 ← (byte) mode_stdchar::cy#4 & (byte) $f [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$27 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$27 ] ) always clobbers reg byte a +Statement [852] (byte~) mode_stdchar::$28 ← (byte~) mode_stdchar::$27 << (byte) 4 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 ] ) always clobbers reg byte a +Statement [853] (byte~) mode_stdchar::$29 ← (byte) mode_stdchar::cx#2 & (byte) $f [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:291 [ mode_stdchar::$28 ] -Statement [855] *((byte*) mode_stdchar::ch#2) ← (byte~) mode_stdchar::$30 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ) always clobbers reg byte y -Statement [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:31 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) always clobbers reg byte a reg byte y -Statement [869] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3) [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:31 [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y -Statement [872] *((byte*) print_char_cursor#17) ← (byte) print_str_lines::ch#0 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:31 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte y +Statement [855] *((byte*) mode_stdchar::ch#2) ← (byte~) mode_stdchar::$30 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ) always clobbers reg byte y +Statement [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) always clobbers reg byte a reg byte y +Statement [869] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3) [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:33 [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y +Statement [872] *((byte*) print_char_cursor#17) ← (byte) print_str_lines::ch#0 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:33 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:294 [ print_str_lines::ch#0 ] -Statement [878] (byte*~) print_char_cursor#100 ← (byte*) print_line_cursor#19 [ print_str_lines::str#0 print_char_cursor#100 print_line_cursor#19 ] ( main:2::menu:9::print_str_lines:31 [ print_str_lines::str#0 print_char_cursor#100 print_line_cursor#19 ] ) always clobbers reg byte a -Statement [881] (byte*) print_line_cursor#19 ← (byte*) print_line_cursor#18 + (byte) $28 [ print_line_cursor#19 print_char_cursor#32 ] ( main:2::menu:9::print_str_lines:31::print_ln:877 [ print_str_lines::str#0 print_line_cursor#19 print_char_cursor#32 ] ) always clobbers reg byte a -Statement [882] if((byte*) print_line_cursor#19<(byte*) print_char_cursor#32) goto print_ln::@1 [ print_line_cursor#19 print_char_cursor#32 ] ( main:2::menu:9::print_str_lines:31::print_ln:877 [ print_str_lines::str#0 print_line_cursor#19 print_char_cursor#32 ] ) always clobbers reg byte a -Statement [889] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::menu:9::print_cls:29::memset:885 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [891] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::menu:9::print_cls:29::memset:885 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [878] (byte*~) print_char_cursor#100 ← (byte*) print_line_cursor#19 [ print_str_lines::str#0 print_char_cursor#100 print_line_cursor#19 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#0 print_char_cursor#100 print_line_cursor#19 ] ) always clobbers reg byte a +Statement [881] (byte*) print_line_cursor#19 ← (byte*) print_line_cursor#18 + (byte) $28 [ print_line_cursor#19 print_char_cursor#32 ] ( main:2::menu:9::print_str_lines:33::print_ln:877 [ print_str_lines::str#0 print_line_cursor#19 print_char_cursor#32 ] ) always clobbers reg byte a +Statement [882] if((byte*) print_line_cursor#19<(byte*) print_char_cursor#32) goto print_ln::@1 [ print_line_cursor#19 print_char_cursor#32 ] ( main:2::menu:9::print_str_lines:33::print_ln:877 [ print_str_lines::str#0 print_line_cursor#19 print_char_cursor#32 ] ) always clobbers reg byte a +Statement [889] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::menu:9::print_cls:31::memset:885 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [891] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::menu:9::print_cls:31::memset:885 [ memset::dst#1 ] ) always clobbers reg byte a Statement [5] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [7] *((const byte*) DTV_FEATURE#0) ← (const byte) DTV_FEATURE_ENABLE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a @@ -19940,303 +19975,303 @@ Statement [16] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const Statement [17] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9 [ ] ) always clobbers reg byte a Statement [18] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) menu::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9 [ ] ) always clobbers reg byte a Statement [20] *((const byte*) DTV_PALETTE#0 + (byte) menu::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) menu::i#2) [ menu::i#2 ] ( main:2::menu:9 [ menu::i#2 ] ) always clobbers reg byte a -Statement [24] if((byte*) menu::c#2!=(const byte*) COLS#0+(word) $3e8) goto menu::@3 [ menu::c#2 ] ( main:2::menu:9 [ menu::c#2 ] ) always clobbers reg byte a -Statement [25] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2::menu:9 [ ] ) always clobbers reg byte a -Statement [26] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9 [ ] ) always clobbers reg byte a -Statement [117] *((byte*) menu::c#2) ← (const byte) LIGHT_GREEN#0 [ menu::c#2 ] ( main:2::menu:9 [ menu::c#2 ] ) always clobbers reg byte a reg byte y -Statement [119] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0|(const byte) DTV_COLORRAM_OFF#0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [120] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [121] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [122] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [123] *((const byte*) DTV_PLANEB_START_MI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [124] *((const byte*) DTV_PLANEB_START_HI#0) ← <>(const dword) mode_8bppchunkybmm::PLANEB#0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [125] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 8 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [126] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [127] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [128] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [137] if((byte*) mode_8bppchunkybmm::gfxb#3!=(word) $8000) goto mode_8bppchunkybmm::@5 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxbCpuBank#4 ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxbCpuBank#4 ] ) always clobbers reg byte a -Statement [142] (word~) mode_8bppchunkybmm::$26 ← (word) mode_8bppchunkybmm::x#2 + (byte) mode_8bppchunkybmm::y#6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::$26 ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::$26 ] ) always clobbers reg byte a -Statement [143] (byte) mode_8bppchunkybmm::c#0 ← (byte)(word~) mode_8bppchunkybmm::$26 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::c#0 ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::c#0 ] ) always clobbers reg byte a -Statement [144] *((byte*) mode_8bppchunkybmm::gfxb#4) ← (byte) mode_8bppchunkybmm::c#0 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 ] ) always clobbers reg byte y -Statement [147] if((word) mode_8bppchunkybmm::x#1!=(word) $140) goto mode_8bppchunkybmm::@4 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#1 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#1 ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#1 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#1 ] ) always clobbers reg byte a -Statement [157] if(*((const byte*) RASTER#0)!=(byte) $ff) goto mode_ctrl::@2 [ dtv_control#114 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 ] ) always clobbers reg byte a -Statement [169] (byte) mode_ctrl::ctrl#1 ← (byte) mode_ctrl::ctrl#0 | (const byte) DTV_LINEAR#0 [ dtv_control#114 mode_ctrl::ctrl#1 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#1 ] ) always clobbers reg byte a -Statement [175] (byte) mode_ctrl::ctrl#2 ← (byte) mode_ctrl::ctrl#17 | (const byte) DTV_HIGHCOLOR#0 [ dtv_control#114 mode_ctrl::ctrl#2 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#2 ] ) always clobbers reg byte a -Statement [181] (byte) mode_ctrl::ctrl#3 ← (byte) mode_ctrl::ctrl#10 | (const byte) DTV_OVERSCAN#0 [ dtv_control#114 mode_ctrl::ctrl#3 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#3 ] ) always clobbers reg byte a -Statement [187] (byte) mode_ctrl::ctrl#4 ← (byte) mode_ctrl::ctrl#11 | (const byte) DTV_BORDER_OFF#0 [ dtv_control#114 mode_ctrl::ctrl#4 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#4 ] ) always clobbers reg byte a -Statement [193] (byte) mode_ctrl::ctrl#5 ← (byte) mode_ctrl::ctrl#12 | (const byte) DTV_CHUNKY#0 [ dtv_control#114 mode_ctrl::ctrl#5 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#5 ] ) always clobbers reg byte a -Statement [199] (byte) mode_ctrl::ctrl#6 ← (byte) mode_ctrl::ctrl#13 | (const byte) DTV_COLORRAM_OFF#0 [ dtv_control#114 mode_ctrl::ctrl#6 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#6 ] ) always clobbers reg byte a -Statement [213] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#20 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::menu:9::keyboard_key_pressed:33 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:41 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:48 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:55 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:62 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:69 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:76 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:83 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:90 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:97 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:104 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:111 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a -Statement [220] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::menu:9::keyboard_key_pressed:33::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:41::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:48::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:55::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:62::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:69::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:76::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:83::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:90::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:97::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:104::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:111::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a -Statement [221] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::menu:9::keyboard_key_pressed:33::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:41::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:48::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:55::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:62::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:69::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:76::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:83::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:90::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:97::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:104::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:111::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [24] *((byte*) menu::c#4) ← (const byte) LIGHT_GREEN#0 [ menu::c#4 ] ( main:2::menu:9 [ menu::c#4 ] ) always clobbers reg byte a reg byte y +Statement [26] if((byte*) menu::c#1!=(const byte*) COLS#0+(word) $3e8) goto menu::@3 [ menu::c#1 ] ( main:2::menu:9 [ menu::c#1 ] ) always clobbers reg byte a +Statement [27] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2::menu:9 [ ] ) always clobbers reg byte a +Statement [28] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9 [ ] ) always clobbers reg byte a +Statement [119] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0|(const byte) DTV_COLORRAM_OFF#0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [120] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [121] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [122] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [123] *((const byte*) DTV_PLANEB_START_MI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [124] *((const byte*) DTV_PLANEB_START_HI#0) ← <>(const dword) mode_8bppchunkybmm::PLANEB#0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [125] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 8 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [126] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [127] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [128] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ ] ) always clobbers reg byte a +Statement [137] if((byte*) mode_8bppchunkybmm::gfxb#3!=(word) $8000) goto mode_8bppchunkybmm::@5 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxbCpuBank#4 ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxbCpuBank#4 ] ) always clobbers reg byte a +Statement [142] (word~) mode_8bppchunkybmm::$26 ← (word) mode_8bppchunkybmm::x#2 + (byte) mode_8bppchunkybmm::y#6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::$26 ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::$26 ] ) always clobbers reg byte a +Statement [143] (byte) mode_8bppchunkybmm::c#0 ← (byte)(word~) mode_8bppchunkybmm::$26 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::c#0 ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::c#0 ] ) always clobbers reg byte a +Statement [144] *((byte*) mode_8bppchunkybmm::gfxb#4) ← (byte) mode_8bppchunkybmm::c#0 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::gfxb#4 ] ) always clobbers reg byte y +Statement [147] if((word) mode_8bppchunkybmm::x#1!=(word) $140) goto mode_8bppchunkybmm::@4 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#1 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#1 ] ( main:2::menu:9::mode_8bppchunkybmm:118 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::gfxb#1 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::x#1 ] ) always clobbers reg byte a +Statement [157] if(*((const byte*) RASTER#0)!=(byte) $ff) goto mode_ctrl::@2 [ dtv_control#114 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 ] ) always clobbers reg byte a +Statement [169] (byte) mode_ctrl::ctrl#1 ← (byte) mode_ctrl::ctrl#0 | (const byte) DTV_LINEAR#0 [ dtv_control#114 mode_ctrl::ctrl#1 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#1 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#1 ] ) always clobbers reg byte a +Statement [175] (byte) mode_ctrl::ctrl#2 ← (byte) mode_ctrl::ctrl#17 | (const byte) DTV_HIGHCOLOR#0 [ dtv_control#114 mode_ctrl::ctrl#2 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#2 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#2 ] ) always clobbers reg byte a +Statement [181] (byte) mode_ctrl::ctrl#3 ← (byte) mode_ctrl::ctrl#10 | (const byte) DTV_OVERSCAN#0 [ dtv_control#114 mode_ctrl::ctrl#3 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#3 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#3 ] ) always clobbers reg byte a +Statement [187] (byte) mode_ctrl::ctrl#4 ← (byte) mode_ctrl::ctrl#11 | (const byte) DTV_BORDER_OFF#0 [ dtv_control#114 mode_ctrl::ctrl#4 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#4 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#4 ] ) always clobbers reg byte a +Statement [193] (byte) mode_ctrl::ctrl#5 ← (byte) mode_ctrl::ctrl#12 | (const byte) DTV_CHUNKY#0 [ dtv_control#114 mode_ctrl::ctrl#5 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#5 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#5 ] ) always clobbers reg byte a +Statement [199] (byte) mode_ctrl::ctrl#6 ← (byte) mode_ctrl::ctrl#13 | (const byte) DTV_COLORRAM_OFF#0 [ dtv_control#114 mode_ctrl::ctrl#6 ] ( main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#6 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#6 ] ) always clobbers reg byte a +Statement [213] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#20 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::menu:9::keyboard_key_pressed:35 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:43 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:50 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:57 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:64 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:71 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:78 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:85 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:92 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:99 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:106 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::keyboard_key_pressed:113 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a +Statement [220] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::menu:9::keyboard_key_pressed:35::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:43::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:50::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:57::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:64::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:71::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:78::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:85::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:92::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:99::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:106::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::keyboard_key_pressed:113::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a +Statement [221] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::menu:9::keyboard_key_pressed:35::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:43::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:50::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:57::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:64::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:71::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:78::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:85::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:92::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:99::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:106::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::keyboard_key_pressed:113::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bppchunkybmm:118::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_8bpppixelcell:111::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred:104::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_twoplanebitmap:97::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_sixsfred2:90::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolmcchar:83::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolecmchar:76::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_hicolstdchar:69::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdbitmap:62::mode_ctrl:590::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_mcchar:55::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_ecmchar:48::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::menu:9::mode_stdchar:40::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a Statement asm { .byte$32,$dd lda$ff .byte$32,$00 } always clobbers reg byte a -Statement [227] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [228] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [229] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [230] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [231] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_8bpppixelcell::PLANEA#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [232] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [233] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [234] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [235] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [236] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [237] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_8bpppixelcell::PLANEB#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [238] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [239] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [240] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [241] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [242] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [249] (byte~) mode_8bpppixelcell::$14 ← (byte) mode_8bpppixelcell::ay#4 & (byte) $f [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$14 ] ( main:2::menu:9::mode_8bpppixelcell:109 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$14 ] ) always clobbers reg byte a -Statement [250] (byte~) mode_8bpppixelcell::$15 ← (byte~) mode_8bpppixelcell::$14 << (byte) 4 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 ] ( main:2::menu:9::mode_8bpppixelcell:109 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 ] ) always clobbers reg byte a -Statement [251] (byte~) mode_8bpppixelcell::$16 ← (byte) mode_8bpppixelcell::ax#2 & (byte) $f [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 mode_8bpppixelcell::$16 ] ( main:2::menu:9::mode_8bpppixelcell:109 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 mode_8bpppixelcell::$16 ] ) always clobbers reg byte a -Statement [253] *((byte*) mode_8bpppixelcell::gfxa#2) ← (byte~) mode_8bpppixelcell::$17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 ] ( main:2::menu:9::mode_8bpppixelcell:109 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 ] ) always clobbers reg byte y -Statement [259] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [262] (byte) mode_8bpppixelcell::bits#0 ← *((byte*) mode_8bpppixelcell::chargen#2) [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::col#5 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#0 ] ( main:2::menu:9::mode_8bpppixelcell:109 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::col#5 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#0 ] ) always clobbers reg byte a reg byte y -Statement [269] *((byte*) mode_8bpppixelcell::gfxb#2) ← (byte) mode_8bpppixelcell::c#2 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#1 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#2 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::col#2 mode_8bpppixelcell::cp#2 ] ( main:2::menu:9::mode_8bpppixelcell:109 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#1 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#2 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::col#2 mode_8bpppixelcell::cp#2 ] ) always clobbers reg byte y -Statement [279] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] ) always clobbers reg byte a -Statement [282] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [283] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [284] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [285] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [286] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_sixsfred::PLANEA#0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [287] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [288] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [289] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [290] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [291] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [292] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_sixsfred::PLANEB#0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [293] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [294] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [295] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [296] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [297] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(const byte*) mode_sixsfred::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [298] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [303] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:102 [ ] ) always clobbers reg byte a -Statement [306] (byte~) mode_sixsfred::$17 ← (byte) mode_sixsfred::cx#2 + (byte) mode_sixsfred::cy#4 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 mode_sixsfred::$17 ] ( main:2::menu:9::mode_sixsfred:102 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 mode_sixsfred::$17 ] ) always clobbers reg byte a -Statement [308] *((byte*) mode_sixsfred::col#2) ← (byte~) mode_sixsfred::$18 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 ] ( main:2::menu:9::mode_sixsfred:102 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 ] ) always clobbers reg byte y -Statement [316] (byte~) mode_sixsfred::$21 ← (byte) mode_sixsfred::ay#4 >> (byte) 1 [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 mode_sixsfred::$21 ] ( main:2::menu:9::mode_sixsfred:102 [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 mode_sixsfred::$21 ] ) always clobbers reg byte a -Statement [318] *((byte*) mode_sixsfred::gfxa#2) ← *((const byte[]) mode_sixsfred::row_bitmask#0 + (byte) mode_sixsfred::row#0) [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 ] ( main:2::menu:9::mode_sixsfred:102 [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 ] ) always clobbers reg byte a reg byte y -Statement [326] *((byte*) mode_sixsfred::gfxb#2) ← (byte) $1b [ mode_sixsfred::by#4 mode_sixsfred::gfxb#2 mode_sixsfred::bx#2 ] ( main:2::menu:9::mode_sixsfred:102 [ mode_sixsfred::by#4 mode_sixsfred::gfxb#2 mode_sixsfred::bx#2 ] ) always clobbers reg byte a reg byte y -Statement [335] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [336] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [337] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [338] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [339] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_twoplanebitmap::PLANEA#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [340] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [341] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [342] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [343] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [344] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [345] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_twoplanebitmap::PLANEB#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [346] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [347] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [348] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [349] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [350] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(const byte*) mode_twoplanebitmap::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [351] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [356] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [357] *((const byte*) BGCOL1#0) ← (byte) $70 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [358] *((const byte*) BGCOL2#0) ← (byte) $d4 [ ] ( main:2::menu:9::mode_twoplanebitmap:95 [ ] ) always clobbers reg byte a -Statement [361] (byte~) mode_twoplanebitmap::$16 ← (byte) mode_twoplanebitmap::cy#4 & (byte) $f [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$16 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$16 ] ) always clobbers reg byte a -Statement [362] (byte~) mode_twoplanebitmap::$17 ← (byte~) mode_twoplanebitmap::$16 << (byte) 4 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 ] ) always clobbers reg byte a -Statement [363] (byte~) mode_twoplanebitmap::$18 ← (byte) mode_twoplanebitmap::cx#2 & (byte) $f [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 mode_twoplanebitmap::$18 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 mode_twoplanebitmap::$18 ] ) always clobbers reg byte a -Statement [365] *((byte*) mode_twoplanebitmap::col#2) ← (byte~) mode_twoplanebitmap::$19 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 ] ) always clobbers reg byte y -Statement [373] (byte~) mode_twoplanebitmap::$22 ← (byte) mode_twoplanebitmap::ay#5 & (byte) 4 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 mode_twoplanebitmap::$22 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 mode_twoplanebitmap::$22 ] ) always clobbers reg byte a -Statement [375] *((byte*) mode_twoplanebitmap::gfxa#3) ← (byte) $ff [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ) always clobbers reg byte a reg byte y -Statement [384] *((byte*) mode_twoplanebitmap::gfxb#2) ← (byte) $f [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::bx#2 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::bx#2 ] ) always clobbers reg byte a reg byte y -Statement [393] *((byte*) mode_twoplanebitmap::gfxa#3) ← (byte) 0 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ( main:2::menu:9::mode_twoplanebitmap:95 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ) always clobbers reg byte a reg byte y -Statement [395] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_LINEAR#0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [396] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [397] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [398] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [399] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_sixsfred2::PLANEA#0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [400] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [401] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [402] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [403] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [404] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [405] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_sixsfred2::PLANEB#0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [406] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [407] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [408] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [409] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [410] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(const byte*) mode_sixsfred2::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [411] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [416] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:88 [ ] ) always clobbers reg byte a -Statement [419] (byte~) mode_sixsfred2::$15 ← (byte) mode_sixsfred2::cx#2 & (byte) 3 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$15 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$15 ] ) always clobbers reg byte a -Statement [420] (byte~) mode_sixsfred2::$16 ← (byte~) mode_sixsfred2::$15 << (byte) 4 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 ] ) always clobbers reg byte a -Statement [421] (byte~) mode_sixsfred2::$17 ← (byte) mode_sixsfred2::cy#4 & (byte) 3 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 mode_sixsfred2::$17 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 mode_sixsfred2::$17 ] ) always clobbers reg byte a -Statement [423] *((byte*) mode_sixsfred2::col#2) ← (byte~) mode_sixsfred2::$18 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 ] ) always clobbers reg byte y -Statement [431] (byte~) mode_sixsfred2::$21 ← (byte) mode_sixsfred2::ay#4 >> (byte) 1 [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 mode_sixsfred2::$21 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 mode_sixsfred2::$21 ] ) always clobbers reg byte a -Statement [433] *((byte*) mode_sixsfred2::gfxa#2) ← *((const byte[]) mode_sixsfred2::row_bitmask#0 + (byte) mode_sixsfred2::row#0) [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 ] ) always clobbers reg byte a reg byte y -Statement [441] *((byte*) mode_sixsfred2::gfxb#2) ← (byte) $1b [ mode_sixsfred2::by#4 mode_sixsfred2::gfxb#2 mode_sixsfred2::bx#2 ] ( main:2::menu:9::mode_sixsfred2:88 [ mode_sixsfred2::by#4 mode_sixsfred2::gfxb#2 mode_sixsfred2::bx#2 ] ) always clobbers reg byte a reg byte y -Statement [450] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [451] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const byte*) mode_hicolmcchar::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [452] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [453] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [454] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [455] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_hicolmcchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [456] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [457] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0|(const byte) VIC_MCM#0 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [458] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_hicolmcchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [463] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [464] *((const byte*) BGCOL1#0) ← (byte) $50 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [465] *((const byte*) BGCOL2#0) ← (byte) $54 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [466] *((const byte*) BGCOL3#0) ← (byte) $58 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] ) always clobbers reg byte a -Statement [469] (byte~) mode_hicolmcchar::$26 ← (byte) mode_hicolmcchar::cy#4 & (byte) $f [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$26 ] ( main:2::menu:9::mode_hicolmcchar:81 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$26 ] ) always clobbers reg byte a -Statement [470] (byte~) mode_hicolmcchar::$27 ← (byte~) mode_hicolmcchar::$26 << (byte) 4 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 ] ( main:2::menu:9::mode_hicolmcchar:81 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 ] ) always clobbers reg byte a -Statement [471] (byte~) mode_hicolmcchar::$28 ← (byte) mode_hicolmcchar::cx#2 & (byte) $f [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 mode_hicolmcchar::$28 ] ( main:2::menu:9::mode_hicolmcchar:81 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 mode_hicolmcchar::$28 ] ) always clobbers reg byte a -Statement [473] *((byte*) mode_hicolmcchar::col#2) ← (byte) mode_hicolmcchar::v#0 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::v#0 ] ( main:2::menu:9::mode_hicolmcchar:81 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::v#0 ] ) always clobbers reg byte y -Statement [475] *((byte*) mode_hicolmcchar::ch#2) ← (byte) mode_hicolmcchar::v#0 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::col#1 mode_hicolmcchar::cx#2 mode_hicolmcchar::ch#2 ] ( main:2::menu:9::mode_hicolmcchar:81 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::col#1 mode_hicolmcchar::cx#2 mode_hicolmcchar::ch#2 ] ) always clobbers reg byte y -Statement [484] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [485] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const byte*) mode_hicolecmchar::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [486] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [487] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [488] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [489] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_hicolecmchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [490] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(const byte) VIC_ECM#0|(byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [491] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [492] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_hicolecmchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [497] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [498] *((const byte*) BGCOL1#0) ← (byte) $50 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [499] *((const byte*) BGCOL2#0) ← (byte) $54 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [500] *((const byte*) BGCOL3#0) ← (byte) $58 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [501] *((const byte*) BGCOL4#0) ← (byte) $5c [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] ) always clobbers reg byte a -Statement [504] (byte~) mode_hicolecmchar::$26 ← (byte) mode_hicolecmchar::cy#4 & (byte) $f [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$26 ] ( main:2::menu:9::mode_hicolecmchar:74 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$26 ] ) always clobbers reg byte a -Statement [505] (byte~) mode_hicolecmchar::$27 ← (byte~) mode_hicolecmchar::$26 << (byte) 4 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 ] ( main:2::menu:9::mode_hicolecmchar:74 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 ] ) always clobbers reg byte a -Statement [506] (byte~) mode_hicolecmchar::$28 ← (byte) mode_hicolecmchar::cx#2 & (byte) $f [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 mode_hicolecmchar::$28 ] ( main:2::menu:9::mode_hicolecmchar:74 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 mode_hicolecmchar::$28 ] ) always clobbers reg byte a -Statement [508] *((byte*) mode_hicolecmchar::col#2) ← (byte) mode_hicolecmchar::v#0 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::v#0 ] ( main:2::menu:9::mode_hicolecmchar:74 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::v#0 ] ) always clobbers reg byte y -Statement [510] *((byte*) mode_hicolecmchar::ch#2) ← (byte) mode_hicolecmchar::v#0 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::col#1 mode_hicolecmchar::cx#2 mode_hicolecmchar::ch#2 ] ( main:2::menu:9::mode_hicolecmchar:74 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::col#1 mode_hicolecmchar::cx#2 mode_hicolecmchar::ch#2 ] ) always clobbers reg byte y -Statement [519] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [520] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const byte*) mode_hicolstdchar::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [521] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [522] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [523] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [524] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_hicolstdchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [525] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [526] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [527] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_hicolstdchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [532] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [533] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] ) always clobbers reg byte a -Statement [536] (byte~) mode_hicolstdchar::$25 ← (byte) mode_hicolstdchar::cy#4 & (byte) $f [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$25 ] ( main:2::menu:9::mode_hicolstdchar:67 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$25 ] ) always clobbers reg byte a -Statement [537] (byte~) mode_hicolstdchar::$26 ← (byte~) mode_hicolstdchar::$25 << (byte) 4 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 ] ( main:2::menu:9::mode_hicolstdchar:67 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 ] ) always clobbers reg byte a -Statement [538] (byte~) mode_hicolstdchar::$27 ← (byte) mode_hicolstdchar::cx#2 & (byte) $f [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 mode_hicolstdchar::$27 ] ( main:2::menu:9::mode_hicolstdchar:67 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 mode_hicolstdchar::$27 ] ) always clobbers reg byte a -Statement [540] *((byte*) mode_hicolstdchar::col#2) ← (byte) mode_hicolstdchar::v#0 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::v#0 ] ( main:2::menu:9::mode_hicolstdchar:67 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::v#0 ] ) always clobbers reg byte y -Statement [542] *((byte*) mode_hicolstdchar::ch#2) ← (byte) mode_hicolstdchar::v#0 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::col#1 mode_hicolstdchar::cx#2 mode_hicolstdchar::ch#2 ] ( main:2::menu:9::mode_hicolstdchar:67 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::col#1 mode_hicolstdchar::cx#2 mode_hicolstdchar::ch#2 ] ) always clobbers reg byte y -Statement [551] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [552] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [553] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [554] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_stdbitmap::BITMAP#0/(word) $4000 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [555] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [556] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [557] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_stdbitmap::BITMAP#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [559] *((const byte*) DTV_PALETTE#0 + (byte) mode_stdbitmap::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_stdbitmap::i#2) [ mode_stdbitmap::i#2 ] ( main:2::menu:9::mode_stdbitmap:60 [ mode_stdbitmap::i#2 ] ) always clobbers reg byte a -Statement [562] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [563] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] ) always clobbers reg byte a -Statement [566] (byte~) mode_stdbitmap::$22 ← (byte) mode_stdbitmap::cx#2 + (byte) mode_stdbitmap::cy#4 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::$22 ] ( main:2::menu:9::mode_stdbitmap:60 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::$22 ] ) always clobbers reg byte a -Statement [568] (byte) mode_stdbitmap::col2#0 ← (byte) $f - (byte) mode_stdbitmap::col#0 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col#0 mode_stdbitmap::col2#0 ] ( main:2::menu:9::mode_stdbitmap:60 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col#0 mode_stdbitmap::col2#0 ] ) always clobbers reg byte a -Statement [569] (byte~) mode_stdbitmap::$25 ← (byte) mode_stdbitmap::col#0 << (byte) 4 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col2#0 mode_stdbitmap::$25 ] ( main:2::menu:9::mode_stdbitmap:60 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col2#0 mode_stdbitmap::$25 ] ) always clobbers reg byte a -Statement [571] *((byte*) mode_stdbitmap::ch#2) ← (byte~) mode_stdbitmap::$26 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 ] ( main:2::menu:9::mode_stdbitmap:60 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 ] ) always clobbers reg byte y -Statement [593] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590 [ mode_stdbitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ) always clobbers reg byte a -Statement [595] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590 [ mode_stdbitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ) always clobbers reg byte a -Statement [610] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590 [ mode_stdbitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ) always clobbers reg byte a -Statement [624] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590 [ mode_stdbitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ) always clobbers reg byte a -Statement [626] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590 [ mode_stdbitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ) always clobbers reg byte a -Statement [640] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590 [ mode_stdbitmap::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a -Statement [655] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a -Statement [661] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a -Statement [664] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a -Statement [670] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a -Statement [671] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a -Statement [672] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a -Statement [673] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y -Statement [674] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y -Statement [677] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a -Statement [683] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a -Statement [686] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:602 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxi:647 [ mode_stdbitmap::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a -Statement [692] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a -Statement [698] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a -Statement [701] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:623 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_xdyd:639 [ mode_stdbitmap::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a -Statement [707] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a -Statement [713] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a -Statement [716] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:617 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::menu:9::mode_stdbitmap:60::bitmap_line:590::bitmap_line_ydxd:633 [ mode_stdbitmap::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a -Statement [721] (word) bitmap_clear::bitmap#0 ← *((const byte[$100]) bitmap_plot_xhi#0) w= *((const byte[$100]) bitmap_plot_xlo#0) [ bitmap_clear::bitmap#0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_clear:580 [ bitmap_clear::bitmap#0 ] ) always clobbers reg byte a -Statement [722] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word) bitmap_clear::bitmap#0 [ bitmap_clear::bitmap#5 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_clear:580 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a -Statement [725] *((byte*) bitmap_clear::bitmap#2) ← (byte) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_clear:580 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y -Statement [734] (byte~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (byte) $f8 [ bitmap_init::x#2 bitmap_init::bits#3 bitmap_init::$0 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_init:578 [ bitmap_init::x#2 bitmap_init::bits#3 bitmap_init::$0 ] ) always clobbers reg byte a -Statement [736] *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_init::x#2) ← >(const byte*) mode_stdbitmap::BITMAP#0 [ bitmap_init::x#2 bitmap_init::bits#3 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_init:578 [ bitmap_init::x#2 bitmap_init::bits#3 ] ) always clobbers reg byte a -Statement [737] *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::x#2 bitmap_init::bits#3 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_init:578 [ bitmap_init::x#2 bitmap_init::bits#3 ] ) always clobbers reg byte a -Statement [745] (byte~) bitmap_init::$10 ← (byte) bitmap_init::y#2 & (byte) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$10 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_init:578 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$10 ] ) always clobbers reg byte a -Statement [752] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::menu:9::mode_stdbitmap:60::bitmap_init:578 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a -Statement [757] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [758] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [759] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [760] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [761] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [762] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_mcchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [763] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [764] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0|(const byte) VIC_MCM#0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [765] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_mcchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [767] *((const byte*) DTV_PALETTE#0 + (byte) mode_mcchar::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_mcchar::i#2) [ mode_mcchar::i#2 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::i#2 ] ) always clobbers reg byte a -Statement [770] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [771] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [772] *((const byte*) BGCOL2#0) ← (const byte) GREEN#0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [773] *((const byte*) BGCOL3#0) ← (const byte) BLUE#0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] ) always clobbers reg byte a -Statement [776] (byte~) mode_mcchar::$26 ← (byte) mode_mcchar::cx#2 + (byte) mode_mcchar::cy#4 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 mode_mcchar::$26 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 mode_mcchar::$26 ] ) always clobbers reg byte a -Statement [778] *((byte*) mode_mcchar::col#2) ← (byte~) mode_mcchar::$27 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 ] ) always clobbers reg byte y -Statement [780] (byte~) mode_mcchar::$28 ← (byte) mode_mcchar::cy#4 & (byte) $f [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$28 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$28 ] ) always clobbers reg byte a -Statement [781] (byte~) mode_mcchar::$29 ← (byte~) mode_mcchar::$28 << (byte) 4 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 ] ) always clobbers reg byte a -Statement [782] (byte~) mode_mcchar::$30 ← (byte) mode_mcchar::cx#2 & (byte) $f [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 mode_mcchar::$30 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 mode_mcchar::$30 ] ) always clobbers reg byte a -Statement [784] *((byte*) mode_mcchar::ch#2) ← (byte~) mode_mcchar::$31 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 ] ( main:2::menu:9::mode_mcchar:53 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 ] ) always clobbers reg byte y -Statement [793] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [794] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [795] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [796] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [797] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [798] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_ecmchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [799] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(const byte) VIC_ECM#0|(byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [800] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [801] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_ecmchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [803] *((const byte*) DTV_PALETTE#0 + (byte) mode_ecmchar::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_ecmchar::i#2) [ mode_ecmchar::i#2 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::i#2 ] ) always clobbers reg byte a -Statement [806] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [807] *((const byte*) BGCOL1#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [808] *((const byte*) BGCOL2#0) ← (byte) 2 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [809] *((const byte*) BGCOL3#0) ← (byte) 5 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [810] *((const byte*) BGCOL4#0) ← (byte) 6 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] ) always clobbers reg byte a -Statement [813] (byte~) mode_ecmchar::$26 ← (byte) mode_ecmchar::cx#2 + (byte) mode_ecmchar::cy#4 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 mode_ecmchar::$26 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 mode_ecmchar::$26 ] ) always clobbers reg byte a -Statement [815] *((byte*) mode_ecmchar::col#2) ← (byte~) mode_ecmchar::$27 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 ] ) always clobbers reg byte y -Statement [817] (byte~) mode_ecmchar::$28 ← (byte) mode_ecmchar::cy#4 & (byte) $f [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$28 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$28 ] ) always clobbers reg byte a -Statement [818] (byte~) mode_ecmchar::$29 ← (byte~) mode_ecmchar::$28 << (byte) 4 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 ] ) always clobbers reg byte a -Statement [819] (byte~) mode_ecmchar::$30 ← (byte) mode_ecmchar::cx#2 & (byte) $f [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 mode_ecmchar::$30 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 mode_ecmchar::$30 ] ) always clobbers reg byte a -Statement [821] *((byte*) mode_ecmchar::ch#2) ← (byte~) mode_ecmchar::$31 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 ] ( main:2::menu:9::mode_ecmchar:46 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 ] ) always clobbers reg byte y -Statement [830] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [831] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [832] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [833] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [834] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [835] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_stdchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [836] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [837] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [838] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_stdchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [840] *((const byte*) DTV_PALETTE#0 + (byte) mode_stdchar::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_stdchar::i#2) [ mode_stdchar::i#2 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::i#2 ] ) always clobbers reg byte a -Statement [843] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [844] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] ) always clobbers reg byte a -Statement [847] (byte~) mode_stdchar::$25 ← (byte) mode_stdchar::cx#2 + (byte) mode_stdchar::cy#4 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 mode_stdchar::$25 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 mode_stdchar::$25 ] ) always clobbers reg byte a -Statement [849] *((byte*) mode_stdchar::col#2) ← (byte~) mode_stdchar::$26 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 ] ) always clobbers reg byte y -Statement [851] (byte~) mode_stdchar::$27 ← (byte) mode_stdchar::cy#4 & (byte) $f [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$27 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$27 ] ) always clobbers reg byte a -Statement [852] (byte~) mode_stdchar::$28 ← (byte~) mode_stdchar::$27 << (byte) 4 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 ] ) always clobbers reg byte a -Statement [853] (byte~) mode_stdchar::$29 ← (byte) mode_stdchar::cx#2 & (byte) $f [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ) always clobbers reg byte a -Statement [855] *((byte*) mode_stdchar::ch#2) ← (byte~) mode_stdchar::$30 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ( main:2::menu:9::mode_stdchar:38 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ) always clobbers reg byte y -Statement [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:31 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) always clobbers reg byte a reg byte y -Statement [869] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3) [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:31 [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y -Statement [872] *((byte*) print_char_cursor#17) ← (byte) print_str_lines::ch#0 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:31 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte y -Statement [878] (byte*~) print_char_cursor#100 ← (byte*) print_line_cursor#19 [ print_str_lines::str#0 print_char_cursor#100 print_line_cursor#19 ] ( main:2::menu:9::print_str_lines:31 [ print_str_lines::str#0 print_char_cursor#100 print_line_cursor#19 ] ) always clobbers reg byte a -Statement [881] (byte*) print_line_cursor#19 ← (byte*) print_line_cursor#18 + (byte) $28 [ print_line_cursor#19 print_char_cursor#32 ] ( main:2::menu:9::print_str_lines:31::print_ln:877 [ print_str_lines::str#0 print_line_cursor#19 print_char_cursor#32 ] ) always clobbers reg byte a -Statement [882] if((byte*) print_line_cursor#19<(byte*) print_char_cursor#32) goto print_ln::@1 [ print_line_cursor#19 print_char_cursor#32 ] ( main:2::menu:9::print_str_lines:31::print_ln:877 [ print_str_lines::str#0 print_line_cursor#19 print_char_cursor#32 ] ) always clobbers reg byte a -Statement [889] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::menu:9::print_cls:29::memset:885 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [891] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::menu:9::print_cls:29::memset:885 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [227] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [228] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [229] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [230] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [231] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_8bpppixelcell::PLANEA#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [232] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [233] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [234] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [235] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [236] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [237] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_8bpppixelcell::PLANEB#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [238] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [239] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [240] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [241] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [242] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [249] (byte~) mode_8bpppixelcell::$14 ← (byte) mode_8bpppixelcell::ay#4 & (byte) $f [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$14 ] ( main:2::menu:9::mode_8bpppixelcell:111 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$14 ] ) always clobbers reg byte a +Statement [250] (byte~) mode_8bpppixelcell::$15 ← (byte~) mode_8bpppixelcell::$14 << (byte) 4 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 ] ( main:2::menu:9::mode_8bpppixelcell:111 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 ] ) always clobbers reg byte a +Statement [251] (byte~) mode_8bpppixelcell::$16 ← (byte) mode_8bpppixelcell::ax#2 & (byte) $f [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 mode_8bpppixelcell::$16 ] ( main:2::menu:9::mode_8bpppixelcell:111 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::$15 mode_8bpppixelcell::$16 ] ) always clobbers reg byte a +Statement [253] *((byte*) mode_8bpppixelcell::gfxa#2) ← (byte~) mode_8bpppixelcell::$17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 ] ( main:2::menu:9::mode_8bpppixelcell:111 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ax#2 mode_8bpppixelcell::gfxa#2 ] ) always clobbers reg byte y +Statement [259] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [262] (byte) mode_8bpppixelcell::bits#0 ← *((byte*) mode_8bpppixelcell::chargen#2) [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::col#5 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#0 ] ( main:2::menu:9::mode_8bpppixelcell:111 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::col#5 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#0 ] ) always clobbers reg byte a reg byte y +Statement [269] *((byte*) mode_8bpppixelcell::gfxb#2) ← (byte) mode_8bpppixelcell::c#2 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#1 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#2 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::col#2 mode_8bpppixelcell::cp#2 ] ( main:2::menu:9::mode_8bpppixelcell:111 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::chargen#1 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::bits#2 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::col#2 mode_8bpppixelcell::cp#2 ] ) always clobbers reg byte y +Statement [279] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:2::menu:9::mode_8bpppixelcell:111 [ ] ) always clobbers reg byte a +Statement [282] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [283] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [284] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [285] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [286] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_sixsfred::PLANEA#0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [287] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [288] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [289] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [290] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [291] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [292] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_sixsfred::PLANEB#0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [293] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [294] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [295] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [296] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [297] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(const byte*) mode_sixsfred::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [298] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [303] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred:104 [ ] ) always clobbers reg byte a +Statement [306] (byte~) mode_sixsfred::$17 ← (byte) mode_sixsfred::cx#2 + (byte) mode_sixsfred::cy#4 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 mode_sixsfred::$17 ] ( main:2::menu:9::mode_sixsfred:104 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 mode_sixsfred::$17 ] ) always clobbers reg byte a +Statement [308] *((byte*) mode_sixsfred::col#2) ← (byte~) mode_sixsfred::$18 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 ] ( main:2::menu:9::mode_sixsfred:104 [ mode_sixsfred::cy#4 mode_sixsfred::cx#2 mode_sixsfred::col#2 ] ) always clobbers reg byte y +Statement [316] (byte~) mode_sixsfred::$21 ← (byte) mode_sixsfred::ay#4 >> (byte) 1 [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 mode_sixsfred::$21 ] ( main:2::menu:9::mode_sixsfred:104 [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 mode_sixsfred::$21 ] ) always clobbers reg byte a +Statement [318] *((byte*) mode_sixsfred::gfxa#2) ← *((const byte[]) mode_sixsfred::row_bitmask#0 + (byte) mode_sixsfred::row#0) [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 ] ( main:2::menu:9::mode_sixsfred:104 [ mode_sixsfred::ay#4 mode_sixsfred::gfxa#2 mode_sixsfred::ax#2 ] ) always clobbers reg byte a reg byte y +Statement [326] *((byte*) mode_sixsfred::gfxb#2) ← (byte) $1b [ mode_sixsfred::by#4 mode_sixsfred::gfxb#2 mode_sixsfred::bx#2 ] ( main:2::menu:9::mode_sixsfred:104 [ mode_sixsfred::by#4 mode_sixsfred::gfxb#2 mode_sixsfred::bx#2 ] ) always clobbers reg byte a reg byte y +Statement [335] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [336] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [337] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [338] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [339] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_twoplanebitmap::PLANEA#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [340] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [341] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [342] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [343] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [344] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [345] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_twoplanebitmap::PLANEB#0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [346] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [347] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [348] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [349] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [350] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(const byte*) mode_twoplanebitmap::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [351] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [356] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [357] *((const byte*) BGCOL1#0) ← (byte) $70 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [358] *((const byte*) BGCOL2#0) ← (byte) $d4 [ ] ( main:2::menu:9::mode_twoplanebitmap:97 [ ] ) always clobbers reg byte a +Statement [361] (byte~) mode_twoplanebitmap::$16 ← (byte) mode_twoplanebitmap::cy#4 & (byte) $f [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$16 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$16 ] ) always clobbers reg byte a +Statement [362] (byte~) mode_twoplanebitmap::$17 ← (byte~) mode_twoplanebitmap::$16 << (byte) 4 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 ] ) always clobbers reg byte a +Statement [363] (byte~) mode_twoplanebitmap::$18 ← (byte) mode_twoplanebitmap::cx#2 & (byte) $f [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 mode_twoplanebitmap::$18 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 mode_twoplanebitmap::$17 mode_twoplanebitmap::$18 ] ) always clobbers reg byte a +Statement [365] *((byte*) mode_twoplanebitmap::col#2) ← (byte~) mode_twoplanebitmap::$19 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cx#2 mode_twoplanebitmap::col#2 ] ) always clobbers reg byte y +Statement [373] (byte~) mode_twoplanebitmap::$22 ← (byte) mode_twoplanebitmap::ay#5 & (byte) 4 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 mode_twoplanebitmap::$22 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 mode_twoplanebitmap::$22 ] ) always clobbers reg byte a +Statement [375] *((byte*) mode_twoplanebitmap::gfxa#3) ← (byte) $ff [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ) always clobbers reg byte a reg byte y +Statement [384] *((byte*) mode_twoplanebitmap::gfxb#2) ← (byte) $f [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::bx#2 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::bx#2 ] ) always clobbers reg byte a reg byte y +Statement [393] *((byte*) mode_twoplanebitmap::gfxa#3) ← (byte) 0 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ( main:2::menu:9::mode_twoplanebitmap:97 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::ax#2 ] ) always clobbers reg byte a reg byte y +Statement [395] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_LINEAR#0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [396] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_ECM#0|(const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [397] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [398] *((const byte*) DTV_PLANEA_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [399] *((const byte*) DTV_PLANEA_START_MI#0) ← >(const byte*) mode_sixsfred2::PLANEA#0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [400] *((const byte*) DTV_PLANEA_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [401] *((const byte*) DTV_PLANEA_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [402] *((const byte*) DTV_PLANEA_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [403] *((const byte*) DTV_PLANEA_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [404] *((const byte*) DTV_PLANEB_START_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [405] *((const byte*) DTV_PLANEB_START_MI#0) ← >(const byte*) mode_sixsfred2::PLANEB#0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [406] *((const byte*) DTV_PLANEB_START_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [407] *((const byte*) DTV_PLANEB_STEP#0) ← (byte) 1 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [408] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [409] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [410] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(const byte*) mode_sixsfred2::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [411] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [416] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_sixsfred2:90 [ ] ) always clobbers reg byte a +Statement [419] (byte~) mode_sixsfred2::$15 ← (byte) mode_sixsfred2::cx#2 & (byte) 3 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$15 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$15 ] ) always clobbers reg byte a +Statement [420] (byte~) mode_sixsfred2::$16 ← (byte~) mode_sixsfred2::$15 << (byte) 4 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 ] ) always clobbers reg byte a +Statement [421] (byte~) mode_sixsfred2::$17 ← (byte) mode_sixsfred2::cy#4 & (byte) 3 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 mode_sixsfred2::$17 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 mode_sixsfred2::$16 mode_sixsfred2::$17 ] ) always clobbers reg byte a +Statement [423] *((byte*) mode_sixsfred2::col#2) ← (byte~) mode_sixsfred2::$18 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::cy#4 mode_sixsfred2::cx#2 mode_sixsfred2::col#2 ] ) always clobbers reg byte y +Statement [431] (byte~) mode_sixsfred2::$21 ← (byte) mode_sixsfred2::ay#4 >> (byte) 1 [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 mode_sixsfred2::$21 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 mode_sixsfred2::$21 ] ) always clobbers reg byte a +Statement [433] *((byte*) mode_sixsfred2::gfxa#2) ← *((const byte[]) mode_sixsfred2::row_bitmask#0 + (byte) mode_sixsfred2::row#0) [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::ay#4 mode_sixsfred2::gfxa#2 mode_sixsfred2::ax#2 ] ) always clobbers reg byte a reg byte y +Statement [441] *((byte*) mode_sixsfred2::gfxb#2) ← (byte) $1b [ mode_sixsfred2::by#4 mode_sixsfred2::gfxb#2 mode_sixsfred2::bx#2 ] ( main:2::menu:9::mode_sixsfred2:90 [ mode_sixsfred2::by#4 mode_sixsfred2::gfxb#2 mode_sixsfred2::bx#2 ] ) always clobbers reg byte a reg byte y +Statement [450] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [451] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const byte*) mode_hicolmcchar::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [452] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [453] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [454] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [455] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_hicolmcchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [456] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [457] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0|(const byte) VIC_MCM#0 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [458] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_hicolmcchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [463] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [464] *((const byte*) BGCOL1#0) ← (byte) $50 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [465] *((const byte*) BGCOL2#0) ← (byte) $54 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [466] *((const byte*) BGCOL3#0) ← (byte) $58 [ ] ( main:2::menu:9::mode_hicolmcchar:83 [ ] ) always clobbers reg byte a +Statement [469] (byte~) mode_hicolmcchar::$26 ← (byte) mode_hicolmcchar::cy#4 & (byte) $f [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$26 ] ( main:2::menu:9::mode_hicolmcchar:83 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$26 ] ) always clobbers reg byte a +Statement [470] (byte~) mode_hicolmcchar::$27 ← (byte~) mode_hicolmcchar::$26 << (byte) 4 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 ] ( main:2::menu:9::mode_hicolmcchar:83 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 ] ) always clobbers reg byte a +Statement [471] (byte~) mode_hicolmcchar::$28 ← (byte) mode_hicolmcchar::cx#2 & (byte) $f [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 mode_hicolmcchar::$28 ] ( main:2::menu:9::mode_hicolmcchar:83 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::$27 mode_hicolmcchar::$28 ] ) always clobbers reg byte a +Statement [473] *((byte*) mode_hicolmcchar::col#2) ← (byte) mode_hicolmcchar::v#0 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::v#0 ] ( main:2::menu:9::mode_hicolmcchar:83 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cx#2 mode_hicolmcchar::col#2 mode_hicolmcchar::ch#2 mode_hicolmcchar::v#0 ] ) always clobbers reg byte y +Statement [475] *((byte*) mode_hicolmcchar::ch#2) ← (byte) mode_hicolmcchar::v#0 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::col#1 mode_hicolmcchar::cx#2 mode_hicolmcchar::ch#2 ] ( main:2::menu:9::mode_hicolmcchar:83 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::col#1 mode_hicolmcchar::cx#2 mode_hicolmcchar::ch#2 ] ) always clobbers reg byte y +Statement [484] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [485] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const byte*) mode_hicolecmchar::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [486] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [487] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [488] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [489] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_hicolecmchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [490] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(const byte) VIC_ECM#0|(byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [491] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [492] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_hicolecmchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [497] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [498] *((const byte*) BGCOL1#0) ← (byte) $50 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [499] *((const byte*) BGCOL2#0) ← (byte) $54 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [500] *((const byte*) BGCOL3#0) ← (byte) $58 [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [501] *((const byte*) BGCOL4#0) ← (byte) $5c [ ] ( main:2::menu:9::mode_hicolecmchar:76 [ ] ) always clobbers reg byte a +Statement [504] (byte~) mode_hicolecmchar::$26 ← (byte) mode_hicolecmchar::cy#4 & (byte) $f [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$26 ] ( main:2::menu:9::mode_hicolecmchar:76 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$26 ] ) always clobbers reg byte a +Statement [505] (byte~) mode_hicolecmchar::$27 ← (byte~) mode_hicolecmchar::$26 << (byte) 4 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 ] ( main:2::menu:9::mode_hicolecmchar:76 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 ] ) always clobbers reg byte a +Statement [506] (byte~) mode_hicolecmchar::$28 ← (byte) mode_hicolecmchar::cx#2 & (byte) $f [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 mode_hicolecmchar::$28 ] ( main:2::menu:9::mode_hicolecmchar:76 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::$27 mode_hicolecmchar::$28 ] ) always clobbers reg byte a +Statement [508] *((byte*) mode_hicolecmchar::col#2) ← (byte) mode_hicolecmchar::v#0 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::v#0 ] ( main:2::menu:9::mode_hicolecmchar:76 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cx#2 mode_hicolecmchar::col#2 mode_hicolecmchar::ch#2 mode_hicolecmchar::v#0 ] ) always clobbers reg byte y +Statement [510] *((byte*) mode_hicolecmchar::ch#2) ← (byte) mode_hicolecmchar::v#0 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::col#1 mode_hicolecmchar::cx#2 mode_hicolecmchar::ch#2 ] ( main:2::menu:9::mode_hicolecmchar:76 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::col#1 mode_hicolecmchar::cx#2 mode_hicolecmchar::ch#2 ] ) always clobbers reg byte y +Statement [519] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [520] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const byte*) mode_hicolstdchar::COLORS#0/(word) $400 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [521] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [522] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [523] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [524] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_hicolstdchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [525] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [526] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [527] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_hicolstdchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [532] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [533] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:69 [ ] ) always clobbers reg byte a +Statement [536] (byte~) mode_hicolstdchar::$25 ← (byte) mode_hicolstdchar::cy#4 & (byte) $f [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$25 ] ( main:2::menu:9::mode_hicolstdchar:69 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$25 ] ) always clobbers reg byte a +Statement [537] (byte~) mode_hicolstdchar::$26 ← (byte~) mode_hicolstdchar::$25 << (byte) 4 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 ] ( main:2::menu:9::mode_hicolstdchar:69 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 ] ) always clobbers reg byte a +Statement [538] (byte~) mode_hicolstdchar::$27 ← (byte) mode_hicolstdchar::cx#2 & (byte) $f [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 mode_hicolstdchar::$27 ] ( main:2::menu:9::mode_hicolstdchar:69 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::$26 mode_hicolstdchar::$27 ] ) always clobbers reg byte a +Statement [540] *((byte*) mode_hicolstdchar::col#2) ← (byte) mode_hicolstdchar::v#0 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::v#0 ] ( main:2::menu:9::mode_hicolstdchar:69 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cx#2 mode_hicolstdchar::col#2 mode_hicolstdchar::ch#2 mode_hicolstdchar::v#0 ] ) always clobbers reg byte y +Statement [542] *((byte*) mode_hicolstdchar::ch#2) ← (byte) mode_hicolstdchar::v#0 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::col#1 mode_hicolstdchar::cx#2 mode_hicolstdchar::ch#2 ] ( main:2::menu:9::mode_hicolstdchar:69 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::col#1 mode_hicolstdchar::cx#2 mode_hicolstdchar::ch#2 ] ) always clobbers reg byte y +Statement [551] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [552] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [553] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [554] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_stdbitmap::BITMAP#0/(word) $4000 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [555] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [556] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [557] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_stdbitmap::BITMAP#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [559] *((const byte*) DTV_PALETTE#0 + (byte) mode_stdbitmap::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_stdbitmap::i#2) [ mode_stdbitmap::i#2 ] ( main:2::menu:9::mode_stdbitmap:62 [ mode_stdbitmap::i#2 ] ) always clobbers reg byte a +Statement [562] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [563] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:2::menu:9::mode_stdbitmap:62 [ ] ) always clobbers reg byte a +Statement [566] (byte~) mode_stdbitmap::$22 ← (byte) mode_stdbitmap::cx#2 + (byte) mode_stdbitmap::cy#4 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::$22 ] ( main:2::menu:9::mode_stdbitmap:62 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::$22 ] ) always clobbers reg byte a +Statement [568] (byte) mode_stdbitmap::col2#0 ← (byte) $f - (byte) mode_stdbitmap::col#0 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col#0 mode_stdbitmap::col2#0 ] ( main:2::menu:9::mode_stdbitmap:62 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col#0 mode_stdbitmap::col2#0 ] ) always clobbers reg byte a +Statement [569] (byte~) mode_stdbitmap::$25 ← (byte) mode_stdbitmap::col#0 << (byte) 4 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col2#0 mode_stdbitmap::$25 ] ( main:2::menu:9::mode_stdbitmap:62 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 mode_stdbitmap::col2#0 mode_stdbitmap::$25 ] ) always clobbers reg byte a +Statement [571] *((byte*) mode_stdbitmap::ch#2) ← (byte~) mode_stdbitmap::$26 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 ] ( main:2::menu:9::mode_stdbitmap:62 [ mode_stdbitmap::cy#4 mode_stdbitmap::cx#2 mode_stdbitmap::ch#2 ] ) always clobbers reg byte y +Statement [593] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586 [ mode_stdbitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ) always clobbers reg byte a +Statement [595] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586 [ mode_stdbitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ) always clobbers reg byte a +Statement [610] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586 [ mode_stdbitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ) always clobbers reg byte a +Statement [624] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586 [ mode_stdbitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ) always clobbers reg byte a +Statement [626] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586 [ mode_stdbitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ) always clobbers reg byte a +Statement [640] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586 [ mode_stdbitmap::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a +Statement [655] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a +Statement [661] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a +Statement [664] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a +Statement [670] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a +Statement [671] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a +Statement [672] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a +Statement [673] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y +Statement [674] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:609::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyi:653::bitmap_plot:659 [ mode_stdbitmap::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647::bitmap_plot:681 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639::bitmap_plot:696 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633::bitmap_plot:711 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y +Statement [677] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a +Statement [683] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a +Statement [686] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:602 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxi:647 [ mode_stdbitmap::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a +Statement [692] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a +Statement [698] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a +Statement [701] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:623 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_xdyd:639 [ mode_stdbitmap::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a +Statement [707] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a +Statement [713] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a +Statement [716] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:617 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::menu:9::mode_stdbitmap:62::bitmap_line:586::bitmap_line_ydxd:633 [ mode_stdbitmap::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a +Statement [721] (word) bitmap_clear::bitmap#0 ← *((const byte[$100]) bitmap_plot_xhi#0) w= *((const byte[$100]) bitmap_plot_xlo#0) [ bitmap_clear::bitmap#0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_clear:580 [ bitmap_clear::bitmap#0 ] ) always clobbers reg byte a +Statement [722] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word) bitmap_clear::bitmap#0 [ bitmap_clear::bitmap#5 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_clear:580 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a +Statement [725] *((byte*) bitmap_clear::bitmap#2) ← (byte) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_clear:580 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y +Statement [734] (byte~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (byte) $f8 [ bitmap_init::x#2 bitmap_init::bits#3 bitmap_init::$0 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_init:578 [ bitmap_init::x#2 bitmap_init::bits#3 bitmap_init::$0 ] ) always clobbers reg byte a +Statement [736] *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_init::x#2) ← >(const byte*) mode_stdbitmap::BITMAP#0 [ bitmap_init::x#2 bitmap_init::bits#3 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_init:578 [ bitmap_init::x#2 bitmap_init::bits#3 ] ) always clobbers reg byte a +Statement [737] *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::x#2 bitmap_init::bits#3 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_init:578 [ bitmap_init::x#2 bitmap_init::bits#3 ] ) always clobbers reg byte a +Statement [745] (byte~) bitmap_init::$10 ← (byte) bitmap_init::y#2 & (byte) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$10 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_init:578 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$10 ] ) always clobbers reg byte a +Statement [752] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::menu:9::mode_stdbitmap:62::bitmap_init:578 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a +Statement [757] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [758] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [759] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [760] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [761] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [762] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_mcchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [763] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [764] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0|(const byte) VIC_MCM#0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [765] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_mcchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [767] *((const byte*) DTV_PALETTE#0 + (byte) mode_mcchar::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_mcchar::i#2) [ mode_mcchar::i#2 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::i#2 ] ) always clobbers reg byte a +Statement [770] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [771] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [772] *((const byte*) BGCOL2#0) ← (const byte) GREEN#0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [773] *((const byte*) BGCOL3#0) ← (const byte) BLUE#0 [ ] ( main:2::menu:9::mode_mcchar:55 [ ] ) always clobbers reg byte a +Statement [776] (byte~) mode_mcchar::$26 ← (byte) mode_mcchar::cx#2 + (byte) mode_mcchar::cy#4 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 mode_mcchar::$26 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 mode_mcchar::$26 ] ) always clobbers reg byte a +Statement [778] *((byte*) mode_mcchar::col#2) ← (byte~) mode_mcchar::$27 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::cy#4 mode_mcchar::cx#2 mode_mcchar::col#2 mode_mcchar::ch#2 ] ) always clobbers reg byte y +Statement [780] (byte~) mode_mcchar::$28 ← (byte) mode_mcchar::cy#4 & (byte) $f [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$28 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$28 ] ) always clobbers reg byte a +Statement [781] (byte~) mode_mcchar::$29 ← (byte~) mode_mcchar::$28 << (byte) 4 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 ] ) always clobbers reg byte a +Statement [782] (byte~) mode_mcchar::$30 ← (byte) mode_mcchar::cx#2 & (byte) $f [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 mode_mcchar::$30 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 mode_mcchar::$29 mode_mcchar::$30 ] ) always clobbers reg byte a +Statement [784] *((byte*) mode_mcchar::ch#2) ← (byte~) mode_mcchar::$31 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 ] ( main:2::menu:9::mode_mcchar:55 [ mode_mcchar::cy#4 mode_mcchar::col#1 mode_mcchar::cx#2 mode_mcchar::ch#2 ] ) always clobbers reg byte y +Statement [793] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [794] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [795] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [796] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [797] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [798] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_ecmchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [799] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(const byte) VIC_ECM#0|(byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [800] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [801] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_ecmchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [803] *((const byte*) DTV_PALETTE#0 + (byte) mode_ecmchar::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_ecmchar::i#2) [ mode_ecmchar::i#2 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::i#2 ] ) always clobbers reg byte a +Statement [806] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [807] *((const byte*) BGCOL1#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [808] *((const byte*) BGCOL2#0) ← (byte) 2 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [809] *((const byte*) BGCOL3#0) ← (byte) 5 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [810] *((const byte*) BGCOL4#0) ← (byte) 6 [ ] ( main:2::menu:9::mode_ecmchar:48 [ ] ) always clobbers reg byte a +Statement [813] (byte~) mode_ecmchar::$26 ← (byte) mode_ecmchar::cx#2 + (byte) mode_ecmchar::cy#4 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 mode_ecmchar::$26 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 mode_ecmchar::$26 ] ) always clobbers reg byte a +Statement [815] *((byte*) mode_ecmchar::col#2) ← (byte~) mode_ecmchar::$27 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::cy#4 mode_ecmchar::cx#2 mode_ecmchar::col#2 mode_ecmchar::ch#2 ] ) always clobbers reg byte y +Statement [817] (byte~) mode_ecmchar::$28 ← (byte) mode_ecmchar::cy#4 & (byte) $f [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$28 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$28 ] ) always clobbers reg byte a +Statement [818] (byte~) mode_ecmchar::$29 ← (byte~) mode_ecmchar::$28 << (byte) 4 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 ] ) always clobbers reg byte a +Statement [819] (byte~) mode_ecmchar::$30 ← (byte) mode_ecmchar::cx#2 & (byte) $f [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 mode_ecmchar::$30 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 mode_ecmchar::$29 mode_ecmchar::$30 ] ) always clobbers reg byte a +Statement [821] *((byte*) mode_ecmchar::ch#2) ← (byte~) mode_ecmchar::$31 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 ] ( main:2::menu:9::mode_ecmchar:48 [ mode_ecmchar::cy#4 mode_ecmchar::col#1 mode_ecmchar::cx#2 mode_ecmchar::ch#2 ] ) always clobbers reg byte y +Statement [830] *((const byte*) DTV_GRAPHICS_VIC_BANK#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [831] *((const byte*) DTV_COLOR_BANK_LO#0) ← <(word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [832] *((const byte*) DTV_COLOR_BANK_HI#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [833] *((const byte*) DTV_CONTROL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [834] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [835] *((const byte*) CIA2_PORT_A#0) ← (byte) 3^(byte)(word)(const byte*) mode_stdchar::CHARSET#0/(word) $4000 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [836] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [837] *((const byte*) VIC_CONTROL2#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [838] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) mode_stdchar::CHARSET#0&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [840] *((const byte*) DTV_PALETTE#0 + (byte) mode_stdchar::i#2) ← *((const byte[$10]) DTV_PALETTE_DEFAULT#0 + (byte) mode_stdchar::i#2) [ mode_stdchar::i#2 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::i#2 ] ) always clobbers reg byte a +Statement [843] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [844] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:40 [ ] ) always clobbers reg byte a +Statement [847] (byte~) mode_stdchar::$25 ← (byte) mode_stdchar::cx#2 + (byte) mode_stdchar::cy#4 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 mode_stdchar::$25 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 mode_stdchar::$25 ] ) always clobbers reg byte a +Statement [849] *((byte*) mode_stdchar::col#2) ← (byte~) mode_stdchar::$26 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::cx#2 mode_stdchar::col#2 mode_stdchar::ch#2 ] ) always clobbers reg byte y +Statement [851] (byte~) mode_stdchar::$27 ← (byte) mode_stdchar::cy#4 & (byte) $f [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$27 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$27 ] ) always clobbers reg byte a +Statement [852] (byte~) mode_stdchar::$28 ← (byte~) mode_stdchar::$27 << (byte) 4 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 ] ) always clobbers reg byte a +Statement [853] (byte~) mode_stdchar::$29 ← (byte) mode_stdchar::cx#2 & (byte) $f [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ) always clobbers reg byte a +Statement [855] *((byte*) mode_stdchar::ch#2) ← (byte~) mode_stdchar::$30 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ) always clobbers reg byte y +Statement [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) always clobbers reg byte a reg byte y +Statement [869] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3) [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:33 [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y +Statement [872] *((byte*) print_char_cursor#17) ← (byte) print_str_lines::ch#0 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:33 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte y +Statement [878] (byte*~) print_char_cursor#100 ← (byte*) print_line_cursor#19 [ print_str_lines::str#0 print_char_cursor#100 print_line_cursor#19 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#0 print_char_cursor#100 print_line_cursor#19 ] ) always clobbers reg byte a +Statement [881] (byte*) print_line_cursor#19 ← (byte*) print_line_cursor#18 + (byte) $28 [ print_line_cursor#19 print_char_cursor#32 ] ( main:2::menu:9::print_str_lines:33::print_ln:877 [ print_str_lines::str#0 print_line_cursor#19 print_char_cursor#32 ] ) always clobbers reg byte a +Statement [882] if((byte*) print_line_cursor#19<(byte*) print_char_cursor#32) goto print_ln::@1 [ print_line_cursor#19 print_char_cursor#32 ] ( main:2::menu:9::print_str_lines:33::print_ln:877 [ print_str_lines::str#0 print_line_cursor#19 print_char_cursor#32 ] ) always clobbers reg byte a +Statement [889] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::menu:9::print_cls:31::memset:885 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [891] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::menu:9::print_cls:31::memset:885 [ memset::dst#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ menu::i#2 menu::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:3 [ menu::c#2 menu::c#1 ] : zp ZP_WORD:3 , +Potential registers zp ZP_WORD:3 [ menu::c#4 menu::c#1 ] : zp ZP_WORD:3 , Potential registers zp ZP_BYTE:5 [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] : zp ZP_BYTE:6 , reg byte x , Potential registers zp ZP_WORD:7 [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 ] : zp ZP_WORD:7 , @@ -20307,7 +20342,7 @@ Potential registers zp ZP_BYTE:91 [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] : Potential registers zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] : zp ZP_BYTE:92 , reg byte x , Potential registers zp ZP_BYTE:93 [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] : zp ZP_BYTE:93 , reg byte x , Potential registers zp ZP_WORD:94 [ mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 ] : zp ZP_WORD:94 , -Potential registers zp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] : zp ZP_BYTE:96 , reg byte x , +Potential registers zp ZP_BYTE:96 [ mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] : zp ZP_BYTE:96 , reg byte x , Potential registers zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] : zp ZP_BYTE:97 , reg byte x , Potential registers zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] : zp ZP_BYTE:98 , reg byte x , Potential registers zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] : zp ZP_BYTE:99 , reg byte x , @@ -20359,7 +20394,7 @@ Potential registers zp ZP_WORD:151 [ mode_stdchar::ch#2 mode_stdchar::ch#3 mode_ Potential registers zp ZP_WORD:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] : zp ZP_WORD:153 , Potential registers zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 ] : zp ZP_WORD:155 , Potential registers zp ZP_WORD:157 [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] : zp ZP_WORD:157 , -Potential registers zp ZP_WORD:159 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:159 , +Potential registers zp ZP_WORD:159 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:159 , Potential registers zp ZP_BYTE:161 [ keyboard_key_pressed::return#2 ] : zp ZP_BYTE:161 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:162 [ menu::$29 ] : zp ZP_BYTE:162 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:163 [ keyboard_key_pressed::return#24 ] : zp ZP_BYTE:163 , reg byte a , reg byte x , reg byte y , @@ -20501,7 +20536,7 @@ Uplift Scope [mode_stdchar] 2,002: zp ZP_BYTE:288 [ mode_stdchar::$25 ] 2,002: z Uplift Scope [mode_ecmchar] 2,002: zp ZP_BYTE:282 [ mode_ecmchar::$26 ] 2,002: zp ZP_BYTE:283 [ mode_ecmchar::$27 ] 2,002: zp ZP_BYTE:284 [ mode_ecmchar::$28 ] 2,002: zp ZP_BYTE:286 [ mode_ecmchar::$30 ] 2,002: zp ZP_BYTE:287 [ mode_ecmchar::$31 ] 1,865.5: zp ZP_BYTE:141 [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] 1,169.18: zp ZP_WORD:142 [ mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 ] 1,001: zp ZP_BYTE:285 [ mode_ecmchar::$29 ] 933: zp ZP_WORD:144 [ mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 ] 353.5: zp ZP_BYTE:139 [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] 308.93: zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] Uplift Scope [mode_mcchar] 2,002: zp ZP_BYTE:276 [ mode_mcchar::$26 ] 2,002: zp ZP_BYTE:277 [ mode_mcchar::$27 ] 2,002: zp ZP_BYTE:278 [ mode_mcchar::$28 ] 2,002: zp ZP_BYTE:280 [ mode_mcchar::$30 ] 2,002: zp ZP_BYTE:281 [ mode_mcchar::$31 ] 1,865.5: zp ZP_BYTE:134 [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] 1,169.18: zp ZP_WORD:135 [ mode_mcchar::col#2 mode_mcchar::col#3 mode_mcchar::col#1 ] 1,001: zp ZP_BYTE:279 [ mode_mcchar::$29 ] 933: zp ZP_WORD:137 [ mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 ] 353.5: zp ZP_BYTE:132 [ mode_mcchar::i#2 mode_mcchar::i#1 ] 308.93: zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] Uplift Scope [bitmap_plot] 10,012: zp ZP_BYTE:104 [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] 5,006.5: zp ZP_BYTE:103 [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] 4: zp ZP_WORD:261 [ bitmap_plot::plotter_y#0 ] 4: zp ZP_BYTE:265 [ bitmap_plot::$1 ] 2: zp ZP_WORD:259 [ bitmap_plot::plotter_x#0 ] 1: zp ZP_WORD:263 [ bitmap_plot::plotter#0 ] -Uplift Scope [mode_stdbitmap] 2,002: zp ZP_BYTE:243 [ mode_stdbitmap::$22 ] 2,002: zp ZP_BYTE:246 [ mode_stdbitmap::$25 ] 2,002: zp ZP_BYTE:247 [ mode_stdbitmap::$26 ] 1,876.88: zp ZP_BYTE:93 [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] 1,501.5: zp ZP_BYTE:244 [ mode_stdbitmap::col#0 ] 1,066.03: zp ZP_WORD:94 [ mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 ] 1,001: zp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] 353.5: zp ZP_BYTE:91 [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] 303: zp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] 260.86: zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] +Uplift Scope [mode_stdbitmap] 2,002: zp ZP_BYTE:243 [ mode_stdbitmap::$22 ] 2,002: zp ZP_BYTE:246 [ mode_stdbitmap::$25 ] 2,002: zp ZP_BYTE:247 [ mode_stdbitmap::$26 ] 1,876.88: zp ZP_BYTE:93 [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] 1,501.5: zp ZP_BYTE:244 [ mode_stdbitmap::col#0 ] 1,066.03: zp ZP_WORD:94 [ mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 ] 1,001: zp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] 353.5: zp ZP_BYTE:91 [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] 260.86: zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] 252.5: zp ZP_BYTE:96 [ mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] Uplift Scope [mode_8bppchunkybmm] 3,575.14: zp ZP_BYTE:9 [ mode_8bppchunkybmm::gfxbCpuBank#4 mode_8bppchunkybmm::gfxbCpuBank#7 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::gfxbCpuBank#2 ] 2,925.35: zp ZP_WORD:10 [ mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 ] 2,002: zp ZP_BYTE:187 [ mode_8bppchunkybmm::c#0 ] 1,801.8: zp ZP_WORD:7 [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 ] 1,001: zp ZP_WORD:185 [ mode_8bppchunkybmm::$26 ] 353.5: zp ZP_BYTE:5 [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] 244.04: zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] Uplift Scope [bitmap_line_xdyi] 4,742.47: zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] 2,579.29: zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] 2,002: zp ZP_BYTE:258 [ bitmap_line_xdyi::$6 ] 1,131.22: zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] 147.29: zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] 79.93: zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] 74.45: zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] Uplift Scope [bitmap_line_xdyd] 4,742.47: zp ZP_BYTE:116 [ 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 ] 2,579.29: zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] 2,002: zp ZP_BYTE:267 [ bitmap_line_xdyd::$6 ] 1,131.22: zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] 147.29: zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] 79.93: zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] 74.45: zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] @@ -20512,11 +20547,11 @@ Uplift Scope [mode_hicolecmchar] 2,002: zp ZP_BYTE:235 [ mode_hicolecmchar::$26 Uplift Scope [mode_hicolmcchar] 2,002: zp ZP_BYTE:231 [ mode_hicolmcchar::$26 ] 2,002: zp ZP_BYTE:233 [ mode_hicolmcchar::$28 ] 1,835.17: zp ZP_BYTE:72 [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] 1,019.76: zp ZP_WORD:73 [ mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 ] 1,010.6: zp ZP_WORD:75 [ mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 ] 1,001: zp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] 1,001: zp ZP_BYTE:234 [ mode_hicolmcchar::v#0 ] 353.5: zp ZP_BYTE:70 [ mode_hicolmcchar::i#2 mode_hicolmcchar::i#1 ] 251.75: zp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] Uplift Scope [] 3,698: zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 ] 2,653.58: zp ZP_WORD:157 [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] 149.86: zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] Uplift Scope [bitmap_clear] 2,180.6: zp ZP_WORD:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] 2,168.83: zp ZP_BYTE:126 [ bitmap_clear::x#2 bitmap_clear::x#1 ] 185.17: zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] 2: zp ZP_WORD:269 [ bitmap_clear::bitmap#0 ] -Uplift Scope [menu] 353.5: zp ZP_BYTE:2 [ menu::i#2 menu::i#1 ] 336.67: zp ZP_WORD:3 [ menu::c#2 menu::c#1 ] 202: zp ZP_BYTE:162 [ menu::$29 ] 202: zp ZP_BYTE:164 [ menu::$33 ] 202: zp ZP_BYTE:166 [ menu::$37 ] 202: zp ZP_BYTE:168 [ menu::$41 ] 202: zp ZP_BYTE:170 [ menu::$45 ] 202: zp ZP_BYTE:172 [ menu::$49 ] 202: zp ZP_BYTE:174 [ menu::$53 ] 202: zp ZP_BYTE:176 [ menu::$57 ] 202: zp ZP_BYTE:178 [ menu::$61 ] 202: zp ZP_BYTE:180 [ menu::$65 ] 202: zp ZP_BYTE:182 [ menu::$69 ] 202: zp ZP_BYTE:184 [ menu::$73 ] +Uplift Scope [menu] 353.5: zp ZP_BYTE:2 [ menu::i#2 menu::i#1 ] 303: zp ZP_WORD:3 [ menu::c#4 menu::c#1 ] 202: zp ZP_BYTE:162 [ menu::$29 ] 202: zp ZP_BYTE:164 [ menu::$33 ] 202: zp ZP_BYTE:166 [ menu::$37 ] 202: zp ZP_BYTE:168 [ menu::$41 ] 202: zp ZP_BYTE:170 [ menu::$45 ] 202: zp ZP_BYTE:172 [ menu::$49 ] 202: zp ZP_BYTE:174 [ menu::$53 ] 202: zp ZP_BYTE:176 [ menu::$57 ] 202: zp ZP_BYTE:178 [ menu::$61 ] 202: zp ZP_BYTE:180 [ menu::$65 ] 202: zp ZP_BYTE:182 [ menu::$69 ] 202: zp ZP_BYTE:184 [ menu::$73 ] Uplift Scope [dtvSetCpuBankSegment1] 3,005: zp ZP_BYTE:15 [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] Uplift Scope [print_str_lines] 1,937.17: zp ZP_WORD:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] 667.33: zp ZP_BYTE:294 [ print_str_lines::ch#0 ] Uplift Scope [bitmap_init] 366.12: zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 228.93: zp ZP_BYTE:128 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 218.83: zp ZP_BYTE:127 [ bitmap_init::x#2 bitmap_init::x#1 ] 202: zp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] 202: zp ZP_BYTE:271 [ bitmap_init::$0 ] 202: zp ZP_BYTE:273 [ bitmap_init::$7 ] 202: zp ZP_BYTE:274 [ bitmap_init::$8 ] 202: zp ZP_BYTE:275 [ bitmap_init::$9 ] 50.5: zp ZP_BYTE:272 [ bitmap_init::$10 ] -Uplift Scope [memset] 336.67: zp ZP_WORD:159 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [memset] 303: zp ZP_WORD:159 [ memset::dst#4 memset::dst#1 ] Uplift Scope [bitmap_line] 6.25: zp ZP_BYTE:251 [ bitmap_line::y1#0 ] 5.95: zp ZP_BYTE:250 [ bitmap_line::y0#0 ] 5.41: zp ZP_BYTE:249 [ bitmap_line::x1#0 ] 5.17: zp ZP_BYTE:248 [ bitmap_line::x0#0 ] 0.89: zp ZP_BYTE:253 [ bitmap_line::yd#2 ] 0.89: zp ZP_BYTE:254 [ bitmap_line::yd#1 ] 0.89: zp ZP_BYTE:256 [ bitmap_line::yd#10 ] 0.89: zp ZP_BYTE:257 [ bitmap_line::yd#11 ] 0.7: zp ZP_BYTE:252 [ bitmap_line::xd#2 ] 0.7: zp ZP_BYTE:255 [ bitmap_line::xd#1 ] Uplift Scope [keyboard_matrix_read] 4: zp ZP_BYTE:206 [ keyboard_matrix_read::rowid#0 ] 4: zp ZP_BYTE:207 [ keyboard_matrix_read::return#2 ] 1.33: zp ZP_BYTE:210 [ keyboard_matrix_read::return#0 ] Uplift Scope [RADIX] @@ -20525,400 +20560,400 @@ Uplift Scope [print_cls] Uplift Scope [print_set_screen] Uplift Scope [main] -Uplifting [mode_8bpppixelcell] best 3629720 combination reg byte a [ mode_8bpppixelcell::c#2 mode_8bpppixelcell::c#3 ] reg byte a [ mode_8bpppixelcell::$20 ] zp ZP_BYTE:29 [ mode_8bpppixelcell::cp#2 mode_8bpppixelcell::cp#1 ] zp ZP_BYTE:25 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] zp ZP_WORD:26 [ mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 ] zp ZP_BYTE:28 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] zp ZP_BYTE:211 [ mode_8bpppixelcell::$14 ] zp ZP_BYTE:213 [ mode_8bpppixelcell::$16 ] zp ZP_BYTE:214 [ mode_8bpppixelcell::$17 ] zp ZP_BYTE:18 [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ] zp ZP_WORD:22 [ mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 ] zp ZP_BYTE:24 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] zp ZP_WORD:19 [ mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::gfxa#3 mode_8bpppixelcell::gfxa#1 ] zp ZP_BYTE:212 [ mode_8bpppixelcell::$15 ] zp ZP_BYTE:16 [ mode_8bpppixelcell::i#2 mode_8bpppixelcell::i#1 ] zp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] zp ZP_BYTE:21 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] +Uplifting [mode_8bpppixelcell] best 3630620 combination reg byte a [ mode_8bpppixelcell::c#2 mode_8bpppixelcell::c#3 ] reg byte a [ mode_8bpppixelcell::$20 ] zp ZP_BYTE:29 [ mode_8bpppixelcell::cp#2 mode_8bpppixelcell::cp#1 ] zp ZP_BYTE:25 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] zp ZP_WORD:26 [ mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 ] zp ZP_BYTE:28 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] zp ZP_BYTE:211 [ mode_8bpppixelcell::$14 ] zp ZP_BYTE:213 [ mode_8bpppixelcell::$16 ] zp ZP_BYTE:214 [ mode_8bpppixelcell::$17 ] zp ZP_BYTE:18 [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ] zp ZP_WORD:22 [ mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 ] zp ZP_BYTE:24 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] zp ZP_WORD:19 [ mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::gfxa#3 mode_8bpppixelcell::gfxa#1 ] zp ZP_BYTE:212 [ mode_8bpppixelcell::$15 ] zp ZP_BYTE:16 [ mode_8bpppixelcell::i#2 mode_8bpppixelcell::i#1 ] zp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] zp ZP_BYTE:21 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] Limited combination testing to 10 combinations of 3538944 possible. -Uplifting [mode_ctrl] best 3601820 combination reg byte x [ mode_ctrl::ctrl#14 mode_ctrl::ctrl#22 mode_ctrl::ctrl#6 mode_ctrl::ctrl#13 mode_ctrl::ctrl#5 mode_ctrl::ctrl#12 mode_ctrl::ctrl#4 mode_ctrl::ctrl#11 mode_ctrl::ctrl#3 mode_ctrl::ctrl#10 mode_ctrl::ctrl#2 mode_ctrl::ctrl#17 mode_ctrl::ctrl#1 mode_ctrl::ctrl#0 ] reg byte a [ mode_ctrl::$1 ] zp ZP_BYTE:191 [ mode_ctrl::$4 ] zp ZP_BYTE:193 [ mode_ctrl::$8 ] zp ZP_BYTE:195 [ mode_ctrl::$12 ] zp ZP_BYTE:197 [ mode_ctrl::$16 ] zp ZP_BYTE:199 [ mode_ctrl::$20 ] zp ZP_BYTE:201 [ mode_ctrl::$24 ] zp ZP_BYTE:203 [ mode_ctrl::$28 ] +Uplifting [mode_ctrl] best 3602720 combination reg byte x [ mode_ctrl::ctrl#14 mode_ctrl::ctrl#22 mode_ctrl::ctrl#6 mode_ctrl::ctrl#13 mode_ctrl::ctrl#5 mode_ctrl::ctrl#12 mode_ctrl::ctrl#4 mode_ctrl::ctrl#11 mode_ctrl::ctrl#3 mode_ctrl::ctrl#10 mode_ctrl::ctrl#2 mode_ctrl::ctrl#17 mode_ctrl::ctrl#1 mode_ctrl::ctrl#0 ] reg byte a [ mode_ctrl::$1 ] zp ZP_BYTE:191 [ mode_ctrl::$4 ] zp ZP_BYTE:193 [ mode_ctrl::$8 ] zp ZP_BYTE:195 [ mode_ctrl::$12 ] zp ZP_BYTE:197 [ mode_ctrl::$16 ] zp ZP_BYTE:199 [ mode_ctrl::$20 ] zp ZP_BYTE:201 [ mode_ctrl::$24 ] zp ZP_BYTE:203 [ mode_ctrl::$28 ] Limited combination testing to 10 combinations of 196608 possible. -Uplifting [mode_twoplanebitmap] best 3586820 combination zp ZP_WORD:50 [ mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 ] zp ZP_WORD:54 [ mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 ] reg byte x [ mode_twoplanebitmap::bx#2 mode_twoplanebitmap::bx#1 ] reg byte a [ mode_twoplanebitmap::$16 ] zp ZP_BYTE:222 [ mode_twoplanebitmap::$18 ] zp ZP_BYTE:223 [ mode_twoplanebitmap::$19 ] zp ZP_BYTE:224 [ mode_twoplanebitmap::$22 ] zp ZP_BYTE:46 [ mode_twoplanebitmap::cx#2 mode_twoplanebitmap::cx#1 ] zp ZP_BYTE:52 [ mode_twoplanebitmap::ax#2 mode_twoplanebitmap::ax#1 ] zp ZP_WORD:47 [ mode_twoplanebitmap::col#2 mode_twoplanebitmap::col#3 mode_twoplanebitmap::col#1 ] zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 ] zp ZP_BYTE:44 [ mode_twoplanebitmap::i#2 mode_twoplanebitmap::i#1 ] zp ZP_BYTE:45 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 ] zp ZP_BYTE:49 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 ] zp ZP_BYTE:53 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] +Uplifting [mode_twoplanebitmap] best 3587720 combination zp ZP_WORD:50 [ mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 ] zp ZP_WORD:54 [ mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 ] reg byte x [ mode_twoplanebitmap::bx#2 mode_twoplanebitmap::bx#1 ] reg byte a [ mode_twoplanebitmap::$16 ] zp ZP_BYTE:222 [ mode_twoplanebitmap::$18 ] zp ZP_BYTE:223 [ mode_twoplanebitmap::$19 ] zp ZP_BYTE:224 [ mode_twoplanebitmap::$22 ] zp ZP_BYTE:46 [ mode_twoplanebitmap::cx#2 mode_twoplanebitmap::cx#1 ] zp ZP_BYTE:52 [ mode_twoplanebitmap::ax#2 mode_twoplanebitmap::ax#1 ] zp ZP_WORD:47 [ mode_twoplanebitmap::col#2 mode_twoplanebitmap::col#3 mode_twoplanebitmap::col#1 ] zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 ] zp ZP_BYTE:44 [ mode_twoplanebitmap::i#2 mode_twoplanebitmap::i#1 ] zp ZP_BYTE:45 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 ] zp ZP_BYTE:49 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 ] zp ZP_BYTE:53 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] Limited combination testing to 10 combinations of 196608 possible. -Uplifting [mode_sixsfred2] best 3571820 combination zp ZP_WORD:67 [ mode_sixsfred2::gfxb#2 mode_sixsfred2::gfxb#3 mode_sixsfred2::gfxb#1 ] reg byte x [ mode_sixsfred2::bx#2 mode_sixsfred2::bx#1 ] reg byte a [ mode_sixsfred2::$15 ] zp ZP_BYTE:227 [ mode_sixsfred2::$17 ] zp ZP_BYTE:228 [ mode_sixsfred2::$18 ] zp ZP_BYTE:229 [ mode_sixsfred2::$21 ] zp ZP_BYTE:230 [ mode_sixsfred2::row#0 ] zp ZP_BYTE:59 [ mode_sixsfred2::cx#2 mode_sixsfred2::cx#1 ] zp ZP_BYTE:65 [ mode_sixsfred2::ax#2 mode_sixsfred2::ax#1 ] zp ZP_WORD:63 [ mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 ] zp ZP_WORD:60 [ mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 ] zp ZP_BYTE:226 [ mode_sixsfred2::$16 ] zp ZP_BYTE:57 [ mode_sixsfred2::i#2 mode_sixsfred2::i#1 ] zp ZP_BYTE:62 [ mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 ] zp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 ] zp ZP_BYTE:66 [ mode_sixsfred2::by#4 mode_sixsfred2::by#1 ] +Uplifting [mode_sixsfred2] best 3572720 combination zp ZP_WORD:67 [ mode_sixsfred2::gfxb#2 mode_sixsfred2::gfxb#3 mode_sixsfred2::gfxb#1 ] reg byte x [ mode_sixsfred2::bx#2 mode_sixsfred2::bx#1 ] reg byte a [ mode_sixsfred2::$15 ] zp ZP_BYTE:227 [ mode_sixsfred2::$17 ] zp ZP_BYTE:228 [ mode_sixsfred2::$18 ] zp ZP_BYTE:229 [ mode_sixsfred2::$21 ] zp ZP_BYTE:230 [ mode_sixsfred2::row#0 ] zp ZP_BYTE:59 [ mode_sixsfred2::cx#2 mode_sixsfred2::cx#1 ] zp ZP_BYTE:65 [ mode_sixsfred2::ax#2 mode_sixsfred2::ax#1 ] zp ZP_WORD:63 [ mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 ] zp ZP_WORD:60 [ mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 ] zp ZP_BYTE:226 [ mode_sixsfred2::$16 ] zp ZP_BYTE:57 [ mode_sixsfred2::i#2 mode_sixsfred2::i#1 ] zp ZP_BYTE:62 [ mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 ] zp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 ] zp ZP_BYTE:66 [ mode_sixsfred2::by#4 mode_sixsfred2::by#1 ] Limited combination testing to 10 combinations of 786432 possible. -Uplifting [mode_sixsfred] best 3546820 combination zp ZP_WORD:41 [ mode_sixsfred::gfxb#2 mode_sixsfred::gfxb#3 mode_sixsfred::gfxb#1 ] reg byte x [ mode_sixsfred::bx#2 mode_sixsfred::bx#1 ] reg byte x [ mode_sixsfred::cx#2 mode_sixsfred::cx#1 ] reg byte a [ mode_sixsfred::$17 ] zp ZP_BYTE:217 [ mode_sixsfred::$18 ] zp ZP_BYTE:218 [ mode_sixsfred::$21 ] zp ZP_BYTE:219 [ mode_sixsfred::row#0 ] zp ZP_BYTE:39 [ mode_sixsfred::ax#2 mode_sixsfred::ax#1 ] zp ZP_WORD:34 [ mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 ] zp ZP_WORD:37 [ mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 ] zp ZP_BYTE:31 [ mode_sixsfred::i#2 mode_sixsfred::i#1 ] zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] zp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 ] zp ZP_BYTE:40 [ mode_sixsfred::by#4 mode_sixsfred::by#1 ] +Uplifting [mode_sixsfred] best 3547720 combination zp ZP_WORD:41 [ mode_sixsfred::gfxb#2 mode_sixsfred::gfxb#3 mode_sixsfred::gfxb#1 ] reg byte x [ mode_sixsfred::bx#2 mode_sixsfred::bx#1 ] reg byte x [ mode_sixsfred::cx#2 mode_sixsfred::cx#1 ] reg byte a [ mode_sixsfred::$17 ] zp ZP_BYTE:217 [ mode_sixsfred::$18 ] zp ZP_BYTE:218 [ mode_sixsfred::$21 ] zp ZP_BYTE:219 [ mode_sixsfred::row#0 ] zp ZP_BYTE:39 [ mode_sixsfred::ax#2 mode_sixsfred::ax#1 ] zp ZP_WORD:34 [ mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 ] zp ZP_WORD:37 [ mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 ] zp ZP_BYTE:31 [ mode_sixsfred::i#2 mode_sixsfred::i#1 ] zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] zp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 ] zp ZP_BYTE:40 [ mode_sixsfred::by#4 mode_sixsfred::by#1 ] Limited combination testing to 10 combinations of 65536 possible. -Uplifting [mode_stdchar] best 3534820 combination reg byte a [ mode_stdchar::$25 ] reg byte a [ mode_stdchar::$26 ] zp ZP_BYTE:290 [ mode_stdchar::$27 ] zp ZP_BYTE:292 [ mode_stdchar::$29 ] zp ZP_BYTE:293 [ mode_stdchar::$30 ] zp ZP_BYTE:148 [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] zp ZP_WORD:149 [ mode_stdchar::col#2 mode_stdchar::col#3 mode_stdchar::col#1 ] zp ZP_BYTE:291 [ mode_stdchar::$28 ] zp ZP_WORD:151 [ mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 ] zp ZP_BYTE:146 [ mode_stdchar::i#2 mode_stdchar::i#1 ] zp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] +Uplifting [mode_stdchar] best 3535720 combination reg byte a [ mode_stdchar::$25 ] reg byte a [ mode_stdchar::$26 ] zp ZP_BYTE:290 [ mode_stdchar::$27 ] zp ZP_BYTE:292 [ mode_stdchar::$29 ] zp ZP_BYTE:293 [ mode_stdchar::$30 ] zp ZP_BYTE:148 [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] zp ZP_WORD:149 [ mode_stdchar::col#2 mode_stdchar::col#3 mode_stdchar::col#1 ] zp ZP_BYTE:291 [ mode_stdchar::$28 ] zp ZP_WORD:151 [ mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 ] zp ZP_BYTE:146 [ mode_stdchar::i#2 mode_stdchar::i#1 ] zp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] Limited combination testing to 10 combinations of 36864 possible. -Uplifting [mode_ecmchar] best 3522820 combination reg byte a [ mode_ecmchar::$26 ] reg byte a [ mode_ecmchar::$27 ] zp ZP_BYTE:284 [ mode_ecmchar::$28 ] zp ZP_BYTE:286 [ mode_ecmchar::$30 ] zp ZP_BYTE:287 [ mode_ecmchar::$31 ] zp ZP_BYTE:141 [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] zp ZP_WORD:142 [ mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 ] zp ZP_BYTE:285 [ mode_ecmchar::$29 ] zp ZP_WORD:144 [ mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 ] zp ZP_BYTE:139 [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] +Uplifting [mode_ecmchar] best 3523720 combination reg byte a [ mode_ecmchar::$26 ] reg byte a [ mode_ecmchar::$27 ] zp ZP_BYTE:284 [ mode_ecmchar::$28 ] zp ZP_BYTE:286 [ mode_ecmchar::$30 ] zp ZP_BYTE:287 [ mode_ecmchar::$31 ] zp ZP_BYTE:141 [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] zp ZP_WORD:142 [ mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 ] zp ZP_BYTE:285 [ mode_ecmchar::$29 ] zp ZP_WORD:144 [ mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 ] zp ZP_BYTE:139 [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] Limited combination testing to 10 combinations of 36864 possible. -Uplifting [mode_mcchar] best 3510820 combination reg byte a [ mode_mcchar::$26 ] reg byte a [ mode_mcchar::$27 ] zp ZP_BYTE:278 [ mode_mcchar::$28 ] zp ZP_BYTE:280 [ mode_mcchar::$30 ] zp ZP_BYTE:281 [ mode_mcchar::$31 ] zp ZP_BYTE:134 [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] zp ZP_WORD:135 [ mode_mcchar::col#2 mode_mcchar::col#3 mode_mcchar::col#1 ] zp ZP_BYTE:279 [ mode_mcchar::$29 ] zp ZP_WORD:137 [ mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 ] zp ZP_BYTE:132 [ mode_mcchar::i#2 mode_mcchar::i#1 ] zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] +Uplifting [mode_mcchar] best 3511720 combination reg byte a [ mode_mcchar::$26 ] reg byte a [ mode_mcchar::$27 ] zp ZP_BYTE:278 [ mode_mcchar::$28 ] zp ZP_BYTE:280 [ mode_mcchar::$30 ] zp ZP_BYTE:281 [ mode_mcchar::$31 ] zp ZP_BYTE:134 [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] zp ZP_WORD:135 [ mode_mcchar::col#2 mode_mcchar::col#3 mode_mcchar::col#1 ] zp ZP_BYTE:279 [ mode_mcchar::$29 ] zp ZP_WORD:137 [ mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 ] zp ZP_BYTE:132 [ mode_mcchar::i#2 mode_mcchar::i#1 ] zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] Limited combination testing to 10 combinations of 36864 possible. -Uplifting [bitmap_plot] best 3486811 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp ZP_WORD:261 [ bitmap_plot::plotter_y#0 ] zp ZP_BYTE:265 [ bitmap_plot::$1 ] zp ZP_WORD:259 [ bitmap_plot::plotter_x#0 ] zp ZP_WORD:263 [ bitmap_plot::plotter#0 ] +Uplifting [bitmap_plot] best 3487711 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp ZP_WORD:261 [ bitmap_plot::plotter_y#0 ] zp ZP_BYTE:265 [ bitmap_plot::$1 ] zp ZP_WORD:259 [ bitmap_plot::plotter_x#0 ] zp ZP_WORD:263 [ bitmap_plot::plotter#0 ] Limited combination testing to 10 combinations of 36 possible. -Uplifting [mode_stdbitmap] best 3474811 combination reg byte a [ mode_stdbitmap::$22 ] reg byte a [ mode_stdbitmap::$25 ] zp ZP_BYTE:247 [ mode_stdbitmap::$26 ] zp ZP_BYTE:93 [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] zp ZP_BYTE:244 [ mode_stdbitmap::col#0 ] zp ZP_WORD:94 [ mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 ] zp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] zp ZP_BYTE:91 [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] zp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] +Uplifting [mode_stdbitmap] best 3475711 combination reg byte a [ mode_stdbitmap::$22 ] reg byte a [ mode_stdbitmap::$25 ] zp ZP_BYTE:247 [ mode_stdbitmap::$26 ] zp ZP_BYTE:93 [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] zp ZP_BYTE:244 [ mode_stdbitmap::col#0 ] zp ZP_WORD:94 [ mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 ] zp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] zp ZP_BYTE:91 [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] zp ZP_BYTE:96 [ mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] Limited combination testing to 10 combinations of 13824 possible. -Uplifting [mode_8bppchunkybmm] best 3462511 combination reg byte x [ mode_8bppchunkybmm::gfxbCpuBank#4 mode_8bppchunkybmm::gfxbCpuBank#7 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::gfxbCpuBank#2 ] zp ZP_WORD:10 [ mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 ] reg byte a [ mode_8bppchunkybmm::c#0 ] zp ZP_WORD:7 [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 ] zp ZP_WORD:185 [ mode_8bppchunkybmm::$26 ] zp ZP_BYTE:5 [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] +Uplifting [mode_8bppchunkybmm] best 3463411 combination reg byte x [ mode_8bppchunkybmm::gfxbCpuBank#4 mode_8bppchunkybmm::gfxbCpuBank#7 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::gfxbCpuBank#2 ] zp ZP_WORD:10 [ mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 ] reg byte a [ mode_8bppchunkybmm::c#0 ] zp ZP_WORD:7 [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 ] zp ZP_WORD:185 [ mode_8bppchunkybmm::$26 ] zp ZP_BYTE:5 [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] Limited combination testing to 10 combinations of 64 possible. -Uplifting [bitmap_line_xdyi] best 3456511 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] reg byte x [ bitmap_line_xdyi::$6 ] zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] +Uplifting [bitmap_line_xdyi] best 3457411 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] reg byte x [ bitmap_line_xdyi::$6 ] zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [bitmap_line_xdyd] best 3450511 combination zp ZP_BYTE:116 [ 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 ] zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] reg byte x [ bitmap_line_xdyd::$6 ] zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] +Uplifting [bitmap_line_xdyd] best 3451411 combination zp ZP_BYTE:116 [ 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 ] zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] reg byte x [ bitmap_line_xdyd::$6 ] zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [bitmap_line_ydxi] best 3440505 combination zp ZP_BYTE:110 [ 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 ] reg byte x [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] reg byte a [ bitmap_line_ydxi::$6 ] zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] +Uplifting [bitmap_line_ydxi] best 3441405 combination zp ZP_BYTE:110 [ 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 ] reg byte x [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] reg byte a [ bitmap_line_ydxi::$6 ] zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [bitmap_line_ydxd] best 3430499 combination zp ZP_BYTE:122 [ 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_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] reg byte a [ bitmap_line_ydxd::$6 ] zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] +Uplifting [bitmap_line_ydxd] best 3431399 combination zp ZP_BYTE:122 [ 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_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] reg byte a [ bitmap_line_ydxd::$6 ] zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [mode_hicolstdchar] best 3418499 combination reg byte a [ mode_hicolstdchar::$25 ] reg byte a [ mode_hicolstdchar::$27 ] zp ZP_BYTE:86 [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] zp ZP_WORD:87 [ mode_hicolstdchar::col#2 mode_hicolstdchar::col#3 mode_hicolstdchar::col#1 ] zp ZP_WORD:89 [ mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 ] zp ZP_BYTE:240 [ mode_hicolstdchar::$26 ] zp ZP_BYTE:242 [ mode_hicolstdchar::v#0 ] zp ZP_BYTE:84 [ mode_hicolstdchar::i#2 mode_hicolstdchar::i#1 ] zp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] +Uplifting [mode_hicolstdchar] best 3419399 combination reg byte a [ mode_hicolstdchar::$25 ] reg byte a [ mode_hicolstdchar::$27 ] zp ZP_BYTE:86 [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] zp ZP_WORD:87 [ mode_hicolstdchar::col#2 mode_hicolstdchar::col#3 mode_hicolstdchar::col#1 ] zp ZP_WORD:89 [ mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 ] zp ZP_BYTE:240 [ mode_hicolstdchar::$26 ] zp ZP_BYTE:242 [ mode_hicolstdchar::v#0 ] zp ZP_BYTE:84 [ mode_hicolstdchar::i#2 mode_hicolstdchar::i#1 ] zp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] Limited combination testing to 10 combinations of 2304 possible. -Uplifting [mode_hicolecmchar] best 3406499 combination reg byte a [ mode_hicolecmchar::$26 ] reg byte a [ mode_hicolecmchar::$28 ] zp ZP_BYTE:79 [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] zp ZP_WORD:80 [ mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 ] zp ZP_WORD:82 [ mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 ] zp ZP_BYTE:236 [ mode_hicolecmchar::$27 ] zp ZP_BYTE:238 [ mode_hicolecmchar::v#0 ] zp ZP_BYTE:77 [ mode_hicolecmchar::i#2 mode_hicolecmchar::i#1 ] zp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] +Uplifting [mode_hicolecmchar] best 3407399 combination reg byte a [ mode_hicolecmchar::$26 ] reg byte a [ mode_hicolecmchar::$28 ] zp ZP_BYTE:79 [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] zp ZP_WORD:80 [ mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 ] zp ZP_WORD:82 [ mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 ] zp ZP_BYTE:236 [ mode_hicolecmchar::$27 ] zp ZP_BYTE:238 [ mode_hicolecmchar::v#0 ] zp ZP_BYTE:77 [ mode_hicolecmchar::i#2 mode_hicolecmchar::i#1 ] zp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] Limited combination testing to 10 combinations of 2304 possible. -Uplifting [mode_hicolmcchar] best 3394499 combination reg byte a [ mode_hicolmcchar::$26 ] reg byte a [ mode_hicolmcchar::$28 ] zp ZP_BYTE:72 [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] zp ZP_WORD:73 [ mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 ] zp ZP_WORD:75 [ mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 ] zp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] zp ZP_BYTE:234 [ mode_hicolmcchar::v#0 ] zp ZP_BYTE:70 [ mode_hicolmcchar::i#2 mode_hicolmcchar::i#1 ] zp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] +Uplifting [mode_hicolmcchar] best 3395399 combination reg byte a [ mode_hicolmcchar::$26 ] reg byte a [ mode_hicolmcchar::$28 ] zp ZP_BYTE:72 [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] zp ZP_WORD:73 [ mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 ] zp ZP_WORD:75 [ mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 ] zp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] zp ZP_BYTE:234 [ mode_hicolmcchar::v#0 ] zp ZP_BYTE:70 [ mode_hicolmcchar::i#2 mode_hicolmcchar::i#1 ] zp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] Limited combination testing to 10 combinations of 2304 possible. -Uplifting [] best 3394499 combination zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 ] zp ZP_WORD:157 [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] -Uplifting [bitmap_clear] best 3385499 combination zp ZP_WORD:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:269 [ bitmap_clear::bitmap#0 ] -Uplifting [menu] best 3383699 combination reg byte x [ menu::i#2 menu::i#1 ] zp ZP_WORD:3 [ menu::c#2 menu::c#1 ] reg byte a [ menu::$29 ] zp ZP_BYTE:164 [ menu::$33 ] zp ZP_BYTE:166 [ menu::$37 ] zp ZP_BYTE:168 [ menu::$41 ] zp ZP_BYTE:170 [ menu::$45 ] zp ZP_BYTE:172 [ menu::$49 ] zp ZP_BYTE:174 [ menu::$53 ] zp ZP_BYTE:176 [ menu::$57 ] zp ZP_BYTE:178 [ menu::$61 ] zp ZP_BYTE:180 [ menu::$65 ] zp ZP_BYTE:182 [ menu::$69 ] zp ZP_BYTE:184 [ menu::$73 ] +Uplifting [] best 3395399 combination zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 ] zp ZP_WORD:157 [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] +Uplifting [bitmap_clear] best 3386399 combination zp ZP_WORD:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:269 [ bitmap_clear::bitmap#0 ] +Uplifting [menu] best 3384599 combination reg byte x [ menu::i#2 menu::i#1 ] zp ZP_WORD:3 [ menu::c#4 menu::c#1 ] reg byte a [ menu::$29 ] zp ZP_BYTE:164 [ menu::$33 ] zp ZP_BYTE:166 [ menu::$37 ] zp ZP_BYTE:168 [ menu::$41 ] zp ZP_BYTE:170 [ menu::$45 ] zp ZP_BYTE:172 [ menu::$49 ] zp ZP_BYTE:174 [ menu::$53 ] zp ZP_BYTE:176 [ menu::$57 ] zp ZP_BYTE:178 [ menu::$61 ] zp ZP_BYTE:180 [ menu::$65 ] zp ZP_BYTE:182 [ menu::$69 ] zp ZP_BYTE:184 [ menu::$73 ] Limited combination testing to 10 combinations of 50331648 possible. -Uplifting [dtvSetCpuBankSegment1] best 3382690 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] -Uplifting [print_str_lines] best 3370690 combination zp ZP_WORD:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] reg byte a [ print_str_lines::ch#0 ] -Uplifting [bitmap_init] best 3367690 combination zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] zp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] zp ZP_BYTE:271 [ bitmap_init::$0 ] zp ZP_BYTE:273 [ bitmap_init::$7 ] zp ZP_BYTE:274 [ bitmap_init::$8 ] zp ZP_BYTE:275 [ bitmap_init::$9 ] zp ZP_BYTE:272 [ bitmap_init::$10 ] +Uplifting [dtvSetCpuBankSegment1] best 3383590 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] +Uplifting [print_str_lines] best 3371590 combination zp ZP_WORD:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] reg byte a [ print_str_lines::ch#0 ] +Uplifting [bitmap_init] best 3368590 combination zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] zp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] zp ZP_BYTE:271 [ bitmap_init::$0 ] zp ZP_BYTE:273 [ bitmap_init::$7 ] zp ZP_BYTE:274 [ bitmap_init::$8 ] zp ZP_BYTE:275 [ bitmap_init::$9 ] zp ZP_BYTE:272 [ bitmap_init::$10 ] Limited combination testing to 10 combinations of 34560 possible. -Uplifting [memset] best 3367690 combination zp ZP_WORD:159 [ memset::dst#2 memset::dst#1 ] -Uplifting [bitmap_line] best 3367374 combination zp ZP_BYTE:251 [ bitmap_line::y1#0 ] zp ZP_BYTE:250 [ bitmap_line::y0#0 ] reg byte x [ bitmap_line::x1#0 ] zp ZP_BYTE:248 [ bitmap_line::x0#0 ] zp ZP_BYTE:253 [ bitmap_line::yd#2 ] zp ZP_BYTE:254 [ bitmap_line::yd#1 ] zp ZP_BYTE:256 [ bitmap_line::yd#10 ] zp ZP_BYTE:257 [ bitmap_line::yd#11 ] zp ZP_BYTE:252 [ bitmap_line::xd#2 ] zp ZP_BYTE:255 [ bitmap_line::xd#1 ] +Uplifting [memset] best 3368590 combination zp ZP_WORD:159 [ memset::dst#4 memset::dst#1 ] +Uplifting [bitmap_line] best 3368274 combination zp ZP_BYTE:251 [ bitmap_line::y1#0 ] zp ZP_BYTE:250 [ bitmap_line::y0#0 ] reg byte x [ bitmap_line::x1#0 ] zp ZP_BYTE:248 [ bitmap_line::x0#0 ] zp ZP_BYTE:253 [ bitmap_line::yd#2 ] zp ZP_BYTE:254 [ bitmap_line::yd#1 ] zp ZP_BYTE:256 [ bitmap_line::yd#10 ] zp ZP_BYTE:257 [ bitmap_line::yd#11 ] zp ZP_BYTE:252 [ bitmap_line::xd#2 ] zp ZP_BYTE:255 [ bitmap_line::xd#1 ] Limited combination testing to 10 combinations of 186624 possible. -Uplifting [keyboard_matrix_read] best 3367362 combination reg byte y [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#2 ] zp ZP_BYTE:210 [ keyboard_matrix_read::return#0 ] +Uplifting [keyboard_matrix_read] best 3368262 combination reg byte y [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#2 ] zp ZP_BYTE:210 [ keyboard_matrix_read::return#0 ] Limited combination testing to 10 combinations of 64 possible. -Uplifting [RADIX] best 3367362 combination -Uplifting [print_ln] best 3367362 combination -Uplifting [print_cls] best 3367362 combination -Uplifting [print_set_screen] best 3367362 combination -Uplifting [main] best 3367362 combination +Uplifting [RADIX] best 3368262 combination +Uplifting [print_ln] best 3368262 combination +Uplifting [print_cls] best 3368262 combination +Uplifting [print_set_screen] best 3368262 combination +Uplifting [main] best 3368262 combination Attempting to uplift remaining variables inzp ZP_BYTE:29 [ mode_8bpppixelcell::cp#2 mode_8bpppixelcell::cp#1 ] -Uplifting [mode_8bpppixelcell] best 3277362 combination reg byte x [ mode_8bpppixelcell::cp#2 mode_8bpppixelcell::cp#1 ] +Uplifting [mode_8bpppixelcell] best 3278262 combination reg byte x [ mode_8bpppixelcell::cp#2 mode_8bpppixelcell::cp#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:25 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] -Uplifting [mode_8bpppixelcell] best 3277362 combination zp ZP_BYTE:25 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] +Uplifting [mode_8bpppixelcell] best 3278262 combination zp ZP_BYTE:25 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:28 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] -Uplifting [mode_8bpppixelcell] best 3277362 combination zp ZP_BYTE:28 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] +Uplifting [mode_8bpppixelcell] best 3278262 combination zp ZP_BYTE:28 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] -Uplifting [bitmap_line_xdyi] best 3277362 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] +Uplifting [bitmap_line_xdyi] best 3278262 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:110 [ 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 ] -Uplifting [bitmap_line_ydxi] best 3277362 combination zp ZP_BYTE:110 [ 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 ] +Uplifting [bitmap_line_ydxi] best 3278262 combination zp ZP_BYTE:110 [ 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 ] Attempting to uplift remaining variables inzp ZP_BYTE:116 [ 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 ] -Uplifting [bitmap_line_xdyd] best 3277362 combination zp ZP_BYTE:116 [ 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 ] +Uplifting [bitmap_line_xdyd] best 3278262 combination zp ZP_BYTE:116 [ 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 ] Attempting to uplift remaining variables inzp ZP_BYTE:122 [ 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 ] -Uplifting [bitmap_line_ydxd] best 3277362 combination zp ZP_BYTE:122 [ 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 ] +Uplifting [bitmap_line_ydxd] best 3278262 combination zp ZP_BYTE:122 [ 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 ] Attempting to uplift remaining variables inzp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] -Uplifting [bitmap_line_xdyi] best 3277362 combination zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] +Uplifting [bitmap_line_xdyi] best 3278262 combination zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] -Uplifting [bitmap_line_xdyd] best 3277362 combination zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] +Uplifting [bitmap_line_xdyd] best 3278262 combination zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:188 [ keyboard_key_pressed::return#14 ] -Uplifting [keyboard_key_pressed] best 3271362 combination reg byte a [ keyboard_key_pressed::return#14 ] +Uplifting [keyboard_key_pressed] best 3272262 combination reg byte a [ keyboard_key_pressed::return#14 ] Attempting to uplift remaining variables inzp ZP_BYTE:190 [ keyboard_key_pressed::return#15 ] -Uplifting [keyboard_key_pressed] best 3265362 combination reg byte a [ keyboard_key_pressed::return#15 ] +Uplifting [keyboard_key_pressed] best 3266262 combination reg byte a [ keyboard_key_pressed::return#15 ] Attempting to uplift remaining variables inzp ZP_BYTE:191 [ mode_ctrl::$4 ] -Uplifting [mode_ctrl] best 3259362 combination reg byte a [ mode_ctrl::$4 ] +Uplifting [mode_ctrl] best 3260262 combination reg byte a [ mode_ctrl::$4 ] Attempting to uplift remaining variables inzp ZP_BYTE:192 [ keyboard_key_pressed::return#16 ] -Uplifting [keyboard_key_pressed] best 3253362 combination reg byte a [ keyboard_key_pressed::return#16 ] +Uplifting [keyboard_key_pressed] best 3254262 combination reg byte a [ keyboard_key_pressed::return#16 ] Attempting to uplift remaining variables inzp ZP_BYTE:193 [ mode_ctrl::$8 ] -Uplifting [mode_ctrl] best 3247362 combination reg byte a [ mode_ctrl::$8 ] +Uplifting [mode_ctrl] best 3248262 combination reg byte a [ mode_ctrl::$8 ] Attempting to uplift remaining variables inzp ZP_BYTE:194 [ keyboard_key_pressed::return#17 ] -Uplifting [keyboard_key_pressed] best 3241362 combination reg byte a [ keyboard_key_pressed::return#17 ] +Uplifting [keyboard_key_pressed] best 3242262 combination reg byte a [ keyboard_key_pressed::return#17 ] Attempting to uplift remaining variables inzp ZP_BYTE:195 [ mode_ctrl::$12 ] -Uplifting [mode_ctrl] best 3235362 combination reg byte a [ mode_ctrl::$12 ] +Uplifting [mode_ctrl] best 3236262 combination reg byte a [ mode_ctrl::$12 ] Attempting to uplift remaining variables inzp ZP_BYTE:196 [ keyboard_key_pressed::return#18 ] -Uplifting [keyboard_key_pressed] best 3229362 combination reg byte a [ keyboard_key_pressed::return#18 ] +Uplifting [keyboard_key_pressed] best 3230262 combination reg byte a [ keyboard_key_pressed::return#18 ] Attempting to uplift remaining variables inzp ZP_BYTE:197 [ mode_ctrl::$16 ] -Uplifting [mode_ctrl] best 3223362 combination reg byte a [ mode_ctrl::$16 ] +Uplifting [mode_ctrl] best 3224262 combination reg byte a [ mode_ctrl::$16 ] Attempting to uplift remaining variables inzp ZP_BYTE:198 [ keyboard_key_pressed::return#19 ] -Uplifting [keyboard_key_pressed] best 3217362 combination reg byte a [ keyboard_key_pressed::return#19 ] +Uplifting [keyboard_key_pressed] best 3218262 combination reg byte a [ keyboard_key_pressed::return#19 ] Attempting to uplift remaining variables inzp ZP_BYTE:199 [ mode_ctrl::$20 ] -Uplifting [mode_ctrl] best 3211362 combination reg byte a [ mode_ctrl::$20 ] +Uplifting [mode_ctrl] best 3212262 combination reg byte a [ mode_ctrl::$20 ] Attempting to uplift remaining variables inzp ZP_BYTE:200 [ keyboard_key_pressed::return#20 ] -Uplifting [keyboard_key_pressed] best 3205362 combination reg byte a [ keyboard_key_pressed::return#20 ] +Uplifting [keyboard_key_pressed] best 3206262 combination reg byte a [ keyboard_key_pressed::return#20 ] Attempting to uplift remaining variables inzp ZP_BYTE:201 [ mode_ctrl::$24 ] -Uplifting [mode_ctrl] best 3199362 combination reg byte a [ mode_ctrl::$24 ] +Uplifting [mode_ctrl] best 3200262 combination reg byte a [ mode_ctrl::$24 ] Attempting to uplift remaining variables inzp ZP_BYTE:202 [ keyboard_key_pressed::return#21 ] -Uplifting [keyboard_key_pressed] best 3193362 combination reg byte a [ keyboard_key_pressed::return#21 ] +Uplifting [keyboard_key_pressed] best 3194262 combination reg byte a [ keyboard_key_pressed::return#21 ] Attempting to uplift remaining variables inzp ZP_BYTE:203 [ mode_ctrl::$28 ] -Uplifting [mode_ctrl] best 3187362 combination reg byte a [ mode_ctrl::$28 ] +Uplifting [mode_ctrl] best 3188262 combination reg byte a [ mode_ctrl::$28 ] Attempting to uplift remaining variables inzp ZP_BYTE:211 [ mode_8bpppixelcell::$14 ] -Uplifting [mode_8bpppixelcell] best 3181362 combination reg byte a [ mode_8bpppixelcell::$14 ] +Uplifting [mode_8bpppixelcell] best 3182262 combination reg byte a [ mode_8bpppixelcell::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:213 [ mode_8bpppixelcell::$16 ] -Uplifting [mode_8bpppixelcell] best 3175362 combination reg byte a [ mode_8bpppixelcell::$16 ] +Uplifting [mode_8bpppixelcell] best 3176262 combination reg byte a [ mode_8bpppixelcell::$16 ] Attempting to uplift remaining variables inzp ZP_BYTE:214 [ mode_8bpppixelcell::$17 ] -Uplifting [mode_8bpppixelcell] best 3169362 combination reg byte a [ mode_8bpppixelcell::$17 ] +Uplifting [mode_8bpppixelcell] best 3170262 combination reg byte a [ mode_8bpppixelcell::$17 ] Attempting to uplift remaining variables inzp ZP_BYTE:217 [ mode_sixsfred::$18 ] -Uplifting [mode_sixsfred] best 3163362 combination reg byte a [ mode_sixsfred::$18 ] +Uplifting [mode_sixsfred] best 3164262 combination reg byte a [ mode_sixsfred::$18 ] Attempting to uplift remaining variables inzp ZP_BYTE:218 [ mode_sixsfred::$21 ] -Uplifting [mode_sixsfred] best 3157362 combination reg byte a [ mode_sixsfred::$21 ] +Uplifting [mode_sixsfred] best 3158262 combination reg byte a [ mode_sixsfred::$21 ] Attempting to uplift remaining variables inzp ZP_BYTE:219 [ mode_sixsfred::row#0 ] -Uplifting [mode_sixsfred] best 3153362 combination reg byte a [ mode_sixsfred::row#0 ] +Uplifting [mode_sixsfred] best 3154262 combination reg byte a [ mode_sixsfred::row#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:222 [ mode_twoplanebitmap::$18 ] -Uplifting [mode_twoplanebitmap] best 3147362 combination reg byte a [ mode_twoplanebitmap::$18 ] +Uplifting [mode_twoplanebitmap] best 3148262 combination reg byte a [ mode_twoplanebitmap::$18 ] Attempting to uplift remaining variables inzp ZP_BYTE:223 [ mode_twoplanebitmap::$19 ] -Uplifting [mode_twoplanebitmap] best 3141362 combination reg byte a [ mode_twoplanebitmap::$19 ] +Uplifting [mode_twoplanebitmap] best 3142262 combination reg byte a [ mode_twoplanebitmap::$19 ] Attempting to uplift remaining variables inzp ZP_BYTE:224 [ mode_twoplanebitmap::$22 ] -Uplifting [mode_twoplanebitmap] best 3135362 combination reg byte a [ mode_twoplanebitmap::$22 ] +Uplifting [mode_twoplanebitmap] best 3136262 combination reg byte a [ mode_twoplanebitmap::$22 ] Attempting to uplift remaining variables inzp ZP_BYTE:227 [ mode_sixsfred2::$17 ] -Uplifting [mode_sixsfred2] best 3129362 combination reg byte a [ mode_sixsfred2::$17 ] +Uplifting [mode_sixsfred2] best 3130262 combination reg byte a [ mode_sixsfred2::$17 ] Attempting to uplift remaining variables inzp ZP_BYTE:228 [ mode_sixsfred2::$18 ] -Uplifting [mode_sixsfred2] best 3123362 combination reg byte a [ mode_sixsfred2::$18 ] +Uplifting [mode_sixsfred2] best 3124262 combination reg byte a [ mode_sixsfred2::$18 ] Attempting to uplift remaining variables inzp ZP_BYTE:229 [ mode_sixsfred2::$21 ] -Uplifting [mode_sixsfred2] best 3117362 combination reg byte a [ mode_sixsfred2::$21 ] +Uplifting [mode_sixsfred2] best 3118262 combination reg byte a [ mode_sixsfred2::$21 ] Attempting to uplift remaining variables inzp ZP_BYTE:230 [ mode_sixsfred2::row#0 ] -Uplifting [mode_sixsfred2] best 3113362 combination reg byte a [ mode_sixsfred2::row#0 ] +Uplifting [mode_sixsfred2] best 3114262 combination reg byte a [ mode_sixsfred2::row#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:247 [ mode_stdbitmap::$26 ] -Uplifting [mode_stdbitmap] best 3107362 combination reg byte a [ mode_stdbitmap::$26 ] +Uplifting [mode_stdbitmap] best 3108262 combination reg byte a [ mode_stdbitmap::$26 ] Attempting to uplift remaining variables inzp ZP_BYTE:278 [ mode_mcchar::$28 ] -Uplifting [mode_mcchar] best 3101362 combination reg byte a [ mode_mcchar::$28 ] +Uplifting [mode_mcchar] best 3102262 combination reg byte a [ mode_mcchar::$28 ] Attempting to uplift remaining variables inzp ZP_BYTE:280 [ mode_mcchar::$30 ] -Uplifting [mode_mcchar] best 3095362 combination reg byte a [ mode_mcchar::$30 ] +Uplifting [mode_mcchar] best 3096262 combination reg byte a [ mode_mcchar::$30 ] Attempting to uplift remaining variables inzp ZP_BYTE:281 [ mode_mcchar::$31 ] -Uplifting [mode_mcchar] best 3089362 combination reg byte a [ mode_mcchar::$31 ] +Uplifting [mode_mcchar] best 3090262 combination reg byte a [ mode_mcchar::$31 ] Attempting to uplift remaining variables inzp ZP_BYTE:284 [ mode_ecmchar::$28 ] -Uplifting [mode_ecmchar] best 3083362 combination reg byte a [ mode_ecmchar::$28 ] +Uplifting [mode_ecmchar] best 3084262 combination reg byte a [ mode_ecmchar::$28 ] Attempting to uplift remaining variables inzp ZP_BYTE:286 [ mode_ecmchar::$30 ] -Uplifting [mode_ecmchar] best 3077362 combination reg byte a [ mode_ecmchar::$30 ] +Uplifting [mode_ecmchar] best 3078262 combination reg byte a [ mode_ecmchar::$30 ] Attempting to uplift remaining variables inzp ZP_BYTE:287 [ mode_ecmchar::$31 ] -Uplifting [mode_ecmchar] best 3071362 combination reg byte a [ mode_ecmchar::$31 ] +Uplifting [mode_ecmchar] best 3072262 combination reg byte a [ mode_ecmchar::$31 ] Attempting to uplift remaining variables inzp ZP_BYTE:290 [ mode_stdchar::$27 ] -Uplifting [mode_stdchar] best 3065362 combination reg byte a [ mode_stdchar::$27 ] +Uplifting [mode_stdchar] best 3066262 combination reg byte a [ mode_stdchar::$27 ] Attempting to uplift remaining variables inzp ZP_BYTE:292 [ mode_stdchar::$29 ] -Uplifting [mode_stdchar] best 3059362 combination reg byte a [ mode_stdchar::$29 ] +Uplifting [mode_stdchar] best 3060262 combination reg byte a [ mode_stdchar::$29 ] Attempting to uplift remaining variables inzp ZP_BYTE:293 [ mode_stdchar::$30 ] -Uplifting [mode_stdchar] best 3053362 combination reg byte a [ mode_stdchar::$30 ] +Uplifting [mode_stdchar] best 3054262 combination reg byte a [ mode_stdchar::$30 ] Attempting to uplift remaining variables inzp ZP_BYTE:18 [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ] -Uplifting [mode_8bpppixelcell] best 3043362 combination reg byte x [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ] +Uplifting [mode_8bpppixelcell] best 3044262 combination reg byte x [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:46 [ mode_twoplanebitmap::cx#2 mode_twoplanebitmap::cx#1 ] -Uplifting [mode_twoplanebitmap] best 3033362 combination reg byte x [ mode_twoplanebitmap::cx#2 mode_twoplanebitmap::cx#1 ] +Uplifting [mode_twoplanebitmap] best 3034262 combination reg byte x [ mode_twoplanebitmap::cx#2 mode_twoplanebitmap::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:59 [ mode_sixsfred2::cx#2 mode_sixsfred2::cx#1 ] -Uplifting [mode_sixsfred2] best 3023362 combination reg byte x [ mode_sixsfred2::cx#2 mode_sixsfred2::cx#1 ] +Uplifting [mode_sixsfred2] best 3024262 combination reg byte x [ mode_sixsfred2::cx#2 mode_sixsfred2::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:39 [ mode_sixsfred::ax#2 mode_sixsfred::ax#1 ] -Uplifting [mode_sixsfred] best 3014362 combination reg byte x [ mode_sixsfred::ax#2 mode_sixsfred::ax#1 ] +Uplifting [mode_sixsfred] best 3015262 combination reg byte x [ mode_sixsfred::ax#2 mode_sixsfred::ax#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:65 [ mode_sixsfred2::ax#2 mode_sixsfred2::ax#1 ] -Uplifting [mode_sixsfred2] best 3005362 combination reg byte x [ mode_sixsfred2::ax#2 mode_sixsfred2::ax#1 ] +Uplifting [mode_sixsfred2] best 3006262 combination reg byte x [ mode_sixsfred2::ax#2 mode_sixsfred2::ax#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:93 [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] -Uplifting [mode_stdbitmap] best 2995362 combination reg byte x [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] +Uplifting [mode_stdbitmap] best 2996262 combination reg byte x [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:134 [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] -Uplifting [mode_mcchar] best 2984362 combination reg byte x [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] +Uplifting [mode_mcchar] best 2985262 combination reg byte x [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:141 [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] -Uplifting [mode_ecmchar] best 2973362 combination reg byte x [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] +Uplifting [mode_ecmchar] best 2974262 combination reg byte x [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:148 [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] -Uplifting [mode_stdchar] best 2962362 combination reg byte x [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] +Uplifting [mode_stdchar] best 2963262 combination reg byte x [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:72 [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] -Uplifting [mode_hicolmcchar] best 2952362 combination reg byte x [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] +Uplifting [mode_hicolmcchar] best 2953262 combination reg byte x [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:79 [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] -Uplifting [mode_hicolecmchar] best 2942362 combination reg byte x [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] +Uplifting [mode_hicolecmchar] best 2943262 combination reg byte x [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:86 [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] -Uplifting [mode_hicolstdchar] best 2932362 combination reg byte x [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] +Uplifting [mode_hicolstdchar] best 2933262 combination reg byte x [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:52 [ mode_twoplanebitmap::ax#2 mode_twoplanebitmap::ax#1 ] -Uplifting [mode_twoplanebitmap] best 2923362 combination reg byte x [ mode_twoplanebitmap::ax#2 mode_twoplanebitmap::ax#1 ] +Uplifting [mode_twoplanebitmap] best 2924262 combination reg byte x [ mode_twoplanebitmap::ax#2 mode_twoplanebitmap::ax#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:24 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] -Uplifting [mode_8bpppixelcell] best 2923362 combination zp ZP_BYTE:24 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] +Uplifting [mode_8bpppixelcell] best 2924262 combination zp ZP_BYTE:24 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:244 [ mode_stdbitmap::col#0 ] -Uplifting [mode_stdbitmap] best 2922362 combination reg byte y [ mode_stdbitmap::col#0 ] +Uplifting [mode_stdbitmap] best 2923262 combination reg byte y [ mode_stdbitmap::col#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] -Uplifting [bitmap_line_xdyi] best 2922362 combination zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] +Uplifting [bitmap_line_xdyi] best 2923262 combination zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] -Uplifting [bitmap_line_ydxi] best 2922362 combination zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] +Uplifting [bitmap_line_ydxi] best 2923262 combination zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] -Uplifting [bitmap_line_xdyd] best 2922362 combination zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] +Uplifting [bitmap_line_xdyd] best 2923262 combination zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] -Uplifting [bitmap_line_ydxd] best 2922362 combination zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] +Uplifting [bitmap_line_ydxd] best 2923262 combination zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:212 [ mode_8bpppixelcell::$15 ] -Uplifting [mode_8bpppixelcell] best 2922362 combination zp ZP_BYTE:212 [ mode_8bpppixelcell::$15 ] +Uplifting [mode_8bpppixelcell] best 2923262 combination zp ZP_BYTE:212 [ mode_8bpppixelcell::$15 ] Attempting to uplift remaining variables inzp ZP_BYTE:221 [ mode_twoplanebitmap::$17 ] -Uplifting [mode_twoplanebitmap] best 2922362 combination zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 ] +Uplifting [mode_twoplanebitmap] best 2923262 combination zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 ] Attempting to uplift remaining variables inzp ZP_BYTE:226 [ mode_sixsfred2::$16 ] -Uplifting [mode_sixsfred2] best 2922362 combination zp ZP_BYTE:226 [ mode_sixsfred2::$16 ] +Uplifting [mode_sixsfred2] best 2923262 combination zp ZP_BYTE:226 [ mode_sixsfred2::$16 ] Attempting to uplift remaining variables inzp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] -Uplifting [mode_hicolmcchar] best 2922362 combination zp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] +Uplifting [mode_hicolmcchar] best 2923262 combination zp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] Attempting to uplift remaining variables inzp ZP_BYTE:234 [ mode_hicolmcchar::v#0 ] -Uplifting [mode_hicolmcchar] best 2913362 combination reg byte a [ mode_hicolmcchar::v#0 ] +Uplifting [mode_hicolmcchar] best 2914262 combination reg byte a [ mode_hicolmcchar::v#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:236 [ mode_hicolecmchar::$27 ] -Uplifting [mode_hicolecmchar] best 2913362 combination zp ZP_BYTE:236 [ mode_hicolecmchar::$27 ] +Uplifting [mode_hicolecmchar] best 2914262 combination zp ZP_BYTE:236 [ mode_hicolecmchar::$27 ] Attempting to uplift remaining variables inzp ZP_BYTE:238 [ mode_hicolecmchar::v#0 ] -Uplifting [mode_hicolecmchar] best 2904362 combination reg byte a [ mode_hicolecmchar::v#0 ] +Uplifting [mode_hicolecmchar] best 2905262 combination reg byte a [ mode_hicolecmchar::v#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:240 [ mode_hicolstdchar::$26 ] -Uplifting [mode_hicolstdchar] best 2904362 combination zp ZP_BYTE:240 [ mode_hicolstdchar::$26 ] +Uplifting [mode_hicolstdchar] best 2905262 combination zp ZP_BYTE:240 [ mode_hicolstdchar::$26 ] Attempting to uplift remaining variables inzp ZP_BYTE:242 [ mode_hicolstdchar::v#0 ] -Uplifting [mode_hicolstdchar] best 2895362 combination reg byte a [ mode_hicolstdchar::v#0 ] +Uplifting [mode_hicolstdchar] best 2896262 combination reg byte a [ mode_hicolstdchar::v#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] -Uplifting [mode_stdbitmap] best 2895362 combination zp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] +Uplifting [mode_stdbitmap] best 2896262 combination zp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:279 [ mode_mcchar::$29 ] -Uplifting [mode_mcchar] best 2895362 combination zp ZP_BYTE:279 [ mode_mcchar::$29 ] +Uplifting [mode_mcchar] best 2896262 combination zp ZP_BYTE:279 [ mode_mcchar::$29 ] Attempting to uplift remaining variables inzp ZP_BYTE:285 [ mode_ecmchar::$29 ] -Uplifting [mode_ecmchar] best 2895362 combination zp ZP_BYTE:285 [ mode_ecmchar::$29 ] +Uplifting [mode_ecmchar] best 2896262 combination zp ZP_BYTE:285 [ mode_ecmchar::$29 ] Attempting to uplift remaining variables inzp ZP_BYTE:291 [ mode_stdchar::$28 ] -Uplifting [mode_stdchar] best 2895362 combination zp ZP_BYTE:291 [ mode_stdchar::$28 ] +Uplifting [mode_stdchar] best 2896262 combination zp ZP_BYTE:291 [ mode_stdchar::$28 ] Attempting to uplift remaining variables inzp ZP_BYTE:209 [ keyboard_key_pressed::return#0 ] -Uplifting [keyboard_key_pressed] best 2867759 combination reg byte a [ keyboard_key_pressed::return#0 ] +Uplifting [keyboard_key_pressed] best 2868659 combination reg byte a [ keyboard_key_pressed::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] -Uplifting [mode_8bppchunkybmm] best 2866559 combination reg byte x [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] +Uplifting [mode_8bppchunkybmm] best 2867459 combination reg byte x [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:16 [ mode_8bpppixelcell::i#2 mode_8bpppixelcell::i#1 ] -Uplifting [mode_8bpppixelcell] best 2865359 combination reg byte x [ mode_8bpppixelcell::i#2 mode_8bpppixelcell::i#1 ] +Uplifting [mode_8bpppixelcell] best 2866259 combination reg byte x [ mode_8bpppixelcell::i#2 mode_8bpppixelcell::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:31 [ mode_sixsfred::i#2 mode_sixsfred::i#1 ] -Uplifting [mode_sixsfred] best 2864159 combination reg byte x [ mode_sixsfred::i#2 mode_sixsfred::i#1 ] +Uplifting [mode_sixsfred] best 2865059 combination reg byte x [ mode_sixsfred::i#2 mode_sixsfred::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:44 [ mode_twoplanebitmap::i#2 mode_twoplanebitmap::i#1 ] -Uplifting [mode_twoplanebitmap] best 2862959 combination reg byte x [ mode_twoplanebitmap::i#2 mode_twoplanebitmap::i#1 ] +Uplifting [mode_twoplanebitmap] best 2863859 combination reg byte x [ mode_twoplanebitmap::i#2 mode_twoplanebitmap::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:57 [ mode_sixsfred2::i#2 mode_sixsfred2::i#1 ] -Uplifting [mode_sixsfred2] best 2861759 combination reg byte x [ mode_sixsfred2::i#2 mode_sixsfred2::i#1 ] +Uplifting [mode_sixsfred2] best 2862659 combination reg byte x [ mode_sixsfred2::i#2 mode_sixsfred2::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:70 [ mode_hicolmcchar::i#2 mode_hicolmcchar::i#1 ] -Uplifting [mode_hicolmcchar] best 2860559 combination reg byte x [ mode_hicolmcchar::i#2 mode_hicolmcchar::i#1 ] +Uplifting [mode_hicolmcchar] best 2861459 combination reg byte x [ mode_hicolmcchar::i#2 mode_hicolmcchar::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:77 [ mode_hicolecmchar::i#2 mode_hicolecmchar::i#1 ] -Uplifting [mode_hicolecmchar] best 2859359 combination reg byte x [ mode_hicolecmchar::i#2 mode_hicolecmchar::i#1 ] +Uplifting [mode_hicolecmchar] best 2860259 combination reg byte x [ mode_hicolecmchar::i#2 mode_hicolecmchar::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:84 [ mode_hicolstdchar::i#2 mode_hicolstdchar::i#1 ] -Uplifting [mode_hicolstdchar] best 2858159 combination reg byte x [ mode_hicolstdchar::i#2 mode_hicolstdchar::i#1 ] +Uplifting [mode_hicolstdchar] best 2859059 combination reg byte x [ mode_hicolstdchar::i#2 mode_hicolstdchar::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:91 [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] -Uplifting [mode_stdbitmap] best 2856959 combination reg byte x [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] +Uplifting [mode_stdbitmap] best 2857859 combination reg byte x [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:132 [ mode_mcchar::i#2 mode_mcchar::i#1 ] -Uplifting [mode_mcchar] best 2855759 combination reg byte x [ mode_mcchar::i#2 mode_mcchar::i#1 ] +Uplifting [mode_mcchar] best 2856659 combination reg byte x [ mode_mcchar::i#2 mode_mcchar::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:139 [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] -Uplifting [mode_ecmchar] best 2854559 combination reg byte x [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] +Uplifting [mode_ecmchar] best 2855459 combination reg byte x [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:146 [ mode_stdchar::i#2 mode_stdchar::i#1 ] -Uplifting [mode_stdchar] best 2853359 combination reg byte x [ mode_stdchar::i#2 mode_stdchar::i#1 ] +Uplifting [mode_stdchar] best 2854259 combination reg byte x [ mode_stdchar::i#2 mode_stdchar::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] -Uplifting [mode_mcchar] best 2853359 combination zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] +Uplifting [mode_mcchar] best 2854259 combination zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] -Uplifting [mode_ecmchar] best 2853359 combination zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] +Uplifting [mode_ecmchar] best 2854259 combination zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] -Uplifting [mode_stdchar] best 2853359 combination zp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] -Uplifting [mode_stdbitmap] best 2853359 combination zp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] +Uplifting [mode_stdchar] best 2854259 combination zp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] -Uplifting [mode_sixsfred] best 2853359 combination zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] +Uplifting [mode_sixsfred] best 2854259 combination zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 ] -Uplifting [mode_sixsfred] best 2853359 combination zp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 ] +Uplifting [mode_sixsfred] best 2854259 combination zp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:62 [ mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 ] -Uplifting [mode_sixsfred2] best 2853359 combination zp ZP_BYTE:62 [ mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 ] +Uplifting [mode_sixsfred2] best 2854259 combination zp ZP_BYTE:62 [ mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] -Uplifting [mode_8bpppixelcell] best 2853359 combination zp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] +Uplifting [mode_8bpppixelcell] best 2854259 combination zp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:45 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 ] -Uplifting [mode_twoplanebitmap] best 2853359 combination zp ZP_BYTE:45 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 ] +Uplifting [mode_twoplanebitmap] best 2854259 combination zp ZP_BYTE:45 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 ] -Uplifting [mode_sixsfred2] best 2853359 combination zp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 ] +Uplifting [mode_sixsfred2] best 2854259 combination zp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:49 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 ] -Uplifting [mode_twoplanebitmap] best 2853359 combination zp ZP_BYTE:49 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 ] +Uplifting [mode_twoplanebitmap] best 2854259 combination zp ZP_BYTE:49 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] -Uplifting [mode_stdbitmap] best 2853359 combination zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] +Uplifting [mode_stdbitmap] best 2854259 combination zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:96 [ mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] +Uplifting [mode_stdbitmap] best 2854259 combination zp ZP_BYTE:96 [ mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] -Uplifting [mode_hicolmcchar] best 2853359 combination zp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] +Uplifting [mode_hicolmcchar] best 2854259 combination zp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] -Uplifting [mode_hicolecmchar] best 2853359 combination zp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] +Uplifting [mode_hicolecmchar] best 2854259 combination zp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] -Uplifting [mode_hicolstdchar] best 2853359 combination zp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] +Uplifting [mode_hicolstdchar] best 2854259 combination zp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] -Uplifting [mode_8bppchunkybmm] best 2853359 combination zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] +Uplifting [mode_8bppchunkybmm] best 2854259 combination zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] -Uplifting [bitmap_init] best 2851559 combination reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] +Uplifting [bitmap_init] best 2852459 combination reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:161 [ keyboard_key_pressed::return#2 ] -Uplifting [keyboard_key_pressed] best 2850959 combination reg byte a [ keyboard_key_pressed::return#2 ] +Uplifting [keyboard_key_pressed] best 2851859 combination reg byte a [ keyboard_key_pressed::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:163 [ keyboard_key_pressed::return#24 ] -Uplifting [keyboard_key_pressed] best 2850359 combination reg byte a [ keyboard_key_pressed::return#24 ] +Uplifting [keyboard_key_pressed] best 2851259 combination reg byte a [ keyboard_key_pressed::return#24 ] Attempting to uplift remaining variables inzp ZP_BYTE:164 [ menu::$33 ] -Uplifting [menu] best 2849759 combination reg byte a [ menu::$33 ] +Uplifting [menu] best 2850659 combination reg byte a [ menu::$33 ] Attempting to uplift remaining variables inzp ZP_BYTE:165 [ keyboard_key_pressed::return#25 ] -Uplifting [keyboard_key_pressed] best 2849159 combination reg byte a [ keyboard_key_pressed::return#25 ] +Uplifting [keyboard_key_pressed] best 2850059 combination reg byte a [ keyboard_key_pressed::return#25 ] Attempting to uplift remaining variables inzp ZP_BYTE:166 [ menu::$37 ] -Uplifting [menu] best 2848559 combination reg byte a [ menu::$37 ] +Uplifting [menu] best 2849459 combination reg byte a [ menu::$37 ] Attempting to uplift remaining variables inzp ZP_BYTE:167 [ keyboard_key_pressed::return#26 ] -Uplifting [keyboard_key_pressed] best 2847959 combination reg byte a [ keyboard_key_pressed::return#26 ] +Uplifting [keyboard_key_pressed] best 2848859 combination reg byte a [ keyboard_key_pressed::return#26 ] Attempting to uplift remaining variables inzp ZP_BYTE:168 [ menu::$41 ] -Uplifting [menu] best 2847359 combination reg byte a [ menu::$41 ] +Uplifting [menu] best 2848259 combination reg byte a [ menu::$41 ] Attempting to uplift remaining variables inzp ZP_BYTE:169 [ keyboard_key_pressed::return#27 ] -Uplifting [keyboard_key_pressed] best 2846759 combination reg byte a [ keyboard_key_pressed::return#27 ] +Uplifting [keyboard_key_pressed] best 2847659 combination reg byte a [ keyboard_key_pressed::return#27 ] Attempting to uplift remaining variables inzp ZP_BYTE:170 [ menu::$45 ] -Uplifting [menu] best 2846159 combination reg byte a [ menu::$45 ] +Uplifting [menu] best 2847059 combination reg byte a [ menu::$45 ] Attempting to uplift remaining variables inzp ZP_BYTE:171 [ keyboard_key_pressed::return#28 ] -Uplifting [keyboard_key_pressed] best 2845559 combination reg byte a [ keyboard_key_pressed::return#28 ] +Uplifting [keyboard_key_pressed] best 2846459 combination reg byte a [ keyboard_key_pressed::return#28 ] Attempting to uplift remaining variables inzp ZP_BYTE:172 [ menu::$49 ] -Uplifting [menu] best 2844959 combination reg byte a [ menu::$49 ] +Uplifting [menu] best 2845859 combination reg byte a [ menu::$49 ] Attempting to uplift remaining variables inzp ZP_BYTE:173 [ keyboard_key_pressed::return#29 ] -Uplifting [keyboard_key_pressed] best 2844359 combination reg byte a [ keyboard_key_pressed::return#29 ] +Uplifting [keyboard_key_pressed] best 2845259 combination reg byte a [ keyboard_key_pressed::return#29 ] Attempting to uplift remaining variables inzp ZP_BYTE:174 [ menu::$53 ] -Uplifting [menu] best 2843759 combination reg byte a [ menu::$53 ] +Uplifting [menu] best 2844659 combination reg byte a [ menu::$53 ] Attempting to uplift remaining variables inzp ZP_BYTE:175 [ keyboard_key_pressed::return#30 ] -Uplifting [keyboard_key_pressed] best 2843159 combination reg byte a [ keyboard_key_pressed::return#30 ] +Uplifting [keyboard_key_pressed] best 2844059 combination reg byte a [ keyboard_key_pressed::return#30 ] Attempting to uplift remaining variables inzp ZP_BYTE:176 [ menu::$57 ] -Uplifting [menu] best 2842559 combination reg byte a [ menu::$57 ] +Uplifting [menu] best 2843459 combination reg byte a [ menu::$57 ] Attempting to uplift remaining variables inzp ZP_BYTE:177 [ keyboard_key_pressed::return#10 ] -Uplifting [keyboard_key_pressed] best 2841959 combination reg byte a [ keyboard_key_pressed::return#10 ] +Uplifting [keyboard_key_pressed] best 2842859 combination reg byte a [ keyboard_key_pressed::return#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:178 [ menu::$61 ] -Uplifting [menu] best 2841359 combination reg byte a [ menu::$61 ] +Uplifting [menu] best 2842259 combination reg byte a [ menu::$61 ] Attempting to uplift remaining variables inzp ZP_BYTE:179 [ keyboard_key_pressed::return#11 ] -Uplifting [keyboard_key_pressed] best 2840759 combination reg byte a [ keyboard_key_pressed::return#11 ] +Uplifting [keyboard_key_pressed] best 2841659 combination reg byte a [ keyboard_key_pressed::return#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:180 [ menu::$65 ] -Uplifting [menu] best 2840159 combination reg byte a [ menu::$65 ] +Uplifting [menu] best 2841059 combination reg byte a [ menu::$65 ] Attempting to uplift remaining variables inzp ZP_BYTE:181 [ keyboard_key_pressed::return#12 ] -Uplifting [keyboard_key_pressed] best 2839559 combination reg byte a [ keyboard_key_pressed::return#12 ] +Uplifting [keyboard_key_pressed] best 2840459 combination reg byte a [ keyboard_key_pressed::return#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:182 [ menu::$69 ] -Uplifting [menu] best 2838959 combination reg byte a [ menu::$69 ] +Uplifting [menu] best 2839859 combination reg byte a [ menu::$69 ] Attempting to uplift remaining variables inzp ZP_BYTE:183 [ keyboard_key_pressed::return#13 ] -Uplifting [keyboard_key_pressed] best 2838359 combination reg byte a [ keyboard_key_pressed::return#13 ] +Uplifting [keyboard_key_pressed] best 2839259 combination reg byte a [ keyboard_key_pressed::return#13 ] Attempting to uplift remaining variables inzp ZP_BYTE:184 [ menu::$73 ] -Uplifting [menu] best 2837759 combination reg byte a [ menu::$73 ] +Uplifting [menu] best 2838659 combination reg byte a [ menu::$73 ] Attempting to uplift remaining variables inzp ZP_BYTE:271 [ bitmap_init::$0 ] -Uplifting [bitmap_init] best 2837359 combination reg byte a [ bitmap_init::$0 ] +Uplifting [bitmap_init] best 2838259 combination reg byte a [ bitmap_init::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:273 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 2836759 combination reg byte a [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 2837659 combination reg byte a [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:274 [ bitmap_init::$8 ] -Uplifting [bitmap_init] best 2836159 combination reg byte a [ bitmap_init::$8 ] +Uplifting [bitmap_init] best 2837059 combination reg byte a [ bitmap_init::$8 ] Attempting to uplift remaining variables inzp ZP_BYTE:275 [ bitmap_init::$9 ] -Uplifting [bitmap_init] best 2835559 combination reg byte a [ bitmap_init::$9 ] +Uplifting [bitmap_init] best 2836459 combination reg byte a [ bitmap_init::$9 ] Attempting to uplift remaining variables inzp ZP_BYTE:40 [ mode_sixsfred::by#4 mode_sixsfred::by#1 ] -Uplifting [mode_sixsfred] best 2835559 combination zp ZP_BYTE:40 [ mode_sixsfred::by#4 mode_sixsfred::by#1 ] +Uplifting [mode_sixsfred] best 2836459 combination zp ZP_BYTE:40 [ mode_sixsfred::by#4 mode_sixsfred::by#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:53 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] -Uplifting [mode_twoplanebitmap] best 2835559 combination zp ZP_BYTE:53 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] +Uplifting [mode_twoplanebitmap] best 2836459 combination zp ZP_BYTE:53 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:66 [ mode_sixsfred2::by#4 mode_sixsfred2::by#1 ] -Uplifting [mode_sixsfred2] best 2835559 combination zp ZP_BYTE:66 [ mode_sixsfred2::by#4 mode_sixsfred2::by#1 ] +Uplifting [mode_sixsfred2] best 2836459 combination zp ZP_BYTE:66 [ mode_sixsfred2::by#4 mode_sixsfred2::by#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] -Uplifting [bitmap_clear] best 2835559 combination zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] +Uplifting [bitmap_clear] best 2836459 combination zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:21 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] -Uplifting [mode_8bpppixelcell] best 2835559 combination zp ZP_BYTE:21 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] +Uplifting [mode_8bpppixelcell] best 2836459 combination zp ZP_BYTE:21 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] -Uplifting [] best 2835559 combination zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] +Uplifting [] best 2836459 combination zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] Attempting to uplift remaining variables inzp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] -Uplifting [bitmap_line_xdyi] best 2835559 combination zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] +Uplifting [bitmap_line_xdyi] best 2836459 combination zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] -Uplifting [bitmap_line_ydxi] best 2835559 combination zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] +Uplifting [bitmap_line_ydxi] best 2836459 combination zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] -Uplifting [bitmap_line_xdyd] best 2835559 combination zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] +Uplifting [bitmap_line_xdyd] best 2836459 combination zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] -Uplifting [bitmap_line_ydxd] best 2835559 combination zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] +Uplifting [bitmap_line_ydxd] best 2836459 combination zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] -Uplifting [bitmap_line_xdyi] best 2835559 combination zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] +Uplifting [bitmap_line_xdyi] best 2836459 combination zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] -Uplifting [bitmap_line_ydxi] best 2835559 combination zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] +Uplifting [bitmap_line_ydxi] best 2836459 combination zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] -Uplifting [bitmap_line_xdyd] best 2835559 combination zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] +Uplifting [bitmap_line_xdyd] best 2836459 combination zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] -Uplifting [bitmap_line_ydxd] best 2835559 combination zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] +Uplifting [bitmap_line_ydxd] best 2836459 combination zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] -Uplifting [bitmap_line_xdyi] best 2835559 combination zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] +Uplifting [bitmap_line_xdyi] best 2836459 combination zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] -Uplifting [bitmap_line_ydxi] best 2835559 combination zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] +Uplifting [bitmap_line_ydxi] best 2836459 combination zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] -Uplifting [bitmap_line_xdyd] best 2835559 combination zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] +Uplifting [bitmap_line_xdyd] best 2836459 combination zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] -Uplifting [bitmap_line_ydxd] best 2835559 combination zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] +Uplifting [bitmap_line_ydxd] best 2836459 combination zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:272 [ bitmap_init::$10 ] -Uplifting [bitmap_init] best 2835559 combination zp ZP_BYTE:272 [ bitmap_init::$10 ] +Uplifting [bitmap_init] best 2836459 combination zp ZP_BYTE:272 [ bitmap_init::$10 ] Attempting to uplift remaining variables inzp ZP_BYTE:251 [ bitmap_line::y1#0 ] -Uplifting [bitmap_line] best 2835559 combination zp ZP_BYTE:251 [ bitmap_line::y1#0 ] +Uplifting [bitmap_line] best 2836459 combination zp ZP_BYTE:251 [ bitmap_line::y1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:250 [ bitmap_line::y0#0 ] -Uplifting [bitmap_line] best 2835559 combination zp ZP_BYTE:250 [ bitmap_line::y0#0 ] +Uplifting [bitmap_line] best 2836459 combination zp ZP_BYTE:250 [ bitmap_line::y0#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:248 [ bitmap_line::x0#0 ] -Uplifting [bitmap_line] best 2835559 combination zp ZP_BYTE:248 [ bitmap_line::x0#0 ] +Uplifting [bitmap_line] best 2836459 combination zp ZP_BYTE:248 [ bitmap_line::x0#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:205 [ keyboard_key_pressed::rowidx#0 ] -Uplifting [keyboard_key_pressed] best 2835555 combination reg byte a [ keyboard_key_pressed::rowidx#0 ] +Uplifting [keyboard_key_pressed] best 2836455 combination reg byte a [ keyboard_key_pressed::rowidx#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:208 [ keyboard_key_pressed::$2 ] -Uplifting [keyboard_key_pressed] best 2835549 combination reg byte a [ keyboard_key_pressed::$2 ] +Uplifting [keyboard_key_pressed] best 2836449 combination reg byte a [ keyboard_key_pressed::$2 ] Attempting to uplift remaining variables inzp ZP_BYTE:265 [ bitmap_plot::$1 ] -Uplifting [bitmap_plot] best 2835543 combination reg byte a [ bitmap_plot::$1 ] +Uplifting [bitmap_plot] best 2836443 combination reg byte a [ bitmap_plot::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:14 [ keyboard_key_pressed::key#20 ] -Uplifting [keyboard_key_pressed] best 2835481 combination reg byte y [ keyboard_key_pressed::key#20 ] +Uplifting [keyboard_key_pressed] best 2836381 combination reg byte y [ keyboard_key_pressed::key#20 ] Attempting to uplift remaining variables inzp ZP_BYTE:210 [ keyboard_matrix_read::return#0 ] -Uplifting [keyboard_matrix_read] best 2835475 combination reg byte a [ keyboard_matrix_read::return#0 ] +Uplifting [keyboard_matrix_read] best 2836375 combination reg byte a [ keyboard_matrix_read::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:253 [ bitmap_line::yd#2 ] -Uplifting [bitmap_line] best 2835465 combination reg byte y [ bitmap_line::yd#2 ] +Uplifting [bitmap_line] best 2836365 combination reg byte y [ bitmap_line::yd#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:254 [ bitmap_line::yd#1 ] -Uplifting [bitmap_line] best 2835455 combination reg byte y [ bitmap_line::yd#1 ] +Uplifting [bitmap_line] best 2836355 combination reg byte y [ bitmap_line::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:256 [ bitmap_line::yd#10 ] -Uplifting [bitmap_line] best 2835445 combination reg byte y [ bitmap_line::yd#10 ] +Uplifting [bitmap_line] best 2836345 combination reg byte y [ bitmap_line::yd#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:257 [ bitmap_line::yd#11 ] -Uplifting [bitmap_line] best 2835435 combination reg byte y [ bitmap_line::yd#11 ] +Uplifting [bitmap_line] best 2836335 combination reg byte y [ bitmap_line::yd#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:252 [ bitmap_line::xd#2 ] -Uplifting [bitmap_line] best 2835435 combination zp ZP_BYTE:252 [ bitmap_line::xd#2 ] +Uplifting [bitmap_line] best 2836335 combination zp ZP_BYTE:252 [ bitmap_line::xd#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:255 [ bitmap_line::xd#1 ] -Uplifting [bitmap_line] best 2835435 combination zp ZP_BYTE:255 [ bitmap_line::xd#1 ] +Uplifting [bitmap_line] best 2836335 combination zp ZP_BYTE:255 [ bitmap_line::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:204 [ keyboard_key_pressed::colidx#0 ] -Uplifting [keyboard_key_pressed] best 2835435 combination zp ZP_BYTE:204 [ keyboard_key_pressed::colidx#0 ] +Uplifting [keyboard_key_pressed] best 2836335 combination zp ZP_BYTE:204 [ keyboard_key_pressed::colidx#0 ] Coalescing zero page register [ zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] ] with [ zp ZP_BYTE:252 [ bitmap_line::xd#2 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 bitmap_line::xd#2 ] ] with [ zp ZP_BYTE:255 [ bitmap_line::xd#1 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] ] with [ zp ZP_BYTE:248 [ bitmap_line::x0#0 ] ] - score: 1 @@ -20932,7 +20967,7 @@ Coalescing zero page register [ zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_li Coalescing zero page register [ zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 ] ] with [ zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 bitmap_line::y0#0 ] ] with [ zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 bitmap_line::y0#0 bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] ] with [ zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:7 [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 ] ] with [ zp ZP_WORD:3 [ menu::c#2 menu::c#1 ] ] +Coalescing zero page register [ zp ZP_WORD:7 [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 ] ] with [ zp ZP_WORD:3 [ menu::c#4 menu::c#1 ] ] Coalescing zero page register [ zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] ] with [ zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] ] Coalescing zero page register [ zp ZP_WORD:19 [ mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::gfxa#3 mode_8bpppixelcell::gfxa#1 ] ] with [ zp ZP_WORD:10 [ mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 ] ] Coalescing zero page register [ zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] ] with [ zp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] ] @@ -20960,7 +20995,7 @@ Coalescing zero page register [ zp ZP_BYTE:110 [ bitmap_line_ydxi::e#3 bitmap_li Coalescing zero page register [ zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] ] with [ zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] ] Coalescing zero page register [ zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] ] with [ zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] ] Coalescing zero page register [ zp ZP_BYTE:122 [ 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 ] ] with [ zp ZP_BYTE:116 [ 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 ] ] -Coalescing zero page register [ zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] ] with [ zp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] ] with [ zp ZP_BYTE:96 [ mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] ] Coalescing zero page register [ zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp ZP_WORD:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 ] ] Coalescing zero page register [ zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] ] with [ zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] ] Coalescing zero page register [ zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] ] with [ zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 bitmap_line::y0#0 bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 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 ] ] @@ -20968,7 +21003,7 @@ Coalescing zero page register [ zp ZP_WORD:142 [ mode_ecmchar::col#2 mode_ecmcha Coalescing zero page register [ zp ZP_WORD:144 [ mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 ] ] with [ zp ZP_WORD:137 [ mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 ] ] Coalescing zero page register [ zp ZP_WORD:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] ] with [ zp ZP_WORD:149 [ mode_stdchar::col#2 mode_stdchar::col#3 mode_stdchar::col#1 ] ] Coalescing zero page register [ zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 ] ] with [ zp ZP_WORD:151 [ mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 ] ] -Coalescing zero page register [ zp ZP_WORD:159 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:157 [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] ] +Coalescing zero page register [ zp ZP_WORD:159 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:157 [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] ] Coalescing zero page register [ zp ZP_BYTE:204 [ keyboard_key_pressed::colidx#0 ] ] with [ zp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] ] Coalescing zero page register [ zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 ] ] with [ zp ZP_BYTE:212 [ mode_8bpppixelcell::$15 ] ] Coalescing zero page register [ zp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] ] with [ zp ZP_BYTE:226 [ mode_sixsfred2::$16 ] ] @@ -20977,7 +21012,7 @@ Coalescing zero page register [ zp ZP_WORD:259 [ bitmap_plot::plotter_x#0 bitmap Coalescing zero page register [ zp ZP_BYTE:272 [ bitmap_init::$10 ] ] with [ zp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] ] Coalescing zero page register [ zp ZP_BYTE:285 [ mode_ecmchar::$29 ] ] with [ zp ZP_BYTE:279 [ mode_mcchar::$29 ] ] Coalescing zero page register [ zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] ] with [ zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] ] -Coalescing zero page register [ zp ZP_WORD:34 [ mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 ] ] with [ zp ZP_WORD:7 [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 menu::c#2 menu::c#1 ] ] +Coalescing zero page register [ zp ZP_WORD:34 [ mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 ] ] with [ zp ZP_WORD:7 [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 menu::c#4 menu::c#1 ] ] Coalescing zero page register [ zp ZP_WORD:47 [ mode_twoplanebitmap::col#2 mode_twoplanebitmap::col#3 mode_twoplanebitmap::col#1 mode_sixsfred::gfxb#2 mode_sixsfred::gfxb#3 mode_sixsfred::gfxb#1 ] ] with [ zp ZP_WORD:19 [ mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::gfxa#3 mode_8bpppixelcell::gfxa#1 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 ] ] Coalescing zero page register [ zp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] ] with [ zp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] ] Coalescing zero page register [ zp ZP_WORD:60 [ mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 ] ] with [ zp ZP_WORD:37 [ mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 ] ] @@ -20993,12 +21028,12 @@ Coalescing zero page register [ zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_ini Coalescing zero page register [ zp ZP_WORD:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 mode_stdchar::col#2 mode_stdchar::col#3 mode_stdchar::col#1 ] ] with [ zp ZP_WORD:142 [ mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 mode_mcchar::col#2 mode_mcchar::col#3 mode_mcchar::col#1 ] ] Coalescing zero page register [ zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 ] ] with [ zp ZP_WORD:144 [ mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 ] ] Coalescing zero page register [ zp ZP_BYTE:204 [ keyboard_key_pressed::colidx#0 mode_stdchar::cy#4 mode_stdchar::cy#1 ] ] with [ zp ZP_BYTE:110 [ 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_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 mode_8bpppixelcell::$15 ] ] with [ zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 mode_8bpppixelcell::$15 ] ] with [ zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] ] Coalescing zero page register [ zp ZP_BYTE:232 [ mode_hicolmcchar::$27 mode_sixsfred2::$16 ] ] with [ zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] ] Coalescing zero page register [ zp ZP_BYTE:240 [ mode_hicolstdchar::$26 mode_hicolecmchar::$27 ] ] with [ zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 bitmap_line::y0#0 bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 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 ] ] -Coalescing zero page register [ zp ZP_WORD:259 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 mode_8bppchunkybmm::$26 ] ] with [ zp ZP_WORD:159 [ memset::dst#2 memset::dst#1 print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] ] +Coalescing zero page register [ zp ZP_WORD:259 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 mode_8bppchunkybmm::$26 ] ] with [ zp ZP_WORD:159 [ memset::dst#4 memset::dst#1 print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] ] Coalescing zero page register [ zp ZP_BYTE:285 [ mode_ecmchar::$29 mode_mcchar::$29 ] ] with [ zp ZP_BYTE:272 [ bitmap_init::$10 mode_stdbitmap::col2#0 ] ] -Coalescing zero page register [ zp ZP_WORD:80 [ mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 ] ] with [ zp ZP_WORD:34 [ mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 menu::c#2 menu::c#1 ] ] +Coalescing zero page register [ zp ZP_WORD:80 [ mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 ] ] with [ zp ZP_WORD:34 [ mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 menu::c#4 menu::c#1 ] ] Coalescing zero page register [ zp ZP_WORD:87 [ mode_hicolstdchar::col#2 mode_hicolstdchar::col#3 mode_hicolstdchar::col#1 mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 mode_sixsfred2::gfxb#2 mode_sixsfred2::gfxb#3 mode_sixsfred2::gfxb#1 ] ] with [ zp ZP_WORD:47 [ mode_twoplanebitmap::col#2 mode_twoplanebitmap::col#3 mode_twoplanebitmap::col#1 mode_sixsfred::gfxb#2 mode_sixsfred::gfxb#3 mode_sixsfred::gfxb#1 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::gfxa#3 mode_8bpppixelcell::gfxa#1 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 ] ] Coalescing zero page register [ zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] ] with [ zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 dtv_control#114 dtv_control#144 dtv_control#17 mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] ] Coalescing zero page register [ zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] ] with [ zp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 mode_sixsfred::ay#4 mode_sixsfred::ay#1 mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] ] @@ -21007,21 +21042,21 @@ Coalescing zero page register [ zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_ini Coalescing zero page register [ zp ZP_BYTE:204 [ keyboard_key_pressed::colidx#0 mode_stdchar::cy#4 mode_stdchar::cy#1 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_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] ] with [ zp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 mode_sixsfred2::by#4 mode_sixsfred2::by#1 mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] ] Coalescing zero page register [ zp ZP_BYTE:232 [ mode_hicolmcchar::$27 mode_sixsfred2::$16 mode_mcchar::cy#4 mode_mcchar::cy#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] ] with [ zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] ] Coalescing zero page register [ zp ZP_WORD:261 [ bitmap_plot::plotter_y#0 ] ] with [ zp ZP_WORD:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 mode_stdchar::col#2 mode_stdchar::col#3 mode_stdchar::col#1 mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 mode_mcchar::col#2 mode_mcchar::col#3 mode_mcchar::col#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:291 [ mode_stdchar::$28 ] ] with [ zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 mode_8bpppixelcell::$15 bitmap_clear::y#4 bitmap_clear::y#1 mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] ] -Coalescing zero page register [ zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 ] ] with [ zp ZP_WORD:80 [ mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 menu::c#2 menu::c#1 ] ] -Coalescing zero page register [ zp ZP_WORD:259 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 mode_8bppchunkybmm::$26 memset::dst#2 memset::dst#1 print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] ] with [ zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:291 [ mode_stdchar::$28 ] ] with [ zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 mode_8bpppixelcell::$15 bitmap_clear::y#4 bitmap_clear::y#1 mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] ] +Coalescing zero page register [ zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 ] ] with [ zp ZP_WORD:80 [ mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 menu::c#4 menu::c#1 ] ] +Coalescing zero page register [ zp ZP_WORD:259 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 mode_8bppchunkybmm::$26 memset::dst#4 memset::dst#1 print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] ] with [ zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 ] ] Coalescing zero page register [ zp ZP_WORD:261 [ bitmap_plot::plotter_y#0 print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 mode_stdchar::col#2 mode_stdchar::col#3 mode_stdchar::col#1 mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 mode_mcchar::col#2 mode_mcchar::col#3 mode_mcchar::col#1 ] ] with [ zp ZP_WORD:87 [ mode_hicolstdchar::col#2 mode_hicolstdchar::col#3 mode_hicolstdchar::col#1 mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 mode_sixsfred2::gfxb#2 mode_sixsfred2::gfxb#3 mode_sixsfred2::gfxb#1 mode_twoplanebitmap::col#2 mode_twoplanebitmap::col#3 mode_twoplanebitmap::col#1 mode_sixsfred::gfxb#2 mode_sixsfred::gfxb#3 mode_sixsfred::gfxb#1 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::gfxa#3 mode_8bpppixelcell::gfxa#1 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 ] ] Coalescing zero page register [ zp ZP_BYTE:285 [ mode_ecmchar::$29 mode_mcchar::$29 bitmap_init::$10 mode_stdbitmap::col2#0 ] ] with [ zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 mode_sixsfred::cy#4 mode_sixsfred::cy#1 mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 dtv_control#114 dtv_control#144 dtv_control#17 mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] ] Allocated (was zp ZP_BYTE:121) zp ZP_BYTE:2 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 mode_sixsfred::ay#4 mode_sixsfred::ay#1 mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] Allocated (was zp ZP_BYTE:122) zp ZP_BYTE:3 [ 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 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_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 bitmap_line::y1#0 bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 mode_sixsfred::by#4 mode_sixsfred::by#1 mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] -Allocated (was zp ZP_WORD:155) zp ZP_WORD:4 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 menu::c#2 menu::c#1 ] +Allocated (was zp ZP_WORD:155) zp ZP_WORD:4 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 menu::c#4 menu::c#1 ] Allocated (was zp ZP_BYTE:204) zp ZP_BYTE:6 [ keyboard_key_pressed::colidx#0 mode_stdchar::cy#4 mode_stdchar::cy#1 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_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 mode_sixsfred2::by#4 mode_sixsfred2::by#1 mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] Allocated (was zp ZP_BYTE:232) zp ZP_BYTE:7 [ mode_hicolmcchar::$27 mode_sixsfred2::$16 mode_mcchar::cy#4 mode_mcchar::cy#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] Allocated (was zp ZP_BYTE:240) zp ZP_BYTE:8 [ mode_hicolstdchar::$26 mode_hicolecmchar::$27 mode_ecmchar::cy#4 mode_ecmchar::cy#1 bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 bitmap_line::y0#0 bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 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 ] -Allocated (was zp ZP_WORD:259) zp ZP_WORD:9 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 mode_8bppchunkybmm::$26 memset::dst#2 memset::dst#1 print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 ] +Allocated (was zp ZP_WORD:259) zp ZP_WORD:9 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 mode_8bppchunkybmm::$26 memset::dst#4 memset::dst#1 print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 ] Allocated (was zp ZP_WORD:261) zp ZP_WORD:11 [ bitmap_plot::plotter_y#0 print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 mode_stdchar::col#2 mode_stdchar::col#3 mode_stdchar::col#1 mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 mode_mcchar::col#2 mode_mcchar::col#3 mode_mcchar::col#1 mode_hicolstdchar::col#2 mode_hicolstdchar::col#3 mode_hicolstdchar::col#1 mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 mode_sixsfred2::gfxb#2 mode_sixsfred2::gfxb#3 mode_sixsfred2::gfxb#1 mode_twoplanebitmap::col#2 mode_twoplanebitmap::col#3 mode_twoplanebitmap::col#1 mode_sixsfred::gfxb#2 mode_sixsfred::gfxb#3 mode_sixsfred::gfxb#1 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::gfxa#3 mode_8bpppixelcell::gfxa#1 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 ] Allocated (was zp ZP_BYTE:285) zp ZP_BYTE:13 [ mode_ecmchar::$29 mode_mcchar::$29 bitmap_init::$10 mode_stdbitmap::col2#0 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 mode_sixsfred::cy#4 mode_sixsfred::cy#1 mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 dtv_control#114 dtv_control#144 dtv_control#17 mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] -Allocated (was zp ZP_BYTE:291) zp ZP_BYTE:14 [ mode_stdchar::$28 mode_twoplanebitmap::$17 mode_8bpppixelcell::$15 bitmap_clear::y#4 bitmap_clear::y#1 mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] +Allocated (was zp ZP_BYTE:291) zp ZP_BYTE:14 [ mode_stdchar::$28 mode_twoplanebitmap::$17 mode_8bpppixelcell::$15 bitmap_clear::y#4 bitmap_clear::y#1 mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -21229,400 +21264,401 @@ menu: { // [22] if((byte) menu::i#1!=(byte) $10) goto menu::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1_from_b1 - // [23] phi from menu::@1 to menu::@2 [phi:menu::@1->menu::@2] - b2_from_b1: - // [23] phi (byte*) menu::c#2 = (const byte*) COLS#0 [phi:menu::@1->menu::@2#0] -- pbuz1=pbuc1 + // [23] phi from menu::@1 to menu::@3 [phi:menu::@1->menu::@3] + b3_from_b1: + // [23] phi (byte*) menu::c#4 = (const byte*) COLS#0 [phi:menu::@1->menu::@3#0] -- pbuz1=pbuc1 lda #COLS sta c+1 + jmp b3 + // [23] phi from menu::@2 to menu::@3 [phi:menu::@2->menu::@3] + b3_from_b2: + // [23] phi (byte*) menu::c#4 = (byte*) menu::c#1 [phi:menu::@2->menu::@3#0] -- register_copy + jmp b3 + // menu::@3 + b3: + // [24] *((byte*) menu::c#4) ← (const byte) LIGHT_GREEN#0 -- _deref_pbuz1=vbuc1 + lda #LIGHT_GREEN + ldy #0 + sta (c),y + // [25] (byte*) menu::c#1 ← ++ (byte*) menu::c#4 -- pbuz1=_inc_pbuz1 + inc c + bne !+ + inc c+1 + !: jmp b2 // Char Colors // menu::@2 b2: - // [24] if((byte*) menu::c#2!=(const byte*) COLS#0+(word) $3e8) goto menu::@3 -- pbuz1_neq_pbuc1_then_la1 + // [26] if((byte*) menu::c#1!=(const byte*) COLS#0+(word) $3e8) goto menu::@3 -- pbuz1_neq_pbuc1_then_la1 lda c+1 cmp #>COLS+$3e8 - bne b3 + bne b3_from_b2 lda c cmp #print_set_screen] print_set_screen_from_b4: jsr print_set_screen - // [28] phi from menu::@4 to menu::@29 [phi:menu::@4->menu::@29] + // [30] phi from menu::@4 to menu::@29 [phi:menu::@4->menu::@29] b29_from_b4: jmp b29 // menu::@29 b29: - // [29] call print_cls + // [31] call print_cls // [884] phi from menu::@29 to print_cls [phi:menu::@29->print_cls] print_cls_from_b29: jsr print_cls - // [30] phi from menu::@29 to menu::@30 [phi:menu::@29->menu::@30] + // [32] phi from menu::@29 to menu::@30 [phi:menu::@29->menu::@30] b30_from_b29: jmp b30 // menu::@30 b30: - // [31] call print_str_lines + // [33] call print_str_lines // [864] phi from menu::@30 to print_str_lines [phi:menu::@30->print_str_lines] print_str_lines_from_b30: jsr print_str_lines - // [32] phi from menu::@30 menu::@42 to menu::@5 [phi:menu::@30/menu::@42->menu::@5] + // [34] phi from menu::@30 menu::@42 to menu::@5 [phi:menu::@30/menu::@42->menu::@5] b5_from_b30: b5_from_b42: jmp b5 // menu::@5 b5: - // [33] call keyboard_key_pressed + // [35] call keyboard_key_pressed // [211] phi from menu::@5 to keyboard_key_pressed [phi:menu::@5->keyboard_key_pressed] keyboard_key_pressed_from_b5: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_1#0 [phi:menu::@5->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_1 jsr keyboard_key_pressed - // [34] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + // [36] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 jmp b31 // menu::@31 b31: - // [35] (byte~) menu::$29 ← (byte) keyboard_key_pressed::return#2 - // [36] if((byte~) menu::$29==(byte) 0) goto menu::@6 -- vbuaa_eq_0_then_la1 + // [37] (byte~) menu::$29 ← (byte) keyboard_key_pressed::return#2 + // [38] if((byte~) menu::$29==(byte) 0) goto menu::@6 -- vbuaa_eq_0_then_la1 cmp #0 beq b6_from_b31 - // [37] phi from menu::@31 to menu::@17 [phi:menu::@31->menu::@17] + // [39] phi from menu::@31 to menu::@17 [phi:menu::@31->menu::@17] b17_from_b31: jmp b17 // menu::@17 b17: - // [38] call mode_stdchar + // [40] call mode_stdchar jsr mode_stdchar jmp breturn // menu::@return breturn: - // [39] return + // [41] return rts - // [40] phi from menu::@31 to menu::@6 [phi:menu::@31->menu::@6] + // [42] phi from menu::@31 to menu::@6 [phi:menu::@31->menu::@6] b6_from_b31: jmp b6 // menu::@6 b6: - // [41] call keyboard_key_pressed + // [43] call keyboard_key_pressed // [211] phi from menu::@6 to keyboard_key_pressed [phi:menu::@6->keyboard_key_pressed] keyboard_key_pressed_from_b6: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_2#0 [phi:menu::@6->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_2 jsr keyboard_key_pressed - // [42] (byte) keyboard_key_pressed::return#24 ← (byte) keyboard_key_pressed::return#0 + // [44] (byte) keyboard_key_pressed::return#24 ← (byte) keyboard_key_pressed::return#0 jmp b32 // menu::@32 b32: - // [43] (byte~) menu::$33 ← (byte) keyboard_key_pressed::return#24 - // [44] if((byte~) menu::$33==(byte) 0) goto menu::@7 -- vbuaa_eq_0_then_la1 + // [45] (byte~) menu::$33 ← (byte) keyboard_key_pressed::return#24 + // [46] if((byte~) menu::$33==(byte) 0) goto menu::@7 -- vbuaa_eq_0_then_la1 cmp #0 beq b7_from_b32 - // [45] phi from menu::@32 to menu::@18 [phi:menu::@32->menu::@18] + // [47] phi from menu::@32 to menu::@18 [phi:menu::@32->menu::@18] b18_from_b32: jmp b18 // menu::@18 b18: - // [46] call mode_ecmchar + // [48] call mode_ecmchar jsr mode_ecmchar jmp breturn - // [47] phi from menu::@32 to menu::@7 [phi:menu::@32->menu::@7] + // [49] phi from menu::@32 to menu::@7 [phi:menu::@32->menu::@7] b7_from_b32: jmp b7 // menu::@7 b7: - // [48] call keyboard_key_pressed + // [50] call keyboard_key_pressed // [211] phi from menu::@7 to keyboard_key_pressed [phi:menu::@7->keyboard_key_pressed] keyboard_key_pressed_from_b7: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_3#0 [phi:menu::@7->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_3 jsr keyboard_key_pressed - // [49] (byte) keyboard_key_pressed::return#25 ← (byte) keyboard_key_pressed::return#0 + // [51] (byte) keyboard_key_pressed::return#25 ← (byte) keyboard_key_pressed::return#0 jmp b33 // menu::@33 b33: - // [50] (byte~) menu::$37 ← (byte) keyboard_key_pressed::return#25 - // [51] if((byte~) menu::$37==(byte) 0) goto menu::@8 -- vbuaa_eq_0_then_la1 + // [52] (byte~) menu::$37 ← (byte) keyboard_key_pressed::return#25 + // [53] if((byte~) menu::$37==(byte) 0) goto menu::@8 -- vbuaa_eq_0_then_la1 cmp #0 beq b8_from_b33 - // [52] phi from menu::@33 to menu::@19 [phi:menu::@33->menu::@19] + // [54] phi from menu::@33 to menu::@19 [phi:menu::@33->menu::@19] b19_from_b33: jmp b19 // menu::@19 b19: - // [53] call mode_mcchar + // [55] call mode_mcchar jsr mode_mcchar jmp breturn - // [54] phi from menu::@33 to menu::@8 [phi:menu::@33->menu::@8] + // [56] phi from menu::@33 to menu::@8 [phi:menu::@33->menu::@8] b8_from_b33: jmp b8 // menu::@8 b8: - // [55] call keyboard_key_pressed + // [57] call keyboard_key_pressed // [211] phi from menu::@8 to keyboard_key_pressed [phi:menu::@8->keyboard_key_pressed] keyboard_key_pressed_from_b8: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_4#0 [phi:menu::@8->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_4 jsr keyboard_key_pressed - // [56] (byte) keyboard_key_pressed::return#26 ← (byte) keyboard_key_pressed::return#0 + // [58] (byte) keyboard_key_pressed::return#26 ← (byte) keyboard_key_pressed::return#0 jmp b34 // menu::@34 b34: - // [57] (byte~) menu::$41 ← (byte) keyboard_key_pressed::return#26 - // [58] if((byte~) menu::$41==(byte) 0) goto menu::@9 -- vbuaa_eq_0_then_la1 + // [59] (byte~) menu::$41 ← (byte) keyboard_key_pressed::return#26 + // [60] if((byte~) menu::$41==(byte) 0) goto menu::@9 -- vbuaa_eq_0_then_la1 cmp #0 beq b9_from_b34 - // [59] phi from menu::@34 to menu::@20 [phi:menu::@34->menu::@20] + // [61] phi from menu::@34 to menu::@20 [phi:menu::@34->menu::@20] b20_from_b34: jmp b20 // menu::@20 b20: - // [60] call mode_stdbitmap + // [62] call mode_stdbitmap jsr mode_stdbitmap jmp breturn - // [61] phi from menu::@34 to menu::@9 [phi:menu::@34->menu::@9] + // [63] phi from menu::@34 to menu::@9 [phi:menu::@34->menu::@9] b9_from_b34: jmp b9 // menu::@9 b9: - // [62] call keyboard_key_pressed + // [64] call keyboard_key_pressed // [211] phi from menu::@9 to keyboard_key_pressed [phi:menu::@9->keyboard_key_pressed] keyboard_key_pressed_from_b9: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_6#0 [phi:menu::@9->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_6 jsr keyboard_key_pressed - // [63] (byte) keyboard_key_pressed::return#27 ← (byte) keyboard_key_pressed::return#0 + // [65] (byte) keyboard_key_pressed::return#27 ← (byte) keyboard_key_pressed::return#0 jmp b35 // menu::@35 b35: - // [64] (byte~) menu::$45 ← (byte) keyboard_key_pressed::return#27 - // [65] if((byte~) menu::$45==(byte) 0) goto menu::@10 -- vbuaa_eq_0_then_la1 + // [66] (byte~) menu::$45 ← (byte) keyboard_key_pressed::return#27 + // [67] if((byte~) menu::$45==(byte) 0) goto menu::@10 -- vbuaa_eq_0_then_la1 cmp #0 beq b10_from_b35 - // [66] phi from menu::@35 to menu::@21 [phi:menu::@35->menu::@21] + // [68] phi from menu::@35 to menu::@21 [phi:menu::@35->menu::@21] b21_from_b35: jmp b21 // menu::@21 b21: - // [67] call mode_hicolstdchar + // [69] call mode_hicolstdchar jsr mode_hicolstdchar jmp breturn - // [68] phi from menu::@35 to menu::@10 [phi:menu::@35->menu::@10] + // [70] phi from menu::@35 to menu::@10 [phi:menu::@35->menu::@10] b10_from_b35: jmp b10 // menu::@10 b10: - // [69] call keyboard_key_pressed + // [71] call keyboard_key_pressed // [211] phi from menu::@10 to keyboard_key_pressed [phi:menu::@10->keyboard_key_pressed] keyboard_key_pressed_from_b10: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_7#0 [phi:menu::@10->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_7 jsr keyboard_key_pressed - // [70] (byte) keyboard_key_pressed::return#28 ← (byte) keyboard_key_pressed::return#0 + // [72] (byte) keyboard_key_pressed::return#28 ← (byte) keyboard_key_pressed::return#0 jmp b36 // menu::@36 b36: - // [71] (byte~) menu::$49 ← (byte) keyboard_key_pressed::return#28 - // [72] if((byte~) menu::$49==(byte) 0) goto menu::@11 -- vbuaa_eq_0_then_la1 + // [73] (byte~) menu::$49 ← (byte) keyboard_key_pressed::return#28 + // [74] if((byte~) menu::$49==(byte) 0) goto menu::@11 -- vbuaa_eq_0_then_la1 cmp #0 beq b11_from_b36 - // [73] phi from menu::@36 to menu::@22 [phi:menu::@36->menu::@22] + // [75] phi from menu::@36 to menu::@22 [phi:menu::@36->menu::@22] b22_from_b36: jmp b22 // menu::@22 b22: - // [74] call mode_hicolecmchar + // [76] call mode_hicolecmchar jsr mode_hicolecmchar jmp breturn - // [75] phi from menu::@36 to menu::@11 [phi:menu::@36->menu::@11] + // [77] phi from menu::@36 to menu::@11 [phi:menu::@36->menu::@11] b11_from_b36: jmp b11 // menu::@11 b11: - // [76] call keyboard_key_pressed + // [78] call keyboard_key_pressed // [211] phi from menu::@11 to keyboard_key_pressed [phi:menu::@11->keyboard_key_pressed] keyboard_key_pressed_from_b11: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_8#0 [phi:menu::@11->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_8 jsr keyboard_key_pressed - // [77] (byte) keyboard_key_pressed::return#29 ← (byte) keyboard_key_pressed::return#0 + // [79] (byte) keyboard_key_pressed::return#29 ← (byte) keyboard_key_pressed::return#0 jmp b37 // menu::@37 b37: - // [78] (byte~) menu::$53 ← (byte) keyboard_key_pressed::return#29 - // [79] if((byte~) menu::$53==(byte) 0) goto menu::@12 -- vbuaa_eq_0_then_la1 + // [80] (byte~) menu::$53 ← (byte) keyboard_key_pressed::return#29 + // [81] if((byte~) menu::$53==(byte) 0) goto menu::@12 -- vbuaa_eq_0_then_la1 cmp #0 beq b12_from_b37 - // [80] phi from menu::@37 to menu::@23 [phi:menu::@37->menu::@23] + // [82] phi from menu::@37 to menu::@23 [phi:menu::@37->menu::@23] b23_from_b37: jmp b23 // menu::@23 b23: - // [81] call mode_hicolmcchar + // [83] call mode_hicolmcchar jsr mode_hicolmcchar jmp breturn - // [82] phi from menu::@37 to menu::@12 [phi:menu::@37->menu::@12] + // [84] phi from menu::@37 to menu::@12 [phi:menu::@37->menu::@12] b12_from_b37: jmp b12 // menu::@12 b12: - // [83] call keyboard_key_pressed + // [85] call keyboard_key_pressed // [211] phi from menu::@12 to keyboard_key_pressed [phi:menu::@12->keyboard_key_pressed] keyboard_key_pressed_from_b12: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_A#0 [phi:menu::@12->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_A jsr keyboard_key_pressed - // [84] (byte) keyboard_key_pressed::return#30 ← (byte) keyboard_key_pressed::return#0 + // [86] (byte) keyboard_key_pressed::return#30 ← (byte) keyboard_key_pressed::return#0 jmp b38 // menu::@38 b38: - // [85] (byte~) menu::$57 ← (byte) keyboard_key_pressed::return#30 - // [86] if((byte~) menu::$57==(byte) 0) goto menu::@13 -- vbuaa_eq_0_then_la1 + // [87] (byte~) menu::$57 ← (byte) keyboard_key_pressed::return#30 + // [88] if((byte~) menu::$57==(byte) 0) goto menu::@13 -- vbuaa_eq_0_then_la1 cmp #0 beq b13_from_b38 - // [87] phi from menu::@38 to menu::@24 [phi:menu::@38->menu::@24] + // [89] phi from menu::@38 to menu::@24 [phi:menu::@38->menu::@24] b24_from_b38: jmp b24 // menu::@24 b24: - // [88] call mode_sixsfred2 + // [90] call mode_sixsfred2 jsr mode_sixsfred2 jmp breturn - // [89] phi from menu::@38 to menu::@13 [phi:menu::@38->menu::@13] + // [91] phi from menu::@38 to menu::@13 [phi:menu::@38->menu::@13] b13_from_b38: jmp b13 // menu::@13 b13: - // [90] call keyboard_key_pressed + // [92] call keyboard_key_pressed // [211] phi from menu::@13 to keyboard_key_pressed [phi:menu::@13->keyboard_key_pressed] keyboard_key_pressed_from_b13: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_B#0 [phi:menu::@13->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_B jsr keyboard_key_pressed - // [91] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 + // [93] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 jmp b39 // menu::@39 b39: - // [92] (byte~) menu::$61 ← (byte) keyboard_key_pressed::return#10 - // [93] if((byte~) menu::$61==(byte) 0) goto menu::@14 -- vbuaa_eq_0_then_la1 + // [94] (byte~) menu::$61 ← (byte) keyboard_key_pressed::return#10 + // [95] if((byte~) menu::$61==(byte) 0) goto menu::@14 -- vbuaa_eq_0_then_la1 cmp #0 beq b14_from_b39 - // [94] phi from menu::@39 to menu::@25 [phi:menu::@39->menu::@25] + // [96] phi from menu::@39 to menu::@25 [phi:menu::@39->menu::@25] b25_from_b39: jmp b25 // menu::@25 b25: - // [95] call mode_twoplanebitmap + // [97] call mode_twoplanebitmap jsr mode_twoplanebitmap jmp breturn - // [96] phi from menu::@39 to menu::@14 [phi:menu::@39->menu::@14] + // [98] phi from menu::@39 to menu::@14 [phi:menu::@39->menu::@14] b14_from_b39: jmp b14 // menu::@14 b14: - // [97] call keyboard_key_pressed + // [99] call keyboard_key_pressed // [211] phi from menu::@14 to keyboard_key_pressed [phi:menu::@14->keyboard_key_pressed] keyboard_key_pressed_from_b14: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_C#0 [phi:menu::@14->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_C jsr keyboard_key_pressed - // [98] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 + // [100] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 jmp b40 // menu::@40 b40: - // [99] (byte~) menu::$65 ← (byte) keyboard_key_pressed::return#11 - // [100] if((byte~) menu::$65==(byte) 0) goto menu::@15 -- vbuaa_eq_0_then_la1 + // [101] (byte~) menu::$65 ← (byte) keyboard_key_pressed::return#11 + // [102] if((byte~) menu::$65==(byte) 0) goto menu::@15 -- vbuaa_eq_0_then_la1 cmp #0 beq b15_from_b40 - // [101] phi from menu::@40 to menu::@26 [phi:menu::@40->menu::@26] + // [103] phi from menu::@40 to menu::@26 [phi:menu::@40->menu::@26] b26_from_b40: jmp b26 // menu::@26 b26: - // [102] call mode_sixsfred + // [104] call mode_sixsfred jsr mode_sixsfred jmp breturn - // [103] phi from menu::@40 to menu::@15 [phi:menu::@40->menu::@15] + // [105] phi from menu::@40 to menu::@15 [phi:menu::@40->menu::@15] b15_from_b40: jmp b15 // menu::@15 b15: - // [104] call keyboard_key_pressed + // [106] call keyboard_key_pressed // [211] phi from menu::@15 to keyboard_key_pressed [phi:menu::@15->keyboard_key_pressed] keyboard_key_pressed_from_b15: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_D#0 [phi:menu::@15->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_D jsr keyboard_key_pressed - // [105] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 + // [107] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 jmp b41 // menu::@41 b41: - // [106] (byte~) menu::$69 ← (byte) keyboard_key_pressed::return#12 - // [107] if((byte~) menu::$69==(byte) 0) goto menu::@16 -- vbuaa_eq_0_then_la1 + // [108] (byte~) menu::$69 ← (byte) keyboard_key_pressed::return#12 + // [109] if((byte~) menu::$69==(byte) 0) goto menu::@16 -- vbuaa_eq_0_then_la1 cmp #0 beq b16_from_b41 - // [108] phi from menu::@41 to menu::@27 [phi:menu::@41->menu::@27] + // [110] phi from menu::@41 to menu::@27 [phi:menu::@41->menu::@27] b27_from_b41: jmp b27 // menu::@27 b27: - // [109] call mode_8bpppixelcell + // [111] call mode_8bpppixelcell jsr mode_8bpppixelcell jmp breturn - // [110] phi from menu::@41 to menu::@16 [phi:menu::@41->menu::@16] + // [112] phi from menu::@41 to menu::@16 [phi:menu::@41->menu::@16] b16_from_b41: jmp b16 // menu::@16 b16: - // [111] call keyboard_key_pressed + // [113] call keyboard_key_pressed // [211] phi from menu::@16 to keyboard_key_pressed [phi:menu::@16->keyboard_key_pressed] keyboard_key_pressed_from_b16: // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_E#0 [phi:menu::@16->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_E jsr keyboard_key_pressed - // [112] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 + // [114] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 jmp b42 // menu::@42 b42: - // [113] (byte~) menu::$73 ← (byte) keyboard_key_pressed::return#13 - // [114] if((byte~) menu::$73==(byte) 0) goto menu::@5 -- vbuaa_eq_0_then_la1 + // [115] (byte~) menu::$73 ← (byte) keyboard_key_pressed::return#13 + // [116] if((byte~) menu::$73==(byte) 0) goto menu::@5 -- vbuaa_eq_0_then_la1 cmp #0 beq b5_from_b42 - // [115] phi from menu::@42 to menu::@28 [phi:menu::@42->menu::@28] + // [117] phi from menu::@42 to menu::@28 [phi:menu::@42->menu::@28] b28_from_b42: jmp b28 // menu::@28 b28: - // [116] call mode_8bppchunkybmm + // [118] call mode_8bppchunkybmm jsr mode_8bppchunkybmm jmp breturn - // menu::@3 - b3: - // [117] *((byte*) menu::c#2) ← (const byte) LIGHT_GREEN#0 -- _deref_pbuz1=vbuc1 - lda #LIGHT_GREEN - ldy #0 - sta (c),y - // [118] (byte*) menu::c#1 ← ++ (byte*) menu::c#2 -- pbuz1=_inc_pbuz1 - inc c - bne !+ - inc c+1 - !: - // [23] phi from menu::@3 to menu::@2 [phi:menu::@3->menu::@2] - b2_from_b3: - // [23] phi (byte*) menu::c#2 = (byte*) menu::c#1 [phi:menu::@3->menu::@2#0] -- register_copy - jmp b2 } // mode_8bppchunkybmm //Chunky 8bpp Bitmap Mode (BMM = 0, ECM/MCM/HICOL/LINEAR/CHUNK/COLDIS = 1) @@ -24156,24 +24192,53 @@ mode_stdbitmap: { b10: // [580] call bitmap_clear jsr bitmap_clear - // [581] phi from mode_stdbitmap::@10 to mode_stdbitmap::@7 [phi:mode_stdbitmap::@10->mode_stdbitmap::@7] - b7_from_b10: - // [581] phi (byte) mode_stdbitmap::l#2 = (byte) 0 [phi:mode_stdbitmap::@10->mode_stdbitmap::@7#0] -- vbuz1=vbuc1 + // [581] phi from mode_stdbitmap::@10 to mode_stdbitmap::@8 [phi:mode_stdbitmap::@10->mode_stdbitmap::@8] + b8_from_b10: + // [581] phi (byte) mode_stdbitmap::l#5 = (byte) 0 [phi:mode_stdbitmap::@10->mode_stdbitmap::@8#0] -- vbuz1=vbuc1 lda #0 sta l + jmp b8 + // [581] phi from mode_stdbitmap::@7 to mode_stdbitmap::@8 [phi:mode_stdbitmap::@7->mode_stdbitmap::@8] + b8_from_b7: + // [581] phi (byte) mode_stdbitmap::l#5 = (byte) mode_stdbitmap::l#1 [phi:mode_stdbitmap::@7->mode_stdbitmap::@8#0] -- register_copy + jmp b8 + // mode_stdbitmap::@8 + b8: + // [582] (byte) bitmap_line::x0#0 ← *((const byte[]) mode_stdbitmap::lines_x#0 + (byte) mode_stdbitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy l + lda lines_x,y + sta bitmap_line.x0 + // [583] (byte) bitmap_line::x1#0 ← *((const byte[]) mode_stdbitmap::lines_x#0+(byte) 1 + (byte) mode_stdbitmap::l#5) -- vbuxx=pbuc1_derefidx_vbuz1 + ldy l + ldx lines_x+1,y + // [584] (byte) bitmap_line::y0#0 ← *((const byte[]) mode_stdbitmap::lines_y#0 + (byte) mode_stdbitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy l + lda lines_y,y + sta bitmap_line.y0 + // [585] (byte) bitmap_line::y1#0 ← *((const byte[]) mode_stdbitmap::lines_y#0+(byte) 1 + (byte) mode_stdbitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy l + lda lines_y+1,y + sta bitmap_line.y1 + // [586] call bitmap_line + jsr bitmap_line + jmp b11 + // mode_stdbitmap::@11 + b11: + // [587] (byte) mode_stdbitmap::l#1 ← ++ (byte) mode_stdbitmap::l#5 -- vbuz1=_inc_vbuz1 + inc l jmp b7 // mode_stdbitmap::@7 b7: - // [582] if((byte) mode_stdbitmap::l#2<(const byte) mode_stdbitmap::lines_cnt#0) goto mode_stdbitmap::@8 -- vbuz1_lt_vbuc1_then_la1 + // [588] if((byte) mode_stdbitmap::l#1<(const byte) mode_stdbitmap::lines_cnt#0) goto mode_stdbitmap::@8 -- vbuz1_lt_vbuc1_then_la1 lda l cmp #lines_cnt - bcc b8 - // [583] phi from mode_stdbitmap::@7 to mode_stdbitmap::@9 [phi:mode_stdbitmap::@7->mode_stdbitmap::@9] + bcc b8_from_b7 + // [589] phi from mode_stdbitmap::@7 to mode_stdbitmap::@9 [phi:mode_stdbitmap::@7->mode_stdbitmap::@9] b9_from_b7: jmp b9 // mode_stdbitmap::@9 b9: - // [584] call mode_ctrl + // [590] call mode_ctrl // [155] phi from mode_stdbitmap::@9 to mode_ctrl [phi:mode_stdbitmap::@9->mode_ctrl] mode_ctrl_from_b9: // [155] phi (byte) dtv_control#144 = (byte) 0 [phi:mode_stdbitmap::@9->mode_ctrl#0] -- vbuz1=vbuc1 @@ -24183,36 +24248,8 @@ mode_stdbitmap: { jmp breturn // mode_stdbitmap::@return breturn: - // [585] return + // [591] return rts - // mode_stdbitmap::@8 - b8: - // [586] (byte) bitmap_line::x0#0 ← *((const byte[]) mode_stdbitmap::lines_x#0 + (byte) mode_stdbitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy l - lda lines_x,y - sta bitmap_line.x0 - // [587] (byte) bitmap_line::x1#0 ← *((const byte[]) mode_stdbitmap::lines_x#0+(byte) 1 + (byte) mode_stdbitmap::l#2) -- vbuxx=pbuc1_derefidx_vbuz1 - ldy l - ldx lines_x+1,y - // [588] (byte) bitmap_line::y0#0 ← *((const byte[]) mode_stdbitmap::lines_y#0 + (byte) mode_stdbitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy l - lda lines_y,y - sta bitmap_line.y0 - // [589] (byte) bitmap_line::y1#0 ← *((const byte[]) mode_stdbitmap::lines_y#0+(byte) 1 + (byte) mode_stdbitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy l - lda lines_y+1,y - sta bitmap_line.y1 - // [590] call bitmap_line - jsr bitmap_line - jmp b11 - // mode_stdbitmap::@11 - b11: - // [591] (byte) mode_stdbitmap::l#1 ← ++ (byte) mode_stdbitmap::l#2 -- vbuz1=_inc_vbuz1 - inc l - // [581] phi from mode_stdbitmap::@11 to mode_stdbitmap::@7 [phi:mode_stdbitmap::@11->mode_stdbitmap::@7] - b7_from_b11: - // [581] phi (byte) mode_stdbitmap::l#2 = (byte) mode_stdbitmap::l#1 [phi:mode_stdbitmap::@11->mode_stdbitmap::@7#0] -- register_copy - jmp b7 lines_x: .byte 0, $ff, $ff, 0, 0, $80, $ff, $80, 0, $80 lines_y: .byte 0, 0, $c7, $c7, 0, 0, $64, $c7, $64, 0 } @@ -25744,43 +25781,44 @@ memset: { .label str = menu.SCREEN .label end = str+num .label dst = 9 - // [888] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [888] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [888] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [888] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [889] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [888] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [891] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [889] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [892] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [890] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [888] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [888] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [891] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #menu::@2] - // [23] phi (byte*) menu::c#2 = (const byte*) COLS#0 [phi:menu::@1->menu::@2#0] -- pbuz1=pbuc1 + // [23] phi from menu::@1 to menu::@3 [phi:menu::@1->menu::@3] + // [23] phi (byte*) menu::c#4 = (const byte*) COLS#0 [phi:menu::@1->menu::@3#0] -- pbuz1=pbuc1 lda #COLS sta c+1 + // [23] phi from menu::@2 to menu::@3 [phi:menu::@2->menu::@3] + // [23] phi (byte*) menu::c#4 = (byte*) menu::c#1 [phi:menu::@2->menu::@3#0] -- register_copy + // menu::@3 + b3: + // *c=LIGHT_GREEN + // [24] *((byte*) menu::c#4) ← (const byte) LIGHT_GREEN#0 -- _deref_pbuz1=vbuc1 + lda #LIGHT_GREEN + ldy #0 + sta (c),y + // for(byte* c=COLS;c!=COLS+1000;c++) + // [25] (byte*) menu::c#1 ← ++ (byte*) menu::c#4 -- pbuz1=_inc_pbuz1 + inc c + bne !+ + inc c+1 + !: // Char Colors // menu::@2 - b2: - // for(byte* c=COLS;c!=COLS+1000;c++) - // [24] if((byte*) menu::c#2!=(const byte*) COLS#0+(word) $3e8) goto menu::@3 -- pbuz1_neq_pbuc1_then_la1 + // [26] if((byte*) menu::c#1!=(const byte*) COLS#0+(word) $3e8) goto menu::@3 -- pbuz1_neq_pbuc1_then_la1 lda c+1 cmp #>COLS+$3e8 - beq !b3+ - jmp b3 - !b3: + bne b3 lda c cmp #print_set_screen] jsr print_set_screen - // [28] phi from menu::@4 to menu::@29 [phi:menu::@4->menu::@29] + // [30] phi from menu::@4 to menu::@29 [phi:menu::@4->menu::@29] // menu::@29 // print_cls() - // [29] call print_cls + // [31] call print_cls // [884] phi from menu::@29 to print_cls [phi:menu::@29->print_cls] jsr print_cls - // [30] phi from menu::@29 to menu::@30 [phi:menu::@29->menu::@30] + // [32] phi from menu::@29 to menu::@30 [phi:menu::@29->menu::@30] // menu::@30 // print_str_lines(MENU_TEXT) - // [31] call print_str_lines + // [33] call print_str_lines // [864] phi from menu::@30 to print_str_lines [phi:menu::@30->print_str_lines] jsr print_str_lines - // [32] phi from menu::@30 menu::@42 to menu::@5 [phi:menu::@30/menu::@42->menu::@5] + // [34] phi from menu::@30 menu::@42 to menu::@5 [phi:menu::@30/menu::@42->menu::@5] // menu::@5 b5: // keyboard_key_pressed(KEY_1) - // [33] call keyboard_key_pressed + // [35] call keyboard_key_pressed // [211] phi from menu::@5 to keyboard_key_pressed [phi:menu::@5->keyboard_key_pressed] // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_1#0 [phi:menu::@5->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_1 jsr keyboard_key_pressed // keyboard_key_pressed(KEY_1) - // [34] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + // [36] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 // menu::@31 - // [35] (byte~) menu::$29 ← (byte) keyboard_key_pressed::return#2 + // [37] (byte~) menu::$29 ← (byte) keyboard_key_pressed::return#2 // if(keyboard_key_pressed(KEY_1)!=0) - // [36] if((byte~) menu::$29==(byte) 0) goto menu::@6 -- vbuaa_eq_0_then_la1 + // [38] if((byte~) menu::$29==(byte) 0) goto menu::@6 -- vbuaa_eq_0_then_la1 cmp #0 beq b6 - // [37] phi from menu::@31 to menu::@17 [phi:menu::@31->menu::@17] + // [39] phi from menu::@31 to menu::@17 [phi:menu::@31->menu::@17] // menu::@17 // mode_stdchar() - // [38] call mode_stdchar + // [40] call mode_stdchar jsr mode_stdchar // menu::@return // } - // [39] return + // [41] return rts - // [40] phi from menu::@31 to menu::@6 [phi:menu::@31->menu::@6] + // [42] phi from menu::@31 to menu::@6 [phi:menu::@31->menu::@6] // menu::@6 b6: // keyboard_key_pressed(KEY_2) - // [41] call keyboard_key_pressed + // [43] call keyboard_key_pressed // [211] phi from menu::@6 to keyboard_key_pressed [phi:menu::@6->keyboard_key_pressed] // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_2#0 [phi:menu::@6->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_2 jsr keyboard_key_pressed // keyboard_key_pressed(KEY_2) - // [42] (byte) keyboard_key_pressed::return#24 ← (byte) keyboard_key_pressed::return#0 + // [44] (byte) keyboard_key_pressed::return#24 ← (byte) keyboard_key_pressed::return#0 // menu::@32 - // [43] (byte~) menu::$33 ← (byte) keyboard_key_pressed::return#24 + // [45] (byte~) menu::$33 ← (byte) keyboard_key_pressed::return#24 // if(keyboard_key_pressed(KEY_2)!=0) - // [44] if((byte~) menu::$33==(byte) 0) goto menu::@7 -- vbuaa_eq_0_then_la1 + // [46] if((byte~) menu::$33==(byte) 0) goto menu::@7 -- vbuaa_eq_0_then_la1 cmp #0 beq b7 - // [45] phi from menu::@32 to menu::@18 [phi:menu::@32->menu::@18] + // [47] phi from menu::@32 to menu::@18 [phi:menu::@32->menu::@18] // menu::@18 // mode_ecmchar() - // [46] call mode_ecmchar + // [48] call mode_ecmchar jsr mode_ecmchar rts - // [47] phi from menu::@32 to menu::@7 [phi:menu::@32->menu::@7] + // [49] phi from menu::@32 to menu::@7 [phi:menu::@32->menu::@7] // menu::@7 b7: // keyboard_key_pressed(KEY_3) - // [48] call keyboard_key_pressed + // [50] call keyboard_key_pressed // [211] phi from menu::@7 to keyboard_key_pressed [phi:menu::@7->keyboard_key_pressed] // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_3#0 [phi:menu::@7->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_3 jsr keyboard_key_pressed // keyboard_key_pressed(KEY_3) - // [49] (byte) keyboard_key_pressed::return#25 ← (byte) keyboard_key_pressed::return#0 + // [51] (byte) keyboard_key_pressed::return#25 ← (byte) keyboard_key_pressed::return#0 // menu::@33 - // [50] (byte~) menu::$37 ← (byte) keyboard_key_pressed::return#25 + // [52] (byte~) menu::$37 ← (byte) keyboard_key_pressed::return#25 // if(keyboard_key_pressed(KEY_3)!=0) - // [51] if((byte~) menu::$37==(byte) 0) goto menu::@8 -- vbuaa_eq_0_then_la1 + // [53] if((byte~) menu::$37==(byte) 0) goto menu::@8 -- vbuaa_eq_0_then_la1 cmp #0 beq b8 - // [52] phi from menu::@33 to menu::@19 [phi:menu::@33->menu::@19] + // [54] phi from menu::@33 to menu::@19 [phi:menu::@33->menu::@19] // menu::@19 // mode_mcchar() - // [53] call mode_mcchar + // [55] call mode_mcchar jsr mode_mcchar rts - // [54] phi from menu::@33 to menu::@8 [phi:menu::@33->menu::@8] + // [56] phi from menu::@33 to menu::@8 [phi:menu::@33->menu::@8] // menu::@8 b8: // keyboard_key_pressed(KEY_4) - // [55] call keyboard_key_pressed + // [57] call keyboard_key_pressed // [211] phi from menu::@8 to keyboard_key_pressed [phi:menu::@8->keyboard_key_pressed] // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_4#0 [phi:menu::@8->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_4 jsr keyboard_key_pressed // keyboard_key_pressed(KEY_4) - // [56] (byte) keyboard_key_pressed::return#26 ← (byte) keyboard_key_pressed::return#0 + // [58] (byte) keyboard_key_pressed::return#26 ← (byte) keyboard_key_pressed::return#0 // menu::@34 - // [57] (byte~) menu::$41 ← (byte) keyboard_key_pressed::return#26 + // [59] (byte~) menu::$41 ← (byte) keyboard_key_pressed::return#26 // if(keyboard_key_pressed(KEY_4)!=0) - // [58] if((byte~) menu::$41==(byte) 0) goto menu::@9 -- vbuaa_eq_0_then_la1 + // [60] if((byte~) menu::$41==(byte) 0) goto menu::@9 -- vbuaa_eq_0_then_la1 cmp #0 beq b9 - // [59] phi from menu::@34 to menu::@20 [phi:menu::@34->menu::@20] + // [61] phi from menu::@34 to menu::@20 [phi:menu::@34->menu::@20] // menu::@20 // mode_stdbitmap() - // [60] call mode_stdbitmap + // [62] call mode_stdbitmap jsr mode_stdbitmap rts - // [61] phi from menu::@34 to menu::@9 [phi:menu::@34->menu::@9] + // [63] phi from menu::@34 to menu::@9 [phi:menu::@34->menu::@9] // menu::@9 b9: // keyboard_key_pressed(KEY_6) - // [62] call keyboard_key_pressed + // [64] call keyboard_key_pressed // [211] phi from menu::@9 to keyboard_key_pressed [phi:menu::@9->keyboard_key_pressed] // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_6#0 [phi:menu::@9->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_6 jsr keyboard_key_pressed // keyboard_key_pressed(KEY_6) - // [63] (byte) keyboard_key_pressed::return#27 ← (byte) keyboard_key_pressed::return#0 + // [65] (byte) keyboard_key_pressed::return#27 ← (byte) keyboard_key_pressed::return#0 // menu::@35 - // [64] (byte~) menu::$45 ← (byte) keyboard_key_pressed::return#27 + // [66] (byte~) menu::$45 ← (byte) keyboard_key_pressed::return#27 // if(keyboard_key_pressed(KEY_6)!=0) - // [65] if((byte~) menu::$45==(byte) 0) goto menu::@10 -- vbuaa_eq_0_then_la1 + // [67] if((byte~) menu::$45==(byte) 0) goto menu::@10 -- vbuaa_eq_0_then_la1 cmp #0 beq b10 - // [66] phi from menu::@35 to menu::@21 [phi:menu::@35->menu::@21] + // [68] phi from menu::@35 to menu::@21 [phi:menu::@35->menu::@21] // menu::@21 // mode_hicolstdchar() - // [67] call mode_hicolstdchar + // [69] call mode_hicolstdchar jsr mode_hicolstdchar rts - // [68] phi from menu::@35 to menu::@10 [phi:menu::@35->menu::@10] + // [70] phi from menu::@35 to menu::@10 [phi:menu::@35->menu::@10] // menu::@10 b10: // keyboard_key_pressed(KEY_7) - // [69] call keyboard_key_pressed + // [71] call keyboard_key_pressed // [211] phi from menu::@10 to keyboard_key_pressed [phi:menu::@10->keyboard_key_pressed] // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_7#0 [phi:menu::@10->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_7 jsr keyboard_key_pressed // keyboard_key_pressed(KEY_7) - // [70] (byte) keyboard_key_pressed::return#28 ← (byte) keyboard_key_pressed::return#0 + // [72] (byte) keyboard_key_pressed::return#28 ← (byte) keyboard_key_pressed::return#0 // menu::@36 - // [71] (byte~) menu::$49 ← (byte) keyboard_key_pressed::return#28 + // [73] (byte~) menu::$49 ← (byte) keyboard_key_pressed::return#28 // if(keyboard_key_pressed(KEY_7)!=0) - // [72] if((byte~) menu::$49==(byte) 0) goto menu::@11 -- vbuaa_eq_0_then_la1 + // [74] if((byte~) menu::$49==(byte) 0) goto menu::@11 -- vbuaa_eq_0_then_la1 cmp #0 beq b11 - // [73] phi from menu::@36 to menu::@22 [phi:menu::@36->menu::@22] + // [75] phi from menu::@36 to menu::@22 [phi:menu::@36->menu::@22] // menu::@22 // mode_hicolecmchar() - // [74] call mode_hicolecmchar + // [76] call mode_hicolecmchar jsr mode_hicolecmchar rts - // [75] phi from menu::@36 to menu::@11 [phi:menu::@36->menu::@11] + // [77] phi from menu::@36 to menu::@11 [phi:menu::@36->menu::@11] // menu::@11 b11: // keyboard_key_pressed(KEY_8) - // [76] call keyboard_key_pressed + // [78] call keyboard_key_pressed // [211] phi from menu::@11 to keyboard_key_pressed [phi:menu::@11->keyboard_key_pressed] // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_8#0 [phi:menu::@11->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_8 jsr keyboard_key_pressed // keyboard_key_pressed(KEY_8) - // [77] (byte) keyboard_key_pressed::return#29 ← (byte) keyboard_key_pressed::return#0 + // [79] (byte) keyboard_key_pressed::return#29 ← (byte) keyboard_key_pressed::return#0 // menu::@37 - // [78] (byte~) menu::$53 ← (byte) keyboard_key_pressed::return#29 + // [80] (byte~) menu::$53 ← (byte) keyboard_key_pressed::return#29 // if(keyboard_key_pressed(KEY_8)!=0) - // [79] if((byte~) menu::$53==(byte) 0) goto menu::@12 -- vbuaa_eq_0_then_la1 + // [81] if((byte~) menu::$53==(byte) 0) goto menu::@12 -- vbuaa_eq_0_then_la1 cmp #0 beq b12 - // [80] phi from menu::@37 to menu::@23 [phi:menu::@37->menu::@23] + // [82] phi from menu::@37 to menu::@23 [phi:menu::@37->menu::@23] // menu::@23 // mode_hicolmcchar() - // [81] call mode_hicolmcchar + // [83] call mode_hicolmcchar jsr mode_hicolmcchar rts - // [82] phi from menu::@37 to menu::@12 [phi:menu::@37->menu::@12] + // [84] phi from menu::@37 to menu::@12 [phi:menu::@37->menu::@12] // menu::@12 b12: // keyboard_key_pressed(KEY_A) - // [83] call keyboard_key_pressed + // [85] call keyboard_key_pressed // [211] phi from menu::@12 to keyboard_key_pressed [phi:menu::@12->keyboard_key_pressed] // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_A#0 [phi:menu::@12->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_A jsr keyboard_key_pressed // keyboard_key_pressed(KEY_A) - // [84] (byte) keyboard_key_pressed::return#30 ← (byte) keyboard_key_pressed::return#0 + // [86] (byte) keyboard_key_pressed::return#30 ← (byte) keyboard_key_pressed::return#0 // menu::@38 - // [85] (byte~) menu::$57 ← (byte) keyboard_key_pressed::return#30 + // [87] (byte~) menu::$57 ← (byte) keyboard_key_pressed::return#30 // if(keyboard_key_pressed(KEY_A)!=0) - // [86] if((byte~) menu::$57==(byte) 0) goto menu::@13 -- vbuaa_eq_0_then_la1 + // [88] if((byte~) menu::$57==(byte) 0) goto menu::@13 -- vbuaa_eq_0_then_la1 cmp #0 beq b13 - // [87] phi from menu::@38 to menu::@24 [phi:menu::@38->menu::@24] + // [89] phi from menu::@38 to menu::@24 [phi:menu::@38->menu::@24] // menu::@24 // mode_sixsfred2() - // [88] call mode_sixsfred2 + // [90] call mode_sixsfred2 jsr mode_sixsfred2 rts - // [89] phi from menu::@38 to menu::@13 [phi:menu::@38->menu::@13] + // [91] phi from menu::@38 to menu::@13 [phi:menu::@38->menu::@13] // menu::@13 b13: // keyboard_key_pressed(KEY_B) - // [90] call keyboard_key_pressed + // [92] call keyboard_key_pressed // [211] phi from menu::@13 to keyboard_key_pressed [phi:menu::@13->keyboard_key_pressed] // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_B#0 [phi:menu::@13->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_B jsr keyboard_key_pressed // keyboard_key_pressed(KEY_B) - // [91] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 + // [93] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 // menu::@39 - // [92] (byte~) menu::$61 ← (byte) keyboard_key_pressed::return#10 + // [94] (byte~) menu::$61 ← (byte) keyboard_key_pressed::return#10 // if(keyboard_key_pressed(KEY_B)!=0) - // [93] if((byte~) menu::$61==(byte) 0) goto menu::@14 -- vbuaa_eq_0_then_la1 + // [95] if((byte~) menu::$61==(byte) 0) goto menu::@14 -- vbuaa_eq_0_then_la1 cmp #0 beq b14 - // [94] phi from menu::@39 to menu::@25 [phi:menu::@39->menu::@25] + // [96] phi from menu::@39 to menu::@25 [phi:menu::@39->menu::@25] // menu::@25 // mode_twoplanebitmap() - // [95] call mode_twoplanebitmap + // [97] call mode_twoplanebitmap jsr mode_twoplanebitmap rts - // [96] phi from menu::@39 to menu::@14 [phi:menu::@39->menu::@14] + // [98] phi from menu::@39 to menu::@14 [phi:menu::@39->menu::@14] // menu::@14 b14: // keyboard_key_pressed(KEY_C) - // [97] call keyboard_key_pressed + // [99] call keyboard_key_pressed // [211] phi from menu::@14 to keyboard_key_pressed [phi:menu::@14->keyboard_key_pressed] // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_C#0 [phi:menu::@14->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_C jsr keyboard_key_pressed // keyboard_key_pressed(KEY_C) - // [98] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 + // [100] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 // menu::@40 - // [99] (byte~) menu::$65 ← (byte) keyboard_key_pressed::return#11 + // [101] (byte~) menu::$65 ← (byte) keyboard_key_pressed::return#11 // if(keyboard_key_pressed(KEY_C)!=0) - // [100] if((byte~) menu::$65==(byte) 0) goto menu::@15 -- vbuaa_eq_0_then_la1 + // [102] if((byte~) menu::$65==(byte) 0) goto menu::@15 -- vbuaa_eq_0_then_la1 cmp #0 beq b15 - // [101] phi from menu::@40 to menu::@26 [phi:menu::@40->menu::@26] + // [103] phi from menu::@40 to menu::@26 [phi:menu::@40->menu::@26] // menu::@26 // mode_sixsfred() - // [102] call mode_sixsfred + // [104] call mode_sixsfred jsr mode_sixsfred rts - // [103] phi from menu::@40 to menu::@15 [phi:menu::@40->menu::@15] + // [105] phi from menu::@40 to menu::@15 [phi:menu::@40->menu::@15] // menu::@15 b15: // keyboard_key_pressed(KEY_D) - // [104] call keyboard_key_pressed + // [106] call keyboard_key_pressed // [211] phi from menu::@15 to keyboard_key_pressed [phi:menu::@15->keyboard_key_pressed] // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_D#0 [phi:menu::@15->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_D jsr keyboard_key_pressed // keyboard_key_pressed(KEY_D) - // [105] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 + // [107] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 // menu::@41 - // [106] (byte~) menu::$69 ← (byte) keyboard_key_pressed::return#12 + // [108] (byte~) menu::$69 ← (byte) keyboard_key_pressed::return#12 // if(keyboard_key_pressed(KEY_D)!=0) - // [107] if((byte~) menu::$69==(byte) 0) goto menu::@16 -- vbuaa_eq_0_then_la1 + // [109] if((byte~) menu::$69==(byte) 0) goto menu::@16 -- vbuaa_eq_0_then_la1 cmp #0 beq b16 - // [108] phi from menu::@41 to menu::@27 [phi:menu::@41->menu::@27] + // [110] phi from menu::@41 to menu::@27 [phi:menu::@41->menu::@27] // menu::@27 // mode_8bpppixelcell() - // [109] call mode_8bpppixelcell + // [111] call mode_8bpppixelcell jsr mode_8bpppixelcell rts - // [110] phi from menu::@41 to menu::@16 [phi:menu::@41->menu::@16] + // [112] phi from menu::@41 to menu::@16 [phi:menu::@41->menu::@16] // menu::@16 b16: // keyboard_key_pressed(KEY_E) - // [111] call keyboard_key_pressed + // [113] call keyboard_key_pressed // [211] phi from menu::@16 to keyboard_key_pressed [phi:menu::@16->keyboard_key_pressed] // [211] phi (byte) keyboard_key_pressed::key#20 = (const byte) KEY_E#0 [phi:menu::@16->keyboard_key_pressed#0] -- vbuyy=vbuc1 ldy #KEY_E jsr keyboard_key_pressed // keyboard_key_pressed(KEY_E) - // [112] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 + // [114] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 // menu::@42 - // [113] (byte~) menu::$73 ← (byte) keyboard_key_pressed::return#13 + // [115] (byte~) menu::$73 ← (byte) keyboard_key_pressed::return#13 // if(keyboard_key_pressed(KEY_E)!=0) - // [114] if((byte~) menu::$73==(byte) 0) goto menu::@5 -- vbuaa_eq_0_then_la1 + // [116] if((byte~) menu::$73==(byte) 0) goto menu::@5 -- vbuaa_eq_0_then_la1 cmp #0 bne !b5+ jmp b5 !b5: - // [115] phi from menu::@42 to menu::@28 [phi:menu::@42->menu::@28] + // [117] phi from menu::@42 to menu::@28 [phi:menu::@42->menu::@28] // menu::@28 // mode_8bppchunkybmm() - // [116] call mode_8bppchunkybmm + // [118] call mode_8bppchunkybmm jsr mode_8bppchunkybmm rts - // menu::@3 - b3: - // *c=LIGHT_GREEN - // [117] *((byte*) menu::c#2) ← (const byte) LIGHT_GREEN#0 -- _deref_pbuz1=vbuc1 - lda #LIGHT_GREEN - ldy #0 - sta (c),y - // for(byte* c=COLS;c!=COLS+1000;c++) - // [118] (byte*) menu::c#1 ← ++ (byte*) menu::c#2 -- pbuz1=_inc_pbuz1 - inc c - bne !+ - inc c+1 - !: - // [23] phi from menu::@3 to menu::@2 [phi:menu::@3->menu::@2] - // [23] phi (byte*) menu::c#2 = (byte*) menu::c#1 [phi:menu::@3->menu::@2#0] -- register_copy - jmp b2 } // mode_8bppchunkybmm //Chunky 8bpp Bitmap Mode (BMM = 0, ECM/MCM/HICOL/LINEAR/CHUNK/COLDIS = 1) @@ -31095,21 +31138,42 @@ mode_stdbitmap: { // bitmap_clear() // [580] call bitmap_clear jsr bitmap_clear - // [581] phi from mode_stdbitmap::@10 to mode_stdbitmap::@7 [phi:mode_stdbitmap::@10->mode_stdbitmap::@7] - // [581] phi (byte) mode_stdbitmap::l#2 = (byte) 0 [phi:mode_stdbitmap::@10->mode_stdbitmap::@7#0] -- vbuz1=vbuc1 + // [581] phi from mode_stdbitmap::@10 to mode_stdbitmap::@8 [phi:mode_stdbitmap::@10->mode_stdbitmap::@8] + // [581] phi (byte) mode_stdbitmap::l#5 = (byte) 0 [phi:mode_stdbitmap::@10->mode_stdbitmap::@8#0] -- vbuz1=vbuc1 lda #0 sta l - // mode_stdbitmap::@7 - b7: + // [581] phi from mode_stdbitmap::@7 to mode_stdbitmap::@8 [phi:mode_stdbitmap::@7->mode_stdbitmap::@8] + // [581] phi (byte) mode_stdbitmap::l#5 = (byte) mode_stdbitmap::l#1 [phi:mode_stdbitmap::@7->mode_stdbitmap::@8#0] -- register_copy + // mode_stdbitmap::@8 + b8: + // bitmap_line(lines_x[l], lines_x[l+1], lines_y[l], lines_y[l+1]) + // [582] (byte) bitmap_line::x0#0 ← *((const byte[]) mode_stdbitmap::lines_x#0 + (byte) mode_stdbitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy l + lda lines_x,y + sta bitmap_line.x0 + // [583] (byte) bitmap_line::x1#0 ← *((const byte[]) mode_stdbitmap::lines_x#0+(byte) 1 + (byte) mode_stdbitmap::l#5) -- vbuxx=pbuc1_derefidx_vbuz1 + ldx lines_x+1,y + // [584] (byte) bitmap_line::y0#0 ← *((const byte[]) mode_stdbitmap::lines_y#0 + (byte) mode_stdbitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + lda lines_y,y + sta bitmap_line.y0 + // [585] (byte) bitmap_line::y1#0 ← *((const byte[]) mode_stdbitmap::lines_y#0+(byte) 1 + (byte) mode_stdbitmap::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + lda lines_y+1,y + sta bitmap_line.y1 + // [586] call bitmap_line + jsr bitmap_line + // mode_stdbitmap::@11 // for(byte l=0; lmode_stdbitmap::@9] + // [589] phi from mode_stdbitmap::@7 to mode_stdbitmap::@9 [phi:mode_stdbitmap::@7->mode_stdbitmap::@9] // mode_stdbitmap::@9 // mode_ctrl() - // [584] call mode_ctrl + // [590] call mode_ctrl // [155] phi from mode_stdbitmap::@9 to mode_ctrl [phi:mode_stdbitmap::@9->mode_ctrl] // [155] phi (byte) dtv_control#144 = (byte) 0 [phi:mode_stdbitmap::@9->mode_ctrl#0] -- vbuz1=vbuc1 lda #0 @@ -31117,32 +31181,8 @@ mode_stdbitmap: { jsr mode_ctrl // mode_stdbitmap::@return // } - // [585] return + // [591] return rts - // mode_stdbitmap::@8 - b8: - // bitmap_line(lines_x[l], lines_x[l+1], lines_y[l], lines_y[l+1]) - // [586] (byte) bitmap_line::x0#0 ← *((const byte[]) mode_stdbitmap::lines_x#0 + (byte) mode_stdbitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy l - lda lines_x,y - sta bitmap_line.x0 - // [587] (byte) bitmap_line::x1#0 ← *((const byte[]) mode_stdbitmap::lines_x#0+(byte) 1 + (byte) mode_stdbitmap::l#2) -- vbuxx=pbuc1_derefidx_vbuz1 - ldx lines_x+1,y - // [588] (byte) bitmap_line::y0#0 ← *((const byte[]) mode_stdbitmap::lines_y#0 + (byte) mode_stdbitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 - lda lines_y,y - sta bitmap_line.y0 - // [589] (byte) bitmap_line::y1#0 ← *((const byte[]) mode_stdbitmap::lines_y#0+(byte) 1 + (byte) mode_stdbitmap::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 - lda lines_y+1,y - sta bitmap_line.y1 - // [590] call bitmap_line - jsr bitmap_line - // mode_stdbitmap::@11 - // for(byte l=0; lmode_stdbitmap::@7] - // [581] phi (byte) mode_stdbitmap::l#2 = (byte) mode_stdbitmap::l#1 [phi:mode_stdbitmap::@11->mode_stdbitmap::@7#0] -- register_copy - jmp b7 lines_x: .byte 0, $ff, $ff, 0, 0, $80, $ff, $80, 0, $80 lines_y: .byte 0, 0, $c7, $c7, 0, 0, $64, $c7, $64, 0 } @@ -32650,16 +32690,29 @@ memset: { .label str = menu.SCREEN .label end = str+num .label dst = 9 - // [888] phi from memset to memset::@1 [phi:memset->memset::@1] - // [888] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [888] phi from memset to memset::@2 [phi:memset->memset::@2] + // [888] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [888] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [888] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [889] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [889] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [890] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [891] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -32668,30 +32721,13 @@ memset: { bne b2 // memset::@return // } - // [890] return + // [892] return rts - // memset::@2 - b2: - // *dst = c - // [891] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [892] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [888] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [888] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // print_set_screen // Set the screen to print on. Also resets current line/char cursor. print_set_screen: { // print_set_screen::@return - // } // [894] return rts } diff --git a/src/test/ref/c64dtv-gfxmodes.sym b/src/test/ref/c64dtv-gfxmodes.sym index 16824539e..494b2f88e 100644 --- a/src/test/ref/c64dtv-gfxmodes.sym +++ b/src/test/ref/c64dtv-gfxmodes.sym @@ -481,8 +481,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:9 202.0 -(byte*) memset::dst#2 dst zp ZP_WORD:9 134.66666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:9 151.5 +(byte*) memset::dst#4 dst zp ZP_WORD:9 151.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -551,8 +551,8 @@ (byte*) menu::SCREEN (const byte*) menu::SCREEN#0 SCREEN = (byte*) 32768 (byte*) menu::c -(byte*) menu::c#1 c zp ZP_WORD:4 202.0 -(byte*) menu::c#2 c zp ZP_WORD:4 134.66666666666666 +(byte*) menu::c#1 c zp ZP_WORD:4 151.5 +(byte*) menu::c#4 c zp ZP_WORD:4 151.5 (byte) menu::i (byte) menu::i#1 reg byte x 151.5 (byte) menu::i#2 reg byte x 202.0 @@ -1055,8 +1055,8 @@ (byte) mode_stdbitmap::i#1 reg byte x 151.5 (byte) mode_stdbitmap::i#2 reg byte x 202.0 (byte) mode_stdbitmap::l -(byte) mode_stdbitmap::l#1 l zp ZP_BYTE:14 202.0 -(byte) mode_stdbitmap::l#2 l zp ZP_BYTE:14 101.0 +(byte) mode_stdbitmap::l#1 l zp ZP_BYTE:14 151.5 +(byte) mode_stdbitmap::l#5 l zp ZP_BYTE:14 100.99999999999999 (byte) mode_stdbitmap::lines_cnt (const byte) mode_stdbitmap::lines_cnt#0 lines_cnt = (byte) 9 (byte[]) mode_stdbitmap::lines_x @@ -1243,7 +1243,7 @@ reg byte x [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] reg byte x [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] reg byte x [ mode_stdchar::i#2 mode_stdchar::i#1 ] reg byte x [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] -zp ZP_WORD:4 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 menu::c#2 menu::c#1 ] +zp ZP_WORD:4 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#100 print_char_cursor#32 print_char_cursor#1 mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 menu::c#4 menu::c#1 ] reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ menu::$29 ] reg byte a [ keyboard_key_pressed::return#24 ] @@ -1330,7 +1330,7 @@ reg byte y [ bitmap_line::yd#1 ] reg byte y [ bitmap_line::yd#10 ] reg byte y [ bitmap_line::yd#11 ] reg byte x [ bitmap_line_xdyi::$6 ] -zp ZP_WORD:9 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 mode_8bppchunkybmm::$26 memset::dst#2 memset::dst#1 print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 ] +zp ZP_WORD:9 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 mode_8bppchunkybmm::$26 memset::dst#4 memset::dst#1 print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 ] zp ZP_WORD:11 [ bitmap_plot::plotter_y#0 print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 mode_stdchar::col#2 mode_stdchar::col#3 mode_stdchar::col#1 mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 mode_mcchar::col#2 mode_mcchar::col#3 mode_mcchar::col#1 mode_hicolstdchar::col#2 mode_hicolstdchar::col#3 mode_hicolstdchar::col#1 mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 mode_sixsfred2::gfxb#2 mode_sixsfred2::gfxb#3 mode_sixsfred2::gfxb#1 mode_twoplanebitmap::col#2 mode_twoplanebitmap::col#3 mode_twoplanebitmap::col#1 mode_sixsfred::gfxb#2 mode_sixsfred::gfxb#3 mode_sixsfred::gfxb#1 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::gfxa#3 mode_8bpppixelcell::gfxa#1 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 ] reg byte a [ bitmap_plot::$1 ] reg byte a [ bitmap_line_ydxi::$6 ] @@ -1354,7 +1354,7 @@ reg byte a [ mode_ecmchar::$31 ] reg byte a [ mode_stdchar::$25 ] reg byte a [ mode_stdchar::$26 ] reg byte a [ mode_stdchar::$27 ] -zp ZP_BYTE:14 [ mode_stdchar::$28 mode_twoplanebitmap::$17 mode_8bpppixelcell::$15 bitmap_clear::y#4 bitmap_clear::y#1 mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] +zp ZP_BYTE:14 [ mode_stdchar::$28 mode_twoplanebitmap::$17 mode_8bpppixelcell::$15 bitmap_clear::y#4 bitmap_clear::y#1 mode_stdbitmap::l#5 mode_stdbitmap::l#1 ] reg byte a [ mode_stdchar::$29 ] reg byte a [ mode_stdchar::$30 ] reg byte a [ print_str_lines::ch#0 ] diff --git a/src/test/ref/comma-decl-for.asm b/src/test/ref/comma-decl-for.asm index 075cd5fea..07a9acf7f 100644 --- a/src/test/ref/comma-decl-for.asm +++ b/src/test/ref/comma-decl-for.asm @@ -6,14 +6,12 @@ main: { .label SCREEN = $400 lda #'g' ldx #0 - b1: - cpx #$a - bcc b2 - rts b2: sta SCREEN,x inx clc adc #1 - jmp b1 + cpx #$a + bcc b2 + rts } diff --git a/src/test/ref/comma-decl-for.cfg b/src/test/ref/comma-decl-for.cfg index ebbac675e..0faf95191 100644 --- a/src/test/ref/comma-decl-for.cfg +++ b/src/test/ref/comma-decl-for.cfg @@ -9,17 +9,17 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main/(byte) 'g' ) + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::j#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 + [8] (byte) main::j#1 ← ++ (byte) main::j#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::j#2 ← phi( main/(byte) 'g' main::@2/(byte) main::j#1 ) - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((byte) main::i#1<(byte) $a) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::j#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - [10] (byte) main::j#1 ← ++ (byte) main::j#2 - to:main::@1 diff --git a/src/test/ref/comma-decl-for.log b/src/test/ref/comma-decl-for.log index 9732a0287..672e568bc 100644 --- a/src/test/ref/comma-decl-for.log +++ b/src/test/ref/comma-decl-for.log @@ -75,24 +75,37 @@ Constant (const byte*) main::SCREEN#0 = (byte*) 1024 Constant (const byte) main::i#0 = 0 Constant (const byte) main::j#0 = 'g' Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Alias (byte) main::j#1 = (byte) main::j#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Identical Phi Values (byte) main::j#5 (const byte) main::j#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [10] if((const byte) main::i#0<(byte) $a) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::j#0 Constant inlined main::i#0 = (byte) 0 Constant inlined main::j#0 = (byte) 'g' Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 2 initial phi equivalence classes -Coalesced [12] main::i#4 ← main::i#1 -Coalesced [13] main::j#4 ← main::j#1 +Coalesced [13] main::i#6 ← main::i#1 +Coalesced [14] main::j#6 ← main::j#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -110,20 +123,20 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main/(byte) 'g' ) + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::j#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 + [8] (byte) main::j#1 ← ++ (byte) main::j#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::j#2 ← phi( main/(byte) 'g' main::@2/(byte) main::j#1 ) - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((byte) main::i#1<(byte) $a) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::j#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - [10] (byte) main::j#1 ← ++ (byte) main::j#2 - to:main::@1 VARIABLE REGISTER WEIGHTS @@ -131,19 +144,19 @@ VARIABLE REGISTER WEIGHTS (byte*) main::SCREEN (byte) main::i (byte) main::i#1 11.0 -(byte) main::i#2 14.666666666666666 +(byte) main::i#4 16.5 (byte) main::j -(byte) main::j#1 22.0 -(byte) main::j#2 8.25 +(byte) main::j#1 11.0 +(byte) main::j#4 11.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] -[ main::j#2 main::j#1 ] +[ main::i#4 main::i#1 ] +[ main::j#4 main::j#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ main::j#2 main::j#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::j#2 main::j#1 ] +[ main::i#4 main::i#1 ] +[ main::j#4 main::j#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::j#4 main::j#1 ] INITIAL ASM Target platform is c64basic @@ -175,54 +188,55 @@ main: { .label SCREEN = $400 .label i = 2 .label j = 3 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::j#2 = (byte) 'g' [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::j#4 = (byte) 'g' [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #'g' sta j - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#1] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$a - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 // main::@2 b2: - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::j#4 -- pbuc1_derefidx_vbuz1=vbuz2 lda j ldy i sta SCREEN,y - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 inc i - // [10] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuz1=_inc_vbuz1 + // [8] (byte) main::j#1 ← ++ (byte) main::j#4 -- vbuz1=_inc_vbuz1 inc j - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy jmp b1 + // main::@1 + b1: + // [9] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$a + bcc b2_from_b1 + jmp breturn + // main::@return + breturn: + // [10] return + rts } // File Data 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:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::j#4 main::j#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 30.25: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] 25.67: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 27.5: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] 22: zp ZP_BYTE:3 [ main::j#4 main::j#1 ] Uplift Scope [] -Uplifting [main] best 303 combination reg byte a [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 303 combination +Uplifting [main] best 333 combination reg byte x [ main::i#4 main::i#1 ] reg byte a [ main::j#4 main::j#1 ] +Uplifting [] best 333 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -251,59 +265,65 @@ bend: // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::j#2 = (byte) 'g' [phi:main->main::@1#0] -- vbuaa=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::j#4 = (byte) 'g' [phi:main->main::@2#0] -- vbuaa=vbuc1 lda #'g' - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#1] -- vbuxx=vbuc1 ldx #0 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::j#4 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN,x + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx + // [8] (byte) main::j#1 ← ++ (byte) main::j#4 -- vbuaa=_inc_vbuaa + clc + adc #1 jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [9] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a - bcc b2 + bcc b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [10] return rts - // main::@2 - b2: - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN,x - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [10] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuaa=_inc_vbuaa - clc - adc #1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -319,17 +339,17 @@ FINAL SYMBOL TABLE (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i (byte) main::i#1 reg byte x 11.0 -(byte) main::i#2 reg byte x 14.666666666666666 +(byte) main::i#4 reg byte x 16.5 (byte) main::j -(byte) main::j#1 reg byte a 22.0 -(byte) main::j#2 reg byte a 8.25 +(byte) main::j#1 reg byte a 11.0 +(byte) main::j#4 reg byte a 11.0 -reg byte x [ main::i#2 main::i#1 ] -reg byte a [ main::j#2 main::j#1 ] +reg byte x [ main::i#4 main::i#1 ] +reg byte a [ main::j#4 main::j#1 ] FINAL ASSEMBLER -Score: 231 +Score: 201 // File Comments // Tests comma-separated declarations inside for() @@ -348,36 +368,33 @@ Score: 231 // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::j#2 = (byte) 'g' [phi:main->main::@1#0] -- vbuaa=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::j#4 = (byte) 'g' [phi:main->main::@2#0] -- vbuaa=vbuc1 lda #'g' - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#1] -- vbuxx=vbuc1 ldx #0 - // main::@1 - b1: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + // main::@2 + b2: + // SCREEN[i] = j + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::j#4 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN,x // for(byte i, j='g'; i<10; i++, j++) - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx + // [8] (byte) main::j#1 ← ++ (byte) main::j#4 -- vbuaa=_inc_vbuaa + clc + adc #1 + // main::@1 + // [9] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 // main::@return // } - // [7] return + // [10] return rts - // main::@2 - b2: - // SCREEN[i] = j - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN,x - // for(byte i, j='g'; i<10; i++, j++) - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [10] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuaa=_inc_vbuaa - clc - adc #1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/comma-decl-for.sym b/src/test/ref/comma-decl-for.sym index af008f453..82ee37000 100644 --- a/src/test/ref/comma-decl-for.sym +++ b/src/test/ref/comma-decl-for.sym @@ -9,10 +9,10 @@ (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i (byte) main::i#1 reg byte x 11.0 -(byte) main::i#2 reg byte x 14.666666666666666 +(byte) main::i#4 reg byte x 16.5 (byte) main::j -(byte) main::j#1 reg byte a 22.0 -(byte) main::j#2 reg byte a 8.25 +(byte) main::j#1 reg byte a 11.0 +(byte) main::j#4 reg byte a 11.0 -reg byte x [ main::i#2 main::i#1 ] -reg byte a [ main::j#2 main::j#1 ] +reg byte x [ main::i#4 main::i#1 ] +reg byte a [ main::j#4 main::j#1 ] diff --git a/src/test/ref/comma-expr-for.asm b/src/test/ref/comma-expr-for.asm index 39aa0f5c2..675a19bd9 100644 --- a/src/test/ref/comma-expr-for.asm +++ b/src/test/ref/comma-expr-for.asm @@ -6,14 +6,12 @@ main: { .label SCREEN = $400 lda #'g' ldx #0 - b1: - cpx #$a - bcc b2 - rts b2: sta SCREEN,x inx clc adc #1 - jmp b1 + cpx #$a + bcc b2 + rts } diff --git a/src/test/ref/comma-expr-for.cfg b/src/test/ref/comma-expr-for.cfg index ebbac675e..0faf95191 100644 --- a/src/test/ref/comma-expr-for.cfg +++ b/src/test/ref/comma-expr-for.cfg @@ -9,17 +9,17 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main/(byte) 'g' ) + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::j#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 + [8] (byte) main::j#1 ← ++ (byte) main::j#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::j#2 ← phi( main/(byte) 'g' main::@2/(byte) main::j#1 ) - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((byte) main::i#1<(byte) $a) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::j#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - [10] (byte) main::j#1 ← ++ (byte) main::j#2 - to:main::@1 diff --git a/src/test/ref/comma-expr-for.log b/src/test/ref/comma-expr-for.log index 81ab6f549..0a59fa9fa 100644 --- a/src/test/ref/comma-expr-for.log +++ b/src/test/ref/comma-expr-for.log @@ -79,24 +79,37 @@ Constant (const byte*) main::SCREEN#0 = (byte*) 1024 Constant (const byte) main::j#0 = 'g' Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Alias (byte) main::j#1 = (byte) main::j#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Identical Phi Values (byte) main::j#5 (const byte) main::j#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [10] if((const byte) main::i#0<(byte) $a) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::j#0 Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Constant inlined main::j#0 = (byte) 'g' Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 2 initial phi equivalence classes -Coalesced [12] main::i#4 ← main::i#1 -Coalesced [13] main::j#4 ← main::j#1 +Coalesced [13] main::i#6 ← main::i#1 +Coalesced [14] main::j#6 ← main::j#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -114,20 +127,20 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main/(byte) 'g' ) + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::j#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 + [8] (byte) main::j#1 ← ++ (byte) main::j#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::j#2 ← phi( main/(byte) 'g' main::@2/(byte) main::j#1 ) - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((byte) main::i#1<(byte) $a) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::j#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - [10] (byte) main::j#1 ← ++ (byte) main::j#2 - to:main::@1 VARIABLE REGISTER WEIGHTS @@ -135,19 +148,19 @@ VARIABLE REGISTER WEIGHTS (byte*) main::SCREEN (byte) main::i (byte) main::i#1 11.0 -(byte) main::i#2 14.666666666666666 +(byte) main::i#4 16.5 (byte) main::j -(byte) main::j#1 22.0 -(byte) main::j#2 8.25 +(byte) main::j#1 11.0 +(byte) main::j#4 11.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] -[ main::j#2 main::j#1 ] +[ main::i#4 main::i#1 ] +[ main::j#4 main::j#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ main::j#2 main::j#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::j#2 main::j#1 ] +[ main::i#4 main::i#1 ] +[ main::j#4 main::j#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::j#4 main::j#1 ] INITIAL ASM Target platform is c64basic @@ -179,54 +192,55 @@ main: { .label SCREEN = $400 .label i = 2 .label j = 3 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::j#2 = (byte) 'g' [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::j#4 = (byte) 'g' [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #'g' sta j - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#1] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$a - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 // main::@2 b2: - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::j#4 -- pbuc1_derefidx_vbuz1=vbuz2 lda j ldy i sta SCREEN,y - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 inc i - // [10] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuz1=_inc_vbuz1 + // [8] (byte) main::j#1 ← ++ (byte) main::j#4 -- vbuz1=_inc_vbuz1 inc j - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy jmp b1 + // main::@1 + b1: + // [9] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$a + bcc b2_from_b1 + jmp breturn + // main::@return + breturn: + // [10] return + rts } // File Data 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:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::j#4 main::j#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 30.25: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] 25.67: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 27.5: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] 22: zp ZP_BYTE:3 [ main::j#4 main::j#1 ] Uplift Scope [] -Uplifting [main] best 303 combination reg byte a [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 303 combination +Uplifting [main] best 333 combination reg byte x [ main::i#4 main::i#1 ] reg byte a [ main::j#4 main::j#1 ] +Uplifting [] best 333 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -255,59 +269,65 @@ bend: // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::j#2 = (byte) 'g' [phi:main->main::@1#0] -- vbuaa=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::j#4 = (byte) 'g' [phi:main->main::@2#0] -- vbuaa=vbuc1 lda #'g' - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#1] -- vbuxx=vbuc1 ldx #0 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::j#4 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN,x + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx + // [8] (byte) main::j#1 ← ++ (byte) main::j#4 -- vbuaa=_inc_vbuaa + clc + adc #1 jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [9] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a - bcc b2 + bcc b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [10] return rts - // main::@2 - b2: - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN,x - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [10] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuaa=_inc_vbuaa - clc - adc #1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -323,17 +343,17 @@ FINAL SYMBOL TABLE (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i (byte) main::i#1 reg byte x 11.0 -(byte) main::i#2 reg byte x 14.666666666666666 +(byte) main::i#4 reg byte x 16.5 (byte) main::j -(byte) main::j#1 reg byte a 22.0 -(byte) main::j#2 reg byte a 8.25 +(byte) main::j#1 reg byte a 11.0 +(byte) main::j#4 reg byte a 11.0 -reg byte x [ main::i#2 main::i#1 ] -reg byte a [ main::j#2 main::j#1 ] +reg byte x [ main::i#4 main::i#1 ] +reg byte a [ main::j#4 main::j#1 ] FINAL ASSEMBLER -Score: 231 +Score: 201 // File Comments // Tests comma-expressions in for()-statement @@ -352,36 +372,33 @@ Score: 231 // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::j#2 = (byte) 'g' [phi:main->main::@1#0] -- vbuaa=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::j#4 = (byte) 'g' [phi:main->main::@2#0] -- vbuaa=vbuc1 lda #'g' - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#1] -- vbuxx=vbuc1 ldx #0 - // main::@1 - b1: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + // main::@2 + b2: + // SCREEN[i] = j + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::j#4 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN,x // for( byte i=0; j<10, i<10; i++, j++) - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx + // [8] (byte) main::j#1 ← ++ (byte) main::j#4 -- vbuaa=_inc_vbuaa + clc + adc #1 + // main::@1 + // [9] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 // main::@return // } - // [7] return + // [10] return rts - // main::@2 - b2: - // SCREEN[i] = j - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN,x - // for( byte i=0; j<10, i<10; i++, j++) - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [10] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuaa=_inc_vbuaa - clc - adc #1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/comma-expr-for.sym b/src/test/ref/comma-expr-for.sym index af008f453..82ee37000 100644 --- a/src/test/ref/comma-expr-for.sym +++ b/src/test/ref/comma-expr-for.sym @@ -9,10 +9,10 @@ (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i (byte) main::i#1 reg byte x 11.0 -(byte) main::i#2 reg byte x 14.666666666666666 +(byte) main::i#4 reg byte x 16.5 (byte) main::j -(byte) main::j#1 reg byte a 22.0 -(byte) main::j#2 reg byte a 8.25 +(byte) main::j#1 reg byte a 11.0 +(byte) main::j#4 reg byte a 11.0 -reg byte x [ main::i#2 main::i#1 ] -reg byte a [ main::j#2 main::j#1 ] +reg byte x [ main::i#4 main::i#1 ] +reg byte a [ main::j#4 main::j#1 ] diff --git a/src/test/ref/comparison-rewriting-pointer.asm b/src/test/ref/comparison-rewriting-pointer.asm index 8bd7ea09d..bde169ded 100644 --- a/src/test/ref/comparison-rewriting-pointer.asm +++ b/src/test/ref/comparison-rewriting-pointer.asm @@ -11,7 +11,14 @@ main: { sta sc lda #>screen sta sc+1 - b1: + b2: + lda #'a' + ldy #0 + sta (sc),y + inc sc + bne !+ + inc sc+1 + !: lda sc+1 cmp #>screen+$3e7 bne !+ @@ -24,16 +31,6 @@ main: { sta cc lda #>cols+$3e7 sta cc+1 - b3: - lda #>cols-1 - cmp cc+1 - bcc b4 - bne !+ - lda #cols-1 + cmp cc+1 + bcc b4 bne !+ - inc sc+1 + lda #(const byte*) main::cols#0-(byte) 1) goto main::@4 +main::@3: scope:[main] from main::@4 + [12] if((byte*) main::cc#1>(const byte*) main::cols#0-(byte) 1) goto main::@4 to:main::@return main::@return: scope:[main] from main::@3 - [9] return + [13] return to:@return -main::@4: scope:[main] from main::@3 - [10] *((byte*) main::cc#2) ← (byte) 2 - [11] (byte*) main::cc#1 ← -- (byte*) main::cc#2 - to:main::@3 -main::@2: scope:[main] from main::@1 - [12] *((byte*) main::sc#2) ← (byte) 'a' - [13] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 - to:main::@1 diff --git a/src/test/ref/comparison-rewriting-pointer.log b/src/test/ref/comparison-rewriting-pointer.log index 6fa6e21de..685465641 100644 --- a/src/test/ref/comparison-rewriting-pointer.log +++ b/src/test/ref/comparison-rewriting-pointer.log @@ -122,26 +122,45 @@ Constant (const byte*) main::$0 = main::screen#0+$3e7 Constant (const byte*) main::cc#0 = main::cols#0+$3e7 Constant (const byte*) main::$3 = main::cols#0-1 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) main::sc#1 = (byte*) main::sc#2 +Alias (byte*) main::cc#1 = (byte*) main::cc#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) main::sc#5 (const byte*) main::screen#0 +Identical Phi Values (byte*) main::cc#5 (const byte*) main::cc#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [15] if((const byte*) main::screen#0<=(const byte*) main::$0) goto main::@2 +if() condition always true - replacing block destination [17] if((const byte*) main::cc#0>(const byte*) main::$3) goto main::@8 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte*) main::cc#0 Constant inlined main::$3 = (const byte*) main::cols#0-(byte) 1 Constant inlined main::cc#0 = (const byte*) main::cols#0+(word) $3e7 Constant inlined main::$0 = (const byte*) main::screen#0+(word) $3e7 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@13(between main::@1 and main::@2) +Added new block during phi lifting main::@14(between main::@7 and main::@8) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of main::@7_1 CALL GRAPH Calls in [] to main:2 Created 2 initial phi equivalence classes -Coalesced [14] main::cc#4 ← main::cc#1 -Coalesced [17] main::sc#4 ← main::sc#1 +Coalesced [18] main::cc#6 ← main::cc#1 +Coalesced [19] main::sc#6 ← main::sc#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@3 +Culled Empty Block (label) main::@7_1 +Culled Empty Block (label) main::@14 +Culled Empty Block (label) main::@13 Renumbering block main::@7 to main::@3 Renumbering block main::@8 to main::@4 Adding NOP phi() at start of @begin @@ -161,47 +180,47 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::sc#4 ← phi( main::@1/(byte*) main::sc#1 main/(const byte*) main::screen#0 ) + [6] *((byte*) main::sc#4) ← (byte) 'a' + [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::sc#2 ← phi( main/(const byte*) main::screen#0 main::@2/(byte*) main::sc#1 ) - [6] if((byte*) main::sc#2<=(const byte*) main::screen#0+(word) $3e7) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte*) main::sc#1<=(const byte*) main::screen#0+(word) $3e7) goto main::@2 + to:main::@4 +main::@4: scope:[main] from main::@1 main::@3 + [9] (byte*) main::cc#4 ← phi( main::@3/(byte*) main::cc#1 main::@1/(const byte*) main::cols#0+(word) $3e7 ) + [10] *((byte*) main::cc#4) ← (byte) 2 + [11] (byte*) main::cc#1 ← -- (byte*) main::cc#4 to:main::@3 -main::@3: scope:[main] from main::@1 main::@4 - [7] (byte*) main::cc#2 ← phi( main::@1/(const byte*) main::cols#0+(word) $3e7 main::@4/(byte*) main::cc#1 ) - [8] if((byte*) main::cc#2>(const byte*) main::cols#0-(byte) 1) goto main::@4 +main::@3: scope:[main] from main::@4 + [12] if((byte*) main::cc#1>(const byte*) main::cols#0-(byte) 1) goto main::@4 to:main::@return main::@return: scope:[main] from main::@3 - [9] return + [13] return to:@return -main::@4: scope:[main] from main::@3 - [10] *((byte*) main::cc#2) ← (byte) 2 - [11] (byte*) main::cc#1 ← -- (byte*) main::cc#2 - to:main::@3 -main::@2: scope:[main] from main::@1 - [12] *((byte*) main::sc#2) ← (byte) 'a' - [13] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 - to:main::@1 VARIABLE REGISTER WEIGHTS (void()) main() (byte*) main::cc -(byte*) main::cc#1 22.0 -(byte*) main::cc#2 14.666666666666666 +(byte*) main::cc#1 16.5 +(byte*) main::cc#4 16.5 (byte*) main::cols (byte*) main::sc -(byte*) main::sc#1 22.0 -(byte*) main::sc#2 14.666666666666666 +(byte*) main::sc#1 16.5 +(byte*) main::sc#4 16.5 (byte*) main::screen Initial phi equivalence classes -[ main::sc#2 main::sc#1 ] -[ main::cc#2 main::cc#1 ] +[ main::sc#4 main::sc#1 ] +[ main::cc#4 main::cc#1 ] Complete equivalence classes -[ main::sc#2 main::sc#1 ] -[ main::cc#2 main::cc#1 ] -Allocated zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] -Allocated zp ZP_WORD:4 [ main::cc#2 main::cc#1 ] +[ main::sc#4 main::sc#1 ] +[ main::cc#4 main::cc#1 ] +Allocated zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] +Allocated zp ZP_WORD:4 [ main::cc#4 main::cc#1 ] INITIAL ASM Target platform is c64basic @@ -234,98 +253,100 @@ main: { .label cols = $d800 .label sc = 2 .label cc = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::sc#2 = (const byte*) main::screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::sc#4 = (const byte*) main::screen#0 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #screen sta sc+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((byte*) main::sc#4) ← (byte) 'a' -- _deref_pbuz1=vbuc1 + lda #'a' + ldy #0 + sta (sc),y + // [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: jmp b1 // main::@1 b1: - // [6] if((byte*) main::sc#2<=(const byte*) main::screen#0+(word) $3e7) goto main::@2 -- pbuz1_le_pbuc1_then_la1 + // [8] if((byte*) main::sc#1<=(const byte*) main::screen#0+(word) $3e7) goto main::@2 -- pbuz1_le_pbuc1_then_la1 lda sc+1 cmp #>screen+$3e7 bne !+ lda sc cmp #main::@3] - b3_from_b1: - // [7] phi (byte*) main::cc#2 = (const byte*) main::cols#0+(word) $3e7 [phi:main::@1->main::@3#0] -- pbuz1=pbuc1 + bcc b2_from_b1 + beq b2_from_b1 + // [9] phi from main::@1 to main::@4 [phi:main::@1->main::@4] + b4_from_b1: + // [9] phi (byte*) main::cc#4 = (const byte*) main::cols#0+(word) $3e7 [phi:main::@1->main::@4#0] -- pbuz1=pbuc1 lda #cols+$3e7 sta cc+1 - jmp b3 - // main::@3 - b3: - // [8] if((byte*) main::cc#2>(const byte*) main::cols#0-(byte) 1) goto main::@4 -- pbuz1_gt_pbuc1_then_la1 - lda #>cols-1 - cmp cc+1 - bcc b4 - bne !+ - lda #main::@4] + b4_from_b3: + // [9] phi (byte*) main::cc#4 = (byte*) main::cc#1 [phi:main::@3->main::@4#0] -- register_copy + jmp b4 // main::@4 b4: - // [10] *((byte*) main::cc#2) ← (byte) 2 -- _deref_pbuz1=vbuc1 + // [10] *((byte*) main::cc#4) ← (byte) 2 -- _deref_pbuz1=vbuc1 lda #2 ldy #0 sta (cc),y - // [11] (byte*) main::cc#1 ← -- (byte*) main::cc#2 -- pbuz1=_dec_pbuz1 + // [11] (byte*) main::cc#1 ← -- (byte*) main::cc#4 -- pbuz1=_dec_pbuz1 lda cc bne !+ dec cc+1 !: dec cc - // [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - b3_from_b4: - // [7] phi (byte*) main::cc#2 = (byte*) main::cc#1 [phi:main::@4->main::@3#0] -- register_copy jmp b3 - // main::@2 - b2: - // [12] *((byte*) main::sc#2) ← (byte) 'a' -- _deref_pbuz1=vbuc1 - lda #'a' - ldy #0 - sta (sc),y - // [13] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 -- pbuz1=_inc_pbuz1 - inc sc + // main::@3 + b3: + // [12] if((byte*) main::cc#1>(const byte*) main::cols#0-(byte) 1) goto main::@4 -- pbuz1_gt_pbuc1_then_la1 + lda #>cols-1 + cmp cc+1 + bcc b4_from_b3 bne !+ - inc sc+1 + lda #main::@1] - b1_from_b2: - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 + jmp breturn + // main::@return + breturn: + // [13] return + rts } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if((byte*) main::sc#2<=(const byte*) main::screen#0+(word) $3e7) goto main::@2 [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a -Statement [8] if((byte*) main::cc#2>(const byte*) main::cols#0-(byte) 1) goto main::@4 [ main::cc#2 ] ( main:2 [ main::cc#2 ] ) always clobbers reg byte a -Statement [10] *((byte*) main::cc#2) ← (byte) 2 [ main::cc#2 ] ( main:2 [ main::cc#2 ] ) always clobbers reg byte a reg byte y -Statement [11] (byte*) main::cc#1 ← -- (byte*) main::cc#2 [ main::cc#1 ] ( main:2 [ main::cc#1 ] ) always clobbers reg byte a -Statement [12] *((byte*) main::sc#2) ← (byte) 'a' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] : zp ZP_WORD:2 , -Potential registers zp ZP_WORD:4 [ main::cc#2 main::cc#1 ] : zp ZP_WORD:4 , +Statement [6] *((byte*) main::sc#4) ← (byte) 'a' [ main::sc#4 ] ( main:2 [ main::sc#4 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::sc#1<=(const byte*) main::screen#0+(word) $3e7) goto main::@2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a +Statement [10] *((byte*) main::cc#4) ← (byte) 2 [ main::cc#4 ] ( main:2 [ main::cc#4 ] ) always clobbers reg byte a reg byte y +Statement [11] (byte*) main::cc#1 ← -- (byte*) main::cc#4 [ main::cc#1 ] ( main:2 [ main::cc#1 ] ) always clobbers reg byte a +Statement [12] if((byte*) main::cc#1>(const byte*) main::cols#0-(byte) 1) goto main::@4 [ main::cc#1 ] ( main:2 [ main::cc#1 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] : zp ZP_WORD:2 , +Potential registers zp ZP_WORD:4 [ main::cc#4 main::cc#1 ] : zp ZP_WORD:4 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 36.67: zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] 36.67: zp ZP_WORD:4 [ main::cc#2 main::cc#1 ] +Uplift Scope [main] 33: zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] 33: zp ZP_WORD:4 [ main::cc#4 main::cc#1 ] Uplift Scope [] -Uplifting [main] best 1198 combination zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] zp ZP_WORD:4 [ main::cc#2 main::cc#1 ] -Uplifting [] best 1198 combination +Uplifting [main] best 1258 combination zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] zp ZP_WORD:4 [ main::cc#4 main::cc#1 ] +Uplifting [] best 1258 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -357,105 +378,118 @@ main: { .label cols = $d800 .label sc = 2 .label cc = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::sc#2 = (const byte*) main::screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::sc#4 = (const byte*) main::screen#0 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #screen sta sc+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((byte*) main::sc#4) ← (byte) 'a' -- _deref_pbuz1=vbuc1 + lda #'a' + ldy #0 + sta (sc),y + // [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: jmp b1 // main::@1 b1: - // [6] if((byte*) main::sc#2<=(const byte*) main::screen#0+(word) $3e7) goto main::@2 -- pbuz1_le_pbuc1_then_la1 + // [8] if((byte*) main::sc#1<=(const byte*) main::screen#0+(word) $3e7) goto main::@2 -- pbuz1_le_pbuc1_then_la1 lda sc+1 cmp #>screen+$3e7 bne !+ lda sc cmp #main::@3] - b3_from_b1: - // [7] phi (byte*) main::cc#2 = (const byte*) main::cols#0+(word) $3e7 [phi:main::@1->main::@3#0] -- pbuz1=pbuc1 + bcc b2_from_b1 + beq b2_from_b1 + // [9] phi from main::@1 to main::@4 [phi:main::@1->main::@4] + b4_from_b1: + // [9] phi (byte*) main::cc#4 = (const byte*) main::cols#0+(word) $3e7 [phi:main::@1->main::@4#0] -- pbuz1=pbuc1 lda #cols+$3e7 sta cc+1 - jmp b3 - // main::@3 - b3: - // [8] if((byte*) main::cc#2>(const byte*) main::cols#0-(byte) 1) goto main::@4 -- pbuz1_gt_pbuc1_then_la1 - lda #>cols-1 - cmp cc+1 - bcc b4 - bne !+ - lda #main::@4] + b4_from_b3: + // [9] phi (byte*) main::cc#4 = (byte*) main::cc#1 [phi:main::@3->main::@4#0] -- register_copy + jmp b4 // main::@4 b4: - // [10] *((byte*) main::cc#2) ← (byte) 2 -- _deref_pbuz1=vbuc1 + // [10] *((byte*) main::cc#4) ← (byte) 2 -- _deref_pbuz1=vbuc1 lda #2 ldy #0 sta (cc),y - // [11] (byte*) main::cc#1 ← -- (byte*) main::cc#2 -- pbuz1=_dec_pbuz1 + // [11] (byte*) main::cc#1 ← -- (byte*) main::cc#4 -- pbuz1=_dec_pbuz1 lda cc bne !+ dec cc+1 !: dec cc - // [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - b3_from_b4: - // [7] phi (byte*) main::cc#2 = (byte*) main::cc#1 [phi:main::@4->main::@3#0] -- register_copy jmp b3 - // main::@2 - b2: - // [12] *((byte*) main::sc#2) ← (byte) 'a' -- _deref_pbuz1=vbuc1 - lda #'a' - ldy #0 - sta (sc),y - // [13] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 -- pbuz1=_inc_pbuz1 - inc sc + // main::@3 + b3: + // [12] if((byte*) main::cc#1>(const byte*) main::cols#0-(byte) 1) goto main::@4 -- pbuz1_gt_pbuc1_then_la1 + lda #>cols-1 + cmp cc+1 + bcc b4_from_b3 bne !+ - inc sc+1 + lda #main::@1] - b1_from_b2: - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 + jmp breturn + // main::@return + breturn: + // [13] return + rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 +Removing instruction jmp b4 Removing instruction jmp b3 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b4_from_b3 with b4 +Replacing label b4_from_b3 with b4 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: +Removing instruction b4_from_b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b3_from_b1: +Removing instruction b2_from_main: +Removing instruction b1: +Removing instruction b4_from_b1: +Removing instruction b3: Removing instruction breturn: -Removing instruction b3_from_b4: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Removing instruction jmp b4 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -470,22 +504,22 @@ FINAL SYMBOL TABLE (label) main::@4 (label) main::@return (byte*) main::cc -(byte*) main::cc#1 cc zp ZP_WORD:4 22.0 -(byte*) main::cc#2 cc zp ZP_WORD:4 14.666666666666666 +(byte*) main::cc#1 cc zp ZP_WORD:4 16.5 +(byte*) main::cc#4 cc zp ZP_WORD:4 16.5 (byte*) main::cols (const byte*) main::cols#0 cols = (byte*) 55296 (byte*) main::sc -(byte*) main::sc#1 sc zp ZP_WORD:2 22.0 -(byte*) main::sc#2 sc zp ZP_WORD:2 14.666666666666666 +(byte*) main::sc#1 sc zp ZP_WORD:2 16.5 +(byte*) main::sc#4 sc zp ZP_WORD:2 16.5 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] -zp ZP_WORD:4 [ main::cc#2 main::cc#1 ] +zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] +zp ZP_WORD:4 [ main::cc#4 main::cc#1 ] FINAL ASSEMBLER -Score: 1096 +Score: 1036 // File Comments // Test rewriting of constant comparisons for pointers @@ -507,16 +541,29 @@ main: { .label cols = $d800 .label sc = 2 .label cc = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte*) main::sc#2 = (const byte*) main::screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte*) main::sc#4 = (const byte*) main::screen#0 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #screen sta sc+1 - // main::@1 - b1: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // *sc='a' + // [6] *((byte*) main::sc#4) ← (byte) 'a' -- _deref_pbuz1=vbuc1 + lda #'a' + ldy #0 + sta (sc),y // for(byte* sc =screen;sc<=screen+999;sc++) - // [6] if((byte*) main::sc#2<=(const byte*) main::screen#0+(word) $3e7) goto main::@2 -- pbuz1_le_pbuc1_then_la1 + // [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + // main::@1 + // [8] if((byte*) main::sc#1<=(const byte*) main::screen#0+(word) $3e7) goto main::@2 -- pbuz1_le_pbuc1_then_la1 lda sc+1 cmp #>screen+$3e7 bne !+ @@ -525,16 +572,30 @@ main: { !: bcc b2 beq b2 - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - // [7] phi (byte*) main::cc#2 = (const byte*) main::cols#0+(word) $3e7 [phi:main::@1->main::@3#0] -- pbuz1=pbuc1 + // [9] phi from main::@1 to main::@4 [phi:main::@1->main::@4] + // [9] phi (byte*) main::cc#4 = (const byte*) main::cols#0+(word) $3e7 [phi:main::@1->main::@4#0] -- pbuz1=pbuc1 lda #cols+$3e7 sta cc+1 - // main::@3 - b3: + // [9] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [9] phi (byte*) main::cc#4 = (byte*) main::cc#1 [phi:main::@3->main::@4#0] -- register_copy + // main::@4 + b4: + // *cc=2 + // [10] *((byte*) main::cc#4) ← (byte) 2 -- _deref_pbuz1=vbuc1 + lda #2 + ldy #0 + sta (cc),y // for(byte* cc =cols+999;cc>cols-1;cc--) - // [8] if((byte*) main::cc#2>(const byte*) main::cols#0-(byte) 1) goto main::@4 -- pbuz1_gt_pbuc1_then_la1 + // [11] (byte*) main::cc#1 ← -- (byte*) main::cc#4 -- pbuz1=_dec_pbuz1 + lda cc + bne !+ + dec cc+1 + !: + dec cc + // main::@3 + // [12] if((byte*) main::cc#1>(const byte*) main::cols#0-(byte) 1) goto main::@4 -- pbuz1_gt_pbuc1_then_la1 lda #>cols-1 cmp cc+1 bcc b4 @@ -545,41 +606,8 @@ main: { !: // main::@return // } - // [9] return + // [13] return rts - // main::@4 - b4: - // *cc=2 - // [10] *((byte*) main::cc#2) ← (byte) 2 -- _deref_pbuz1=vbuc1 - lda #2 - ldy #0 - sta (cc),y - // for(byte* cc =cols+999;cc>cols-1;cc--) - // [11] (byte*) main::cc#1 ← -- (byte*) main::cc#2 -- pbuz1=_dec_pbuz1 - lda cc - bne !+ - dec cc+1 - !: - dec cc - // [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - // [7] phi (byte*) main::cc#2 = (byte*) main::cc#1 [phi:main::@4->main::@3#0] -- register_copy - jmp b3 - // main::@2 - b2: - // *sc='a' - // [12] *((byte*) main::sc#2) ← (byte) 'a' -- _deref_pbuz1=vbuc1 - lda #'a' - ldy #0 - sta (sc),y - // for(byte* sc =screen;sc<=screen+999;sc++) - // [13] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/comparison-rewriting-pointer.sym b/src/test/ref/comparison-rewriting-pointer.sym index b9f11a954..3a1ee2d29 100644 --- a/src/test/ref/comparison-rewriting-pointer.sym +++ b/src/test/ref/comparison-rewriting-pointer.sym @@ -8,15 +8,15 @@ (label) main::@4 (label) main::@return (byte*) main::cc -(byte*) main::cc#1 cc zp ZP_WORD:4 22.0 -(byte*) main::cc#2 cc zp ZP_WORD:4 14.666666666666666 +(byte*) main::cc#1 cc zp ZP_WORD:4 16.5 +(byte*) main::cc#4 cc zp ZP_WORD:4 16.5 (byte*) main::cols (const byte*) main::cols#0 cols = (byte*) 55296 (byte*) main::sc -(byte*) main::sc#1 sc zp ZP_WORD:2 22.0 -(byte*) main::sc#2 sc zp ZP_WORD:2 14.666666666666666 +(byte*) main::sc#1 sc zp ZP_WORD:2 16.5 +(byte*) main::sc#4 sc zp ZP_WORD:2 16.5 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] -zp ZP_WORD:4 [ main::cc#2 main::cc#1 ] +zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] +zp ZP_WORD:4 [ main::cc#4 main::cc#1 ] diff --git a/src/test/ref/comparison-rewriting.asm b/src/test/ref/comparison-rewriting.asm index f7a1385ab..2b81188f5 100644 --- a/src/test/ref/comparison-rewriting.asm +++ b/src/test/ref/comparison-rewriting.asm @@ -28,30 +28,14 @@ main: { lda header,x cmp #0 bne b3 - lda #<$400 + lda #'0' + sta $400+$28 + lda #<$400+$28 sta screen - lda #>$400 + lda #>$400+$28 sta screen+1 ldx #0 - b4: - cpx #9+1 - bcc b5 - rts - b5: - lda #$28 - clc - adc screen - sta screen - bcc !+ - inc screen+1 - !: - txa - clc - adc #'0' - ldy #0 - sta (screen),y - cpx #5 - bcs b6 + b11: lda #'+' ldy #2 sta (screen),y @@ -81,7 +65,25 @@ main: { sta (screen),y b10: inx - jmp b4 + cpx #9+1 + bcc b5 + rts + b5: + lda #$28 + clc + adc screen + sta screen + bcc !+ + inc screen+1 + !: + txa + clc + adc #'0' + ldy #0 + sta (screen),y + cpx #5 + bcs b6 + jmp b11 b3: lda header,x sta $400,x diff --git a/src/test/ref/comparison-rewriting.cfg b/src/test/ref/comparison-rewriting.cfg index 9b8700952..335206300 100644 --- a/src/test/ref/comparison-rewriting.cfg +++ b/src/test/ref/comparison-rewriting.cfg @@ -19,52 +19,57 @@ main::@1: scope:[main] from main main::@1 main::@2: scope:[main] from main::@1 main::@3 [9] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 ) [10] if(*((const byte[]) main::header#0 + (byte) main::i#2)!=(byte) 0) goto main::@3 - to:main::@4 -main::@4: scope:[main] from main::@10 main::@2 - [11] (byte*) main::screen#11 ← phi( main::@10/(byte*) main::screen#1 main::@2/(byte*) 1024 ) - [11] (byte) main::i1#10 ← phi( main::@10/(byte) main::i1#1 main::@2/(byte) 0 ) - [12] if((byte) main::i1#10<(byte) 9+(byte) 1) goto main::@5 - to:main::@return -main::@return: scope:[main] from main::@4 - [13] return - to:@return -main::@5: scope:[main] from main::@4 - [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 - [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 - [16] *((byte*) main::screen#1) ← (byte~) main::$4 - [17] if((byte) main::i1#10>=(byte) 5) goto main::@6 + to:main::@10_1 +main::@10_1: scope:[main] from main::@2 + [11] *((byte*) 1024+(byte) $28) ← (byte) '0' to:main::@11 -main::@11: scope:[main] from main::@5 - [18] *((byte*) main::screen#1 + (byte) 2) ← (byte) '+' +main::@11: scope:[main] from main::@10_1 main::@5 + [12] (byte*) main::screen#22 ← phi( main::@5/(byte*) main::screen#1 main::@10_1/(byte*) 1024+(byte) $28 ) + [12] (byte) main::i1#31 ← phi( main::@5/(byte) main::i1#1 main::@10_1/(byte) 0 ) + [13] *((byte*) main::screen#22 + (byte) 2) ← (byte) '+' to:main::@6 main::@6: scope:[main] from main::@11 main::@5 - [19] if((byte) main::i1#10>=(byte) 5+(byte) 1) goto main::@7 + [14] (byte*) main::screen#19 ← phi( main::@5/(byte*) main::screen#1 main::@11/(byte*) main::screen#22 ) + [14] (byte) main::i1#26 ← phi( main::@5/(byte) main::i1#1 main::@11/(byte) main::i1#31 ) + [15] if((byte) main::i1#26>=(byte) 5+(byte) 1) goto main::@7 to:main::@12 main::@12: scope:[main] from main::@6 - [20] *((byte*) main::screen#1 + (byte) 5) ← (byte) '+' + [16] *((byte*) main::screen#19 + (byte) 5) ← (byte) '+' to:main::@7 main::@7: scope:[main] from main::@12 main::@6 - [21] if((byte) main::i1#10!=(byte) 5) goto main::@8 + [17] if((byte) main::i1#26!=(byte) 5) goto main::@8 to:main::@13 main::@13: scope:[main] from main::@7 - [22] *((byte*) main::screen#1 + (byte) 8) ← (byte) '+' + [18] *((byte*) main::screen#19 + (byte) 8) ← (byte) '+' to:main::@8 main::@8: scope:[main] from main::@13 main::@7 - [23] if((byte) main::i1#10<(byte) 5) goto main::@9 + [19] if((byte) main::i1#26<(byte) 5) goto main::@9 to:main::@14 main::@14: scope:[main] from main::@8 - [24] *((byte*) main::screen#1 + (byte) $b) ← (byte) '+' + [20] *((byte*) main::screen#19 + (byte) $b) ← (byte) '+' to:main::@9 main::@9: scope:[main] from main::@14 main::@8 - [25] if((byte) main::i1#10<(byte) 5+(byte) 1) goto main::@10 + [21] if((byte) main::i1#26<(byte) 5+(byte) 1) goto main::@10 to:main::@15 main::@15: scope:[main] from main::@9 - [26] *((byte*) main::screen#1 + (byte) $e) ← (byte) '+' + [22] *((byte*) main::screen#19 + (byte) $e) ← (byte) '+' to:main::@10 main::@10: scope:[main] from main::@15 main::@9 - [27] (byte) main::i1#1 ← ++ (byte) main::i1#10 + [23] (byte) main::i1#1 ← ++ (byte) main::i1#26 to:main::@4 +main::@4: scope:[main] from main::@10 + [24] if((byte) main::i1#1<(byte) 9+(byte) 1) goto main::@5 + to:main::@return +main::@return: scope:[main] from main::@4 + [25] return + to:@return +main::@5: scope:[main] from main::@4 + [26] (byte*) main::screen#1 ← (byte*) main::screen#19 + (byte) $28 + [27] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#1 + [28] *((byte*) main::screen#1) ← (byte~) main::$4 + [29] if((byte) main::i1#1>=(byte) 5) goto main::@6 + to:main::@11 main::@3: scope:[main] from main::@2 - [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) - [29] (byte) main::i#1 ← ++ (byte) main::i#2 + [30] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) + [31] (byte) main::i#1 ← ++ (byte) main::i#2 to:main::@2 diff --git a/src/test/ref/comparison-rewriting.log b/src/test/ref/comparison-rewriting.log index 8d9ac8cce..4de1062c8 100644 --- a/src/test/ref/comparison-rewriting.log +++ b/src/test/ref/comparison-rewriting.log @@ -320,12 +320,13 @@ Rewriting conditional comparison [32] if((byte) main::i1#10>(byte) 5) goto main: Rewriting conditional comparison [50] if((byte) main::i1#10<=(byte) 5) goto main::@16 Simplifying expression containing zero main::screen#1 in [25] *((byte*) main::screen#1 + (byte) 0) ← (byte~) main::$4 Successful SSA optimization PassNSimplifyExpressionWithZero +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 9+1 in if((byte) main::i1#10<(byte) 9+(number) 1) goto main::@10 Adding number conversion cast (unumber) 1 in if((byte) main::i1#10<(unumber)(byte) 9+(number) 1) goto main::@10 -Adding number conversion cast (unumber) 5+1 in if((byte) main::i1#10>=(byte) 5+(number) 1) goto main::@13 -Adding number conversion cast (unumber) 1 in if((byte) main::i1#10>=(unumber)(byte) 5+(number) 1) goto main::@13 -Adding number conversion cast (unumber) 5+1 in if((byte) main::i1#10<(byte) 5+(number) 1) goto main::@16 -Adding number conversion cast (unumber) 1 in if((byte) main::i1#10<(unumber)(byte) 5+(number) 1) goto main::@16 +Adding number conversion cast (unumber) 5+1 in if((byte) main::i1#15>=(byte) 5+(number) 1) goto main::@13 +Adding number conversion cast (unumber) 1 in if((byte) main::i1#15>=(unumber)(byte) 5+(number) 1) goto main::@13 +Adding number conversion cast (unumber) 5+1 in if((byte) main::i1#18<(byte) 5+(number) 1) goto main::@16 +Adding number conversion cast (unumber) 1 in if((byte) main::i1#18<(unumber)(byte) 5+(number) 1) goto main::@16 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast (byte) 9+(unumber)(number) 1 Simplifying constant integer cast 1 @@ -338,12 +339,28 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::i1#1 = (byte) main::i1#10 +Alias (byte*) main::screen#1 = (byte*) main::screen#11 +Alias (byte) main::i1#14 = (byte) main::i1#20 +Alias (byte) main::i1#15 = (byte) main::i1#21 +Alias (byte) main::i1#16 = (byte) main::i1#22 +Alias (byte) main::i1#17 = (byte) main::i1#23 +Alias (byte) main::i1#18 = (byte) main::i1#24 +Successful SSA optimization Pass2AliasElimination +Alias (byte) main::i1#14 = (byte) main::i1#15 (byte) main::i1#16 (byte) main::i1#17 (byte) main::i1#18 (byte) main::i1#19 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i1#25 (const byte) main::i1#0 +Identical Phi Values (byte*) main::screen#20 (const byte*) main::sc#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [0] (byte*~) main::$0 ← (const byte*) main::sc#0 + (word) $3e8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) main::$0 = main::sc#0+$3e8 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [40] if((const byte) main::i1#0<(byte) 9+(byte) 1) goto main::@10 +Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [3] main::sc#1 ← ++ main::sc#2 to ++ Resolved ranged comparison value [4] if(main::sc#1!=rangelast(main::sc#0,main::$0)) goto main::@1 to (byte*)(const byte*) main::$0+(number) 1 +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 1 in if((byte*) main::sc#1!=(byte*)(const byte*) main::$0+(number) 1) goto main::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast (const byte*) main::$0+(unumber)(number) 1 @@ -351,16 +368,50 @@ Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte*) main::screen#19 = (byte*) main::screen#21 (byte*) main::screen#27 +Alias (byte) main::i1#1 = (byte) main::i1#14 +Alias (byte) main::i1#26 = (byte) main::i1#32 +Alias (byte*) main::screen#23 = (byte*) main::screen#28 +Alias (byte) main::i1#27 = (byte) main::i1#33 +Alias (byte*) main::screen#24 = (byte*) main::screen#29 +Alias (byte) main::i1#28 = (byte) main::i1#34 +Alias (byte*) main::screen#25 = (byte*) main::screen#30 +Alias (byte) main::i1#29 = (byte) main::i1#35 +Alias (byte*) main::screen#26 = (byte*) main::screen#31 +Successful SSA optimization Pass2AliasElimination +Alias (byte) main::i1#26 = (byte) main::i1#27 (byte) main::i1#28 (byte) main::i1#29 (byte) main::i1#30 +Alias (byte*) main::screen#19 = (byte*) main::screen#24 (byte*) main::screen#23 (byte*) main::screen#25 (byte*) main::screen#26 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i1#36 (const byte) main::i1#0 +Identical Phi Values (byte*) main::screen#32 (const byte*) main::sc#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [38] (byte*) main::screen#33 ← (const byte*) main::sc#0 + (byte) $28 +Constant right-side identified [39] (byte~) main::$16 ← (byte) '0' + (const byte) main::i1#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte*) main::screen#33 = main::sc#0+$28 +Constant (const byte) main::$16 = '0'+main::i1#0 +Successful SSA optimization Pass2ConstantIdentification +Removing PHI-reference to removed block (main::@10_1) in block main::@12 +Removing PHI-reference to removed block (main::@10_1) in block main::@12 +if() condition always false - eliminating [41] if((const byte) main::i1#0>=(byte) 5) goto main::@12 +Successful SSA optimization Pass2ConstantIfs +Simplifying expression containing zero '0' in +Successful SSA optimization PassNSimplifyExpressionWithZero Inlining constant with var siblings (const byte*) main::sc#0 Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::i1#0 +Inlining constant with var siblings (const byte*) main::screen#33 +Constant inlined main::$16 = (byte) '0' +Constant inlined main::$0 = (byte*) 1024+(word) $3e8 Constant inlined main::i#0 = (byte) 0 Constant inlined main::i1#0 = (byte) 0 Constant inlined main::sc#0 = (byte*) 1024 Constant inlined main::$15 = (const byte[]) main::header#0 -Constant inlined main::$0 = (byte*) 1024+(word) $3e8 +Constant inlined main::screen#33 = (byte*) 1024+(byte) $28 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@25(between main::@1 and main::@1) +Added new block during phi lifting main::@26(between main::@10 and main::@12) +Added new block during phi lifting main::@27(between main::@10 and main::@19) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 @@ -368,18 +419,26 @@ Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@9_1 CALL GRAPH Calls in [] to main:2 -Created 4 initial phi equivalence classes -Coalesced [31] main::i1#14 ← main::i1#1 -Coalesced [32] main::screen#19 ← main::screen#1 -Coalesced [35] main::i#4 ← main::i#1 -Coalesced [36] main::sc#3 ← main::sc#1 +Created 6 initial phi equivalence classes +Coalesced [18] main::i1#38 ← main::i1#31 +Coalesced [19] main::screen#35 ← main::screen#22 +Coalesced [36] main::i1#39 ← main::i1#1 +Coalesced [37] main::screen#36 ← main::screen#1 +Coalesced (already) [38] main::i1#37 ← main::i1#1 +Coalesced (already) [39] main::screen#34 ← main::screen#1 +Coalesced [42] main::i#4 ← main::i#1 +Coalesced [43] main::sc#3 ← main::sc#1 Coalesced down to 4 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) main::@2 Culled Empty Block (label) main::@5 +Culled Empty Block (label) main::@9_1 +Culled Empty Block (label) main::@27 +Culled Empty Block (label) main::@26 Culled Empty Block (label) main::@25 Renumbering block main::@3 to main::@2 Renumbering block main::@4 to main::@3 @@ -422,90 +481,97 @@ main::@1: scope:[main] from main main::@1 main::@2: scope:[main] from main::@1 main::@3 [9] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 ) [10] if(*((const byte[]) main::header#0 + (byte) main::i#2)!=(byte) 0) goto main::@3 - to:main::@4 -main::@4: scope:[main] from main::@10 main::@2 - [11] (byte*) main::screen#11 ← phi( main::@10/(byte*) main::screen#1 main::@2/(byte*) 1024 ) - [11] (byte) main::i1#10 ← phi( main::@10/(byte) main::i1#1 main::@2/(byte) 0 ) - [12] if((byte) main::i1#10<(byte) 9+(byte) 1) goto main::@5 - to:main::@return -main::@return: scope:[main] from main::@4 - [13] return - to:@return -main::@5: scope:[main] from main::@4 - [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 - [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 - [16] *((byte*) main::screen#1) ← (byte~) main::$4 - [17] if((byte) main::i1#10>=(byte) 5) goto main::@6 + to:main::@10_1 +main::@10_1: scope:[main] from main::@2 + [11] *((byte*) 1024+(byte) $28) ← (byte) '0' to:main::@11 -main::@11: scope:[main] from main::@5 - [18] *((byte*) main::screen#1 + (byte) 2) ← (byte) '+' +main::@11: scope:[main] from main::@10_1 main::@5 + [12] (byte*) main::screen#22 ← phi( main::@5/(byte*) main::screen#1 main::@10_1/(byte*) 1024+(byte) $28 ) + [12] (byte) main::i1#31 ← phi( main::@5/(byte) main::i1#1 main::@10_1/(byte) 0 ) + [13] *((byte*) main::screen#22 + (byte) 2) ← (byte) '+' to:main::@6 main::@6: scope:[main] from main::@11 main::@5 - [19] if((byte) main::i1#10>=(byte) 5+(byte) 1) goto main::@7 + [14] (byte*) main::screen#19 ← phi( main::@5/(byte*) main::screen#1 main::@11/(byte*) main::screen#22 ) + [14] (byte) main::i1#26 ← phi( main::@5/(byte) main::i1#1 main::@11/(byte) main::i1#31 ) + [15] if((byte) main::i1#26>=(byte) 5+(byte) 1) goto main::@7 to:main::@12 main::@12: scope:[main] from main::@6 - [20] *((byte*) main::screen#1 + (byte) 5) ← (byte) '+' + [16] *((byte*) main::screen#19 + (byte) 5) ← (byte) '+' to:main::@7 main::@7: scope:[main] from main::@12 main::@6 - [21] if((byte) main::i1#10!=(byte) 5) goto main::@8 + [17] if((byte) main::i1#26!=(byte) 5) goto main::@8 to:main::@13 main::@13: scope:[main] from main::@7 - [22] *((byte*) main::screen#1 + (byte) 8) ← (byte) '+' + [18] *((byte*) main::screen#19 + (byte) 8) ← (byte) '+' to:main::@8 main::@8: scope:[main] from main::@13 main::@7 - [23] if((byte) main::i1#10<(byte) 5) goto main::@9 + [19] if((byte) main::i1#26<(byte) 5) goto main::@9 to:main::@14 main::@14: scope:[main] from main::@8 - [24] *((byte*) main::screen#1 + (byte) $b) ← (byte) '+' + [20] *((byte*) main::screen#19 + (byte) $b) ← (byte) '+' to:main::@9 main::@9: scope:[main] from main::@14 main::@8 - [25] if((byte) main::i1#10<(byte) 5+(byte) 1) goto main::@10 + [21] if((byte) main::i1#26<(byte) 5+(byte) 1) goto main::@10 to:main::@15 main::@15: scope:[main] from main::@9 - [26] *((byte*) main::screen#1 + (byte) $e) ← (byte) '+' + [22] *((byte*) main::screen#19 + (byte) $e) ← (byte) '+' to:main::@10 main::@10: scope:[main] from main::@15 main::@9 - [27] (byte) main::i1#1 ← ++ (byte) main::i1#10 + [23] (byte) main::i1#1 ← ++ (byte) main::i1#26 to:main::@4 +main::@4: scope:[main] from main::@10 + [24] if((byte) main::i1#1<(byte) 9+(byte) 1) goto main::@5 + to:main::@return +main::@return: scope:[main] from main::@4 + [25] return + to:@return +main::@5: scope:[main] from main::@4 + [26] (byte*) main::screen#1 ← (byte*) main::screen#19 + (byte) $28 + [27] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#1 + [28] *((byte*) main::screen#1) ← (byte~) main::$4 + [29] if((byte) main::i1#1>=(byte) 5) goto main::@6 + to:main::@11 main::@3: scope:[main] from main::@2 - [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) - [29] (byte) main::i#1 ← ++ (byte) main::i#2 + [30] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) + [31] (byte) main::i#1 ← ++ (byte) main::i#2 to:main::@2 VARIABLE REGISTER WEIGHTS (void()) main() -(byte~) main::$4 22.0 +(byte~) main::$4 202.0 (byte[]) main::header (byte) main::i (byte) main::i#1 22.0 (byte) main::i#2 18.333333333333332 (byte) main::i1 -(byte) main::i1#1 22.0 -(byte) main::i1#10 6.6 +(byte) main::i1#1 100.99999999999999 +(byte) main::i1#26 68.55555555555554 +(byte) main::i1#31 56.0 (byte*) main::sc (byte*) main::sc#1 16.5 (byte*) main::sc#2 16.5 (byte*) main::screen -(byte*) main::screen#1 6.285714285714286 -(byte*) main::screen#11 11.0 +(byte*) main::screen#1 101.0 +(byte*) main::screen#19 56.090909090909086 +(byte*) main::screen#22 61.5 Initial phi equivalence classes [ main::sc#2 main::sc#1 ] [ main::i#2 main::i#1 ] -[ main::i1#10 main::i1#1 ] -[ main::screen#11 main::screen#1 ] +[ main::i1#26 main::i1#31 main::i1#1 ] +[ main::screen#19 main::screen#22 main::screen#1 ] Added variable main::$4 to zero page equivalence class [ main::$4 ] Complete equivalence classes [ main::sc#2 main::sc#1 ] [ main::i#2 main::i#1 ] -[ main::i1#10 main::i1#1 ] -[ main::screen#11 main::screen#1 ] +[ main::i1#26 main::i1#31 main::i1#1 ] +[ main::screen#19 main::screen#22 main::screen#1 ] [ main::$4 ] Allocated zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] Allocated zp ZP_BYTE:4 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:5 [ main::i1#10 main::i1#1 ] -Allocated zp ZP_WORD:6 [ main::screen#11 main::screen#1 ] +Allocated zp ZP_BYTE:5 [ main::i1#26 main::i1#31 main::i1#1 ] +Allocated zp ZP_WORD:6 [ main::screen#19 main::screen#22 main::screen#1 ] Allocated zp ZP_BYTE:8 [ main::$4 ] INITIAL ASM @@ -583,31 +649,110 @@ main: { lda header,y cmp #0 bne b3 - // [11] phi from main::@2 to main::@4 [phi:main::@2->main::@4] - b4_from_b2: - // [11] phi (byte*) main::screen#11 = (byte*) 1024 [phi:main::@2->main::@4#0] -- pbuz1=pbuc1 - lda #<$400 + jmp b10_1 + // main::@10_1 + b10_1: + // [11] *((byte*) 1024+(byte) $28) ← (byte) '0' -- _deref_pbuc1=vbuc2 + lda #'0' + sta $400+$28 + // [12] phi from main::@10_1 to main::@11 [phi:main::@10_1->main::@11] + b11_from_b10_1: + // [12] phi (byte*) main::screen#22 = (byte*) 1024+(byte) $28 [phi:main::@10_1->main::@11#0] -- pbuz1=pbuc1 + lda #<$400+$28 sta screen - lda #>$400 + lda #>$400+$28 sta screen+1 - // [11] phi (byte) main::i1#10 = (byte) 0 [phi:main::@2->main::@4#1] -- vbuz1=vbuc1 + // [12] phi (byte) main::i1#31 = (byte) 0 [phi:main::@10_1->main::@11#1] -- vbuz1=vbuc1 lda #0 sta i1 + jmp b11 + // main::@11 + b11: + // [13] *((byte*) main::screen#22 + (byte) 2) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #2 + sta (screen),y + // [14] phi from main::@11 main::@5 to main::@6 [phi:main::@11/main::@5->main::@6] + b6_from_b11: + b6_from_b5: + // [14] phi (byte*) main::screen#19 = (byte*) main::screen#22 [phi:main::@11/main::@5->main::@6#0] -- register_copy + // [14] phi (byte) main::i1#26 = (byte) main::i1#31 [phi:main::@11/main::@5->main::@6#1] -- register_copy + jmp b6 + // main::@6 + b6: + // [15] if((byte) main::i1#26>=(byte) 5+(byte) 1) goto main::@7 -- vbuz1_ge_vbuc1_then_la1 + lda i1 + cmp #5+1 + bcs b7 + jmp b12 + // main::@12 + b12: + // [16] *((byte*) main::screen#19 + (byte) 5) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #5 + sta (screen),y + jmp b7 + // main::@7 + b7: + // [17] if((byte) main::i1#26!=(byte) 5) goto main::@8 -- vbuz1_neq_vbuc1_then_la1 + lda #5 + cmp i1 + bne b8 + jmp b13 + // main::@13 + b13: + // [18] *((byte*) main::screen#19 + (byte) 8) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #8 + sta (screen),y + jmp b8 + // main::@8 + b8: + // [19] if((byte) main::i1#26<(byte) 5) goto main::@9 -- vbuz1_lt_vbuc1_then_la1 + lda i1 + cmp #5 + bcc b9 + jmp b14 + // main::@14 + b14: + // [20] *((byte*) main::screen#19 + (byte) $b) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #$b + sta (screen),y + jmp b9 + // main::@9 + b9: + // [21] if((byte) main::i1#26<(byte) 5+(byte) 1) goto main::@10 -- vbuz1_lt_vbuc1_then_la1 + lda i1 + cmp #5+1 + bcc b10 + jmp b15 + // main::@15 + b15: + // [22] *((byte*) main::screen#19 + (byte) $e) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #$e + sta (screen),y + jmp b10 + // main::@10 + b10: + // [23] (byte) main::i1#1 ← ++ (byte) main::i1#26 -- vbuz1=_inc_vbuz1 + inc i1 jmp b4 // main::@4 b4: - // [12] if((byte) main::i1#10<(byte) 9+(byte) 1) goto main::@5 -- vbuz1_lt_vbuc1_then_la1 + // [24] if((byte) main::i1#1<(byte) 9+(byte) 1) goto main::@5 -- vbuz1_lt_vbuc1_then_la1 lda i1 cmp #9+1 bcc b5 jmp breturn // main::@return breturn: - // [13] return + // [25] return rts // main::@5 b5: - // [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [26] (byte*) main::screen#1 ← (byte*) main::screen#19 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen @@ -615,98 +760,30 @@ main: { bcc !+ inc screen+1 !: - // [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 -- vbuz1=vbuc1_plus_vbuz2 + // [27] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#1 -- vbuz1=vbuc1_plus_vbuz2 lax i1 axs #-['0'] stx _4 - // [16] *((byte*) main::screen#1) ← (byte~) main::$4 -- _deref_pbuz1=vbuz2 + // [28] *((byte*) main::screen#1) ← (byte~) main::$4 -- _deref_pbuz1=vbuz2 lda _4 ldy #0 sta (screen),y - // [17] if((byte) main::i1#10>=(byte) 5) goto main::@6 -- vbuz1_ge_vbuc1_then_la1 + // [29] if((byte) main::i1#1>=(byte) 5) goto main::@6 -- vbuz1_ge_vbuc1_then_la1 lda i1 cmp #5 - bcs b6 + bcs b6_from_b5 + // [12] phi from main::@5 to main::@11 [phi:main::@5->main::@11] + b11_from_b5: + // [12] phi (byte*) main::screen#22 = (byte*) main::screen#1 [phi:main::@5->main::@11#0] -- register_copy + // [12] phi (byte) main::i1#31 = (byte) main::i1#1 [phi:main::@5->main::@11#1] -- register_copy jmp b11 - // main::@11 - b11: - // [18] *((byte*) main::screen#1 + (byte) 2) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #2 - sta (screen),y - jmp b6 - // main::@6 - b6: - // [19] if((byte) main::i1#10>=(byte) 5+(byte) 1) goto main::@7 -- vbuz1_ge_vbuc1_then_la1 - lda i1 - cmp #5+1 - bcs b7 - jmp b12 - // main::@12 - b12: - // [20] *((byte*) main::screen#1 + (byte) 5) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #5 - sta (screen),y - jmp b7 - // main::@7 - b7: - // [21] if((byte) main::i1#10!=(byte) 5) goto main::@8 -- vbuz1_neq_vbuc1_then_la1 - lda #5 - cmp i1 - bne b8 - jmp b13 - // main::@13 - b13: - // [22] *((byte*) main::screen#1 + (byte) 8) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #8 - sta (screen),y - jmp b8 - // main::@8 - b8: - // [23] if((byte) main::i1#10<(byte) 5) goto main::@9 -- vbuz1_lt_vbuc1_then_la1 - lda i1 - cmp #5 - bcc b9 - jmp b14 - // main::@14 - b14: - // [24] *((byte*) main::screen#1 + (byte) $b) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #$b - sta (screen),y - jmp b9 - // main::@9 - b9: - // [25] if((byte) main::i1#10<(byte) 5+(byte) 1) goto main::@10 -- vbuz1_lt_vbuc1_then_la1 - lda i1 - cmp #5+1 - bcc b10 - jmp b15 - // main::@15 - b15: - // [26] *((byte*) main::screen#1 + (byte) $e) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #$e - sta (screen),y - jmp b10 - // main::@10 - b10: - // [27] (byte) main::i1#1 ← ++ (byte) main::i1#10 -- vbuz1=_inc_vbuz1 - inc i1 - // [11] phi from main::@10 to main::@4 [phi:main::@10->main::@4] - b4_from_b10: - // [11] phi (byte*) main::screen#11 = (byte*) main::screen#1 [phi:main::@10->main::@4#0] -- register_copy - // [11] phi (byte) main::i1#10 = (byte) main::i1#1 [phi:main::@10->main::@4#1] -- register_copy - jmp b4 // main::@3 b3: - // [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [30] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 ldy i lda header,y sta $400,y - // [29] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [31] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc i // [9] phi from main::@3 to main::@2 [phi:main::@3->main::@2] b2_from_b3: @@ -721,42 +798,44 @@ Statement [6] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ mai Statement [8] if((byte*) main::sc#1!=(byte*) 1024+(word) $3e8+(byte) 1) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a Statement [10] if(*((const byte[]) main::header#0 + (byte) main::i#2)!=(byte) 0) goto main::@3 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::i#2 main::i#1 ] -Statement [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::i1#10 main::i1#1 ] -Statement [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 [ main::i1#10 main::screen#1 main::$4 ] ( main:2 [ main::i1#10 main::screen#1 main::$4 ] ) always clobbers reg byte a -Statement [16] *((byte*) main::screen#1) ← (byte~) main::$4 [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ main::i1#10 main::i1#1 ] -Statement [18] *((byte*) main::screen#1 + (byte) 2) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y -Statement [20] *((byte*) main::screen#1 + (byte) 5) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y -Statement [22] *((byte*) main::screen#1 + (byte) 8) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y -Statement [24] *((byte*) main::screen#1 + (byte) $b) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y -Statement [26] *((byte*) main::screen#1 + (byte) $e) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y -Statement [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [11] *((byte*) 1024+(byte) $28) ← (byte) '0' [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [13] *((byte*) main::screen#22 + (byte) 2) ← (byte) '+' [ main::i1#31 main::screen#22 ] ( main:2 [ main::i1#31 main::screen#22 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::i1#26 main::i1#31 main::i1#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ main::i1#26 main::i1#31 main::i1#1 ] +Statement [16] *((byte*) main::screen#19 + (byte) 5) ← (byte) '+' [ main::i1#26 main::screen#19 ] ( main:2 [ main::i1#26 main::screen#19 ] ) always clobbers reg byte a reg byte y +Statement [18] *((byte*) main::screen#19 + (byte) 8) ← (byte) '+' [ main::i1#26 main::screen#19 ] ( main:2 [ main::i1#26 main::screen#19 ] ) always clobbers reg byte a reg byte y +Statement [20] *((byte*) main::screen#19 + (byte) $b) ← (byte) '+' [ main::i1#26 main::screen#19 ] ( main:2 [ main::i1#26 main::screen#19 ] ) always clobbers reg byte a reg byte y +Statement [22] *((byte*) main::screen#19 + (byte) $e) ← (byte) '+' [ main::i1#26 main::screen#19 ] ( main:2 [ main::i1#26 main::screen#19 ] ) always clobbers reg byte a reg byte y +Statement [26] (byte*) main::screen#1 ← (byte*) main::screen#19 + (byte) $28 [ main::i1#1 main::screen#1 ] ( main:2 [ main::i1#1 main::screen#1 ] ) always clobbers reg byte a +Statement [27] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#1 [ main::i1#1 main::screen#1 main::$4 ] ( main:2 [ main::i1#1 main::screen#1 main::$4 ] ) always clobbers reg byte a +Statement [28] *((byte*) main::screen#1) ← (byte~) main::$4 [ main::i1#1 main::screen#1 ] ( main:2 [ main::i1#1 main::screen#1 ] ) always clobbers reg byte y +Statement [30] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [6] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a reg byte y Statement [8] if((byte*) main::sc#1!=(byte*) 1024+(word) $3e8+(byte) 1) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a Statement [10] if(*((const byte[]) main::header#0 + (byte) main::i#2)!=(byte) 0) goto main::@3 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Statement [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a -Statement [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 [ main::i1#10 main::screen#1 main::$4 ] ( main:2 [ main::i1#10 main::screen#1 main::$4 ] ) always clobbers reg byte a -Statement [16] *((byte*) main::screen#1) ← (byte~) main::$4 [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte y -Statement [18] *((byte*) main::screen#1 + (byte) 2) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y -Statement [20] *((byte*) main::screen#1 + (byte) 5) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y -Statement [22] *((byte*) main::screen#1 + (byte) 8) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y -Statement [24] *((byte*) main::screen#1 + (byte) $b) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y -Statement [26] *((byte*) main::screen#1 + (byte) $e) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y -Statement [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [11] *((byte*) 1024+(byte) $28) ← (byte) '0' [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [13] *((byte*) main::screen#22 + (byte) 2) ← (byte) '+' [ main::i1#31 main::screen#22 ] ( main:2 [ main::i1#31 main::screen#22 ] ) always clobbers reg byte a reg byte y +Statement [16] *((byte*) main::screen#19 + (byte) 5) ← (byte) '+' [ main::i1#26 main::screen#19 ] ( main:2 [ main::i1#26 main::screen#19 ] ) always clobbers reg byte a reg byte y +Statement [18] *((byte*) main::screen#19 + (byte) 8) ← (byte) '+' [ main::i1#26 main::screen#19 ] ( main:2 [ main::i1#26 main::screen#19 ] ) always clobbers reg byte a reg byte y +Statement [20] *((byte*) main::screen#19 + (byte) $b) ← (byte) '+' [ main::i1#26 main::screen#19 ] ( main:2 [ main::i1#26 main::screen#19 ] ) always clobbers reg byte a reg byte y +Statement [22] *((byte*) main::screen#19 + (byte) $e) ← (byte) '+' [ main::i1#26 main::screen#19 ] ( main:2 [ main::i1#26 main::screen#19 ] ) always clobbers reg byte a reg byte y +Statement [26] (byte*) main::screen#1 ← (byte*) main::screen#19 + (byte) $28 [ main::i1#1 main::screen#1 ] ( main:2 [ main::i1#1 main::screen#1 ] ) always clobbers reg byte a +Statement [27] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#1 [ main::i1#1 main::screen#1 main::$4 ] ( main:2 [ main::i1#1 main::screen#1 main::$4 ] ) always clobbers reg byte a +Statement [28] *((byte*) main::screen#1) ← (byte~) main::$4 [ main::i1#1 main::screen#1 ] ( main:2 [ main::i1#1 main::screen#1 ] ) always clobbers reg byte y +Statement [30] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_BYTE:4 [ main::i#2 main::i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:5 [ main::i1#10 main::i1#1 ] : zp ZP_BYTE:5 , reg byte x , -Potential registers zp ZP_WORD:6 [ main::screen#11 main::screen#1 ] : zp ZP_WORD:6 , +Potential registers zp ZP_BYTE:5 [ main::i1#26 main::i1#31 main::i1#1 ] : zp ZP_BYTE:5 , reg byte x , +Potential registers zp ZP_WORD:6 [ main::screen#19 main::screen#22 main::screen#1 ] : zp ZP_WORD:6 , Potential registers zp ZP_BYTE:8 [ main::$4 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 40.33: zp ZP_BYTE:4 [ main::i#2 main::i#1 ] 33: zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] 28.6: zp ZP_BYTE:5 [ main::i1#10 main::i1#1 ] 22: zp ZP_BYTE:8 [ main::$4 ] 17.29: zp ZP_WORD:6 [ main::screen#11 main::screen#1 ] +Uplift Scope [main] 225.56: zp ZP_BYTE:5 [ main::i1#26 main::i1#31 main::i1#1 ] 218.59: zp ZP_WORD:6 [ main::screen#19 main::screen#22 main::screen#1 ] 202: zp ZP_BYTE:8 [ main::$4 ] 40.33: zp ZP_BYTE:4 [ main::i#2 main::i#1 ] 33: zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] Uplift Scope [] -Uplifting [main] best 2453 combination reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] reg byte x [ main::i1#10 main::i1#1 ] reg byte a [ main::$4 ] zp ZP_WORD:6 [ main::screen#11 main::screen#1 ] -Uplifting [] best 2453 combination -Allocated (was zp ZP_WORD:6) zp ZP_WORD:4 [ main::screen#11 main::screen#1 ] +Uplifting [main] best 14504 combination reg byte x [ main::i1#26 main::i1#31 main::i1#1 ] zp ZP_WORD:6 [ main::screen#19 main::screen#22 main::screen#1 ] reg byte a [ main::$4 ] reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] +Uplifting [] best 14504 combination +Allocated (was zp ZP_WORD:6) zp ZP_WORD:4 [ main::screen#19 main::screen#22 main::screen#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -827,29 +906,104 @@ main: { lda header,x cmp #0 bne b3 - // [11] phi from main::@2 to main::@4 [phi:main::@2->main::@4] - b4_from_b2: - // [11] phi (byte*) main::screen#11 = (byte*) 1024 [phi:main::@2->main::@4#0] -- pbuz1=pbuc1 - lda #<$400 + jmp b10_1 + // main::@10_1 + b10_1: + // [11] *((byte*) 1024+(byte) $28) ← (byte) '0' -- _deref_pbuc1=vbuc2 + lda #'0' + sta $400+$28 + // [12] phi from main::@10_1 to main::@11 [phi:main::@10_1->main::@11] + b11_from_b10_1: + // [12] phi (byte*) main::screen#22 = (byte*) 1024+(byte) $28 [phi:main::@10_1->main::@11#0] -- pbuz1=pbuc1 + lda #<$400+$28 sta screen - lda #>$400 + lda #>$400+$28 sta screen+1 - // [11] phi (byte) main::i1#10 = (byte) 0 [phi:main::@2->main::@4#1] -- vbuxx=vbuc1 + // [12] phi (byte) main::i1#31 = (byte) 0 [phi:main::@10_1->main::@11#1] -- vbuxx=vbuc1 ldx #0 + jmp b11 + // main::@11 + b11: + // [13] *((byte*) main::screen#22 + (byte) 2) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #2 + sta (screen),y + // [14] phi from main::@11 main::@5 to main::@6 [phi:main::@11/main::@5->main::@6] + b6_from_b11: + b6_from_b5: + // [14] phi (byte*) main::screen#19 = (byte*) main::screen#22 [phi:main::@11/main::@5->main::@6#0] -- register_copy + // [14] phi (byte) main::i1#26 = (byte) main::i1#31 [phi:main::@11/main::@5->main::@6#1] -- register_copy + jmp b6 + // main::@6 + b6: + // [15] if((byte) main::i1#26>=(byte) 5+(byte) 1) goto main::@7 -- vbuxx_ge_vbuc1_then_la1 + cpx #5+1 + bcs b7 + jmp b12 + // main::@12 + b12: + // [16] *((byte*) main::screen#19 + (byte) 5) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #5 + sta (screen),y + jmp b7 + // main::@7 + b7: + // [17] if((byte) main::i1#26!=(byte) 5) goto main::@8 -- vbuxx_neq_vbuc1_then_la1 + cpx #5 + bne b8 + jmp b13 + // main::@13 + b13: + // [18] *((byte*) main::screen#19 + (byte) 8) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #8 + sta (screen),y + jmp b8 + // main::@8 + b8: + // [19] if((byte) main::i1#26<(byte) 5) goto main::@9 -- vbuxx_lt_vbuc1_then_la1 + cpx #5 + bcc b9 + jmp b14 + // main::@14 + b14: + // [20] *((byte*) main::screen#19 + (byte) $b) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #$b + sta (screen),y + jmp b9 + // main::@9 + b9: + // [21] if((byte) main::i1#26<(byte) 5+(byte) 1) goto main::@10 -- vbuxx_lt_vbuc1_then_la1 + cpx #5+1 + bcc b10 + jmp b15 + // main::@15 + b15: + // [22] *((byte*) main::screen#19 + (byte) $e) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #$e + sta (screen),y + jmp b10 + // main::@10 + b10: + // [23] (byte) main::i1#1 ← ++ (byte) main::i1#26 -- vbuxx=_inc_vbuxx + inx jmp b4 // main::@4 b4: - // [12] if((byte) main::i1#10<(byte) 9+(byte) 1) goto main::@5 -- vbuxx_lt_vbuc1_then_la1 + // [24] if((byte) main::i1#1<(byte) 9+(byte) 1) goto main::@5 -- vbuxx_lt_vbuc1_then_la1 cpx #9+1 bcc b5 jmp breturn // main::@return breturn: - // [13] return + // [25] return rts // main::@5 b5: - // [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [26] (byte*) main::screen#1 ← (byte*) main::screen#19 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen @@ -857,91 +1011,27 @@ main: { bcc !+ inc screen+1 !: - // [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 -- vbuaa=vbuc1_plus_vbuxx + // [27] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#1 -- vbuaa=vbuc1_plus_vbuxx txa clc adc #'0' - // [16] *((byte*) main::screen#1) ← (byte~) main::$4 -- _deref_pbuz1=vbuaa + // [28] *((byte*) main::screen#1) ← (byte~) main::$4 -- _deref_pbuz1=vbuaa ldy #0 sta (screen),y - // [17] if((byte) main::i1#10>=(byte) 5) goto main::@6 -- vbuxx_ge_vbuc1_then_la1 + // [29] if((byte) main::i1#1>=(byte) 5) goto main::@6 -- vbuxx_ge_vbuc1_then_la1 cpx #5 - bcs b6 + bcs b6_from_b5 + // [12] phi from main::@5 to main::@11 [phi:main::@5->main::@11] + b11_from_b5: + // [12] phi (byte*) main::screen#22 = (byte*) main::screen#1 [phi:main::@5->main::@11#0] -- register_copy + // [12] phi (byte) main::i1#31 = (byte) main::i1#1 [phi:main::@5->main::@11#1] -- register_copy jmp b11 - // main::@11 - b11: - // [18] *((byte*) main::screen#1 + (byte) 2) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #2 - sta (screen),y - jmp b6 - // main::@6 - b6: - // [19] if((byte) main::i1#10>=(byte) 5+(byte) 1) goto main::@7 -- vbuxx_ge_vbuc1_then_la1 - cpx #5+1 - bcs b7 - jmp b12 - // main::@12 - b12: - // [20] *((byte*) main::screen#1 + (byte) 5) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #5 - sta (screen),y - jmp b7 - // main::@7 - b7: - // [21] if((byte) main::i1#10!=(byte) 5) goto main::@8 -- vbuxx_neq_vbuc1_then_la1 - cpx #5 - bne b8 - jmp b13 - // main::@13 - b13: - // [22] *((byte*) main::screen#1 + (byte) 8) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #8 - sta (screen),y - jmp b8 - // main::@8 - b8: - // [23] if((byte) main::i1#10<(byte) 5) goto main::@9 -- vbuxx_lt_vbuc1_then_la1 - cpx #5 - bcc b9 - jmp b14 - // main::@14 - b14: - // [24] *((byte*) main::screen#1 + (byte) $b) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #$b - sta (screen),y - jmp b9 - // main::@9 - b9: - // [25] if((byte) main::i1#10<(byte) 5+(byte) 1) goto main::@10 -- vbuxx_lt_vbuc1_then_la1 - cpx #5+1 - bcc b10 - jmp b15 - // main::@15 - b15: - // [26] *((byte*) main::screen#1 + (byte) $e) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #$e - sta (screen),y - jmp b10 - // main::@10 - b10: - // [27] (byte) main::i1#1 ← ++ (byte) main::i1#10 -- vbuxx=_inc_vbuxx - inx - // [11] phi from main::@10 to main::@4 [phi:main::@10->main::@4] - b4_from_b10: - // [11] phi (byte*) main::screen#11 = (byte*) main::screen#1 [phi:main::@10->main::@4#0] -- register_copy - // [11] phi (byte) main::i1#10 = (byte) main::i1#1 [phi:main::@10->main::@4#1] -- register_copy - jmp b4 // main::@3 b3: - // [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [30] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda header,x sta $400,x - // [29] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [31] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx // [9] phi from main::@3 to main::@2 [phi:main::@3->main::@2] b2_from_b3: @@ -956,8 +1046,7 @@ Removing instruction jmp b1 Removing instruction jmp bend Removing instruction jmp b1 Removing instruction jmp b2 -Removing instruction jmp b4 -Removing instruction jmp breturn +Removing instruction jmp b10_1 Removing instruction jmp b11 Removing instruction jmp b6 Removing instruction jmp b12 @@ -968,26 +1057,32 @@ Removing instruction jmp b14 Removing instruction jmp b9 Removing instruction jmp b15 Removing instruction jmp b10 +Removing instruction jmp b4 +Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 +Replacing label b6_from_b5 with b6 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: Removing instruction b1_from_b1: +Removing instruction b6_from_b11: +Removing instruction b6_from_b5: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction b1_from_main: Removing instruction b2_from_b1: -Removing instruction b4_from_b2: -Removing instruction breturn: -Removing instruction b11: +Removing instruction b10_1: +Removing instruction b11_from_b10_1: Removing instruction b12: Removing instruction b13: Removing instruction b14: Removing instruction b15: -Removing instruction b4_from_b10: +Removing instruction b4: +Removing instruction breturn: +Removing instruction b11_from_b5: Removing instruction b2_from_b3: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly @@ -1003,9 +1098,10 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (void()) main() -(byte~) main::$4 reg byte a 22.0 +(byte~) main::$4 reg byte a 202.0 (label) main::@1 (label) main::@10 +(label) main::@10_1 (label) main::@11 (label) main::@12 (label) main::@13 @@ -1026,24 +1122,26 @@ FINAL SYMBOL TABLE (byte) main::i#1 reg byte x 22.0 (byte) main::i#2 reg byte x 18.333333333333332 (byte) main::i1 -(byte) main::i1#1 reg byte x 22.0 -(byte) main::i1#10 reg byte x 6.6 +(byte) main::i1#1 reg byte x 100.99999999999999 +(byte) main::i1#26 reg byte x 68.55555555555554 +(byte) main::i1#31 reg byte x 56.0 (byte*) main::sc (byte*) main::sc#1 sc zp ZP_WORD:2 16.5 (byte*) main::sc#2 sc zp ZP_WORD:2 16.5 (byte*) main::screen -(byte*) main::screen#1 screen zp ZP_WORD:4 6.285714285714286 -(byte*) main::screen#11 screen zp ZP_WORD:4 11.0 +(byte*) main::screen#1 screen zp ZP_WORD:4 101.0 +(byte*) main::screen#19 screen zp ZP_WORD:4 56.090909090909086 +(byte*) main::screen#22 screen zp ZP_WORD:4 61.5 zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] reg byte x [ main::i#2 main::i#1 ] -reg byte x [ main::i1#10 main::i1#1 ] -zp ZP_WORD:4 [ main::screen#11 main::screen#1 ] +reg byte x [ main::i1#26 main::i1#31 main::i1#1 ] +zp ZP_WORD:4 [ main::screen#19 main::screen#22 main::screen#1 ] reg byte a [ main::$4 ] FINAL ASSEMBLER -Score: 1991 +Score: 11042 // File Comments // Test rewriting of constant comparisons @@ -1101,28 +1199,94 @@ main: { lda header,x cmp #0 bne b3 - // [11] phi from main::@2 to main::@4 [phi:main::@2->main::@4] - // [11] phi (byte*) main::screen#11 = (byte*) 1024 [phi:main::@2->main::@4#0] -- pbuz1=pbuc1 - lda #<$400 + // main::@10_1 + // screen[0] = '0'+i + // [11] *((byte*) 1024+(byte) $28) ← (byte) '0' -- _deref_pbuc1=vbuc2 + lda #'0' + sta $400+$28 + // [12] phi from main::@10_1 to main::@11 [phi:main::@10_1->main::@11] + // [12] phi (byte*) main::screen#22 = (byte*) 1024+(byte) $28 [phi:main::@10_1->main::@11#0] -- pbuz1=pbuc1 + lda #<$400+$28 sta screen - lda #>$400 + lda #>$400+$28 sta screen+1 - // [11] phi (byte) main::i1#10 = (byte) 0 [phi:main::@2->main::@4#1] -- vbuxx=vbuc1 + // [12] phi (byte) main::i1#31 = (byte) 0 [phi:main::@10_1->main::@11#1] -- vbuxx=vbuc1 ldx #0 - // main::@4 - b4: + // main::@11 + b11: + // screen[2] = '+' + // [13] *((byte*) main::screen#22 + (byte) 2) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #2 + sta (screen),y + // [14] phi from main::@11 main::@5 to main::@6 [phi:main::@11/main::@5->main::@6] + // [14] phi (byte*) main::screen#19 = (byte*) main::screen#22 [phi:main::@11/main::@5->main::@6#0] -- register_copy + // [14] phi (byte) main::i1#26 = (byte) main::i1#31 [phi:main::@11/main::@5->main::@6#1] -- register_copy + // main::@6 + b6: + // if(i<=5) + // [15] if((byte) main::i1#26>=(byte) 5+(byte) 1) goto main::@7 -- vbuxx_ge_vbuc1_then_la1 + cpx #5+1 + bcs b7 + // main::@12 + // screen[5] = '+' + // [16] *((byte*) main::screen#19 + (byte) 5) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #5 + sta (screen),y + // main::@7 + b7: + // if(i==5) + // [17] if((byte) main::i1#26!=(byte) 5) goto main::@8 -- vbuxx_neq_vbuc1_then_la1 + cpx #5 + bne b8 + // main::@13 + // screen[8] = '+' + // [18] *((byte*) main::screen#19 + (byte) 8) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #8 + sta (screen),y + // main::@8 + b8: + // if(i>=5) + // [19] if((byte) main::i1#26<(byte) 5) goto main::@9 -- vbuxx_lt_vbuc1_then_la1 + cpx #5 + bcc b9 + // main::@14 + // screen[11] = '+' + // [20] *((byte*) main::screen#19 + (byte) $b) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #$b + sta (screen),y + // main::@9 + b9: + // if(i>5) + // [21] if((byte) main::i1#26<(byte) 5+(byte) 1) goto main::@10 -- vbuxx_lt_vbuc1_then_la1 + cpx #5+1 + bcc b10 + // main::@15 + // screen[14] = '+' + // [22] *((byte*) main::screen#19 + (byte) $e) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 + lda #'+' + ldy #$e + sta (screen),y + // main::@10 + b10: // for(byte i=0;i<=9;i++) - // [12] if((byte) main::i1#10<(byte) 9+(byte) 1) goto main::@5 -- vbuxx_lt_vbuc1_then_la1 + // [23] (byte) main::i1#1 ← ++ (byte) main::i1#26 -- vbuxx=_inc_vbuxx + inx + // main::@4 + // [24] if((byte) main::i1#1<(byte) 9+(byte) 1) goto main::@5 -- vbuxx_lt_vbuc1_then_la1 cpx #9+1 bcc b5 // main::@return // } - // [13] return + // [25] return rts // main::@5 b5: // screen +=40 - // [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [26] (byte*) main::screen#1 ← (byte*) main::screen#19 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen @@ -1131,89 +1295,30 @@ main: { inc screen+1 !: // '0'+i - // [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 -- vbuaa=vbuc1_plus_vbuxx + // [27] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#1 -- vbuaa=vbuc1_plus_vbuxx txa clc adc #'0' // screen[0] = '0'+i - // [16] *((byte*) main::screen#1) ← (byte~) main::$4 -- _deref_pbuz1=vbuaa + // [28] *((byte*) main::screen#1) ← (byte~) main::$4 -- _deref_pbuz1=vbuaa ldy #0 sta (screen),y // if(i<5) - // [17] if((byte) main::i1#10>=(byte) 5) goto main::@6 -- vbuxx_ge_vbuc1_then_la1 + // [29] if((byte) main::i1#1>=(byte) 5) goto main::@6 -- vbuxx_ge_vbuc1_then_la1 cpx #5 bcs b6 - // main::@11 - // screen[2] = '+' - // [18] *((byte*) main::screen#1 + (byte) 2) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #2 - sta (screen),y - // main::@6 - b6: - // if(i<=5) - // [19] if((byte) main::i1#10>=(byte) 5+(byte) 1) goto main::@7 -- vbuxx_ge_vbuc1_then_la1 - cpx #5+1 - bcs b7 - // main::@12 - // screen[5] = '+' - // [20] *((byte*) main::screen#1 + (byte) 5) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #5 - sta (screen),y - // main::@7 - b7: - // if(i==5) - // [21] if((byte) main::i1#10!=(byte) 5) goto main::@8 -- vbuxx_neq_vbuc1_then_la1 - cpx #5 - bne b8 - // main::@13 - // screen[8] = '+' - // [22] *((byte*) main::screen#1 + (byte) 8) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #8 - sta (screen),y - // main::@8 - b8: - // if(i>=5) - // [23] if((byte) main::i1#10<(byte) 5) goto main::@9 -- vbuxx_lt_vbuc1_then_la1 - cpx #5 - bcc b9 - // main::@14 - // screen[11] = '+' - // [24] *((byte*) main::screen#1 + (byte) $b) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #$b - sta (screen),y - // main::@9 - b9: - // if(i>5) - // [25] if((byte) main::i1#10<(byte) 5+(byte) 1) goto main::@10 -- vbuxx_lt_vbuc1_then_la1 - cpx #5+1 - bcc b10 - // main::@15 - // screen[14] = '+' - // [26] *((byte*) main::screen#1 + (byte) $e) ← (byte) '+' -- pbuz1_derefidx_vbuc1=vbuc2 - lda #'+' - ldy #$e - sta (screen),y - // main::@10 - b10: - // for(byte i=0;i<=9;i++) - // [27] (byte) main::i1#1 ← ++ (byte) main::i1#10 -- vbuxx=_inc_vbuxx - inx - // [11] phi from main::@10 to main::@4 [phi:main::@10->main::@4] - // [11] phi (byte*) main::screen#11 = (byte*) main::screen#1 [phi:main::@10->main::@4#0] -- register_copy - // [11] phi (byte) main::i1#10 = (byte) main::i1#1 [phi:main::@10->main::@4#1] -- register_copy - jmp b4 + // [12] phi from main::@5 to main::@11 [phi:main::@5->main::@11] + // [12] phi (byte*) main::screen#22 = (byte*) main::screen#1 [phi:main::@5->main::@11#0] -- register_copy + // [12] phi (byte) main::i1#31 = (byte) main::i1#1 [phi:main::@5->main::@11#1] -- register_copy + jmp b11 // main::@3 b3: // screen[i] = header[i] - // [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [30] *((byte*) 1024 + (byte) main::i#2) ← *((const byte[]) main::header#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda header,x sta $400,x // for( byte i=0; header[i]!=0; i++) - // [29] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [31] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx // [9] phi from main::@3 to main::@2 [phi:main::@3->main::@2] // [9] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@2#0] -- register_copy diff --git a/src/test/ref/comparison-rewriting.sym b/src/test/ref/comparison-rewriting.sym index 420a1d44b..52b707d2f 100644 --- a/src/test/ref/comparison-rewriting.sym +++ b/src/test/ref/comparison-rewriting.sym @@ -2,9 +2,10 @@ (label) @begin (label) @end (void()) main() -(byte~) main::$4 reg byte a 22.0 +(byte~) main::$4 reg byte a 202.0 (label) main::@1 (label) main::@10 +(label) main::@10_1 (label) main::@11 (label) main::@12 (label) main::@13 @@ -25,17 +26,19 @@ (byte) main::i#1 reg byte x 22.0 (byte) main::i#2 reg byte x 18.333333333333332 (byte) main::i1 -(byte) main::i1#1 reg byte x 22.0 -(byte) main::i1#10 reg byte x 6.6 +(byte) main::i1#1 reg byte x 100.99999999999999 +(byte) main::i1#26 reg byte x 68.55555555555554 +(byte) main::i1#31 reg byte x 56.0 (byte*) main::sc (byte*) main::sc#1 sc zp ZP_WORD:2 16.5 (byte*) main::sc#2 sc zp ZP_WORD:2 16.5 (byte*) main::screen -(byte*) main::screen#1 screen zp ZP_WORD:4 6.285714285714286 -(byte*) main::screen#11 screen zp ZP_WORD:4 11.0 +(byte*) main::screen#1 screen zp ZP_WORD:4 101.0 +(byte*) main::screen#19 screen zp ZP_WORD:4 56.090909090909086 +(byte*) main::screen#22 screen zp ZP_WORD:4 61.5 zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] reg byte x [ main::i#2 main::i#1 ] -reg byte x [ main::i1#10 main::i1#1 ] -zp ZP_WORD:4 [ main::screen#11 main::screen#1 ] +reg byte x [ main::i1#26 main::i1#31 main::i1#1 ] +zp ZP_WORD:4 [ main::screen#19 main::screen#22 main::screen#1 ] reg byte a [ main::$4 ] diff --git a/src/test/ref/complex/clearscreen/clearscreen.asm b/src/test/ref/complex/clearscreen/clearscreen.asm index 043fbea45..a325aa467 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.asm +++ b/src/test/ref/complex/clearscreen/clearscreen.asm @@ -109,8 +109,19 @@ main: { sta src lda #>SCREEN sta src+1 + b2: + ldy #0 + lda (src),y + sta (dst),y + inc src + bne !+ + inc src+1 + !: + inc dst + bne !+ + inc dst+1 + !: // Copy screen to screen copy - b1: lda src+1 cmp #>SCREEN+$3e8 bne b2 @@ -153,7 +164,7 @@ main: { bne b3 jsr initSprites jsr setupRasterIrq - b4: + b1: // Main loop jsr getCharToProcess ldy getCharToProcess.return_x @@ -170,19 +181,6 @@ main: { b6: sty startProcessing.center_x jsr startProcessing - jmp b4 - b2: - ldy #0 - lda (src),y - sta (dst),y - inc src - bne !+ - inc src+1 - !: - inc dst - bne !+ - inc dst+1 - !: jmp b1 } // Start processing a char - by inserting it into the PROCESSING array @@ -621,8 +619,15 @@ initSprites: { sta sp lda #>SPRITE_DATA sta sp+1 + b2: + lda #0 + tay + sta (sp),y + inc sp + bne !+ + inc sp+1 + !: // Clear sprite data - b1: lda sp+1 cmp #>SPRITE_DATA+NUM_PROCESSING*$40 bcc b2 @@ -644,15 +649,6 @@ initSprites: { sta SPRITES_EXPAND_X sta SPRITES_EXPAND_Y rts - b2: - lda #0 - tay - sta (sp),y - inc sp - bne !+ - inc sp+1 - !: - jmp b1 } // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center @@ -690,29 +686,6 @@ init_angle_screen: { sta xb lda #0 sta x - b2: - lda x - cmp #$13+1 - bcc b3 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - inc y - lda #$d - cmp y - bne b1 - rts b3: lda x asl @@ -753,7 +726,28 @@ init_angle_screen: { sta (screen_bottomline),y inc x dec xb - jmp b2 + lda x + cmp #$13+1 + bcc b3 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + inc y + lda #$d + cmp y + bne b1 + rts } // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 diff --git a/src/test/ref/complex/clearscreen/clearscreen.cfg b/src/test/ref/complex/clearscreen/clearscreen.cfg index 1a7071c31..9c35e9699 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.cfg +++ b/src/test/ref/complex/clearscreen/clearscreen.cfg @@ -24,68 +24,68 @@ main: scope:[main] from @2 to:main::@9 main::@9: scope:[main] from main [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0 + to:main::@2 +main::@2: scope:[main] from main::@1 main::@9 + [12] (byte*) main::dst#4 ← phi( main::@1/(byte*) main::dst#1 main::@9/(byte*) main::dst#0 ) + [12] (byte*) main::src#4 ← phi( main::@1/(byte*) main::src#1 main::@9/(const byte*) SCREEN#0 ) + [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) + [14] (byte*) main::src#1 ← ++ (byte*) main::src#4 + [15] (byte*) main::dst#1 ← ++ (byte*) main::dst#4 to:main::@1 -main::@1: scope:[main] from main::@2 main::@9 - [12] (byte*) main::dst#2 ← phi( main::@9/(byte*) main::dst#0 main::@2/(byte*) main::dst#1 ) - [12] (byte*) main::src#2 ← phi( main::@9/(const byte*) SCREEN#0 main::@2/(byte*) main::src#1 ) - [13] if((byte*) main::src#2!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 main::@3 - [14] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 ) - [15] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 - [16] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 - [17] (byte) main::$28 ← (byte) main::$27 << (byte) 1 - [18] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 - [19] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 - [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 - [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 - [22] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 - [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 - [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 - [25] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 - [26] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 - [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE - [28] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 - [29] (byte) main::i#1 ← ++ (byte) main::i#2 - [30] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 + [17] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 ) + [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 + [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 + [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 + [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 + [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 + [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 + [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 + [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 + [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 + [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 + [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 + [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 + [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE + [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 + [32] (byte) main::i#1 ← ++ (byte) main::i#2 + [33] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@3 - [31] phi() - [32] call initSprites + [34] phi() + [35] call initSprites to:main::@10 main::@10: scope:[main] from main::@4 - [33] phi() - [34] call setupRasterIrq + [36] phi() + [37] call setupRasterIrq to:main::@5 main::@5: scope:[main] from main::@10 main::@6 - [35] phi() - [36] call getCharToProcess - [37] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 - [38] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 - [39] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 + [38] phi() + [39] call getCharToProcess + [40] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 + [41] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 + [42] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 to:main::@11 main::@11: scope:[main] from main::@5 - [40] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 - [41] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 - [42] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 - [43] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 + [43] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 + [44] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 + [45] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 + [46] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 to:main::@7 main::@7: scope:[main] from main::@11 - [44] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' + [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' to:main::@8 main::@8: scope:[main] from main::@7 main::@8 - [45] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) + [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) to:main::@8 main::@6: scope:[main] from main::@11 - [46] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 - [47] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 - [48] call startProcessing + [49] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 + [50] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 + [51] call startProcessing to:main::@5 -main::@2: scope:[main] from main::@1 - [49] *((byte*) main::dst#2) ← *((byte*) main::src#2) - [50] (byte*) main::src#1 ← ++ (byte*) main::src#2 - [51] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 - to:main::@1 startProcessing: scope:[startProcessing] from main::@6 [52] phi() to:startProcessing::@1 @@ -262,29 +262,29 @@ setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2 to:@return initSprites: scope:[initSprites] from main::@4 [156] phi() + to:initSprites::@2 +initSprites::@2: scope:[initSprites] from initSprites initSprites::@1 + [157] (byte*) initSprites::sp#4 ← phi( initSprites::@1/(byte*) initSprites::sp#1 initSprites/(const byte*) SPRITE_DATA#0 ) + [158] *((byte*) initSprites::sp#4) ← (byte) 0 + [159] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#4 to:initSprites::@1 -initSprites::@1: scope:[initSprites] from initSprites initSprites::@2 - [157] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA#0 initSprites::@2/(byte*) initSprites::sp#1 ) - [158] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 +initSprites::@1: scope:[initSprites] from initSprites::@2 + [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 to:initSprites::@3 initSprites::@3: scope:[initSprites] from initSprites::@1 initSprites::@3 - [159] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@3/(byte) initSprites::i#1 ) - [160] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 - [161] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 - [162] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 + [161] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@3/(byte) initSprites::i#1 ) + [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 + [163] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 + [164] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 to:initSprites::@4 initSprites::@4: scope:[initSprites] from initSprites::@3 - [163] *((const byte*) SPRITES_MC#0) ← (byte) 0 - [164] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 - [165] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 + [165] *((const byte*) SPRITES_MC#0) ← (byte) 0 + [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 + [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 to:initSprites::@return initSprites::@return: scope:[initSprites] from initSprites::@4 - [166] return + [168] return to:@return -initSprites::@2: scope:[initSprites] from initSprites::@1 - [167] *((byte*) initSprites::sp#2) ← (byte) 0 - [168] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 - to:initSprites::@1 init_angle_screen: scope:[init_angle_screen] from main [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c @@ -293,46 +293,46 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an [171] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) [171] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) [171] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - to:init_angle_screen::@2 -init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [172] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [172] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [173] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 - to:init_angle_screen::@4 -init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [176] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [177] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 - to:init_angle_screen::@return -init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [178] return - to:@return -init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [186] call atan2_16 - [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + to:init_angle_screen::@3 +init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@2 + [172] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 ) + [172] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 ) + [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 + [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [180] call atan2_16 + [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [198] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [199] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 + [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 + [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 + [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 + [192] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 + [193] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 to:init_angle_screen::@2 +init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@5 + [194] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 + to:init_angle_screen::@4 +init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 + [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [197] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [198] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + to:init_angle_screen::@return +init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 + [199] return + to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@3 [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 diff --git a/src/test/ref/complex/clearscreen/clearscreen.log b/src/test/ref/complex/clearscreen/clearscreen.log index d0d934dde..a18955b50 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.log +++ b/src/test/ref/complex/clearscreen/clearscreen.log @@ -3371,6 +3371,7 @@ Removing unused block irqBottom::@5 Removing unused block irqBottom::@6 Removing unused block irqBottom::@4 Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $28 in if((byte) getCharToProcess::x#1!=(number) $28) goto getCharToProcess::@4 Adding number conversion cast (unumber) $19 in if((byte) getCharToProcess::y#1!=(number) $19) goto getCharToProcess::@3 Adding number conversion cast (unumber) 8 in if((byte) startProcessing::i1#1!=(number) 8) goto startProcessing::@9 @@ -3399,11 +3400,18 @@ Finalized unsigned number type (byte) 8 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) processChars::$17 = (byte~) processChars::$13 Alias (byte~) processChars::$30 = (byte~) processChars::$29 +Alias (byte) init_angle_screen::x#1 = (byte) init_angle_screen::x#2 +Alias (byte) init_angle_screen::xb#1 = (byte) init_angle_screen::xb#2 +Alias (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#6 +Alias (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#6 Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) init_angle_screen::x#7 (const byte) init_angle_screen::x#0 +Identical Phi Values (byte) init_angle_screen::xb#7 (const byte) init_angle_screen::xb#0 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) processChars::$18 [230] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(word) XPOS_LEFTMOST#0) goto processChars::@7 -Simple Condition (bool~) processChars::$23 [318] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(word) YPOS_BOTTOMMOST#0) goto processChars::@7 -Simple Condition (bool~) processChars::$21 [319] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(word) YPOS_TOPMOST#0) goto processChars::@7 -Simple Condition (bool~) processChars::$19 [320] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(word) XPOS_RIGHTMOST#0) goto processChars::@7 +Simple Condition (bool~) processChars::$23 [321] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(word) YPOS_BOTTOMMOST#0) goto processChars::@7 +Simple Condition (bool~) processChars::$21 [322] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(word) YPOS_TOPMOST#0) goto processChars::@7 +Simple Condition (bool~) processChars::$19 [323] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(word) XPOS_RIGHTMOST#0) goto processChars::@7 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [11] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 Constant right-side identified [57] (byte*~) main::$5 ← (const byte*) SCREEN#0 + (word) $3e8 @@ -3419,8 +3427,8 @@ Constant right-side identified [197] (byte~) processChars::$1 ← (const byte) N Constant right-side identified [213] (byte*~) processChars::$8 ← (const byte*) SCREEN#0 + (const word) SPRITE_PTRS#0 Constant right-side identified [236] (byte~) processChars::$27 ← (const byte) BORDER_XPOS_LEFT#0 / (byte) 8 Constant right-side identified [243] (byte~) processChars::$31 ← (const byte) BORDER_YPOS_TOP#0 / (byte) 8 -Constant right-side identified [284] (byte~) initSprites::$0 ← (const byte) NUM_PROCESSING#0 * (byte) $40 -Constant right-side identified [302] (byte~) setupRasterIrq::$1 ← < (const word) setupRasterIrq::raster#0 +Constant right-side identified [287] (byte~) initSprites::$0 ← (const byte) NUM_PROCESSING#0 * (byte) $40 +Constant right-side identified [305] (byte~) setupRasterIrq::$1 ← < (const word) setupRasterIrq::raster#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) atan2_16::$16 = CORDIC_ITERATIONS_16#0-1 Constant (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 = { fill( NUM_PROCESSING#0, 0) } @@ -3464,6 +3472,8 @@ Constant value identified (byte**)PROCESSING#0 in [185] (byte**) startProcessing Constant value identified (word)$2 in [189] (word~) $3 ← (word)(const byte) $2 Constant value identified (word)$7 in [193] (word~) $8 ← (word)(const byte) $7 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [325] if((const byte) init_angle_screen::x#0<(byte) $13+(byte) 1) goto init_angle_screen::@3 +Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [36] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ Resolved ranged comparison value [37] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 Resolved ranged next value [83] main::i#1 ← ++ main::i#2 to ++ @@ -3480,6 +3490,7 @@ Eliminating unused constant (const byte*) BGCOL#0 Eliminating unused constant (const byte) WHITE#0 Eliminating unused constant (const byte) BLUE#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) atan2_16::$16+1 in if((byte) atan2_16::i#1==(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17 Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17 Adding number conversion cast (unumber) main::$7+1 in if((byte) main::i#1!=(const byte) main::$7+(number) 1) goto main::@7 @@ -3503,25 +3514,31 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [63] (word*) main::$18 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y -Constant right-side identified [65] (word*) main::$19 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX -Constant right-side identified [67] (word*) main::$20 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY -Constant right-side identified [69] (byte*) main::$21 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID -Constant right-side identified [71] (byte*) main::$22 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR -Constant right-side identified [73] (byte*) main::$23 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL -Constant right-side identified [75] (byte*) main::$24 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS -Constant right-side identified [77] (byte**) main::$25 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR -Constant right-side identified [119] (byte*) startProcessing::$41 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS -Constant right-side identified [163] (word*) startProcessing::$33 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y -Constant right-side identified [165] (word*) startProcessing::$34 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX -Constant right-side identified [167] (word*) startProcessing::$35 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY -Constant right-side identified [169] (byte*) startProcessing::$36 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID -Constant right-side identified [171] (byte*) startProcessing::$37 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR -Constant right-side identified [173] (byte*) startProcessing::$38 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL -Constant right-side identified [175] (byte*) startProcessing::$39 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS -Constant right-side identified [177] (byte**) startProcessing::$40 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR -Constant right-side identified [184] (word) YPOS_BOTTOMMOST#0 ← (const word) $10 << (byte) 4 -Constant right-side identified [262] (byte*~) initSprites::$1 ← (const byte*) SPRITE_DATA#0 + (const byte) initSprites::$0 +Alias (byte*) main::src#1 = (byte*) main::src#2 +Alias (byte*) main::dst#1 = (byte*) main::dst#2 +Alias (byte*) main::dst#0 = (byte*) main::dst#5 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) main::src#5 (const byte*) main::src#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [65] (word*) main::$18 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y +Constant right-side identified [67] (word*) main::$19 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX +Constant right-side identified [69] (word*) main::$20 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY +Constant right-side identified [71] (byte*) main::$21 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID +Constant right-side identified [73] (byte*) main::$22 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR +Constant right-side identified [75] (byte*) main::$23 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL +Constant right-side identified [77] (byte*) main::$24 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS +Constant right-side identified [79] (byte**) main::$25 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR +Constant right-side identified [121] (byte*) startProcessing::$41 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS +Constant right-side identified [165] (word*) startProcessing::$33 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y +Constant right-side identified [167] (word*) startProcessing::$34 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX +Constant right-side identified [169] (word*) startProcessing::$35 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY +Constant right-side identified [171] (byte*) startProcessing::$36 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID +Constant right-side identified [173] (byte*) startProcessing::$37 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR +Constant right-side identified [175] (byte*) startProcessing::$38 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL +Constant right-side identified [177] (byte*) startProcessing::$39 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS +Constant right-side identified [179] (byte**) startProcessing::$40 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR +Constant right-side identified [186] (word) YPOS_BOTTOMMOST#0 ← (const word) $10 << (byte) 4 +Constant right-side identified [264] (byte*~) initSprites::$1 ← (const byte*) SPRITE_DATA#0 + (const byte) initSprites::$0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word*) main::$17 = (word*)PROCESSING#0 Constant (const word*) main::$18 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_Y @@ -3548,12 +3565,21 @@ Constant (const word) $8 = (word)$7 Constant (const word) YPOS_BOTTOMMOST#0 = $10<<4 Constant (const byte*) initSprites::$1 = SPRITE_DATA#0+initSprites::$0 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [300] if((const byte*) main::src#0!=(const byte*) main::$5) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) initSprites::sp#1 = (byte*) initSprites::sp#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) initSprites::sp#5 (const byte*) initSprites::sp#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [160] (word) XPOS_LEFTMOST#0 ← (const word) $3 << (byte) 4 Constant right-side identified [161] (word) YPOS_TOPMOST#0 ← (const word) $8 << (byte) 4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) XPOS_LEFTMOST#0 = $3<<4 Constant (const word) YPOS_TOPMOST#0 = $8<<4 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [276] if((const byte*) initSprites::sp#0<(const byte*) initSprites::$1) goto initSprites::@2 +Successful SSA optimization Pass2ConstantIfs Inlining Noop Cast [3] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 Successful SSA optimization Pass2NopCastInlining Inlining Noop Cast [44] (void*) malloc::return#2 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 @@ -3583,7 +3609,7 @@ Rewriting division to use shift [190] (word~) processChars::$25 ← (word) proce Rewriting multiplication to use shift [193] (byte~) processChars::$38 ← (byte) processChars::xchar#0 * (const byte) SIZEOF_WORD Rewriting division to use shift [196] (byte~) processChars::$30 ← (byte) processChars::ypos#0 / (byte) 8 Rewriting multiplication to use shift [198] (byte~) processChars::$39 ← (byte) processChars::ychar#0 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [208] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [208] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 * (byte) 2 Rewriting multiplication to use shift [212] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) malloc::size#0 @@ -3692,7 +3718,8 @@ Added new block during phi lifting atan2_16::@36(between atan2_16::@27 and atan2 Added new block during phi lifting atan2_16::@37(between atan2_16::@20 and atan2_16::@25) Added new block during phi lifting atan2_16::@38(between atan2_16::@17 and atan2_16::@7) Added new block during phi lifting atan2_16::@39(between atan2_16::@7 and atan2_16::@8) -Added new block during phi lifting main::@22(between main::@7 and main::@7) +Added new block during phi lifting main::@22(between main::@1 and main::@2) +Added new block during phi lifting main::@23(between main::@7 and main::@7) Added new block during phi lifting getCharToProcess::@12(between getCharToProcess::@9 and getCharToProcess::@3) Added new block during phi lifting getCharToProcess::@13(between getCharToProcess::@5 and getCharToProcess::@4) Added new block during phi lifting getCharToProcess::@14(between getCharToProcess::@4 and getCharToProcess::@5) @@ -3704,7 +3731,9 @@ Added new block during phi lifting startProcessing::@14(between startProcessing: Added new block during phi lifting processChars::@20(between processChars::@3 and processChars::@2) Added new block during phi lifting processChars::@21(between processChars::@2 and processChars::@3) Added new block during phi lifting init_angle_screen::@10(between init_angle_screen::@4 and init_angle_screen::@1) -Added new block during phi lifting initSprites::@9(between initSprites::@7 and initSprites::@7) +Added new block during phi lifting init_angle_screen::@11(between init_angle_screen::@2 and init_angle_screen::@3) +Added new block during phi lifting initSprites::@9(between initSprites::@1 and initSprites::@2) +Added new block during phi lifting initSprites::@10(between initSprites::@7 and initSprites::@7) Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @15 @@ -3725,7 +3754,9 @@ Adding NOP phi() at start of main::@21 Adding NOP phi() at start of startProcessing Adding NOP phi() at start of getCharToProcess::@1 Adding NOP phi() at start of initSprites +Adding NOP phi() at start of initSprites::@1_1 Adding NOP phi() at start of initSprites::@3 +Adding NOP phi() at start of init_angle_screen::@2_1 Adding NOP phi() at start of irqBottom Adding NOP phi() at start of irqBottom::@1 Adding NOP phi() at start of irqBottom::@7 @@ -3734,16 +3765,16 @@ Adding NOP phi() at start of processChars::@15 Adding NOP phi() at start of irqTop CALL GRAPH Calls in [] to malloc:5 malloc:8 main:14 -Calls in [main] to init_angle_screen:18 initSprites:42 setupRasterIrq:44 getCharToProcess:47 startProcessing:59 -Calls in [init_angle_screen] to atan2_16:235 -Calls in [irqBottom] to processChars:327 +Calls in [main] to init_angle_screen:18 initSprites:45 setupRasterIrq:47 getCharToProcess:50 startProcessing:62 +Calls in [init_angle_screen] to atan2_16:228 +Calls in [irqBottom] to processChars:329 Created 50 initial phi equivalence classes Coalesced [7] heap_head#12 ← heap_head#1 -Coalesced [20] main::dst#4 ← main::dst#0 -Coalesced [61] main::i#3 ← main::i#1 -Coalesced [65] main::src#4 ← main::src#1 -Coalesced [66] main::dst#5 ← main::dst#1 +Coalesced [20] main::dst#7 ← main::dst#0 +Coalesced [64] main::i#3 ← main::i#1 +Coalesced [65] main::src#6 ← main::src#1 +Coalesced [66] main::dst#6 ← main::dst#1 Coalesced [76] startProcessing::freeIdx#9 ← startProcessing::i#2 Coalesced [96] startProcessing::chargenData#3 ← startProcessing::chargenData#0 Coalesced [97] startProcessing::spriteData#3 ← startProcessing::spriteData#0 @@ -3777,52 +3808,52 @@ Coalesced (already) [183] getCharToProcess::return_y#6 ← getCharToProcess::clo Not coalescing [184] getCharToProcess::return_dist#5 ← getCharToProcess::closest_dist#2 Coalesced (already) [185] getCharToProcess::return_x#5 ← getCharToProcess::closest_x#7 Coalesced (already) [186] getCharToProcess::return_y#5 ← getCharToProcess::closest_y#7 -Coalesced [209] initSprites::i#3 ← initSprites::i#1 -Coalesced [212] initSprites::sp#4 ← initSprites::sp#1 -Coalesced [215] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#0 -Coalesced [216] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#0 -Coalesced [225] init_angle_screen::y#7 ← init_angle_screen::y#1 -Coalesced [226] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1 -Coalesced [227] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1 -Coalesced [249] init_angle_screen::x#5 ← init_angle_screen::x#1 -Coalesced [250] init_angle_screen::xb#5 ← init_angle_screen::xb#1 -Coalesced [253] atan2_16::yi#17 ← atan2_16::$2 -Coalesced [257] atan2_16::xi#14 ← atan2_16::$7 -Coalesced [259] atan2_16::yi#19 ← atan2_16::yi#0 -Coalesced [260] atan2_16::xi#16 ← atan2_16::xi#0 -Coalesced [263] atan2_16::angle#22 ← atan2_16::angle#12 -Coalesced [268] atan2_16::angle#27 ← atan2_16::angle#4 -Coalesced [272] atan2_16::return#5 ← atan2_16::angle#5 -Coalesced [275] atan2_16::return#6 ← atan2_16::angle#11 -Coalesced [276] atan2_16::angle#26 ← atan2_16::angle#1 -Not coalescing [277] atan2_16::shift#5 ← atan2_16::i#2 -Not coalescing [278] atan2_16::xd#10 ← atan2_16::xi#3 -Not coalescing [279] atan2_16::yd#10 ← atan2_16::yi#3 -Coalesced [285] atan2_16::yd#13 ← atan2_16::yd#2 -Coalesced [286] atan2_16::xd#13 ← atan2_16::xd#2 -Coalesced [293] atan2_16::yi#21 ← atan2_16::yi#2 -Coalesced [294] atan2_16::angle#25 ← atan2_16::angle#3 -Coalesced [295] atan2_16::xi#18 ← atan2_16::xi#2 -Coalesced [299] atan2_16::yi#18 ← atan2_16::yi#8 -Coalesced [300] atan2_16::xi#15 ← atan2_16::xi#8 -Coalesced [301] atan2_16::i#12 ← atan2_16::i#1 -Coalesced [302] atan2_16::angle#21 ← atan2_16::angle#13 -Coalesced (already) [303] atan2_16::angle#23 ← atan2_16::angle#13 -Coalesced [308] atan2_16::yi#20 ← atan2_16::yi#1 -Coalesced [309] atan2_16::angle#24 ← atan2_16::angle#2 -Coalesced [310] atan2_16::xi#17 ← atan2_16::xi#1 -Coalesced [311] atan2_16::yd#12 ← atan2_16::yd#3 -Coalesced [312] atan2_16::xd#12 ← atan2_16::xd#3 -Coalesced [316] atan2_16::shift#6 ← atan2_16::shift#1 -Coalesced [317] atan2_16::xd#11 ← atan2_16::xd#1 -Coalesced [318] atan2_16::yd#11 ← atan2_16::yd#1 -Not coalescing [319] atan2_16::xi#13 ← atan2_16::x#0 -Not coalescing [320] atan2_16::yi#16 ← atan2_16::y#0 -Not coalescing [323] heap_head#1 ← malloc::mem#0 -Coalesced [376] processChars::numActive#17 ← processChars::numActive#1 -Coalesced [382] processChars::i#13 ← processChars::i#1 -Coalesced [383] processChars::numActive#15 ← processChars::numActive#3 -Coalesced (already) [388] processChars::numActive#16 ← processChars::numActive#10 +Coalesced [212] initSprites::i#3 ← initSprites::i#1 +Coalesced [213] initSprites::sp#6 ← initSprites::sp#1 +Coalesced [216] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#0 +Coalesced [217] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#0 +Coalesced [248] init_angle_screen::y#7 ← init_angle_screen::y#1 +Coalesced [249] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1 +Coalesced [250] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1 +Coalesced [251] init_angle_screen::x#8 ← init_angle_screen::x#1 +Coalesced [252] init_angle_screen::xb#8 ← init_angle_screen::xb#1 +Coalesced [255] atan2_16::yi#17 ← atan2_16::$2 +Coalesced [259] atan2_16::xi#14 ← atan2_16::$7 +Coalesced [261] atan2_16::yi#19 ← atan2_16::yi#0 +Coalesced [262] atan2_16::xi#16 ← atan2_16::xi#0 +Coalesced [265] atan2_16::angle#22 ← atan2_16::angle#12 +Coalesced [270] atan2_16::angle#27 ← atan2_16::angle#4 +Coalesced [274] atan2_16::return#5 ← atan2_16::angle#5 +Coalesced [277] atan2_16::return#6 ← atan2_16::angle#11 +Coalesced [278] atan2_16::angle#26 ← atan2_16::angle#1 +Not coalescing [279] atan2_16::shift#5 ← atan2_16::i#2 +Not coalescing [280] atan2_16::xd#10 ← atan2_16::xi#3 +Not coalescing [281] atan2_16::yd#10 ← atan2_16::yi#3 +Coalesced [287] atan2_16::yd#13 ← atan2_16::yd#2 +Coalesced [288] atan2_16::xd#13 ← atan2_16::xd#2 +Coalesced [295] atan2_16::yi#21 ← atan2_16::yi#2 +Coalesced [296] atan2_16::angle#25 ← atan2_16::angle#3 +Coalesced [297] atan2_16::xi#18 ← atan2_16::xi#2 +Coalesced [301] atan2_16::yi#18 ← atan2_16::yi#8 +Coalesced [302] atan2_16::xi#15 ← atan2_16::xi#8 +Coalesced [303] atan2_16::i#12 ← atan2_16::i#1 +Coalesced [304] atan2_16::angle#21 ← atan2_16::angle#13 +Coalesced (already) [305] atan2_16::angle#23 ← atan2_16::angle#13 +Coalesced [310] atan2_16::yi#20 ← atan2_16::yi#1 +Coalesced [311] atan2_16::angle#24 ← atan2_16::angle#2 +Coalesced [312] atan2_16::xi#17 ← atan2_16::xi#1 +Coalesced [313] atan2_16::yd#12 ← atan2_16::yd#3 +Coalesced [314] atan2_16::xd#12 ← atan2_16::xd#3 +Coalesced [318] atan2_16::shift#6 ← atan2_16::shift#1 +Coalesced [319] atan2_16::xd#11 ← atan2_16::xd#1 +Coalesced [320] atan2_16::yd#11 ← atan2_16::yd#1 +Not coalescing [321] atan2_16::xi#13 ← atan2_16::x#0 +Not coalescing [322] atan2_16::yi#16 ← atan2_16::y#0 +Not coalescing [325] heap_head#1 ← malloc::mem#0 +Coalesced [378] processChars::numActive#17 ← processChars::numActive#1 +Coalesced [384] processChars::i#13 ← processChars::i#1 +Coalesced [385] processChars::numActive#15 ← processChars::numActive#3 +Coalesced (already) [390] processChars::numActive#16 ← processChars::numActive#10 Coalesced down to 37 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @15 @@ -3831,17 +3862,23 @@ Culled Empty Block (label) @29 Culled Empty Block (label) @34 Culled Empty Block (label) @35 Culled Empty Block (label) @39 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@19 Culled Empty Block (label) main::@21 +Culled Empty Block (label) main::@23 Culled Empty Block (label) main::@22 Culled Empty Block (label) startProcessing::@5 Culled Empty Block (label) startProcessing::@14 Culled Empty Block (label) startProcessing::@12 Culled Empty Block (label) getCharToProcess::@1 +Culled Empty Block (label) initSprites::@1_1 Culled Empty Block (label) initSprites::@3 +Culled Empty Block (label) initSprites::@10 Culled Empty Block (label) initSprites::@9 +Culled Empty Block (label) init_angle_screen::@2_1 Culled Empty Block (label) init_angle_screen::@10 +Culled Empty Block (label) init_angle_screen::@11 Culled Empty Block (label) atan2_16::@35 Culled Empty Block (label) atan2_16::@39 Culled Empty Block (label) atan2_16::@38 @@ -3953,68 +3990,68 @@ main: scope:[main] from @2 to:main::@9 main::@9: scope:[main] from main [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0 + to:main::@2 +main::@2: scope:[main] from main::@1 main::@9 + [12] (byte*) main::dst#4 ← phi( main::@1/(byte*) main::dst#1 main::@9/(byte*) main::dst#0 ) + [12] (byte*) main::src#4 ← phi( main::@1/(byte*) main::src#1 main::@9/(const byte*) SCREEN#0 ) + [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) + [14] (byte*) main::src#1 ← ++ (byte*) main::src#4 + [15] (byte*) main::dst#1 ← ++ (byte*) main::dst#4 to:main::@1 -main::@1: scope:[main] from main::@2 main::@9 - [12] (byte*) main::dst#2 ← phi( main::@9/(byte*) main::dst#0 main::@2/(byte*) main::dst#1 ) - [12] (byte*) main::src#2 ← phi( main::@9/(const byte*) SCREEN#0 main::@2/(byte*) main::src#1 ) - [13] if((byte*) main::src#2!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 main::@3 - [14] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 ) - [15] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 - [16] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 - [17] (byte) main::$28 ← (byte) main::$27 << (byte) 1 - [18] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 - [19] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 - [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 - [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 - [22] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 - [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 - [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 - [25] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 - [26] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 - [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE - [28] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 - [29] (byte) main::i#1 ← ++ (byte) main::i#2 - [30] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 + [17] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 ) + [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 + [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 + [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 + [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 + [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 + [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 + [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 + [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 + [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 + [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 + [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 + [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 + [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE + [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 + [32] (byte) main::i#1 ← ++ (byte) main::i#2 + [33] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@3 - [31] phi() - [32] call initSprites + [34] phi() + [35] call initSprites to:main::@10 main::@10: scope:[main] from main::@4 - [33] phi() - [34] call setupRasterIrq + [36] phi() + [37] call setupRasterIrq to:main::@5 main::@5: scope:[main] from main::@10 main::@6 - [35] phi() - [36] call getCharToProcess - [37] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 - [38] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 - [39] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 + [38] phi() + [39] call getCharToProcess + [40] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 + [41] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 + [42] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 to:main::@11 main::@11: scope:[main] from main::@5 - [40] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 - [41] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 - [42] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 - [43] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 + [43] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 + [44] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 + [45] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 + [46] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 to:main::@7 main::@7: scope:[main] from main::@11 - [44] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' + [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' to:main::@8 main::@8: scope:[main] from main::@7 main::@8 - [45] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) + [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) to:main::@8 main::@6: scope:[main] from main::@11 - [46] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 - [47] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 - [48] call startProcessing + [49] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 + [50] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 + [51] call startProcessing to:main::@5 -main::@2: scope:[main] from main::@1 - [49] *((byte*) main::dst#2) ← *((byte*) main::src#2) - [50] (byte*) main::src#1 ← ++ (byte*) main::src#2 - [51] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 - to:main::@1 startProcessing: scope:[startProcessing] from main::@6 [52] phi() to:startProcessing::@1 @@ -4191,29 +4228,29 @@ setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2 to:@return initSprites: scope:[initSprites] from main::@4 [156] phi() + to:initSprites::@2 +initSprites::@2: scope:[initSprites] from initSprites initSprites::@1 + [157] (byte*) initSprites::sp#4 ← phi( initSprites::@1/(byte*) initSprites::sp#1 initSprites/(const byte*) SPRITE_DATA#0 ) + [158] *((byte*) initSprites::sp#4) ← (byte) 0 + [159] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#4 to:initSprites::@1 -initSprites::@1: scope:[initSprites] from initSprites initSprites::@2 - [157] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA#0 initSprites::@2/(byte*) initSprites::sp#1 ) - [158] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 +initSprites::@1: scope:[initSprites] from initSprites::@2 + [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 to:initSprites::@3 initSprites::@3: scope:[initSprites] from initSprites::@1 initSprites::@3 - [159] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@3/(byte) initSprites::i#1 ) - [160] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 - [161] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 - [162] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 + [161] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@3/(byte) initSprites::i#1 ) + [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 + [163] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 + [164] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 to:initSprites::@4 initSprites::@4: scope:[initSprites] from initSprites::@3 - [163] *((const byte*) SPRITES_MC#0) ← (byte) 0 - [164] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 - [165] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 + [165] *((const byte*) SPRITES_MC#0) ← (byte) 0 + [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 + [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 to:initSprites::@return initSprites::@return: scope:[initSprites] from initSprites::@4 - [166] return + [168] return to:@return -initSprites::@2: scope:[initSprites] from initSprites::@1 - [167] *((byte*) initSprites::sp#2) ← (byte) 0 - [168] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 - to:initSprites::@1 init_angle_screen: scope:[init_angle_screen] from main [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c @@ -4222,46 +4259,46 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an [171] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) [171] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) [171] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - to:init_angle_screen::@2 -init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [172] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [172] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [173] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 - to:init_angle_screen::@4 -init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [176] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [177] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 - to:init_angle_screen::@return -init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [178] return - to:@return -init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [186] call atan2_16 - [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + to:init_angle_screen::@3 +init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@2 + [172] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 ) + [172] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 ) + [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 + [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [180] call atan2_16 + [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [198] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [199] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 + [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 + [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 + [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 + [192] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 + [193] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 to:init_angle_screen::@2 +init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@5 + [194] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 + to:init_angle_screen::@4 +init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 + [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [197] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [198] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + to:init_angle_screen::@return +init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 + [199] return + to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@3 [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 @@ -4656,8 +4693,8 @@ VARIABLE REGISTER WEIGHTS (byte) initSprites::i#1 16.5 (byte) initSprites::i#2 16.5 (byte*) initSprites::sp -(byte*) initSprites::sp#1 22.0 -(byte*) initSprites::sp#2 14.666666666666666 +(byte*) initSprites::sp#1 16.5 +(byte*) initSprites::sp#4 16.5 (void()) init_angle_screen((byte*) init_angle_screen::screen) (word~) init_angle_screen::$11 202.0 (byte~) init_angle_screen::$13 202.0 @@ -4675,17 +4712,17 @@ VARIABLE REGISTER WEIGHTS (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#0 4.0 (byte*) init_angle_screen::screen_bottomline#1 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 9.04 +(byte*) init_angle_screen::screen_bottomline#6 9.040000000000001 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#0 2.0 (byte*) init_angle_screen::screen_topline#1 5.5 (byte*) init_angle_screen::screen_topline#6 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 101.0 -(byte) init_angle_screen::x#2 28.857142857142858 +(byte) init_angle_screen::x#5 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 202.0 -(byte) init_angle_screen::xb#2 18.363636363636363 +(byte) init_angle_screen::xb#1 101.0 +(byte) init_angle_screen::xb#5 19.238095238095237 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 33.666666666666664 (byte) init_angle_screen::y @@ -4713,14 +4750,14 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (byte) main::center_y#0 5.5 (byte*) main::dst (byte*) main::dst#0 4.0 -(byte*) main::dst#1 22.0 -(byte*) main::dst#2 8.75 +(byte*) main::dst#1 11.0 +(byte*) main::dst#4 11.666666666666666 (byte) main::i (byte) main::i#1 16.5 (byte) main::i#2 3.6666666666666665 (byte*) main::src (byte*) main::src#1 11.0 -(byte*) main::src#2 14.666666666666666 +(byte*) main::src#4 16.5 (void*()) malloc((word) malloc::size) (byte*) malloc::mem (byte*) malloc::mem#0 0.8 @@ -4836,8 +4873,8 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (word) startProcessing::spriteY#0 0.4 Initial phi equivalence classes -[ main::src#2 main::src#1 ] -[ main::dst#2 main::dst#0 main::dst#1 ] +[ main::src#4 main::src#1 ] +[ main::dst#4 main::dst#1 main::dst#0 ] [ main::i#2 main::i#1 ] [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] @@ -4852,13 +4889,13 @@ Initial phi equivalence classes [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] -[ initSprites::sp#2 initSprites::sp#1 ] +[ initSprites::sp#4 initSprites::sp#1 ] [ initSprites::i#2 initSprites::i#1 ] [ init_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::x#2 init_angle_screen::x#1 ] -[ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +[ init_angle_screen::x#5 init_angle_screen::x#1 ] +[ init_angle_screen::xb#5 init_angle_screen::xb#1 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] [ atan2_16::i#2 atan2_16::i#1 ] @@ -4965,8 +5002,8 @@ Added variable processChars::ychar#0 to zero page equivalence class [ processCha Added variable processChars::$39 to zero page equivalence class [ processChars::$39 ] Added variable processChars::$33 to zero page equivalence class [ processChars::$33 ] Complete equivalence classes -[ main::src#2 main::src#1 ] -[ main::dst#2 main::dst#0 main::dst#1 ] +[ main::src#4 main::src#1 ] +[ main::dst#4 main::dst#1 main::dst#0 ] [ main::i#2 main::i#1 ] [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] @@ -4981,13 +5018,13 @@ Complete equivalence classes [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] -[ initSprites::sp#2 initSprites::sp#1 ] +[ initSprites::sp#4 initSprites::sp#1 ] [ initSprites::i#2 initSprites::i#1 ] [ init_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::x#2 init_angle_screen::x#1 ] -[ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +[ init_angle_screen::x#5 init_angle_screen::x#1 ] +[ init_angle_screen::xb#5 init_angle_screen::xb#1 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] [ atan2_16::i#2 atan2_16::i#1 ] @@ -5093,8 +5130,8 @@ Complete equivalence classes [ processChars::ychar#0 ] [ processChars::$39 ] [ processChars::$33 ] -Allocated zp ZP_WORD:2 [ main::src#2 main::src#1 ] -Allocated zp ZP_WORD:4 [ main::dst#2 main::dst#0 main::dst#1 ] +Allocated zp ZP_WORD:2 [ main::src#4 main::src#1 ] +Allocated zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] Allocated zp ZP_BYTE:6 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] Allocated zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] @@ -5109,13 +5146,13 @@ Allocated zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::clo Allocated zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] Allocated zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] Allocated zp ZP_BYTE:23 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] -Allocated zp ZP_WORD:24 [ initSprites::sp#2 initSprites::sp#1 ] +Allocated zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 ] Allocated zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ] Allocated zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Allocated zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] Allocated zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] -Allocated zp ZP_BYTE:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Allocated zp ZP_BYTE:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Allocated zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Allocated zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] Allocated zp ZP_WORD:34 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] Allocated zp ZP_WORD:36 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] Allocated zp ZP_BYTE:38 [ atan2_16::i#2 atan2_16::i#1 ] @@ -5384,209 +5421,210 @@ main: { sta dst lda SCREEN_COPY+1 sta dst+1 - // [12] phi from main::@9 to main::@1 [phi:main::@9->main::@1] - b1_from_b9: - // [12] phi (byte*) main::dst#2 = (byte*) main::dst#0 [phi:main::@9->main::@1#0] -- register_copy - // [12] phi (byte*) main::src#2 = (const byte*) SCREEN#0 [phi:main::@9->main::@1#1] -- pbuz1=pbuc1 + // [12] phi from main::@9 to main::@2 [phi:main::@9->main::@2] + b2_from_b9: + // [12] phi (byte*) main::dst#4 = (byte*) main::dst#0 [phi:main::@9->main::@2#0] -- register_copy + // [12] phi (byte*) main::src#4 = (const byte*) SCREEN#0 [phi:main::@9->main::@2#1] -- pbuz1=pbuc1 lda #SCREEN sta src+1 + jmp b2 + // [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [12] phi (byte*) main::dst#4 = (byte*) main::dst#1 [phi:main::@1->main::@2#0] -- register_copy + // [12] phi (byte*) main::src#4 = (byte*) main::src#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 + // main::@2 + b2: + // [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (src),y + ldy #0 + sta (dst),y + // [14] (byte*) main::src#1 ← ++ (byte*) main::src#4 -- pbuz1=_inc_pbuz1 + inc src + bne !+ + inc src+1 + !: + // [15] (byte*) main::dst#1 ← ++ (byte*) main::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: jmp b1 // Copy screen to screen copy // main::@1 b1: - // [13] if((byte*) main::src#2!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_neq_pbuc1_then_la1 + // [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_neq_pbuc1_then_la1 lda src+1 cmp #>SCREEN+$3e8 - bne b2 + bne b2_from_b1 lda src cmp #main::@3] + bne b2_from_b1 + // [17] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: - // [14] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 lda #0 sta i jmp b3 // Init processing array - // [14] phi from main::@3 to main::@3 [phi:main::@3->main::@3] + // [17] phi from main::@3 to main::@3 [phi:main::@3->main::@3] b3_from_b3: - // [14] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy + // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy jmp b3 // main::@3 b3: - // [15] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _26 - // [16] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 + // [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 lda _26 clc adc i sta _27 - // [17] (byte) main::$28 ← (byte) main::$27 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda _27 asl sta _28 - // [18] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 + // [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 lda _28 clc adc i sta _29 - // [19] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda _29 asl sta _16 - // [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 + // [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 lda _16 ldx #0 tay txa sta PROCESSING,y - // [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 + // [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 lda _16 ldx #0 tay txa sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,y - // [22] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 + // [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 lda _16 ldx #0 tay txa sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,y - // [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 + // [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 lda _16 ldx #0 tay txa sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,y - // [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 lda #0 ldy _16 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,y - // [25] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 lda #0 ldy _16 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,y - // [26] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 lda #0 ldy _16 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,y - // [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuz1=vbuc2 + // [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuz1=vbuc2 lda #STATUS_FREE ldy _16 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y - // [28] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuz1=pbuc2 + // [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuz1=pbuc2 ldy _16 lda #<0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,y lda #>0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,y - // [29] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [32] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc i - // [30] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 + // [33] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_PROCESSING-1+1 cmp i bne b3_from_b3 - // [31] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4] b4_from_b3: jmp b4 // main::@4 b4: - // [32] call initSprites + // [35] call initSprites // [156] phi from main::@4 to initSprites [phi:main::@4->initSprites] initSprites_from_b4: jsr initSprites - // [33] phi from main::@4 to main::@10 [phi:main::@4->main::@10] + // [36] phi from main::@4 to main::@10 [phi:main::@4->main::@10] b10_from_b4: jmp b10 // main::@10 b10: - // [34] call setupRasterIrq + // [37] call setupRasterIrq jsr setupRasterIrq - // [35] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5] + // [38] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5] b5_from_b10: b5_from_b6: jmp b5 // Main loop // main::@5 b5: - // [36] call getCharToProcess + // [39] call getCharToProcess jsr getCharToProcess - // [37] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuz1=vbuz2 + // [40] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuz1=vbuz2 lda getCharToProcess.return_x_1 sta getCharToProcess.return_x - // [38] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuz1=vbuz2 + // [41] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuz1=vbuz2 lda getCharToProcess.return_y_1 sta getCharToProcess.return_y - // [39] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 + // [42] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 lda getCharToProcess.return_dist_1 sta getCharToProcess.return_dist jmp b11 // main::@11 b11: - // [40] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 -- vbuz1=vbuz2 + // [43] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 -- vbuz1=vbuz2 lda getCharToProcess.return_x sta center_x - // [41] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuz2 + // [44] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuz2 lda getCharToProcess.return_y sta center_y - // [42] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuz1=vbuz2 + // [45] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuz1=vbuz2 lda getCharToProcess.return_dist sta center_dist - // [43] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 + // [46] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 lda #NOT_FOUND cmp center_dist bne b6 jmp b7 // main::@7 b7: - // [44] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 + // [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 lda #'.' sta SCREEN+$3e7 jmp b8 // main::@8 b8: - // [45] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc COLS+$3e7 jmp b8 // main::@6 b6: - // [46] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuz2 + // [49] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuz2 lda center_x sta startProcessing.center_x - // [47] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 -- vbuz1=vbuz2 + // [50] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 -- vbuz1=vbuz2 lda center_y sta startProcessing.center_y - // [48] call startProcessing + // [51] call startProcessing // [52] phi from main::@6 to startProcessing [phi:main::@6->startProcessing] startProcessing_from_b6: jsr startProcessing jmp b5_from_b6 - // main::@2 - b2: - // [49] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (src),y - ldy #0 - sta (dst),y - // [50] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 - inc src - bne !+ - inc src+1 - !: - // [51] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [12] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [12] phi (byte*) main::dst#2 = (byte*) main::dst#1 [phi:main::@2->main::@1#0] -- register_copy - // [12] phi (byte*) main::src#2 = (byte*) main::src#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // startProcessing // Start processing a char - by inserting it into the PROCESSING array @@ -6341,81 +6379,82 @@ setupRasterIrq: { initSprites: { .label sp = $18 .label i = $1a - // [157] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1] - b1_from_initSprites: - // [157] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA#0 [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1 + // [157] phi from initSprites to initSprites::@2 [phi:initSprites->initSprites::@2] + b2_from_initSprites: + // [157] phi (byte*) initSprites::sp#4 = (const byte*) SPRITE_DATA#0 [phi:initSprites->initSprites::@2#0] -- pbuz1=pbuc1 lda #SPRITE_DATA sta sp+1 + jmp b2 + // [157] phi from initSprites::@1 to initSprites::@2 [phi:initSprites::@1->initSprites::@2] + b2_from_b1: + // [157] phi (byte*) initSprites::sp#4 = (byte*) initSprites::sp#1 [phi:initSprites::@1->initSprites::@2#0] -- register_copy + jmp b2 + // initSprites::@2 + b2: + // [158] *((byte*) initSprites::sp#4) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (sp),y + // [159] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#4 -- pbuz1=_inc_pbuz1 + inc sp + bne !+ + inc sp+1 + !: jmp b1 // Clear sprite data // initSprites::@1 b1: - // [158] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1 + // [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1 lda sp+1 cmp #>SPRITE_DATA+NUM_PROCESSING*$40 - bcc b2 + bcc b2_from_b1 bne !+ lda sp cmp #initSprites::@3] + // [161] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3] b3_from_b1: - // [159] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuz1=vbuc1 + // [161] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuz1=vbuc1 lda #0 sta i jmp b3 // Initialize sprite registers - // [159] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3] + // [161] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3] b3_from_b3: - // [159] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy + // [161] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy jmp b3 // initSprites::@3 b3: - // [160] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 -- pbuc1_derefidx_vbuz1=vbuc2 lda #LIGHT_BLUE ldy i sta SPRITES_COLS,y - // [161] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuz1=_inc_vbuz1 + // [163] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuz1=_inc_vbuz1 inc i - // [162] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuz1_neq_vbuc1_then_la1 + // [164] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp i bne b3_from_b3 jmp b4 // initSprites::@4 b4: - // [163] *((const byte*) SPRITES_MC#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [165] *((const byte*) SPRITES_MC#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_MC - // [164] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_EXPAND_X - // [165] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_EXPAND_Y jmp breturn // initSprites::@return breturn: - // [166] return + // [168] return rts - // initSprites::@2 - b2: - // [167] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 - lda #0 - ldy #0 - sta (sp),y - // [168] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 -- pbuz1=_inc_pbuz1 - inc sp - bne !+ - inc sp+1 - !: - // [157] phi from initSprites::@2 to initSprites::@1 [phi:initSprites::@2->initSprites::@1] - b1_from_b2: - // [157] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy - jmp b1 } // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. @@ -6471,89 +6510,58 @@ init_angle_screen: { jmp b1 // init_angle_screen::@1 b1: - // [172] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - b2_from_b1: - // [172] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [172] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + b3_from_b1: + // [172] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [172] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [172] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b2 - // init_angle_screen::@2 - b2: - // [173] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - jmp b4 - // init_angle_screen::@4 - b4: - // [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // [176] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [177] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b4 - jmp breturn - // init_angle_screen::@return - breturn: - // [178] return - rts + jmp b3 + // [172] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + b3_from_b2: + // [172] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [172] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy + jmp b3 // init_angle_screen::@3 b3: - // [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta _3 - // [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 + // [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc _3 sta _4 - // [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _4 ldy #0 sta xw+1 sty xw - // [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda y asl sta _7 - // [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _7 ldy #0 sta yw+1 sty yw - // [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 + // [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 lda xw sta atan2_16.x lda xw+1 sta atan2_16.x+1 - // [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 + // [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 lda yw sta atan2_16.y lda yw+1 sta atan2_16.y+1 - // [186] call atan2_16 + // [180] call atan2_16 jsr atan2_16 - // [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 + // [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 lda atan2_16.return sta atan2_16.return_2 lda atan2_16.return+1 @@ -6561,12 +6569,12 @@ init_angle_screen: { jmp b5 // init_angle_screen::@5 b5: - // [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 + // [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 lda atan2_16.return_2 sta angle_w lda atan2_16.return_2+1 sta angle_w+1 - // [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 + // [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 lda #$80 clc adc angle_w @@ -6574,49 +6582,81 @@ init_angle_screen: { lda #0 adc angle_w+1 sta _11+1 - // [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w - // [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 + // [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 lda ang_w eor #$ff clc adc #1 sta _13 - // [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 + // [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 lda _13 ldy xb sta (screen_topline),y - // [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 + // [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 lax ang_w axs #-[$80] stx _14 - // [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 + // [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 lda _14 ldy x sta (screen_topline),y - // [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 + // [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$80 sec sbc ang_w sta _15 - // [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 + // [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 lda _15 ldy x sta (screen_bottomline),y - // [198] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [192] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [199] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [193] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [172] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - b2_from_b5: - // [172] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [172] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp b2 + // init_angle_screen::@2 + b2: + // [194] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3_from_b2 + jmp b4 + // init_angle_screen::@4 + b4: + // [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // [197] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [198] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b4 + jmp breturn + // init_angle_screen::@return + breturn: + // [199] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) @@ -7490,179 +7530,179 @@ Statement [3] (void*) SCREEN_COPY#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_CO Statement [5] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ( [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a Statement [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ) always clobbers reg byte a Statement [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ) always clobbers reg byte a -Statement [13] if((byte*) main::src#2!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a -Statement [15] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ) always clobbers reg byte a +Statement [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#4 main::dst#4 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#4 main::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#1 main::dst#1 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#1 main::dst#1 ] ) always clobbers reg byte a +Statement [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::i#2 main::i#1 ] -Statement [16] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ) always clobbers reg byte a -Statement [17] (byte) main::$28 ← (byte) main::$27 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ) always clobbers reg byte a -Statement [18] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ) always clobbers reg byte a -Statement [19] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ) always clobbers reg byte a +Statement [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ) always clobbers reg byte a +Statement [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ) always clobbers reg byte a +Statement [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:62 [ main::$16 ] -Statement [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [22] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [25] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [26] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [28] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ) always clobbers reg byte a -Statement [44] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a -Statement [49] *((byte*) main::dst#2) ← *((byte*) main::src#2) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ) always clobbers reg byte a +Statement [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ) always clobbers reg byte a +Statement [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a +Statement [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:69 [ startProcessing::center_x#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:70 [ startProcessing::center_y#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] -Statement [56] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ) always clobbers reg byte a -Statement [57] (byte) startProcessing::$44 ← (byte) startProcessing::$43 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$44 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$44 ] ) always clobbers reg byte a -Statement [58] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$45 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$45 ] ) always clobbers reg byte a -Statement [59] (byte~) startProcessing::$30 ← (byte) startProcessing::$45 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ) always clobbers reg byte a -Statement [60] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ) always clobbers reg byte a -Statement [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ) always clobbers reg byte a -Statement [64] (word) startProcessing::$47 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$47 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$47 ] ) always clobbers reg byte a -Statement [65] (word) startProcessing::$48 ← (word) startProcessing::$47 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$48 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$48 ] ) always clobbers reg byte a -Statement [66] (word~) startProcessing::$1 ← (word) startProcessing::$48 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ) always clobbers reg byte a -Statement [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ) always clobbers reg byte a -Statement [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS#0 + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ) always clobbers reg byte a -Statement [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ) always clobbers reg byte a reg byte y +Statement [56] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ) always clobbers reg byte a +Statement [57] (byte) startProcessing::$44 ← (byte) startProcessing::$43 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$44 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$44 ] ) always clobbers reg byte a +Statement [58] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$45 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$45 ] ) always clobbers reg byte a +Statement [59] (byte~) startProcessing::$30 ← (byte) startProcessing::$45 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ) always clobbers reg byte a +Statement [60] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ) always clobbers reg byte a +Statement [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ) always clobbers reg byte a +Statement [64] (word) startProcessing::$47 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$47 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$47 ] ) always clobbers reg byte a +Statement [65] (word) startProcessing::$48 ← (word) startProcessing::$47 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$48 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$48 ] ) always clobbers reg byte a +Statement [66] (word~) startProcessing::$1 ← (word) startProcessing::$48 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ) always clobbers reg byte a +Statement [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ) always clobbers reg byte a +Statement [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS#0 + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ) always clobbers reg byte a +Statement [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:69 [ startProcessing::center_x#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:70 [ startProcessing::center_y#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] -Statement [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN#0 + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a +Statement [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN#0 + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ] -Statement [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ) always clobbers reg byte a -Statement [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ) always clobbers reg byte a -Statement [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ) always clobbers reg byte a -Statement [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ) always clobbers reg byte a reg byte y +Statement [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ) always clobbers reg byte a +Statement [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ) always clobbers reg byte a +Statement [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ) always clobbers reg byte a +Statement [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ] -Statement [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ) always clobbers reg byte a -Statement [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ) always clobbers reg byte a -Statement [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$9 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a -Statement [79] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a -Statement [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ) always clobbers reg byte a reg byte y +Statement [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ) always clobbers reg byte a +Statement [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ) always clobbers reg byte a +Statement [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$9 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a +Statement [79] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a +Statement [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ] -Statement [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ) always clobbers reg byte a -Statement [86] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a -Statement [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ) always clobbers reg byte a -Statement [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ) always clobbers reg byte a -Statement [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ) always clobbers reg byte a -Statement [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ) always clobbers reg byte a -Statement [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ) always clobbers reg byte a -Statement [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ) always clobbers reg byte a -Statement [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ) always clobbers reg byte a -Statement [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ) always clobbers reg byte a -Statement [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ) always clobbers reg byte a -Statement [97] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ) always clobbers reg byte a +Statement [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ) always clobbers reg byte a +Statement [86] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a +Statement [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ) always clobbers reg byte a +Statement [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ) always clobbers reg byte a +Statement [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ) always clobbers reg byte a +Statement [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ) always clobbers reg byte a +Statement [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ) always clobbers reg byte a +Statement [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ) always clobbers reg byte a +Statement [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ) always clobbers reg byte a +Statement [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ) always clobbers reg byte a +Statement [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ) always clobbers reg byte a +Statement [97] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ] -Statement [98] (word~) startProcessing::$23 ← (word)(byte~) startProcessing::$22 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 ] ) always clobbers reg byte a -Statement [99] (byte) startProcessing::$50 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$50 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$50 ] ) always clobbers reg byte a -Statement [100] (byte) startProcessing::$51 ← (byte) startProcessing::$50 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$51 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$51 ] ) always clobbers reg byte a -Statement [101] (byte) startProcessing::$52 ← (byte) startProcessing::$51 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$52 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$52 ] ) always clobbers reg byte a -Statement [102] (byte) startProcessing::$53 ← (byte) startProcessing::$52 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$53 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$53 ] ) always clobbers reg byte a -Statement [103] (byte~) startProcessing::$31 ← (byte) startProcessing::$53 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a -Statement [104] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a +Statement [98] (word~) startProcessing::$23 ← (word)(byte~) startProcessing::$22 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 ] ) always clobbers reg byte a +Statement [99] (byte) startProcessing::$50 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$50 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$50 ] ) always clobbers reg byte a +Statement [100] (byte) startProcessing::$51 ← (byte) startProcessing::$50 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$51 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$51 ] ) always clobbers reg byte a +Statement [101] (byte) startProcessing::$52 ← (byte) startProcessing::$51 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$52 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$52 ] ) always clobbers reg byte a +Statement [102] (byte) startProcessing::$53 ← (byte) startProcessing::$52 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$53 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$53 ] ) always clobbers reg byte a +Statement [103] (byte~) startProcessing::$31 ← (byte) startProcessing::$53 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a +Statement [104] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:124 [ startProcessing::$31 ] -Statement [105] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a -Statement [106] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$31) ← (word~) startProcessing::$23 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a -Statement [107] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$31) ← (byte) $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a -Statement [108] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$31) ← (byte) startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a -Statement [109] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a -Statement [110] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a -Statement [111] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a -Statement [112] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ) always clobbers reg byte a -Statement [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ) always clobbers reg byte a -Statement [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ) always clobbers reg byte a +Statement [105] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a +Statement [106] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$31) ← (word~) startProcessing::$23 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a +Statement [107] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$31) ← (byte) $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a +Statement [108] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$31) ← (byte) startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a +Statement [109] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a +Statement [110] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a +Statement [111] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a +Statement [112] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ) always clobbers reg byte a +Statement [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ) always clobbers reg byte a +Statement [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] -Statement [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a -Statement [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ) always clobbers reg byte a +Statement [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a +Statement [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] -Statement [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ) always clobbers reg byte a -Statement [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ) always clobbers reg byte a -Statement [136] (word) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ) always clobbers reg byte a -Statement [137] (word) getCharToProcess::$13 ← (word) getCharToProcess::$12 + (word~) getCharToProcess::$8 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ) always clobbers reg byte a -Statement [138] (word~) getCharToProcess::$9 ← (word) getCharToProcess::$13 << (byte) 3 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ) always clobbers reg byte a -Statement [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ) always clobbers reg byte a -Statement [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a -Statement [147] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [148] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [149] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [150] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [151] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [152] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [153] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [158] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 [ initSprites::sp#2 ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a -Statement [160] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 [ initSprites::i#2 ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] ) always clobbers reg byte a +Statement [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ) always clobbers reg byte a +Statement [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ) always clobbers reg byte a +Statement [136] (word) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ) always clobbers reg byte a +Statement [137] (word) getCharToProcess::$13 ← (word) getCharToProcess::$12 + (word~) getCharToProcess::$8 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ) always clobbers reg byte a +Statement [138] (word~) getCharToProcess::$9 ← (word) getCharToProcess::$13 << (byte) 3 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ) always clobbers reg byte a +Statement [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ) always clobbers reg byte a +Statement [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a +Statement [147] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [148] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [149] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [150] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [151] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [152] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [153] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [158] *((byte*) initSprites::sp#4) ← (byte) 0 [ initSprites::sp#4 ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#4 ] ) always clobbers reg byte a reg byte y +Statement [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 [ initSprites::sp#1 ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#1 ] ) always clobbers reg byte a +Statement [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 [ initSprites::i#2 ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ] -Statement [163] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [164] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 [ ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [165] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 [ ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [167] *((byte*) initSprites::sp#2) ← (byte) 0 [ initSprites::sp#2 ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a reg byte y +Statement [165] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 [ ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 [ ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a Statement [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a Statement [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Statement [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Statement [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Statement [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] -Statement [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] -Statement [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:38 [ atan2_16::i#2 atan2_16::i#1 ] -Statement [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [218] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [218] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:43 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -Statement [219] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [229] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [230] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [236] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [237] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [241] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [242] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [219] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [229] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [230] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [236] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [237] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [241] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [242] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] ) always clobbers reg byte a Statement [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Statement [250] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 [ ] ( [ ] ) always clobbers reg byte a @@ -7730,147 +7770,147 @@ Statement [3] (void*) SCREEN_COPY#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_CO Statement [5] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ( [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a Statement [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ) always clobbers reg byte a Statement [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ) always clobbers reg byte a -Statement [13] if((byte*) main::src#2!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a -Statement [15] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ) always clobbers reg byte a -Statement [16] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ) always clobbers reg byte a -Statement [17] (byte) main::$28 ← (byte) main::$27 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ) always clobbers reg byte a -Statement [18] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ) always clobbers reg byte a -Statement [19] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [22] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [25] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [26] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [28] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ) always clobbers reg byte a -Statement [44] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a -Statement [49] *((byte*) main::dst#2) ← *((byte*) main::src#2) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ) always clobbers reg byte a -Statement [56] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ) always clobbers reg byte a -Statement [57] (byte) startProcessing::$44 ← (byte) startProcessing::$43 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$44 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$44 ] ) always clobbers reg byte a -Statement [58] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$45 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$45 ] ) always clobbers reg byte a -Statement [59] (byte~) startProcessing::$30 ← (byte) startProcessing::$45 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ) always clobbers reg byte a -Statement [60] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ) always clobbers reg byte a -Statement [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ) always clobbers reg byte a -Statement [64] (word) startProcessing::$47 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$47 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$47 ] ) always clobbers reg byte a -Statement [65] (word) startProcessing::$48 ← (word) startProcessing::$47 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$48 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$48 ] ) always clobbers reg byte a -Statement [66] (word~) startProcessing::$1 ← (word) startProcessing::$48 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ) always clobbers reg byte a -Statement [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ) always clobbers reg byte a -Statement [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS#0 + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ) always clobbers reg byte a -Statement [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ) always clobbers reg byte a reg byte y -Statement [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN#0 + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a -Statement [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ) always clobbers reg byte a -Statement [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ) always clobbers reg byte a -Statement [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ) always clobbers reg byte a -Statement [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ) always clobbers reg byte a reg byte y -Statement [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ) always clobbers reg byte a -Statement [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ) always clobbers reg byte a -Statement [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$9 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a -Statement [79] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a -Statement [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ) always clobbers reg byte a reg byte y -Statement [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ) always clobbers reg byte a -Statement [86] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a -Statement [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ) always clobbers reg byte a -Statement [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ) always clobbers reg byte a -Statement [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ) always clobbers reg byte a -Statement [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ) always clobbers reg byte a -Statement [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ) always clobbers reg byte a -Statement [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ) always clobbers reg byte a -Statement [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ) always clobbers reg byte a -Statement [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ) always clobbers reg byte a -Statement [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ) always clobbers reg byte a -Statement [97] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ) always clobbers reg byte a -Statement [98] (word~) startProcessing::$23 ← (word)(byte~) startProcessing::$22 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 ] ) always clobbers reg byte a -Statement [99] (byte) startProcessing::$50 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$50 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$50 ] ) always clobbers reg byte a -Statement [100] (byte) startProcessing::$51 ← (byte) startProcessing::$50 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$51 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$51 ] ) always clobbers reg byte a -Statement [101] (byte) startProcessing::$52 ← (byte) startProcessing::$51 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$52 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$52 ] ) always clobbers reg byte a -Statement [102] (byte) startProcessing::$53 ← (byte) startProcessing::$52 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$53 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$53 ] ) always clobbers reg byte a -Statement [103] (byte~) startProcessing::$31 ← (byte) startProcessing::$53 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a -Statement [104] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a -Statement [105] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a -Statement [106] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$31) ← (word~) startProcessing::$23 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a -Statement [107] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$31) ← (byte) $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a -Statement [108] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$31) ← (byte) startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a -Statement [109] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a -Statement [110] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a -Statement [111] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a -Statement [112] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ) always clobbers reg byte a -Statement [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ) always clobbers reg byte a -Statement [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ) always clobbers reg byte a -Statement [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a -Statement [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ) always clobbers reg byte a -Statement [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ) always clobbers reg byte a -Statement [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ) always clobbers reg byte a -Statement [136] (word) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ) always clobbers reg byte a -Statement [137] (word) getCharToProcess::$13 ← (word) getCharToProcess::$12 + (word~) getCharToProcess::$8 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ) always clobbers reg byte a -Statement [138] (word~) getCharToProcess::$9 ← (word) getCharToProcess::$13 << (byte) 3 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ) always clobbers reg byte a -Statement [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ) always clobbers reg byte a -Statement [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a -Statement [147] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [148] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [149] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [150] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [151] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [152] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [153] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [158] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 [ initSprites::sp#2 ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a -Statement [160] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 [ initSprites::i#2 ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] ) always clobbers reg byte a -Statement [163] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [164] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 [ ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [165] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 [ ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [167] *((byte*) initSprites::sp#2) ← (byte) 0 [ initSprites::sp#2 ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a reg byte y +Statement [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#4 main::dst#4 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#4 main::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#1 main::dst#1 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#1 main::dst#1 ] ) always clobbers reg byte a +Statement [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ) always clobbers reg byte a +Statement [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ) always clobbers reg byte a +Statement [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ) always clobbers reg byte a +Statement [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ) always clobbers reg byte a +Statement [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a +Statement [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ) always clobbers reg byte a +Statement [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a +Statement [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ) always clobbers reg byte a +Statement [56] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ) always clobbers reg byte a +Statement [57] (byte) startProcessing::$44 ← (byte) startProcessing::$43 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$44 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$44 ] ) always clobbers reg byte a +Statement [58] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$45 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$45 ] ) always clobbers reg byte a +Statement [59] (byte~) startProcessing::$30 ← (byte) startProcessing::$45 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ) always clobbers reg byte a +Statement [60] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ) always clobbers reg byte a +Statement [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ) always clobbers reg byte a +Statement [64] (word) startProcessing::$47 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$47 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$47 ] ) always clobbers reg byte a +Statement [65] (word) startProcessing::$48 ← (word) startProcessing::$47 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$48 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$48 ] ) always clobbers reg byte a +Statement [66] (word~) startProcessing::$1 ← (word) startProcessing::$48 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ) always clobbers reg byte a +Statement [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ) always clobbers reg byte a +Statement [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS#0 + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ) always clobbers reg byte a +Statement [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ) always clobbers reg byte a reg byte y +Statement [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN#0 + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a +Statement [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ) always clobbers reg byte a +Statement [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ) always clobbers reg byte a +Statement [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ) always clobbers reg byte a +Statement [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ) always clobbers reg byte a reg byte y +Statement [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ) always clobbers reg byte a +Statement [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ) always clobbers reg byte a +Statement [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$9 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a +Statement [79] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a +Statement [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ) always clobbers reg byte a reg byte y +Statement [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ) always clobbers reg byte a +Statement [86] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a +Statement [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ) always clobbers reg byte a +Statement [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ) always clobbers reg byte a +Statement [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ) always clobbers reg byte a +Statement [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ) always clobbers reg byte a +Statement [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ) always clobbers reg byte a +Statement [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ) always clobbers reg byte a +Statement [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ) always clobbers reg byte a +Statement [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ) always clobbers reg byte a +Statement [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ) always clobbers reg byte a +Statement [97] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ) always clobbers reg byte a +Statement [98] (word~) startProcessing::$23 ← (word)(byte~) startProcessing::$22 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 ] ) always clobbers reg byte a +Statement [99] (byte) startProcessing::$50 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$50 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$50 ] ) always clobbers reg byte a +Statement [100] (byte) startProcessing::$51 ← (byte) startProcessing::$50 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$51 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$51 ] ) always clobbers reg byte a +Statement [101] (byte) startProcessing::$52 ← (byte) startProcessing::$51 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$52 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$52 ] ) always clobbers reg byte a +Statement [102] (byte) startProcessing::$53 ← (byte) startProcessing::$52 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$53 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$53 ] ) always clobbers reg byte a +Statement [103] (byte~) startProcessing::$31 ← (byte) startProcessing::$53 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a +Statement [104] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a +Statement [105] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a +Statement [106] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$31) ← (word~) startProcessing::$23 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a +Statement [107] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$31) ← (byte) $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a +Statement [108] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$31) ← (byte) startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a +Statement [109] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a +Statement [110] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a +Statement [111] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a +Statement [112] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ) always clobbers reg byte a +Statement [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ) always clobbers reg byte a +Statement [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ) always clobbers reg byte a +Statement [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a +Statement [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ) always clobbers reg byte a +Statement [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ) always clobbers reg byte a +Statement [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ) always clobbers reg byte a +Statement [136] (word) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ) always clobbers reg byte a +Statement [137] (word) getCharToProcess::$13 ← (word) getCharToProcess::$12 + (word~) getCharToProcess::$8 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ) always clobbers reg byte a +Statement [138] (word~) getCharToProcess::$9 ← (word) getCharToProcess::$13 << (byte) 3 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ) always clobbers reg byte a +Statement [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ) always clobbers reg byte a +Statement [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a +Statement [147] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [148] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [149] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [150] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [151] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [152] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [153] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [158] *((byte*) initSprites::sp#4) ← (byte) 0 [ initSprites::sp#4 ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#4 ] ) always clobbers reg byte a reg byte y +Statement [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 [ initSprites::sp#1 ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#1 ] ) always clobbers reg byte a +Statement [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 [ initSprites::i#2 ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] ) always clobbers reg byte a +Statement [165] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 [ ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 [ ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a Statement [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a Statement [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [218] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [219] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [229] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [230] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [236] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [237] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [241] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [242] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [218] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [219] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [229] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [230] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [236] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [237] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [241] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [242] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] ) always clobbers reg byte a Statement [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Statement [250] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 [ ] ( [ ] ) always clobbers reg byte a @@ -7922,8 +7962,8 @@ Statement [306] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0 [ Statement [307] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() [ ] ( [ ] ) always clobbers reg byte a Statement [308] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a Statement [309] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y -Potential registers zp ZP_WORD:2 [ main::src#2 main::src#1 ] : zp ZP_WORD:2 , -Potential registers zp ZP_WORD:4 [ main::dst#2 main::dst#0 main::dst#1 ] : zp ZP_WORD:4 , +Potential registers zp ZP_WORD:2 [ main::src#4 main::src#1 ] : zp ZP_WORD:2 , +Potential registers zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] : zp ZP_WORD:4 , Potential registers zp ZP_BYTE:6 [ main::i#2 main::i#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] : zp ZP_BYTE:8 , reg byte x , @@ -7938,13 +7978,13 @@ Potential registers zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToPr Potential registers zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:23 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] : zp ZP_BYTE:23 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:24 [ initSprites::sp#2 initSprites::sp#1 ] : zp ZP_WORD:24 , +Potential registers zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 ] : zp ZP_WORD:24 , Potential registers zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ] : zp ZP_BYTE:26 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp ZP_BYTE:27 , reg byte x , Potential registers zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:28 , Potential registers zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:30 , -Potential registers zp ZP_BYTE:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp ZP_BYTE:32 , reg byte x , -Potential registers zp ZP_BYTE:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp ZP_BYTE:33 , reg byte x , +Potential registers zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] : zp ZP_BYTE:32 , reg byte x , +Potential registers zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] : zp ZP_BYTE:33 , reg byte x , Potential registers zp ZP_WORD:34 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp ZP_WORD:34 , Potential registers zp ZP_WORD:36 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp ZP_WORD:36 , Potential registers zp ZP_BYTE:38 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:38 , reg byte x , reg byte y , @@ -8055,10 +8095,10 @@ REGISTER UPLIFT SCOPES Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:43 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:44 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:46 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:34 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:36 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:156 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:157 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:38 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:146 [ atan2_16::return#2 ] 50: zp ZP_WORD:41 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:142 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:144 [ atan2_16::y#0 ] Uplift Scope [getCharToProcess] 4,983.53: zp ZP_BYTE:23 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] 3,432.25: zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] 2,937.96: zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] 1,949.11: zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] 1,557.11: zp ZP_BYTE:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] 181.2: zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] 140.57: zp ZP_WORD:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] 135.09: zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] 7.33: zp ZP_BYTE:63 [ getCharToProcess::return_x#0 ] 7.33: zp ZP_BYTE:64 [ getCharToProcess::return_y#0 ] 7.33: zp ZP_BYTE:65 [ getCharToProcess::return_dist#0 ] 4: zp ZP_WORD:127 [ getCharToProcess::$12 ] 4: zp ZP_WORD:129 [ getCharToProcess::$13 ] 4: zp ZP_WORD:131 [ getCharToProcess::$9 ] 4: zp ZP_WORD:133 [ getCharToProcess::$10 ] 3: zp ZP_WORD:125 [ getCharToProcess::$8 ] Uplift Scope [startProcessing] 2,589.5: zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] 2,002: zp ZP_BYTE:71 [ startProcessing::$42 ] 2,002: zp ZP_BYTE:72 [ startProcessing::$43 ] 2,002: zp ZP_BYTE:73 [ startProcessing::$44 ] 2,002: zp ZP_BYTE:74 [ startProcessing::$45 ] 2,002: zp ZP_BYTE:75 [ startProcessing::$30 ] 222.2: zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] 203.57: zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] 202: zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ] 170.33: zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] 4: zp ZP_WORD:78 [ startProcessing::$47 ] 4: zp ZP_WORD:80 [ startProcessing::$48 ] 4: zp ZP_WORD:82 [ startProcessing::$1 ] 4: zp ZP_WORD:86 [ startProcessing::colPtr#0 ] 4: zp ZP_WORD:91 [ startProcessing::$5 ] 4: zp ZP_WORD:93 [ startProcessing::$6 ] 4: zp ZP_WORD:96 [ startProcessing::$8 ] 4: zp ZP_WORD:98 [ startProcessing::$9 ] 4: zp ZP_WORD:100 [ startProcessing::$11 ] 4: zp ZP_WORD:102 [ startProcessing::$12 ] 4: zp ZP_WORD:104 [ startProcessing::$13 ] 4: zp ZP_WORD:108 [ startProcessing::$15 ] 4: zp ZP_WORD:110 [ startProcessing::$16 ] 4: zp ZP_WORD:112 [ startProcessing::$17 ] 4: zp ZP_BYTE:120 [ startProcessing::$50 ] 4: zp ZP_BYTE:121 [ startProcessing::$51 ] 4: zp ZP_BYTE:122 [ startProcessing::$52 ] 4: zp ZP_BYTE:123 [ startProcessing::$53 ] 3: zp ZP_WORD:76 [ startProcessing::$0 ] 2.22: zp ZP_BYTE:124 [ startProcessing::$31 ] 2: zp ZP_WORD:84 [ startProcessing::offset#0 ] 2: zp ZP_BYTE:95 [ startProcessing::ch#0 ] 2: zp ZP_BYTE:117 [ startProcessing::$22 ] 0.5: zp ZP_WORD:118 [ startProcessing::$23 ] 0.4: zp ZP_WORD:114 [ startProcessing::spriteY#0 ] 0.31: zp ZP_BYTE:69 [ startProcessing::center_x#0 ] 0.31: zp ZP_WORD:106 [ startProcessing::spriteX#0 ] 0.31: zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ] 0.24: zp ZP_BYTE:70 [ startProcessing::center_y#0 ] 0.14: zp ZP_WORD:89 [ startProcessing::screenPtr#0 ] 0.1: zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ] -Uplift Scope [init_angle_screen] 220.36: zp ZP_BYTE:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 202: zp ZP_BYTE:135 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:136 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:139 [ init_angle_screen::$7 ] 202: zp ZP_WORD:148 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:150 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:153 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:154 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:155 [ init_angle_screen::$15 ] 129.86: zp ZP_BYTE:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 84.17: zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:140 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:137 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:56 [ init_angle_screen::screen#0 ] +Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:135 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:136 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:139 [ init_angle_screen::$7 ] 202: zp ZP_WORD:148 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:150 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:153 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:154 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:155 [ init_angle_screen::$15 ] 126.25: zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:140 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:137 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:56 [ init_angle_screen::screen#0 ] Uplift Scope [processChars] 33.73: zp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] 22: zp ZP_BYTE:160 [ processChars::$67 ] 22: zp ZP_BYTE:161 [ processChars::$68 ] 22: zp ZP_BYTE:162 [ processChars::$69 ] 22: zp ZP_BYTE:163 [ processChars::$70 ] 22: zp ZP_BYTE:164 [ processChars::$37 ] 22: zp ZP_BYTE:170 [ processChars::$11 ] 22: zp ZP_BYTE:171 [ processChars::$12 ] 22: zp ZP_BYTE:173 [ processChars::$14 ] 22: zp ZP_BYTE:179 [ processChars::$26 ] 22: zp ZP_BYTE:180 [ processChars::xchar#0 ] 22: zp ZP_BYTE:181 [ processChars::$38 ] 22: zp ZP_BYTE:182 [ processChars::$30 ] 22: zp ZP_BYTE:183 [ processChars::ychar#0 ] 22: zp ZP_BYTE:184 [ processChars::$39 ] 22: zp ZP_BYTE:185 [ processChars::$33 ] 17.9: zp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ] 11: zp ZP_WORD:174 [ processChars::$15 ] 11: zp ZP_WORD:177 [ processChars::$25 ] 6.6: zp ZP_BYTE:172 [ processChars::$17 ] 2.75: zp ZP_BYTE:176 [ processChars::ypos#0 ] 2.2: zp ZP_BYTE:167 [ processChars::bitmask#0 ] 2.06: zp ZP_WORD:168 [ processChars::xpos#0 ] 0.31: zp ZP_WORD:165 [ processChars::processing#0 ] -Uplift Scope [main] 34.75: zp ZP_WORD:4 [ main::dst#2 main::dst#0 main::dst#1 ] 25.67: zp ZP_WORD:2 [ main::src#2 main::src#1 ] 22: zp ZP_BYTE:58 [ main::$26 ] 22: zp ZP_BYTE:59 [ main::$27 ] 22: zp ZP_BYTE:60 [ main::$28 ] 22: zp ZP_BYTE:61 [ main::$29 ] 22: zp ZP_BYTE:68 [ main::center_dist#0 ] 20.17: zp ZP_BYTE:6 [ main::i#2 main::i#1 ] 12.22: zp ZP_BYTE:62 [ main::$16 ] 5.5: zp ZP_BYTE:66 [ main::center_x#0 ] 5.5: zp ZP_BYTE:67 [ main::center_y#0 ] -Uplift Scope [initSprites] 36.67: zp ZP_WORD:24 [ initSprites::sp#2 initSprites::sp#1 ] 33: zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ] +Uplift Scope [main] 27.5: zp ZP_WORD:2 [ main::src#4 main::src#1 ] 26.67: zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] 22: zp ZP_BYTE:58 [ main::$26 ] 22: zp ZP_BYTE:59 [ main::$27 ] 22: zp ZP_BYTE:60 [ main::$28 ] 22: zp ZP_BYTE:61 [ main::$29 ] 22: zp ZP_BYTE:68 [ main::center_dist#0 ] 20.17: zp ZP_BYTE:6 [ main::i#2 main::i#1 ] 12.22: zp ZP_BYTE:62 [ main::$16 ] 5.5: zp ZP_BYTE:66 [ main::center_x#0 ] 5.5: zp ZP_BYTE:67 [ main::center_y#0 ] +Uplift Scope [initSprites] 33: zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 ] 33: zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ] Uplift Scope [] 5: zp ZP_WORD:48 [ heap_head#5 heap_head#1 ] 0.03: zp ZP_WORD:54 [ SCREEN_DIST#0 ] 0.03: zp ZP_WORD:52 [ SCREEN_COPY#0 ] Uplift Scope [malloc] 0.8: zp ZP_WORD:158 [ malloc::mem#0 ] Uplift Scope [RADIX] @@ -8069,142 +8109,140 @@ Uplift Scope [setupRasterIrq] Uplift Scope [irqTop] Uplift Scope [irqBottom] -Uplifting [atan2_16] best 1280029 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:44 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:46 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:34 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:36 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:146 [ atan2_16::return#2 ] zp ZP_WORD:41 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:142 [ atan2_16::x#0 ] zp ZP_WORD:144 [ atan2_16::y#0 ] +Uplifting [atan2_16] best 1280389 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:44 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:46 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:34 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:36 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:146 [ atan2_16::return#2 ] zp ZP_WORD:41 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:142 [ atan2_16::x#0 ] zp ZP_WORD:144 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [getCharToProcess] best 1266696 combination reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] zp ZP_BYTE:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] zp ZP_WORD:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] zp ZP_BYTE:63 [ getCharToProcess::return_x#0 ] zp ZP_BYTE:64 [ getCharToProcess::return_y#0 ] zp ZP_BYTE:65 [ getCharToProcess::return_dist#0 ] zp ZP_WORD:127 [ getCharToProcess::$12 ] zp ZP_WORD:129 [ getCharToProcess::$13 ] zp ZP_WORD:131 [ getCharToProcess::$9 ] zp ZP_WORD:133 [ getCharToProcess::$10 ] zp ZP_WORD:125 [ getCharToProcess::$8 ] +Uplifting [getCharToProcess] best 1267056 combination reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] zp ZP_BYTE:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] zp ZP_WORD:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] zp ZP_BYTE:63 [ getCharToProcess::return_x#0 ] zp ZP_BYTE:64 [ getCharToProcess::return_y#0 ] zp ZP_BYTE:65 [ getCharToProcess::return_dist#0 ] zp ZP_WORD:127 [ getCharToProcess::$12 ] zp ZP_WORD:129 [ getCharToProcess::$13 ] zp ZP_WORD:131 [ getCharToProcess::$9 ] zp ZP_WORD:133 [ getCharToProcess::$10 ] zp ZP_WORD:125 [ getCharToProcess::$8 ] Limited combination testing to 100 combinations of 46656 possible. -Uplifting [init_angle_screen] best 1265096 combination zp ZP_BYTE:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:148 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:150 [ init_angle_screen::$11 ] zp ZP_BYTE:153 [ init_angle_screen::$13 ] zp ZP_BYTE:154 [ init_angle_screen::$14 ] zp ZP_BYTE:155 [ init_angle_screen::$15 ] zp ZP_BYTE:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:140 [ init_angle_screen::yw#0 ] zp ZP_WORD:137 [ init_angle_screen::xw#0 ] zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:56 [ init_angle_screen::screen#0 ] +Uplifting [init_angle_screen] best 1264856 combination reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:148 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:150 [ init_angle_screen::$11 ] reg byte a [ init_angle_screen::$13 ] zp ZP_BYTE:154 [ init_angle_screen::$14 ] zp ZP_BYTE:155 [ init_angle_screen::$15 ] zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:140 [ init_angle_screen::yw#0 ] zp ZP_WORD:137 [ init_angle_screen::xw#0 ] zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:56 [ init_angle_screen::screen#0 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [main] best 1264856 combination zp ZP_WORD:4 [ main::dst#2 main::dst#0 main::dst#1 ] zp ZP_WORD:2 [ main::src#2 main::src#1 ] reg byte a [ main::$26 ] reg byte a [ main::$27 ] reg byte a [ main::$28 ] reg byte a [ main::$29 ] zp ZP_BYTE:68 [ main::center_dist#0 ] zp ZP_BYTE:6 [ main::i#2 main::i#1 ] zp ZP_BYTE:62 [ main::$16 ] zp ZP_BYTE:66 [ main::center_x#0 ] zp ZP_BYTE:67 [ main::center_y#0 ] +Uplifting [main] best 1264616 combination zp ZP_WORD:2 [ main::src#4 main::src#1 ] zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] reg byte a [ main::$26 ] reg byte a [ main::$27 ] reg byte a [ main::$28 ] reg byte a [ main::$29 ] zp ZP_BYTE:68 [ main::center_dist#0 ] zp ZP_BYTE:6 [ main::i#2 main::i#1 ] zp ZP_BYTE:62 [ main::$16 ] zp ZP_BYTE:66 [ main::center_x#0 ] zp ZP_BYTE:67 [ main::center_y#0 ] Limited combination testing to 100 combinations of 147456 possible. -Uplifting [initSprites] best 1264736 combination zp ZP_WORD:24 [ initSprites::sp#2 initSprites::sp#1 ] reg byte x [ initSprites::i#2 initSprites::i#1 ] -Uplifting [] best 1264736 combination zp ZP_WORD:48 [ heap_head#5 heap_head#1 ] zp ZP_WORD:54 [ SCREEN_DIST#0 ] zp ZP_WORD:52 [ SCREEN_COPY#0 ] -Uplifting [malloc] best 1264736 combination zp ZP_WORD:158 [ malloc::mem#0 ] -Uplifting [RADIX] best 1264736 combination -Uplifting [ProcessingChar] best 1264736 combination -Uplifting [ProcessingSprite] best 1264736 combination -Uplifting [ProcessingSprite::$0] best 1264736 combination -Uplifting [setupRasterIrq] best 1264736 combination -Uplifting [irqTop] best 1264736 combination -Uplifting [irqBottom] best 1264736 combination +Uplifting [initSprites] best 1264496 combination zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 ] reg byte x [ initSprites::i#2 initSprites::i#1 ] +Uplifting [] best 1264496 combination zp ZP_WORD:48 [ heap_head#5 heap_head#1 ] zp ZP_WORD:54 [ SCREEN_DIST#0 ] zp ZP_WORD:52 [ SCREEN_COPY#0 ] +Uplifting [malloc] best 1264496 combination zp ZP_WORD:158 [ malloc::mem#0 ] +Uplifting [RADIX] best 1264496 combination +Uplifting [ProcessingChar] best 1264496 combination +Uplifting [ProcessingSprite] best 1264496 combination +Uplifting [ProcessingSprite::$0] best 1264496 combination +Uplifting [setupRasterIrq] best 1264496 combination +Uplifting [irqTop] best 1264496 combination +Uplifting [irqBottom] best 1264496 combination Attempting to uplift remaining variables inzp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] -Uplifting [getCharToProcess] best 1264736 combination zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] +Uplifting [getCharToProcess] best 1264496 combination zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] -Uplifting [getCharToProcess] best 1264736 combination zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] +Uplifting [getCharToProcess] best 1264496 combination zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] Attempting to uplift remaining variables inzp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] -Uplifting [startProcessing] best 1264736 combination zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] +Uplifting [startProcessing] best 1264496 combination zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:71 [ startProcessing::$42 ] -Uplifting [startProcessing] best 1258736 combination reg byte a [ startProcessing::$42 ] +Uplifting [startProcessing] best 1258496 combination reg byte a [ startProcessing::$42 ] Attempting to uplift remaining variables inzp ZP_BYTE:72 [ startProcessing::$43 ] -Uplifting [startProcessing] best 1252736 combination reg byte a [ startProcessing::$43 ] +Uplifting [startProcessing] best 1252496 combination reg byte a [ startProcessing::$43 ] Attempting to uplift remaining variables inzp ZP_BYTE:73 [ startProcessing::$44 ] -Uplifting [startProcessing] best 1246736 combination reg byte a [ startProcessing::$44 ] +Uplifting [startProcessing] best 1246496 combination reg byte a [ startProcessing::$44 ] Attempting to uplift remaining variables inzp ZP_BYTE:74 [ startProcessing::$45 ] -Uplifting [startProcessing] best 1240736 combination reg byte a [ startProcessing::$45 ] +Uplifting [startProcessing] best 1240496 combination reg byte a [ startProcessing::$45 ] Attempting to uplift remaining variables inzp ZP_BYTE:75 [ startProcessing::$30 ] -Uplifting [startProcessing] best 1236736 combination reg byte a [ startProcessing::$30 ] +Uplifting [startProcessing] best 1236496 combination reg byte a [ startProcessing::$30 ] Attempting to uplift remaining variables inzp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] -Uplifting [getCharToProcess] best 1236736 combination zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] +Uplifting [getCharToProcess] best 1236496 combination zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] Attempting to uplift remaining variables inzp ZP_BYTE:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] -Uplifting [getCharToProcess] best 1218736 combination reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ] +Uplifting [getCharToProcess] best 1218496 combination reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] -Uplifting [startProcessing] best 1217836 combination reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] -Attempting to uplift remaining variables inzp ZP_BYTE:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Uplifting [init_angle_screen] best 1217836 combination zp ZP_BYTE:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Uplifting [startProcessing] best 1217596 combination reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] Attempting to uplift remaining variables inzp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ] -Uplifting [startProcessing] best 1216936 combination reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:153 [ init_angle_screen::$13 ] -Uplifting [init_angle_screen] best 1216336 combination reg byte a [ init_angle_screen::$13 ] +Uplifting [startProcessing] best 1216696 combination reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:154 [ init_angle_screen::$14 ] -Uplifting [init_angle_screen] best 1215936 combination reg byte a [ init_angle_screen::$14 ] +Uplifting [init_angle_screen] best 1216296 combination reg byte a [ init_angle_screen::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:155 [ init_angle_screen::$15 ] -Uplifting [init_angle_screen] best 1215336 combination reg byte a [ init_angle_screen::$15 ] +Uplifting [init_angle_screen] best 1215696 combination reg byte a [ init_angle_screen::$15 ] Attempting to uplift remaining variables inzp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] -Uplifting [getCharToProcess] best 1215336 combination zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Uplifting [init_angle_screen] best 1215336 combination zp ZP_BYTE:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Uplifting [getCharToProcess] best 1215696 combination zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Uplifting [init_angle_screen] best 1215696 combination zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Uplifting [init_angle_screen] best 1215696 combination zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] -Uplifting [init_angle_screen] best 1215336 combination zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1215696 combination zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] -Uplifting [processChars] best 1215336 combination zp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] +Uplifting [processChars] best 1215696 combination zp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:68 [ main::center_dist#0 ] -Uplifting [main] best 1215276 combination reg byte a [ main::center_dist#0 ] +Uplifting [main] best 1215636 combination reg byte a [ main::center_dist#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:160 [ processChars::$67 ] -Uplifting [processChars] best 1215216 combination reg byte a [ processChars::$67 ] +Uplifting [processChars] best 1215576 combination reg byte a [ processChars::$67 ] Attempting to uplift remaining variables inzp ZP_BYTE:161 [ processChars::$68 ] -Uplifting [processChars] best 1215156 combination reg byte a [ processChars::$68 ] +Uplifting [processChars] best 1215516 combination reg byte a [ processChars::$68 ] Attempting to uplift remaining variables inzp ZP_BYTE:162 [ processChars::$69 ] -Uplifting [processChars] best 1215096 combination reg byte a [ processChars::$69 ] +Uplifting [processChars] best 1215456 combination reg byte a [ processChars::$69 ] Attempting to uplift remaining variables inzp ZP_BYTE:163 [ processChars::$70 ] -Uplifting [processChars] best 1215036 combination reg byte a [ processChars::$70 ] +Uplifting [processChars] best 1215396 combination reg byte a [ processChars::$70 ] Attempting to uplift remaining variables inzp ZP_BYTE:164 [ processChars::$37 ] -Uplifting [processChars] best 1214976 combination reg byte a [ processChars::$37 ] +Uplifting [processChars] best 1215336 combination reg byte a [ processChars::$37 ] Attempting to uplift remaining variables inzp ZP_BYTE:170 [ processChars::$11 ] -Uplifting [processChars] best 1214916 combination reg byte a [ processChars::$11 ] +Uplifting [processChars] best 1215276 combination reg byte a [ processChars::$11 ] Attempting to uplift remaining variables inzp ZP_BYTE:171 [ processChars::$12 ] -Uplifting [processChars] best 1214856 combination reg byte a [ processChars::$12 ] +Uplifting [processChars] best 1215216 combination reg byte a [ processChars::$12 ] Attempting to uplift remaining variables inzp ZP_BYTE:173 [ processChars::$14 ] -Uplifting [processChars] best 1214796 combination reg byte a [ processChars::$14 ] +Uplifting [processChars] best 1215156 combination reg byte a [ processChars::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:179 [ processChars::$26 ] -Uplifting [processChars] best 1214756 combination reg byte a [ processChars::$26 ] +Uplifting [processChars] best 1215116 combination reg byte a [ processChars::$26 ] Attempting to uplift remaining variables inzp ZP_BYTE:180 [ processChars::xchar#0 ] -Uplifting [processChars] best 1214696 combination reg byte a [ processChars::xchar#0 ] +Uplifting [processChars] best 1215056 combination reg byte a [ processChars::xchar#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:181 [ processChars::$38 ] -Uplifting [processChars] best 1214656 combination reg byte a [ processChars::$38 ] +Uplifting [processChars] best 1215016 combination reg byte a [ processChars::$38 ] Attempting to uplift remaining variables inzp ZP_BYTE:182 [ processChars::$30 ] -Uplifting [processChars] best 1214616 combination reg byte a [ processChars::$30 ] +Uplifting [processChars] best 1214976 combination reg byte a [ processChars::$30 ] Attempting to uplift remaining variables inzp ZP_BYTE:183 [ processChars::ychar#0 ] -Uplifting [processChars] best 1214556 combination reg byte a [ processChars::ychar#0 ] +Uplifting [processChars] best 1214916 combination reg byte a [ processChars::ychar#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:184 [ processChars::$39 ] -Uplifting [processChars] best 1214516 combination reg byte a [ processChars::$39 ] +Uplifting [processChars] best 1214876 combination reg byte a [ processChars::$39 ] Attempting to uplift remaining variables inzp ZP_BYTE:185 [ processChars::$33 ] -Uplifting [processChars] best 1214456 combination reg byte a [ processChars::$33 ] +Uplifting [processChars] best 1214816 combination reg byte a [ processChars::$33 ] Attempting to uplift remaining variables inzp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Uplifting [init_angle_screen] best 1214456 combination zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] +Uplifting [init_angle_screen] best 1214816 combination zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::i#2 main::i#1 ] -Uplifting [main] best 1214456 combination zp ZP_BYTE:6 [ main::i#2 main::i#1 ] +Uplifting [main] best 1214816 combination zp ZP_BYTE:6 [ main::i#2 main::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ] -Uplifting [processChars] best 1214456 combination zp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ] +Uplifting [processChars] best 1214816 combination zp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:62 [ main::$16 ] -Uplifting [main] best 1214296 combination reg byte x [ main::$16 ] +Uplifting [main] best 1214656 combination reg byte x [ main::$16 ] Attempting to uplift remaining variables inzp ZP_BYTE:63 [ getCharToProcess::return_x#0 ] -Uplifting [getCharToProcess] best 1214236 combination reg byte y [ getCharToProcess::return_x#0 ] +Uplifting [getCharToProcess] best 1214596 combination reg byte y [ getCharToProcess::return_x#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:64 [ getCharToProcess::return_y#0 ] -Uplifting [getCharToProcess] best 1214176 combination reg byte a [ getCharToProcess::return_y#0 ] +Uplifting [getCharToProcess] best 1214536 combination reg byte a [ getCharToProcess::return_y#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:65 [ getCharToProcess::return_dist#0 ] -Uplifting [getCharToProcess] best 1214136 combination reg byte x [ getCharToProcess::return_dist#0 ] +Uplifting [getCharToProcess] best 1214496 combination reg byte x [ getCharToProcess::return_dist#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:172 [ processChars::$17 ] -Uplifting [processChars] best 1214066 combination reg byte x [ processChars::$17 ] +Uplifting [processChars] best 1214426 combination reg byte x [ processChars::$17 ] Attempting to uplift remaining variables inzp ZP_BYTE:66 [ main::center_x#0 ] -Uplifting [main] best 1214006 combination reg byte y [ main::center_x#0 ] +Uplifting [main] best 1214366 combination reg byte y [ main::center_x#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:67 [ main::center_y#0 ] -Uplifting [main] best 1214006 combination zp ZP_BYTE:67 [ main::center_y#0 ] +Uplifting [main] best 1214366 combination zp ZP_BYTE:67 [ main::center_y#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:120 [ startProcessing::$50 ] -Uplifting [startProcessing] best 1214000 combination reg byte a [ startProcessing::$50 ] +Uplifting [startProcessing] best 1214360 combination reg byte a [ startProcessing::$50 ] Attempting to uplift remaining variables inzp ZP_BYTE:121 [ startProcessing::$51 ] -Uplifting [startProcessing] best 1213994 combination reg byte a [ startProcessing::$51 ] +Uplifting [startProcessing] best 1214354 combination reg byte a [ startProcessing::$51 ] Attempting to uplift remaining variables inzp ZP_BYTE:122 [ startProcessing::$52 ] -Uplifting [startProcessing] best 1213988 combination reg byte a [ startProcessing::$52 ] +Uplifting [startProcessing] best 1214348 combination reg byte a [ startProcessing::$52 ] Attempting to uplift remaining variables inzp ZP_BYTE:123 [ startProcessing::$53 ] -Uplifting [startProcessing] best 1213982 combination reg byte a [ startProcessing::$53 ] +Uplifting [startProcessing] best 1214342 combination reg byte a [ startProcessing::$53 ] Attempting to uplift remaining variables inzp ZP_BYTE:176 [ processChars::ypos#0 ] -Uplifting [processChars] best 1213982 combination zp ZP_BYTE:176 [ processChars::ypos#0 ] +Uplifting [processChars] best 1214342 combination zp ZP_BYTE:176 [ processChars::ypos#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:124 [ startProcessing::$31 ] -Uplifting [startProcessing] best 1213957 combination reg byte x [ startProcessing::$31 ] +Uplifting [startProcessing] best 1214317 combination reg byte x [ startProcessing::$31 ] Attempting to uplift remaining variables inzp ZP_BYTE:167 [ processChars::bitmask#0 ] -Uplifting [processChars] best 1213957 combination zp ZP_BYTE:167 [ processChars::bitmask#0 ] +Uplifting [processChars] best 1214317 combination zp ZP_BYTE:167 [ processChars::bitmask#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:95 [ startProcessing::ch#0 ] -Uplifting [startProcessing] best 1213951 combination reg byte a [ startProcessing::ch#0 ] +Uplifting [startProcessing] best 1214311 combination reg byte a [ startProcessing::ch#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:117 [ startProcessing::$22 ] -Uplifting [startProcessing] best 1213945 combination reg byte a [ startProcessing::$22 ] +Uplifting [startProcessing] best 1214305 combination reg byte a [ startProcessing::$22 ] Attempting to uplift remaining variables inzp ZP_BYTE:69 [ startProcessing::center_x#0 ] -Uplifting [startProcessing] best 1213945 combination zp ZP_BYTE:69 [ startProcessing::center_x#0 ] +Uplifting [startProcessing] best 1214305 combination zp ZP_BYTE:69 [ startProcessing::center_x#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:116 [ startProcessing::spritePtr#0 ] -Uplifting [startProcessing] best 1213945 combination zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ] +Uplifting [startProcessing] best 1214305 combination zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:70 [ startProcessing::center_y#0 ] -Uplifting [startProcessing] best 1213945 combination zp ZP_BYTE:70 [ startProcessing::center_y#0 ] +Uplifting [startProcessing] best 1214305 combination zp ZP_BYTE:70 [ startProcessing::center_y#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:88 [ startProcessing::spriteCol#0 ] -Uplifting [startProcessing] best 1213945 combination zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ] +Uplifting [startProcessing] best 1214305 combination zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ] Coalescing zero page register [ zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] ] with [ zp ZP_WORD:98 [ startProcessing::$9 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] ] with [ zp ZP_WORD:93 [ startProcessing::$6 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:56 [ init_angle_screen::screen#0 ] ] - score: 1 @@ -8233,13 +8271,13 @@ Coalescing zero page register [ zp ZP_WORD:125 [ getCharToProcess::$8 getCharToP Coalescing zero page register [ zp ZP_WORD:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp ZP_WORD:150 [ init_angle_screen::$11 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:76 [ startProcessing::$0 startProcessing::$48 startProcessing::$1 startProcessing::offset#0 ] ] with [ zp ZP_WORD:89 [ startProcessing::screenPtr#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] ] with [ zp ZP_BYTE:6 [ main::i#2 main::i#1 ] ] -Coalescing zero page register [ zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 ] ] with [ zp ZP_WORD:2 [ main::src#2 main::src#1 ] ] -Coalescing zero page register [ zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 ] ] with [ zp ZP_WORD:4 [ main::dst#2 main::dst#0 main::dst#1 ] ] -Coalescing zero page register [ zp ZP_WORD:24 [ initSprites::sp#2 initSprites::sp#1 ] ] with [ zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] ] +Coalescing zero page register [ zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 ] ] with [ zp ZP_WORD:2 [ main::src#4 main::src#1 ] ] +Coalescing zero page register [ zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 ] ] with [ zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] ] +Coalescing zero page register [ zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 ] ] with [ zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] ] Coalescing zero page register [ zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] ] Coalescing zero page register [ zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ] with [ zp ZP_WORD:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] with [ zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] ] -Coalescing zero page register [ zp ZP_BYTE:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] with [ zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] ] +Coalescing zero page register [ zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] ] with [ zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] ] +Coalescing zero page register [ zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] ] with [ zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] ] Coalescing zero page register [ zp ZP_WORD:48 [ heap_head#5 heap_head#1 ] ] with [ zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ] Coalescing zero page register [ zp ZP_BYTE:67 [ main::center_y#0 startProcessing::center_y#0 ] ] with [ zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] ] Coalescing zero page register [ zp ZP_WORD:76 [ startProcessing::$0 startProcessing::$48 startProcessing::$1 startProcessing::offset#0 startProcessing::screenPtr#0 ] ] with [ zp ZP_WORD:34 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] @@ -8250,15 +8288,15 @@ Coalescing zero page register [ zp ZP_WORD:108 [ startProcessing::$15 startProce Coalescing zero page register [ zp ZP_WORD:125 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 ] ] with [ zp ZP_WORD:118 [ startProcessing::$23 ] ] Coalescing zero page register [ zp ZP_WORD:137 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] with [ zp ZP_WORD:127 [ getCharToProcess::$12 ] ] Coalescing zero page register [ zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] ] with [ zp ZP_BYTE:69 [ startProcessing::center_x#0 ] ] -Coalescing zero page register [ zp ZP_WORD:24 [ initSprites::sp#2 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] ] with [ zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#2 main::src#1 ] ] +Coalescing zero page register [ zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] ] with [ zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#4 main::src#1 ] ] Coalescing zero page register [ zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::y#7 getCharToProcess::y#1 ] ] with [ zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 main::i#2 main::i#1 ] ] -Coalescing zero page register [ zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] ] with [ zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#2 main::dst#0 main::dst#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ] ] with [ zp ZP_BYTE:32 [ init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] ] -Coalescing zero page register [ zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ] ] with [ zp ZP_BYTE:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] ] +Coalescing zero page register [ zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] ] with [ zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#4 main::dst#1 main::dst#0 ] ] +Coalescing zero page register [ zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ] ] with [ zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] ] +Coalescing zero page register [ zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ] ] with [ zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] ] Coalescing zero page register [ zp ZP_WORD:125 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 startProcessing::$23 ] ] with [ zp ZP_WORD:48 [ heap_head#5 heap_head#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ] -Coalescing zero page register [ zp ZP_WORD:140 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] with [ zp ZP_WORD:24 [ initSprites::sp#2 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#2 main::src#1 ] ] +Coalescing zero page register [ zp ZP_WORD:140 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] with [ zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#4 main::src#1 ] ] Allocated (was zp ZP_BYTE:27) zp ZP_BYTE:2 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::y#7 getCharToProcess::y#1 startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 main::i#2 main::i#1 ] -Allocated (was zp ZP_WORD:28) zp ZP_WORD:3 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#2 main::dst#0 main::dst#1 ] +Allocated (was zp ZP_WORD:28) zp ZP_WORD:3 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#4 main::dst#1 main::dst#0 ] Allocated (was zp ZP_BYTE:50) zp ZP_BYTE:5 [ processChars::i#10 processChars::i#1 ] Allocated (was zp ZP_BYTE:51) zp ZP_BYTE:6 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] Allocated (was zp ZP_WORD:52) zp ZP_WORD:7 [ SCREEN_COPY#0 ] @@ -8267,13 +8305,13 @@ Allocated (was zp ZP_BYTE:67) zp ZP_BYTE:11 [ main::center_y#0 startProcessing:: Allocated (was zp ZP_WORD:76) zp ZP_WORD:12 [ startProcessing::$0 startProcessing::$48 startProcessing::$1 startProcessing::offset#0 startProcessing::screenPtr#0 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] Allocated (was zp ZP_WORD:78) zp ZP_WORD:14 [ startProcessing::$47 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] Allocated (was zp ZP_WORD:86) zp ZP_WORD:16 [ startProcessing::colPtr#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] -Allocated (was zp ZP_BYTE:88) zp ZP_BYTE:18 [ startProcessing::spriteCol#0 init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] +Allocated (was zp ZP_BYTE:88) zp ZP_BYTE:18 [ startProcessing::spriteCol#0 init_angle_screen::x#5 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] Allocated (was zp ZP_WORD:100) zp ZP_WORD:19 [ startProcessing::$11 startProcessing::$12 startProcessing::$13 startProcessing::spriteX#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] Allocated (was zp ZP_WORD:108) zp ZP_WORD:21 [ startProcessing::$15 startProcessing::$16 startProcessing::$17 startProcessing::spriteY#0 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -Allocated (was zp ZP_BYTE:116) zp ZP_BYTE:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] +Allocated (was zp ZP_BYTE:116) zp ZP_BYTE:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#5 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] Allocated (was zp ZP_WORD:125) zp ZP_WORD:24 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 startProcessing::$23 heap_head#5 heap_head#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] Allocated (was zp ZP_WORD:137) zp ZP_WORD:26 [ init_angle_screen::xw#0 atan2_16::x#0 getCharToProcess::$12 ] -Allocated (was zp ZP_WORD:140) zp ZP_WORD:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#2 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#2 main::src#1 ] +Allocated (was zp ZP_WORD:140) zp ZP_WORD:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#4 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#4 main::src#1 ] Allocated (was zp ZP_BYTE:152) zp ZP_BYTE:30 [ init_angle_screen::ang_w#0 startProcessing::center_x#0 ] Allocated (was zp ZP_WORD:165) zp ZP_WORD:31 [ processChars::processing#0 ] Allocated (was zp ZP_BYTE:167) zp ZP_BYTE:33 [ processChars::bitmask#0 ] @@ -8431,180 +8469,181 @@ main: { sta dst lda SCREEN_COPY+1 sta dst+1 - // [12] phi from main::@9 to main::@1 [phi:main::@9->main::@1] - b1_from_b9: - // [12] phi (byte*) main::dst#2 = (byte*) main::dst#0 [phi:main::@9->main::@1#0] -- register_copy - // [12] phi (byte*) main::src#2 = (const byte*) SCREEN#0 [phi:main::@9->main::@1#1] -- pbuz1=pbuc1 + // [12] phi from main::@9 to main::@2 [phi:main::@9->main::@2] + b2_from_b9: + // [12] phi (byte*) main::dst#4 = (byte*) main::dst#0 [phi:main::@9->main::@2#0] -- register_copy + // [12] phi (byte*) main::src#4 = (const byte*) SCREEN#0 [phi:main::@9->main::@2#1] -- pbuz1=pbuc1 lda #SCREEN sta src+1 + jmp b2 + // [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [12] phi (byte*) main::dst#4 = (byte*) main::dst#1 [phi:main::@1->main::@2#0] -- register_copy + // [12] phi (byte*) main::src#4 = (byte*) main::src#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 + // main::@2 + b2: + // [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (src),y + ldy #0 + sta (dst),y + // [14] (byte*) main::src#1 ← ++ (byte*) main::src#4 -- pbuz1=_inc_pbuz1 + inc src + bne !+ + inc src+1 + !: + // [15] (byte*) main::dst#1 ← ++ (byte*) main::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: jmp b1 // Copy screen to screen copy // main::@1 b1: - // [13] if((byte*) main::src#2!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_neq_pbuc1_then_la1 + // [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_neq_pbuc1_then_la1 lda src+1 cmp #>SCREEN+$3e8 - bne b2 + bne b2_from_b1 lda src cmp #main::@3] + bne b2_from_b1 + // [17] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: - // [14] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 lda #0 sta i jmp b3 // Init processing array - // [14] phi from main::@3 to main::@3 [phi:main::@3->main::@3] + // [17] phi from main::@3 to main::@3 [phi:main::@3->main::@3] b3_from_b3: - // [14] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy + // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy jmp b3 // main::@3 b3: - // [15] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda i asl - // [16] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 + // [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc i - // [17] (byte) main::$28 ← (byte) main::$27 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [18] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 + // [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc i - // [19] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 -- vbuxx=vbuaa_rol_1 + // [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 -- vbuxx=vbuaa_rol_1 asl tax - // [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 + // [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 lda #0 sta PROCESSING,x lda #0 sta PROCESSING+1,x - // [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 + // [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 lda #0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x lda #0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x - // [22] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 + // [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 lda #0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x lda #0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x - // [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 + // [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 lda #0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x lda #0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x - // [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x - // [25] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x - // [26] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x - // [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuxx=vbuc2 + // [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuxx=vbuc2 lda #STATUS_FREE sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x - // [28] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuxx=pbuc2 + // [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuxx=pbuc2 lda #<0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x lda #>0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x - // [29] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [32] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc i - // [30] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 + // [33] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_PROCESSING-1+1 cmp i bne b3_from_b3 - // [31] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4] b4_from_b3: jmp b4 // main::@4 b4: - // [32] call initSprites + // [35] call initSprites // [156] phi from main::@4 to initSprites [phi:main::@4->initSprites] initSprites_from_b4: jsr initSprites - // [33] phi from main::@4 to main::@10 [phi:main::@4->main::@10] + // [36] phi from main::@4 to main::@10 [phi:main::@4->main::@10] b10_from_b4: jmp b10 // main::@10 b10: - // [34] call setupRasterIrq + // [37] call setupRasterIrq jsr setupRasterIrq - // [35] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5] + // [38] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5] b5_from_b10: b5_from_b6: jmp b5 // Main loop // main::@5 b5: - // [36] call getCharToProcess + // [39] call getCharToProcess jsr getCharToProcess - // [37] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuyy=vbuz1 + // [40] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuyy=vbuz1 ldy getCharToProcess.return_x - // [38] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuaa=vbuz1 + // [41] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuaa=vbuz1 lda getCharToProcess.return_y - // [39] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 + // [42] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 jmp b11 // main::@11 b11: - // [40] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 - // [41] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuaa + // [43] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 + // [44] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuaa sta center_y - // [42] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuaa=vbuxx + // [45] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuaa=vbuxx txa - // [43] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 -- vbuaa_neq_vbuc1_then_la1 + // [46] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 -- vbuaa_neq_vbuc1_then_la1 cmp #NOT_FOUND bne b6 jmp b7 // main::@7 b7: - // [44] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 + // [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 lda #'.' sta SCREEN+$3e7 jmp b8 // main::@8 b8: - // [45] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc COLS+$3e7 jmp b8 // main::@6 b6: - // [46] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuyy + // [49] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuyy sty startProcessing.center_x - // [47] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 - // [48] call startProcessing + // [50] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 + // [51] call startProcessing // [52] phi from main::@6 to startProcessing [phi:main::@6->startProcessing] startProcessing_from_b6: jsr startProcessing jmp b5_from_b6 - // main::@2 - b2: - // [49] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (src),y - ldy #0 - sta (dst),y - // [50] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 - inc src - bne !+ - inc src+1 - !: - // [51] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [12] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [12] phi (byte*) main::dst#2 = (byte*) main::dst#1 [phi:main::@2->main::@1#0] -- register_copy - // [12] phi (byte*) main::src#2 = (byte*) main::src#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // startProcessing // Start processing a char - by inserting it into the PROCESSING array @@ -9255,78 +9294,79 @@ setupRasterIrq: { // Initialize sprites initSprites: { .label sp = $1c - // [157] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1] - b1_from_initSprites: - // [157] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA#0 [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1 + // [157] phi from initSprites to initSprites::@2 [phi:initSprites->initSprites::@2] + b2_from_initSprites: + // [157] phi (byte*) initSprites::sp#4 = (const byte*) SPRITE_DATA#0 [phi:initSprites->initSprites::@2#0] -- pbuz1=pbuc1 lda #SPRITE_DATA sta sp+1 + jmp b2 + // [157] phi from initSprites::@1 to initSprites::@2 [phi:initSprites::@1->initSprites::@2] + b2_from_b1: + // [157] phi (byte*) initSprites::sp#4 = (byte*) initSprites::sp#1 [phi:initSprites::@1->initSprites::@2#0] -- register_copy + jmp b2 + // initSprites::@2 + b2: + // [158] *((byte*) initSprites::sp#4) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (sp),y + // [159] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#4 -- pbuz1=_inc_pbuz1 + inc sp + bne !+ + inc sp+1 + !: jmp b1 // Clear sprite data // initSprites::@1 b1: - // [158] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1 + // [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1 lda sp+1 cmp #>SPRITE_DATA+NUM_PROCESSING*$40 - bcc b2 + bcc b2_from_b1 bne !+ lda sp cmp #initSprites::@3] + // [161] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3] b3_from_b1: - // [159] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1 + // [161] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1 ldx #0 jmp b3 // Initialize sprite registers - // [159] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3] + // [161] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3] b3_from_b3: - // [159] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy + // [161] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy jmp b3 // initSprites::@3 b3: - // [160] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #LIGHT_BLUE sta SPRITES_COLS,x - // [161] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx + // [163] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx inx - // [162] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1 + // [164] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne b3_from_b3 jmp b4 // initSprites::@4 b4: - // [163] *((const byte*) SPRITES_MC#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [165] *((const byte*) SPRITES_MC#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_MC - // [164] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_EXPAND_X - // [165] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_EXPAND_Y jmp breturn // initSprites::@return breturn: - // [166] return + // [168] return rts - // initSprites::@2 - b2: - // [167] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 - lda #0 - ldy #0 - sta (sp),y - // [168] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 -- pbuz1=_inc_pbuz1 - inc sp - bne !+ - inc sp+1 - !: - // [157] phi from initSprites::@2 to initSprites::@1 [phi:initSprites::@2->initSprites::@1] - b1_from_b2: - // [157] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy - jmp b1 } // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. @@ -9376,81 +9416,50 @@ init_angle_screen: { jmp b1 // init_angle_screen::@1 b1: - // [172] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - b2_from_b1: - // [172] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [172] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + b3_from_b1: + // [172] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [172] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [172] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b2 - // init_angle_screen::@2 - b2: - // [173] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - jmp b4 - // init_angle_screen::@4 - b4: - // [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // [176] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [177] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b4 - jmp breturn - // init_angle_screen::@return - breturn: - // [178] return - rts + jmp b3 + // [172] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + b3_from_b2: + // [172] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [172] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy + jmp b3 // init_angle_screen::@3 b3: - // [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw - // [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl - // [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta yw+1 sty yw - // [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [186] call atan2_16 + // [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [180] call atan2_16 jsr atan2_16 - // [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0 jmp b5 // init_angle_screen::@5 b5: - // [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - // [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _11 @@ -9458,44 +9467,76 @@ init_angle_screen: { bcc !+ inc _11+1 !: - // [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w - // [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 lda ang_w eor #$ff clc adc #1 - // [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y - // [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w - // [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y - // [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w - // [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_bottomline),y - // [198] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [192] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [199] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [193] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [172] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - b2_from_b5: - // [172] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [172] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp b2 + // init_angle_screen::@2 + b2: + // [194] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3_from_b2 + jmp b4 + // init_angle_screen::@4 + b4: + // [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // [197] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [198] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b4 + jmp breturn + // init_angle_screen::@return + breturn: + // [199] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) @@ -10303,6 +10344,7 @@ Removing instruction jmp b4 Removing instruction jmp b2 Removing instruction jmp bend Removing instruction jmp b9 +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b4 @@ -10331,15 +10373,17 @@ Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp breturn +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b4 Removing instruction jmp breturn Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b4 Removing instruction jmp breturn -Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp b5 @@ -10377,6 +10421,7 @@ Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Removing instruction ldy #0 Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #0 @@ -10388,16 +10433,15 @@ Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #>0 -Removing instruction ldy #0 Replacing instruction lda #0 with TYA Removing instruction ldy #0 Replacing instruction lda #0 with TYA Removing instruction ldy #0 Removing instruction lda #0 Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction lda #0 Replacing instruction ldy #0 with TAY +Removing instruction lda #0 +Removing instruction lda #0 Removing instruction ldy #0 Removing instruction lda ang_w Removing instruction lda ang_w @@ -10408,13 +10452,18 @@ Replacing instruction ldx #0 with TAX Removing instruction lda #0 Removing instruction lda ypos Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Replacing label b3_from_b3 with b3 Replacing label b6_from_b6 with b6 Replacing label b2_from_b3 with b2 Replacing label b4_from_b9 with b4 Replacing label b3_from_b12 with b3 Replacing label b3_from_b11 with b3 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Replacing label b3_from_b3 with b3 +Replacing label b3_from_b2 with b3 Replacing label b1_from_b4 with b1 Replacing label b7_from_b12 with b7 Replacing label b8_from_b7 with b8 @@ -10432,6 +10481,7 @@ Removing instruction malloc_from_b1: Removing instruction b4: Removing instruction b2_from_b4: Removing instruction bend_from_b2: +Removing instruction b2_from_b1: Removing instruction b3_from_b3: Removing instruction b4_from_b3: Removing instruction initSprites_from_b4: @@ -10446,9 +10496,11 @@ Removing instruction b2_from_b1: Removing instruction b3_from_b11: Removing instruction b3_from_b12: Removing instruction b3_from_b5: +Removing instruction b2_from_b1: Removing instruction b3_from_b3: Removing instruction b1_from_b4: -Removing instruction b2_from_b1: +Removing instruction b3_from_b1: +Removing instruction b3_from_b2: Removing instruction b3_from_b1: Removing instruction b3_from_b2: Removing instruction b6_from_b4: @@ -10480,7 +10532,8 @@ Removing instruction malloc_from_b3: Removing instruction b2: Removing instruction bend: Removing instruction b9: -Removing instruction b1_from_b9: +Removing instruction b2_from_b9: +Removing instruction b1: Removing instruction b3_from_b1: Removing instruction b4: Removing instruction b10: @@ -10488,7 +10541,6 @@ Removing instruction b5: Removing instruction b11: Removing instruction b7: Removing instruction startProcessing_from_b6: -Removing instruction b1_from_b2: Removing instruction b1_from_startProcessing: Removing instruction b5: Removing instruction b6_from_b5: @@ -10507,16 +10559,16 @@ Removing instruction b2_from_b10: Removing instruction b1: Removing instruction b2: Removing instruction breturn: -Removing instruction b1_from_initSprites: +Removing instruction b2_from_initSprites: +Removing instruction b1: Removing instruction b3_from_b1: Removing instruction b4: Removing instruction breturn: -Removing instruction b1_from_b2: Removing instruction b1_from_init_angle_screen: +Removing instruction b5: +Removing instruction b2: Removing instruction b4: Removing instruction breturn: -Removing instruction b5: -Removing instruction b2_from_b5: Removing instruction b2: Removing instruction b5: Removing instruction b21: @@ -10539,36 +10591,39 @@ Removing instruction b9: Removing instruction breturn: Removing instruction b1: Succesful ASM optimization Pass5UnusedLabelElimination -Relabelling long label b5_from_b6 to b4 +Relabelling long label b5_from_b6 to b1 Succesful ASM optimization Pass5RelabelLongLabels Adding RTS to root block Succesful ASM optimization Pass5AddMainRts +Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp b2 Removing instruction jmp b6 +Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp b1 +Removing instruction jmp b3 Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [458] bne b2 to beq -Fixing long branch [873] beq b12 to bne -Fixing long branch [1217] bne b1 to beq -Fixing long branch [234] bne b3 to beq -Fixing long branch [240] beq b8 to bne -Fixing long branch [503] beq b11 to bne -Fixing long branch [773] bpl b1 to bmi -Fixing long branch [785] bpl b4 to bmi -Fixing long branch [1030] beq b2 to bne -Fixing long branch [1091] bne b4 to beq -Fixing long branch [1125] bcc b6 to bcs -Fixing long branch [1132] bcc b6 to bcs -Fixing long branch [1139] bcc b6 to bcs -Fixing long branch [1146] bcc b6 to bcs -Fixing long branch [1154] bcc b6 to bcs -Fixing long branch [1161] bcc b6 to bcs -Fixing long branch [1169] bcc b6 to bcs +Fixing long branch [456] bne b2 to beq +Fixing long branch [867] beq b12 to bne +Fixing long branch [1211] bne b1 to beq +Fixing long branch [232] bne b3 to beq +Fixing long branch [238] beq b8 to bne +Fixing long branch [501] beq b11 to bne +Fixing long branch [767] bpl b1 to bmi +Fixing long branch [779] bpl b4 to bmi +Fixing long branch [1024] beq b2 to bne +Fixing long branch [1085] bne b4 to beq +Fixing long branch [1119] bcc b6 to bcs +Fixing long branch [1126] bcc b6 to bcs +Fixing long branch [1133] bcc b6 to bcs +Fixing long branch [1140] bcc b6 to bcs +Fixing long branch [1148] bcc b6 to bcs +Fixing long branch [1155] bcc b6 to bcs +Fixing long branch [1163] bcc b6 to bcs FINAL SYMBOL TABLE (label) @1 @@ -10861,8 +10916,8 @@ FINAL SYMBOL TABLE (byte) initSprites::i#1 reg byte x 16.5 (byte) initSprites::i#2 reg byte x 16.5 (byte*) initSprites::sp -(byte*) initSprites::sp#1 sp zp ZP_WORD:28 22.0 -(byte*) initSprites::sp#2 sp zp ZP_WORD:28 14.666666666666666 +(byte*) initSprites::sp#1 sp zp ZP_WORD:28 16.5 +(byte*) initSprites::sp#4 sp zp ZP_WORD:28 16.5 (void()) init_angle_screen((byte*) init_angle_screen::screen) (word~) init_angle_screen::$11 $11 zp ZP_WORD:16 202.0 (byte~) init_angle_screen::$13 reg byte a 202.0 @@ -10886,17 +10941,17 @@ FINAL SYMBOL TABLE (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:24 4.0 (byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:24 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:24 9.04 +(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:24 9.040000000000001 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:3 2.0 (byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:3 5.5 (byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:3 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 x zp ZP_BYTE:18 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:18 28.857142857142858 +(byte) init_angle_screen::x#5 x zp ZP_BYTE:18 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:23 202.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:23 18.363636363636363 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:23 101.0 +(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:23 19.238095238095237 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 xw zp ZP_WORD:26 33.666666666666664 (byte) init_angle_screen::y @@ -10940,14 +10995,14 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (byte) main::center_y#0 center_y zp ZP_BYTE:11 5.5 (byte*) main::dst (byte*) main::dst#0 dst zp ZP_WORD:3 4.0 -(byte*) main::dst#1 dst zp ZP_WORD:3 22.0 -(byte*) main::dst#2 dst zp ZP_WORD:3 8.75 +(byte*) main::dst#1 dst zp ZP_WORD:3 11.0 +(byte*) main::dst#4 dst zp ZP_WORD:3 11.666666666666666 (byte) main::i (byte) main::i#1 i zp ZP_BYTE:2 16.5 (byte) main::i#2 i zp ZP_BYTE:2 3.6666666666666665 (byte*) main::src (byte*) main::src#1 src zp ZP_WORD:28 11.0 -(byte*) main::src#2 src zp ZP_WORD:28 14.666666666666666 +(byte*) main::src#4 src zp ZP_WORD:28 16.5 (void*()) malloc((word) malloc::size) (label) malloc::@return (byte*) malloc::mem @@ -11098,7 +11153,7 @@ reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ] reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] reg byte x [ initSprites::i#2 initSprites::i#1 ] zp ZP_BYTE:2 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::y#7 getCharToProcess::y#1 startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 main::i#2 main::i#1 ] -zp ZP_WORD:3 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#2 main::dst#0 main::dst#1 ] +zp ZP_WORD:3 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#4 main::dst#1 main::dst#0 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_BYTE:5 [ processChars::i#10 processChars::i#1 ] @@ -11124,11 +11179,11 @@ reg byte a [ startProcessing::$30 ] zp ZP_WORD:12 [ startProcessing::$0 startProcessing::$48 startProcessing::$1 startProcessing::offset#0 startProcessing::screenPtr#0 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:14 [ startProcessing::$47 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] zp ZP_WORD:16 [ startProcessing::colPtr#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] -zp ZP_BYTE:18 [ startProcessing::spriteCol#0 init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] +zp ZP_BYTE:18 [ startProcessing::spriteCol#0 init_angle_screen::x#5 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] reg byte a [ startProcessing::ch#0 ] zp ZP_WORD:19 [ startProcessing::$11 startProcessing::$12 startProcessing::$13 startProcessing::spriteX#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:21 [ startProcessing::$15 startProcessing::$16 startProcessing::$17 startProcessing::spriteY#0 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -zp ZP_BYTE:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] +zp ZP_BYTE:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#5 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] reg byte a [ startProcessing::$22 ] reg byte a [ startProcessing::$50 ] reg byte a [ startProcessing::$51 ] @@ -11140,7 +11195,7 @@ reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] zp ZP_WORD:26 [ init_angle_screen::xw#0 atan2_16::x#0 getCharToProcess::$12 ] reg byte a [ init_angle_screen::$7 ] -zp ZP_WORD:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#2 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#2 main::src#1 ] +zp ZP_WORD:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#4 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#4 main::src#1 ] zp ZP_BYTE:30 [ init_angle_screen::ang_w#0 startProcessing::center_x#0 ] reg byte a [ init_angle_screen::$13 ] reg byte a [ init_angle_screen::$14 ] @@ -11171,7 +11226,7 @@ reg byte a [ processChars::$33 ] FINAL ASSEMBLER -Score: 1113942 +Score: 1113582 // File Comments // Clears start screen throwing around the letters (by turning them into sprites) @@ -11311,157 +11366,154 @@ main: { sta dst lda SCREEN_COPY+1 sta dst+1 - // [12] phi from main::@9 to main::@1 [phi:main::@9->main::@1] - // [12] phi (byte*) main::dst#2 = (byte*) main::dst#0 [phi:main::@9->main::@1#0] -- register_copy - // [12] phi (byte*) main::src#2 = (const byte*) SCREEN#0 [phi:main::@9->main::@1#1] -- pbuz1=pbuc1 + // [12] phi from main::@9 to main::@2 [phi:main::@9->main::@2] + // [12] phi (byte*) main::dst#4 = (byte*) main::dst#0 [phi:main::@9->main::@2#0] -- register_copy + // [12] phi (byte*) main::src#4 = (const byte*) SCREEN#0 [phi:main::@9->main::@2#1] -- pbuz1=pbuc1 lda #SCREEN sta src+1 + // [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [12] phi (byte*) main::dst#4 = (byte*) main::dst#1 [phi:main::@1->main::@2#0] -- register_copy + // [12] phi (byte*) main::src#4 = (byte*) main::src#1 [phi:main::@1->main::@2#1] -- register_copy + // main::@2 + b2: + // *dst = *src + // [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (src),y + sta (dst),y + // for( byte* src=SCREEN, dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++) + // [14] (byte*) main::src#1 ← ++ (byte*) main::src#4 -- pbuz1=_inc_pbuz1 + inc src + bne !+ + inc src+1 + !: + // [15] (byte*) main::dst#1 ← ++ (byte*) main::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: // Copy screen to screen copy // main::@1 - b1: - // for( byte* src=SCREEN, dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++) - // [13] if((byte*) main::src#2!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_neq_pbuc1_then_la1 + // [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_neq_pbuc1_then_la1 lda src+1 cmp #>SCREEN+$3e8 bne b2 lda src cmp #main::@3] - // [14] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + // [17] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 lda #0 sta i // Init processing array - // [14] phi from main::@3 to main::@3 [phi:main::@3->main::@3] - // [14] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy + // [17] phi from main::@3 to main::@3 [phi:main::@3->main::@3] + // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy // main::@3 b3: // PROCESSING[i] = { 0, 0, 0, 0, 0, 0, 0, STATUS_FREE, 0} - // [15] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda i asl - // [16] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 + // [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc i - // [17] (byte) main::$28 ← (byte) main::$27 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [18] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 + // [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc i - // [19] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 -- vbuxx=vbuaa_rol_1 + // [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 -- vbuxx=vbuaa_rol_1 asl tax - // [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 + // [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 lda #0 sta PROCESSING,x sta PROCESSING+1,x - // [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 + // [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x - // [22] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 + // [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x - // [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 + // [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x - // [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x - // [25] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x - // [26] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x - // [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuxx=vbuc2 + // [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuxx=vbuc2 lda #STATUS_FREE sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x - // [28] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuxx=pbuc2 + // [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuxx=pbuc2 lda #<0 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x // for( byte i: 0..NUM_PROCESSING-1 ) - // [29] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [32] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc i - // [30] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 + // [33] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_PROCESSING-1+1 cmp i bne b3 - // [31] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // initSprites() - // [32] call initSprites + // [35] call initSprites // [156] phi from main::@4 to initSprites [phi:main::@4->initSprites] jsr initSprites - // [33] phi from main::@4 to main::@10 [phi:main::@4->main::@10] + // [36] phi from main::@4 to main::@10 [phi:main::@4->main::@10] // main::@10 // setupRasterIrq(RASTER_IRQ_TOP, &irqTop) - // [34] call setupRasterIrq + // [37] call setupRasterIrq jsr setupRasterIrq - // [35] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5] - b4: + // [38] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5] + b1: // Main loop // main::@5 // getCharToProcess() - // [36] call getCharToProcess + // [39] call getCharToProcess jsr getCharToProcess - // [37] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuyy=vbuz1 + // [40] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuyy=vbuz1 ldy getCharToProcess.return_x - // [38] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuaa=vbuz1 + // [41] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuaa=vbuz1 lda getCharToProcess.return_y - // [39] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 + // [42] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 // main::@11 // center = getCharToProcess() - // [40] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 - // [41] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuaa + // [43] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 + // [44] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuaa sta center_y - // [42] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuaa=vbuxx + // [45] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuaa=vbuxx txa // if(center.dist==NOT_FOUND) - // [43] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 -- vbuaa_neq_vbuc1_then_la1 + // [46] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 -- vbuaa_neq_vbuc1_then_la1 cmp #NOT_FOUND bne b6 // main::@7 // (*(SCREEN+999)) = '.' - // [44] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 + // [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 lda #'.' sta SCREEN+$3e7 // main::@8 b8: // (*(COLS+999))++; - // [45] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc COLS+$3e7 jmp b8 // main::@6 b6: // startProcessing(center) - // [46] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuyy + // [49] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuyy sty startProcessing.center_x - // [47] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 - // [48] call startProcessing + // [50] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 + // [51] call startProcessing // [52] phi from main::@6 to startProcessing [phi:main::@6->startProcessing] jsr startProcessing - jmp b4 - // main::@2 - b2: - // *dst = *src - // [49] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (src),y - sta (dst),y - // for( byte* src=SCREEN, dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++) - // [50] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 - inc src - bne !+ - inc src+1 - !: - // [51] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [12] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [12] phi (byte*) main::dst#2 = (byte*) main::dst#1 [phi:main::@2->main::@1#0] -- register_copy - // [12] phi (byte*) main::src#2 = (byte*) main::src#1 [phi:main::@2->main::@1#1] -- register_copy jmp b1 } // startProcessing @@ -12131,17 +12183,30 @@ setupRasterIrq: { // Initialize sprites initSprites: { .label sp = $1c - // [157] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1] - // [157] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA#0 [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1 + // [157] phi from initSprites to initSprites::@2 [phi:initSprites->initSprites::@2] + // [157] phi (byte*) initSprites::sp#4 = (const byte*) SPRITE_DATA#0 [phi:initSprites->initSprites::@2#0] -- pbuz1=pbuc1 lda #SPRITE_DATA sta sp+1 + // [157] phi from initSprites::@1 to initSprites::@2 [phi:initSprites::@1->initSprites::@2] + // [157] phi (byte*) initSprites::sp#4 = (byte*) initSprites::sp#1 [phi:initSprites::@1->initSprites::@2#0] -- register_copy + // initSprites::@2 + b2: + // *sp = 0 + // [158] *((byte*) initSprites::sp#4) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (sp),y + // for( byte* sp = SPRITE_DATA; spSPRITE_DATA+NUM_PROCESSING*$40 bcc b2 @@ -12150,55 +12215,39 @@ initSprites: { cmp #initSprites::@3] - // [159] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1 + // [161] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3] + // [161] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1 ldx #0 // Initialize sprite registers - // [159] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3] - // [159] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy + // [161] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3] + // [161] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy // initSprites::@3 b3: // SPRITES_COLS[i] = LIGHT_BLUE - // [160] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #LIGHT_BLUE sta SPRITES_COLS,x // for( byte i: 0..7) - // [161] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx + // [163] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx inx - // [162] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1 + // [164] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne b3 // initSprites::@4 // *SPRITES_MC = 0 - // [163] *((const byte*) SPRITES_MC#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [165] *((const byte*) SPRITES_MC#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_MC // *SPRITES_EXPAND_X = 0 - // [164] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta SPRITES_EXPAND_X // *SPRITES_EXPAND_Y = 0 - // [165] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta SPRITES_EXPAND_Y // initSprites::@return // } - // [166] return + // [168] return rts - // initSprites::@2 - b2: - // *sp = 0 - // [167] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 - lda #0 - tay - sta (sp),y - // for( byte* sp = SPRITE_DATA; spinitSprites::@1] - // [157] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy - jmp b1 } // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. @@ -12246,85 +12295,51 @@ init_angle_screen: { // [171] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy // init_angle_screen::@1 b1: - // [172] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - // [172] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [172] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + // [172] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [172] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [172] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - // init_angle_screen::@2 - b2: - // for( byte x=0,xb=39; x<=19; x++, xb--) - // [173] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - // init_angle_screen::@4 - // screen_topline -= 40 - // [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // screen_bottomline += 40 - // [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // for(byte y: 0..12) - // [176] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [177] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1 - // init_angle_screen::@return - // } - // [178] return - rts + // [172] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + // [172] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [172] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy // init_angle_screen::@3 b3: // x*2 - // [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // 39-x*2 - // [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // (word){ 39-x*2, 0 } - // [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw // y*2 - // [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl // (word){ y*2, 0 } - // [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 sta yw+1 sty yw // atan2_16(xw, yw) - // [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [186] call atan2_16 + // [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [180] call atan2_16 jsr atan2_16 - // [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0 // init_angle_screen::@5 // angle_w = atan2_16(xw, yw) - // [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 // angle_w+0x0080 - // [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _11 @@ -12333,47 +12348,78 @@ init_angle_screen: { inc _11+1 !: // ang_w = >(angle_w+0x0080) - // [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w // screen_bottomline[xb] = ang_w - // [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 ldy xb sta (screen_bottomline),y // -ang_w - // [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 eor #$ff clc adc #1 // screen_topline[xb] = -ang_w - // [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_topline),y // 0x80+ang_w - // [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w // screen_topline[x] = 0x80+ang_w - // [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y // 0x80-ang_w - // [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w // screen_bottomline[x] = 0x80-ang_w - // [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [198] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [192] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [199] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [193] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [172] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - // [172] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [172] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy - jmp b2 + // init_angle_screen::@2 + // [194] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3 + // init_angle_screen::@4 + // screen_topline -= 40 + // [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // screen_bottomline += 40 + // [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // for(byte y: 0..12) + // [197] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [198] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1 + // init_angle_screen::@return + // } + // [199] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) diff --git a/src/test/ref/complex/clearscreen/clearscreen.sym b/src/test/ref/complex/clearscreen/clearscreen.sym index 69ed21048..db9eabf35 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.sym +++ b/src/test/ref/complex/clearscreen/clearscreen.sym @@ -288,8 +288,8 @@ (byte) initSprites::i#1 reg byte x 16.5 (byte) initSprites::i#2 reg byte x 16.5 (byte*) initSprites::sp -(byte*) initSprites::sp#1 sp zp ZP_WORD:28 22.0 -(byte*) initSprites::sp#2 sp zp ZP_WORD:28 14.666666666666666 +(byte*) initSprites::sp#1 sp zp ZP_WORD:28 16.5 +(byte*) initSprites::sp#4 sp zp ZP_WORD:28 16.5 (void()) init_angle_screen((byte*) init_angle_screen::screen) (word~) init_angle_screen::$11 $11 zp ZP_WORD:16 202.0 (byte~) init_angle_screen::$13 reg byte a 202.0 @@ -313,17 +313,17 @@ (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:24 4.0 (byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:24 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:24 9.04 +(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:24 9.040000000000001 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:3 2.0 (byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:3 5.5 (byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:3 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 x zp ZP_BYTE:18 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:18 28.857142857142858 +(byte) init_angle_screen::x#5 x zp ZP_BYTE:18 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:23 202.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:23 18.363636363636363 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:23 101.0 +(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:23 19.238095238095237 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 xw zp ZP_WORD:26 33.666666666666664 (byte) init_angle_screen::y @@ -367,14 +367,14 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (byte) main::center_y#0 center_y zp ZP_BYTE:11 5.5 (byte*) main::dst (byte*) main::dst#0 dst zp ZP_WORD:3 4.0 -(byte*) main::dst#1 dst zp ZP_WORD:3 22.0 -(byte*) main::dst#2 dst zp ZP_WORD:3 8.75 +(byte*) main::dst#1 dst zp ZP_WORD:3 11.0 +(byte*) main::dst#4 dst zp ZP_WORD:3 11.666666666666666 (byte) main::i (byte) main::i#1 i zp ZP_BYTE:2 16.5 (byte) main::i#2 i zp ZP_BYTE:2 3.6666666666666665 (byte*) main::src (byte*) main::src#1 src zp ZP_WORD:28 11.0 -(byte*) main::src#2 src zp ZP_WORD:28 14.666666666666666 +(byte*) main::src#4 src zp ZP_WORD:28 16.5 (void*()) malloc((word) malloc::size) (label) malloc::@return (byte*) malloc::mem @@ -525,7 +525,7 @@ reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ] reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] reg byte x [ initSprites::i#2 initSprites::i#1 ] zp ZP_BYTE:2 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::y#7 getCharToProcess::y#1 startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 main::i#2 main::i#1 ] -zp ZP_WORD:3 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#2 main::dst#0 main::dst#1 ] +zp ZP_WORD:3 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#4 main::dst#1 main::dst#0 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_BYTE:5 [ processChars::i#10 processChars::i#1 ] @@ -551,11 +551,11 @@ reg byte a [ startProcessing::$30 ] zp ZP_WORD:12 [ startProcessing::$0 startProcessing::$48 startProcessing::$1 startProcessing::offset#0 startProcessing::screenPtr#0 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:14 [ startProcessing::$47 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] zp ZP_WORD:16 [ startProcessing::colPtr#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] -zp ZP_BYTE:18 [ startProcessing::spriteCol#0 init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] +zp ZP_BYTE:18 [ startProcessing::spriteCol#0 init_angle_screen::x#5 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] reg byte a [ startProcessing::ch#0 ] zp ZP_WORD:19 [ startProcessing::$11 startProcessing::$12 startProcessing::$13 startProcessing::spriteX#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:21 [ startProcessing::$15 startProcessing::$16 startProcessing::$17 startProcessing::spriteY#0 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -zp ZP_BYTE:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] +zp ZP_BYTE:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#5 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] reg byte a [ startProcessing::$22 ] reg byte a [ startProcessing::$50 ] reg byte a [ startProcessing::$51 ] @@ -567,7 +567,7 @@ reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] zp ZP_WORD:26 [ init_angle_screen::xw#0 atan2_16::x#0 getCharToProcess::$12 ] reg byte a [ init_angle_screen::$7 ] -zp ZP_WORD:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#2 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#2 main::src#1 ] +zp ZP_WORD:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#4 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#4 main::src#1 ] zp ZP_BYTE:30 [ init_angle_screen::ang_w#0 startProcessing::center_x#0 ] reg byte a [ init_angle_screen::$13 ] reg byte a [ init_angle_screen::$14 ] diff --git a/src/test/ref/complex/tetris/tetris.asm b/src/test/ref/complex/tetris/tetris.asm index 89cd1a073..4a4ae4786 100644 --- a/src/test/ref/complex/tetris/tetris.asm +++ b/src/test/ref/complex/tetris/tetris.asm @@ -878,18 +878,13 @@ play_spawn_current: { lda #1 sta game_over b1: - lda #7 - sta piece_idx - b2: - lda #7 - cmp piece_idx - beq sid_rnd1 - rts - sid_rnd1: lda SID_VOICE3_OSC and #7 sta piece_idx - jmp b2 + lda #7 + cmp piece_idx + beq b1 + rts } // Update the score based on the number of lines removed // play_update_score(byte register(X) removed) diff --git a/src/test/ref/complex/tetris/tetris.cfg b/src/test/ref/complex/tetris/tetris.cfg index 11d8e9801..f8fe859c4 100644 --- a/src/test/ref/complex/tetris/tetris.cfg +++ b/src/test/ref/complex/tetris/tetris.cfg @@ -93,7 +93,7 @@ main::@15: scope:[main] from main::@14 [35] call render_moving to:main::@16 main::@16: scope:[main] from main::@15 - [36] (byte~) next_piece_idx#77 ← (byte) play_spawn_current::piece_idx#2 + [36] (byte~) next_piece_idx#77 ← (byte) play_spawn_current::piece_idx#1 [37] call render_next to:main::@17 main::@17: scope:[main] from main::@16 @@ -108,7 +108,7 @@ main::@1: scope:[main] from main::@17 main::@25 main::@6 [40] (byte) current_movedown_counter#16 ← phi( main::@6/(byte) current_movedown_counter#14 main::@17/(byte) 0 main::@25/(byte) current_movedown_counter#14 ) [40] (byte) keyboard_events_size#19 ← phi( main::@6/(byte) keyboard_events_size#16 main::@17/(byte) 0 main::@25/(byte) keyboard_events_size#16 ) [40] (byte) render_screen_showing#13 ← phi( main::@6/(byte) render_screen_showing#1 main::@17/(byte) render_screen_showing#0 main::@25/(byte) render_screen_showing#1 ) - [40] (byte) next_piece_idx#10 ← phi( main::@6/(byte) next_piece_idx#16 main::@17/(byte) play_spawn_current::piece_idx#2 main::@25/(byte) next_piece_idx#16 ) + [40] (byte) next_piece_idx#10 ← phi( main::@6/(byte) next_piece_idx#16 main::@17/(byte) play_spawn_current::piece_idx#1 main::@25/(byte) next_piece_idx#16 ) [40] (byte) game_over#10 ← phi( main::@6/(byte) game_over#15 main::@17/(byte) game_over#52 main::@25/(byte) game_over#15 ) [40] (byte) current_ypos#11 ← phi( main::@6/(byte) current_ypos#19 main::@17/(byte) current_ypos#6 main::@25/(byte) current_ypos#19 ) [40] (byte) current_xpos#14 ← phi( main::@6/(byte) current_xpos#19 main::@17/(byte) current_xpos#100 main::@25/(byte) current_xpos#19 ) @@ -603,7 +603,7 @@ play_move_down::@17: scope:[play_move_down] from play_move_down::@16 [282] (byte*~) current_piece_gfx#117 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) to:play_move_down::@11 play_move_down::@11: scope:[play_move_down] from play_move_down::@10 play_move_down::@17 - [283] (byte) next_piece_idx#30 ← phi( play_move_down::@10/(byte) next_piece_idx#10 play_move_down::@17/(byte) play_spawn_current::piece_idx#2 ) + [283] (byte) next_piece_idx#30 ← phi( play_move_down::@10/(byte) next_piece_idx#10 play_move_down::@17/(byte) play_spawn_current::piece_idx#1 ) [283] (byte) game_over#27 ← phi( play_move_down::@10/(byte) game_over#10 play_move_down::@17/(byte) game_over#52 ) [283] (byte) current_xpos#43 ← phi( play_move_down::@10/(byte) current_xpos#14 play_move_down::@17/(byte) current_xpos#100 ) [283] (byte*) current_piece_gfx#35 ← phi( play_move_down::@10/(byte*) current_piece_gfx#13 play_move_down::@17/(byte*~) current_piece_gfx#117 ) @@ -640,7 +640,7 @@ play_move_down::@10: scope:[play_move_down] from play_move_down::@13 to:play_move_down::@11 play_spawn_current: scope:[play_spawn_current] from main::@12 main::@13 play_move_down::@16 [287] (byte) game_over#65 ← phi( main::@12/(byte) 0 main::@13/(byte) game_over#52 play_move_down::@16/(byte) game_over#10 ) - [287] (byte) next_piece_idx#17 ← phi( main::@12/(byte) 0 main::@13/(byte) play_spawn_current::piece_idx#2 play_move_down::@16/(byte) next_piece_idx#10 ) + [287] (byte) next_piece_idx#17 ← phi( main::@12/(byte) 0 main::@13/(byte) play_spawn_current::piece_idx#1 play_move_down::@16/(byte) next_piece_idx#10 ) [288] (byte) play_spawn_current::current_piece_idx#0 ← (byte) next_piece_idx#17 [289] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [290] (byte) current_piece_char#5 ← *((const byte[]) PIECES_CHARS#0 + (byte) play_spawn_current::current_piece_idx#0) @@ -661,563 +661,562 @@ play_spawn_current::@5: scope:[play_spawn_current] from play_spawn_current::@4 to:play_spawn_current::@1 play_spawn_current::@1: scope:[play_spawn_current] from play_spawn_current::@4 play_spawn_current::@5 [301] (byte) game_over#52 ← phi( play_spawn_current::@5/(byte) game_over#65 play_spawn_current::@4/(byte) 1 ) - to:play_spawn_current::@2 -play_spawn_current::@2: scope:[play_spawn_current] from play_spawn_current::@1 play_spawn_current::@3 - [302] (byte) play_spawn_current::piece_idx#2 ← phi( play_spawn_current::@1/(byte) 7 play_spawn_current::@3/(byte) play_spawn_current::piece_idx#1 ) - [303] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 - to:play_spawn_current::@return -play_spawn_current::@return: scope:[play_spawn_current] from play_spawn_current::@2 - [304] return - to:@return -play_spawn_current::sid_rnd1: scope:[play_spawn_current] from play_spawn_current::@2 - [305] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) + to:play_spawn_current::sid_rnd1 +play_spawn_current::sid_rnd1: scope:[play_spawn_current] from play_spawn_current::@1 play_spawn_current::@2 + [302] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) to:play_spawn_current::@3 play_spawn_current::@3: scope:[play_spawn_current] from play_spawn_current::sid_rnd1 - [306] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 + [303] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 to:play_spawn_current::@2 +play_spawn_current::@2: scope:[play_spawn_current] from play_spawn_current::@3 + [304] if((byte) play_spawn_current::piece_idx#1==(byte) 7) goto play_spawn_current::sid_rnd1 + to:play_spawn_current::@return +play_spawn_current::@return: scope:[play_spawn_current] from play_spawn_current::@2 + [305] return + to:@return play_update_score: scope:[play_update_score] from play_move_down::@15 - [307] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return + [306] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return to:play_update_score::@1 play_update_score::@1: scope:[play_update_score] from play_update_score - [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 - [309] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 - [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 - [311] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) + [307] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 + [308] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 + [309] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 + [310] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) asm { sed } - [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 - [314] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 + [312] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 + [313] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 asm { cld } - [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 - [317] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 - [318] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return + [315] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 + [316] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 + [317] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return to:play_update_score::@2 play_update_score::@2: scope:[play_update_score] from play_update_score::@1 - [319] phi() - [320] call play_increase_level + [318] phi() + [319] call play_increase_level to:play_update_score::@return play_update_score::@return: scope:[play_update_score] from play_update_score play_update_score::@1 play_update_score::@2 - [321] (byte) level_bcd#19 ← phi( play_update_score/(byte) level_bcd#11 play_update_score::@1/(byte) level_bcd#11 play_update_score::@2/(byte) level_bcd#62 ) - [321] (byte) current_movedown_slow#23 ← phi( play_update_score/(byte) current_movedown_slow#14 play_update_score::@1/(byte) current_movedown_slow#14 play_update_score::@2/(byte) current_movedown_slow#66 ) - [321] (byte) level#19 ← phi( play_update_score/(byte) level#10 play_update_score::@1/(byte) level#10 play_update_score::@2/(byte) level#21 ) - [321] (dword) score_bcd#16 ← phi( play_update_score/(dword) score_bcd#18 play_update_score::@1/(dword) score_bcd#29 play_update_score::@2/(dword) score_bcd#29 ) - [321] (word) lines_bcd#17 ← phi( play_update_score/(word) lines_bcd#19 play_update_score::@1/(word) lines_bcd#29 play_update_score::@2/(word) lines_bcd#29 ) - [322] return + [320] (byte) level_bcd#19 ← phi( play_update_score/(byte) level_bcd#11 play_update_score::@1/(byte) level_bcd#11 play_update_score::@2/(byte) level_bcd#62 ) + [320] (byte) current_movedown_slow#23 ← phi( play_update_score/(byte) current_movedown_slow#14 play_update_score::@1/(byte) current_movedown_slow#14 play_update_score::@2/(byte) current_movedown_slow#66 ) + [320] (byte) level#19 ← phi( play_update_score/(byte) level#10 play_update_score::@1/(byte) level#10 play_update_score::@2/(byte) level#21 ) + [320] (dword) score_bcd#16 ← phi( play_update_score/(dword) score_bcd#18 play_update_score::@1/(dword) score_bcd#29 play_update_score::@2/(dword) score_bcd#29 ) + [320] (word) lines_bcd#17 ← phi( play_update_score/(word) lines_bcd#19 play_update_score::@1/(word) lines_bcd#29 play_update_score::@2/(word) lines_bcd#29 ) + [321] return to:@return play_increase_level: scope:[play_increase_level] from play_update_score::@2 - [323] (byte) level#21 ← ++ (byte) level#10 - [324] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 + [322] (byte) level#21 ← ++ (byte) level#10 + [323] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 to:play_increase_level::@3 play_increase_level::@3: scope:[play_increase_level] from play_increase_level - [325] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) + [324] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) to:play_increase_level::@1 play_increase_level::@1: scope:[play_increase_level] from play_increase_level play_increase_level::@3 - [326] (byte) current_movedown_slow#66 ← phi( play_increase_level/(byte) 1 play_increase_level::@3/(byte) current_movedown_slow#10 ) - [327] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 - [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f - [329] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 + [325] (byte) current_movedown_slow#66 ← phi( play_increase_level/(byte) 1 play_increase_level::@3/(byte) current_movedown_slow#10 ) + [326] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 + [327] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f + [328] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 to:play_increase_level::@4 play_increase_level::@4: scope:[play_increase_level] from play_increase_level::@1 - [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 + [329] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 to:play_increase_level::@2 play_increase_level::@2: scope:[play_increase_level] from play_increase_level::@1 play_increase_level::@4 - [331] (byte) level_bcd#62 ← phi( play_increase_level::@1/(byte) level_bcd#21 play_increase_level::@4/(byte) level_bcd#8 ) + [330] (byte) level_bcd#62 ← phi( play_increase_level::@1/(byte) level_bcd#21 play_increase_level::@4/(byte) level_bcd#8 ) asm { sed } to:play_increase_level::@5 play_increase_level::@5: scope:[play_increase_level] from play_increase_level::@2 play_increase_level::@5 - [333] (byte) play_increase_level::b#2 ← phi( play_increase_level::@2/(byte) 0 play_increase_level::@5/(byte) play_increase_level::b#1 ) - [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 - [335] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) - [336] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 - [337] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 + [332] (byte) play_increase_level::b#2 ← phi( play_increase_level::@2/(byte) 0 play_increase_level::@5/(byte) play_increase_level::b#1 ) + [333] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 + [334] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) + [335] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 + [336] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 to:play_increase_level::@6 play_increase_level::@6: scope:[play_increase_level] from play_increase_level::@5 asm { cld } to:play_increase_level::@return play_increase_level::@return: scope:[play_increase_level] from play_increase_level::@6 - [339] return + [338] return to:@return play_remove_lines: scope:[play_remove_lines] from play_move_down::@14 - [340] phi() + [339] phi() to:play_remove_lines::@1 play_remove_lines::@1: scope:[play_remove_lines] from play_remove_lines play_remove_lines::@6 - [341] (byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::removed#8 ) - [341] (byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::y#1 ) - [341] (byte) play_remove_lines::w#12 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::w#11 ) - [341] (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::r#1 ) + [340] (byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::removed#8 ) + [340] (byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::y#1 ) + [340] (byte) play_remove_lines::w#12 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::w#11 ) + [340] (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::r#1 ) to:play_remove_lines::@2 play_remove_lines::@2: scope:[play_remove_lines] from play_remove_lines::@1 play_remove_lines::@3 - [342] (byte) play_remove_lines::full#4 ← phi( play_remove_lines::@1/(byte) 1 play_remove_lines::@3/(byte) play_remove_lines::full#2 ) - [342] (byte) play_remove_lines::x#2 ← phi( play_remove_lines::@1/(byte) 0 play_remove_lines::@3/(byte) play_remove_lines::x#1 ) - [342] (byte) play_remove_lines::w#4 ← phi( play_remove_lines::@1/(byte) play_remove_lines::w#12 play_remove_lines::@3/(byte) play_remove_lines::w#1 ) - [342] (byte) play_remove_lines::r#2 ← phi( play_remove_lines::@1/(byte) play_remove_lines::r#3 play_remove_lines::@3/(byte) play_remove_lines::r#1 ) - [343] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) - [344] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 - [345] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 + [341] (byte) play_remove_lines::full#4 ← phi( play_remove_lines::@1/(byte) 1 play_remove_lines::@3/(byte) play_remove_lines::full#2 ) + [341] (byte) play_remove_lines::x#2 ← phi( play_remove_lines::@1/(byte) 0 play_remove_lines::@3/(byte) play_remove_lines::x#1 ) + [341] (byte) play_remove_lines::w#4 ← phi( play_remove_lines::@1/(byte) play_remove_lines::w#12 play_remove_lines::@3/(byte) play_remove_lines::w#1 ) + [341] (byte) play_remove_lines::r#2 ← phi( play_remove_lines::@1/(byte) play_remove_lines::r#3 play_remove_lines::@3/(byte) play_remove_lines::r#1 ) + [342] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) + [343] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 + [344] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 to:play_remove_lines::@3 play_remove_lines::@9: scope:[play_remove_lines] from play_remove_lines::@2 - [346] phi() + [345] phi() to:play_remove_lines::@3 play_remove_lines::@3: scope:[play_remove_lines] from play_remove_lines::@2 play_remove_lines::@9 - [347] (byte) play_remove_lines::full#2 ← phi( play_remove_lines::@9/(byte) play_remove_lines::full#4 play_remove_lines::@2/(byte) 0 ) - [348] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 - [349] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 - [350] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 - [351] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte) 1+(byte) 1) goto play_remove_lines::@2 + [346] (byte) play_remove_lines::full#2 ← phi( play_remove_lines::@9/(byte) play_remove_lines::full#4 play_remove_lines::@2/(byte) 0 ) + [347] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 + [348] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 + [349] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 + [350] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte) 1+(byte) 1) goto play_remove_lines::@2 to:play_remove_lines::@4 play_remove_lines::@4: scope:[play_remove_lines] from play_remove_lines::@3 - [352] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 + [351] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 to:play_remove_lines::@5 play_remove_lines::@5: scope:[play_remove_lines] from play_remove_lines::@4 - [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 - [354] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 + [352] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 + [353] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 to:play_remove_lines::@6 play_remove_lines::@6: scope:[play_remove_lines] from play_remove_lines::@4 play_remove_lines::@5 - [355] (byte) play_remove_lines::removed#8 ← phi( play_remove_lines::@4/(byte) play_remove_lines::removed#11 play_remove_lines::@5/(byte) play_remove_lines::removed#1 ) - [355] (byte) play_remove_lines::w#11 ← phi( play_remove_lines::@4/(byte) play_remove_lines::w#1 play_remove_lines::@5/(byte) play_remove_lines::w#2 ) - [356] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 - [357] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_remove_lines::@1 + [354] (byte) play_remove_lines::removed#8 ← phi( play_remove_lines::@4/(byte) play_remove_lines::removed#11 play_remove_lines::@5/(byte) play_remove_lines::removed#1 ) + [354] (byte) play_remove_lines::w#11 ← phi( play_remove_lines::@4/(byte) play_remove_lines::w#1 play_remove_lines::@5/(byte) play_remove_lines::w#2 ) + [355] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 + [356] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_remove_lines::@1 to:play_remove_lines::@7 play_remove_lines::@7: scope:[play_remove_lines] from play_remove_lines::@6 play_remove_lines::@8 - [358] (byte) play_remove_lines::w#6 ← phi( play_remove_lines::@8/(byte) play_remove_lines::w#3 play_remove_lines::@6/(byte) play_remove_lines::w#11 ) - [359] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 + [357] (byte) play_remove_lines::w#6 ← phi( play_remove_lines::@8/(byte) play_remove_lines::w#3 play_remove_lines::@6/(byte) play_remove_lines::w#11 ) + [358] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 to:play_remove_lines::@return play_remove_lines::@return: scope:[play_remove_lines] from play_remove_lines::@7 - [360] return + [359] return to:@return play_remove_lines::@8: scope:[play_remove_lines] from play_remove_lines::@7 - [361] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 - [362] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 + [360] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 + [361] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 to:play_remove_lines::@7 play_lock_current: scope:[play_lock_current] from play_move_down::@9 - [363] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 + [362] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 to:play_lock_current::@1 play_lock_current::@1: scope:[play_lock_current] from play_lock_current play_lock_current::@6 - [364] (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte) play_lock_current::l#1 ) - [364] (byte) play_lock_current::i#3 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte~) play_lock_current::i#7 ) - [364] (byte) play_lock_current::yp#2 ← phi( play_lock_current/(byte) play_lock_current::yp#0 play_lock_current::@6/(byte) play_lock_current::yp#1 ) - [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 - [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) - [367] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 + [363] (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte) play_lock_current::l#1 ) + [363] (byte) play_lock_current::i#3 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte~) play_lock_current::i#7 ) + [363] (byte) play_lock_current::yp#2 ← phi( play_lock_current/(byte) play_lock_current::yp#0 play_lock_current::@6/(byte) play_lock_current::yp#1 ) + [364] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 + [365] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) + [366] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 to:play_lock_current::@2 play_lock_current::@2: scope:[play_lock_current] from play_lock_current::@1 play_lock_current::@7 - [368] (byte) play_lock_current::c#2 ← phi( play_lock_current::@1/(byte) 0 play_lock_current::@7/(byte) play_lock_current::c#1 ) - [368] (byte) play_lock_current::xp#2 ← phi( play_lock_current::@1/(byte) play_lock_current::xp#0 play_lock_current::@7/(byte) play_lock_current::xp#1 ) - [368] (byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@7/(byte~) play_lock_current::i#9 ) - [369] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 - [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 + [367] (byte) play_lock_current::c#2 ← phi( play_lock_current::@1/(byte) 0 play_lock_current::@7/(byte) play_lock_current::c#1 ) + [367] (byte) play_lock_current::xp#2 ← phi( play_lock_current::@1/(byte) play_lock_current::xp#0 play_lock_current::@7/(byte) play_lock_current::xp#1 ) + [367] (byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@7/(byte~) play_lock_current::i#9 ) + [368] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 + [369] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 to:play_lock_current::@4 play_lock_current::@4: scope:[play_lock_current] from play_lock_current::@2 - [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 + [370] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#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 - [372] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 - [373] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 - [374] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 + [371] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 + [372] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 + [373] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 to:play_lock_current::@5 play_lock_current::@5: scope:[play_lock_current] from play_lock_current::@3 - [375] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 - [376] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 - [377] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 + [374] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 + [375] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 + [376] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 to:play_lock_current::@return play_lock_current::@return: scope:[play_lock_current] from play_lock_current::@5 - [378] return + [377] return to:@return play_lock_current::@6: scope:[play_lock_current] from play_lock_current::@5 - [379] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 + [378] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 to:play_lock_current::@1 play_lock_current::@7: scope:[play_lock_current] from play_lock_current::@3 - [380] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 + [379] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 to:play_lock_current::@2 keyboard_event_pressed: scope:[keyboard_event_pressed] from keyboard_event_scan::@1 keyboard_event_scan::@17 keyboard_event_scan::@2 keyboard_event_scan::@3 play_move_down::@1 - [381] (byte) keyboard_event_pressed::keycode#5 ← phi( keyboard_event_scan::@1/(const byte) KEY_RSHIFT#0 keyboard_event_scan::@2/(const byte) KEY_CTRL#0 keyboard_event_scan::@17/(const byte) KEY_LSHIFT#0 keyboard_event_scan::@3/(const byte) KEY_COMMODORE#0 play_move_down::@1/(const byte) KEY_SPACE#0 ) - [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 - [383] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) - [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 - [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) + [380] (byte) keyboard_event_pressed::keycode#5 ← phi( keyboard_event_scan::@1/(const byte) KEY_RSHIFT#0 keyboard_event_scan::@2/(const byte) KEY_CTRL#0 keyboard_event_scan::@17/(const byte) KEY_LSHIFT#0 keyboard_event_scan::@3/(const byte) KEY_COMMODORE#0 play_move_down::@1/(const byte) KEY_SPACE#0 ) + [381] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 + [382] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) + [383] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 + [384] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) to:keyboard_event_pressed::@return keyboard_event_pressed::@return: scope:[keyboard_event_pressed] from keyboard_event_pressed - [386] return + [385] return to:@return keyboard_event_get: scope:[keyboard_event_get] from main::@19 - [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return + [386] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return to:keyboard_event_get::@1 keyboard_event_get::@1: scope:[keyboard_event_get] from keyboard_event_get - [388] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 - [389] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) + [387] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 + [388] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) to:keyboard_event_get::@return keyboard_event_get::@return: scope:[keyboard_event_get] from keyboard_event_get keyboard_event_get::@1 - [390] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@1/(byte) keyboard_events_size#4 ) - [390] (byte) keyboard_event_get::return#2 ← phi( keyboard_event_get/(byte) $ff keyboard_event_get::@1/(byte) keyboard_event_get::return#1 ) - [391] return + [389] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@1/(byte) keyboard_events_size#4 ) + [389] (byte) keyboard_event_get::return#2 ← phi( keyboard_event_get/(byte) $ff keyboard_event_get::@1/(byte) keyboard_event_get::return#1 ) + [390] return to:@return keyboard_event_scan: scope:[keyboard_event_scan] from main::@18 - [392] phi() + [391] phi() to:keyboard_event_scan::@7 keyboard_event_scan::@7: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@8 - [393] (byte) keyboard_events_size#30 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@8/(byte) keyboard_events_size#13 ) - [393] (byte) keyboard_event_scan::keycode#11 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::keycode#13 ) - [393] (byte) keyboard_event_scan::row#2 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::row#1 ) - [394] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 - [395] call keyboard_matrix_read - [396] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + [392] (byte) keyboard_events_size#30 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@8/(byte) keyboard_events_size#13 ) + [392] (byte) keyboard_event_scan::keycode#11 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::keycode#13 ) + [392] (byte) keyboard_event_scan::row#2 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::row#1 ) + [393] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 + [394] call keyboard_matrix_read + [395] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 to:keyboard_event_scan::@19 keyboard_event_scan::@19: scope:[keyboard_event_scan] from keyboard_event_scan::@7 - [397] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 - [398] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 + [396] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 + [397] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 to:keyboard_event_scan::@16 keyboard_event_scan::@16: scope:[keyboard_event_scan] from keyboard_event_scan::@19 - [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 + [398] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 to:keyboard_event_scan::@8 keyboard_event_scan::@8: scope:[keyboard_event_scan] from keyboard_event_scan::@15 keyboard_event_scan::@16 - [400] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_events_size#29 keyboard_event_scan::@16/(byte) keyboard_events_size#30 ) - [400] (byte) keyboard_event_scan::keycode#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@16/(byte) keyboard_event_scan::keycode#1 ) - [401] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 - [402] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 + [399] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_events_size#29 keyboard_event_scan::@16/(byte) keyboard_events_size#30 ) + [399] (byte) keyboard_event_scan::keycode#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@16/(byte) keyboard_event_scan::keycode#1 ) + [400] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 + [401] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 to:keyboard_event_scan::@17 keyboard_event_scan::@17: scope:[keyboard_event_scan] from keyboard_event_scan::@8 - [403] phi() - [404] call keyboard_event_pressed - [405] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 + [402] phi() + [403] call keyboard_event_pressed + [404] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@20 keyboard_event_scan::@20: scope:[keyboard_event_scan] from keyboard_event_scan::@17 - [406] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 - [407] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 + [405] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 + [406] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 to:keyboard_event_scan::@18 keyboard_event_scan::@18: scope:[keyboard_event_scan] from keyboard_event_scan::@20 - [408] phi() + [407] phi() to:keyboard_event_scan::@1 keyboard_event_scan::@1: scope:[keyboard_event_scan] from keyboard_event_scan::@18 keyboard_event_scan::@20 - [409] phi() - [410] call keyboard_event_pressed - [411] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 + [408] phi() + [409] call keyboard_event_pressed + [410] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@21 keyboard_event_scan::@21: scope:[keyboard_event_scan] from keyboard_event_scan::@1 - [412] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 - [413] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 + [411] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 + [412] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 to:keyboard_event_scan::@4 keyboard_event_scan::@4: scope:[keyboard_event_scan] from keyboard_event_scan::@21 - [414] phi() + [413] phi() to:keyboard_event_scan::@2 keyboard_event_scan::@2: scope:[keyboard_event_scan] from keyboard_event_scan::@21 keyboard_event_scan::@4 - [415] phi() - [416] call keyboard_event_pressed - [417] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 + [414] phi() + [415] call keyboard_event_pressed + [416] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@22 keyboard_event_scan::@22: scope:[keyboard_event_scan] from keyboard_event_scan::@2 - [418] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 - [419] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 + [417] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 + [418] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 to:keyboard_event_scan::@5 keyboard_event_scan::@5: scope:[keyboard_event_scan] from keyboard_event_scan::@22 - [420] phi() + [419] phi() to:keyboard_event_scan::@3 keyboard_event_scan::@3: scope:[keyboard_event_scan] from keyboard_event_scan::@22 keyboard_event_scan::@5 - [421] phi() - [422] call keyboard_event_pressed - [423] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 + [420] phi() + [421] call keyboard_event_pressed + [422] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@23 keyboard_event_scan::@23: scope:[keyboard_event_scan] from keyboard_event_scan::@3 - [424] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 - [425] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return + [423] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 + [424] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return to:keyboard_event_scan::@6 keyboard_event_scan::@6: scope:[keyboard_event_scan] from keyboard_event_scan::@23 - [426] phi() + [425] phi() to:keyboard_event_scan::@return keyboard_event_scan::@return: scope:[keyboard_event_scan] from keyboard_event_scan::@23 keyboard_event_scan::@6 - [427] return + [426] return to:@return keyboard_event_scan::@9: scope:[keyboard_event_scan] from keyboard_event_scan::@10 keyboard_event_scan::@19 - [428] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 ) - [428] (byte) keyboard_event_scan::keycode#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@19/(byte) keyboard_event_scan::keycode#11 ) - [428] (byte) keyboard_event_scan::col#2 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::col#1 keyboard_event_scan::@19/(byte) 0 ) - [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) - [430] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) - [431] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 + [427] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 ) + [427] (byte) keyboard_event_scan::keycode#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@19/(byte) keyboard_event_scan::keycode#11 ) + [427] (byte) keyboard_event_scan::col#2 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::col#1 keyboard_event_scan::@19/(byte) 0 ) + [428] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) + [429] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) + [430] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 to:keyboard_event_scan::@12 keyboard_event_scan::@12: scope:[keyboard_event_scan] from keyboard_event_scan::@9 - [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 + [431] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 to:keyboard_event_scan::@13 keyboard_event_scan::@13: scope:[keyboard_event_scan] from keyboard_event_scan::@12 - [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) - [434] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 + [432] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) + [433] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 to:keyboard_event_scan::@14 keyboard_event_scan::@14: scope:[keyboard_event_scan] from keyboard_event_scan::@13 - [435] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 - [436] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 + [434] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 + [435] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 to:keyboard_event_scan::@10 keyboard_event_scan::@10: scope:[keyboard_event_scan] from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 - [437] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan::@9/(byte) keyboard_events_size#10 keyboard_event_scan::@11/(byte) keyboard_events_size#1 keyboard_event_scan::@12/(byte) keyboard_events_size#10 keyboard_event_scan::@14/(byte) keyboard_events_size#2 ) - [438] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 - [439] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 - [440] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 + [436] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan::@9/(byte) keyboard_events_size#10 keyboard_event_scan::@11/(byte) keyboard_events_size#1 keyboard_event_scan::@12/(byte) keyboard_events_size#10 keyboard_event_scan::@14/(byte) keyboard_events_size#2 ) + [437] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 + [438] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 + [439] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 to:keyboard_event_scan::@15 keyboard_event_scan::@15: scope:[keyboard_event_scan] from keyboard_event_scan::@10 - [441] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 + [440] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 to:keyboard_event_scan::@8 keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan::@13 - [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 - [443] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 - [444] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 + [441] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 + [442] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 + [443] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 to:keyboard_event_scan::@10 keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@7 - [445] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) - [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) + [444] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) + [445] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read - [447] return + [446] return to:@return render_show: scope:[render_show] from main::@3 - [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 + [447] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 to:render_show::toD0182 render_show::toD0182: scope:[render_show] from render_show - [449] phi() + [448] phi() to:render_show::@1 render_show::@1: scope:[render_show] from render_show::toD0181 render_show::toD0182 - [450] (byte) render_show::d018val#3 ← phi( render_show::toD0181/(const byte) render_show::toD0181_return#0 render_show::toD0182/(const byte) render_show::toD0182_return#0 ) - [451] *((const byte*) D018#0) ← (byte) render_show::d018val#3 - [452] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) - [453] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) - [454] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 + [449] (byte) render_show::d018val#3 ← phi( render_show::toD0181/(const byte) render_show::toD0181_return#0 render_show::toD0182/(const byte) render_show::toD0182_return#0 ) + [450] *((const byte*) D018#0) ← (byte) render_show::d018val#3 + [451] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) + [452] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) + [453] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 to:render_show::@return render_show::@return: scope:[render_show] from render_show::@1 - [455] return + [454] return to:@return render_show::toD0181: scope:[render_show] from render_show - [456] phi() + [455] phi() to:render_show::@1 play_init: scope:[play_init] from main::@11 - [457] phi() + [456] phi() to:play_init::@1 play_init::@1: scope:[play_init] from play_init play_init::@1 - [458] (byte) play_init::idx#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::idx#1 ) - [458] (byte*) play_init::pli#2 ← phi( play_init/(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 play_init::@1/(byte*) play_init::pli#1 ) - [458] (byte) play_init::j#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::j#1 ) - [459] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 - [460] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 - [461] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 - [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 - [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 - [464] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 - [465] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_init::@1 + [457] (byte) play_init::idx#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::idx#1 ) + [457] (byte*) play_init::pli#2 ← phi( play_init/(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 play_init::@1/(byte*) play_init::pli#1 ) + [457] (byte) play_init::j#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::j#1 ) + [458] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 + [459] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 + [460] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 + [461] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 + [462] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 + [463] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 + [464] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_init::@1 to:play_init::@2 play_init::@2: scope:[play_init] from play_init::@1 - [466] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 - [467] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) + [465] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 + [466] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) to:play_init::@3 play_init::@3: scope:[play_init] from play_init::@2 play_init::@3 - [468] (byte) play_init::b#2 ← phi( play_init::@2/(byte) 0 play_init::@3/(byte) play_init::b#1 ) - [469] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 - [470] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) - [471] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 - [472] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 + [467] (byte) play_init::b#2 ← phi( play_init::@2/(byte) 0 play_init::@3/(byte) play_init::b#1 ) + [468] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 + [469] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) + [470] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 + [471] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 to:play_init::@return play_init::@return: scope:[play_init] from play_init::@3 - [473] return + [472] return to:@return sprites_irq_init: scope:[sprites_irq_init] from main::@10 asm { sei } - [475] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 + [474] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 asm { ldaCIA1_INTERRUPT } - [477] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 - [478] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 - [479] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 - [480] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f - [481] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 - [482] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 - [483] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() + [476] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 + [477] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 + [478] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 + [479] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f + [480] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 + [481] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 + [482] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() asm { cli } to:sprites_irq_init::@return sprites_irq_init::@return: scope:[sprites_irq_init] from sprites_irq_init - [485] return + [484] return to:@return sprites_init: scope:[sprites_init] from main::@9 - [486] *((const byte*) SPRITES_ENABLE#0) ← (byte) $f - [487] *((const byte*) SPRITES_MC#0) ← (byte) 0 - [488] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) - [489] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) + [485] *((const byte*) SPRITES_ENABLE#0) ← (byte) $f + [486] *((const byte*) SPRITES_MC#0) ← (byte) 0 + [487] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) + [488] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) to:sprites_init::@1 sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1 - [490] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte)(number) $18+(number) $f*(number) 8 sprites_init::@1/(byte) sprites_init::xpos#1 ) - [490] (byte) sprites_init::s#2 ← phi( sprites_init/(byte) 0 sprites_init::@1/(byte) sprites_init::s#1 ) - [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 - [492] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 - [493] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 - [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 - [495] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 - [496] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 + [489] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte)(number) $18+(number) $f*(number) 8 sprites_init::@1/(byte) sprites_init::xpos#1 ) + [489] (byte) sprites_init::s#2 ← phi( sprites_init/(byte) 0 sprites_init::@1/(byte) sprites_init::s#1 ) + [490] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 + [491] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 + [492] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 + [493] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 + [494] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 + [495] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 to:sprites_init::@return sprites_init::@return: scope:[sprites_init] from sprites_init::@1 - [497] return + [496] return to:@return render_init: scope:[render_init] from main::@8 - [498] phi() + [497] phi() to:render_init::vicSelectGfxBank1 render_init::vicSelectGfxBank1: scope:[render_init] from render_init - [499] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 + [498] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 to:render_init::vicSelectGfxBank1_toDd001 render_init::vicSelectGfxBank1_toDd001: scope:[render_init] from render_init::vicSelectGfxBank1 - [500] phi() + [499] phi() to:render_init::vicSelectGfxBank1_@1 render_init::vicSelectGfxBank1_@1: scope:[render_init] from render_init::vicSelectGfxBank1_toDd001 - [501] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 + [500] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 to:render_init::@2 render_init::@2: scope:[render_init] from render_init::vicSelectGfxBank1_@1 - [502] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 - [503] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 - [504] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 - [505] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) - [506] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) - [507] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 - [508] call render_screen_original + [501] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 + [502] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 + [503] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 + [504] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) + [505] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) + [506] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 + [507] call render_screen_original to:render_init::@3 render_init::@3: scope:[render_init] from render_init::@2 - [509] phi() - [510] call render_screen_original + [508] phi() + [509] call render_screen_original to:render_init::@1 render_init::@1: scope:[render_init] from render_init::@1 render_init::@3 - [511] (byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@3/(const byte*) PLAYFIELD_SCREEN_2#0+(byte)(number) 2*(number) $28+(byte) $10 ) - [511] (byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@3/(const byte*) PLAYFIELD_SCREEN_1#0+(byte)(number) 2*(number) $28+(byte) $10 ) - [511] (byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@3/(byte) 0 ) - [512] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 - [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 - [514] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 - [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 - [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 - [517] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 - [518] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto render_init::@1 + [510] (byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@3/(const byte*) PLAYFIELD_SCREEN_2#0+(byte)(number) 2*(number) $28+(byte) $10 ) + [510] (byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@3/(const byte*) PLAYFIELD_SCREEN_1#0+(byte)(number) 2*(number) $28+(byte) $10 ) + [510] (byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@3/(byte) 0 ) + [511] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 + [512] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 + [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 + [514] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 + [515] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 + [516] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 + [517] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto render_init::@1 to:render_init::@return render_init::@return: scope:[render_init] from render_init::@1 - [519] return + [518] return to:@return render_screen_original: scope:[render_screen_original] from render_init::@2 render_init::@3 - [520] (byte*) render_screen_original::screen#9 ← phi( render_init::@2/(const byte*) PLAYFIELD_SCREEN_1#0 render_init::@3/(const byte*) PLAYFIELD_SCREEN_2#0 ) + [519] (byte*) render_screen_original::screen#9 ← phi( render_init::@2/(const byte*) PLAYFIELD_SCREEN_1#0 render_init::@3/(const byte*) PLAYFIELD_SCREEN_2#0 ) to:render_screen_original::@1 render_screen_original::@1: scope:[render_screen_original] from render_screen_original render_screen_original::@5 - [521] (byte) render_screen_original::y#6 ← phi( render_screen_original/(byte) 0 render_screen_original::@5/(byte) render_screen_original::y#1 ) - [521] (byte*) render_screen_original::ocols#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::ocols#1 ) - [521] (byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::oscr#1 ) - [521] (byte*) render_screen_original::cols#7 ← phi( render_screen_original/(const byte*) COLS#0 render_screen_original::@5/(byte*) render_screen_original::cols#3 ) - [521] (byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@5/(byte*) render_screen_original::screen#10 ) + [520] (byte) render_screen_original::y#6 ← phi( render_screen_original/(byte) 0 render_screen_original::@5/(byte) render_screen_original::y#1 ) + [520] (byte*) render_screen_original::ocols#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::ocols#1 ) + [520] (byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::oscr#1 ) + [520] (byte*) render_screen_original::cols#7 ← phi( render_screen_original/(const byte*) COLS#0 render_screen_original::@5/(byte*) render_screen_original::cols#3 ) + [520] (byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@5/(byte*) render_screen_original::screen#10 ) to:render_screen_original::@2 render_screen_original::@2: scope:[render_screen_original] from render_screen_original::@1 render_screen_original::@2 - [522] (byte) render_screen_original::x#4 ← phi( render_screen_original::@1/(byte) 0 render_screen_original::@2/(byte) render_screen_original::x#1 ) - [522] (byte*) render_screen_original::cols#4 ← phi( render_screen_original::@1/(byte*) render_screen_original::cols#7 render_screen_original::@2/(byte*) render_screen_original::cols#1 ) - [522] (byte*) render_screen_original::screen#5 ← phi( render_screen_original::@1/(byte*) render_screen_original::screen#8 render_screen_original::@2/(byte*) render_screen_original::screen#2 ) - [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 - [524] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 - [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 - [526] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 - [527] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 - [528] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 + [521] (byte) render_screen_original::x#4 ← phi( render_screen_original::@1/(byte) 0 render_screen_original::@2/(byte) render_screen_original::x#1 ) + [521] (byte*) render_screen_original::cols#4 ← phi( render_screen_original::@1/(byte*) render_screen_original::cols#7 render_screen_original::@2/(byte*) render_screen_original::cols#1 ) + [521] (byte*) render_screen_original::screen#5 ← phi( render_screen_original::@1/(byte*) render_screen_original::screen#8 render_screen_original::@2/(byte*) render_screen_original::screen#2 ) + [522] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 + [523] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 + [524] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 + [525] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 + [526] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 + [527] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 to:render_screen_original::@3 render_screen_original::@3: scope:[render_screen_original] from render_screen_original::@2 render_screen_original::@3 - [529] (byte) render_screen_original::x#5 ← phi( render_screen_original::@2/(byte) render_screen_original::x#1 render_screen_original::@3/(byte) render_screen_original::x#2 ) - [529] (byte*) render_screen_original::cols#5 ← phi( render_screen_original::@2/(byte*) render_screen_original::cols#1 render_screen_original::@3/(byte*) render_screen_original::cols#2 ) - [529] (byte*) render_screen_original::ocols#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::ocols#4 render_screen_original::@3/(byte*) render_screen_original::ocols#1 ) - [529] (byte*) render_screen_original::screen#6 ← phi( render_screen_original::@2/(byte*) render_screen_original::screen#2 render_screen_original::@3/(byte*) render_screen_original::screen#3 ) - [529] (byte*) render_screen_original::oscr#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::oscr#4 render_screen_original::@3/(byte*) render_screen_original::oscr#1 ) - [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) - [531] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 - [532] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 - [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) - [534] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 - [535] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 - [536] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 - [537] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 + [528] (byte) render_screen_original::x#5 ← phi( render_screen_original::@2/(byte) render_screen_original::x#1 render_screen_original::@3/(byte) render_screen_original::x#2 ) + [528] (byte*) render_screen_original::cols#5 ← phi( render_screen_original::@2/(byte*) render_screen_original::cols#1 render_screen_original::@3/(byte*) render_screen_original::cols#2 ) + [528] (byte*) render_screen_original::ocols#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::ocols#4 render_screen_original::@3/(byte*) render_screen_original::ocols#1 ) + [528] (byte*) render_screen_original::screen#6 ← phi( render_screen_original::@2/(byte*) render_screen_original::screen#2 render_screen_original::@3/(byte*) render_screen_original::screen#3 ) + [528] (byte*) render_screen_original::oscr#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::oscr#4 render_screen_original::@3/(byte*) render_screen_original::oscr#1 ) + [529] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) + [530] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 + [531] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 + [532] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) + [533] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 + [534] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 + [535] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 + [536] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 to:render_screen_original::@4 render_screen_original::@4: scope:[render_screen_original] from render_screen_original::@3 render_screen_original::@4 - [538] (byte) render_screen_original::x#6 ← phi( render_screen_original::@3/(byte) render_screen_original::x#2 render_screen_original::@4/(byte) render_screen_original::x#3 ) - [538] (byte*) render_screen_original::cols#6 ← phi( render_screen_original::@3/(byte*) render_screen_original::cols#2 render_screen_original::@4/(byte*) render_screen_original::cols#3 ) - [538] (byte*) render_screen_original::screen#7 ← phi( render_screen_original::@3/(byte*) render_screen_original::screen#3 render_screen_original::@4/(byte*) render_screen_original::screen#10 ) - [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 - [540] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 - [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 - [542] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 - [543] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 - [544] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 + [537] (byte) render_screen_original::x#6 ← phi( render_screen_original::@3/(byte) render_screen_original::x#2 render_screen_original::@4/(byte) render_screen_original::x#3 ) + [537] (byte*) render_screen_original::cols#6 ← phi( render_screen_original::@3/(byte*) render_screen_original::cols#2 render_screen_original::@4/(byte*) render_screen_original::cols#3 ) + [537] (byte*) render_screen_original::screen#7 ← phi( render_screen_original::@3/(byte*) render_screen_original::screen#3 render_screen_original::@4/(byte*) render_screen_original::screen#10 ) + [538] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 + [539] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 + [540] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 + [541] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 + [542] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 + [543] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 to:render_screen_original::@5 render_screen_original::@5: scope:[render_screen_original] from render_screen_original::@4 - [545] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 - [546] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 + [544] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 + [545] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 to:render_screen_original::@return render_screen_original::@return: scope:[render_screen_original] from render_screen_original::@5 - [547] return + [546] return to:@return sid_rnd_init: scope:[sid_rnd_init] from main - [548] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff - [549] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 + [547] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff + [548] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - [550] return + [549] return to:@return sprites_irq: scope:[sprites_irq] from asm { cld } - [552] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 - [553] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 - [554] *((const byte*) SPRITES_YPOS#0+(byte) 2) ← (byte) sprites_irq::ypos#0 - [555] *((const byte*) SPRITES_YPOS#0+(byte) 4) ← (byte) sprites_irq::ypos#0 - [556] *((const byte*) SPRITES_YPOS#0+(byte) 6) ← (byte) sprites_irq::ypos#0 - [557] (byte~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte) 1 - [558] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte~) sprites_irq::$0 + [551] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 + [552] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 + [553] *((const byte*) SPRITES_YPOS#0+(byte) 2) ← (byte) sprites_irq::ypos#0 + [554] *((const byte*) SPRITES_YPOS#0+(byte) 4) ← (byte) sprites_irq::ypos#0 + [555] *((const byte*) SPRITES_YPOS#0+(byte) 6) ← (byte) sprites_irq::ypos#0 + [556] (byte~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte) 1 + [557] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte~) sprites_irq::$0 to:sprites_irq::@8 sprites_irq::@8: scope:[sprites_irq] from sprites_irq sprites_irq::@8 - [559] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 + [558] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 to:sprites_irq::@9 sprites_irq::@9: scope:[sprites_irq] from sprites_irq::@8 - [560] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0 - [561] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 + [559] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0 + [560] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 to:sprites_irq::@10 sprites_irq::@10: scope:[sprites_irq] from sprites_irq::@9 - [562] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 - [563] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 - [564] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 1) ← (byte) sprites_irq::ptr#3 - [565] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 2) ← (byte) sprites_irq::ptr#3 - [566] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 - [567] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 3) ← (byte) sprites_irq::ptr#4 + [561] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 + [562] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 + [563] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 1) ← (byte) sprites_irq::ptr#3 + [564] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 2) ← (byte) sprites_irq::ptr#3 + [565] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 + [566] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 3) ← (byte) sprites_irq::ptr#4 to:sprites_irq::@2 sprites_irq::@2: scope:[sprites_irq] from sprites_irq::@1 sprites_irq::@10 - [568] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 - [569] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 + [567] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 + [568] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 to:sprites_irq::@6 sprites_irq::@6: scope:[sprites_irq] from sprites_irq::@2 - [570] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 + [569] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 to:sprites_irq::@7 sprites_irq::@7: scope:[sprites_irq] from sprites_irq::@6 - [571] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 - [572] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 - [573] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 + [570] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 + [571] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 + [572] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 to:sprites_irq::@5 sprites_irq::@5: scope:[sprites_irq] from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 - [574] (byte) irq_sprite_ptr#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ptr#1 sprites_irq::@4/(byte) irq_sprite_ptr#2 sprites_irq::@7/(byte) irq_sprite_ptr#3 ) - [574] (byte) irq_sprite_ypos#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ypos#1 sprites_irq::@4/(byte) irq_sprite_ypos#2 sprites_irq::@7/(byte) irq_sprite_ypos#3 ) - [574] (byte) irq_cnt#3 ← phi( sprites_irq::@11/(byte) irq_cnt#1 sprites_irq::@4/(byte) irq_cnt#2 sprites_irq::@7/(byte) irq_cnt#1 ) - [574] (byte) irq_raster_next#4 ← phi( sprites_irq::@11/(byte) irq_raster_next#1 sprites_irq::@4/(byte) irq_raster_next#2 sprites_irq::@7/(byte) irq_raster_next#3 ) - [575] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 - [576] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 + [573] (byte) irq_sprite_ptr#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ptr#1 sprites_irq::@4/(byte) irq_sprite_ptr#2 sprites_irq::@7/(byte) irq_sprite_ptr#3 ) + [573] (byte) irq_sprite_ypos#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ypos#1 sprites_irq::@4/(byte) irq_sprite_ypos#2 sprites_irq::@7/(byte) irq_sprite_ypos#3 ) + [573] (byte) irq_cnt#3 ← phi( sprites_irq::@11/(byte) irq_cnt#1 sprites_irq::@4/(byte) irq_cnt#2 sprites_irq::@7/(byte) irq_cnt#1 ) + [573] (byte) irq_raster_next#4 ← phi( sprites_irq::@11/(byte) irq_raster_next#1 sprites_irq::@4/(byte) irq_raster_next#2 sprites_irq::@7/(byte) irq_raster_next#3 ) + [574] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 + [575] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 to:sprites_irq::@return sprites_irq::@return: scope:[sprites_irq] from sprites_irq::@5 - [577] return + [576] return to:@return sprites_irq::@4: scope:[sprites_irq] from sprites_irq::@6 - [578] (byte) irq_cnt#2 ← (byte) 0 - [579] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 - [580] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 - [581] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 + [577] (byte) irq_cnt#2 ← (byte) 0 + [578] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 + [579] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 + [580] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 to:sprites_irq::@5 sprites_irq::@3: scope:[sprites_irq] from sprites_irq::@2 - [582] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 - [583] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 + [581] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 + [582] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 to:sprites_irq::toSpritePtr2 sprites_irq::toSpritePtr2: scope:[sprites_irq] from sprites_irq::@3 - [584] phi() + [583] phi() to:sprites_irq::@11 sprites_irq::@11: scope:[sprites_irq] from sprites_irq::toSpritePtr2 - [585] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 + [584] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 to:sprites_irq::@5 sprites_irq::@1: scope:[sprites_irq] from sprites_irq::@9 - [586] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 - [587] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 - [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 - [589] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 - [590] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 - [591] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 + [585] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 + [586] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 + [587] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 + [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 + [589] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 + [590] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 to:sprites_irq::@2 diff --git a/src/test/ref/complex/tetris/tetris.log b/src/test/ref/complex/tetris/tetris.log index 28094e6a5..e9891425b 100644 --- a/src/test/ref/complex/tetris/tetris.log +++ b/src/test/ref/complex/tetris/tetris.log @@ -9995,6 +9995,7 @@ Eliminating unused constant (const byte) KEY_MODIFIER_LSHIFT#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 8 in if((byte) keyboard_event_scan::row#1!=(number) 8) goto keyboard_event_scan::@8 Adding number conversion cast (unumber) 8 in if((byte) keyboard_event_scan::col#1!=(number) 8) goto keyboard_event_scan::@11 Adding number conversion cast (unumber) $19 in if((byte) render_screen_original::y#1!=(number) $19) goto render_screen_original::@1 @@ -10059,6 +10060,7 @@ Alias (byte~) render_init::$13 = (byte~) render_init::$12 Alias (byte) render_screen_showing#1 = (byte) render_screen_showing#2 Alias (byte) play_movement::render#1 = (byte~) play_movement::$0 Alias (byte*) current_piece_gfx#74 = (byte*) current_piece#5 +Alias (byte) play_spawn_current::piece_idx#1 = (byte) play_spawn_current::piece_idx#2 Alias (byte~) play_remove_lines::$2 = (byte~) play_remove_lines::$0 Alias (byte) main::render#1 = (byte) main::render#2 Successful SSA optimization Pass2AliasElimination @@ -10081,6 +10083,7 @@ Identical Phi Values (word) lines_bcd#40 (word) lines_bcd#15 Identical Phi Values (dword) score_bcd#40 (dword) score_bcd#14 Identical Phi Values (byte) level#102 (byte) level#17 Identical Phi Values (byte) level_bcd#50 (byte) level_bcd#17 +Identical Phi Values (byte) play_spawn_current::piece_idx#5 (const byte) play_spawn_current::piece_idx#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [65] (byte*) PLAYFIELD_SPRITE_PTRS_1#0 ← (const byte*) PLAYFIELD_SCREEN_1#0 + (const word) SPRITE_PTRS#0 Constant right-side identified [66] (byte*) PLAYFIELD_SPRITE_PTRS_2#0 ← (const byte*) PLAYFIELD_SCREEN_2#0 + (const word) SPRITE_PTRS#0 @@ -10105,9 +10108,9 @@ Constant right-side identified [358] (byte~) $15 ← (const byte) PLAYFIELD_LINE Constant right-side identified [361] (byte~) play_init::$1 ← (const byte) PLAYFIELD_LINES#0 - (byte) 1 Constant right-side identified [370] (byte~) play_init::$0 ← (const byte) PLAYFIELD_COLS#0 * (const byte) PLAYFIELD_LINES#0 Constant right-side identified [404] (byte) play_move_down::movedown#1 ← ++ (const byte) play_move_down::movedown#0 -Constant right-side identified [526] (byte~) play_remove_lines::$2 ← (const byte) PLAYFIELD_LINES#0 * (const byte) PLAYFIELD_COLS#0 -Constant right-side identified [530] (byte~) play_remove_lines::$4 ← (const byte) PLAYFIELD_LINES#0 - (byte) 1 -Constant right-side identified [532] (byte~) play_remove_lines::$5 ← (const byte) PLAYFIELD_COLS#0 - (byte) 1 +Constant right-side identified [528] (byte~) play_remove_lines::$2 ← (const byte) PLAYFIELD_LINES#0 * (const byte) PLAYFIELD_COLS#0 +Constant right-side identified [532] (byte~) play_remove_lines::$4 ← (const byte) PLAYFIELD_LINES#0 - (byte) 1 +Constant right-side identified [534] (byte~) play_remove_lines::$5 ← (const byte) PLAYFIELD_COLS#0 - (byte) 1 Successful SSA optimization Pass2ConstantRValueConsolidation Identified constant from value list (byte[]) { (const byte) BLUE#0, (const byte) GREEN#0, (const byte) PURPLE#0, (const byte) BLUE#0, (const byte) RED#0, (const byte) LIGHT_GREEN#0, (const byte) RED#0, (const byte) BLUE#0, (const byte) LIGHT_BLUE#0, (const byte) RED#0, (const byte) BLUE#0, (const byte) GREEN#0, (const byte) PURPLE#0, (const byte) BLUE#0, (const byte) RED#0, (const byte) LIGHT_GREEN#0, (const byte) RED#0, (const byte) BLUE#0, (const byte) LIGHT_BLUE#0, (const byte) RED#0, (const byte) BLUE#0, (const byte) GREEN#0, (const byte) PURPLE#0, (const byte) BLUE#0, (const byte) RED#0, (const byte) LIGHT_GREEN#0, (const byte) RED#0, (const byte) BLUE#0, (const byte) LIGHT_BLUE#0, (const byte) RED#0 } Identified constant from value list (byte[]) { (const byte) CYAN#0, (const byte) LIGHT_GREEN#0, (const byte) PINK#0, (const byte) LIGHT_GREEN#0, (const byte) LIGHT_GREEN#0, (const byte) LIGHT_BLUE#0, (const byte) DARK_GREY#0, (const byte) PURPLE#0, (const byte) RED#0, (const byte) ORANGE#0, (const byte) CYAN#0, (const byte) LIGHT_GREEN#0, (const byte) PINK#0, (const byte) LIGHT_GREEN#0, (const byte) LIGHT_GREEN#0, (const byte) LIGHT_BLUE#0, (const byte) DARK_GREY#0, (const byte) PURPLE#0, (const byte) RED#0, (const byte) ORANGE#0, (const byte) CYAN#0, (const byte) LIGHT_GREEN#0, (const byte) PINK#0, (const byte) LIGHT_GREEN#0, (const byte) LIGHT_GREEN#0, (const byte) LIGHT_BLUE#0, (const byte) DARK_GREY#0, (const byte) PURPLE#0, (const byte) RED#0, (const byte) ORANGE#0 } @@ -10164,6 +10167,9 @@ Successful SSA optimization Pass2ConstantIdentification Constant value identified { fill( $3, 0) } in [68] (byte[$3]) playfield#0 ← { fill( $3, 0) } Constant value identified { fill( $15, 0) } in [359] (byte[$15]) playfield_lines_idx#0 ← { fill( $15, 0) } Successful SSA optimization Pass2ConstantValues +Removing PHI-reference to removed block (play_spawn_current::@3_1) in block play_spawn_current::@5 +if() condition always true - replacing block destination [620] if((const byte) play_spawn_current::piece_idx#0==(byte) 7) goto play_spawn_current::sid_rnd1 +Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [107] render_init::i#1 ← ++ render_init::i#2 to ++ Resolved ranged comparison value [108] if(render_init::i#1!=rangelast(0,render_init::$10)) goto render_init::@1 to (const byte) render_init::$10+(number) 1 Resolved ranged next value [218] render_playfield::c#1 ← ++ render_playfield::c#2 to ++ @@ -10172,10 +10178,12 @@ Resolved ranged next value [220] render_playfield::l#1 ← ++ render_playfield:: Resolved ranged comparison value [221] if(render_playfield::l#1!=rangelast(2,render_playfield::$1)) goto render_playfield::@1 to (const byte) render_playfield::$1+(number) 1 Resolved ranged next value [368] play_init::j#1 ← ++ play_init::j#2 to ++ Resolved ranged comparison value [369] if(play_init::j#1!=rangelast(0,play_init::$1)) goto play_init::@1 to (const byte) play_init::$1+(number) 1 -Resolved ranged next value [540] play_remove_lines::x#1 ← ++ play_remove_lines::x#2 to ++ -Resolved ranged comparison value [541] if(play_remove_lines::x#1!=rangelast(0,play_remove_lines::$5)) goto play_remove_lines::@2 to (const byte) play_remove_lines::$5+(number) 1 -Resolved ranged next value [544] play_remove_lines::y#1 ← ++ play_remove_lines::y#8 to ++ -Resolved ranged comparison value [545] if(play_remove_lines::y#1!=rangelast(0,play_remove_lines::$4)) goto play_remove_lines::@1 to (const byte) play_remove_lines::$4+(number) 1 +Resolved ranged next value [542] play_remove_lines::x#1 ← ++ play_remove_lines::x#2 to ++ +Resolved ranged comparison value [543] if(play_remove_lines::x#1!=rangelast(0,play_remove_lines::$5)) goto play_remove_lines::@2 to (const byte) play_remove_lines::$5+(number) 1 +Resolved ranged next value [546] play_remove_lines::y#1 ← ++ play_remove_lines::y#8 to ++ +Resolved ranged comparison value [547] if(play_remove_lines::y#1!=rangelast(0,play_remove_lines::$4)) goto play_remove_lines::@1 to (const byte) play_remove_lines::$4+(number) 1 +Eliminating unused constant (const byte) play_spawn_current::piece_idx#0 +Successful SSA optimization PassNEliminateUnusedVars Adding number conversion cast (unumber) render_init::$10+1 in if((byte) render_init::i#1!=(const byte) render_init::$10+(number) 1) goto render_init::@1 Adding number conversion cast (unumber) 1 in if((byte) render_init::i#1!=(unumber)(const byte) render_init::$10+(number) 1) goto render_init::@1 Adding number conversion cast (unumber) render_playfield::$3+1 in if((byte) render_playfield::c#1!=(const byte) render_playfield::$3+(number) 1) goto render_playfield::@2 @@ -10212,6 +10220,11 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Alias candidate removed (volatile)(byte) irq_sprite_ptr#0 = (byte~) $7 Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte~) sprites_irq::$0 Alias candidate removed (volatile)(byte) sprites_irq::toSpritePtr2_return#0 = (byte~) sprites_irq::toSpritePtr2_$2#0 (byte) sprites_irq::toSpritePtr2_return#1 (byte~) sprites_irq::$5 (byte) irq_sprite_ptr#1 +Alias (byte) play_spawn_current::piece_idx#1 = (byte) play_spawn_current::piece_idx#4 +Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)(byte) irq_sprite_ptr#0 = (byte~) $7 +Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte~) sprites_irq::$0 +Alias candidate removed (volatile)(byte) sprites_irq::toSpritePtr2_return#0 = (byte~) sprites_irq::toSpritePtr2_$2#0 (byte) sprites_irq::toSpritePtr2_return#1 (byte~) sprites_irq::$5 (byte) irq_sprite_ptr#1 Constant right-side identified [68] (byte~) render_init::vicSelectGfxBank1_toDd001_$1#0 ← > (const word) render_init::vicSelectGfxBank1_toDd001_$0#0 Constant right-side identified [72] (byte~) render_init::$2 ← (const byte) render_init::$1 | (const byte) VIC_RSEL#0 Constant right-side identified [82] (byte*) render_init::li_1#0 ← (const byte*) render_init::$6 + (byte) $10 @@ -10320,8 +10333,8 @@ Rewriting multiplication to use shift [292] (byte~) play_init::$5 ← (byte) pla Rewriting multiplication to use shift [387] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 * (const byte) SIZEOF_POINTER Rewriting multiplication to use shift [407] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 * (const byte) SIZEOF_POINTER Rewriting multiplication to use shift [423] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [465] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 * (const byte) SIZEOF_DWORD -Rewriting multiplication to use shift [488] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 * (const byte) SIZEOF_DWORD +Rewriting multiplication to use shift [464] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 * (const byte) SIZEOF_DWORD +Rewriting multiplication to use shift [487] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 * (const byte) SIZEOF_DWORD Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte) keyboard_event_scan::keycode#0 Inlining constant with var siblings (const byte) keyboard_event_scan::row#0 @@ -10395,7 +10408,6 @@ Inlining constant with var siblings (const byte) play_collision::orientation#4 Inlining constant with var siblings (const byte) play_lock_current::i#0 Inlining constant with var siblings (const byte) play_lock_current::l#0 Inlining constant with var siblings (const byte) play_lock_current::c#0 -Inlining constant with var siblings (const byte) play_spawn_current::piece_idx#0 Inlining constant with var siblings (const byte) play_remove_lines::removed#0 Inlining constant with var siblings (const byte) play_remove_lines::y#0 Inlining constant with var siblings (const byte) play_remove_lines::full#0 @@ -10515,7 +10527,6 @@ Constant inlined $7 = (const byte) toSpritePtr1_return#0+(byte) 3 Constant inlined $8 = (word)(const byte[4*4*4]) PIECE_T#0 Constant inlined $9 = (word)(const byte[4*4*4]) PIECE_S#0 Constant inlined render_playfield::c#0 = (byte) 0 -Constant inlined play_spawn_current::piece_idx#0 = (byte) 7 Constant inlined play_remove_lines::removed#0 = (byte) 0 Constant inlined play_remove_lines::full#1 = (byte) 0 Constant inlined play_remove_lines::full#0 = (byte) 1 @@ -10664,6 +10675,7 @@ Adding NOP phi() at start of play_move_down::@5 Adding NOP phi() at start of play_move_down::@10 Adding NOP phi() at start of play_move_down::@19 Adding NOP phi() at start of play_spawn_current::@2 +Adding NOP phi() at start of play_spawn_current::@3_1 Adding NOP phi() at start of play_spawn_current::sid_rnd1_@return Adding NOP phi() at start of play_update_score::@3 Adding NOP phi() at start of play_increase_level::@1 @@ -10704,11 +10716,11 @@ Calls in [play_move_rotate] to play_collision:305 Calls in [play_move_leftright] to play_collision:362 play_collision:378 Calls in [play_move_down] to keyboard_event_pressed:388 play_collision:408 play_lock_current:413 play_remove_lines:415 play_update_score:419 play_spawn_current:422 Calls in [play_spawn_current] to play_collision:493 -Calls in [play_update_score] to play_increase_level:521 -Calls in [keyboard_event_scan] to keyboard_matrix_read:644 keyboard_event_pressed:655 keyboard_event_pressed:661 keyboard_event_pressed:667 keyboard_event_pressed:673 -Calls in [render_init] to render_screen_original:786 render_screen_original:788 +Calls in [play_update_score] to play_increase_level:520 +Calls in [keyboard_event_scan] to keyboard_matrix_read:643 keyboard_event_pressed:654 keyboard_event_pressed:660 keyboard_event_pressed:666 keyboard_event_pressed:672 +Calls in [render_init] to render_screen_original:785 render_screen_original:787 -Created 176 initial phi equivalence classes +Created 175 initial phi equivalence classes Coalesced [34] next_piece_idx#83 ← next_piece_idx#18 Coalesced [35] game_over#90 ← game_over#52 Not coalescing [39] current_ypos#98 ← current_ypos#6 @@ -10911,123 +10923,122 @@ Coalesced [480] play_move_down::movedown#13 ← play_move_down::movedown#10 Coalesced (already) [481] play_move_down::movedown#12 ← play_move_down::movedown#10 Coalesced [491] play_collision::yp#14 ← play_collision::ypos#4 Coalesced [492] play_collision::xpos#18 ← play_collision::xpos#4 -Coalesced [501] next_piece_idx#18 ← play_spawn_current::piece_idx#2 -Coalesced [506] play_spawn_current::piece_idx#4 ← play_spawn_current::piece_idx#1 -Coalesced (already) [507] game_over#92 ← game_over#65 -Coalesced [522] lines_bcd#94 ← lines_bcd#29 -Coalesced [523] score_bcd#90 ← score_bcd#29 -Coalesced [524] level#110 ← level#21 -Coalesced [525] current_movedown_slow#94 ← current_movedown_slow#66 -Coalesced [526] level_bcd#107 ← level_bcd#62 -Coalesced (already) [529] lines_bcd#93 ← lines_bcd#29 -Coalesced (already) [530] score_bcd#89 ← score_bcd#29 -Coalesced (already) [531] level#109 ← level#10 -Coalesced (already) [532] current_movedown_slow#93 ← current_movedown_slow#14 -Coalesced (already) [533] level_bcd#106 ← level_bcd#11 -Coalesced (already) [534] lines_bcd#92 ← lines_bcd#19 -Coalesced (already) [535] score_bcd#88 ← score_bcd#18 -Coalesced (already) [536] level#108 ← level#10 -Coalesced (already) [537] current_movedown_slow#92 ← current_movedown_slow#14 -Coalesced (already) [538] level_bcd#105 ← level_bcd#11 -Coalesced [542] current_movedown_slow#95 ← current_movedown_slow#10 -Coalesced [548] level_bcd#109 ← level_bcd#8 -Coalesced [558] play_increase_level::b#3 ← play_increase_level::b#1 -Coalesced [559] level_bcd#108 ← level_bcd#21 -Coalesced [563] play_remove_lines::r#10 ← play_remove_lines::r#3 -Coalesced [564] play_remove_lines::w#14 ← play_remove_lines::w#12 -Coalesced [578] play_remove_lines::w#17 ← play_remove_lines::w#2 -Coalesced [579] play_remove_lines::removed#14 ← play_remove_lines::removed#1 -Coalesced [583] play_remove_lines::w#19 ← play_remove_lines::w#11 -Coalesced [590] play_remove_lines::w#18 ← play_remove_lines::w#3 -Coalesced [591] play_remove_lines::r#9 ← play_remove_lines::r#1 -Coalesced [592] play_remove_lines::w#13 ← play_remove_lines::w#11 -Coalesced [593] play_remove_lines::y#9 ← play_remove_lines::y#1 -Coalesced [594] play_remove_lines::removed#12 ← play_remove_lines::removed#8 -Coalesced [595] play_remove_lines::w#16 ← play_remove_lines::w#1 -Coalesced (already) [596] play_remove_lines::removed#13 ← play_remove_lines::removed#11 -Coalesced (already) [597] play_remove_lines::r#11 ← play_remove_lines::r#1 -Coalesced (already) [598] play_remove_lines::w#15 ← play_remove_lines::w#1 -Coalesced [599] play_remove_lines::x#5 ← play_remove_lines::x#1 -Coalesced [600] play_remove_lines::full#5 ← play_remove_lines::full#2 -Coalesced (already) [601] play_remove_lines::full#6 ← play_remove_lines::full#4 -Coalesced [603] play_lock_current::yp#7 ← play_lock_current::yp#0 -Coalesced [608] play_lock_current::i#8 ← play_lock_current::i#3 -Coalesced [609] play_lock_current::xp#5 ← play_lock_current::xp#0 -Coalesced [621] play_lock_current::yp#8 ← play_lock_current::yp#1 -Not coalescing [622] play_lock_current::i#7 ← play_lock_current::i#1 -Coalesced [623] play_lock_current::l#7 ← play_lock_current::l#1 -Not coalescing [624] play_lock_current::i#9 ← play_lock_current::i#1 -Coalesced [625] play_lock_current::xp#6 ← play_lock_current::xp#1 -Coalesced [626] play_lock_current::c#5 ← play_lock_current::c#1 -Coalesced [636] keyboard_event_get::return#6 ← keyboard_event_get::return#1 -Coalesced [637] keyboard_events_size#91 ← keyboard_events_size#4 -Coalesced [640] keyboard_events_size#90 ← keyboard_events_size#13 -Coalesced [641] keyboard_events_size#80 ← keyboard_events_size#19 -Coalesced [649] keyboard_event_scan::keycode#17 ← keyboard_event_scan::keycode#1 -Coalesced (already) [650] keyboard_events_size#83 ← keyboard_events_size#30 -Coalesced [679] keyboard_event_scan::row#14 ← keyboard_event_scan::row#1 -Coalesced [680] keyboard_event_scan::keycode#15 ← keyboard_event_scan::keycode#13 -Coalesced (already) [681] keyboard_events_size#81 ← keyboard_events_size#13 -Coalesced [682] keyboard_event_scan::keycode#19 ← keyboard_event_scan::keycode#11 -Coalesced [683] keyboard_events_size#85 ← keyboard_events_size#30 -Coalesced [693] keyboard_events_size#89 ← keyboard_events_size#2 -Coalesced [699] keyboard_event_scan::keycode#16 ← keyboard_event_scan::keycode#14 -Coalesced [700] keyboard_events_size#82 ← keyboard_events_size#29 -Coalesced [701] keyboard_event_scan::col#8 ← keyboard_event_scan::col#1 -Coalesced (already) [702] keyboard_event_scan::keycode#18 ← keyboard_event_scan::keycode#14 -Coalesced (already) [703] keyboard_events_size#84 ← keyboard_events_size#29 -Coalesced [707] keyboard_events_size#87 ← keyboard_events_size#1 -Coalesced (already) [708] keyboard_events_size#88 ← keyboard_events_size#10 -Coalesced (already) [709] keyboard_events_size#86 ← keyboard_events_size#10 -Not coalescing [722] render_screen_showing#1 ← render_screen_show#16 -Coalesced [745] play_init::b#3 ← play_init::b#1 -Coalesced [746] play_init::j#3 ← play_init::j#1 -Coalesced [747] play_init::pli#3 ← play_init::pli#1 -Coalesced [748] play_init::idx#3 ← play_init::idx#1 -Coalesced [773] sprites_init::s#3 ← sprites_init::s#1 -Coalesced [774] sprites_init::xpos#3 ← sprites_init::xpos#1 -Coalesced [800] render_init::i#3 ← render_init::i#1 -Coalesced [801] render_init::li_1#3 ← render_init::li_1#1 -Coalesced [802] render_init::li_2#3 ← render_init::li_2#1 -Coalesced [804] render_screen_original::screen#11 ← render_screen_original::screen#9 -Coalesced [806] render_screen_original::screen#13 ← render_screen_original::screen#8 -Coalesced [807] render_screen_original::cols#10 ← render_screen_original::cols#7 -Coalesced [815] render_screen_original::oscr#8 ← render_screen_original::oscr#4 -Coalesced [816] render_screen_original::screen#15 ← render_screen_original::screen#2 -Coalesced [817] render_screen_original::ocols#8 ← render_screen_original::ocols#4 -Coalesced [818] render_screen_original::cols#12 ← render_screen_original::cols#1 -Coalesced [819] render_screen_original::x#8 ← render_screen_original::x#1 -Coalesced [829] render_screen_original::screen#17 ← render_screen_original::screen#3 -Coalesced [830] render_screen_original::cols#14 ← render_screen_original::cols#2 -Coalesced [831] render_screen_original::x#10 ← render_screen_original::x#2 -Coalesced [842] render_screen_original::screen#12 ← render_screen_original::screen#10 -Coalesced [843] render_screen_original::cols#9 ← render_screen_original::cols#3 -Coalesced [844] render_screen_original::oscr#7 ← render_screen_original::oscr#1 -Coalesced [845] render_screen_original::ocols#7 ← render_screen_original::ocols#1 -Coalesced [846] render_screen_original::y#7 ← render_screen_original::y#1 -Coalesced [847] render_screen_original::screen#18 ← render_screen_original::screen#10 -Coalesced [848] render_screen_original::cols#15 ← render_screen_original::cols#3 -Coalesced [849] render_screen_original::x#11 ← render_screen_original::x#3 -Coalesced (already) [850] render_screen_original::oscr#9 ← render_screen_original::oscr#1 -Coalesced [851] render_screen_original::screen#16 ← render_screen_original::screen#3 -Coalesced (already) [852] render_screen_original::ocols#9 ← render_screen_original::ocols#1 -Coalesced [853] render_screen_original::cols#13 ← render_screen_original::cols#2 -Coalesced [854] render_screen_original::x#9 ← render_screen_original::x#2 -Coalesced (already) [855] render_screen_original::screen#14 ← render_screen_original::screen#2 -Coalesced (already) [856] render_screen_original::cols#11 ← render_screen_original::cols#1 -Coalesced [857] render_screen_original::x#7 ← render_screen_original::x#1 -Coalesced [884] irq_raster_next#27 ← irq_raster_next#3 -Coalesced [885] irq_cnt#23 ← irq_cnt#1 -Coalesced [886] irq_sprite_ypos#27 ← irq_sprite_ypos#3 -Coalesced [887] irq_sprite_ptr#21 ← irq_sprite_ptr#3 -Coalesced [896] irq_raster_next#26 ← irq_raster_next#2 -Coalesced [897] irq_cnt#22 ← irq_cnt#2 -Coalesced [898] irq_sprite_ypos#26 ← irq_sprite_ypos#2 -Coalesced [899] irq_sprite_ptr#20 ← irq_sprite_ptr#2 -Coalesced [905] irq_raster_next#25 ← irq_raster_next#1 -Coalesced (already) [906] irq_cnt#21 ← irq_cnt#1 -Coalesced [907] irq_sprite_ypos#25 ← irq_sprite_ypos#1 -Coalesced [908] irq_sprite_ptr#19 ← irq_sprite_ptr#1 +Coalesced [504] next_piece_idx#18 ← play_spawn_current::piece_idx#1 +Coalesced (already) [506] game_over#92 ← game_over#65 +Coalesced [521] lines_bcd#94 ← lines_bcd#29 +Coalesced [522] score_bcd#90 ← score_bcd#29 +Coalesced [523] level#110 ← level#21 +Coalesced [524] current_movedown_slow#94 ← current_movedown_slow#66 +Coalesced [525] level_bcd#107 ← level_bcd#62 +Coalesced (already) [528] lines_bcd#93 ← lines_bcd#29 +Coalesced (already) [529] score_bcd#89 ← score_bcd#29 +Coalesced (already) [530] level#109 ← level#10 +Coalesced (already) [531] current_movedown_slow#93 ← current_movedown_slow#14 +Coalesced (already) [532] level_bcd#106 ← level_bcd#11 +Coalesced (already) [533] lines_bcd#92 ← lines_bcd#19 +Coalesced (already) [534] score_bcd#88 ← score_bcd#18 +Coalesced (already) [535] level#108 ← level#10 +Coalesced (already) [536] current_movedown_slow#92 ← current_movedown_slow#14 +Coalesced (already) [537] level_bcd#105 ← level_bcd#11 +Coalesced [541] current_movedown_slow#95 ← current_movedown_slow#10 +Coalesced [547] level_bcd#109 ← level_bcd#8 +Coalesced [557] play_increase_level::b#3 ← play_increase_level::b#1 +Coalesced [558] level_bcd#108 ← level_bcd#21 +Coalesced [562] play_remove_lines::r#10 ← play_remove_lines::r#3 +Coalesced [563] play_remove_lines::w#14 ← play_remove_lines::w#12 +Coalesced [577] play_remove_lines::w#17 ← play_remove_lines::w#2 +Coalesced [578] play_remove_lines::removed#14 ← play_remove_lines::removed#1 +Coalesced [582] play_remove_lines::w#19 ← play_remove_lines::w#11 +Coalesced [589] play_remove_lines::w#18 ← play_remove_lines::w#3 +Coalesced [590] play_remove_lines::r#9 ← play_remove_lines::r#1 +Coalesced [591] play_remove_lines::w#13 ← play_remove_lines::w#11 +Coalesced [592] play_remove_lines::y#9 ← play_remove_lines::y#1 +Coalesced [593] play_remove_lines::removed#12 ← play_remove_lines::removed#8 +Coalesced [594] play_remove_lines::w#16 ← play_remove_lines::w#1 +Coalesced (already) [595] play_remove_lines::removed#13 ← play_remove_lines::removed#11 +Coalesced (already) [596] play_remove_lines::r#11 ← play_remove_lines::r#1 +Coalesced (already) [597] play_remove_lines::w#15 ← play_remove_lines::w#1 +Coalesced [598] play_remove_lines::x#5 ← play_remove_lines::x#1 +Coalesced [599] play_remove_lines::full#5 ← play_remove_lines::full#2 +Coalesced (already) [600] play_remove_lines::full#6 ← play_remove_lines::full#4 +Coalesced [602] play_lock_current::yp#7 ← play_lock_current::yp#0 +Coalesced [607] play_lock_current::i#8 ← play_lock_current::i#3 +Coalesced [608] play_lock_current::xp#5 ← play_lock_current::xp#0 +Coalesced [620] play_lock_current::yp#8 ← play_lock_current::yp#1 +Not coalescing [621] play_lock_current::i#7 ← play_lock_current::i#1 +Coalesced [622] play_lock_current::l#7 ← play_lock_current::l#1 +Not coalescing [623] play_lock_current::i#9 ← play_lock_current::i#1 +Coalesced [624] play_lock_current::xp#6 ← play_lock_current::xp#1 +Coalesced [625] play_lock_current::c#5 ← play_lock_current::c#1 +Coalesced [635] keyboard_event_get::return#6 ← keyboard_event_get::return#1 +Coalesced [636] keyboard_events_size#91 ← keyboard_events_size#4 +Coalesced [639] keyboard_events_size#90 ← keyboard_events_size#13 +Coalesced [640] keyboard_events_size#80 ← keyboard_events_size#19 +Coalesced [648] keyboard_event_scan::keycode#17 ← keyboard_event_scan::keycode#1 +Coalesced (already) [649] keyboard_events_size#83 ← keyboard_events_size#30 +Coalesced [678] keyboard_event_scan::row#14 ← keyboard_event_scan::row#1 +Coalesced [679] keyboard_event_scan::keycode#15 ← keyboard_event_scan::keycode#13 +Coalesced (already) [680] keyboard_events_size#81 ← keyboard_events_size#13 +Coalesced [681] keyboard_event_scan::keycode#19 ← keyboard_event_scan::keycode#11 +Coalesced [682] keyboard_events_size#85 ← keyboard_events_size#30 +Coalesced [692] keyboard_events_size#89 ← keyboard_events_size#2 +Coalesced [698] keyboard_event_scan::keycode#16 ← keyboard_event_scan::keycode#14 +Coalesced [699] keyboard_events_size#82 ← keyboard_events_size#29 +Coalesced [700] keyboard_event_scan::col#8 ← keyboard_event_scan::col#1 +Coalesced (already) [701] keyboard_event_scan::keycode#18 ← keyboard_event_scan::keycode#14 +Coalesced (already) [702] keyboard_events_size#84 ← keyboard_events_size#29 +Coalesced [706] keyboard_events_size#87 ← keyboard_events_size#1 +Coalesced (already) [707] keyboard_events_size#88 ← keyboard_events_size#10 +Coalesced (already) [708] keyboard_events_size#86 ← keyboard_events_size#10 +Not coalescing [721] render_screen_showing#1 ← render_screen_show#16 +Coalesced [744] play_init::b#3 ← play_init::b#1 +Coalesced [745] play_init::j#3 ← play_init::j#1 +Coalesced [746] play_init::pli#3 ← play_init::pli#1 +Coalesced [747] play_init::idx#3 ← play_init::idx#1 +Coalesced [772] sprites_init::s#3 ← sprites_init::s#1 +Coalesced [773] sprites_init::xpos#3 ← sprites_init::xpos#1 +Coalesced [799] render_init::i#3 ← render_init::i#1 +Coalesced [800] render_init::li_1#3 ← render_init::li_1#1 +Coalesced [801] render_init::li_2#3 ← render_init::li_2#1 +Coalesced [803] render_screen_original::screen#11 ← render_screen_original::screen#9 +Coalesced [805] render_screen_original::screen#13 ← render_screen_original::screen#8 +Coalesced [806] render_screen_original::cols#10 ← render_screen_original::cols#7 +Coalesced [814] render_screen_original::oscr#8 ← render_screen_original::oscr#4 +Coalesced [815] render_screen_original::screen#15 ← render_screen_original::screen#2 +Coalesced [816] render_screen_original::ocols#8 ← render_screen_original::ocols#4 +Coalesced [817] render_screen_original::cols#12 ← render_screen_original::cols#1 +Coalesced [818] render_screen_original::x#8 ← render_screen_original::x#1 +Coalesced [828] render_screen_original::screen#17 ← render_screen_original::screen#3 +Coalesced [829] render_screen_original::cols#14 ← render_screen_original::cols#2 +Coalesced [830] render_screen_original::x#10 ← render_screen_original::x#2 +Coalesced [841] render_screen_original::screen#12 ← render_screen_original::screen#10 +Coalesced [842] render_screen_original::cols#9 ← render_screen_original::cols#3 +Coalesced [843] render_screen_original::oscr#7 ← render_screen_original::oscr#1 +Coalesced [844] render_screen_original::ocols#7 ← render_screen_original::ocols#1 +Coalesced [845] render_screen_original::y#7 ← render_screen_original::y#1 +Coalesced [846] render_screen_original::screen#18 ← render_screen_original::screen#10 +Coalesced [847] render_screen_original::cols#15 ← render_screen_original::cols#3 +Coalesced [848] render_screen_original::x#11 ← render_screen_original::x#3 +Coalesced (already) [849] render_screen_original::oscr#9 ← render_screen_original::oscr#1 +Coalesced [850] render_screen_original::screen#16 ← render_screen_original::screen#3 +Coalesced (already) [851] render_screen_original::ocols#9 ← render_screen_original::ocols#1 +Coalesced [852] render_screen_original::cols#13 ← render_screen_original::cols#2 +Coalesced [853] render_screen_original::x#9 ← render_screen_original::x#2 +Coalesced (already) [854] render_screen_original::screen#14 ← render_screen_original::screen#2 +Coalesced (already) [855] render_screen_original::cols#11 ← render_screen_original::cols#1 +Coalesced [856] render_screen_original::x#7 ← render_screen_original::x#1 +Coalesced [883] irq_raster_next#27 ← irq_raster_next#3 +Coalesced [884] irq_cnt#23 ← irq_cnt#1 +Coalesced [885] irq_sprite_ypos#27 ← irq_sprite_ypos#3 +Coalesced [886] irq_sprite_ptr#21 ← irq_sprite_ptr#3 +Coalesced [895] irq_raster_next#26 ← irq_raster_next#2 +Coalesced [896] irq_cnt#22 ← irq_cnt#2 +Coalesced [897] irq_sprite_ypos#26 ← irq_sprite_ypos#2 +Coalesced [898] irq_sprite_ptr#20 ← irq_sprite_ptr#2 +Coalesced [904] irq_raster_next#25 ← irq_raster_next#1 +Coalesced (already) [905] irq_cnt#21 ← irq_cnt#1 +Coalesced [906] irq_sprite_ypos#25 ← irq_sprite_ypos#1 +Coalesced [907] irq_sprite_ptr#19 ← irq_sprite_ptr#1 Coalesced down to 99 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @8 @@ -11064,8 +11075,9 @@ Culled Empty Block (label) play_move_down::@25 Culled Empty Block (label) play_move_down::@24 Culled Empty Block (label) play_move_down::@23 Culled Empty Block (label) play_spawn_current::@2 -Culled Empty Block (label) play_spawn_current::@5 +Culled Empty Block (label) play_spawn_current::@3_1 Culled Empty Block (label) play_spawn_current::sid_rnd1_@return +Culled Empty Block (label) play_spawn_current::@5 Culled Empty Block (label) play_update_score::@5 Culled Empty Block (label) play_update_score::@7 Culled Empty Block (label) play_update_score::@6 @@ -11369,7 +11381,7 @@ main::@15: scope:[main] from main::@14 [35] call render_moving to:main::@16 main::@16: scope:[main] from main::@15 - [36] (byte~) next_piece_idx#77 ← (byte) play_spawn_current::piece_idx#2 + [36] (byte~) next_piece_idx#77 ← (byte) play_spawn_current::piece_idx#1 [37] call render_next to:main::@17 main::@17: scope:[main] from main::@16 @@ -11384,7 +11396,7 @@ main::@1: scope:[main] from main::@17 main::@25 main::@6 [40] (byte) current_movedown_counter#16 ← phi( main::@6/(byte) current_movedown_counter#14 main::@17/(byte) 0 main::@25/(byte) current_movedown_counter#14 ) [40] (byte) keyboard_events_size#19 ← phi( main::@6/(byte) keyboard_events_size#16 main::@17/(byte) 0 main::@25/(byte) keyboard_events_size#16 ) [40] (byte) render_screen_showing#13 ← phi( main::@6/(byte) render_screen_showing#1 main::@17/(byte) render_screen_showing#0 main::@25/(byte) render_screen_showing#1 ) - [40] (byte) next_piece_idx#10 ← phi( main::@6/(byte) next_piece_idx#16 main::@17/(byte) play_spawn_current::piece_idx#2 main::@25/(byte) next_piece_idx#16 ) + [40] (byte) next_piece_idx#10 ← phi( main::@6/(byte) next_piece_idx#16 main::@17/(byte) play_spawn_current::piece_idx#1 main::@25/(byte) next_piece_idx#16 ) [40] (byte) game_over#10 ← phi( main::@6/(byte) game_over#15 main::@17/(byte) game_over#52 main::@25/(byte) game_over#15 ) [40] (byte) current_ypos#11 ← phi( main::@6/(byte) current_ypos#19 main::@17/(byte) current_ypos#6 main::@25/(byte) current_ypos#19 ) [40] (byte) current_xpos#14 ← phi( main::@6/(byte) current_xpos#19 main::@17/(byte) current_xpos#100 main::@25/(byte) current_xpos#19 ) @@ -11879,7 +11891,7 @@ play_move_down::@17: scope:[play_move_down] from play_move_down::@16 [282] (byte*~) current_piece_gfx#117 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) to:play_move_down::@11 play_move_down::@11: scope:[play_move_down] from play_move_down::@10 play_move_down::@17 - [283] (byte) next_piece_idx#30 ← phi( play_move_down::@10/(byte) next_piece_idx#10 play_move_down::@17/(byte) play_spawn_current::piece_idx#2 ) + [283] (byte) next_piece_idx#30 ← phi( play_move_down::@10/(byte) next_piece_idx#10 play_move_down::@17/(byte) play_spawn_current::piece_idx#1 ) [283] (byte) game_over#27 ← phi( play_move_down::@10/(byte) game_over#10 play_move_down::@17/(byte) game_over#52 ) [283] (byte) current_xpos#43 ← phi( play_move_down::@10/(byte) current_xpos#14 play_move_down::@17/(byte) current_xpos#100 ) [283] (byte*) current_piece_gfx#35 ← phi( play_move_down::@10/(byte*) current_piece_gfx#13 play_move_down::@17/(byte*~) current_piece_gfx#117 ) @@ -11916,7 +11928,7 @@ play_move_down::@10: scope:[play_move_down] from play_move_down::@13 to:play_move_down::@11 play_spawn_current: scope:[play_spawn_current] from main::@12 main::@13 play_move_down::@16 [287] (byte) game_over#65 ← phi( main::@12/(byte) 0 main::@13/(byte) game_over#52 play_move_down::@16/(byte) game_over#10 ) - [287] (byte) next_piece_idx#17 ← phi( main::@12/(byte) 0 main::@13/(byte) play_spawn_current::piece_idx#2 play_move_down::@16/(byte) next_piece_idx#10 ) + [287] (byte) next_piece_idx#17 ← phi( main::@12/(byte) 0 main::@13/(byte) play_spawn_current::piece_idx#1 play_move_down::@16/(byte) next_piece_idx#10 ) [288] (byte) play_spawn_current::current_piece_idx#0 ← (byte) next_piece_idx#17 [289] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [290] (byte) current_piece_char#5 ← *((const byte[]) PIECES_CHARS#0 + (byte) play_spawn_current::current_piece_idx#0) @@ -11937,565 +11949,564 @@ play_spawn_current::@5: scope:[play_spawn_current] from play_spawn_current::@4 to:play_spawn_current::@1 play_spawn_current::@1: scope:[play_spawn_current] from play_spawn_current::@4 play_spawn_current::@5 [301] (byte) game_over#52 ← phi( play_spawn_current::@5/(byte) game_over#65 play_spawn_current::@4/(byte) 1 ) - to:play_spawn_current::@2 -play_spawn_current::@2: scope:[play_spawn_current] from play_spawn_current::@1 play_spawn_current::@3 - [302] (byte) play_spawn_current::piece_idx#2 ← phi( play_spawn_current::@1/(byte) 7 play_spawn_current::@3/(byte) play_spawn_current::piece_idx#1 ) - [303] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 - to:play_spawn_current::@return -play_spawn_current::@return: scope:[play_spawn_current] from play_spawn_current::@2 - [304] return - to:@return -play_spawn_current::sid_rnd1: scope:[play_spawn_current] from play_spawn_current::@2 - [305] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) + to:play_spawn_current::sid_rnd1 +play_spawn_current::sid_rnd1: scope:[play_spawn_current] from play_spawn_current::@1 play_spawn_current::@2 + [302] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) to:play_spawn_current::@3 play_spawn_current::@3: scope:[play_spawn_current] from play_spawn_current::sid_rnd1 - [306] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 + [303] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 to:play_spawn_current::@2 +play_spawn_current::@2: scope:[play_spawn_current] from play_spawn_current::@3 + [304] if((byte) play_spawn_current::piece_idx#1==(byte) 7) goto play_spawn_current::sid_rnd1 + to:play_spawn_current::@return +play_spawn_current::@return: scope:[play_spawn_current] from play_spawn_current::@2 + [305] return + to:@return play_update_score: scope:[play_update_score] from play_move_down::@15 - [307] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return + [306] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return to:play_update_score::@1 play_update_score::@1: scope:[play_update_score] from play_update_score - [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 - [309] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 - [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 - [311] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) + [307] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 + [308] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 + [309] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 + [310] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) asm { sed } - [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 - [314] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 + [312] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 + [313] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 asm { cld } - [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 - [317] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 - [318] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return + [315] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 + [316] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 + [317] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return to:play_update_score::@2 play_update_score::@2: scope:[play_update_score] from play_update_score::@1 - [319] phi() - [320] call play_increase_level + [318] phi() + [319] call play_increase_level to:play_update_score::@return play_update_score::@return: scope:[play_update_score] from play_update_score play_update_score::@1 play_update_score::@2 - [321] (byte) level_bcd#19 ← phi( play_update_score/(byte) level_bcd#11 play_update_score::@1/(byte) level_bcd#11 play_update_score::@2/(byte) level_bcd#62 ) - [321] (byte) current_movedown_slow#23 ← phi( play_update_score/(byte) current_movedown_slow#14 play_update_score::@1/(byte) current_movedown_slow#14 play_update_score::@2/(byte) current_movedown_slow#66 ) - [321] (byte) level#19 ← phi( play_update_score/(byte) level#10 play_update_score::@1/(byte) level#10 play_update_score::@2/(byte) level#21 ) - [321] (dword) score_bcd#16 ← phi( play_update_score/(dword) score_bcd#18 play_update_score::@1/(dword) score_bcd#29 play_update_score::@2/(dword) score_bcd#29 ) - [321] (word) lines_bcd#17 ← phi( play_update_score/(word) lines_bcd#19 play_update_score::@1/(word) lines_bcd#29 play_update_score::@2/(word) lines_bcd#29 ) - [322] return + [320] (byte) level_bcd#19 ← phi( play_update_score/(byte) level_bcd#11 play_update_score::@1/(byte) level_bcd#11 play_update_score::@2/(byte) level_bcd#62 ) + [320] (byte) current_movedown_slow#23 ← phi( play_update_score/(byte) current_movedown_slow#14 play_update_score::@1/(byte) current_movedown_slow#14 play_update_score::@2/(byte) current_movedown_slow#66 ) + [320] (byte) level#19 ← phi( play_update_score/(byte) level#10 play_update_score::@1/(byte) level#10 play_update_score::@2/(byte) level#21 ) + [320] (dword) score_bcd#16 ← phi( play_update_score/(dword) score_bcd#18 play_update_score::@1/(dword) score_bcd#29 play_update_score::@2/(dword) score_bcd#29 ) + [320] (word) lines_bcd#17 ← phi( play_update_score/(word) lines_bcd#19 play_update_score::@1/(word) lines_bcd#29 play_update_score::@2/(word) lines_bcd#29 ) + [321] return to:@return play_increase_level: scope:[play_increase_level] from play_update_score::@2 - [323] (byte) level#21 ← ++ (byte) level#10 - [324] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 + [322] (byte) level#21 ← ++ (byte) level#10 + [323] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 to:play_increase_level::@3 play_increase_level::@3: scope:[play_increase_level] from play_increase_level - [325] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) + [324] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) to:play_increase_level::@1 play_increase_level::@1: scope:[play_increase_level] from play_increase_level play_increase_level::@3 - [326] (byte) current_movedown_slow#66 ← phi( play_increase_level/(byte) 1 play_increase_level::@3/(byte) current_movedown_slow#10 ) - [327] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 - [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f - [329] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 + [325] (byte) current_movedown_slow#66 ← phi( play_increase_level/(byte) 1 play_increase_level::@3/(byte) current_movedown_slow#10 ) + [326] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 + [327] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f + [328] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 to:play_increase_level::@4 play_increase_level::@4: scope:[play_increase_level] from play_increase_level::@1 - [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 + [329] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 to:play_increase_level::@2 play_increase_level::@2: scope:[play_increase_level] from play_increase_level::@1 play_increase_level::@4 - [331] (byte) level_bcd#62 ← phi( play_increase_level::@1/(byte) level_bcd#21 play_increase_level::@4/(byte) level_bcd#8 ) + [330] (byte) level_bcd#62 ← phi( play_increase_level::@1/(byte) level_bcd#21 play_increase_level::@4/(byte) level_bcd#8 ) asm { sed } to:play_increase_level::@5 play_increase_level::@5: scope:[play_increase_level] from play_increase_level::@2 play_increase_level::@5 - [333] (byte) play_increase_level::b#2 ← phi( play_increase_level::@2/(byte) 0 play_increase_level::@5/(byte) play_increase_level::b#1 ) - [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 - [335] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) - [336] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 - [337] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 + [332] (byte) play_increase_level::b#2 ← phi( play_increase_level::@2/(byte) 0 play_increase_level::@5/(byte) play_increase_level::b#1 ) + [333] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 + [334] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) + [335] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 + [336] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 to:play_increase_level::@6 play_increase_level::@6: scope:[play_increase_level] from play_increase_level::@5 asm { cld } to:play_increase_level::@return play_increase_level::@return: scope:[play_increase_level] from play_increase_level::@6 - [339] return + [338] return to:@return play_remove_lines: scope:[play_remove_lines] from play_move_down::@14 - [340] phi() + [339] phi() to:play_remove_lines::@1 play_remove_lines::@1: scope:[play_remove_lines] from play_remove_lines play_remove_lines::@6 - [341] (byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::removed#8 ) - [341] (byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::y#1 ) - [341] (byte) play_remove_lines::w#12 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::w#11 ) - [341] (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::r#1 ) + [340] (byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::removed#8 ) + [340] (byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::y#1 ) + [340] (byte) play_remove_lines::w#12 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::w#11 ) + [340] (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::r#1 ) to:play_remove_lines::@2 play_remove_lines::@2: scope:[play_remove_lines] from play_remove_lines::@1 play_remove_lines::@3 - [342] (byte) play_remove_lines::full#4 ← phi( play_remove_lines::@1/(byte) 1 play_remove_lines::@3/(byte) play_remove_lines::full#2 ) - [342] (byte) play_remove_lines::x#2 ← phi( play_remove_lines::@1/(byte) 0 play_remove_lines::@3/(byte) play_remove_lines::x#1 ) - [342] (byte) play_remove_lines::w#4 ← phi( play_remove_lines::@1/(byte) play_remove_lines::w#12 play_remove_lines::@3/(byte) play_remove_lines::w#1 ) - [342] (byte) play_remove_lines::r#2 ← phi( play_remove_lines::@1/(byte) play_remove_lines::r#3 play_remove_lines::@3/(byte) play_remove_lines::r#1 ) - [343] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) - [344] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 - [345] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 + [341] (byte) play_remove_lines::full#4 ← phi( play_remove_lines::@1/(byte) 1 play_remove_lines::@3/(byte) play_remove_lines::full#2 ) + [341] (byte) play_remove_lines::x#2 ← phi( play_remove_lines::@1/(byte) 0 play_remove_lines::@3/(byte) play_remove_lines::x#1 ) + [341] (byte) play_remove_lines::w#4 ← phi( play_remove_lines::@1/(byte) play_remove_lines::w#12 play_remove_lines::@3/(byte) play_remove_lines::w#1 ) + [341] (byte) play_remove_lines::r#2 ← phi( play_remove_lines::@1/(byte) play_remove_lines::r#3 play_remove_lines::@3/(byte) play_remove_lines::r#1 ) + [342] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) + [343] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 + [344] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 to:play_remove_lines::@3 play_remove_lines::@9: scope:[play_remove_lines] from play_remove_lines::@2 - [346] phi() + [345] phi() to:play_remove_lines::@3 play_remove_lines::@3: scope:[play_remove_lines] from play_remove_lines::@2 play_remove_lines::@9 - [347] (byte) play_remove_lines::full#2 ← phi( play_remove_lines::@9/(byte) play_remove_lines::full#4 play_remove_lines::@2/(byte) 0 ) - [348] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 - [349] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 - [350] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 - [351] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte) 1+(byte) 1) goto play_remove_lines::@2 + [346] (byte) play_remove_lines::full#2 ← phi( play_remove_lines::@9/(byte) play_remove_lines::full#4 play_remove_lines::@2/(byte) 0 ) + [347] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 + [348] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 + [349] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 + [350] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte) 1+(byte) 1) goto play_remove_lines::@2 to:play_remove_lines::@4 play_remove_lines::@4: scope:[play_remove_lines] from play_remove_lines::@3 - [352] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 + [351] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 to:play_remove_lines::@5 play_remove_lines::@5: scope:[play_remove_lines] from play_remove_lines::@4 - [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 - [354] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 + [352] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 + [353] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 to:play_remove_lines::@6 play_remove_lines::@6: scope:[play_remove_lines] from play_remove_lines::@4 play_remove_lines::@5 - [355] (byte) play_remove_lines::removed#8 ← phi( play_remove_lines::@4/(byte) play_remove_lines::removed#11 play_remove_lines::@5/(byte) play_remove_lines::removed#1 ) - [355] (byte) play_remove_lines::w#11 ← phi( play_remove_lines::@4/(byte) play_remove_lines::w#1 play_remove_lines::@5/(byte) play_remove_lines::w#2 ) - [356] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 - [357] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_remove_lines::@1 + [354] (byte) play_remove_lines::removed#8 ← phi( play_remove_lines::@4/(byte) play_remove_lines::removed#11 play_remove_lines::@5/(byte) play_remove_lines::removed#1 ) + [354] (byte) play_remove_lines::w#11 ← phi( play_remove_lines::@4/(byte) play_remove_lines::w#1 play_remove_lines::@5/(byte) play_remove_lines::w#2 ) + [355] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 + [356] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_remove_lines::@1 to:play_remove_lines::@7 play_remove_lines::@7: scope:[play_remove_lines] from play_remove_lines::@6 play_remove_lines::@8 - [358] (byte) play_remove_lines::w#6 ← phi( play_remove_lines::@8/(byte) play_remove_lines::w#3 play_remove_lines::@6/(byte) play_remove_lines::w#11 ) - [359] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 + [357] (byte) play_remove_lines::w#6 ← phi( play_remove_lines::@8/(byte) play_remove_lines::w#3 play_remove_lines::@6/(byte) play_remove_lines::w#11 ) + [358] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 to:play_remove_lines::@return play_remove_lines::@return: scope:[play_remove_lines] from play_remove_lines::@7 - [360] return + [359] return to:@return play_remove_lines::@8: scope:[play_remove_lines] from play_remove_lines::@7 - [361] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 - [362] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 + [360] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 + [361] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 to:play_remove_lines::@7 play_lock_current: scope:[play_lock_current] from play_move_down::@9 - [363] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 + [362] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 to:play_lock_current::@1 play_lock_current::@1: scope:[play_lock_current] from play_lock_current play_lock_current::@6 - [364] (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte) play_lock_current::l#1 ) - [364] (byte) play_lock_current::i#3 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte~) play_lock_current::i#7 ) - [364] (byte) play_lock_current::yp#2 ← phi( play_lock_current/(byte) play_lock_current::yp#0 play_lock_current::@6/(byte) play_lock_current::yp#1 ) - [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 - [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) - [367] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 + [363] (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte) play_lock_current::l#1 ) + [363] (byte) play_lock_current::i#3 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte~) play_lock_current::i#7 ) + [363] (byte) play_lock_current::yp#2 ← phi( play_lock_current/(byte) play_lock_current::yp#0 play_lock_current::@6/(byte) play_lock_current::yp#1 ) + [364] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 + [365] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) + [366] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 to:play_lock_current::@2 play_lock_current::@2: scope:[play_lock_current] from play_lock_current::@1 play_lock_current::@7 - [368] (byte) play_lock_current::c#2 ← phi( play_lock_current::@1/(byte) 0 play_lock_current::@7/(byte) play_lock_current::c#1 ) - [368] (byte) play_lock_current::xp#2 ← phi( play_lock_current::@1/(byte) play_lock_current::xp#0 play_lock_current::@7/(byte) play_lock_current::xp#1 ) - [368] (byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@7/(byte~) play_lock_current::i#9 ) - [369] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 - [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 + [367] (byte) play_lock_current::c#2 ← phi( play_lock_current::@1/(byte) 0 play_lock_current::@7/(byte) play_lock_current::c#1 ) + [367] (byte) play_lock_current::xp#2 ← phi( play_lock_current::@1/(byte) play_lock_current::xp#0 play_lock_current::@7/(byte) play_lock_current::xp#1 ) + [367] (byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@7/(byte~) play_lock_current::i#9 ) + [368] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 + [369] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 to:play_lock_current::@4 play_lock_current::@4: scope:[play_lock_current] from play_lock_current::@2 - [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 + [370] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#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 - [372] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 - [373] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 - [374] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 + [371] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 + [372] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 + [373] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 to:play_lock_current::@5 play_lock_current::@5: scope:[play_lock_current] from play_lock_current::@3 - [375] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 - [376] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 - [377] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 + [374] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 + [375] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 + [376] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 to:play_lock_current::@return play_lock_current::@return: scope:[play_lock_current] from play_lock_current::@5 - [378] return + [377] return to:@return play_lock_current::@6: scope:[play_lock_current] from play_lock_current::@5 - [379] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 + [378] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 to:play_lock_current::@1 play_lock_current::@7: scope:[play_lock_current] from play_lock_current::@3 - [380] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 + [379] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 to:play_lock_current::@2 keyboard_event_pressed: scope:[keyboard_event_pressed] from keyboard_event_scan::@1 keyboard_event_scan::@17 keyboard_event_scan::@2 keyboard_event_scan::@3 play_move_down::@1 - [381] (byte) keyboard_event_pressed::keycode#5 ← phi( keyboard_event_scan::@1/(const byte) KEY_RSHIFT#0 keyboard_event_scan::@2/(const byte) KEY_CTRL#0 keyboard_event_scan::@17/(const byte) KEY_LSHIFT#0 keyboard_event_scan::@3/(const byte) KEY_COMMODORE#0 play_move_down::@1/(const byte) KEY_SPACE#0 ) - [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 - [383] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) - [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 - [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) + [380] (byte) keyboard_event_pressed::keycode#5 ← phi( keyboard_event_scan::@1/(const byte) KEY_RSHIFT#0 keyboard_event_scan::@2/(const byte) KEY_CTRL#0 keyboard_event_scan::@17/(const byte) KEY_LSHIFT#0 keyboard_event_scan::@3/(const byte) KEY_COMMODORE#0 play_move_down::@1/(const byte) KEY_SPACE#0 ) + [381] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 + [382] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) + [383] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 + [384] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) to:keyboard_event_pressed::@return keyboard_event_pressed::@return: scope:[keyboard_event_pressed] from keyboard_event_pressed - [386] return + [385] return to:@return keyboard_event_get: scope:[keyboard_event_get] from main::@19 - [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return + [386] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return to:keyboard_event_get::@1 keyboard_event_get::@1: scope:[keyboard_event_get] from keyboard_event_get - [388] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 - [389] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) + [387] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 + [388] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) to:keyboard_event_get::@return keyboard_event_get::@return: scope:[keyboard_event_get] from keyboard_event_get keyboard_event_get::@1 - [390] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@1/(byte) keyboard_events_size#4 ) - [390] (byte) keyboard_event_get::return#2 ← phi( keyboard_event_get/(byte) $ff keyboard_event_get::@1/(byte) keyboard_event_get::return#1 ) - [391] return + [389] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@1/(byte) keyboard_events_size#4 ) + [389] (byte) keyboard_event_get::return#2 ← phi( keyboard_event_get/(byte) $ff keyboard_event_get::@1/(byte) keyboard_event_get::return#1 ) + [390] return to:@return keyboard_event_scan: scope:[keyboard_event_scan] from main::@18 - [392] phi() + [391] phi() to:keyboard_event_scan::@7 keyboard_event_scan::@7: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@8 - [393] (byte) keyboard_events_size#30 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@8/(byte) keyboard_events_size#13 ) - [393] (byte) keyboard_event_scan::keycode#11 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::keycode#13 ) - [393] (byte) keyboard_event_scan::row#2 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::row#1 ) - [394] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 - [395] call keyboard_matrix_read - [396] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + [392] (byte) keyboard_events_size#30 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@8/(byte) keyboard_events_size#13 ) + [392] (byte) keyboard_event_scan::keycode#11 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::keycode#13 ) + [392] (byte) keyboard_event_scan::row#2 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::row#1 ) + [393] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 + [394] call keyboard_matrix_read + [395] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 to:keyboard_event_scan::@19 keyboard_event_scan::@19: scope:[keyboard_event_scan] from keyboard_event_scan::@7 - [397] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 - [398] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 + [396] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 + [397] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 to:keyboard_event_scan::@16 keyboard_event_scan::@16: scope:[keyboard_event_scan] from keyboard_event_scan::@19 - [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 + [398] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 to:keyboard_event_scan::@8 keyboard_event_scan::@8: scope:[keyboard_event_scan] from keyboard_event_scan::@15 keyboard_event_scan::@16 - [400] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_events_size#29 keyboard_event_scan::@16/(byte) keyboard_events_size#30 ) - [400] (byte) keyboard_event_scan::keycode#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@16/(byte) keyboard_event_scan::keycode#1 ) - [401] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 - [402] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 + [399] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_events_size#29 keyboard_event_scan::@16/(byte) keyboard_events_size#30 ) + [399] (byte) keyboard_event_scan::keycode#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@16/(byte) keyboard_event_scan::keycode#1 ) + [400] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 + [401] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 to:keyboard_event_scan::@17 keyboard_event_scan::@17: scope:[keyboard_event_scan] from keyboard_event_scan::@8 - [403] phi() - [404] call keyboard_event_pressed - [405] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 + [402] phi() + [403] call keyboard_event_pressed + [404] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@20 keyboard_event_scan::@20: scope:[keyboard_event_scan] from keyboard_event_scan::@17 - [406] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 - [407] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 + [405] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 + [406] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 to:keyboard_event_scan::@18 keyboard_event_scan::@18: scope:[keyboard_event_scan] from keyboard_event_scan::@20 - [408] phi() + [407] phi() to:keyboard_event_scan::@1 keyboard_event_scan::@1: scope:[keyboard_event_scan] from keyboard_event_scan::@18 keyboard_event_scan::@20 - [409] phi() - [410] call keyboard_event_pressed - [411] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 + [408] phi() + [409] call keyboard_event_pressed + [410] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@21 keyboard_event_scan::@21: scope:[keyboard_event_scan] from keyboard_event_scan::@1 - [412] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 - [413] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 + [411] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 + [412] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 to:keyboard_event_scan::@4 keyboard_event_scan::@4: scope:[keyboard_event_scan] from keyboard_event_scan::@21 - [414] phi() + [413] phi() to:keyboard_event_scan::@2 keyboard_event_scan::@2: scope:[keyboard_event_scan] from keyboard_event_scan::@21 keyboard_event_scan::@4 - [415] phi() - [416] call keyboard_event_pressed - [417] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 + [414] phi() + [415] call keyboard_event_pressed + [416] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@22 keyboard_event_scan::@22: scope:[keyboard_event_scan] from keyboard_event_scan::@2 - [418] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 - [419] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 + [417] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 + [418] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 to:keyboard_event_scan::@5 keyboard_event_scan::@5: scope:[keyboard_event_scan] from keyboard_event_scan::@22 - [420] phi() + [419] phi() to:keyboard_event_scan::@3 keyboard_event_scan::@3: scope:[keyboard_event_scan] from keyboard_event_scan::@22 keyboard_event_scan::@5 - [421] phi() - [422] call keyboard_event_pressed - [423] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 + [420] phi() + [421] call keyboard_event_pressed + [422] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@23 keyboard_event_scan::@23: scope:[keyboard_event_scan] from keyboard_event_scan::@3 - [424] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 - [425] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return + [423] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 + [424] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return to:keyboard_event_scan::@6 keyboard_event_scan::@6: scope:[keyboard_event_scan] from keyboard_event_scan::@23 - [426] phi() + [425] phi() to:keyboard_event_scan::@return keyboard_event_scan::@return: scope:[keyboard_event_scan] from keyboard_event_scan::@23 keyboard_event_scan::@6 - [427] return + [426] return to:@return keyboard_event_scan::@9: scope:[keyboard_event_scan] from keyboard_event_scan::@10 keyboard_event_scan::@19 - [428] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 ) - [428] (byte) keyboard_event_scan::keycode#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@19/(byte) keyboard_event_scan::keycode#11 ) - [428] (byte) keyboard_event_scan::col#2 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::col#1 keyboard_event_scan::@19/(byte) 0 ) - [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) - [430] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) - [431] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 + [427] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 ) + [427] (byte) keyboard_event_scan::keycode#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@19/(byte) keyboard_event_scan::keycode#11 ) + [427] (byte) keyboard_event_scan::col#2 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::col#1 keyboard_event_scan::@19/(byte) 0 ) + [428] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) + [429] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) + [430] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 to:keyboard_event_scan::@12 keyboard_event_scan::@12: scope:[keyboard_event_scan] from keyboard_event_scan::@9 - [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 + [431] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 to:keyboard_event_scan::@13 keyboard_event_scan::@13: scope:[keyboard_event_scan] from keyboard_event_scan::@12 - [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) - [434] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 + [432] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) + [433] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 to:keyboard_event_scan::@14 keyboard_event_scan::@14: scope:[keyboard_event_scan] from keyboard_event_scan::@13 - [435] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 - [436] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 + [434] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 + [435] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 to:keyboard_event_scan::@10 keyboard_event_scan::@10: scope:[keyboard_event_scan] from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 - [437] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan::@9/(byte) keyboard_events_size#10 keyboard_event_scan::@11/(byte) keyboard_events_size#1 keyboard_event_scan::@12/(byte) keyboard_events_size#10 keyboard_event_scan::@14/(byte) keyboard_events_size#2 ) - [438] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 - [439] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 - [440] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 + [436] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan::@9/(byte) keyboard_events_size#10 keyboard_event_scan::@11/(byte) keyboard_events_size#1 keyboard_event_scan::@12/(byte) keyboard_events_size#10 keyboard_event_scan::@14/(byte) keyboard_events_size#2 ) + [437] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 + [438] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 + [439] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 to:keyboard_event_scan::@15 keyboard_event_scan::@15: scope:[keyboard_event_scan] from keyboard_event_scan::@10 - [441] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 + [440] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 to:keyboard_event_scan::@8 keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan::@13 - [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 - [443] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 - [444] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 + [441] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 + [442] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 + [443] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 to:keyboard_event_scan::@10 keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@7 - [445] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) - [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) + [444] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) + [445] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read - [447] return + [446] return to:@return render_show: scope:[render_show] from main::@3 - [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 + [447] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 to:render_show::toD0182 render_show::toD0182: scope:[render_show] from render_show - [449] phi() + [448] phi() to:render_show::@1 render_show::@1: scope:[render_show] from render_show::toD0181 render_show::toD0182 - [450] (byte) render_show::d018val#3 ← phi( render_show::toD0181/(const byte) render_show::toD0181_return#0 render_show::toD0182/(const byte) render_show::toD0182_return#0 ) - [451] *((const byte*) D018#0) ← (byte) render_show::d018val#3 - [452] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) - [453] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) - [454] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 + [449] (byte) render_show::d018val#3 ← phi( render_show::toD0181/(const byte) render_show::toD0181_return#0 render_show::toD0182/(const byte) render_show::toD0182_return#0 ) + [450] *((const byte*) D018#0) ← (byte) render_show::d018val#3 + [451] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) + [452] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) + [453] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 to:render_show::@return render_show::@return: scope:[render_show] from render_show::@1 - [455] return + [454] return to:@return render_show::toD0181: scope:[render_show] from render_show - [456] phi() + [455] phi() to:render_show::@1 play_init: scope:[play_init] from main::@11 - [457] phi() + [456] phi() to:play_init::@1 play_init::@1: scope:[play_init] from play_init play_init::@1 - [458] (byte) play_init::idx#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::idx#1 ) - [458] (byte*) play_init::pli#2 ← phi( play_init/(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 play_init::@1/(byte*) play_init::pli#1 ) - [458] (byte) play_init::j#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::j#1 ) - [459] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 - [460] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 - [461] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 - [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 - [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 - [464] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 - [465] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_init::@1 + [457] (byte) play_init::idx#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::idx#1 ) + [457] (byte*) play_init::pli#2 ← phi( play_init/(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 play_init::@1/(byte*) play_init::pli#1 ) + [457] (byte) play_init::j#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::j#1 ) + [458] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 + [459] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 + [460] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 + [461] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 + [462] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 + [463] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 + [464] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_init::@1 to:play_init::@2 play_init::@2: scope:[play_init] from play_init::@1 - [466] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 - [467] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) + [465] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 + [466] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) to:play_init::@3 play_init::@3: scope:[play_init] from play_init::@2 play_init::@3 - [468] (byte) play_init::b#2 ← phi( play_init::@2/(byte) 0 play_init::@3/(byte) play_init::b#1 ) - [469] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 - [470] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) - [471] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 - [472] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 + [467] (byte) play_init::b#2 ← phi( play_init::@2/(byte) 0 play_init::@3/(byte) play_init::b#1 ) + [468] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 + [469] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) + [470] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 + [471] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 to:play_init::@return play_init::@return: scope:[play_init] from play_init::@3 - [473] return + [472] return to:@return sprites_irq_init: scope:[sprites_irq_init] from main::@10 asm { sei } - [475] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 + [474] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 asm { ldaCIA1_INTERRUPT } - [477] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 - [478] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 - [479] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 - [480] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f - [481] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 - [482] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 - [483] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() + [476] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 + [477] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 + [478] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 + [479] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f + [480] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 + [481] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 + [482] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() asm { cli } to:sprites_irq_init::@return sprites_irq_init::@return: scope:[sprites_irq_init] from sprites_irq_init - [485] return + [484] return to:@return sprites_init: scope:[sprites_init] from main::@9 - [486] *((const byte*) SPRITES_ENABLE#0) ← (byte) $f - [487] *((const byte*) SPRITES_MC#0) ← (byte) 0 - [488] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) - [489] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) + [485] *((const byte*) SPRITES_ENABLE#0) ← (byte) $f + [486] *((const byte*) SPRITES_MC#0) ← (byte) 0 + [487] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) + [488] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) to:sprites_init::@1 sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1 - [490] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte)(number) $18+(number) $f*(number) 8 sprites_init::@1/(byte) sprites_init::xpos#1 ) - [490] (byte) sprites_init::s#2 ← phi( sprites_init/(byte) 0 sprites_init::@1/(byte) sprites_init::s#1 ) - [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 - [492] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 - [493] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 - [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 - [495] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 - [496] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 + [489] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte)(number) $18+(number) $f*(number) 8 sprites_init::@1/(byte) sprites_init::xpos#1 ) + [489] (byte) sprites_init::s#2 ← phi( sprites_init/(byte) 0 sprites_init::@1/(byte) sprites_init::s#1 ) + [490] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 + [491] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 + [492] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 + [493] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 + [494] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 + [495] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 to:sprites_init::@return sprites_init::@return: scope:[sprites_init] from sprites_init::@1 - [497] return + [496] return to:@return render_init: scope:[render_init] from main::@8 - [498] phi() + [497] phi() to:render_init::vicSelectGfxBank1 render_init::vicSelectGfxBank1: scope:[render_init] from render_init - [499] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 + [498] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 to:render_init::vicSelectGfxBank1_toDd001 render_init::vicSelectGfxBank1_toDd001: scope:[render_init] from render_init::vicSelectGfxBank1 - [500] phi() + [499] phi() to:render_init::vicSelectGfxBank1_@1 render_init::vicSelectGfxBank1_@1: scope:[render_init] from render_init::vicSelectGfxBank1_toDd001 - [501] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 + [500] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 to:render_init::@2 render_init::@2: scope:[render_init] from render_init::vicSelectGfxBank1_@1 - [502] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 - [503] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 - [504] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 - [505] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) - [506] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) - [507] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 - [508] call render_screen_original + [501] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 + [502] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 + [503] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 + [504] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) + [505] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) + [506] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 + [507] call render_screen_original to:render_init::@3 render_init::@3: scope:[render_init] from render_init::@2 - [509] phi() - [510] call render_screen_original + [508] phi() + [509] call render_screen_original to:render_init::@1 render_init::@1: scope:[render_init] from render_init::@1 render_init::@3 - [511] (byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@3/(const byte*) PLAYFIELD_SCREEN_2#0+(byte)(number) 2*(number) $28+(byte) $10 ) - [511] (byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@3/(const byte*) PLAYFIELD_SCREEN_1#0+(byte)(number) 2*(number) $28+(byte) $10 ) - [511] (byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@3/(byte) 0 ) - [512] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 - [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 - [514] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 - [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 - [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 - [517] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 - [518] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto render_init::@1 + [510] (byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@3/(const byte*) PLAYFIELD_SCREEN_2#0+(byte)(number) 2*(number) $28+(byte) $10 ) + [510] (byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@3/(const byte*) PLAYFIELD_SCREEN_1#0+(byte)(number) 2*(number) $28+(byte) $10 ) + [510] (byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@3/(byte) 0 ) + [511] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 + [512] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 + [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 + [514] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 + [515] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 + [516] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 + [517] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto render_init::@1 to:render_init::@return render_init::@return: scope:[render_init] from render_init::@1 - [519] return + [518] return to:@return render_screen_original: scope:[render_screen_original] from render_init::@2 render_init::@3 - [520] (byte*) render_screen_original::screen#9 ← phi( render_init::@2/(const byte*) PLAYFIELD_SCREEN_1#0 render_init::@3/(const byte*) PLAYFIELD_SCREEN_2#0 ) + [519] (byte*) render_screen_original::screen#9 ← phi( render_init::@2/(const byte*) PLAYFIELD_SCREEN_1#0 render_init::@3/(const byte*) PLAYFIELD_SCREEN_2#0 ) to:render_screen_original::@1 render_screen_original::@1: scope:[render_screen_original] from render_screen_original render_screen_original::@5 - [521] (byte) render_screen_original::y#6 ← phi( render_screen_original/(byte) 0 render_screen_original::@5/(byte) render_screen_original::y#1 ) - [521] (byte*) render_screen_original::ocols#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::ocols#1 ) - [521] (byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::oscr#1 ) - [521] (byte*) render_screen_original::cols#7 ← phi( render_screen_original/(const byte*) COLS#0 render_screen_original::@5/(byte*) render_screen_original::cols#3 ) - [521] (byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@5/(byte*) render_screen_original::screen#10 ) + [520] (byte) render_screen_original::y#6 ← phi( render_screen_original/(byte) 0 render_screen_original::@5/(byte) render_screen_original::y#1 ) + [520] (byte*) render_screen_original::ocols#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::ocols#1 ) + [520] (byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::oscr#1 ) + [520] (byte*) render_screen_original::cols#7 ← phi( render_screen_original/(const byte*) COLS#0 render_screen_original::@5/(byte*) render_screen_original::cols#3 ) + [520] (byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@5/(byte*) render_screen_original::screen#10 ) to:render_screen_original::@2 render_screen_original::@2: scope:[render_screen_original] from render_screen_original::@1 render_screen_original::@2 - [522] (byte) render_screen_original::x#4 ← phi( render_screen_original::@1/(byte) 0 render_screen_original::@2/(byte) render_screen_original::x#1 ) - [522] (byte*) render_screen_original::cols#4 ← phi( render_screen_original::@1/(byte*) render_screen_original::cols#7 render_screen_original::@2/(byte*) render_screen_original::cols#1 ) - [522] (byte*) render_screen_original::screen#5 ← phi( render_screen_original::@1/(byte*) render_screen_original::screen#8 render_screen_original::@2/(byte*) render_screen_original::screen#2 ) - [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 - [524] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 - [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 - [526] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 - [527] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 - [528] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 + [521] (byte) render_screen_original::x#4 ← phi( render_screen_original::@1/(byte) 0 render_screen_original::@2/(byte) render_screen_original::x#1 ) + [521] (byte*) render_screen_original::cols#4 ← phi( render_screen_original::@1/(byte*) render_screen_original::cols#7 render_screen_original::@2/(byte*) render_screen_original::cols#1 ) + [521] (byte*) render_screen_original::screen#5 ← phi( render_screen_original::@1/(byte*) render_screen_original::screen#8 render_screen_original::@2/(byte*) render_screen_original::screen#2 ) + [522] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 + [523] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 + [524] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 + [525] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 + [526] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 + [527] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 to:render_screen_original::@3 render_screen_original::@3: scope:[render_screen_original] from render_screen_original::@2 render_screen_original::@3 - [529] (byte) render_screen_original::x#5 ← phi( render_screen_original::@2/(byte) render_screen_original::x#1 render_screen_original::@3/(byte) render_screen_original::x#2 ) - [529] (byte*) render_screen_original::cols#5 ← phi( render_screen_original::@2/(byte*) render_screen_original::cols#1 render_screen_original::@3/(byte*) render_screen_original::cols#2 ) - [529] (byte*) render_screen_original::ocols#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::ocols#4 render_screen_original::@3/(byte*) render_screen_original::ocols#1 ) - [529] (byte*) render_screen_original::screen#6 ← phi( render_screen_original::@2/(byte*) render_screen_original::screen#2 render_screen_original::@3/(byte*) render_screen_original::screen#3 ) - [529] (byte*) render_screen_original::oscr#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::oscr#4 render_screen_original::@3/(byte*) render_screen_original::oscr#1 ) - [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) - [531] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 - [532] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 - [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) - [534] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 - [535] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 - [536] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 - [537] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 + [528] (byte) render_screen_original::x#5 ← phi( render_screen_original::@2/(byte) render_screen_original::x#1 render_screen_original::@3/(byte) render_screen_original::x#2 ) + [528] (byte*) render_screen_original::cols#5 ← phi( render_screen_original::@2/(byte*) render_screen_original::cols#1 render_screen_original::@3/(byte*) render_screen_original::cols#2 ) + [528] (byte*) render_screen_original::ocols#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::ocols#4 render_screen_original::@3/(byte*) render_screen_original::ocols#1 ) + [528] (byte*) render_screen_original::screen#6 ← phi( render_screen_original::@2/(byte*) render_screen_original::screen#2 render_screen_original::@3/(byte*) render_screen_original::screen#3 ) + [528] (byte*) render_screen_original::oscr#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::oscr#4 render_screen_original::@3/(byte*) render_screen_original::oscr#1 ) + [529] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) + [530] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 + [531] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 + [532] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) + [533] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 + [534] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 + [535] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 + [536] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 to:render_screen_original::@4 render_screen_original::@4: scope:[render_screen_original] from render_screen_original::@3 render_screen_original::@4 - [538] (byte) render_screen_original::x#6 ← phi( render_screen_original::@3/(byte) render_screen_original::x#2 render_screen_original::@4/(byte) render_screen_original::x#3 ) - [538] (byte*) render_screen_original::cols#6 ← phi( render_screen_original::@3/(byte*) render_screen_original::cols#2 render_screen_original::@4/(byte*) render_screen_original::cols#3 ) - [538] (byte*) render_screen_original::screen#7 ← phi( render_screen_original::@3/(byte*) render_screen_original::screen#3 render_screen_original::@4/(byte*) render_screen_original::screen#10 ) - [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 - [540] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 - [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 - [542] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 - [543] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 - [544] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 + [537] (byte) render_screen_original::x#6 ← phi( render_screen_original::@3/(byte) render_screen_original::x#2 render_screen_original::@4/(byte) render_screen_original::x#3 ) + [537] (byte*) render_screen_original::cols#6 ← phi( render_screen_original::@3/(byte*) render_screen_original::cols#2 render_screen_original::@4/(byte*) render_screen_original::cols#3 ) + [537] (byte*) render_screen_original::screen#7 ← phi( render_screen_original::@3/(byte*) render_screen_original::screen#3 render_screen_original::@4/(byte*) render_screen_original::screen#10 ) + [538] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 + [539] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 + [540] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 + [541] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 + [542] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 + [543] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 to:render_screen_original::@5 render_screen_original::@5: scope:[render_screen_original] from render_screen_original::@4 - [545] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 - [546] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 + [544] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 + [545] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 to:render_screen_original::@return render_screen_original::@return: scope:[render_screen_original] from render_screen_original::@5 - [547] return + [546] return to:@return sid_rnd_init: scope:[sid_rnd_init] from main - [548] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff - [549] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 + [547] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff + [548] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - [550] return + [549] return to:@return sprites_irq: scope:[sprites_irq] from asm { cld } - [552] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 - [553] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 - [554] *((const byte*) SPRITES_YPOS#0+(byte) 2) ← (byte) sprites_irq::ypos#0 - [555] *((const byte*) SPRITES_YPOS#0+(byte) 4) ← (byte) sprites_irq::ypos#0 - [556] *((const byte*) SPRITES_YPOS#0+(byte) 6) ← (byte) sprites_irq::ypos#0 - [557] (byte~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte) 1 - [558] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte~) sprites_irq::$0 + [551] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 + [552] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 + [553] *((const byte*) SPRITES_YPOS#0+(byte) 2) ← (byte) sprites_irq::ypos#0 + [554] *((const byte*) SPRITES_YPOS#0+(byte) 4) ← (byte) sprites_irq::ypos#0 + [555] *((const byte*) SPRITES_YPOS#0+(byte) 6) ← (byte) sprites_irq::ypos#0 + [556] (byte~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte) 1 + [557] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte~) sprites_irq::$0 to:sprites_irq::@8 sprites_irq::@8: scope:[sprites_irq] from sprites_irq sprites_irq::@8 - [559] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 + [558] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 to:sprites_irq::@9 sprites_irq::@9: scope:[sprites_irq] from sprites_irq::@8 - [560] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0 - [561] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 + [559] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0 + [560] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 to:sprites_irq::@10 sprites_irq::@10: scope:[sprites_irq] from sprites_irq::@9 - [562] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 - [563] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 - [564] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 1) ← (byte) sprites_irq::ptr#3 - [565] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 2) ← (byte) sprites_irq::ptr#3 - [566] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 - [567] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 3) ← (byte) sprites_irq::ptr#4 + [561] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 + [562] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 + [563] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 1) ← (byte) sprites_irq::ptr#3 + [564] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 2) ← (byte) sprites_irq::ptr#3 + [565] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 + [566] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 3) ← (byte) sprites_irq::ptr#4 to:sprites_irq::@2 sprites_irq::@2: scope:[sprites_irq] from sprites_irq::@1 sprites_irq::@10 - [568] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 - [569] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 + [567] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 + [568] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 to:sprites_irq::@6 sprites_irq::@6: scope:[sprites_irq] from sprites_irq::@2 - [570] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 + [569] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 to:sprites_irq::@7 sprites_irq::@7: scope:[sprites_irq] from sprites_irq::@6 - [571] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 - [572] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 - [573] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 + [570] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 + [571] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 + [572] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 to:sprites_irq::@5 sprites_irq::@5: scope:[sprites_irq] from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 - [574] (byte) irq_sprite_ptr#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ptr#1 sprites_irq::@4/(byte) irq_sprite_ptr#2 sprites_irq::@7/(byte) irq_sprite_ptr#3 ) - [574] (byte) irq_sprite_ypos#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ypos#1 sprites_irq::@4/(byte) irq_sprite_ypos#2 sprites_irq::@7/(byte) irq_sprite_ypos#3 ) - [574] (byte) irq_cnt#3 ← phi( sprites_irq::@11/(byte) irq_cnt#1 sprites_irq::@4/(byte) irq_cnt#2 sprites_irq::@7/(byte) irq_cnt#1 ) - [574] (byte) irq_raster_next#4 ← phi( sprites_irq::@11/(byte) irq_raster_next#1 sprites_irq::@4/(byte) irq_raster_next#2 sprites_irq::@7/(byte) irq_raster_next#3 ) - [575] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 - [576] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 + [573] (byte) irq_sprite_ptr#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ptr#1 sprites_irq::@4/(byte) irq_sprite_ptr#2 sprites_irq::@7/(byte) irq_sprite_ptr#3 ) + [573] (byte) irq_sprite_ypos#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ypos#1 sprites_irq::@4/(byte) irq_sprite_ypos#2 sprites_irq::@7/(byte) irq_sprite_ypos#3 ) + [573] (byte) irq_cnt#3 ← phi( sprites_irq::@11/(byte) irq_cnt#1 sprites_irq::@4/(byte) irq_cnt#2 sprites_irq::@7/(byte) irq_cnt#1 ) + [573] (byte) irq_raster_next#4 ← phi( sprites_irq::@11/(byte) irq_raster_next#1 sprites_irq::@4/(byte) irq_raster_next#2 sprites_irq::@7/(byte) irq_raster_next#3 ) + [574] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 + [575] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 to:sprites_irq::@return sprites_irq::@return: scope:[sprites_irq] from sprites_irq::@5 - [577] return + [576] return to:@return sprites_irq::@4: scope:[sprites_irq] from sprites_irq::@6 - [578] (byte) irq_cnt#2 ← (byte) 0 - [579] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 - [580] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 - [581] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 + [577] (byte) irq_cnt#2 ← (byte) 0 + [578] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 + [579] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 + [580] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 to:sprites_irq::@5 sprites_irq::@3: scope:[sprites_irq] from sprites_irq::@2 - [582] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 - [583] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 + [581] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 + [582] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 to:sprites_irq::toSpritePtr2 sprites_irq::toSpritePtr2: scope:[sprites_irq] from sprites_irq::@3 - [584] phi() + [583] phi() to:sprites_irq::@11 sprites_irq::@11: scope:[sprites_irq] from sprites_irq::toSpritePtr2 - [585] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 + [584] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 to:sprites_irq::@5 sprites_irq::@1: scope:[sprites_irq] from sprites_irq::@9 - [586] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 - [587] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 - [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 - [589] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 - [590] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 - [591] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 + [585] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 + [586] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 + [587] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 + [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 + [589] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 + [590] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 to:sprites_irq::@2 @@ -12635,7 +12646,7 @@ VARIABLE REGISTER WEIGHTS (byte~) current_piece_char#101 22.0 (byte) current_piece_char#16 3.4324324324324325 (byte) current_piece_char#29 6.0 -(byte) current_piece_char#5 0.25 +(byte) current_piece_char#5 0.25806451612903225 (byte) current_piece_char#68 48.285714285714285 (byte*) current_piece_gfx (byte*~) current_piece_gfx#112 2.0 @@ -12650,7 +12661,7 @@ VARIABLE REGISTER WEIGHTS (byte*) current_piece_gfx#64 48.285714285714285 (byte*) current_piece_gfx#7 4.0 (byte) current_xpos -(byte) current_xpos#100 0.3225806451612903 +(byte) current_xpos#100 0.3333333333333333 (byte~) current_xpos#119 1.3333333333333333 (byte~) current_xpos#120 7.333333333333333 (byte) current_xpos#14 20.38181818181818 @@ -12667,14 +12678,14 @@ VARIABLE REGISTER WEIGHTS (byte) current_ypos#19 1.7051282051282046 (byte) current_ypos#3 4.0 (byte) current_ypos#38 6.0 -(byte) current_ypos#6 0.3333333333333333 +(byte) current_ypos#6 0.3448275862068966 (byte~) current_ypos#98 1.0 (byte~) current_ypos#99 4.4 (byte) game_over (byte) game_over#10 4.804347826086958 (byte) game_over#15 3.189189189189189 (byte) game_over#27 6.0 -(byte) game_over#52 0.34782608695652173 +(byte) game_over#52 0.36363636363636365 (byte) game_over#65 0.42857142857142855 (byte) irq_cnt (byte) irq_cnt#0 0.17391304347826086 @@ -12976,12 +12987,11 @@ VARIABLE REGISTER WEIGHTS (byte) play_remove_lines::y#8 133.46666666666667 (void()) play_spawn_current() (byte~) play_spawn_current::$1 4.0 -(byte~) play_spawn_current::$7 0.06451612903225806 +(byte~) play_spawn_current::$7 0.06666666666666667 (byte) play_spawn_current::current_piece_idx (byte) play_spawn_current::current_piece_idx#0 2.5 (byte) play_spawn_current::piece_idx -(byte) play_spawn_current::piece_idx#1 2002.0 -(byte) play_spawn_current::piece_idx#2 100.5 +(byte) play_spawn_current::piece_idx#1 100.5 (byte) play_spawn_current::sid_rnd1_return (byte) play_spawn_current::sid_rnd1_return#0 2002.0 (void()) play_update_score((byte) play_update_score::removed) @@ -13306,7 +13316,7 @@ Initial phi equivalence classes [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ] [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] [ play_move_down::return#3 ] -[ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] +[ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] [ play_increase_level::b#2 play_increase_level::b#1 ] [ play_remove_lines::y#8 play_remove_lines::y#1 ] @@ -13503,7 +13513,7 @@ Complete equivalence classes [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ] [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] [ play_move_down::return#3 ] -[ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] +[ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] [ play_increase_level::b#2 play_increase_level::b#1 ] [ play_remove_lines::y#8 play_remove_lines::y#1 ] @@ -13696,7 +13706,7 @@ Allocated zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_ Allocated zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ] Allocated zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] Allocated zp ZP_BYTE:73 [ play_move_down::return#3 ] -Allocated zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] +Allocated zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] Allocated zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] Allocated zp ZP_BYTE:76 [ play_increase_level::b#2 play_increase_level::b#1 ] Allocated zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] @@ -14085,7 +14095,7 @@ main: { // asm { sei } sei // [18] call render_init - // [498] phi from main::@8 to render_init [phi:main::@8->render_init] + // [497] phi from main::@8 to render_init [phi:main::@8->render_init] render_init_from_b8: jsr render_init // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -14108,7 +14118,7 @@ main: { // main::@11 b11: // [24] call play_init - // [457] phi from main::@11 to play_init [phi:main::@11->play_init] + // [456] phi from main::@11 to play_init [phi:main::@11->play_init] play_init_from_b11: jsr play_init // [25] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -14135,7 +14145,7 @@ main: { // [287] phi from main::@13 to play_spawn_current [phi:main::@13->play_spawn_current] play_spawn_current_from_b13: // [287] phi (byte) game_over#65 = (byte) game_over#52 [phi:main::@13->play_spawn_current#0] -- register_copy - // [287] phi (byte) next_piece_idx#17 = (byte) play_spawn_current::piece_idx#2 [phi:main::@13->play_spawn_current#1] -- register_copy + // [287] phi (byte) next_piece_idx#17 = (byte) play_spawn_current::piece_idx#1 [phi:main::@13->play_spawn_current#1] -- register_copy jsr play_spawn_current // [29] phi from main::@13 to main::@14 [phi:main::@13->main::@14] b14_from_b13: @@ -14181,7 +14191,7 @@ main: { jmp b16 // main::@16 b16: - // [36] (byte~) next_piece_idx#77 ← (byte) play_spawn_current::piece_idx#2 -- vbuz1=vbuz2 + // [36] (byte~) next_piece_idx#77 ← (byte) play_spawn_current::piece_idx#1 -- vbuz1=vbuz2 lda play_spawn_current.piece_idx sta next_piece_idx_77 // [37] call render_next @@ -14228,7 +14238,7 @@ main: { lda #0 sta keyboard_events_size // [40] phi (byte) render_screen_showing#13 = (byte) render_screen_showing#0 [phi:main::@17->main::@1#6] -- register_copy - // [40] phi (byte) next_piece_idx#10 = (byte) play_spawn_current::piece_idx#2 [phi:main::@17->main::@1#7] -- register_copy + // [40] phi (byte) next_piece_idx#10 = (byte) play_spawn_current::piece_idx#1 [phi:main::@17->main::@1#7] -- register_copy // [40] phi (byte) game_over#10 = (byte) game_over#52 [phi:main::@17->main::@1#8] -- register_copy // [40] phi (byte) current_ypos#11 = (byte) current_ypos#6 [phi:main::@17->main::@1#9] -- register_copy // [40] phi (byte) current_xpos#14 = (byte) current_xpos#100 [phi:main::@17->main::@1#10] -- register_copy @@ -14291,7 +14301,7 @@ main: { // main::@18 b18: // [45] call keyboard_event_scan - // [392] phi from main::@18 to keyboard_event_scan [phi:main::@18->keyboard_event_scan] + // [391] phi from main::@18 to keyboard_event_scan [phi:main::@18->keyboard_event_scan] keyboard_event_scan_from_b18: jsr keyboard_event_scan // [46] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -15630,9 +15640,9 @@ play_move_down: { // play_move_down::@1 b1: // [252] call keyboard_event_pressed - // [381] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed] + // [380] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed] keyboard_event_pressed_from_b1: - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_SPACE#0 [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_SPACE#0 [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_SPACE sta keyboard_event_pressed.keycode jsr keyboard_event_pressed @@ -15741,7 +15751,7 @@ play_move_down: { // play_move_down::@14 b14: // [274] call play_remove_lines - // [340] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines] + // [339] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines] play_remove_lines_from_b14: jsr play_remove_lines // [275] (byte) play_remove_lines::return#0 ← (byte) play_remove_lines::removed#8 -- vbuz1=vbuz2 @@ -15786,7 +15796,7 @@ play_move_down: { sta current_piece_gfx+1 // [283] phi from play_move_down::@17 to play_move_down::@11 [phi:play_move_down::@17->play_move_down::@11] b11_from_b17: - // [283] phi (byte) next_piece_idx#30 = (byte) play_spawn_current::piece_idx#2 [phi:play_move_down::@17->play_move_down::@11#0] -- register_copy + // [283] phi (byte) next_piece_idx#30 = (byte) play_spawn_current::piece_idx#1 [phi:play_move_down::@17->play_move_down::@11#0] -- register_copy // [283] phi (byte) game_over#27 = (byte) game_over#52 [phi:play_move_down::@17->play_move_down::@11#1] -- register_copy // [283] phi (byte) current_xpos#43 = (byte) current_xpos#100 [phi:play_move_down::@17->play_move_down::@11#2] -- register_copy // [283] phi (byte*) current_piece_gfx#35 = (byte*~) current_piece_gfx#117 [phi:play_move_down::@17->play_move_down::@11#3] -- register_copy @@ -15952,39 +15962,31 @@ play_spawn_current: { jmp b1 // play_spawn_current::@1 b1: - // [302] phi from play_spawn_current::@1 to play_spawn_current::@2 [phi:play_spawn_current::@1->play_spawn_current::@2] - b2_from_b1: - // [302] phi (byte) play_spawn_current::piece_idx#2 = (byte) 7 [phi:play_spawn_current::@1->play_spawn_current::@2#0] -- vbuz1=vbuc1 + jmp sid_rnd1 + // play_spawn_current::sid_rnd1 + sid_rnd1: + // [302] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 + lda SID_VOICE3_OSC + sta sid_rnd1_return + jmp b3 + // play_spawn_current::@3 + b3: + // [303] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 lda #7 + and sid_rnd1_return sta piece_idx jmp b2 // play_spawn_current::@2 b2: - // [303] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 -- vbuz1_eq_vbuc1_then_la1 + // [304] if((byte) play_spawn_current::piece_idx#1==(byte) 7) goto play_spawn_current::sid_rnd1 -- vbuz1_eq_vbuc1_then_la1 lda #7 cmp piece_idx beq sid_rnd1 jmp breturn // play_spawn_current::@return breturn: - // [304] return + // [305] return rts - // play_spawn_current::sid_rnd1 - sid_rnd1: - // [305] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 - lda SID_VOICE3_OSC - sta sid_rnd1_return - jmp b3 - // play_spawn_current::@3 - b3: - // [306] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 - lda #7 - and sid_rnd1_return - sta piece_idx - // [302] phi from play_spawn_current::@3 to play_spawn_current::@2 [phi:play_spawn_current::@3->play_spawn_current::@2] - b2_from_b3: - // [302] phi (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#1 [phi:play_spawn_current::@3->play_spawn_current::@2#0] -- register_copy - jmp b2 } // play_update_score // Update the score based on the number of lines removed @@ -15997,26 +15999,26 @@ play_update_score: { .label lines_before = $b2 .label add_bcd = $b4 .label lines_after = $b9 - // [307] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -- vbuz1_eq_0_then_la1 + // [306] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -- vbuz1_eq_0_then_la1 lda removed cmp #0 beq breturn_from_play_update_score jmp b1 // play_update_score::@1 b1: - // [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 -- vbuz1=_lo_vwuz2 + // [307] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 -- vbuz1=_lo_vwuz2 lda lines_bcd sta _2 - // [309] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 -- vbuz1=vbuz2_band_vbuc1 + // [308] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 -- vbuz1=vbuz2_band_vbuc1 lda #$f0 and _2 sta lines_before - // [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [309] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda removed asl asl sta _9 - // [311] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) -- vduz1=pduc1_derefidx_vbuz2 + // [310] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) -- vduz1=pduc1_derefidx_vbuz2 ldy _9 lda score_add_bcd,y sta add_bcd @@ -16028,7 +16030,7 @@ play_update_score: { sta add_bcd+3 // asm { sed } sed - // [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 -- vwuz1=vwuz1_plus_vbuz2 + // [312] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 -- vwuz1=vwuz1_plus_vbuz2 lda removed clc adc lines_bcd @@ -16036,7 +16038,7 @@ play_update_score: { bcc !+ inc lines_bcd+1 !: - // [314] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 -- vduz1=vduz1_plus_vduz2 + // [313] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 -- vduz1=vduz1_plus_vduz2 lda score_bcd clc adc add_bcd @@ -16052,37 +16054,37 @@ play_update_score: { sta score_bcd+3 // asm { cld } cld - // [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 -- vbuz1=_lo_vwuz2 + // [315] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 -- vbuz1=_lo_vwuz2 lda lines_bcd sta _4 - // [317] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 -- vbuz1=vbuz2_band_vbuc1 + // [316] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 -- vbuz1=vbuz2_band_vbuc1 lda #$f0 and _4 sta lines_after - // [318] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return -- vbuz1_eq_vbuz2_then_la1 + // [317] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return -- vbuz1_eq_vbuz2_then_la1 lda lines_before cmp lines_after beq breturn_from_b1 - // [319] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2] + // [318] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2] b2_from_b1: jmp b2 // play_update_score::@2 b2: - // [320] call play_increase_level + // [319] call play_increase_level jsr play_increase_level - // [321] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return] + // [320] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return] breturn_from_play_update_score: breturn_from_b1: breturn_from_b2: - // [321] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy - // [321] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy - // [321] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy - // [321] phi (dword) score_bcd#16 = (dword) score_bcd#18 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy - // [321] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#4] -- register_copy + // [320] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy + // [320] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy + // [320] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy + // [320] phi (dword) score_bcd#16 = (dword) score_bcd#18 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy + // [320] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#4] -- register_copy jmp breturn // play_update_score::@return breturn: - // [322] return + // [321] return rts } // play_increase_level @@ -16091,9 +16093,9 @@ play_increase_level: { .label _1 = $ba .label _5 = $bb .label b = $4c - // [323] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1 + // [322] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1 inc level - // [324] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1 + // [323] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1 // Update speed of moving tetrominos down lda level cmp #$1d+1 @@ -16101,68 +16103,68 @@ play_increase_level: { jmp b3 // play_increase_level::@3 b3: - // [325] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2 + // [324] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2 ldy level lda MOVEDOWN_SLOW_SPEEDS,y sta current_movedown_slow - // [326] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1] + // [325] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1] b1_from_b3: - // [326] phi (byte) current_movedown_slow#66 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy + // [325] phi (byte) current_movedown_slow#66 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy jmp b1 - // [326] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1] + // [325] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1] b1_from_play_increase_level: - // [326] phi (byte) current_movedown_slow#66 = (byte) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1 + // [325] phi (byte) current_movedown_slow#66 = (byte) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1 lda #1 sta current_movedown_slow jmp b1 // play_increase_level::@1 b1: - // [327] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1 + // [326] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1 inc level_bcd - // [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + // [327] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 lda #$f and level_bcd sta _1 - // [329] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 -- vbuz1_neq_vbuc1_then_la1 + // [328] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$a cmp _1 bne b2_from_b1 jmp b4 // play_increase_level::@4 b4: - // [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 -- vbuz1=vbuz1_plus_vbuc1 + // [329] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 -- vbuz1=vbuz1_plus_vbuc1 // If level low nybble hits $a change to $10 lax level_bcd axs #-[6] stx level_bcd - // [331] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2] + // [330] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2] b2_from_b1: b2_from_b4: - // [331] phi (byte) level_bcd#62 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy + // [330] phi (byte) level_bcd#62 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy jmp b2 // play_increase_level::@2 b2: // asm { sed } // Increase the score values gained sed - // [333] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5] + // [332] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5] b5_from_b2: - // [333] phi (byte) play_increase_level::b#2 = (byte) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuz1=vbuc1 + // [332] phi (byte) play_increase_level::b#2 = (byte) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuz1=vbuc1 lda #0 sta b jmp b5 - // [333] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5] + // [332] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5] b5_from_b5: - // [333] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy + // [332] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy jmp b5 // play_increase_level::@5 b5: - // [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [333] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda b asl asl sta _5 - // [335] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) -- pduc1_derefidx_vbuz1=pduc1_derefidx_vbuz1_plus_pduc2_derefidx_vbuz1 + // [334] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) -- pduc1_derefidx_vbuz1=pduc1_derefidx_vbuz1_plus_pduc2_derefidx_vbuz1 ldy _5 clc lda score_add_bcd,y @@ -16177,9 +16179,9 @@ play_increase_level: { lda score_add_bcd+3,y adc SCORE_BASE_BCD+3,y sta score_add_bcd+3,y - // [336] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuz1=_inc_vbuz1 + // [335] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuz1=_inc_vbuz1 inc b - // [337] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 -- vbuz1_neq_vbuc1_then_la1 + // [336] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 -- vbuz1_neq_vbuc1_then_la1 lda #5 cmp b bne b5_from_b5 @@ -16191,7 +16193,7 @@ play_increase_level: { jmp breturn // play_increase_level::@return breturn: - // [339] return + // [338] return rts } // play_remove_lines @@ -16208,144 +16210,144 @@ play_remove_lines: { .label y = $4d .label removed = $4e .label full = $51 - // [341] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1] + // [340] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1] b1_from_play_remove_lines: - // [341] phi (byte) play_remove_lines::removed#11 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1 + // [340] phi (byte) play_remove_lines::removed#11 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1 lda #0 sta removed - // [341] phi (byte) play_remove_lines::y#8 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1 + // [340] phi (byte) play_remove_lines::y#8 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1 lda #0 sta y - // [341] phi (byte) play_remove_lines::w#12 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuz1=vbuc1 + // [340] phi (byte) play_remove_lines::w#12 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuz1=vbuc1 lda #PLAYFIELD_LINES*PLAYFIELD_COLS-1 sta w - // [341] phi (byte) play_remove_lines::r#3 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuz1=vbuc1 + // [340] phi (byte) play_remove_lines::r#3 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuz1=vbuc1 lda #PLAYFIELD_LINES*PLAYFIELD_COLS-1 sta r jmp b1 // Read all lines and rewrite them - // [341] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1] + // [340] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1] b1_from_b6: - // [341] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#8 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy - // [341] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy - // [341] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy - // [341] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy + // [340] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#8 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy + // [340] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy + // [340] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy + // [340] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy jmp b1 // play_remove_lines::@1 b1: - // [342] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2] + // [341] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2] b2_from_b1: - // [342] phi (byte) play_remove_lines::full#4 = (byte) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1 + // [341] phi (byte) play_remove_lines::full#4 = (byte) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1 lda #1 sta full - // [342] phi (byte) play_remove_lines::x#2 = (byte) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1 + // [341] phi (byte) play_remove_lines::x#2 = (byte) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1 lda #0 sta x - // [342] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy - // [342] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy + // [341] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy + // [341] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy jmp b2 - // [342] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2] + // [341] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2] b2_from_b3: - // [342] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy - // [342] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy - // [342] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy - // [342] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy + // [341] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy + // [341] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy + // [341] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy + // [341] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy jmp b2 // play_remove_lines::@2 b2: - // [343] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [342] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuz2 ldy r lda playfield,y sta c - // [344] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuz1=_dec_vbuz1 + // [343] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuz1=_dec_vbuz1 dec r - // [345] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1 + // [344] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1 lda c cmp #0 bne b9_from_b2 - // [347] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3] + // [346] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3] b3_from_b2: - // [347] phi (byte) play_remove_lines::full#2 = (byte) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1 + // [346] phi (byte) play_remove_lines::full#2 = (byte) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1 lda #0 sta full jmp b3 - // [346] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9] + // [345] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9] b9_from_b2: jmp b9 // play_remove_lines::@9 b9: - // [347] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3] + // [346] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3] b3_from_b9: - // [347] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy + // [346] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy jmp b3 // play_remove_lines::@3 b3: - // [348] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [347] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuz1=vbuz2 lda c ldy w sta playfield,y - // [349] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuz1=_dec_vbuz1 + // [348] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuz1=_dec_vbuz1 dec w - // [350] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1 + // [349] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1 inc x - // [351] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte) 1+(byte) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1 + // [350] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte) 1+(byte) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_COLS-1+1 cmp x bne b2_from_b3 jmp b4 // play_remove_lines::@4 b4: - // [352] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1 + // [351] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1 lda #1 cmp full bne b6_from_b4 jmp b5 // play_remove_lines::@5 b5: - // [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 -- vbuz1=vbuz1_plus_vbuc1 + // [352] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 -- vbuz1=vbuz1_plus_vbuc1 lax w axs #-[PLAYFIELD_COLS] stx w - // [354] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1 + // [353] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1 inc removed - // [355] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6] + // [354] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6] b6_from_b4: b6_from_b5: - // [355] phi (byte) play_remove_lines::removed#8 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy - // [355] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy + // [354] phi (byte) play_remove_lines::removed#8 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy + // [354] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy jmp b6 // play_remove_lines::@6 b6: - // [356] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1 + // [355] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1 inc y - // [357] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1 + // [356] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_LINES-1+1 cmp y bne b1_from_b6 - // [358] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7] + // [357] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7] b7_from_b6: b7_from_b8: - // [358] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy + // [357] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy jmp b7 // Write zeros in the rest of the lines // play_remove_lines::@7 b7: - // [359] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 -- vbuz1_neq_vbuc1_then_la1 + // [358] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 -- vbuz1_neq_vbuc1_then_la1 lda #$ff cmp w bne b8 jmp breturn // play_remove_lines::@return breturn: - // [360] return + // [359] return rts // play_remove_lines::@8 b8: - // [361] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [360] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 lda #0 ldy w sta playfield,y - // [362] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuz1=_dec_vbuz1 + // [361] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuz1=_dec_vbuz1 dec w jmp b7_from_b8 } @@ -16363,49 +16365,49 @@ play_lock_current: { .label i_3 = $55 .label i_7 = $55 .label i_9 = $55 - // [363] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 -- vbuz1=vbuz2 + // [362] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 -- vbuz1=vbuz2 lda current_ypos sta yp - // [364] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1] + // [363] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1] b1_from_play_lock_current: - // [364] phi (byte) play_lock_current::l#6 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1 + // [363] phi (byte) play_lock_current::l#6 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1 lda #0 sta l - // [364] phi (byte) play_lock_current::i#3 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1 + // [363] phi (byte) play_lock_current::i#3 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1 lda #0 sta i_3 - // [364] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy + // [363] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy jmp b1 // play_lock_current::@1 b1: - // [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [364] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda yp asl sta _4 - // [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) -- pbuz1=pptc1_derefidx_vbuz2 + // [365] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) -- pbuz1=pptc1_derefidx_vbuz2 ldy _4 lda playfield_lines,y sta playfield_line lda playfield_lines+1,y sta playfield_line+1 - // [367] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 -- vbuz1=vbuz2 + // [366] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 -- vbuz1=vbuz2 lda current_xpos sta xp - // [368] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2] + // [367] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2] b2_from_b1: - // [368] phi (byte) play_lock_current::c#2 = (byte) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuz1=vbuc1 + // [367] phi (byte) play_lock_current::c#2 = (byte) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuz1=vbuc1 lda #0 sta c - // [368] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy - // [368] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy + // [367] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy + // [367] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy jmp b2 // play_lock_current::@2 b2: - // [369] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2 + // [368] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2 ldy i_2 iny sty i - // [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1 + // [369] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1 ldy i_2 lda (current_piece_gfx),y cmp #0 @@ -16413,58 +16415,58 @@ play_lock_current: { jmp b4 // play_lock_current::@4 b4: - // [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3 + // [370] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3 lda current_piece_char ldy xp sta (playfield_line),y jmp b3 // play_lock_current::@3 b3: - // [372] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 -- vbuz1=_inc_vbuz1 + // [371] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 -- vbuz1=_inc_vbuz1 inc xp - // [373] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuz1=_inc_vbuz1 + // [372] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuz1=_inc_vbuz1 inc c - // [374] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 -- vbuz1_neq_vbuc1_then_la1 + // [373] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp c bne b7 jmp b5 // play_lock_current::@5 b5: - // [375] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 -- vbuz1=_inc_vbuz1 + // [374] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 -- vbuz1=_inc_vbuz1 inc yp - // [376] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1 + // [375] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1 inc l - // [377] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1 + // [376] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp l bne b6 jmp breturn // play_lock_current::@return breturn: - // [378] return + // [377] return rts // play_lock_current::@6 b6: - // [379] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 + // [378] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 lda i sta i_7 - // [364] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1] + // [363] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1] b1_from_b6: - // [364] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy - // [364] phi (byte) play_lock_current::i#3 = (byte~) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy - // [364] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy + // [363] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy + // [363] phi (byte) play_lock_current::i#3 = (byte~) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy + // [363] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy jmp b1 // play_lock_current::@7 b7: - // [380] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 + // [379] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 lda i sta i_9 - // [368] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2] + // [367] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2] b2_from_b7: - // [368] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy - // [368] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy - // [368] phi (byte) play_lock_current::i#2 = (byte~) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy + // [367] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy + // [367] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy + // [367] phi (byte) play_lock_current::i#2 = (byte~) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy jmp b2 } // keyboard_event_pressed @@ -16482,21 +16484,21 @@ keyboard_event_pressed: { .label keycode = $58 .label return_11 = $c4 .label return_12 = $a5 - // [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 -- vbuz1=vbuz2_ror_3 + // [381] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 -- vbuz1=vbuz2_ror_3 lda keycode lsr lsr lsr sta _0 - // [383] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) -- vbuz1=pbuc1_derefidx_vbuz2 + // [382] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) -- vbuz1=pbuc1_derefidx_vbuz2 ldy _0 lda keyboard_scan_values,y sta row_bits - // [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + // [383] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 lda #7 and keycode sta _1 - // [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 + // [384] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 lda row_bits ldy _1 and keyboard_matrix_col_bitmask,y @@ -16504,7 +16506,7 @@ keyboard_event_pressed: { jmp breturn // keyboard_event_pressed::@return breturn: - // [386] return + // [385] return rts } // keyboard_event_get @@ -16514,34 +16516,34 @@ keyboard_event_pressed: { keyboard_event_get: { .label return = $59 .label return_3 = $7a - // [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1 + // [386] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1 lda keyboard_events_size cmp #0 beq breturn_from_keyboard_event_get jmp b1 // keyboard_event_get::@1 b1: - // [388] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1 + // [387] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1 dec keyboard_events_size - // [389] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) -- vbuz1=pbuc1_derefidx_vbuz2 + // [388] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) -- vbuz1=pbuc1_derefidx_vbuz2 ldy keyboard_events_size lda keyboard_events,y sta return - // [390] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return] + // [389] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return] breturn_from_b1: - // [390] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy - // [390] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy + // [389] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy + // [389] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy jmp breturn - // [390] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return] + // [389] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return] breturn_from_keyboard_event_get: - // [390] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy - // [390] phi (byte) keyboard_event_get::return#2 = (byte) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuz1=vbuc1 + // [389] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy + // [389] phi (byte) keyboard_event_get::return#2 = (byte) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuz1=vbuc1 lda #$ff sta return jmp breturn // keyboard_event_get::@return breturn: - // [391] return + // [390] return rts } // keyboard_event_scan @@ -16562,39 +16564,39 @@ keyboard_event_scan: { .label row = $5a .label col = $5b .label event_type = $d2 - // [393] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7] + // [392] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7] b7_from_keyboard_event_scan: - // [393] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy - // [393] phi (byte) keyboard_event_scan::keycode#11 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1 + // [392] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy + // [392] phi (byte) keyboard_event_scan::keycode#11 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1 lda #0 sta keycode - // [393] phi (byte) keyboard_event_scan::row#2 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1 + // [392] phi (byte) keyboard_event_scan::row#2 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1 lda #0 sta row jmp b7 - // [393] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7] + // [392] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7] b7_from_b8: - // [393] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy - // [393] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy - // [393] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy + // [392] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy + // [392] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy + // [392] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy jmp b7 // keyboard_event_scan::@7 b7: - // [394] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuz1=vbuz2 + // [393] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuz1=vbuz2 lda row sta keyboard_matrix_read.rowid - // [395] call keyboard_matrix_read + // [394] call keyboard_matrix_read jsr keyboard_matrix_read - // [396] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 -- vbuz1=vbuz2 + // [395] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 -- vbuz1=vbuz2 lda keyboard_matrix_read.return sta keyboard_matrix_read.return_2 jmp b19 // keyboard_event_scan::@19 b19: - // [397] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuz2 + // [396] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuz2 lda keyboard_matrix_read.return_2 sta row_scan - // [398] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 + // [397] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 lda row_scan ldy row cmp keyboard_scan_values,y @@ -16602,143 +16604,143 @@ keyboard_event_scan: { jmp b16 // keyboard_event_scan::@16 b16: - // [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 + // [398] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 lax keycode axs #-[8] stx keycode - // [400] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8] + // [399] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8] b8_from_b15: b8_from_b16: - // [400] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy - // [400] phi (byte) keyboard_event_scan::keycode#13 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy + // [399] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy + // [399] phi (byte) keyboard_event_scan::keycode#13 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy jmp b8 // keyboard_event_scan::@8 b8: - // [401] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1 + // [400] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1 inc row - // [402] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1 + // [401] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp row bne b7_from_b8 - // [403] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17] + // [402] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17] b17_from_b8: jmp b17 // keyboard_event_scan::@17 b17: - // [404] call keyboard_event_pressed - // [381] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed] + // [403] call keyboard_event_pressed + // [380] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed] keyboard_event_pressed_from_b17: - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_LSHIFT#0 [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_LSHIFT#0 [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_LSHIFT sta keyboard_event_pressed.keycode jsr keyboard_event_pressed - // [405] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 + // [404] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 lda keyboard_event_pressed.return_11 sta keyboard_event_pressed.return jmp b20 // keyboard_event_scan::@20 b20: - // [406] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 -- vbuz1=vbuz2 + // [405] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_event_pressed.return sta _0 - // [407] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -- vbuz1_eq_0_then_la1 + // [406] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -- vbuz1_eq_0_then_la1 lda _0 cmp #0 beq b1_from_b20 - // [408] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18] + // [407] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18] b18_from_b20: jmp b18 // keyboard_event_scan::@18 b18: - // [409] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1] + // [408] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1] b1_from_b18: b1_from_b20: jmp b1 // keyboard_event_scan::@1 b1: - // [410] call keyboard_event_pressed - // [381] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed] + // [409] call keyboard_event_pressed + // [380] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed] keyboard_event_pressed_from_b1: - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_RSHIFT#0 [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_RSHIFT#0 [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_RSHIFT sta keyboard_event_pressed.keycode jsr keyboard_event_pressed - // [411] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 + // [410] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 lda keyboard_event_pressed.return_11 sta keyboard_event_pressed.return_1 jmp b21 // keyboard_event_scan::@21 b21: - // [412] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 -- vbuz1=vbuz2 + // [411] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 -- vbuz1=vbuz2 lda keyboard_event_pressed.return_1 sta _3 - // [413] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -- vbuz1_eq_0_then_la1 + // [412] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -- vbuz1_eq_0_then_la1 lda _3 cmp #0 beq b2_from_b21 - // [414] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4] + // [413] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4] b4_from_b21: jmp b4 // keyboard_event_scan::@4 b4: - // [415] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2] + // [414] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2] b2_from_b21: b2_from_b4: jmp b2 // keyboard_event_scan::@2 b2: - // [416] call keyboard_event_pressed - // [381] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed] + // [415] call keyboard_event_pressed + // [380] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed] keyboard_event_pressed_from_b2: - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_CTRL#0 [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_CTRL#0 [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_CTRL sta keyboard_event_pressed.keycode jsr keyboard_event_pressed - // [417] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 + // [416] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 lda keyboard_event_pressed.return_11 sta keyboard_event_pressed.return_2 jmp b22 // keyboard_event_scan::@22 b22: - // [418] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 -- vbuz1=vbuz2 + // [417] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 -- vbuz1=vbuz2 lda keyboard_event_pressed.return_2 sta _6 - // [419] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -- vbuz1_eq_0_then_la1 + // [418] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -- vbuz1_eq_0_then_la1 lda _6 cmp #0 beq b3_from_b22 - // [420] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5] + // [419] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5] b5_from_b22: jmp b5 // keyboard_event_scan::@5 b5: - // [421] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3] + // [420] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3] b3_from_b22: b3_from_b5: jmp b3 // keyboard_event_scan::@3 b3: - // [422] call keyboard_event_pressed - // [381] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed] + // [421] call keyboard_event_pressed + // [380] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed] keyboard_event_pressed_from_b3: - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_COMMODORE#0 [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_COMMODORE#0 [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_COMMODORE sta keyboard_event_pressed.keycode jsr keyboard_event_pressed - // [423] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 + // [422] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 lda keyboard_event_pressed.return_11 sta keyboard_event_pressed.return_10 jmp b23 // keyboard_event_scan::@23 b23: - // [424] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 -- vbuz1=vbuz2 + // [423] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 -- vbuz1=vbuz2 lda keyboard_event_pressed.return_10 sta _9 - // [425] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -- vbuz1_eq_0_then_la1 + // [424] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -- vbuz1_eq_0_then_la1 lda _9 cmp #0 beq breturn - // [426] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6] + // [425] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6] b6_from_b23: jmp b6 // keyboard_event_scan::@6 @@ -16746,89 +16748,89 @@ keyboard_event_scan: { jmp breturn // keyboard_event_scan::@return breturn: - // [427] return + // [426] return rts // Something has changed on the keyboard row - check each column - // [428] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9] + // [427] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9] b9_from_b10: - // [428] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy - // [428] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy - // [428] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy + // [427] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy + // [427] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy + // [427] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy jmp b9 - // [428] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9] + // [427] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9] b9_from_b19: - // [428] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy - // [428] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy - // [428] phi (byte) keyboard_event_scan::col#2 = (byte) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuz1=vbuc1 + // [427] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy + // [427] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy + // [427] phi (byte) keyboard_event_scan::col#2 = (byte) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuz1=vbuc1 lda #0 sta col jmp b9 // keyboard_event_scan::@9 b9: - // [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) -- vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuz3 + // [428] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) -- vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuz3 lda row_scan ldy row eor keyboard_scan_values,y sta _15 - // [430] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 + // [429] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 lda _15 ldy col and keyboard_matrix_col_bitmask,y sta _16 - // [431] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 -- vbuz1_eq_0_then_la1 + // [430] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 -- vbuz1_eq_0_then_la1 lda _16 cmp #0 beq b10_from_b9 jmp b12 // keyboard_event_scan::@12 b12: - // [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1 + // [431] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1 lda #8 cmp keyboard_events_size beq b10_from_b12 jmp b13 // keyboard_event_scan::@13 b13: - // [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 + // [432] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 lda row_scan ldy col and keyboard_matrix_col_bitmask,y sta event_type - // [434] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 -- vbuz1_eq_0_then_la1 + // [433] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 -- vbuz1_eq_0_then_la1 lda event_type cmp #0 beq b11 jmp b14 // keyboard_event_scan::@14 b14: - // [435] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2 + // [434] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2 // Key pressed lda keycode ldy keyboard_events_size sta keyboard_events,y - // [436] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 + // [435] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 inc keyboard_events_size - // [437] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10] + // [436] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10] b10_from_b11: b10_from_b12: b10_from_b14: b10_from_b9: - // [437] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy + // [436] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy jmp b10 // keyboard_event_scan::@10 b10: - // [438] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1 + // [437] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1 inc keycode - // [439] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuz1=_inc_vbuz1 + // [438] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuz1=_inc_vbuz1 inc col - // [440] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 -- vbuz1_neq_vbuc1_then_la1 + // [439] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp col bne b9_from_b10 jmp b15 // keyboard_event_scan::@15 b15: - // [441] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [440] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2 // Store the current keyboard status for the row to debounce lda row_scan ldy row @@ -16836,16 +16838,16 @@ keyboard_event_scan: { jmp b8_from_b15 // keyboard_event_scan::@11 b11: - // [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 -- vbuz1=vbuz2_bor_vbuc1 + // [441] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 -- vbuz1=vbuz2_bor_vbuc1 lda #$40 ora keycode sta _23 - // [443] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuz2 + // [442] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuz2 // Key released lda _23 ldy keyboard_events_size sta keyboard_events,y - // [444] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 + // [443] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 inc keyboard_events_size jmp b10_from_b11 } @@ -16860,18 +16862,18 @@ keyboard_matrix_read: { .label return = $d4 .label rowid = $c5 .label return_2 = $c6 - // [445] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [444] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy rowid lda keyboard_matrix_row_bitmask,y sta CIA1_PORT_A - // [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) -- vbuz1=_bnot__deref_pbuc1 + // [445] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) -- vbuz1=_bnot__deref_pbuc1 lda CIA1_PORT_B eor #$ff sta return jmp breturn // keyboard_matrix_read::@return breturn: - // [447] return + // [446] return rts } // render_show @@ -16880,50 +16882,50 @@ render_show: { .const toD0181_return = (>(PLAYFIELD_SCREEN_1&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f .const toD0182_return = (>(PLAYFIELD_SCREEN_2&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f .label d018val = $5e - // [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1 + // [447] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1 lda render_screen_show cmp #0 beq toD0181_from_render_show - // [449] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182] + // [448] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182] toD0182_from_render_show: jmp toD0182 // render_show::toD0182 toD0182: - // [450] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1] + // [449] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1] b1_from_toD0182: - // [450] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuz1=vbuc1 + // [449] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuz1=vbuc1 lda #toD0182_return sta d018val jmp b1 // render_show::@1 b1: - // [451] *((const byte*) D018#0) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuz1 + // [450] *((const byte*) D018#0) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuz1 lda d018val sta D018 - // [452] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [451] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy level lda PIECES_COLORS_1,y sta BGCOL2 - // [453] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [452] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy level lda PIECES_COLORS_2,y sta BGCOL3 - // [454] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 -- vbuz1=vbuz2 + // [453] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 -- vbuz1=vbuz2 lda render_screen_show sta render_screen_showing jmp breturn // render_show::@return breturn: - // [455] return + // [454] return rts - // [456] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181] + // [455] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181] toD0181_from_render_show: jmp toD0181 // render_show::toD0181 toD0181: - // [450] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1] + // [449] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1] b1_from_toD0181: - // [450] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuz1=vbuc1 + // [449] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuz1=vbuc1 lda #toD0181_return sta d018val jmp b1 @@ -16937,43 +16939,43 @@ play_init: { .label idx = $62 .label j = $5f .label b = $63 - // [458] phi from play_init to play_init::@1 [phi:play_init->play_init::@1] + // [457] phi from play_init to play_init::@1 [phi:play_init->play_init::@1] b1_from_play_init: - // [458] phi (byte) play_init::idx#2 = (byte) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1 + // [457] phi (byte) play_init::idx#2 = (byte) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1 lda #0 sta idx - // [458] phi (byte*) play_init::pli#2 = (const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1 + // [457] phi (byte*) play_init::pli#2 = (const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1 lda #playfield sta pli+1 - // [458] phi (byte) play_init::j#2 = (byte) 0 [phi:play_init->play_init::@1#2] -- vbuz1=vbuc1 + // [457] phi (byte) play_init::j#2 = (byte) 0 [phi:play_init->play_init::@1#2] -- vbuz1=vbuc1 lda #0 sta j jmp b1 - // [458] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1] + // [457] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1] b1_from_b1: - // [458] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy - // [458] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy - // [458] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy + // [457] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy + // [457] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy + // [457] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy jmp b1 // play_init::@1 b1: - // [459] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [458] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda j asl sta _4 - // [460] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuz1=pbuz2 + // [459] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuz1=pbuz2 ldy _4 lda pli sta playfield_lines,y lda pli+1 sta playfield_lines+1,y - // [461] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [460] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda idx ldy j sta playfield_lines_idx,y - // [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 -- pbuz1=pbuz1_plus_vbuc1 + // [461] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 -- pbuz1=pbuz1_plus_vbuc1 lda #PLAYFIELD_COLS clc adc pli @@ -16981,45 +16983,45 @@ play_init: { bcc !+ inc pli+1 !: - // [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 -- vbuz1=vbuz1_plus_vbuc1 + // [462] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 -- vbuz1=vbuz1_plus_vbuc1 lax idx axs #-[PLAYFIELD_COLS] stx idx - // [464] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuz1=_inc_vbuz1 + // [463] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuz1=_inc_vbuz1 inc j - // [465] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_init::@1 -- vbuz1_neq_vbuc1_then_la1 + // [464] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_init::@1 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_LINES-1+1 cmp j bne b1_from_b1 jmp b2 // play_init::@2 b2: - // [466] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 -- _deref_pbuc1=vbuc2 + // [465] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 -- _deref_pbuc1=vbuc2 lda #PLAYFIELD_COLS*PLAYFIELD_LINES sta playfield_lines_idx+PLAYFIELD_LINES - // [467] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) -- vbuz1=_deref_pbuc1 + // [466] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) -- vbuz1=_deref_pbuc1 // Set initial speed of moving down a tetromino lda MOVEDOWN_SLOW_SPEEDS sta current_movedown_slow - // [468] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3] + // [467] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3] b3_from_b2: - // [468] phi (byte) play_init::b#2 = (byte) 0 [phi:play_init::@2->play_init::@3#0] -- vbuz1=vbuc1 + // [467] phi (byte) play_init::b#2 = (byte) 0 [phi:play_init::@2->play_init::@3#0] -- vbuz1=vbuc1 lda #0 sta b jmp b3 // Set the initial score add values - // [468] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3] + // [467] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3] b3_from_b3: - // [468] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy + // [467] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy jmp b3 // play_init::@3 b3: - // [469] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [468] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda b asl asl sta _5 - // [470] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) -- pduc1_derefidx_vbuz1=pduc2_derefidx_vbuz1 + // [469] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) -- pduc1_derefidx_vbuz1=pduc2_derefidx_vbuz1 ldy _5 lda SCORE_BASE_BCD,y sta score_add_bcd,y @@ -17029,16 +17031,16 @@ play_init: { sta score_add_bcd+2,y lda SCORE_BASE_BCD+3,y sta score_add_bcd+3,y - // [471] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuz1=_inc_vbuz1 + // [470] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuz1=_inc_vbuz1 inc b - // [472] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 -- vbuz1_neq_vbuc1_then_la1 + // [471] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 -- vbuz1_neq_vbuc1_then_la1 lda #5 cmp b bne b3_from_b3 jmp breturn // play_init::@return breturn: - // [473] return + // [472] return rts } // sprites_irq_init @@ -17046,36 +17048,36 @@ play_init: { sprites_irq_init: { // asm { sei } sei - // [475] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 + // [474] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 // Acknowledge any IRQ and setup the next one lda #IRQ_RASTER sta IRQ_STATUS // asm { ldaCIA1_INTERRUPT } lda CIA1_INTERRUPT - // [477] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2 + // [476] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR - // [478] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2 + // [477] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [479] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2 + // [478] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT - // [480] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [479] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line lda #$7f and VIC_CONTROL sta VIC_CONTROL - // [481] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 -- _deref_pbuc1=vbuc2 + // [480] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 -- _deref_pbuc1=vbuc2 lda #IRQ_RASTER_FIRST sta RASTER - // [482] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 + // [481] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE - // [483] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2 + // [482] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #sprites_init::@1] + // [489] phi from sprites_init to sprites_init::@1 [phi:sprites_init->sprites_init::@1] b1_from_sprites_init: - // [490] phi (byte) sprites_init::xpos#2 = (byte)(number) $18+(number) $f*(number) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1 + // [489] phi (byte) sprites_init::xpos#2 = (byte)(number) $18+(number) $f*(number) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1 lda #$18+$f*8 sta xpos - // [490] phi (byte) sprites_init::s#2 = (byte) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuz1=vbuc1 + // [489] phi (byte) sprites_init::s#2 = (byte) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuz1=vbuc1 lda #0 sta s jmp b1 - // [490] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1] + // [489] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1] b1_from_b1: - // [490] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy - // [490] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy + // [489] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy + // [489] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy jmp b1 // sprites_init::@1 b1: - // [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [490] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda s asl sta s2 - // [492] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [491] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda xpos ldy s2 sta SPRITES_XPOS,y - // [493] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [492] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuz1=vbuc2 lda #BLACK ldy s sta SPRITES_COLS,y - // [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 + // [493] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 lax xpos axs #-[$18] stx xpos - // [495] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuz1=_inc_vbuz1 + // [494] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuz1=_inc_vbuz1 inc s - // [496] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 -- vbuz1_neq_vbuc1_then_la1 + // [495] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp s bne b1_from_b1 jmp breturn // sprites_init::@return breturn: - // [497] return + // [496] return rts } // render_init @@ -17162,10 +17164,10 @@ render_init: { jmp vicSelectGfxBank1 // render_init::vicSelectGfxBank1 vicSelectGfxBank1: - // [499] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [498] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 sta CIA2_PORT_A_DDR - // [500] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] + // [499] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 // render_init::vicSelectGfxBank1_toDd001 @@ -17173,95 +17175,95 @@ render_init: { jmp vicSelectGfxBank1_b1 // render_init::vicSelectGfxBank1_@1 vicSelectGfxBank1_b1: - // [501] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [500] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return sta CIA2_PORT_A jmp b2 // render_init::@2 b2: - // [502] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 -- _deref_pbuc1=vbuc2 + // [501] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 -- _deref_pbuc1=vbuc2 // Enable Extended Background Color Mode lda #VIC_ECM|VIC_DEN|VIC_RSEL|3 sta D011 - // [503] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 + // [502] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 lda #BLACK sta BORDERCOL - // [504] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 + // [503] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 lda #BLACK sta BGCOL1 - // [505] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) -- _deref_pbuc1=_deref_pbuc2 + // [504] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) -- _deref_pbuc1=_deref_pbuc2 lda PIECES_COLORS_1 sta BGCOL2 - // [506] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) -- _deref_pbuc1=_deref_pbuc2 + // [505] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) -- _deref_pbuc1=_deref_pbuc2 lda PIECES_COLORS_2 sta BGCOL3 - // [507] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 -- _deref_pbuc1=vbuc2 + // [506] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 -- _deref_pbuc1=vbuc2 lda #GREY sta BGCOL4 - // [508] call render_screen_original - // [520] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original] + // [507] call render_screen_original + // [519] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original] render_screen_original_from_b2: - // [520] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_1#0 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1 + // [519] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_1#0 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_1 sta render_screen_original.screen+1 jsr render_screen_original - // [509] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3] + // [508] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3] b3_from_b2: jmp b3 // render_init::@3 b3: - // [510] call render_screen_original - // [520] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original] + // [509] call render_screen_original + // [519] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original] render_screen_original_from_b3: - // [520] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_2#0 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1 + // [519] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_2#0 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_2 sta render_screen_original.screen+1 jsr render_screen_original - // [511] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1] + // [510] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1] b1_from_b3: - // [511] phi (byte*) render_init::li_2#2 = (const byte*) PLAYFIELD_SCREEN_2#0+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1 + // [510] phi (byte*) render_init::li_2#2 = (const byte*) PLAYFIELD_SCREEN_2#0+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_2+2*$28+$10 sta li_2+1 - // [511] phi (byte*) render_init::li_1#2 = (const byte*) PLAYFIELD_SCREEN_1#0+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1 + // [510] phi (byte*) render_init::li_1#2 = (const byte*) PLAYFIELD_SCREEN_1#0+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_1+2*$28+$10 sta li_1+1 - // [511] phi (byte) render_init::i#2 = (byte) 0 [phi:render_init::@3->render_init::@1#2] -- vbuz1=vbuc1 + // [510] phi (byte) render_init::i#2 = (byte) 0 [phi:render_init::@3->render_init::@1#2] -- vbuz1=vbuc1 lda #0 sta i jmp b1 - // [511] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1] + // [510] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1] b1_from_b1: - // [511] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy - // [511] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy - // [511] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy + // [510] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy + // [510] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy + // [510] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy jmp b1 // render_init::@1 b1: - // [512] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [511] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _13 - // [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuz1=pbuz2 + // [512] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuz1=pbuz2 ldy _13 lda li_1 sta screen_lines_1,y lda li_1+1 sta screen_lines_1+1,y - // [514] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuz1=pbuz2 + // [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuz1=pbuz2 ldy _13 lda li_2 sta screen_lines_2,y lda li_2+1 sta screen_lines_2+1,y - // [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [514] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc li_1 @@ -17269,7 +17271,7 @@ render_init: { bcc !+ inc li_1+1 !: - // [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [515] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc li_2 @@ -17277,16 +17279,16 @@ render_init: { bcc !+ inc li_2+1 !: - // [517] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuz1=_inc_vbuz1 + // [516] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuz1=_inc_vbuz1 inc i - // [518] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto render_init::@1 -- vbuz1_neq_vbuc1_then_la1 + // [517] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto render_init::@1 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_LINES-1+1 cmp i bne b1_from_b1 jmp breturn // render_init::@return breturn: - // [519] return + // [518] return rts } // render_screen_original @@ -17301,188 +17303,188 @@ render_screen_original: { .label oscr = $6c .label ocols = $6e .label y = $6b - // [521] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1] + // [520] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1] b1_from_render_screen_original: - // [521] phi (byte) render_screen_original::y#6 = (byte) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1 + // [520] phi (byte) render_screen_original::y#6 = (byte) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1 lda #0 sta y - // [521] phi (byte*) render_screen_original::ocols#4 = (const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1 + // [520] phi (byte*) render_screen_original::ocols#4 = (const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1 lda #PLAYFIELD_COLORS_ORIGINAL+$20*2 sta ocols+1 - // [521] phi (byte*) render_screen_original::oscr#4 = (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1 + // [520] phi (byte*) render_screen_original::oscr#4 = (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_ORIGINAL+$20*2 sta oscr+1 - // [521] phi (byte*) render_screen_original::cols#7 = (const byte*) COLS#0 [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1 + // [520] phi (byte*) render_screen_original::cols#7 = (const byte*) COLS#0 [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1 lda #COLS sta cols+1 - // [521] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy + // [520] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy jmp b1 - // [521] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1] + // [520] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1] b1_from_b5: - // [521] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy - // [521] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy - // [521] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy - // [521] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy - // [521] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy + // [520] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy + // [520] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy + // [520] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy + // [520] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy + // [520] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy jmp b1 // render_screen_original::@1 b1: - // [522] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2] + // [521] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2] b2_from_b1: - // [522] phi (byte) render_screen_original::x#4 = (byte) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuz1=vbuc1 + // [521] phi (byte) render_screen_original::x#4 = (byte) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuz1=vbuc1 lda #0 sta x - // [522] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy - // [522] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy + // [521] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy + // [521] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy jmp b2 - // [522] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2] + // [521] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2] b2_from_b2: - // [522] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy - // [522] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy - // [522] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy + // [521] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy + // [521] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy + // [521] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy jmp b2 // render_screen_original::@2 b2: - // [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1 + // [522] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1 lda #SPACE ldy #0 sta (screen),y - // [524] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1 + // [523] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 + // [524] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 lda #BLACK ldy #0 sta (cols),y - // [526] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1 + // [525] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1 inc cols bne !+ inc cols+1 !: - // [527] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuz1=_inc_vbuz1 + // [526] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuz1=_inc_vbuz1 inc x - // [528] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -- vbuz1_neq_vbuc1_then_la1 + // [527] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp x bne b2_from_b2 - // [529] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3] + // [528] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3] b3_from_b2: b3_from_b3: - // [529] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy - // [529] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy - // [529] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy - // [529] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy - // [529] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy + // [528] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy + // [528] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy + // [528] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy + // [528] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy + // [528] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy jmp b3 // render_screen_original::@3 b3: - // [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2 + // [529] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (oscr),y ldy #0 sta (screen),y - // [531] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1 + // [530] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [532] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1 + // [531] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1 inc oscr bne !+ inc oscr+1 !: - // [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2 + // [532] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (ocols),y ldy #0 sta (cols),y - // [534] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1 + // [533] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1 inc cols bne !+ inc cols+1 !: - // [535] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1 + // [534] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1 inc ocols bne !+ inc ocols+1 !: - // [536] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuz1=_inc_vbuz1 + // [535] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuz1=_inc_vbuz1 inc x - // [537] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -- vbuz1_neq_vbuc1_then_la1 + // [536] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -- vbuz1_neq_vbuc1_then_la1 lda #$24 cmp x bne b3_from_b3 - // [538] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4] + // [537] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4] b4_from_b3: b4_from_b4: - // [538] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy - // [538] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy - // [538] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy + // [537] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy + // [537] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy + // [537] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy jmp b4 // render_screen_original::@4 b4: - // [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1 + // [538] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1 lda #SPACE ldy #0 sta (screen),y - // [540] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1 + // [539] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 + // [540] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 lda #BLACK ldy #0 sta (cols),y - // [542] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1 + // [541] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1 inc cols bne !+ inc cols+1 !: - // [543] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuz1=_inc_vbuz1 + // [542] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuz1=_inc_vbuz1 inc x - // [544] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -- vbuz1_neq_vbuc1_then_la1 + // [543] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -- vbuz1_neq_vbuc1_then_la1 lda #$28 cmp x bne b4_from_b4 jmp b5 // render_screen_original::@5 b5: - // [545] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1 + // [544] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1 inc y - // [546] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1 + // [545] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp y bne b1_from_b5 jmp breturn // render_screen_original::@return breturn: - // [547] return + // [546] return rts } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [548] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [547] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff sta SID_VOICE3_FREQ lda #>$ffff sta SID_VOICE3_FREQ+1 - // [549] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [548] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL jmp breturn // sid_rnd_init::@return breturn: - // [550] return + // [549] return rts } // sprites_irq @@ -17507,124 +17509,124 @@ sprites_irq: { //(*BGCOL)++; // Clear decimal flag (because it is used by the score algorithm) cld - // [552] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 -- vbuz1=vbuz2 + // [551] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 -- vbuz1=vbuz2 // Place the sprites lda irq_sprite_ypos sta ypos - // [553] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 + // [552] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 lda ypos sta SPRITES_YPOS - // [554] *((const byte*) SPRITES_YPOS#0+(byte) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 + // [553] *((const byte*) SPRITES_YPOS#0+(byte) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 lda ypos sta SPRITES_YPOS+2 - // [555] *((const byte*) SPRITES_YPOS#0+(byte) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 + // [554] *((const byte*) SPRITES_YPOS#0+(byte) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 lda ypos sta SPRITES_YPOS+4 - // [556] *((const byte*) SPRITES_YPOS#0+(byte) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 + // [555] *((const byte*) SPRITES_YPOS#0+(byte) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 lda ypos sta SPRITES_YPOS+6 - // [557] (byte~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [556] (byte~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy irq_raster_next iny sty _0 - // [558] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte~) sprites_irq::$0 -- vbuz1=vbuz2 + // [557] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte~) sprites_irq::$0 -- vbuz1=vbuz2 // Wait for the y-position before changing sprite pointers lda _0 sta raster_sprite_gfx_modify jmp b8 // sprites_irq::@8 b8: - // [559] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 -- _deref_pbuc1_lt_vbuz1_then_la1 + // [558] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 -- _deref_pbuc1_lt_vbuz1_then_la1 lda RASTER cmp raster_sprite_gfx_modify bcc b8 jmp b9 // sprites_irq::@9 b9: - // [560] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0 -- vbuz1=vbuz2 + // [559] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0 -- vbuz1=vbuz2 lda irq_sprite_ptr sta ptr - // [561] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 -- vbuz1_eq_0_then_la1 + // [560] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 -- vbuz1_eq_0_then_la1 lda render_screen_showing cmp #0 beq b1 jmp b10 // sprites_irq::@10 b10: - // [562] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuz1 + // [561] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuz1 lda ptr sta PLAYFIELD_SPRITE_PTRS_2 - // [563] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuz1=_inc_vbuz2 + // [562] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuz1=_inc_vbuz2 ldy ptr iny sty ptr_3 - // [564] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuz1 + // [563] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuz1 lda ptr_3 sta PLAYFIELD_SPRITE_PTRS_2+1 - // [565] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuz1 + // [564] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuz1 lda ptr_3 sta PLAYFIELD_SPRITE_PTRS_2+2 - // [566] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 -- vbuz1=_inc_vbuz2 + // [565] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 -- vbuz1=_inc_vbuz2 ldy ptr_3 iny sty ptr_4 - // [567] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 3) ← (byte) sprites_irq::ptr#4 -- _deref_pbuc1=vbuz1 + // [566] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 3) ← (byte) sprites_irq::ptr#4 -- _deref_pbuc1=vbuz1 lda ptr_4 sta PLAYFIELD_SPRITE_PTRS_2+3 jmp b2 // sprites_irq::@2 b2: - // [568] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 -- vbuz1=_inc_vbuz1 + // [567] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 -- vbuz1=_inc_vbuz1 inc irq_cnt - // [569] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 -- vbuz1_eq_vbuc1_then_la1 + // [568] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 -- vbuz1_eq_vbuc1_then_la1 lda #9 cmp irq_cnt beq b3 jmp b6 // sprites_irq::@6 b6: - // [570] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1 + // [569] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1 lda #$a cmp irq_cnt beq b4 jmp b7 // sprites_irq::@7 b7: - // [571] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 -- vbuz1=vbuz1_plus_vbuc1 + // [570] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 -- vbuz1=vbuz1_plus_vbuc1 lax irq_raster_next axs #-[$14] stx irq_raster_next - // [572] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [571] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax irq_sprite_ypos axs #-[$15] stx irq_sprite_ypos - // [573] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [572] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax irq_sprite_ptr axs #-[3] stx irq_sprite_ptr - // [574] phi from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 to sprites_irq::@5 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5] + // [573] phi from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 to sprites_irq::@5 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5] b5_from_b11: b5_from_b4: b5_from_b7: - // [574] phi (byte) irq_sprite_ptr#11 = (byte) irq_sprite_ptr#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy - // [574] phi (byte) irq_sprite_ypos#11 = (byte) irq_sprite_ypos#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#1] -- register_copy - // [574] phi (byte) irq_cnt#3 = (byte) irq_cnt#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#2] -- register_copy - // [574] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#3] -- register_copy + // [573] phi (byte) irq_sprite_ptr#11 = (byte) irq_sprite_ptr#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy + // [573] phi (byte) irq_sprite_ypos#11 = (byte) irq_sprite_ypos#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#1] -- register_copy + // [573] phi (byte) irq_cnt#3 = (byte) irq_cnt#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#2] -- register_copy + // [573] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#3] -- register_copy jmp b5 // sprites_irq::@5 b5: - // [575] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1 + // [574] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1 // Setup next interrupt lda irq_raster_next sta RASTER - // [576] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 + // [575] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ and setup the next one lda #IRQ_RASTER sta IRQ_STATUS jmp breturn // sprites_irq::@return breturn: - // [577] return - exit interrupt(HARDWARE_CLOBBER) + // [576] return - exit interrupt(HARDWARE_CLOBBER) rega: lda #00 regx: @@ -17634,31 +17636,31 @@ sprites_irq: { rti // sprites_irq::@4 b4: - // [578] (byte) irq_cnt#2 ← (byte) 0 -- vbuz1=vbuc1 + // [577] (byte) irq_cnt#2 ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta irq_cnt - // [579] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1 + // [578] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1 lda #IRQ_RASTER_FIRST sta irq_raster_next - // [580] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [579] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax irq_sprite_ypos axs #-[$15] stx irq_sprite_ypos - // [581] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [580] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax irq_sprite_ptr axs #-[3] stx irq_sprite_ptr jmp b5_from_b4 // sprites_irq::@3 b3: - // [582] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [581] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax irq_raster_next axs #-[$15] stx irq_raster_next - // [583] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1 + // [582] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1 lda #SPRITES_FIRST_YPOS sta irq_sprite_ypos - // [584] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2] + // [583] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2] toSpritePtr2_from_b3: jmp toSpritePtr2 // sprites_irq::toSpritePtr2 @@ -17666,30 +17668,30 @@ sprites_irq: { jmp b11 // sprites_irq::@11 b11: - // [585] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1 + // [584] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1 lda #toSpritePtr2_return sta irq_sprite_ptr jmp b5_from_b11 // sprites_irq::@1 b1: - // [586] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuz1 + // [585] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuz1 lda ptr sta PLAYFIELD_SPRITE_PTRS_1 - // [587] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuz1=_inc_vbuz2 + // [586] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuz1=_inc_vbuz2 ldy ptr iny sty ptr_1 - // [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1 + // [587] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1 lda ptr_1 sta PLAYFIELD_SPRITE_PTRS_1+1 - // [589] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1 + // [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1 lda ptr_1 sta PLAYFIELD_SPRITE_PTRS_1+2 - // [590] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuz1=_inc_vbuz2 + // [589] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuz1=_inc_vbuz2 ldy ptr_1 iny sty ptr_2 - // [591] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuz1 + // [590] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuz1 lda ptr_2 sta PLAYFIELD_SPRITE_PTRS_1+3 jmp b2 @@ -17800,18 +17802,18 @@ Statement [7] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0 [ ren Statement [8] (byte) irq_sprite_ypos#0 ← (const byte) SPRITES_FIRST_YPOS#0+(byte) $15 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement [10] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0+(byte) 3 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement [11] (byte) irq_cnt#0 ← (byte) 0 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [33] (byte*~) current_piece_gfx#112 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#98 current_ypos#6 current_xpos#119 current_xpos#100 current_piece_gfx#112 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#98 current_ypos#6 current_xpos#119 current_xpos#100 current_piece_gfx#112 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [33] (byte*~) current_piece_gfx#112 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#98 current_ypos#6 current_xpos#119 current_xpos#100 current_piece_gfx#112 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#98 current_ypos#6 current_xpos#119 current_xpos#100 current_piece_gfx#112 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ current_ypos#13 current_ypos#98 current_ypos#99 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:173 [ play_spawn_current::$7 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] -Statement [38] (byte*~) current_piece#102 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#102 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#102 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [39] (byte*~) current_piece_gfx#124 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#102 current_piece_gfx#124 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#102 current_piece_gfx#124 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [38] (byte*~) current_piece#102 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_piece#102 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_piece#102 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [39] (byte*~) current_piece_gfx#124 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#1 current_piece#102 current_piece_gfx#124 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#1 current_piece#102 current_piece_gfx#124 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a Statement [41] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] @@ -17844,7 +17846,7 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:69 [ c Removing always clobbered register reg byte y as potential for zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] @@ -17853,39 +17855,39 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:65 [ l Removing always clobbered register reg byte y as potential for zp ZP_BYTE:13 [ 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 ] Statement [105] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte) $f [ render_bcd::screen_pos#3 render_bcd::$3 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen_pos#3 render_bcd::$3 ] ) always clobbers reg byte a Statement [107] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 [ ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte y -Statement [113] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ) always clobbers reg byte a +Statement [113] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ next_piece_idx#12 next_piece_idx#77 next_piece_idx#78 ] -Statement [115] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$6) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a +Statement [115] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$6) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:132 [ render_next::next_piece_char#0 ] -Statement [118] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y +Statement [118] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:173 [ play_spawn_current::$7 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:132 [ render_next::next_piece_char#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ render_next::c#2 render_next::c#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:23 [ render_next::c#2 render_next::c#1 ] -Statement [121] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y -Statement [125] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a -Statement [129] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y -Statement [134] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a +Statement [121] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y +Statement [125] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a +Statement [129] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y +Statement [134] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] -Statement [140] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ) always clobbers reg byte a +Statement [140] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] -Statement [141] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ) always clobbers reg byte a -Statement [142] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a -Statement [145] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a +Statement [141] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ) always clobbers reg byte a +Statement [142] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a +Statement [145] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ render_moving::c#2 render_moving::c#1 ] -Statement [148] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a -Statement [154] (byte~) render_playfield::$2 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ) always clobbers reg byte a +Statement [148] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a +Statement [154] (byte~) render_playfield::$2 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ render_screen_render#22 render_screen_render#64 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] -Statement [155] (byte~) render_playfield::$6 ← (byte~) render_playfield::$2 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] ) always clobbers reg byte a -Statement [156] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$6) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a -Statement [158] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y +Statement [155] (byte~) render_playfield::$6 ← (byte~) render_playfield::$2 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] ) always clobbers reg byte a +Statement [156] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$6) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a +Statement [158] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:35 [ render_screen_render#22 render_screen_render#64 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] @@ -17918,163 +17920,163 @@ Statement [215] if(*((byte*) play_collision::playfield_line#0 + (byte) play_coll Statement [231] (byte*~) current_piece#98 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#98 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#98 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ) always clobbers reg byte a Statement [242] (byte*~) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ) always clobbers reg byte a Statement [266] (byte*~) current_piece#96 ← (byte*) current_piece#10 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece#96 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece#96 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ) always clobbers reg byte a -Statement [281] (byte*~) current_piece#93 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#93 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#93 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a -Statement [282] (byte*~) current_piece_gfx#117 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#93 current_piece_gfx#117 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#93 current_piece_gfx#117 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a +Statement [281] (byte*~) current_piece#93 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 current_piece#93 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 current_piece#93 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a +Statement [282] (byte*~) current_piece_gfx#117 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 current_piece#93 current_piece_gfx#117 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 current_piece#93 current_piece_gfx#117 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a Statement [289] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:172 [ play_spawn_current::current_piece_idx#0 ] Statement [295] (byte*~) current_piece#100 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#100 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#100 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#100 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#100 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ) always clobbers reg byte a -Statement [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a +Statement [307] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:171 [ play_update_score::removed#0 ] -Statement [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ) always clobbers reg byte a +Statement [309] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:178 [ play_update_score::lines_before#0 ] -Statement [311] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a -Statement [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ) always clobbers reg byte a -Statement [314] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 ] ) always clobbers reg byte a -Statement [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 play_update_score::$4 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 play_update_score::$4 ] ) always clobbers reg byte a -Statement [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#66 level_bcd#21 play_increase_level::$1 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a -Statement [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#66 level_bcd#8 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#8 ] ) always clobbers reg byte a reg byte x +Statement [310] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a +Statement [312] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ) always clobbers reg byte a +Statement [313] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 ] ) always clobbers reg byte a +Statement [315] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 play_update_score::$4 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 play_update_score::$4 ] ) always clobbers reg byte a +Statement [327] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#66 level_bcd#21 play_increase_level::$1 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a +Statement [329] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#66 level_bcd#8 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#8 ] ) always clobbers reg byte a reg byte x Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:124 [ play_movement::key_event#0 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] -Statement [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ) always clobbers reg byte a +Statement [333] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:76 [ play_increase_level::b#2 play_increase_level::b#1 ] -Statement [335] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 ] ) always clobbers reg byte a -Statement [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a +Statement [334] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 ] ) always clobbers reg byte a +Statement [352] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:79 [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] -Statement [361] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a +Statement [360] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:82 [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ] -Statement [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ) always clobbers reg byte a +Statement [364] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] -Statement [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a -Statement [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a +Statement [365] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a +Statement [369] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:87 [ play_lock_current::c#2 play_lock_current::c#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:192 [ play_lock_current::i#1 ] -Statement [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a -Statement [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a +Statement [370] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a +Statement [381] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:403 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:409 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:415 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:421 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:55 [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] -Statement [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a +Statement [383] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:403 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:409 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:415 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:421 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:194 [ keyboard_event_pressed::row_bits#0 ] -Statement [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a -Statement [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 ] ) always clobbers reg byte a -Statement [389] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y -Statement [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a +Statement [384] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:403 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:409 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:415 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:421 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a +Statement [386] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 ] ) always clobbers reg byte a +Statement [388] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y +Statement [398] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Statement [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a +Statement [428] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:199 [ keyboard_event_scan::row_scan#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] -Statement [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a -Statement [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a -Statement [435] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y +Statement [431] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a +Statement [432] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a +Statement [434] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:199 [ keyboard_event_scan::row_scan#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] -Statement [441] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ) always clobbers reg byte a -Statement [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a -Statement [443] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y -Statement [445] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a -Statement [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a -Statement [452] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y -Statement [453] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y -Statement [454] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 render_screen_showing#1 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 render_screen_showing#1 ] ) always clobbers reg byte a -Statement [459] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$4 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$4 ] ) always clobbers reg byte a +Statement [440] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ) always clobbers reg byte a +Statement [441] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a +Statement [442] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y +Statement [444] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:394 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a +Statement [445] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:394 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [447] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a +Statement [451] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y +Statement [452] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y +Statement [453] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 render_screen_showing#1 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 render_screen_showing#1 ] ) always clobbers reg byte a +Statement [458] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$4 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$4 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:95 [ play_init::j#2 play_init::j#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] -Statement [460] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a -Statement [461] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a -Statement [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a -Statement [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a -Statement [466] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 [ ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [467] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) [ current_movedown_slow#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 ] ) always clobbers reg byte a -Statement [469] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$5 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_init::b#2 play_init::$5 ] ) always clobbers reg byte a +Statement [459] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a +Statement [460] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a +Statement [461] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a +Statement [462] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a +Statement [465] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 [ ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [466] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) [ current_movedown_slow#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 ] ) always clobbers reg byte a +Statement [468] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$5 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_init::b#2 play_init::$5 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ] -Statement [470] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) [ current_movedown_slow#1 play_init::b#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a -Statement [475] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [469] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) [ current_movedown_slow#1 play_init::b#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a +Statement [474] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a -Statement [477] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [478] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [479] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [480] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [481] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [482] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [483] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [486] *((const byte*) SPRITES_ENABLE#0) ← (byte) $f [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [487] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [488] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [489] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a +Statement [476] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [477] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [478] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [479] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [480] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [481] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [482] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [485] *((const byte*) SPRITES_ENABLE#0) ← (byte) $f [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [486] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [487] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [488] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [490] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:100 [ sprites_init::s#2 sprites_init::s#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Statement [492] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a -Statement [493] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a -Statement [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a -Statement [499] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [501] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [502] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [503] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [504] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [505] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [506] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [507] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [512] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a +Statement [491] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a +Statement [492] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a +Statement [493] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a +Statement [498] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [500] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [501] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [502] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [503] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [504] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [505] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [506] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [511] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:102 [ render_init::i#2 render_init::i#1 ] -Statement [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a +Statement [512] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:216 [ render_init::$13 ] -Statement [514] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a -Statement [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a -Statement [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a -Statement [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y +Statement [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a +Statement [514] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a +Statement [515] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a +Statement [522] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:116 [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:116 [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] -Statement [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y -Statement [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y -Statement [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y -Statement [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y -Statement [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y -Statement [548] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:13::sid_rnd_init:16 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [549] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:13::sid_rnd_init:16 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [559] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ( [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ) always clobbers reg byte a -Statement [561] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ) always clobbers reg byte a +Statement [524] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y +Statement [529] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y +Statement [532] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y +Statement [538] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y +Statement [540] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y +Statement [547] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:13::sid_rnd_init:16 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [548] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:13::sid_rnd_init:16 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [558] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ( [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ) always clobbers reg byte a +Statement [560] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:219 [ sprites_irq::ptr#0 ] -Statement [569] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a -Statement [570] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a -Statement [571] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x -Statement [572] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ( [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ) always clobbers reg byte a reg byte x -Statement [573] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ( [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ) always clobbers reg byte a reg byte x -Statement [575] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a -Statement [576] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a -Statement [577] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y -Statement [578] (byte) irq_cnt#2 ← (byte) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ) always clobbers reg byte a -Statement [579] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ) always clobbers reg byte a -Statement [580] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ) always clobbers reg byte a reg byte x -Statement [581] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ( [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ) always clobbers reg byte a reg byte x -Statement [582] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 [ irq_cnt#1 irq_raster_next#1 ] ( [ irq_cnt#1 irq_raster_next#1 ] ) always clobbers reg byte a reg byte x -Statement [583] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ) always clobbers reg byte a -Statement [585] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ) always clobbers reg byte a +Statement [568] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a +Statement [569] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a +Statement [570] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x +Statement [571] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ( [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ) always clobbers reg byte a reg byte x +Statement [572] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ( [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ) always clobbers reg byte a reg byte x +Statement [574] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a +Statement [575] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a +Statement [576] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y +Statement [577] (byte) irq_cnt#2 ← (byte) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ) always clobbers reg byte a +Statement [578] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ) always clobbers reg byte a +Statement [579] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ) always clobbers reg byte a reg byte x +Statement [580] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ( [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ) always clobbers reg byte a reg byte x +Statement [581] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 [ irq_cnt#1 irq_raster_next#1 ] ( [ irq_cnt#1 irq_raster_next#1 ] ) always clobbers reg byte a reg byte x +Statement [582] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ) always clobbers reg byte a +Statement [584] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ) always clobbers reg byte a Statement [1] (byte) render_screen_showing#0 ← (byte) 0 [ render_screen_showing#0 ] ( [ render_screen_showing#0 ] ) always clobbers reg byte a Statement [2] (dword) score_bcd#0 ← (byte) 0 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement [7] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement [8] (byte) irq_sprite_ypos#0 ← (const byte) SPRITES_FIRST_YPOS#0+(byte) $15 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement [10] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0+(byte) 3 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement [11] (byte) irq_cnt#0 ← (byte) 0 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [33] (byte*~) current_piece_gfx#112 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#98 current_ypos#6 current_xpos#119 current_xpos#100 current_piece_gfx#112 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#98 current_ypos#6 current_xpos#119 current_xpos#100 current_piece_gfx#112 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [38] (byte*~) current_piece#102 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#102 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#102 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [39] (byte*~) current_piece_gfx#124 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#102 current_piece_gfx#124 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#102 current_piece_gfx#124 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [33] (byte*~) current_piece_gfx#112 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#98 current_ypos#6 current_xpos#119 current_xpos#100 current_piece_gfx#112 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#98 current_ypos#6 current_xpos#119 current_xpos#100 current_piece_gfx#112 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [38] (byte*~) current_piece#102 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_piece#102 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_piece#102 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [39] (byte*~) current_piece_gfx#124 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#1 current_piece#102 current_piece_gfx#124 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#1 current_piece#102 current_piece_gfx#124 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a Statement [41] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 ] ) always clobbers reg byte a Statement [50] if((byte) game_over#10==(byte) 0) goto main::@4 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#16 main::key_event#0 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#16 main::key_event#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:123 [ main::key_event#0 ] @@ -18095,22 +18097,22 @@ Statement [100] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte) 4 Statement [102] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 [ render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte y Statement [105] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte) $f [ render_bcd::screen_pos#3 render_bcd::$3 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen_pos#3 render_bcd::$3 ] ) always clobbers reg byte a Statement [107] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 [ ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte y -Statement [113] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ) always clobbers reg byte a -Statement [115] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$6) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a -Statement [118] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y -Statement [121] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y -Statement [125] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a -Statement [129] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y -Statement [134] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a -Statement [140] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ) always clobbers reg byte a -Statement [141] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ) always clobbers reg byte a -Statement [142] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a -Statement [145] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a -Statement [148] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a -Statement [154] (byte~) render_playfield::$2 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ) always clobbers reg byte a -Statement [155] (byte~) render_playfield::$6 ← (byte~) render_playfield::$2 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] ) always clobbers reg byte a -Statement [156] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$6) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a -Statement [158] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y +Statement [113] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ) always clobbers reg byte a +Statement [115] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$6) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a +Statement [118] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y +Statement [121] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y +Statement [125] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a +Statement [129] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y +Statement [134] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a +Statement [140] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ) always clobbers reg byte a +Statement [141] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ) always clobbers reg byte a +Statement [142] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a +Statement [145] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a +Statement [148] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a +Statement [154] (byte~) render_playfield::$2 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ) always clobbers reg byte a +Statement [155] (byte~) render_playfield::$6 ← (byte~) render_playfield::$2 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] ) always clobbers reg byte a +Statement [156] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$6) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a +Statement [158] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y Statement [170] if((byte) game_over#15==(byte) 0) goto play_movement::@1 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ) always clobbers reg byte a Statement [177] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ) always clobbers reg byte a Statement [182] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ) always clobbers reg byte a @@ -18127,38 +18129,38 @@ Statement [215] if(*((byte*) play_collision::playfield_line#0 + (byte) play_coll Statement [231] (byte*~) current_piece#98 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#98 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#98 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ) always clobbers reg byte a Statement [242] (byte*~) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ) always clobbers reg byte a Statement [266] (byte*~) current_piece#96 ← (byte*) current_piece#10 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece#96 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece#96 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ) always clobbers reg byte a -Statement [281] (byte*~) current_piece#93 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#93 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#93 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a -Statement [282] (byte*~) current_piece_gfx#117 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#93 current_piece_gfx#117 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#93 current_piece_gfx#117 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a +Statement [281] (byte*~) current_piece#93 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 current_piece#93 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 current_piece#93 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a +Statement [282] (byte*~) current_piece_gfx#117 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 current_piece#93 current_piece_gfx#117 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 current_piece#93 current_piece_gfx#117 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a Statement [289] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a Statement [295] (byte*~) current_piece#100 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#100 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#100 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#100 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#100 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ) always clobbers reg byte a -Statement [303] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ) always clobbers reg byte a -Statement [306] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ) always clobbers reg byte a -Statement [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a -Statement [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ) always clobbers reg byte a -Statement [311] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a -Statement [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ) always clobbers reg byte a -Statement [314] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 ] ) always clobbers reg byte a -Statement [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 play_update_score::$4 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 play_update_score::$4 ] ) always clobbers reg byte a -Statement [324] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level_bcd#11 level#21 ] ) always clobbers reg byte a -Statement [325] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level_bcd#11 level#21 current_movedown_slow#10 ] ) always clobbers reg byte a reg byte y +Statement [303] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] ) always clobbers reg byte a +Statement [304] if((byte) play_spawn_current::piece_idx#1==(byte) 7) goto play_spawn_current::sid_rnd1 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] ) always clobbers reg byte a +Statement [307] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a +Statement [309] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ) always clobbers reg byte a +Statement [310] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a +Statement [312] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ) always clobbers reg byte a +Statement [313] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 ] ) always clobbers reg byte a +Statement [315] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 play_update_score::$4 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 play_update_score::$4 ] ) always clobbers reg byte a +Statement [323] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level_bcd#11 level#21 ] ) always clobbers reg byte a +Statement [324] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level_bcd#11 level#21 current_movedown_slow#10 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:124 [ play_movement::key_event#0 ] -Statement [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#66 level_bcd#21 play_increase_level::$1 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a -Statement [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#66 level_bcd#8 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#8 ] ) always clobbers reg byte a reg byte x -Statement [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ) always clobbers reg byte a -Statement [335] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 ] ) always clobbers reg byte a -Statement [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a -Statement [361] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a -Statement [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ) always clobbers reg byte a -Statement [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a -Statement [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a -Statement [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a -Statement [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a -Statement [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a -Statement [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a -Statement [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 ] ) always clobbers reg byte a -Statement [389] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y -Statement [398] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ) always clobbers reg byte a -Statement [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a reg byte x +Statement [327] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#66 level_bcd#21 play_increase_level::$1 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a +Statement [329] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#66 level_bcd#8 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#8 ] ) always clobbers reg byte a reg byte x +Statement [333] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ) always clobbers reg byte a +Statement [334] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 ] ) always clobbers reg byte a +Statement [352] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a +Statement [360] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a +Statement [364] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ) always clobbers reg byte a +Statement [365] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a +Statement [369] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a +Statement [370] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a +Statement [381] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:403 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:409 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:415 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:421 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a +Statement [383] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:403 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:409 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:415 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:421 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a +Statement [384] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:403 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:409 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:415 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:421 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a +Statement [386] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 ] ) always clobbers reg byte a +Statement [388] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y +Statement [397] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ) always clobbers reg byte a +Statement [398] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a reg byte x Removing always clobbered register reg byte x as potential for zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] @@ -18166,94 +18168,94 @@ Removing always clobbered register reg byte x as potential for zp ZP_BYTE:56 [ c Removing always clobbered register reg byte x as potential for zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Statement [402] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ) always clobbers reg byte a -Statement [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a -Statement [430] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ) always clobbers reg byte a -Statement [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a -Statement [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a -Statement [435] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y -Statement [441] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ) always clobbers reg byte a reg byte y -Statement [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a -Statement [443] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y -Statement [445] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a -Statement [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a -Statement [452] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y -Statement [453] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y -Statement [454] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 render_screen_showing#1 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 render_screen_showing#1 ] ) always clobbers reg byte a -Statement [459] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$4 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$4 ] ) always clobbers reg byte a -Statement [460] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a -Statement [461] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a -Statement [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a -Statement [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a -Statement [466] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 [ ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [467] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) [ current_movedown_slow#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 ] ) always clobbers reg byte a -Statement [469] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$5 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_init::b#2 play_init::$5 ] ) always clobbers reg byte a -Statement [470] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) [ current_movedown_slow#1 play_init::b#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a -Statement [475] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [401] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ) always clobbers reg byte a +Statement [428] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a +Statement [429] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ) always clobbers reg byte a +Statement [431] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a +Statement [432] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a +Statement [434] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y +Statement [440] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ) always clobbers reg byte a reg byte y +Statement [441] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a +Statement [442] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y +Statement [444] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:394 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a +Statement [445] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:394 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [447] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a +Statement [451] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y +Statement [452] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y +Statement [453] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 render_screen_showing#1 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 render_screen_showing#1 ] ) always clobbers reg byte a +Statement [458] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$4 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$4 ] ) always clobbers reg byte a +Statement [459] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a +Statement [460] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a +Statement [461] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a +Statement [462] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a +Statement [465] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 [ ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [466] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) [ current_movedown_slow#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 ] ) always clobbers reg byte a +Statement [468] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$5 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_init::b#2 play_init::$5 ] ) always clobbers reg byte a +Statement [469] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) [ current_movedown_slow#1 play_init::b#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a +Statement [474] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a -Statement [477] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [478] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [479] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [480] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [481] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [482] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [483] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [486] *((const byte*) SPRITES_ENABLE#0) ← (byte) $f [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [487] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [488] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [489] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a -Statement [492] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a -Statement [493] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a -Statement [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a -Statement [499] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [501] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [502] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [503] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [504] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [505] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [506] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [507] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [512] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a -Statement [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a -Statement [514] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a -Statement [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a -Statement [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a -Statement [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y -Statement [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y -Statement [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y -Statement [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y -Statement [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y -Statement [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y -Statement [548] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:13::sid_rnd_init:16 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [549] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:13::sid_rnd_init:16 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [559] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ( [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ) always clobbers reg byte a -Statement [561] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ) always clobbers reg byte a -Statement [569] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a -Statement [570] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a -Statement [571] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x -Statement [572] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ( [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ) always clobbers reg byte a reg byte x -Statement [573] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ( [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ) always clobbers reg byte a reg byte x -Statement [575] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a -Statement [576] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a -Statement [577] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y -Statement [578] (byte) irq_cnt#2 ← (byte) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ) always clobbers reg byte a -Statement [579] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ) always clobbers reg byte a -Statement [580] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ) always clobbers reg byte a reg byte x -Statement [581] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ( [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ) always clobbers reg byte a reg byte x -Statement [582] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 [ irq_cnt#1 irq_raster_next#1 ] ( [ irq_cnt#1 irq_raster_next#1 ] ) always clobbers reg byte a reg byte x -Statement [583] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ) always clobbers reg byte a -Statement [585] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ) always clobbers reg byte a +Statement [476] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [477] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [478] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [479] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [480] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [481] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [482] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [485] *((const byte*) SPRITES_ENABLE#0) ← (byte) $f [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [486] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [487] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [488] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [490] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a +Statement [491] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a +Statement [492] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a +Statement [493] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a +Statement [498] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [500] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [501] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [502] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [503] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [504] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [505] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [506] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [511] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a +Statement [512] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a +Statement [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a +Statement [514] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a +Statement [515] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a +Statement [522] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y +Statement [524] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y +Statement [529] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y +Statement [532] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y +Statement [538] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y +Statement [540] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y +Statement [547] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:13::sid_rnd_init:16 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [548] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:13::sid_rnd_init:16 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [558] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ( [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ) always clobbers reg byte a +Statement [560] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ) always clobbers reg byte a +Statement [568] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a +Statement [569] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a +Statement [570] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x +Statement [571] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ( [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ) always clobbers reg byte a reg byte x +Statement [572] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ( [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ) always clobbers reg byte a reg byte x +Statement [574] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a +Statement [575] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a +Statement [576] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y +Statement [577] (byte) irq_cnt#2 ← (byte) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ) always clobbers reg byte a +Statement [578] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ) always clobbers reg byte a +Statement [579] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ) always clobbers reg byte a reg byte x +Statement [580] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ( [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ) always clobbers reg byte a reg byte x +Statement [581] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 [ irq_cnt#1 irq_raster_next#1 ] ( [ irq_cnt#1 irq_raster_next#1 ] ) always clobbers reg byte a reg byte x +Statement [582] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ) always clobbers reg byte a +Statement [584] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ) always clobbers reg byte a Statement [1] (byte) render_screen_showing#0 ← (byte) 0 [ render_screen_showing#0 ] ( [ render_screen_showing#0 ] ) always clobbers reg byte a Statement [2] (dword) score_bcd#0 ← (byte) 0 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement [7] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement [8] (byte) irq_sprite_ypos#0 ← (const byte) SPRITES_FIRST_YPOS#0+(byte) $15 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement [10] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0+(byte) 3 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement [11] (byte) irq_cnt#0 ← (byte) 0 [ render_screen_showing#0 score_bcd#0 ] ( [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [33] (byte*~) current_piece_gfx#112 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#98 current_ypos#6 current_xpos#119 current_xpos#100 current_piece_gfx#112 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#98 current_ypos#6 current_xpos#119 current_xpos#100 current_piece_gfx#112 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [38] (byte*~) current_piece#102 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#102 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#102 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [39] (byte*~) current_piece_gfx#124 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#102 current_piece_gfx#124 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#102 current_piece_gfx#124 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [33] (byte*~) current_piece_gfx#112 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#98 current_ypos#6 current_xpos#119 current_xpos#100 current_piece_gfx#112 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#98 current_ypos#6 current_xpos#119 current_xpos#100 current_piece_gfx#112 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [38] (byte*~) current_piece#102 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_piece#102 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_piece#102 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [39] (byte*~) current_piece_gfx#124 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#1 current_piece#102 current_piece_gfx#124 current_movedown_slow#1 game_over#52 ] ( main:13 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#1 current_piece#102 current_piece_gfx#124 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a Statement [41] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 ] ) always clobbers reg byte a Statement [50] if((byte) game_over#10==(byte) 0) goto main::@4 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#16 main::key_event#0 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#16 main::key_event#0 ] ) always clobbers reg byte a Statement [62] (byte*~) current_piece_gfx#113 ← (byte*) current_piece_gfx#18 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 current_ypos#99 render_screen_render#65 current_xpos#120 current_piece_gfx#113 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 current_ypos#99 render_screen_render#65 current_xpos#120 current_piece_gfx#113 ] ) always clobbers reg byte a @@ -18273,22 +18275,22 @@ Statement [100] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte) 4 Statement [102] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 [ render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte y Statement [105] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte) $f [ render_bcd::screen_pos#3 render_bcd::$3 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen_pos#3 render_bcd::$3 ] ) always clobbers reg byte a Statement [107] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 [ ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte y -Statement [113] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ) always clobbers reg byte a -Statement [115] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$6) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a -Statement [118] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y -Statement [121] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y -Statement [125] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a -Statement [129] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y -Statement [134] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a -Statement [140] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ) always clobbers reg byte a -Statement [141] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ) always clobbers reg byte a -Statement [142] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a -Statement [145] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a -Statement [148] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a -Statement [154] (byte~) render_playfield::$2 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ) always clobbers reg byte a -Statement [155] (byte~) render_playfield::$6 ← (byte~) render_playfield::$2 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] ) always clobbers reg byte a -Statement [156] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$6) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a -Statement [158] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y +Statement [113] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ) always clobbers reg byte a +Statement [115] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$6) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a +Statement [118] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y +Statement [121] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y +Statement [125] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a +Statement [129] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y +Statement [134] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a +Statement [140] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ) always clobbers reg byte a +Statement [141] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ) always clobbers reg byte a +Statement [142] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a +Statement [145] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a +Statement [148] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:13::render_moving:35 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a +Statement [154] (byte~) render_playfield::$2 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ) always clobbers reg byte a +Statement [155] (byte~) render_playfield::$6 ← (byte~) render_playfield::$2 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$6 ] ) always clobbers reg byte a +Statement [156] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$6) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a +Statement [158] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:13::render_playfield:30 [ render_screen_showing#0 score_bcd#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 render_screen_showing#1 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y Statement [170] if((byte) game_over#15==(byte) 0) goto play_movement::@1 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ) always clobbers reg byte a Statement [177] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ) always clobbers reg byte a Statement [182] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ) always clobbers reg byte a @@ -18307,119 +18309,119 @@ Statement [242] (byte*~) current_piece#97 ← (byte*) current_piece#15 [ current Statement [256] if((byte) current_movedown_counter#12<(const byte) current_movedown_fast#0) goto play_move_down::@2 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 ] ) always clobbers reg byte a Statement [259] if((byte) current_movedown_counter#12<(byte) current_movedown_slow#14) goto play_move_down::@3 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#7 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#7 ] ) always clobbers reg byte a Statement [266] (byte*~) current_piece#96 ← (byte*) current_piece#10 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece#96 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece#96 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ) always clobbers reg byte a -Statement [281] (byte*~) current_piece#93 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#93 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#93 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a -Statement [282] (byte*~) current_piece_gfx#117 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#93 current_piece_gfx#117 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#93 current_piece_gfx#117 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a +Statement [281] (byte*~) current_piece#93 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 current_piece#93 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 current_piece#93 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a +Statement [282] (byte*~) current_piece_gfx#117 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 current_piece#93 current_piece_gfx#117 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 current_piece#93 current_piece_gfx#117 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a Statement [289] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a Statement [290] (byte) current_piece_char#5 ← *((const byte[]) PIECES_CHARS#0 + (byte) play_spawn_current::current_piece_idx#0) [ play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a Statement [291] (byte) current_xpos#100 ← *((const byte[]) PIECES_START_X#0 + (byte) play_spawn_current::current_piece_idx#0) [ current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a Statement [292] (byte) current_ypos#6 ← *((const byte[]) PIECES_START_Y#0 + (byte) play_spawn_current::current_piece_idx#0) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] ) always clobbers reg byte a Statement [295] (byte*~) current_piece#100 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#100 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#100 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#100 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#100 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ) always clobbers reg byte a -Statement [303] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ) always clobbers reg byte a -Statement [306] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ) always clobbers reg byte a -Statement [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a -Statement [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ) always clobbers reg byte a -Statement [311] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a -Statement [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ) always clobbers reg byte a -Statement [314] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 ] ) always clobbers reg byte a -Statement [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 play_update_score::$4 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 play_update_score::$4 ] ) always clobbers reg byte a -Statement [324] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level_bcd#11 level#21 ] ) always clobbers reg byte a -Statement [325] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level_bcd#11 level#21 current_movedown_slow#10 ] ) always clobbers reg byte a reg byte y -Statement [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#66 level_bcd#21 play_increase_level::$1 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a -Statement [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#66 level_bcd#8 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#8 ] ) always clobbers reg byte a reg byte x -Statement [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ) always clobbers reg byte a -Statement [335] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 ] ) always clobbers reg byte a -Statement [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a -Statement [361] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a -Statement [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ) always clobbers reg byte a -Statement [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a -Statement [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a -Statement [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a -Statement [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a -Statement [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a -Statement [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a -Statement [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 ] ) always clobbers reg byte a -Statement [389] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y -Statement [398] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ) always clobbers reg byte a reg byte y -Statement [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a reg byte x -Statement [402] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ) always clobbers reg byte a -Statement [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a -Statement [430] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ) always clobbers reg byte a -Statement [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a -Statement [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a -Statement [435] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y -Statement [441] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ) always clobbers reg byte a reg byte y -Statement [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a -Statement [443] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y -Statement [445] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a -Statement [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a -Statement [452] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y -Statement [453] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y -Statement [454] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 render_screen_showing#1 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 render_screen_showing#1 ] ) always clobbers reg byte a -Statement [459] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$4 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$4 ] ) always clobbers reg byte a -Statement [460] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a -Statement [461] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a -Statement [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a -Statement [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a -Statement [466] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 [ ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [467] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) [ current_movedown_slow#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 ] ) always clobbers reg byte a -Statement [469] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$5 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_init::b#2 play_init::$5 ] ) always clobbers reg byte a -Statement [470] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) [ current_movedown_slow#1 play_init::b#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a -Statement [475] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [303] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] ) always clobbers reg byte a +Statement [304] if((byte) play_spawn_current::piece_idx#1==(byte) 7) goto play_spawn_current::sid_rnd1 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] ( main:13::play_spawn_current:26 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] main:13::play_spawn_current:28 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#1 game_over#52 ] ) always clobbers reg byte a +Statement [307] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a +Statement [309] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ) always clobbers reg byte a +Statement [310] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a +Statement [312] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ) always clobbers reg byte a +Statement [313] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 ] ) always clobbers reg byte a +Statement [315] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 play_update_score::$4 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 score_bcd#29 play_update_score::$4 ] ) always clobbers reg byte a +Statement [323] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level_bcd#11 level#21 ] ) always clobbers reg byte a +Statement [324] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level_bcd#11 level#21 current_movedown_slow#10 ] ) always clobbers reg byte a reg byte y +Statement [327] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#66 level_bcd#21 play_increase_level::$1 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a +Statement [329] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#66 level_bcd#8 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#8 ] ) always clobbers reg byte a reg byte x +Statement [333] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ) always clobbers reg byte a +Statement [334] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:319 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 score_bcd#29 level#21 current_movedown_slow#66 level_bcd#62 play_increase_level::b#2 ] ) always clobbers reg byte a +Statement [352] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a +Statement [360] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a +Statement [364] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ) always clobbers reg byte a +Statement [365] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a +Statement [369] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a +Statement [370] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a +Statement [381] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:403 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:409 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:415 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:421 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a +Statement [383] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:403 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:409 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:415 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:421 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a +Statement [384] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 render_screen_showing#1 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:403 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:409 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:415 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:421 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a +Statement [386] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 ] ) always clobbers reg byte a +Statement [388] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y +Statement [397] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ) always clobbers reg byte a reg byte y +Statement [398] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a reg byte x +Statement [401] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ) always clobbers reg byte a +Statement [428] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a +Statement [429] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ) always clobbers reg byte a +Statement [431] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a +Statement [432] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a +Statement [434] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y +Statement [440] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ) always clobbers reg byte a reg byte y +Statement [441] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a +Statement [442] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y +Statement [444] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:394 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a +Statement [445] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:394 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 render_screen_showing#1 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [447] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a +Statement [451] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y +Statement [452] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y +Statement [453] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 render_screen_showing#1 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 render_screen_showing#1 ] ) always clobbers reg byte a +Statement [458] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$4 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$4 ] ) always clobbers reg byte a +Statement [459] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a +Statement [460] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a +Statement [461] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a +Statement [462] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a +Statement [465] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 [ ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [466] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) [ current_movedown_slow#1 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 ] ) always clobbers reg byte a +Statement [468] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$5 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_init::b#2 play_init::$5 ] ) always clobbers reg byte a +Statement [469] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) [ current_movedown_slow#1 play_init::b#2 ] ( main:13::play_init:24 [ render_screen_showing#0 score_bcd#0 current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a +Statement [474] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a -Statement [477] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [478] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [479] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [480] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [481] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [482] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [483] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [486] *((const byte*) SPRITES_ENABLE#0) ← (byte) $f [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [487] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [488] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [489] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a -Statement [492] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a -Statement [493] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a -Statement [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a -Statement [499] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [501] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [502] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [503] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [504] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [505] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [506] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [507] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [512] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a -Statement [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a -Statement [514] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a -Statement [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a -Statement [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a -Statement [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y -Statement [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y -Statement [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y -Statement [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y -Statement [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y -Statement [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y -Statement [548] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:13::sid_rnd_init:16 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [549] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:13::sid_rnd_init:16 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a -Statement [559] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ( [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ) always clobbers reg byte a -Statement [561] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ) always clobbers reg byte a -Statement [569] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a -Statement [570] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a -Statement [571] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x -Statement [572] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ( [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ) always clobbers reg byte a reg byte x -Statement [573] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ( [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ) always clobbers reg byte a reg byte x -Statement [575] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a -Statement [576] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a -Statement [577] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y -Statement [578] (byte) irq_cnt#2 ← (byte) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ) always clobbers reg byte a -Statement [579] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ) always clobbers reg byte a -Statement [580] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ) always clobbers reg byte a reg byte x -Statement [581] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ( [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ) always clobbers reg byte a reg byte x -Statement [582] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 [ irq_cnt#1 irq_raster_next#1 ] ( [ irq_cnt#1 irq_raster_next#1 ] ) always clobbers reg byte a reg byte x -Statement [583] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ) always clobbers reg byte a -Statement [585] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ) always clobbers reg byte a +Statement [476] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [477] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [478] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [479] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [480] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [481] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [482] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:13::sprites_irq_init:22 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [485] *((const byte*) SPRITES_ENABLE#0) ← (byte) $f [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [486] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [487] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [488] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) [ ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [490] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a +Statement [491] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a +Statement [492] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a +Statement [493] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:13::sprites_init:20 [ render_screen_showing#0 score_bcd#0 sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a +Statement [498] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [500] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [501] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [502] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [503] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [504] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [505] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [506] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 [ ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [511] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a +Statement [512] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a +Statement [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a +Statement [514] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a +Statement [515] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:13::render_init:18 [ render_screen_showing#0 score_bcd#0 render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a +Statement [522] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y +Statement [524] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y +Statement [529] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y +Statement [532] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y +Statement [538] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y +Statement [540] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:507 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:509 [ render_screen_showing#0 score_bcd#0 render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y +Statement [547] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:13::sid_rnd_init:16 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [548] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:13::sid_rnd_init:16 [ render_screen_showing#0 score_bcd#0 ] ) always clobbers reg byte a +Statement [558] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ( [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ) always clobbers reg byte a +Statement [560] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ) always clobbers reg byte a +Statement [568] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a +Statement [569] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a +Statement [570] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x +Statement [571] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ( [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ) always clobbers reg byte a reg byte x +Statement [572] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ( [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ) always clobbers reg byte a reg byte x +Statement [574] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a +Statement [575] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a +Statement [576] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y +Statement [577] (byte) irq_cnt#2 ← (byte) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ) always clobbers reg byte a +Statement [578] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ) always clobbers reg byte a +Statement [579] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ) always clobbers reg byte a reg byte x +Statement [580] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ( [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ) always clobbers reg byte a reg byte x +Statement [581] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 [ irq_cnt#1 irq_raster_next#1 ] ( [ irq_cnt#1 irq_raster_next#1 ] ) always clobbers reg byte a reg byte x +Statement [582] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ) always clobbers reg byte a +Statement [584] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] : zp ZP_BYTE:2 , Potential registers zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] : zp ZP_BYTE:3 , Potential registers zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] : zp ZP_BYTE:4 , @@ -18477,7 +18479,7 @@ Potential registers zp ZP_BYTE:69 [ current_orientation#37 current_orientation#1 Potential registers zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ] : zp ZP_WORD:70 , Potential registers zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] : zp ZP_BYTE:72 , Potential registers zp ZP_BYTE:73 [ play_move_down::return#3 ] : zp ZP_BYTE:73 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] : zp ZP_BYTE:74 , +Potential registers zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] : zp ZP_BYTE:74 , Potential registers zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] : zp ZP_BYTE:75 , Potential registers zp ZP_BYTE:76 [ play_increase_level::b#2 play_increase_level::b#1 ] : zp ZP_BYTE:76 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] : zp ZP_BYTE:77 , reg byte x , reg byte y , @@ -18619,14 +18621,14 @@ Uplift Scope [keyboard_event_scan] 20,002: zp ZP_BYTE:208 [ keyboard_event_scan: Uplift Scope [play_collision] 38,006.5: zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] 20,002: zp ZP_BYTE:160 [ play_collision::$5 ] 13,378.25: zp ZP_BYTE:51 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] 12,223.44: zp ZP_BYTE:52 [ play_collision::c#2 play_collision::c#1 ] 2,002: zp ZP_BYTE:156 [ play_collision::$14 ] 1,615.62: zp ZP_BYTE:159 [ play_collision::i#1 ] 1,326.38: zp ZP_BYTE:48 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] 1,118.76: zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] 785.86: zp ZP_WORD:157 [ play_collision::playfield_line#0 ] 476.33: zp ZP_WORD:154 [ play_collision::piece_gfx#0 ] 51.62: zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] 18: zp ZP_BYTE:46 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] 4: zp ZP_BYTE:151 [ play_collision::return#14 ] 4: zp ZP_BYTE:161 [ play_collision::return#13 ] 4: zp ZP_BYTE:163 [ play_collision::return#1 ] 4: zp ZP_BYTE:167 [ play_collision::return#0 ] 4: zp ZP_BYTE:174 [ play_collision::return#10 ] 1.43: zp ZP_BYTE:53 [ play_collision::return#15 ] Uplift Scope [play_lock_current] 38,006.5: zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] 14,753.5: zp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] 14,001.4: zp ZP_BYTE:87 [ play_lock_current::c#2 play_lock_current::c#1 ] 2,333.67: zp ZP_BYTE:192 [ play_lock_current::i#1 ] 2,002: zp ZP_BYTE:189 [ play_lock_current::$4 ] 1,155: zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] 1,100.2: zp ZP_WORD:190 [ play_lock_current::playfield_line#0 ] 754.92: zp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Uplift Scope [play_remove_lines] 19,004.21: zp ZP_BYTE:79 [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] 17,938.14: zp ZP_BYTE:82 [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ] 17,501.75: zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] 8,201: zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] 6,000.6: zp ZP_BYTE:188 [ play_remove_lines::c#0 ] 2,566.89: zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] 1,634.97: zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] 4: zp ZP_BYTE:169 [ play_remove_lines::return#0 ] -Uplift Scope [] 58,858.91: zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] 2,120.54: zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] 1,143.93: zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] 209.73: zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ] 193.66: zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] 74.29: zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] 72.26: zp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] 65.61: zp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] 62.17: zp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] 61.29: zp ZP_WORD:27 [ current_piece_gfx#64 current_piece_gfx#112 current_piece_gfx#113 ] 42.02: zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] 32: zp ZP_WORD:44 [ current_piece#17 current_piece#96 current_piece#97 current_piece#98 current_piece#99 current_piece#100 ] 30.62: zp ZP_BYTE:35 [ render_screen_render#22 render_screen_render#64 ] 29.4: zp ZP_BYTE:17 [ next_piece_idx#12 next_piece_idx#77 next_piece_idx#78 ] 24: zp ZP_BYTE:16 [ render_screen_render#15 render_screen_render#66 ] 20.4: zp ZP_BYTE:24 [ current_ypos#13 current_ypos#98 current_ypos#99 ] 18.41: zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] 17.41: zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] 16.93: zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] 15.34: zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] 14.83: zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#102 current_piece#93 ] 14.77: zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] 14.1: zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] 13.64: zp ZP_DWORD:59 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#0 score_bcd#16 score_bcd#29 ] 12.63: zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] 12.62: zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] 12.38: zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] 11.97: zp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] 10.83: zp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] 9.81: zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] 8.06: zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] +Uplift Scope [] 58,858.91: zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] 1,143.93: zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] 209.73: zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ] 193.67: zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] 118.54: zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] 74.29: zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] 72.26: zp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] 65.61: zp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] 62.17: zp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] 61.29: zp ZP_WORD:27 [ current_piece_gfx#64 current_piece_gfx#112 current_piece_gfx#113 ] 42.03: zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] 32: zp ZP_WORD:44 [ current_piece#17 current_piece#96 current_piece#97 current_piece#98 current_piece#99 current_piece#100 ] 30.62: zp ZP_BYTE:35 [ render_screen_render#22 render_screen_render#64 ] 29.4: zp ZP_BYTE:17 [ next_piece_idx#12 next_piece_idx#77 next_piece_idx#78 ] 24: zp ZP_BYTE:16 [ render_screen_render#15 render_screen_render#66 ] 20.4: zp ZP_BYTE:24 [ current_ypos#13 current_ypos#98 current_ypos#99 ] 18.41: zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] 17.41: zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] 16.93: zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] 15.35: zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] 14.83: zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#102 current_piece#93 ] 14.79: zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] 14.1: zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] 13.64: zp ZP_DWORD:59 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#0 score_bcd#16 score_bcd#29 ] 12.63: zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] 12.62: zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] 12.38: zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] 11.97: zp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] 10.83: zp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] 9.81: zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] 8.06: zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] Uplift Scope [render_moving] 2,605.75: zp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] 1,835.17: zp ZP_BYTE:34 [ render_moving::c#2 render_moving::c#1 ] 1,490.13: zp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] 1,001: zp ZP_BYTE:138 [ render_moving::current_cell#0 ] 202: zp ZP_BYTE:134 [ render_moving::$1 ] 202: zp ZP_BYTE:135 [ render_moving::$6 ] 163.38: zp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] 110.2: zp ZP_WORD:136 [ render_moving::screen_line#0 ] 96.71: zp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Uplift Scope [render_next] 1,970.3: zp ZP_WORD:19 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] 1,787.5: zp ZP_BYTE:23 [ render_next::c#2 render_next::c#1 ] 1,657: zp ZP_WORD:21 [ 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 ] 1,001: zp ZP_BYTE:133 [ render_next::cell#0 ] 169.86: zp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] 66.87: zp ZP_BYTE:132 [ render_next::next_piece_char#0 ] 1: zp ZP_BYTE:131 [ render_next::$6 ] Uplift Scope [play_increase_level] 4,004: zp ZP_BYTE:187 [ play_increase_level::$5 ] 2,502.5: zp ZP_BYTE:76 [ play_increase_level::b#2 play_increase_level::b#1 ] 4: zp ZP_BYTE:186 [ play_increase_level::$1 ] Uplift Scope [render_playfield] 2,254.5: zp ZP_WORD:38 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] 2,002: zp ZP_BYTE:40 [ render_playfield::c#2 render_playfield::c#1 ] 1,505.77: zp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] 202: zp ZP_BYTE:139 [ render_playfield::$2 ] 202: zp ZP_BYTE:140 [ render_playfield::$6 ] 181.8: zp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] Uplift Scope [keyboard_matrix_read] 2,002: zp ZP_BYTE:198 [ keyboard_matrix_read::return#2 ] 1,003: zp ZP_BYTE:197 [ keyboard_matrix_read::rowid#0 ] 334.33: zp ZP_BYTE:212 [ keyboard_matrix_read::return#0 ] Uplift Scope [render_screen_original] 721.31: zp ZP_WORD:112 [ 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 ] 699.79: zp ZP_BYTE:116 [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] 501.65: zp ZP_WORD:114 [ 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 ] 162.87: zp ZP_WORD:108 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] 99.08: zp ZP_WORD:110 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] 17.42: zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] -Uplift Scope [play_spawn_current] 2,002: zp ZP_BYTE:176 [ play_spawn_current::sid_rnd1_return#0 ] 4: zp ZP_BYTE:175 [ play_spawn_current::$1 ] 2.5: zp ZP_BYTE:172 [ play_spawn_current::current_piece_idx#0 ] 0.06: zp ZP_BYTE:173 [ play_spawn_current::$7 ] +Uplift Scope [play_spawn_current] 2,002: zp ZP_BYTE:176 [ play_spawn_current::sid_rnd1_return#0 ] 4: zp ZP_BYTE:175 [ play_spawn_current::$1 ] 2.5: zp ZP_BYTE:172 [ play_spawn_current::current_piece_idx#0 ] 0.07: zp ZP_BYTE:173 [ play_spawn_current::$7 ] Uplift Scope [main] 202: zp ZP_BYTE:126 [ main::render#1 ] 101: zp ZP_BYTE:123 [ main::key_event#0 ] Uplift Scope [play_movement] 202: zp ZP_BYTE:125 [ play_movement::return#3 ] 40: zp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] 9.73: zp ZP_BYTE:124 [ play_movement::key_event#0 ] 4: zp ZP_BYTE:145 [ play_movement::$3 ] 4: zp ZP_BYTE:149 [ play_movement::$4 ] 0.8: zp ZP_BYTE:146 [ play_movement::render#2 ] Uplift Scope [keyboard_event_get] 202: zp ZP_BYTE:122 [ keyboard_event_get::return#3 ] 38.33: zp ZP_BYTE:89 [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] @@ -18646,243 +18648,243 @@ Uplift Scope [sid_rnd_init] Uplift Scope [render_screen_swap] Uplift Scope [sprites_irq_init] -Uplifting [keyboard_event_scan] best 4708854 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] reg byte a [ keyboard_event_scan::event_type#0 ] reg byte a [ keyboard_event_scan::$23 ] zp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp ZP_BYTE:199 [ keyboard_event_scan::row_scan#0 ] zp ZP_BYTE:201 [ keyboard_event_scan::$0 ] zp ZP_BYTE:203 [ keyboard_event_scan::$3 ] zp ZP_BYTE:205 [ keyboard_event_scan::$6 ] zp ZP_BYTE:207 [ keyboard_event_scan::$9 ] +Uplifting [keyboard_event_scan] best 4700884 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] reg byte a [ keyboard_event_scan::event_type#0 ] reg byte a [ keyboard_event_scan::$23 ] zp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp ZP_BYTE:199 [ keyboard_event_scan::row_scan#0 ] zp ZP_BYTE:201 [ keyboard_event_scan::$0 ] zp ZP_BYTE:203 [ keyboard_event_scan::$3 ] zp ZP_BYTE:205 [ keyboard_event_scan::$6 ] zp ZP_BYTE:207 [ keyboard_event_scan::$9 ] Limited combination testing to 100 combinations of 524288 possible. -Uplifting [play_collision] best 4558854 combination zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] reg byte a [ play_collision::$5 ] zp ZP_BYTE:51 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] zp ZP_BYTE:156 [ play_collision::$14 ] zp ZP_BYTE:159 [ play_collision::i#1 ] zp ZP_BYTE:48 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] zp ZP_WORD:157 [ play_collision::playfield_line#0 ] zp ZP_WORD:154 [ play_collision::piece_gfx#0 ] zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] zp ZP_BYTE:46 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] zp ZP_BYTE:151 [ play_collision::return#14 ] zp ZP_BYTE:161 [ play_collision::return#13 ] zp ZP_BYTE:163 [ play_collision::return#1 ] zp ZP_BYTE:167 [ play_collision::return#0 ] zp ZP_BYTE:174 [ play_collision::return#10 ] zp ZP_BYTE:53 [ play_collision::return#15 ] +Uplifting [play_collision] best 4550884 combination zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] reg byte a [ play_collision::$5 ] zp ZP_BYTE:51 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] zp ZP_BYTE:156 [ play_collision::$14 ] zp ZP_BYTE:159 [ play_collision::i#1 ] zp ZP_BYTE:48 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] zp ZP_WORD:157 [ play_collision::playfield_line#0 ] zp ZP_WORD:154 [ play_collision::piece_gfx#0 ] zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] zp ZP_BYTE:46 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] zp ZP_BYTE:151 [ play_collision::return#14 ] zp ZP_BYTE:161 [ play_collision::return#13 ] zp ZP_BYTE:163 [ play_collision::return#1 ] zp ZP_BYTE:167 [ play_collision::return#0 ] zp ZP_BYTE:174 [ play_collision::return#10 ] zp ZP_BYTE:53 [ play_collision::return#15 ] Limited combination testing to 100 combinations of 429981696 possible. -Uplifting [play_lock_current] best 4464854 combination zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] zp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ] zp ZP_BYTE:192 [ play_lock_current::i#1 ] reg byte a [ play_lock_current::$4 ] zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] zp ZP_WORD:190 [ play_lock_current::playfield_line#0 ] zp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] +Uplifting [play_lock_current] best 4456884 combination zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] zp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ] zp ZP_BYTE:192 [ play_lock_current::i#1 ] reg byte a [ play_lock_current::$4 ] zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] zp ZP_WORD:190 [ play_lock_current::playfield_line#0 ] zp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Limited combination testing to 100 combinations of 2916 possible. -Uplifting [play_remove_lines] best 4325854 combination reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] reg byte x [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ] zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] zp ZP_BYTE:188 [ play_remove_lines::c#0 ] zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] zp ZP_BYTE:169 [ play_remove_lines::return#0 ] +Uplifting [play_remove_lines] best 4317884 combination reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] reg byte x [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ] zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] zp ZP_BYTE:188 [ play_remove_lines::c#0 ] zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] zp ZP_BYTE:169 [ play_remove_lines::return#0 ] Limited combination testing to 100 combinations of 20736 possible. -Uplifting [] best 4325612 combination zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ] zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] zp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] zp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] zp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] zp ZP_WORD:27 [ current_piece_gfx#64 current_piece_gfx#112 current_piece_gfx#113 ] zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] zp ZP_WORD:44 [ current_piece#17 current_piece#96 current_piece#97 current_piece#98 current_piece#99 current_piece#100 ] reg byte x [ render_screen_render#22 render_screen_render#64 ] reg byte x [ next_piece_idx#12 next_piece_idx#77 next_piece_idx#78 ] reg byte a [ render_screen_render#15 render_screen_render#66 ] reg byte x [ current_ypos#13 current_ypos#98 current_ypos#99 ] zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#102 current_piece#93 ] zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] zp ZP_DWORD:59 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#0 score_bcd#16 score_bcd#29 ] zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] zp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] zp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] +Uplifting [] best 4317642 combination zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ] zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] zp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] zp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] zp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] zp ZP_WORD:27 [ current_piece_gfx#64 current_piece_gfx#112 current_piece_gfx#113 ] zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] zp ZP_WORD:44 [ current_piece#17 current_piece#96 current_piece#97 current_piece#98 current_piece#99 current_piece#100 ] reg byte x [ render_screen_render#22 render_screen_render#64 ] reg byte x [ next_piece_idx#12 next_piece_idx#77 next_piece_idx#78 ] reg byte a [ render_screen_render#15 render_screen_render#66 ] reg byte x [ current_ypos#13 current_ypos#98 current_ypos#99 ] zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#102 current_piece#93 ] zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] zp ZP_DWORD:59 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#0 score_bcd#16 score_bcd#29 ] zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] zp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] zp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] Limited combination testing to 100 combinations of 1944 possible. -Uplifting [render_moving] best 4310612 combination zp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] zp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] reg byte a [ render_moving::current_cell#0 ] zp ZP_BYTE:134 [ render_moving::$1 ] zp ZP_BYTE:135 [ render_moving::$6 ] zp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] zp ZP_WORD:136 [ render_moving::screen_line#0 ] zp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] +Uplifting [render_moving] best 4302642 combination zp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] zp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] reg byte a [ render_moving::current_cell#0 ] zp ZP_BYTE:134 [ render_moving::$1 ] zp ZP_BYTE:135 [ render_moving::$6 ] zp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] zp ZP_WORD:136 [ render_moving::screen_line#0 ] zp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Limited combination testing to 100 combinations of 15552 possible. -Uplifting [render_next] best 4295608 combination zp ZP_WORD:19 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] reg byte x [ render_next::c#2 render_next::c#1 ] zp ZP_WORD:21 [ 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 ] reg byte a [ render_next::cell#0 ] zp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] zp ZP_BYTE:132 [ render_next::next_piece_char#0 ] reg byte y [ render_next::$6 ] +Uplifting [render_next] best 4287638 combination zp ZP_WORD:19 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] reg byte x [ render_next::c#2 render_next::c#1 ] zp ZP_WORD:21 [ 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 ] reg byte a [ render_next::cell#0 ] zp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] zp ZP_BYTE:132 [ render_next::next_piece_char#0 ] reg byte y [ render_next::$6 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [play_increase_level] best 4281602 combination reg byte a [ play_increase_level::$5 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] reg byte a [ play_increase_level::$1 ] -Uplifting [render_playfield] best 4280602 combination zp ZP_WORD:38 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] zp ZP_BYTE:40 [ render_playfield::c#2 render_playfield::c#1 ] zp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] reg byte a [ render_playfield::$2 ] reg byte a [ render_playfield::$6 ] zp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] +Uplifting [play_increase_level] best 4273632 combination reg byte a [ play_increase_level::$5 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] reg byte a [ play_increase_level::$1 ] +Uplifting [render_playfield] best 4272632 combination zp ZP_WORD:38 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] zp ZP_BYTE:40 [ render_playfield::c#2 render_playfield::c#1 ] zp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] reg byte a [ render_playfield::$2 ] reg byte a [ render_playfield::$6 ] zp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [keyboard_matrix_read] best 4268596 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ] -Uplifting [render_screen_original] best 4266496 combination zp ZP_WORD:112 [ 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 ] reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] zp ZP_WORD:114 [ 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_WORD:108 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] zp ZP_WORD:110 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] -Uplifting [play_spawn_current] best 4260477 combination reg byte a [ play_spawn_current::sid_rnd1_return#0 ] reg byte a [ play_spawn_current::$1 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] zp ZP_BYTE:173 [ play_spawn_current::$7 ] -Uplifting [main] best 4259277 combination reg byte a [ main::render#1 ] reg byte x [ main::key_event#0 ] -Uplifting [play_movement] best 4258665 combination reg byte a [ play_movement::return#3 ] zp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] zp ZP_BYTE:124 [ play_movement::key_event#0 ] reg byte a [ play_movement::$3 ] reg byte a [ play_movement::$4 ] zp ZP_BYTE:146 [ play_movement::render#2 ] +Uplifting [keyboard_matrix_read] best 4260626 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ] +Uplifting [render_screen_original] best 4258526 combination zp ZP_WORD:112 [ 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 ] reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] zp ZP_WORD:114 [ 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_WORD:108 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] zp ZP_WORD:110 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] +Uplifting [play_spawn_current] best 4252507 combination reg byte a [ play_spawn_current::sid_rnd1_return#0 ] reg byte a [ play_spawn_current::$1 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] zp ZP_BYTE:173 [ play_spawn_current::$7 ] +Uplifting [main] best 4251307 combination reg byte a [ main::render#1 ] reg byte x [ main::key_event#0 ] +Uplifting [play_movement] best 4250695 combination reg byte a [ play_movement::return#3 ] zp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] zp ZP_BYTE:124 [ play_movement::key_event#0 ] reg byte a [ play_movement::$3 ] reg byte a [ play_movement::$4 ] zp ZP_BYTE:146 [ play_movement::render#2 ] Limited combination testing to 100 combinations of 576 possible. -Uplifting [keyboard_event_get] best 4257759 combination reg byte x [ keyboard_event_get::return#3 ] reg byte x [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] -Uplifting [play_init] best 4257549 combination reg byte a [ play_init::$5 ] zp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ] reg byte y [ play_init::j#2 play_init::j#1 ] reg byte x [ play_init::$4 ] zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] zp ZP_WORD:96 [ play_init::pli#2 play_init::pli#1 ] +Uplifting [keyboard_event_get] best 4249789 combination reg byte x [ keyboard_event_get::return#3 ] reg byte x [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] +Uplifting [play_init] best 4249579 combination reg byte a [ play_init::$5 ] zp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ] reg byte y [ play_init::j#2 play_init::j#1 ] reg byte x [ play_init::$4 ] zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] zp ZP_WORD:96 [ play_init::pli#2 play_init::pli#1 ] Limited combination testing to 100 combinations of 432 possible. -Uplifting [render_bcd] best 4257519 combination zp ZP_WORD:8 [ 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 ] 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 ] zp ZP_WORD:14 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] reg byte a [ render_bcd::$5 ] reg byte a [ render_bcd::$6 ] reg byte a [ render_bcd::$3 ] zp ZP_BYTE:130 [ render_bcd::$4 ] zp ZP_WORD:10 [ render_bcd::offset#6 ] zp ZP_BYTE:12 [ render_bcd::only_low#6 ] +Uplifting [render_bcd] best 4249549 combination zp ZP_WORD:8 [ 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 ] 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 ] zp ZP_WORD:14 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] reg byte a [ render_bcd::$5 ] reg byte a [ render_bcd::$6 ] reg byte a [ render_bcd::$3 ] zp ZP_BYTE:130 [ render_bcd::$4 ] zp ZP_WORD:10 [ render_bcd::offset#6 ] zp ZP_BYTE:12 [ render_bcd::only_low#6 ] Limited combination testing to 100 combinations of 1536 possible. -Uplifting [render_init] best 4257349 combination reg byte y [ render_init::i#2 render_init::i#1 ] reg byte x [ render_init::$13 ] zp ZP_WORD:105 [ render_init::li_2#2 render_init::li_2#1 ] zp ZP_WORD:103 [ render_init::li_1#2 render_init::li_1#1 ] -Uplifting [sprites_init] best 4257179 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [play_move_down] best 4257146 combination reg byte x [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] reg byte a [ play_move_down::return#0 ] reg byte a [ play_move_down::$2 ] reg byte a [ play_move_down::$12 ] zp ZP_BYTE:170 [ play_move_down::removed#0 ] zp ZP_BYTE:141 [ play_move_down::key_event#0 ] zp ZP_BYTE:73 [ play_move_down::return#3 ] +Uplifting [render_init] best 4249379 combination reg byte y [ render_init::i#2 render_init::i#1 ] reg byte x [ render_init::$13 ] zp ZP_WORD:105 [ render_init::li_2#2 render_init::li_2#1 ] zp ZP_WORD:103 [ render_init::li_1#2 render_init::li_1#1 ] +Uplifting [sprites_init] best 4249209 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplifting [play_move_down] best 4249176 combination reg byte x [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] reg byte a [ play_move_down::return#0 ] reg byte a [ play_move_down::$2 ] reg byte a [ play_move_down::$12 ] zp ZP_BYTE:170 [ play_move_down::removed#0 ] zp ZP_BYTE:141 [ play_move_down::key_event#0 ] zp ZP_BYTE:73 [ play_move_down::return#3 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [keyboard_event_pressed] best 4257126 combination reg byte a [ keyboard_event_pressed::return#12 ] reg byte a [ keyboard_event_pressed::$0 ] reg byte a [ keyboard_event_pressed::$1 ] reg byte a [ keyboard_event_pressed::return#0 ] zp ZP_BYTE:202 [ keyboard_event_pressed::return#1 ] zp ZP_BYTE:204 [ keyboard_event_pressed::return#2 ] zp ZP_BYTE:206 [ keyboard_event_pressed::return#10 ] zp ZP_BYTE:194 [ keyboard_event_pressed::row_bits#0 ] zp ZP_BYTE:196 [ keyboard_event_pressed::return#11 ] zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] +Uplifting [keyboard_event_pressed] best 4249156 combination reg byte a [ keyboard_event_pressed::return#12 ] reg byte a [ keyboard_event_pressed::$0 ] reg byte a [ keyboard_event_pressed::$1 ] reg byte a [ keyboard_event_pressed::return#0 ] zp ZP_BYTE:202 [ keyboard_event_pressed::return#1 ] zp ZP_BYTE:204 [ keyboard_event_pressed::return#2 ] zp ZP_BYTE:206 [ keyboard_event_pressed::return#10 ] zp ZP_BYTE:194 [ keyboard_event_pressed::row_bits#0 ] zp ZP_BYTE:196 [ keyboard_event_pressed::return#11 ] zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] Limited combination testing to 100 combinations of 589824 possible. -Uplifting [sprites_irq] best 4257102 combination zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp ZP_BYTE:222 [ sprites_irq::ptr#1 ] zp ZP_BYTE:217 [ sprites_irq::ypos#0 ] zp ZP_BYTE:219 [ sprites_irq::ptr#0 ] +Uplifting [sprites_irq] best 4249132 combination zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp ZP_BYTE:222 [ sprites_irq::ptr#1 ] zp ZP_BYTE:217 [ sprites_irq::ypos#0 ] zp ZP_BYTE:219 [ sprites_irq::ptr#0 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [play_move_rotate] best 4257084 combination zp ZP_BYTE:43 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] reg byte a [ play_move_rotate::return#0 ] reg byte x [ play_move_rotate::$5 ] reg byte a [ play_move_rotate::$2 ] zp ZP_BYTE:153 [ play_move_rotate::$7 ] zp ZP_BYTE:147 [ play_move_rotate::key_event#0 ] zp ZP_BYTE:42 [ play_move_rotate::return#2 ] +Uplifting [play_move_rotate] best 4249114 combination zp ZP_BYTE:43 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] reg byte a [ play_move_rotate::return#0 ] reg byte x [ play_move_rotate::$5 ] reg byte a [ play_move_rotate::$2 ] zp ZP_BYTE:153 [ play_move_rotate::$7 ] zp ZP_BYTE:147 [ play_move_rotate::key_event#0 ] zp ZP_BYTE:42 [ play_move_rotate::return#2 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [play_update_score] best 4257062 combination reg byte a [ play_update_score::$2 ] reg byte a [ play_update_score::$9 ] reg byte a [ play_update_score::$4 ] reg byte a [ play_update_score::lines_after#0 ] zp ZP_DWORD:180 [ play_update_score::add_bcd#0 ] zp ZP_BYTE:171 [ play_update_score::removed#0 ] zp ZP_BYTE:178 [ play_update_score::lines_before#0 ] +Uplifting [play_update_score] best 4249092 combination reg byte a [ play_update_score::$2 ] reg byte a [ play_update_score::$9 ] reg byte a [ play_update_score::$4 ] reg byte a [ play_update_score::lines_after#0 ] zp ZP_DWORD:180 [ play_update_score::add_bcd#0 ] zp ZP_BYTE:171 [ play_update_score::removed#0 ] zp ZP_BYTE:178 [ play_update_score::lines_before#0 ] Limited combination testing to 100 combinations of 2304 possible. -Uplifting [play_move_leftright] best 4257035 combination reg byte a [ play_move_leftright::return#0 ] reg byte a [ play_move_leftright::$4 ] reg byte a [ play_move_leftright::$8 ] reg byte a [ play_move_leftright::key_event#0 ] zp ZP_BYTE:54 [ play_move_leftright::return#2 ] +Uplifting [play_move_leftright] best 4249065 combination reg byte a [ play_move_leftright::return#0 ] reg byte a [ play_move_leftright::$4 ] reg byte a [ play_move_leftright::$8 ] reg byte a [ play_move_leftright::key_event#0 ] zp ZP_BYTE:54 [ play_move_leftright::return#2 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [render_show] best 4257026 combination reg byte a [ render_show::d018val#3 ] -Uplifting [render_score] best 4257026 combination zp ZP_WORD:6 [ render_score::screen#3 ] -Uplifting [sid_rnd_init] best 4257026 combination -Uplifting [render_screen_swap] best 4257026 combination -Uplifting [sprites_irq_init] best 4257026 combination +Uplifting [render_show] best 4249056 combination reg byte a [ render_show::d018val#3 ] +Uplifting [render_score] best 4249056 combination zp ZP_WORD:6 [ render_score::screen#3 ] +Uplifting [sid_rnd_init] best 4249056 combination +Uplifting [render_screen_swap] best 4249056 combination +Uplifting [sprites_irq_init] best 4249056 combination Attempting to uplift remaining variables inzp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] -Uplifting [] best 4257026 combination zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] +Uplifting [] best 4249056 combination zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] -Uplifting [play_collision] best 4257026 combination zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] +Uplifting [play_collision] best 4249056 combination zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] -Uplifting [play_lock_current] best 4257026 combination zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] +Uplifting [play_lock_current] best 4249056 combination zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] Attempting to uplift remaining variables inzp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] -Uplifting [keyboard_event_scan] best 4107026 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] +Uplifting [keyboard_event_scan] best 4099056 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] -Uplifting [play_remove_lines] best 4107026 combination zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] +Uplifting [play_remove_lines] best 4099056 combination zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] -Uplifting [play_lock_current] best 4107026 combination zp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] +Uplifting [play_lock_current] best 4099056 combination zp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:51 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] -Uplifting [play_collision] best 4107026 combination zp ZP_BYTE:51 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] +Uplifting [play_collision] best 4099056 combination zp ZP_BYTE:51 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] -Uplifting [keyboard_event_scan] best 4107026 combination zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] +Uplifting [keyboard_event_scan] best 4099056 combination zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] -Uplifting [play_remove_lines] best 4107026 combination zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] +Uplifting [play_remove_lines] best 4099056 combination zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:188 [ play_remove_lines::c#0 ] -Uplifting [play_remove_lines] best 4107026 combination zp ZP_BYTE:188 [ play_remove_lines::c#0 ] +Uplifting [play_remove_lines] best 4099056 combination zp ZP_BYTE:188 [ play_remove_lines::c#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] -Uplifting [render_moving] best 4107026 combination zp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] +Uplifting [render_moving] best 4099056 combination zp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] -Uplifting [play_remove_lines] best 4107026 combination zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] +Uplifting [play_remove_lines] best 4099056 combination zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:192 [ play_lock_current::i#1 ] -Uplifting [play_lock_current] best 4107026 combination zp ZP_BYTE:192 [ play_lock_current::i#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] -Uplifting [] best 4107026 combination zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] +Uplifting [play_lock_current] best 4099056 combination zp ZP_BYTE:192 [ play_lock_current::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Uplifting [keyboard_event_scan] best 4107026 combination zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] +Uplifting [keyboard_event_scan] best 4099056 combination zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:40 [ render_playfield::c#2 render_playfield::c#1 ] -Uplifting [render_playfield] best 4107026 combination zp ZP_BYTE:40 [ render_playfield::c#2 render_playfield::c#1 ] +Uplifting [render_playfield] best 4099056 combination zp ZP_BYTE:40 [ render_playfield::c#2 render_playfield::c#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:156 [ play_collision::$14 ] -Uplifting [play_collision] best 4103026 combination reg byte a [ play_collision::$14 ] +Uplifting [play_collision] best 4095056 combination reg byte a [ play_collision::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] -Uplifting [play_remove_lines] best 4103026 combination zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] +Uplifting [play_remove_lines] best 4095056 combination zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:159 [ play_collision::i#1 ] -Uplifting [play_collision] best 4103026 combination zp ZP_BYTE:159 [ play_collision::i#1 ] +Uplifting [play_collision] best 4095056 combination zp ZP_BYTE:159 [ play_collision::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] -Uplifting [render_playfield] best 4103026 combination zp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] +Uplifting [render_playfield] best 4095056 combination zp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] -Uplifting [render_moving] best 4103026 combination zp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] +Uplifting [render_moving] best 4095056 combination zp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:48 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] -Uplifting [play_collision] best 4103026 combination zp ZP_BYTE:48 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] +Uplifting [play_collision] best 4095056 combination zp ZP_BYTE:48 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:199 [ keyboard_event_scan::row_scan#0 ] -Uplifting [keyboard_event_scan] best 4103026 combination zp ZP_BYTE:199 [ keyboard_event_scan::row_scan#0 ] +Uplifting [keyboard_event_scan] best 4095056 combination zp ZP_BYTE:199 [ keyboard_event_scan::row_scan#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] -Uplifting [play_lock_current] best 4103026 combination zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] +Uplifting [play_lock_current] best 4095056 combination zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] -Uplifting [] best 4103026 combination zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] +Uplifting [] best 4095056 combination zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] -Uplifting [play_collision] best 4103026 combination zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] +Uplifting [play_collision] best 4095056 combination zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] -Uplifting [play_lock_current] best 4103026 combination zp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] +Uplifting [play_lock_current] best 4095056 combination zp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:134 [ render_moving::$1 ] -Uplifting [render_moving] best 4102426 combination reg byte a [ render_moving::$1 ] +Uplifting [render_moving] best 4094456 combination reg byte a [ render_moving::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:135 [ render_moving::$6 ] -Uplifting [render_moving] best 4102026 combination reg byte a [ render_moving::$6 ] +Uplifting [render_moving] best 4094056 combination reg byte a [ render_moving::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] -Uplifting [] best 4102026 combination zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] +Uplifting [] best 4094056 combination zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] -Uplifting [render_playfield] best 4102026 combination zp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] +Uplifting [render_playfield] best 4094056 combination zp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] -Uplifting [render_next] best 4102026 combination zp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] +Uplifting [render_next] best 4094056 combination zp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] -Uplifting [render_moving] best 4102026 combination zp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] +Uplifting [render_moving] best 4094056 combination zp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] +Uplifting [] best 4094056 combination zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] -Uplifting [render_moving] best 4102026 combination zp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] +Uplifting [render_moving] best 4094056 combination zp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] -Uplifting [] best 4102026 combination zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] +Uplifting [] best 4094056 combination zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] Attempting to uplift remaining variables inzp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] -Uplifting [] best 4102026 combination zp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] +Uplifting [] best 4094056 combination zp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:132 [ render_next::next_piece_char#0 ] -Uplifting [render_next] best 4102026 combination zp ZP_BYTE:132 [ render_next::next_piece_char#0 ] +Uplifting [render_next] best 4094056 combination zp ZP_BYTE:132 [ render_next::next_piece_char#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] -Uplifting [] best 4102026 combination zp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] +Uplifting [] best 4094056 combination zp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] -Uplifting [] best 4102026 combination zp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] +Uplifting [] best 4094056 combination zp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] -Uplifting [play_collision] best 4102026 combination zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] +Uplifting [play_collision] best 4094056 combination zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] -Uplifting [] best 4102026 combination zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] +Uplifting [] best 4094056 combination zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] Attempting to uplift remaining variables inzp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] -Uplifting [play_movement] best 4102026 combination zp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] +Uplifting [play_movement] best 4094056 combination zp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ] -Uplifting [play_init] best 4101926 combination reg byte x [ play_init::b#2 play_init::b#1 ] +Uplifting [play_init] best 4093956 combination reg byte x [ play_init::b#2 play_init::b#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -Uplifting [] best 4101926 combination zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] +Uplifting [] best 4093956 combination zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] Attempting to uplift remaining variables inzp ZP_BYTE:46 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] -Uplifting [play_collision] best 4101910 combination reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] +Uplifting [play_collision] best 4093940 combination reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] -Uplifting [render_screen_original] best 4101910 combination zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] +Uplifting [render_screen_original] best 4093940 combination zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] -Uplifting [] best 4101910 combination zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] +Uplifting [] best 4093940 combination zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] Attempting to uplift remaining variables inzp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] -Uplifting [] best 4101910 combination zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] +Uplifting [] best 4093940 combination zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [sprites_init] best 4101910 combination zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplifting [sprites_init] best 4093940 combination zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] -Uplifting [] best 4101910 combination zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] +Uplifting [] best 4093940 combination zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] Attempting to uplift remaining variables inzp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] -Uplifting [] best 4101910 combination zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] +Uplifting [] best 4093940 combination zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] Attempting to uplift remaining variables inzp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] -Uplifting [] best 4101910 combination zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] +Uplifting [] best 4093940 combination zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] Attempting to uplift remaining variables inzp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] -Uplifting [play_init] best 4101910 combination zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] +Uplifting [play_init] best 4093940 combination zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] -Uplifting [] best 4101910 combination zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] +Uplifting [] best 4093940 combination zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] -Uplifting [] best 4101910 combination zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] +Uplifting [] best 4093940 combination zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] -Uplifting [] best 4101910 combination zp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] +Uplifting [] best 4093940 combination zp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] -Uplifting [] best 4101910 combination zp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] +Uplifting [] best 4093940 combination zp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] -Uplifting [] best 4101910 combination zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] +Uplifting [] best 4093940 combination zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] Attempting to uplift remaining variables inzp ZP_BYTE:124 [ play_movement::key_event#0 ] -Uplifting [play_movement] best 4101910 combination zp ZP_BYTE:124 [ play_movement::key_event#0 ] +Uplifting [play_movement] best 4093940 combination zp ZP_BYTE:124 [ play_movement::key_event#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:43 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] -Uplifting [play_move_rotate] best 4101910 combination zp ZP_BYTE:43 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] +Uplifting [play_move_rotate] best 4093940 combination zp ZP_BYTE:43 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] -Uplifting [] best 4101910 combination zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] +Uplifting [] best 4093940 combination zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] -Uplifting [sprites_irq] best 4101910 combination zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] +Uplifting [sprites_irq] best 4093940 combination zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:130 [ render_bcd::$4 ] -Uplifting [render_bcd] best 4101904 combination reg byte a [ render_bcd::$4 ] +Uplifting [render_bcd] best 4093934 combination reg byte a [ render_bcd::$4 ] Attempting to uplift remaining variables inzp ZP_BYTE:151 [ play_collision::return#14 ] -Uplifting [play_collision] best 4101898 combination reg byte a [ play_collision::return#14 ] +Uplifting [play_collision] best 4093928 combination reg byte a [ play_collision::return#14 ] Attempting to uplift remaining variables inzp ZP_BYTE:153 [ play_move_rotate::$7 ] -Uplifting [play_move_rotate] best 4101892 combination reg byte x [ play_move_rotate::$7 ] +Uplifting [play_move_rotate] best 4093922 combination reg byte x [ play_move_rotate::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:161 [ play_collision::return#13 ] -Uplifting [play_collision] best 4101886 combination reg byte a [ play_collision::return#13 ] +Uplifting [play_collision] best 4093916 combination reg byte a [ play_collision::return#13 ] Attempting to uplift remaining variables inzp ZP_BYTE:163 [ play_collision::return#1 ] -Uplifting [play_collision] best 4101880 combination reg byte a [ play_collision::return#1 ] +Uplifting [play_collision] best 4093910 combination reg byte a [ play_collision::return#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:167 [ play_collision::return#0 ] -Uplifting [play_collision] best 4101874 combination reg byte a [ play_collision::return#0 ] +Uplifting [play_collision] best 4093904 combination reg byte a [ play_collision::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:169 [ play_remove_lines::return#0 ] -Uplifting [play_remove_lines] best 4101868 combination reg byte a [ play_remove_lines::return#0 ] +Uplifting [play_remove_lines] best 4093898 combination reg byte a [ play_remove_lines::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:170 [ play_move_down::removed#0 ] -Uplifting [play_move_down] best 4101862 combination reg byte a [ play_move_down::removed#0 ] +Uplifting [play_move_down] best 4093892 combination reg byte a [ play_move_down::removed#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:174 [ play_collision::return#10 ] -Uplifting [play_collision] best 4101856 combination reg byte a [ play_collision::return#10 ] +Uplifting [play_collision] best 4093886 combination reg byte a [ play_collision::return#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:201 [ keyboard_event_scan::$0 ] -Uplifting [keyboard_event_scan] best 4101850 combination reg byte a [ keyboard_event_scan::$0 ] +Uplifting [keyboard_event_scan] best 4093880 combination reg byte a [ keyboard_event_scan::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:202 [ keyboard_event_pressed::return#1 ] -Uplifting [keyboard_event_pressed] best 4101844 combination reg byte a [ keyboard_event_pressed::return#1 ] +Uplifting [keyboard_event_pressed] best 4093874 combination reg byte a [ keyboard_event_pressed::return#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:203 [ keyboard_event_scan::$3 ] -Uplifting [keyboard_event_scan] best 4101838 combination reg byte a [ keyboard_event_scan::$3 ] +Uplifting [keyboard_event_scan] best 4093868 combination reg byte a [ keyboard_event_scan::$3 ] Attempting to uplift remaining variables inzp ZP_BYTE:204 [ keyboard_event_pressed::return#2 ] -Uplifting [keyboard_event_pressed] best 4101832 combination reg byte a [ keyboard_event_pressed::return#2 ] +Uplifting [keyboard_event_pressed] best 4093862 combination reg byte a [ keyboard_event_pressed::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:205 [ keyboard_event_scan::$6 ] -Uplifting [keyboard_event_scan] best 4101826 combination reg byte a [ keyboard_event_scan::$6 ] +Uplifting [keyboard_event_scan] best 4093856 combination reg byte a [ keyboard_event_scan::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:206 [ keyboard_event_pressed::return#10 ] -Uplifting [keyboard_event_pressed] best 4101820 combination reg byte a [ keyboard_event_pressed::return#10 ] +Uplifting [keyboard_event_pressed] best 4093850 combination reg byte a [ keyboard_event_pressed::return#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:207 [ keyboard_event_scan::$9 ] -Uplifting [keyboard_event_scan] best 4101814 combination reg byte a [ keyboard_event_scan::$9 ] +Uplifting [keyboard_event_scan] best 4093844 combination reg byte a [ keyboard_event_scan::$9 ] Attempting to uplift remaining variables inzp ZP_BYTE:147 [ play_move_rotate::key_event#0 ] -Uplifting [play_move_rotate] best 4101805 combination reg byte a [ play_move_rotate::key_event#0 ] +Uplifting [play_move_rotate] best 4093835 combination reg byte a [ play_move_rotate::key_event#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:222 [ sprites_irq::ptr#1 ] -Uplifting [sprites_irq] best 4101793 combination reg byte x [ sprites_irq::ptr#1 ] +Uplifting [sprites_irq] best 4093823 combination reg byte x [ sprites_irq::ptr#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:217 [ sprites_irq::ypos#0 ] -Uplifting [sprites_irq] best 4101778 combination reg byte a [ sprites_irq::ypos#0 ] +Uplifting [sprites_irq] best 4093808 combination reg byte a [ sprites_irq::ypos#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:219 [ sprites_irq::ptr#0 ] -Uplifting [sprites_irq] best 4101763 combination reg byte x [ sprites_irq::ptr#0 ] +Uplifting [sprites_irq] best 4093793 combination reg byte x [ sprites_irq::ptr#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:141 [ play_move_down::key_event#0 ] -Uplifting [play_move_down] best 4101757 combination reg byte a [ play_move_down::key_event#0 ] +Uplifting [play_move_down] best 4093787 combination reg byte a [ play_move_down::key_event#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:194 [ keyboard_event_pressed::row_bits#0 ] -Uplifting [keyboard_event_pressed] best 4101757 combination zp ZP_BYTE:194 [ keyboard_event_pressed::row_bits#0 ] +Uplifting [keyboard_event_pressed] best 4093787 combination zp ZP_BYTE:194 [ keyboard_event_pressed::row_bits#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:196 [ keyboard_event_pressed::return#11 ] -Uplifting [keyboard_event_pressed] best 4101739 combination reg byte a [ keyboard_event_pressed::return#11 ] +Uplifting [keyboard_event_pressed] best 4093769 combination reg byte a [ keyboard_event_pressed::return#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:53 [ play_collision::return#15 ] -Uplifting [play_collision] best 4101709 combination reg byte a [ play_collision::return#15 ] +Uplifting [play_collision] best 4093739 combination reg byte a [ play_collision::return#15 ] Attempting to uplift remaining variables inzp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] -Uplifting [keyboard_event_pressed] best 4101709 combination zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] +Uplifting [keyboard_event_pressed] best 4093739 combination zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:171 [ play_update_score::removed#0 ] -Uplifting [play_update_score] best 4101703 combination reg byte x [ play_update_score::removed#0 ] +Uplifting [play_update_score] best 4093733 combination reg byte x [ play_update_score::removed#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:12 [ render_bcd::only_low#6 ] -Uplifting [render_bcd] best 4101682 combination reg byte y [ render_bcd::only_low#6 ] +Uplifting [render_bcd] best 4093712 combination reg byte y [ render_bcd::only_low#6 ] Attempting to uplift remaining variables inzp ZP_BYTE:146 [ play_movement::render#2 ] -Uplifting [play_movement] best 4101682 combination zp ZP_BYTE:146 [ play_movement::render#2 ] +Uplifting [play_movement] best 4093712 combination zp ZP_BYTE:146 [ play_movement::render#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:42 [ play_move_rotate::return#2 ] -Uplifting [play_move_rotate] best 4101673 combination reg byte a [ play_move_rotate::return#2 ] +Uplifting [play_move_rotate] best 4093703 combination reg byte a [ play_move_rotate::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:54 [ play_move_leftright::return#2 ] -Uplifting [play_move_leftright] best 4101664 combination reg byte a [ play_move_leftright::return#2 ] +Uplifting [play_move_leftright] best 4093694 combination reg byte a [ play_move_leftright::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:73 [ play_move_down::return#3 ] -Uplifting [play_move_down] best 4101657 combination reg byte x [ play_move_down::return#3 ] +Uplifting [play_move_down] best 4093687 combination reg byte x [ play_move_down::return#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:178 [ play_update_score::lines_before#0 ] -Uplifting [play_update_score] best 4101657 combination zp ZP_BYTE:178 [ play_update_score::lines_before#0 ] +Uplifting [play_update_score] best 4093687 combination zp ZP_BYTE:178 [ play_update_score::lines_before#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:173 [ play_spawn_current::$7 ] -Uplifting [play_spawn_current] best 4101657 combination zp ZP_BYTE:173 [ play_spawn_current::$7 ] +Uplifting [play_spawn_current] best 4093687 combination zp ZP_BYTE:173 [ play_spawn_current::$7 ] Coalescing zero page register [ zp ZP_WORD:6 [ render_score::screen#3 ] ] with [ zp ZP_WORD:8 [ 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 ] ] - score: 6 Coalescing zero page register [ zp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] ] with [ zp ZP_BYTE:146 [ play_movement::render#2 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:10 [ render_bcd::offset#6 ] ] with [ zp ZP_WORD:14 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] ] - score: 1 @@ -18939,7 +18941,7 @@ Allocated (was zp ZP_DWORD:59) zp ZP_DWORD:3 [ score_bcd#26 score_bcd#18 score_b Allocated (was zp ZP_BYTE:63) zp ZP_BYTE:7 [ level#33 level#10 level#17 level#19 level#21 ] Allocated (was zp ZP_BYTE:64) zp ZP_BYTE:8 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] Allocated (was zp ZP_BYTE:65) zp ZP_BYTE:9 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -Allocated (was zp ZP_BYTE:74) zp ZP_BYTE:10 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] +Allocated (was zp ZP_BYTE:74) zp ZP_BYTE:10 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] Allocated (was zp ZP_BYTE:75) zp ZP_BYTE:11 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] Allocated (was zp ZP_BYTE:77) zp ZP_BYTE:12 [ play_remove_lines::y#8 play_remove_lines::y#1 current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] Allocated (was zp ZP_BYTE:78) zp ZP_BYTE:13 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 render_screen_render#33 render_screen_render#65 render_next::l#7 render_next::l#1 ] @@ -18970,9 +18972,9 @@ Allocated (was zp ZP_WORD:190) zp ZP_WORD:44 [ play_lock_current::playfield_line Allocated (was zp ZP_BYTE:194) zp ZP_BYTE:46 [ keyboard_event_pressed::row_bits#0 play_spawn_current::$7 ] Allocated (was zp ZP_BYTE:199) zp ZP_BYTE:47 [ keyboard_event_scan::row_scan#0 play_lock_current::i#1 play_collision::i#1 ] Interrupt procedure sprites_irq clobbers AXCNZV -Removing interrupt register storage sty regy+1 in SEG1194 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in SEG1233 [577] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in SEG1233 [577] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage sty regy+1 in SEG1190 entry interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage regy: in SEG1229 [576] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage ldy #00 in SEG1229 [576] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -19213,7 +19215,7 @@ main: { // asm { sei } sei // [18] call render_init - // [498] phi from main::@8 to render_init [phi:main::@8->render_init] + // [497] phi from main::@8 to render_init [phi:main::@8->render_init] render_init_from_b8: jsr render_init // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -19236,7 +19238,7 @@ main: { // main::@11 b11: // [24] call play_init - // [457] phi from main::@11 to play_init [phi:main::@11->play_init] + // [456] phi from main::@11 to play_init [phi:main::@11->play_init] play_init_from_b11: jsr play_init // [25] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -19263,7 +19265,7 @@ main: { // [287] phi from main::@13 to play_spawn_current [phi:main::@13->play_spawn_current] play_spawn_current_from_b13: // [287] phi (byte) game_over#65 = (byte) game_over#52 [phi:main::@13->play_spawn_current#0] -- register_copy - // [287] phi (byte) next_piece_idx#17 = (byte) play_spawn_current::piece_idx#2 [phi:main::@13->play_spawn_current#1] -- register_copy + // [287] phi (byte) next_piece_idx#17 = (byte) play_spawn_current::piece_idx#1 [phi:main::@13->play_spawn_current#1] -- register_copy jsr play_spawn_current // [29] phi from main::@13 to main::@14 [phi:main::@13->main::@14] b14_from_b13: @@ -19307,7 +19309,7 @@ main: { jmp b16 // main::@16 b16: - // [36] (byte~) next_piece_idx#77 ← (byte) play_spawn_current::piece_idx#2 -- vbuxx=vbuz1 + // [36] (byte~) next_piece_idx#77 ← (byte) play_spawn_current::piece_idx#1 -- vbuxx=vbuz1 ldx play_spawn_current.piece_idx // [37] call render_next // [109] phi from main::@16 to render_next [phi:main::@16->render_next] @@ -19352,7 +19354,7 @@ main: { lda #0 sta keyboard_events_size // [40] phi (byte) render_screen_showing#13 = (byte) render_screen_showing#0 [phi:main::@17->main::@1#6] -- register_copy - // [40] phi (byte) next_piece_idx#10 = (byte) play_spawn_current::piece_idx#2 [phi:main::@17->main::@1#7] -- register_copy + // [40] phi (byte) next_piece_idx#10 = (byte) play_spawn_current::piece_idx#1 [phi:main::@17->main::@1#7] -- register_copy // [40] phi (byte) game_over#10 = (byte) game_over#52 [phi:main::@17->main::@1#8] -- register_copy // [40] phi (byte) current_ypos#11 = (byte) current_ypos#6 [phi:main::@17->main::@1#9] -- register_copy // [40] phi (byte) current_xpos#14 = (byte) current_xpos#100 [phi:main::@17->main::@1#10] -- register_copy @@ -19415,7 +19417,7 @@ main: { // main::@18 b18: // [45] call keyboard_event_scan - // [392] phi from main::@18 to keyboard_event_scan [phi:main::@18->keyboard_event_scan] + // [391] phi from main::@18 to keyboard_event_scan [phi:main::@18->keyboard_event_scan] keyboard_event_scan_from_b18: jsr keyboard_event_scan // [46] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -20577,9 +20579,9 @@ play_move_down: { // play_move_down::@1 b1: // [252] call keyboard_event_pressed - // [381] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed] + // [380] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed] keyboard_event_pressed_from_b1: - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_SPACE#0 [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_SPACE#0 [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_SPACE sta keyboard_event_pressed.keycode jsr keyboard_event_pressed @@ -20676,7 +20678,7 @@ play_move_down: { // play_move_down::@14 b14: // [274] call play_remove_lines - // [340] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines] + // [339] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines] play_remove_lines_from_b14: jsr play_remove_lines // [275] (byte) play_remove_lines::return#0 ← (byte) play_remove_lines::removed#8 -- vbuaa=vbuz1 @@ -20717,7 +20719,7 @@ play_move_down: { sta current_piece_gfx+1 // [283] phi from play_move_down::@17 to play_move_down::@11 [phi:play_move_down::@17->play_move_down::@11] b11_from_b17: - // [283] phi (byte) next_piece_idx#30 = (byte) play_spawn_current::piece_idx#2 [phi:play_move_down::@17->play_move_down::@11#0] -- register_copy + // [283] phi (byte) next_piece_idx#30 = (byte) play_spawn_current::piece_idx#1 [phi:play_move_down::@17->play_move_down::@11#0] -- register_copy // [283] phi (byte) game_over#27 = (byte) game_over#52 [phi:play_move_down::@17->play_move_down::@11#1] -- register_copy // [283] phi (byte) current_xpos#43 = (byte) current_xpos#100 [phi:play_move_down::@17->play_move_down::@11#2] -- register_copy // [283] phi (byte*) current_piece_gfx#35 = (byte*~) current_piece_gfx#117 [phi:play_move_down::@17->play_move_down::@11#3] -- register_copy @@ -20868,37 +20870,29 @@ play_spawn_current: { jmp b1 // play_spawn_current::@1 b1: - // [302] phi from play_spawn_current::@1 to play_spawn_current::@2 [phi:play_spawn_current::@1->play_spawn_current::@2] - b2_from_b1: - // [302] phi (byte) play_spawn_current::piece_idx#2 = (byte) 7 [phi:play_spawn_current::@1->play_spawn_current::@2#0] -- vbuz1=vbuc1 - lda #7 + jmp sid_rnd1 + // play_spawn_current::sid_rnd1 + sid_rnd1: + // [302] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 + lda SID_VOICE3_OSC + jmp b3 + // play_spawn_current::@3 + b3: + // [303] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 -- vbuz1=vbuaa_band_vbuc1 + and #7 sta piece_idx jmp b2 // play_spawn_current::@2 b2: - // [303] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 -- vbuz1_eq_vbuc1_then_la1 + // [304] if((byte) play_spawn_current::piece_idx#1==(byte) 7) goto play_spawn_current::sid_rnd1 -- vbuz1_eq_vbuc1_then_la1 lda #7 cmp piece_idx beq sid_rnd1 jmp breturn // play_spawn_current::@return breturn: - // [304] return + // [305] return rts - // play_spawn_current::sid_rnd1 - sid_rnd1: - // [305] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC - jmp b3 - // play_spawn_current::@3 - b3: - // [306] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 -- vbuz1=vbuaa_band_vbuc1 - and #7 - sta piece_idx - // [302] phi from play_spawn_current::@3 to play_spawn_current::@2 [phi:play_spawn_current::@3->play_spawn_current::@2] - b2_from_b3: - // [302] phi (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#1 [phi:play_spawn_current::@3->play_spawn_current::@2#0] -- register_copy - jmp b2 } // play_update_score // Update the score based on the number of lines removed @@ -20906,22 +20900,22 @@ play_spawn_current: { play_update_score: { .label lines_before = $26 .label add_bcd = $27 - // [307] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -- vbuxx_eq_0_then_la1 + // [306] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -- vbuxx_eq_0_then_la1 cpx #0 beq breturn_from_play_update_score jmp b1 // play_update_score::@1 b1: - // [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 -- vbuaa=_lo_vwuz1 + // [307] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 -- vbuaa=_lo_vwuz1 lda lines_bcd - // [309] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 -- vbuz1=vbuaa_band_vbuc1 + // [308] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 -- vbuz1=vbuaa_band_vbuc1 and #$f0 sta lines_before - // [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 -- vbuaa=vbuxx_rol_2 + // [309] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 -- vbuaa=vbuxx_rol_2 txa asl asl - // [311] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) -- vduz1=pduc1_derefidx_vbuaa + // [310] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$9) -- vduz1=pduc1_derefidx_vbuaa tay lda score_add_bcd,y sta add_bcd @@ -20933,7 +20927,7 @@ play_update_score: { sta add_bcd+3 // asm { sed } sed - // [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 -- vwuz1=vwuz1_plus_vbuxx + // [312] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 -- vwuz1=vwuz1_plus_vbuxx txa clc adc lines_bcd @@ -20941,7 +20935,7 @@ play_update_score: { bcc !+ inc lines_bcd+1 !: - // [314] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 -- vduz1=vduz1_plus_vduz2 + // [313] (dword) score_bcd#29 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 -- vduz1=vduz1_plus_vduz2 lda score_bcd clc adc add_bcd @@ -20957,41 +20951,41 @@ play_update_score: { sta score_bcd+3 // asm { cld } cld - // [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 -- vbuaa=_lo_vwuz1 + // [315] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 -- vbuaa=_lo_vwuz1 lda lines_bcd - // [317] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 -- vbuaa=vbuaa_band_vbuc1 + // [316] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 -- vbuaa=vbuaa_band_vbuc1 and #$f0 - // [318] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return -- vbuz1_eq_vbuaa_then_la1 + // [317] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return -- vbuz1_eq_vbuaa_then_la1 cmp lines_before beq breturn_from_b1 - // [319] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2] + // [318] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2] b2_from_b1: jmp b2 // play_update_score::@2 b2: - // [320] call play_increase_level + // [319] call play_increase_level jsr play_increase_level - // [321] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return] + // [320] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return] breturn_from_play_update_score: breturn_from_b1: breturn_from_b2: - // [321] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy - // [321] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy - // [321] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy - // [321] phi (dword) score_bcd#16 = (dword) score_bcd#18 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy - // [321] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#4] -- register_copy + // [320] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy + // [320] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy + // [320] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy + // [320] phi (dword) score_bcd#16 = (dword) score_bcd#18 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy + // [320] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#4] -- register_copy jmp breturn // play_update_score::@return breturn: - // [322] return + // [321] return rts } // play_increase_level // Increase the level play_increase_level: { - // [323] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1 + // [322] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1 inc level - // [324] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1 + // [323] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1 // Update speed of moving tetrominos down lda level cmp #$1d+1 @@ -20999,64 +20993,64 @@ play_increase_level: { jmp b3 // play_increase_level::@3 b3: - // [325] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2 + // [324] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2 ldy level lda MOVEDOWN_SLOW_SPEEDS,y sta current_movedown_slow - // [326] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1] + // [325] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1] b1_from_b3: - // [326] phi (byte) current_movedown_slow#66 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy + // [325] phi (byte) current_movedown_slow#66 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy jmp b1 - // [326] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1] + // [325] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1] b1_from_play_increase_level: - // [326] phi (byte) current_movedown_slow#66 = (byte) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1 + // [325] phi (byte) current_movedown_slow#66 = (byte) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1 lda #1 sta current_movedown_slow jmp b1 // play_increase_level::@1 b1: - // [327] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1 + // [326] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1 inc level_bcd - // [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 + // [327] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 lda #$f and level_bcd - // [329] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 -- vbuaa_neq_vbuc1_then_la1 + // [328] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 -- vbuaa_neq_vbuc1_then_la1 cmp #$a bne b2_from_b1 jmp b4 // play_increase_level::@4 b4: - // [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 -- vbuz1=vbuz1_plus_vbuc1 + // [329] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 -- vbuz1=vbuz1_plus_vbuc1 // If level low nybble hits $a change to $10 lax level_bcd axs #-[6] stx level_bcd - // [331] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2] + // [330] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2] b2_from_b1: b2_from_b4: - // [331] phi (byte) level_bcd#62 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy + // [330] phi (byte) level_bcd#62 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy jmp b2 // play_increase_level::@2 b2: // asm { sed } // Increase the score values gained sed - // [333] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5] + // [332] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5] b5_from_b2: - // [333] phi (byte) play_increase_level::b#2 = (byte) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuxx=vbuc1 + // [332] phi (byte) play_increase_level::b#2 = (byte) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuxx=vbuc1 ldx #0 jmp b5 - // [333] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5] + // [332] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5] b5_from_b5: - // [333] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy + // [332] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy jmp b5 // play_increase_level::@5 b5: - // [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 + // [333] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 txa asl asl - // [335] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) -- pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa + // [334] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) -- pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa tay clc lda score_add_bcd,y @@ -21071,9 +21065,9 @@ play_increase_level: { lda score_add_bcd+3,y adc SCORE_BASE_BCD+3,y sta score_add_bcd+3,y - // [336] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuxx=_inc_vbuxx + // [335] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuxx=_inc_vbuxx inx - // [337] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 -- vbuxx_neq_vbuc1_then_la1 + // [336] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne b5_from_b5 jmp b6 @@ -21084,7 +21078,7 @@ play_increase_level: { jmp breturn // play_increase_level::@return breturn: - // [339] return + // [338] return rts } // play_remove_lines @@ -21098,137 +21092,137 @@ play_remove_lines: { .label y = $c .label removed = $d .label full = $f - // [341] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1] + // [340] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1] b1_from_play_remove_lines: - // [341] phi (byte) play_remove_lines::removed#11 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1 + // [340] phi (byte) play_remove_lines::removed#11 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1 lda #0 sta removed - // [341] phi (byte) play_remove_lines::y#8 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1 + // [340] phi (byte) play_remove_lines::y#8 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1 lda #0 sta y - // [341] phi (byte) play_remove_lines::w#12 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuxx=vbuc1 + // [340] phi (byte) play_remove_lines::w#12 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuxx=vbuc1 ldx #PLAYFIELD_LINES*PLAYFIELD_COLS-1 - // [341] phi (byte) play_remove_lines::r#3 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuyy=vbuc1 + // [340] phi (byte) play_remove_lines::r#3 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuyy=vbuc1 ldy #PLAYFIELD_LINES*PLAYFIELD_COLS-1 jmp b1 // Read all lines and rewrite them - // [341] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1] + // [340] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1] b1_from_b6: - // [341] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#8 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy - // [341] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy - // [341] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy - // [341] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy + // [340] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#8 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy + // [340] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy + // [340] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy + // [340] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy jmp b1 // play_remove_lines::@1 b1: - // [342] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2] + // [341] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2] b2_from_b1: - // [342] phi (byte) play_remove_lines::full#4 = (byte) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1 + // [341] phi (byte) play_remove_lines::full#4 = (byte) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1 lda #1 sta full - // [342] phi (byte) play_remove_lines::x#2 = (byte) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1 + // [341] phi (byte) play_remove_lines::x#2 = (byte) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1 lda #0 sta x - // [342] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy - // [342] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy + // [341] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy + // [341] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy jmp b2 - // [342] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2] + // [341] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2] b2_from_b3: - // [342] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy - // [342] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy - // [342] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy - // [342] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy + // [341] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy + // [341] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy + // [341] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy + // [341] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy jmp b2 // play_remove_lines::@2 b2: - // [343] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuyy + // [342] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuyy lda playfield,y sta c - // [344] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuyy=_dec_vbuyy + // [343] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuyy=_dec_vbuyy dey - // [345] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1 + // [344] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1 lda c cmp #0 bne b9_from_b2 - // [347] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3] + // [346] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3] b3_from_b2: - // [347] phi (byte) play_remove_lines::full#2 = (byte) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1 + // [346] phi (byte) play_remove_lines::full#2 = (byte) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1 lda #0 sta full jmp b3 - // [346] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9] + // [345] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9] b9_from_b2: jmp b9 // play_remove_lines::@9 b9: - // [347] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3] + // [346] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3] b3_from_b9: - // [347] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy + // [346] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy jmp b3 // play_remove_lines::@3 b3: - // [348] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuxx=vbuz1 + // [347] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuxx=vbuz1 lda c sta playfield,x - // [349] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuxx=_dec_vbuxx + // [348] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuxx=_dec_vbuxx dex - // [350] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1 + // [349] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1 inc x - // [351] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte) 1+(byte) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1 + // [350] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte) 1+(byte) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_COLS-1+1 cmp x bne b2_from_b3 jmp b4 // play_remove_lines::@4 b4: - // [352] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1 + // [351] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1 lda #1 cmp full bne b6_from_b4 jmp b5 // play_remove_lines::@5 b5: - // [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 -- vbuxx=vbuxx_plus_vbuc1 + // [352] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[PLAYFIELD_COLS] - // [354] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1 + // [353] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1 inc removed - // [355] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6] + // [354] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6] b6_from_b4: b6_from_b5: - // [355] phi (byte) play_remove_lines::removed#8 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy - // [355] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy + // [354] phi (byte) play_remove_lines::removed#8 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy + // [354] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy jmp b6 // play_remove_lines::@6 b6: - // [356] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1 + // [355] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1 inc y - // [357] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1 + // [356] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_LINES-1+1 cmp y bne b1_from_b6 - // [358] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7] + // [357] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7] b7_from_b6: b7_from_b8: - // [358] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy + // [357] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy jmp b7 // Write zeros in the rest of the lines // play_remove_lines::@7 b7: - // [359] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 -- vbuxx_neq_vbuc1_then_la1 + // [358] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 -- vbuxx_neq_vbuc1_then_la1 cpx #$ff bne b8 jmp breturn // play_remove_lines::@return breturn: - // [360] return + // [359] return rts // play_remove_lines::@8 b8: - // [361] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [360] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta playfield,x - // [362] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuxx=_dec_vbuxx + // [361] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuxx=_dec_vbuxx dex jmp b7_from_b8 } @@ -21244,45 +21238,45 @@ play_lock_current: { .label i_3 = $11 .label i_7 = $11 .label i_9 = $11 - // [363] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 - // [364] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1] + // [362] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 + // [363] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1] b1_from_play_lock_current: - // [364] phi (byte) play_lock_current::l#6 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1 + // [363] phi (byte) play_lock_current::l#6 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1 lda #0 sta l - // [364] phi (byte) play_lock_current::i#3 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1 + // [363] phi (byte) play_lock_current::i#3 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1 lda #0 sta i_3 - // [364] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy + // [363] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy jmp b1 // play_lock_current::@1 b1: - // [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [364] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda yp asl - // [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) -- pbuz1=pptc1_derefidx_vbuaa + // [365] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) -- pbuz1=pptc1_derefidx_vbuaa tay lda playfield_lines,y sta playfield_line lda playfield_lines+1,y sta playfield_line+1 - // [367] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 -- vbuz1=vbuz2 + // [366] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 -- vbuz1=vbuz2 lda current_xpos sta xp - // [368] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2] + // [367] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2] b2_from_b1: - // [368] phi (byte) play_lock_current::c#2 = (byte) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuxx=vbuc1 + // [367] phi (byte) play_lock_current::c#2 = (byte) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuxx=vbuc1 ldx #0 - // [368] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy - // [368] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy + // [367] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy + // [367] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy jmp b2 // play_lock_current::@2 b2: - // [369] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2 + // [368] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2 ldy i_2 iny sty i - // [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1 + // [369] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1 ldy i_2 lda (current_piece_gfx),y cmp #0 @@ -21290,57 +21284,57 @@ play_lock_current: { jmp b4 // play_lock_current::@4 b4: - // [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3 + // [370] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3 lda current_piece_char ldy xp sta (playfield_line),y jmp b3 // play_lock_current::@3 b3: - // [372] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 -- vbuz1=_inc_vbuz1 + // [371] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 -- vbuz1=_inc_vbuz1 inc xp - // [373] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuxx=_inc_vbuxx + // [372] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuxx=_inc_vbuxx inx - // [374] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 -- vbuxx_neq_vbuc1_then_la1 + // [373] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 -- vbuxx_neq_vbuc1_then_la1 cpx #4 bne b7 jmp b5 // play_lock_current::@5 b5: - // [375] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 -- vbuz1=_inc_vbuz1 + // [374] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 -- vbuz1=_inc_vbuz1 inc yp - // [376] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1 + // [375] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1 inc l - // [377] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1 + // [376] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp l bne b6 jmp breturn // play_lock_current::@return breturn: - // [378] return + // [377] return rts // play_lock_current::@6 b6: - // [379] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 + // [378] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 lda i sta i_7 - // [364] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1] + // [363] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1] b1_from_b6: - // [364] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy - // [364] phi (byte) play_lock_current::i#3 = (byte~) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy - // [364] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy + // [363] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy + // [363] phi (byte) play_lock_current::i#3 = (byte~) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy + // [363] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy jmp b1 // play_lock_current::@7 b7: - // [380] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 + // [379] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 lda i sta i_9 - // [368] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2] + // [367] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2] b2_from_b7: - // [368] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy - // [368] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy - // [368] phi (byte) play_lock_current::i#2 = (byte~) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy + // [367] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy + // [367] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy + // [367] phi (byte) play_lock_current::i#2 = (byte~) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy jmp b2 } // keyboard_event_pressed @@ -21350,26 +21344,26 @@ play_lock_current: { keyboard_event_pressed: { .label row_bits = $2e .label keycode = $12 - // [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 -- vbuaa=vbuz1_ror_3 + // [381] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 -- vbuaa=vbuz1_ror_3 lda keycode lsr lsr lsr - // [383] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) -- vbuz1=pbuc1_derefidx_vbuaa + // [382] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) -- vbuz1=pbuc1_derefidx_vbuaa tay lda keyboard_scan_values,y sta row_bits - // [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 -- vbuaa=vbuz1_band_vbuc1 + // [383] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 -- vbuaa=vbuz1_band_vbuc1 lda #7 and keycode - // [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuaa + // [384] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuaa tay lda keyboard_matrix_col_bitmask,y and row_bits jmp breturn // keyboard_event_pressed::@return breturn: - // [386] return + // [385] return rts } // keyboard_event_get @@ -21377,32 +21371,32 @@ keyboard_event_pressed: { // Returns $ff if there is no event waiting. As all events are <$7f it is enough to examine bit 7 when determining if there is any event to process. // The buffer is filled by keyboard_event_scan() keyboard_event_get: { - // [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1 + // [386] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1 lda keyboard_events_size cmp #0 beq breturn_from_keyboard_event_get jmp b1 // keyboard_event_get::@1 b1: - // [388] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1 + // [387] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1 dec keyboard_events_size - // [389] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) -- vbuxx=pbuc1_derefidx_vbuz1 + // [388] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) -- vbuxx=pbuc1_derefidx_vbuz1 ldy keyboard_events_size ldx keyboard_events,y - // [390] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return] + // [389] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return] breturn_from_b1: - // [390] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy - // [390] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy + // [389] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy + // [389] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy jmp breturn - // [390] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return] + // [389] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return] breturn_from_keyboard_event_get: - // [390] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy - // [390] phi (byte) keyboard_event_get::return#2 = (byte) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuxx=vbuc1 + // [389] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy + // [389] phi (byte) keyboard_event_get::return#2 = (byte) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuxx=vbuc1 ldx #$ff jmp breturn // keyboard_event_get::@return breturn: - // [391] return + // [390] return rts } // keyboard_event_scan @@ -21414,35 +21408,35 @@ keyboard_event_scan: { .label row_scan = $2f .label keycode = $21 .label row = $20 - // [393] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7] + // [392] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7] b7_from_keyboard_event_scan: - // [393] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy - // [393] phi (byte) keyboard_event_scan::keycode#11 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1 + // [392] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy + // [392] phi (byte) keyboard_event_scan::keycode#11 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1 lda #0 sta keycode - // [393] phi (byte) keyboard_event_scan::row#2 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1 + // [392] phi (byte) keyboard_event_scan::row#2 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1 lda #0 sta row jmp b7 - // [393] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7] + // [392] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7] b7_from_b8: - // [393] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy - // [393] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy - // [393] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy + // [392] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy + // [392] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy + // [392] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy jmp b7 // keyboard_event_scan::@7 b7: - // [394] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuxx=vbuz1 + // [393] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuxx=vbuz1 ldx row - // [395] call keyboard_matrix_read + // [394] call keyboard_matrix_read jsr keyboard_matrix_read - // [396] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + // [395] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 jmp b19 // keyboard_event_scan::@19 b19: - // [397] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuaa + // [396] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuaa sta row_scan - // [398] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 + // [397] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 lda row_scan ldy row cmp keyboard_scan_values,y @@ -21450,123 +21444,123 @@ keyboard_event_scan: { jmp b16 // keyboard_event_scan::@16 b16: - // [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 + // [398] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 lax keycode axs #-[8] stx keycode - // [400] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8] + // [399] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8] b8_from_b15: b8_from_b16: - // [400] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy - // [400] phi (byte) keyboard_event_scan::keycode#13 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy + // [399] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy + // [399] phi (byte) keyboard_event_scan::keycode#13 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy jmp b8 // keyboard_event_scan::@8 b8: - // [401] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1 + // [400] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1 inc row - // [402] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1 + // [401] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp row bne b7_from_b8 - // [403] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17] + // [402] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17] b17_from_b8: jmp b17 // keyboard_event_scan::@17 b17: - // [404] call keyboard_event_pressed - // [381] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed] + // [403] call keyboard_event_pressed + // [380] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed] keyboard_event_pressed_from_b17: - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_LSHIFT#0 [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_LSHIFT#0 [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_LSHIFT sta keyboard_event_pressed.keycode jsr keyboard_event_pressed - // [405] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 + // [404] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 jmp b20 // keyboard_event_scan::@20 b20: - // [406] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 - // [407] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -- vbuaa_eq_0_then_la1 + // [405] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 + // [406] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -- vbuaa_eq_0_then_la1 cmp #0 beq b1_from_b20 - // [408] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18] + // [407] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18] b18_from_b20: jmp b18 // keyboard_event_scan::@18 b18: - // [409] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1] + // [408] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1] b1_from_b18: b1_from_b20: jmp b1 // keyboard_event_scan::@1 b1: - // [410] call keyboard_event_pressed - // [381] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed] + // [409] call keyboard_event_pressed + // [380] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed] keyboard_event_pressed_from_b1: - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_RSHIFT#0 [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_RSHIFT#0 [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_RSHIFT sta keyboard_event_pressed.keycode jsr keyboard_event_pressed - // [411] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 + // [410] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 jmp b21 // keyboard_event_scan::@21 b21: - // [412] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 - // [413] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -- vbuaa_eq_0_then_la1 + // [411] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 + // [412] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq b2_from_b21 - // [414] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4] + // [413] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4] b4_from_b21: jmp b4 // keyboard_event_scan::@4 b4: - // [415] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2] + // [414] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2] b2_from_b21: b2_from_b4: jmp b2 // keyboard_event_scan::@2 b2: - // [416] call keyboard_event_pressed - // [381] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed] + // [415] call keyboard_event_pressed + // [380] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed] keyboard_event_pressed_from_b2: - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_CTRL#0 [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_CTRL#0 [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_CTRL sta keyboard_event_pressed.keycode jsr keyboard_event_pressed - // [417] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 + // [416] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 jmp b22 // keyboard_event_scan::@22 b22: - // [418] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 - // [419] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -- vbuaa_eq_0_then_la1 + // [417] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 + // [418] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq b3_from_b22 - // [420] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5] + // [419] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5] b5_from_b22: jmp b5 // keyboard_event_scan::@5 b5: - // [421] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3] + // [420] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3] b3_from_b22: b3_from_b5: jmp b3 // keyboard_event_scan::@3 b3: - // [422] call keyboard_event_pressed - // [381] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed] + // [421] call keyboard_event_pressed + // [380] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed] keyboard_event_pressed_from_b3: - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_COMMODORE#0 [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_COMMODORE#0 [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_COMMODORE sta keyboard_event_pressed.keycode jsr keyboard_event_pressed - // [423] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 + // [422] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 jmp b23 // keyboard_event_scan::@23 b23: - // [424] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 - // [425] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -- vbuaa_eq_0_then_la1 + // [423] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 + // [424] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -- vbuaa_eq_0_then_la1 cmp #0 beq breturn - // [426] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6] + // [425] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6] b6_from_b23: jmp b6 // keyboard_event_scan::@6 @@ -21574,79 +21568,79 @@ keyboard_event_scan: { jmp breturn // keyboard_event_scan::@return breturn: - // [427] return + // [426] return rts // Something has changed on the keyboard row - check each column - // [428] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9] + // [427] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9] b9_from_b10: - // [428] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy - // [428] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy - // [428] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy + // [427] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy + // [427] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy + // [427] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy jmp b9 - // [428] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9] + // [427] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9] b9_from_b19: - // [428] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy - // [428] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy - // [428] phi (byte) keyboard_event_scan::col#2 = (byte) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuxx=vbuc1 + // [427] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy + // [427] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy + // [427] phi (byte) keyboard_event_scan::col#2 = (byte) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuxx=vbuc1 ldx #0 jmp b9 // keyboard_event_scan::@9 b9: - // [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) -- vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2 + // [428] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) -- vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2 lda row_scan ldy row eor keyboard_scan_values,y - // [430] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx + // [429] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx and keyboard_matrix_col_bitmask,x - // [431] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 -- vbuaa_eq_0_then_la1 + // [430] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 -- vbuaa_eq_0_then_la1 cmp #0 beq b10_from_b9 jmp b12 // keyboard_event_scan::@12 b12: - // [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1 + // [431] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1 lda #8 cmp keyboard_events_size beq b10_from_b12 jmp b13 // keyboard_event_scan::@13 b13: - // [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx + // [432] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx lda keyboard_matrix_col_bitmask,x and row_scan - // [434] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 -- vbuaa_eq_0_then_la1 + // [433] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 -- vbuaa_eq_0_then_la1 cmp #0 beq b11 jmp b14 // keyboard_event_scan::@14 b14: - // [435] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2 + // [434] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2 // Key pressed lda keycode ldy keyboard_events_size sta keyboard_events,y - // [436] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 + // [435] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 inc keyboard_events_size - // [437] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10] + // [436] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10] b10_from_b11: b10_from_b12: b10_from_b14: b10_from_b9: - // [437] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy + // [436] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy jmp b10 // keyboard_event_scan::@10 b10: - // [438] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1 + // [437] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1 inc keycode - // [439] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuxx=_inc_vbuxx + // [438] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuxx=_inc_vbuxx inx - // [440] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 -- vbuxx_neq_vbuc1_then_la1 + // [439] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne b9_from_b10 jmp b15 // keyboard_event_scan::@15 b15: - // [441] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [440] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2 // Store the current keyboard status for the row to debounce lda row_scan ldy row @@ -21654,14 +21648,14 @@ keyboard_event_scan: { jmp b8_from_b15 // keyboard_event_scan::@11 b11: - // [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 -- vbuaa=vbuz1_bor_vbuc1 + // [441] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 -- vbuaa=vbuz1_bor_vbuc1 lda #$40 ora keycode - // [443] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuaa + // [442] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuaa // Key released ldy keyboard_events_size sta keyboard_events,y - // [444] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 + // [443] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 inc keyboard_events_size jmp b10_from_b11 } @@ -21673,16 +21667,16 @@ keyboard_event_scan: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // [445] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [444] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x sta CIA1_PORT_A - // [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) -- vbuaa=_bnot__deref_pbuc1 + // [445] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) -- vbuaa=_bnot__deref_pbuc1 lda CIA1_PORT_B eor #$ff jmp breturn // keyboard_matrix_read::@return breturn: - // [447] return + // [446] return rts } // render_show @@ -21690,48 +21684,48 @@ keyboard_matrix_read: { render_show: { .const toD0181_return = (>(PLAYFIELD_SCREEN_1&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f .const toD0182_return = (>(PLAYFIELD_SCREEN_2&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f - // [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1 + // [447] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1 lda render_screen_show cmp #0 beq toD0181_from_render_show - // [449] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182] + // [448] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182] toD0182_from_render_show: jmp toD0182 // render_show::toD0182 toD0182: - // [450] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1] + // [449] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1] b1_from_toD0182: - // [450] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuaa=vbuc1 + // [449] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuaa=vbuc1 lda #toD0182_return jmp b1 // render_show::@1 b1: - // [451] *((const byte*) D018#0) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuaa + // [450] *((const byte*) D018#0) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuaa sta D018 - // [452] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [451] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy level lda PIECES_COLORS_1,y sta BGCOL2 - // [453] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [452] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy level lda PIECES_COLORS_2,y sta BGCOL3 - // [454] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 -- vbuz1=vbuz2 + // [453] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 -- vbuz1=vbuz2 lda render_screen_show sta render_screen_showing jmp breturn // render_show::@return breturn: - // [455] return + // [454] return rts - // [456] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181] + // [455] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181] toD0181_from_render_show: jmp toD0181 // render_show::toD0181 toD0181: - // [450] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1] + // [449] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1] b1_from_toD0181: - // [450] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuaa=vbuc1 + // [449] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuaa=vbuc1 lda #toD0181_return jmp b1 } @@ -21740,40 +21734,40 @@ render_show: { play_init: { .label pli = $22 .label idx = $14 - // [458] phi from play_init to play_init::@1 [phi:play_init->play_init::@1] + // [457] phi from play_init to play_init::@1 [phi:play_init->play_init::@1] b1_from_play_init: - // [458] phi (byte) play_init::idx#2 = (byte) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1 + // [457] phi (byte) play_init::idx#2 = (byte) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1 lda #0 sta idx - // [458] phi (byte*) play_init::pli#2 = (const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1 + // [457] phi (byte*) play_init::pli#2 = (const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1 lda #playfield sta pli+1 - // [458] phi (byte) play_init::j#2 = (byte) 0 [phi:play_init->play_init::@1#2] -- vbuyy=vbuc1 + // [457] phi (byte) play_init::j#2 = (byte) 0 [phi:play_init->play_init::@1#2] -- vbuyy=vbuc1 ldy #0 jmp b1 - // [458] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1] + // [457] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1] b1_from_b1: - // [458] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy - // [458] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy - // [458] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy + // [457] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy + // [457] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy + // [457] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy jmp b1 // play_init::@1 b1: - // [459] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 + // [458] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 tya asl tax - // [460] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuxx=pbuz1 + // [459] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuxx=pbuz1 lda pli sta playfield_lines,x lda pli+1 sta playfield_lines+1,x - // [461] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuyy=vbuz1 + // [460] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuyy=vbuz1 lda idx sta playfield_lines_idx,y - // [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 -- pbuz1=pbuz1_plus_vbuc1 + // [461] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 -- pbuz1=pbuz1_plus_vbuc1 lda #PLAYFIELD_COLS clc adc pli @@ -21781,42 +21775,42 @@ play_init: { bcc !+ inc pli+1 !: - // [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 -- vbuz1=vbuz1_plus_vbuc1 + // [462] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 -- vbuz1=vbuz1_plus_vbuc1 lax idx axs #-[PLAYFIELD_COLS] stx idx - // [464] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuyy=_inc_vbuyy + // [463] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuyy=_inc_vbuyy iny - // [465] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_init::@1 -- vbuyy_neq_vbuc1_then_la1 + // [464] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_init::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #PLAYFIELD_LINES-1+1 bne b1_from_b1 jmp b2 // play_init::@2 b2: - // [466] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 -- _deref_pbuc1=vbuc2 + // [465] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 -- _deref_pbuc1=vbuc2 lda #PLAYFIELD_COLS*PLAYFIELD_LINES sta playfield_lines_idx+PLAYFIELD_LINES - // [467] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) -- vbuz1=_deref_pbuc1 + // [466] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) -- vbuz1=_deref_pbuc1 // Set initial speed of moving down a tetromino lda MOVEDOWN_SLOW_SPEEDS sta current_movedown_slow - // [468] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3] + // [467] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3] b3_from_b2: - // [468] phi (byte) play_init::b#2 = (byte) 0 [phi:play_init::@2->play_init::@3#0] -- vbuxx=vbuc1 + // [467] phi (byte) play_init::b#2 = (byte) 0 [phi:play_init::@2->play_init::@3#0] -- vbuxx=vbuc1 ldx #0 jmp b3 // Set the initial score add values - // [468] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3] + // [467] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3] b3_from_b3: - // [468] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy + // [467] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy jmp b3 // play_init::@3 b3: - // [469] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 + // [468] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 txa asl asl - // [470] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) -- pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa + // [469] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) -- pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa tay lda SCORE_BASE_BCD,y sta score_add_bcd,y @@ -21826,15 +21820,15 @@ play_init: { sta score_add_bcd+2,y lda SCORE_BASE_BCD+3,y sta score_add_bcd+3,y - // [471] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuxx=_inc_vbuxx + // [470] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuxx=_inc_vbuxx inx - // [472] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 -- vbuxx_neq_vbuc1_then_la1 + // [471] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne b3_from_b3 jmp breturn // play_init::@return breturn: - // [473] return + // [472] return rts } // sprites_irq_init @@ -21842,36 +21836,36 @@ play_init: { sprites_irq_init: { // asm { sei } sei - // [475] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 + // [474] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 // Acknowledge any IRQ and setup the next one lda #IRQ_RASTER sta IRQ_STATUS // asm { ldaCIA1_INTERRUPT } lda CIA1_INTERRUPT - // [477] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2 + // [476] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR - // [478] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2 + // [477] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [479] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2 + // [478] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT - // [480] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [479] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line lda #$7f and VIC_CONTROL sta VIC_CONTROL - // [481] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 -- _deref_pbuc1=vbuc2 + // [480] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 -- _deref_pbuc1=vbuc2 lda #IRQ_RASTER_FIRST sta RASTER - // [482] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 + // [481] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE - // [483] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2 + // [482] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #sprites_init::@1] + // [489] phi from sprites_init to sprites_init::@1 [phi:sprites_init->sprites_init::@1] b1_from_sprites_init: - // [490] phi (byte) sprites_init::xpos#2 = (byte)(number) $18+(number) $f*(number) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1 + // [489] phi (byte) sprites_init::xpos#2 = (byte)(number) $18+(number) $f*(number) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1 lda #$18+$f*8 sta xpos - // [490] phi (byte) sprites_init::s#2 = (byte) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuyy=vbuc1 + // [489] phi (byte) sprites_init::s#2 = (byte) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuyy=vbuc1 ldy #0 jmp b1 - // [490] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1] + // [489] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1] b1_from_b1: - // [490] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy - // [490] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy + // [489] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy + // [489] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy jmp b1 // sprites_init::@1 b1: - // [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 + // [490] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 tya asl tax - // [492] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuxx=vbuz1 + // [491] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuxx=vbuz1 lda xpos sta SPRITES_XPOS,x - // [493] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuyy=vbuc2 + // [492] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuyy=vbuc2 lda #BLACK sta SPRITES_COLS,y - // [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 + // [493] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 lax xpos axs #-[$18] stx xpos - // [495] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuyy=_inc_vbuyy + // [494] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuyy=_inc_vbuyy iny - // [496] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 -- vbuyy_neq_vbuc1_then_la1 + // [495] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #4 bne b1_from_b1 jmp breturn // sprites_init::@return breturn: - // [497] return + // [496] return rts } // render_init @@ -21950,10 +21944,10 @@ render_init: { jmp vicSelectGfxBank1 // render_init::vicSelectGfxBank1 vicSelectGfxBank1: - // [499] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [498] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 sta CIA2_PORT_A_DDR - // [500] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] + // [499] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 // render_init::vicSelectGfxBank1_toDd001 @@ -21961,92 +21955,92 @@ render_init: { jmp vicSelectGfxBank1_b1 // render_init::vicSelectGfxBank1_@1 vicSelectGfxBank1_b1: - // [501] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [500] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return sta CIA2_PORT_A jmp b2 // render_init::@2 b2: - // [502] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 -- _deref_pbuc1=vbuc2 + // [501] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 -- _deref_pbuc1=vbuc2 // Enable Extended Background Color Mode lda #VIC_ECM|VIC_DEN|VIC_RSEL|3 sta D011 - // [503] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 + // [502] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 lda #BLACK sta BORDERCOL - // [504] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 + // [503] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 lda #BLACK sta BGCOL1 - // [505] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) -- _deref_pbuc1=_deref_pbuc2 + // [504] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) -- _deref_pbuc1=_deref_pbuc2 lda PIECES_COLORS_1 sta BGCOL2 - // [506] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) -- _deref_pbuc1=_deref_pbuc2 + // [505] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) -- _deref_pbuc1=_deref_pbuc2 lda PIECES_COLORS_2 sta BGCOL3 - // [507] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 -- _deref_pbuc1=vbuc2 + // [506] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 -- _deref_pbuc1=vbuc2 lda #GREY sta BGCOL4 - // [508] call render_screen_original - // [520] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original] + // [507] call render_screen_original + // [519] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original] render_screen_original_from_b2: - // [520] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_1#0 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1 + // [519] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_1#0 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_1 sta render_screen_original.screen+1 jsr render_screen_original - // [509] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3] + // [508] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3] b3_from_b2: jmp b3 // render_init::@3 b3: - // [510] call render_screen_original - // [520] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original] + // [509] call render_screen_original + // [519] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original] render_screen_original_from_b3: - // [520] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_2#0 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1 + // [519] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_2#0 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_2 sta render_screen_original.screen+1 jsr render_screen_original - // [511] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1] + // [510] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1] b1_from_b3: - // [511] phi (byte*) render_init::li_2#2 = (const byte*) PLAYFIELD_SCREEN_2#0+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1 + // [510] phi (byte*) render_init::li_2#2 = (const byte*) PLAYFIELD_SCREEN_2#0+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_2+2*$28+$10 sta li_2+1 - // [511] phi (byte*) render_init::li_1#2 = (const byte*) PLAYFIELD_SCREEN_1#0+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1 + // [510] phi (byte*) render_init::li_1#2 = (const byte*) PLAYFIELD_SCREEN_1#0+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_1+2*$28+$10 sta li_1+1 - // [511] phi (byte) render_init::i#2 = (byte) 0 [phi:render_init::@3->render_init::@1#2] -- vbuyy=vbuc1 + // [510] phi (byte) render_init::i#2 = (byte) 0 [phi:render_init::@3->render_init::@1#2] -- vbuyy=vbuc1 ldy #0 jmp b1 - // [511] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1] + // [510] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1] b1_from_b1: - // [511] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy - // [511] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy - // [511] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy + // [510] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy + // [510] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy + // [510] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy jmp b1 // render_init::@1 b1: - // [512] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 + // [511] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 tya asl tax - // [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuxx=pbuz1 + // [512] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuxx=pbuz1 lda li_1 sta screen_lines_1,x lda li_1+1 sta screen_lines_1+1,x - // [514] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuxx=pbuz1 + // [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuxx=pbuz1 lda li_2 sta screen_lines_2,x lda li_2+1 sta screen_lines_2+1,x - // [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [514] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc li_1 @@ -22054,7 +22048,7 @@ render_init: { bcc !+ inc li_1+1 !: - // [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [515] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc li_2 @@ -22062,15 +22056,15 @@ render_init: { bcc !+ inc li_2+1 !: - // [517] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuyy=_inc_vbuyy + // [516] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuyy=_inc_vbuyy iny - // [518] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto render_init::@1 -- vbuyy_neq_vbuc1_then_la1 + // [517] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto render_init::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #PLAYFIELD_LINES-1+1 bne b1_from_b1 jmp breturn // render_init::@return breturn: - // [519] return + // [518] return rts } // render_screen_original @@ -22084,184 +22078,184 @@ render_screen_original: { .label oscr = $19 .label ocols = $22 .label y = $18 - // [521] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1] + // [520] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1] b1_from_render_screen_original: - // [521] phi (byte) render_screen_original::y#6 = (byte) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1 + // [520] phi (byte) render_screen_original::y#6 = (byte) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1 lda #0 sta y - // [521] phi (byte*) render_screen_original::ocols#4 = (const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1 + // [520] phi (byte*) render_screen_original::ocols#4 = (const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1 lda #PLAYFIELD_COLORS_ORIGINAL+$20*2 sta ocols+1 - // [521] phi (byte*) render_screen_original::oscr#4 = (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1 + // [520] phi (byte*) render_screen_original::oscr#4 = (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_ORIGINAL+$20*2 sta oscr+1 - // [521] phi (byte*) render_screen_original::cols#7 = (const byte*) COLS#0 [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1 + // [520] phi (byte*) render_screen_original::cols#7 = (const byte*) COLS#0 [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1 lda #COLS sta cols+1 - // [521] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy + // [520] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy jmp b1 - // [521] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1] + // [520] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1] b1_from_b5: - // [521] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy - // [521] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy - // [521] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy - // [521] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy - // [521] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy + // [520] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy + // [520] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy + // [520] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy + // [520] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy + // [520] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy jmp b1 // render_screen_original::@1 b1: - // [522] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2] + // [521] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2] b2_from_b1: - // [522] phi (byte) render_screen_original::x#4 = (byte) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuxx=vbuc1 + // [521] phi (byte) render_screen_original::x#4 = (byte) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuxx=vbuc1 ldx #0 - // [522] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy - // [522] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy + // [521] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy + // [521] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy jmp b2 - // [522] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2] + // [521] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2] b2_from_b2: - // [522] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy - // [522] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy - // [522] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy + // [521] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy + // [521] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy + // [521] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy jmp b2 // render_screen_original::@2 b2: - // [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1 + // [522] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1 lda #SPACE ldy #0 sta (screen),y - // [524] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1 + // [523] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 + // [524] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 lda #BLACK ldy #0 sta (cols),y - // [526] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1 + // [525] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1 inc cols bne !+ inc cols+1 !: - // [527] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuxx=_inc_vbuxx + // [526] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuxx=_inc_vbuxx inx - // [528] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -- vbuxx_neq_vbuc1_then_la1 + // [527] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -- vbuxx_neq_vbuc1_then_la1 cpx #4 bne b2_from_b2 - // [529] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3] + // [528] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3] b3_from_b2: b3_from_b3: - // [529] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy - // [529] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy - // [529] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy - // [529] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy - // [529] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy + // [528] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy + // [528] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy + // [528] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy + // [528] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy + // [528] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy jmp b3 // render_screen_original::@3 b3: - // [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2 + // [529] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (oscr),y ldy #0 sta (screen),y - // [531] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1 + // [530] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [532] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1 + // [531] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1 inc oscr bne !+ inc oscr+1 !: - // [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2 + // [532] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (ocols),y ldy #0 sta (cols),y - // [534] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1 + // [533] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1 inc cols bne !+ inc cols+1 !: - // [535] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1 + // [534] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1 inc ocols bne !+ inc ocols+1 !: - // [536] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuxx=_inc_vbuxx + // [535] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuxx=_inc_vbuxx inx - // [537] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -- vbuxx_neq_vbuc1_then_la1 + // [536] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #$24 bne b3_from_b3 - // [538] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4] + // [537] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4] b4_from_b3: b4_from_b4: - // [538] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy - // [538] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy - // [538] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy + // [537] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy + // [537] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy + // [537] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy jmp b4 // render_screen_original::@4 b4: - // [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1 + // [538] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1 lda #SPACE ldy #0 sta (screen),y - // [540] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1 + // [539] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 + // [540] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 lda #BLACK ldy #0 sta (cols),y - // [542] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1 + // [541] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1 inc cols bne !+ inc cols+1 !: - // [543] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuxx=_inc_vbuxx + // [542] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuxx=_inc_vbuxx inx - // [544] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -- vbuxx_neq_vbuc1_then_la1 + // [543] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -- vbuxx_neq_vbuc1_then_la1 cpx #$28 bne b4_from_b4 jmp b5 // render_screen_original::@5 b5: - // [545] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1 + // [544] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1 inc y - // [546] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1 + // [545] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp y bne b1_from_b5 jmp breturn // render_screen_original::@return breturn: - // [547] return + // [546] return rts } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [548] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [547] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff sta SID_VOICE3_FREQ lda #>$ffff sta SID_VOICE3_FREQ+1 - // [549] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [548] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL jmp breturn // sid_rnd_init::@return breturn: - // [550] return + // [549] return rts } // sprites_irq @@ -22278,110 +22272,110 @@ sprites_irq: { //(*BGCOL)++; // Clear decimal flag (because it is used by the score algorithm) cld - // [552] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 -- vbuaa=vbuz1 + // [551] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 -- vbuaa=vbuz1 // Place the sprites lda irq_sprite_ypos - // [553] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [552] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS - // [554] *((const byte*) SPRITES_YPOS#0+(byte) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [553] *((const byte*) SPRITES_YPOS#0+(byte) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS+2 - // [555] *((const byte*) SPRITES_YPOS#0+(byte) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [554] *((const byte*) SPRITES_YPOS#0+(byte) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS+4 - // [556] *((const byte*) SPRITES_YPOS#0+(byte) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [555] *((const byte*) SPRITES_YPOS#0+(byte) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS+6 - // [557] (byte~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 + // [556] (byte~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 ldx irq_raster_next inx - // [558] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte~) sprites_irq::$0 -- vbuz1=vbuxx + // [557] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte~) sprites_irq::$0 -- vbuz1=vbuxx // Wait for the y-position before changing sprite pointers stx raster_sprite_gfx_modify jmp b8 // sprites_irq::@8 b8: - // [559] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 -- _deref_pbuc1_lt_vbuz1_then_la1 + // [558] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 -- _deref_pbuc1_lt_vbuz1_then_la1 lda RASTER cmp raster_sprite_gfx_modify bcc b8 jmp b9 // sprites_irq::@9 b9: - // [560] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0 -- vbuxx=vbuz1 + // [559] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0 -- vbuxx=vbuz1 ldx irq_sprite_ptr - // [561] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 -- vbuz1_eq_0_then_la1 + // [560] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 -- vbuz1_eq_0_then_la1 lda render_screen_showing cmp #0 beq b1 jmp b10 // sprites_irq::@10 b10: - // [562] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx + // [561] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_2 - // [563] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuaa=_inc_vbuxx + // [562] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuaa=_inc_vbuxx inx txa - // [564] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa + // [563] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa sta PLAYFIELD_SPRITE_PTRS_2+1 - // [565] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa + // [564] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa sta PLAYFIELD_SPRITE_PTRS_2+2 - // [566] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 -- vbuaa=_inc_vbuaa + // [565] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 -- vbuaa=_inc_vbuaa clc adc #1 - // [567] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 3) ← (byte) sprites_irq::ptr#4 -- _deref_pbuc1=vbuaa + // [566] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 3) ← (byte) sprites_irq::ptr#4 -- _deref_pbuc1=vbuaa sta PLAYFIELD_SPRITE_PTRS_2+3 jmp b2 // sprites_irq::@2 b2: - // [568] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 -- vbuz1=_inc_vbuz1 + // [567] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 -- vbuz1=_inc_vbuz1 inc irq_cnt - // [569] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 -- vbuz1_eq_vbuc1_then_la1 + // [568] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 -- vbuz1_eq_vbuc1_then_la1 lda #9 cmp irq_cnt beq b3 jmp b6 // sprites_irq::@6 b6: - // [570] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1 + // [569] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1 lda #$a cmp irq_cnt beq b4 jmp b7 // sprites_irq::@7 b7: - // [571] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 -- vbuz1=vbuz1_plus_vbuc1 + // [570] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 -- vbuz1=vbuz1_plus_vbuc1 lax irq_raster_next axs #-[$14] stx irq_raster_next - // [572] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [571] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax irq_sprite_ypos axs #-[$15] stx irq_sprite_ypos - // [573] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [572] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax irq_sprite_ptr axs #-[3] stx irq_sprite_ptr - // [574] phi from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 to sprites_irq::@5 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5] + // [573] phi from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 to sprites_irq::@5 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5] b5_from_b11: b5_from_b4: b5_from_b7: - // [574] phi (byte) irq_sprite_ptr#11 = (byte) irq_sprite_ptr#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy - // [574] phi (byte) irq_sprite_ypos#11 = (byte) irq_sprite_ypos#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#1] -- register_copy - // [574] phi (byte) irq_cnt#3 = (byte) irq_cnt#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#2] -- register_copy - // [574] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#3] -- register_copy + // [573] phi (byte) irq_sprite_ptr#11 = (byte) irq_sprite_ptr#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy + // [573] phi (byte) irq_sprite_ypos#11 = (byte) irq_sprite_ypos#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#1] -- register_copy + // [573] phi (byte) irq_cnt#3 = (byte) irq_cnt#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#2] -- register_copy + // [573] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#3] -- register_copy jmp b5 // sprites_irq::@5 b5: - // [575] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1 + // [574] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1 // Setup next interrupt lda irq_raster_next sta RASTER - // [576] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 + // [575] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ and setup the next one lda #IRQ_RASTER sta IRQ_STATUS jmp breturn // sprites_irq::@return breturn: - // [577] return - exit interrupt(HARDWARE_CLOBBER) + // [576] return - exit interrupt(HARDWARE_CLOBBER) rega: lda #00 regx: @@ -22389,31 +22383,31 @@ sprites_irq: { rti // sprites_irq::@4 b4: - // [578] (byte) irq_cnt#2 ← (byte) 0 -- vbuz1=vbuc1 + // [577] (byte) irq_cnt#2 ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta irq_cnt - // [579] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1 + // [578] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1 lda #IRQ_RASTER_FIRST sta irq_raster_next - // [580] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [579] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax irq_sprite_ypos axs #-[$15] stx irq_sprite_ypos - // [581] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [580] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax irq_sprite_ptr axs #-[3] stx irq_sprite_ptr jmp b5_from_b4 // sprites_irq::@3 b3: - // [582] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [581] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax irq_raster_next axs #-[$15] stx irq_raster_next - // [583] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1 + // [582] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1 lda #SPRITES_FIRST_YPOS sta irq_sprite_ypos - // [584] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2] + // [583] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2] toSpritePtr2_from_b3: jmp toSpritePtr2 // sprites_irq::toSpritePtr2 @@ -22421,24 +22415,24 @@ sprites_irq: { jmp b11 // sprites_irq::@11 b11: - // [585] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1 + // [584] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1 lda #toSpritePtr2_return sta irq_sprite_ptr jmp b5_from_b11 // sprites_irq::@1 b1: - // [586] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx + // [585] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_1 - // [587] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx + // [586] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx inx - // [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx + // [587] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_1+1 - // [589] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx + // [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_1+2 - // [590] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx + // [589] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx inx txa - // [591] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa + // [590] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa sta PLAYFIELD_SPRITE_PTRS_1+3 jmp b2 } @@ -22645,9 +22639,10 @@ Removing instruction jmp breturn Removing instruction jmp b4 Removing instruction jmp b5 Removing instruction jmp b1 +Removing instruction jmp sid_rnd1 +Removing instruction jmp b3 Removing instruction jmp b2 Removing instruction jmp breturn -Removing instruction jmp b3 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp breturn @@ -22783,6 +22778,7 @@ Replacing label b2_from_b12 with b2 Replacing label b2_from_b5 with b2 Replacing label b3_from_b2 with b3 Replacing label b5_from_b4 with b1 +Replacing label sid_rnd1 with b1 Replacing label breturn_from_play_update_score with breturn Replacing label breturn_from_b1 with breturn Replacing label b2_from_b1 with b2 @@ -22877,7 +22873,7 @@ Removing instruction breturn_from_b11: Removing instruction b5_from_b4: Removing instruction b5: Removing instruction b1_from_b5: -Removing instruction b2_from_b1: +Removing instruction sid_rnd1: Removing instruction b2_from_b1: Removing instruction breturn_from_play_update_score: Removing instruction breturn_from_b1: @@ -23052,9 +23048,9 @@ Removing instruction b11_from_b10: Removing instruction play_collision_from_play_spawn_current: Removing instruction b4: Removing instruction b1_from_b4: -Removing instruction breturn: Removing instruction b3: -Removing instruction b2_from_b3: +Removing instruction b2: +Removing instruction breturn: Removing instruction b1: Removing instruction b2: Removing instruction b3: @@ -23419,7 +23415,7 @@ FINAL SYMBOL TABLE (byte~) current_piece_char#101 current_piece_char#101 zp ZP_BYTE:15 22.0 (byte) current_piece_char#16 current_piece_char zp ZP_BYTE:38 3.4324324324324325 (byte) current_piece_char#29 current_piece_char zp ZP_BYTE:38 6.0 -(byte) current_piece_char#5 current_piece_char zp ZP_BYTE:38 0.25 +(byte) current_piece_char#5 current_piece_char zp ZP_BYTE:38 0.25806451612903225 (byte) current_piece_char#68 current_piece_char#68 zp ZP_BYTE:15 48.285714285714285 (byte*) current_piece_gfx (byte*~) current_piece_gfx#112 current_piece_gfx#112 zp ZP_WORD:36 2.0 @@ -23434,7 +23430,7 @@ FINAL SYMBOL TABLE (byte*) current_piece_gfx#64 current_piece_gfx#64 zp ZP_WORD:36 48.285714285714285 (byte*) current_piece_gfx#7 current_piece_gfx zp ZP_WORD:25 4.0 (byte) current_xpos -(byte) current_xpos#100 current_xpos zp ZP_BYTE:43 0.3225806451612903 +(byte) current_xpos#100 current_xpos zp ZP_BYTE:43 0.3333333333333333 (byte~) current_xpos#119 current_xpos#119 zp ZP_BYTE:14 1.3333333333333333 (byte~) current_xpos#120 current_xpos#120 zp ZP_BYTE:14 7.333333333333333 (byte) current_xpos#14 current_xpos zp ZP_BYTE:43 20.38181818181818 @@ -23451,14 +23447,14 @@ FINAL SYMBOL TABLE (byte) current_ypos#19 current_ypos zp ZP_BYTE:24 1.7051282051282046 (byte) current_ypos#3 current_ypos zp ZP_BYTE:24 4.0 (byte) current_ypos#38 current_ypos zp ZP_BYTE:24 6.0 -(byte) current_ypos#6 current_ypos zp ZP_BYTE:24 0.3333333333333333 +(byte) current_ypos#6 current_ypos zp ZP_BYTE:24 0.3448275862068966 (byte~) current_ypos#98 reg byte x 1.0 (byte~) current_ypos#99 reg byte x 4.4 (byte) game_over (byte) game_over#10 game_over zp ZP_BYTE:11 4.804347826086958 (byte) game_over#15 game_over zp ZP_BYTE:11 3.189189189189189 (byte) game_over#27 game_over zp ZP_BYTE:11 6.0 -(byte) game_over#52 game_over zp ZP_BYTE:11 0.34782608695652173 +(byte) game_over#52 game_over zp ZP_BYTE:11 0.36363636363636365 (byte) game_over#65 game_over zp ZP_BYTE:11 0.42857142857142855 (byte) irq_cnt (byte) irq_cnt#0 irq_cnt zp ZP_BYTE:31 0.17391304347826086 @@ -23895,7 +23891,7 @@ FINAL SYMBOL TABLE (byte) play_remove_lines::y#8 y zp ZP_BYTE:12 133.46666666666667 (void()) play_spawn_current() (byte~) play_spawn_current::$1 reg byte a 4.0 -(byte~) play_spawn_current::$7 $7 zp ZP_BYTE:46 0.06451612903225806 +(byte~) play_spawn_current::$7 $7 zp ZP_BYTE:46 0.06666666666666667 (label) play_spawn_current::@1 (label) play_spawn_current::@2 (label) play_spawn_current::@3 @@ -23905,8 +23901,7 @@ FINAL SYMBOL TABLE (byte) play_spawn_current::current_piece_idx (byte) play_spawn_current::current_piece_idx#0 reg byte x 2.5 (byte) play_spawn_current::piece_idx -(byte) play_spawn_current::piece_idx#1 piece_idx zp ZP_BYTE:10 2002.0 -(byte) play_spawn_current::piece_idx#2 piece_idx zp ZP_BYTE:10 100.5 +(byte) play_spawn_current::piece_idx#1 piece_idx zp ZP_BYTE:10 100.5 (label) play_spawn_current::sid_rnd1 (byte) play_spawn_current::sid_rnd1_return (byte) play_spawn_current::sid_rnd1_return#0 reg byte a 2002.0 @@ -24283,7 +24278,7 @@ zp ZP_BYTE:7 [ level#33 level#10 level#17 level#19 level#21 ] zp ZP_BYTE:8 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] zp ZP_BYTE:9 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] reg byte x [ play_move_down::return#3 ] -zp ZP_BYTE:10 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] +zp ZP_BYTE:10 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] zp ZP_BYTE:11 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] zp ZP_BYTE:12 [ play_remove_lines::y#8 play_remove_lines::y#1 current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] @@ -24408,7 +24403,7 @@ reg byte a [ sprites_irq::ptr#2 ] FINAL ASSEMBLER -Score: 3353852 +Score: 3345852 // File Comments // Tetris Game for the Commodore 64 @@ -24637,7 +24632,7 @@ main: { sei // render_init() // [18] call render_init - // [498] phi from main::@8 to render_init [phi:main::@8->render_init] + // [497] phi from main::@8 to render_init [phi:main::@8->render_init] jsr render_init // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 @@ -24653,7 +24648,7 @@ main: { // main::@11 // play_init() // [24] call play_init - // [457] phi from main::@11 to play_init [phi:main::@11->play_init] + // [456] phi from main::@11 to play_init [phi:main::@11->play_init] jsr play_init // [25] phi from main::@11 to main::@12 [phi:main::@11->main::@12] // main::@12 @@ -24672,7 +24667,7 @@ main: { // [28] call play_spawn_current // [287] phi from main::@13 to play_spawn_current [phi:main::@13->play_spawn_current] // [287] phi (byte) game_over#65 = (byte) game_over#52 [phi:main::@13->play_spawn_current#0] -- register_copy - // [287] phi (byte) next_piece_idx#17 = (byte) play_spawn_current::piece_idx#2 [phi:main::@13->play_spawn_current#1] -- register_copy + // [287] phi (byte) next_piece_idx#17 = (byte) play_spawn_current::piece_idx#1 [phi:main::@13->play_spawn_current#1] -- register_copy jsr play_spawn_current // [29] phi from main::@13 to main::@14 [phi:main::@13->main::@14] // main::@14 @@ -24709,7 +24704,7 @@ main: { // [130] phi (byte) current_ypos#13 = (byte~) current_ypos#98 [phi:main::@15->render_moving#4] -- register_copy jsr render_moving // main::@16 - // [36] (byte~) next_piece_idx#77 ← (byte) play_spawn_current::piece_idx#2 -- vbuxx=vbuz1 + // [36] (byte~) next_piece_idx#77 ← (byte) play_spawn_current::piece_idx#1 -- vbuxx=vbuz1 ldx play_spawn_current.piece_idx // render_next() // [37] call render_next @@ -24745,7 +24740,7 @@ main: { // [40] phi (byte) keyboard_events_size#19 = (byte) 0 [phi:main::@17->main::@1#5] -- vbuz1=vbuc1 sta keyboard_events_size // [40] phi (byte) render_screen_showing#13 = (byte) render_screen_showing#0 [phi:main::@17->main::@1#6] -- register_copy - // [40] phi (byte) next_piece_idx#10 = (byte) play_spawn_current::piece_idx#2 [phi:main::@17->main::@1#7] -- register_copy + // [40] phi (byte) next_piece_idx#10 = (byte) play_spawn_current::piece_idx#1 [phi:main::@17->main::@1#7] -- register_copy // [40] phi (byte) game_over#10 = (byte) game_over#52 [phi:main::@17->main::@1#8] -- register_copy // [40] phi (byte) current_ypos#11 = (byte) current_ypos#6 [phi:main::@17->main::@1#9] -- register_copy // [40] phi (byte) current_xpos#14 = (byte) current_xpos#100 [phi:main::@17->main::@1#10] -- register_copy @@ -24799,7 +24794,7 @@ main: { // main::@18 // keyboard_event_scan() // [45] call keyboard_event_scan - // [392] phi from main::@18 to keyboard_event_scan [phi:main::@18->keyboard_event_scan] + // [391] phi from main::@18 to keyboard_event_scan [phi:main::@18->keyboard_event_scan] jsr keyboard_event_scan // [46] phi from main::@18 to main::@19 [phi:main::@18->main::@19] // main::@19 @@ -25901,8 +25896,8 @@ play_move_down: { b1: // keyboard_event_pressed(KEY_SPACE) // [252] call keyboard_event_pressed - // [381] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed] - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_SPACE#0 [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [380] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed] + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_SPACE#0 [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_SPACE sta keyboard_event_pressed.keycode jsr keyboard_event_pressed @@ -25986,7 +25981,7 @@ play_move_down: { // play_move_down::@14 // play_remove_lines() // [274] call play_remove_lines - // [340] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines] + // [339] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines] jsr play_remove_lines // play_remove_lines() // [275] (byte) play_remove_lines::return#0 ← (byte) play_remove_lines::removed#8 -- vbuaa=vbuz1 @@ -26020,7 +26015,7 @@ play_move_down: { lda PIECES+1,y sta current_piece_gfx+1 // [283] phi from play_move_down::@17 to play_move_down::@11 [phi:play_move_down::@17->play_move_down::@11] - // [283] phi (byte) next_piece_idx#30 = (byte) play_spawn_current::piece_idx#2 [phi:play_move_down::@17->play_move_down::@11#0] -- register_copy + // [283] phi (byte) next_piece_idx#30 = (byte) play_spawn_current::piece_idx#1 [phi:play_move_down::@17->play_move_down::@11#0] -- register_copy // [283] phi (byte) game_over#27 = (byte) game_over#52 [phi:play_move_down::@17->play_move_down::@11#1] -- register_copy // [283] phi (byte) current_xpos#43 = (byte) current_xpos#100 [phi:play_move_down::@17->play_move_down::@11#2] -- register_copy // [283] phi (byte*) current_piece_gfx#35 = (byte*~) current_piece_gfx#117 [phi:play_move_down::@17->play_move_down::@11#3] -- register_copy @@ -26167,34 +26162,25 @@ play_spawn_current: { // [301] phi (byte) game_over#52 = (byte) game_over#65 [phi:play_spawn_current::@5->play_spawn_current::@1#0] -- register_copy // play_spawn_current::@1 b1: - // [302] phi from play_spawn_current::@1 to play_spawn_current::@2 [phi:play_spawn_current::@1->play_spawn_current::@2] - // [302] phi (byte) play_spawn_current::piece_idx#2 = (byte) 7 [phi:play_spawn_current::@1->play_spawn_current::@2#0] -- vbuz1=vbuc1 - lda #7 - sta piece_idx - // play_spawn_current::@2 - b2: - // while(piece_idx==7) - // [303] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 -- vbuz1_eq_vbuc1_then_la1 - lda #7 - cmp piece_idx - beq sid_rnd1 - // play_spawn_current::@return - // } - // [304] return - rts // play_spawn_current::sid_rnd1 - sid_rnd1: // return *SID_VOICE3_OSC; - // [305] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 + // [302] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 lda SID_VOICE3_OSC // play_spawn_current::@3 // piece_idx = sid_rnd()&7 - // [306] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 -- vbuz1=vbuaa_band_vbuc1 + // [303] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 -- vbuz1=vbuaa_band_vbuc1 and #7 sta piece_idx - // [302] phi from play_spawn_current::@3 to play_spawn_current::@2 [phi:play_spawn_current::@3->play_spawn_current::@2] - // [302] phi (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#1 [phi:play_spawn_current::@3->play_spawn_current::@2#0] -- register_copy - jmp b2 + // play_spawn_current::@2 + // while(piece_idx==7) + // [304] if((byte) play_spawn_current::piece_idx#1==(byte) 7) goto play_spawn_current::sid_rnd1 -- vbuz1_eq_vbuc1_then_la1 + lda #7 + cmp piece_idx + beq b1 + // play_spawn_current::@return + // } + // [305] return + rts } // play_update_score // Update the score based on the number of lines removed @@ -26203,23 +26189,23 @@ play_update_score: { .label lines_before = $26 .label add_bcd = $27 // if(removed!=0) - // [307] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -- vbuxx_eq_0_then_la1 + // [306] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -- vbuxx_eq_0_then_la1 cpx #0 beq breturn // play_update_score::@1 // play_update_score::@2] + // [318] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2] // play_update_score::@2 // play_increase_level() - // [320] call play_increase_level + // [319] call play_increase_level jsr play_increase_level - // [321] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return] - // [321] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy - // [321] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy - // [321] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy - // [321] phi (dword) score_bcd#16 = (dword) score_bcd#18 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy - // [321] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#4] -- register_copy + // [320] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return] + // [320] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy + // [320] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy + // [320] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy + // [320] phi (dword) score_bcd#16 = (dword) score_bcd#18 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy + // [320] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#4] -- register_copy // play_update_score::@return breturn: // } - // [322] return + // [321] return rts } // play_increase_level // Increase the level play_increase_level: { // level++; - // [323] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1 + // [322] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1 inc level // if(level>29) - // [324] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1 + // [323] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1 // Update speed of moving tetrominos down lda level cmp #$1d+1 bcs b3 // play_increase_level::@3 // current_movedown_slow = MOVEDOWN_SLOW_SPEEDS[level] - // [325] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2 + // [324] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2 tay lda MOVEDOWN_SLOW_SPEEDS,y sta current_movedown_slow - // [326] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1] - // [326] phi (byte) current_movedown_slow#66 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy + // [325] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1] + // [325] phi (byte) current_movedown_slow#66 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy jmp b1 - // [326] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1] + // [325] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1] b3: - // [326] phi (byte) current_movedown_slow#66 = (byte) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1 + // [325] phi (byte) current_movedown_slow#66 = (byte) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1 lda #1 sta current_movedown_slow // play_increase_level::@1 b1: // level_bcd++; - // [327] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1 + // [326] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1 inc level_bcd // level_bcd&$f - // [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 + // [327] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 lda #$f and level_bcd // if((level_bcd&$f)==$a) - // [329] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 -- vbuaa_neq_vbuc1_then_la1 + // [328] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 -- vbuaa_neq_vbuc1_then_la1 cmp #$a bne b2 // play_increase_level::@4 // level_bcd += 6 - // [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 -- vbuz1=vbuz1_plus_vbuc1 + // [329] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 -- vbuz1=vbuz1_plus_vbuc1 // If level low nybble hits $a change to $10 lax level_bcd axs #-[6] stx level_bcd - // [331] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2] - // [331] phi (byte) level_bcd#62 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy + // [330] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2] + // [330] phi (byte) level_bcd#62 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy // play_increase_level::@2 b2: // asm // asm { sed } // Increase the score values gained sed - // [333] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5] - // [333] phi (byte) play_increase_level::b#2 = (byte) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuxx=vbuc1 + // [332] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5] + // [332] phi (byte) play_increase_level::b#2 = (byte) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuxx=vbuc1 ldx #0 - // [333] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5] - // [333] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy + // [332] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5] + // [332] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy // play_increase_level::@5 b5: // score_add_bcd[b] += SCORE_BASE_BCD[b] - // [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 + // [333] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 txa asl asl - // [335] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) -- pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa + // [334] *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) ← *((const dword[5]) score_add_bcd#0 + (byte~) play_increase_level::$5) + *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_increase_level::$5) -- pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa tay clc lda score_add_bcd,y @@ -26368,9 +26354,9 @@ play_increase_level: { adc SCORE_BASE_BCD+3,y sta score_add_bcd+3,y // for(byte b: 0..4) - // [336] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuxx=_inc_vbuxx + // [335] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuxx=_inc_vbuxx inx - // [337] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 -- vbuxx_neq_vbuc1_then_la1 + // [336] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne b5 // play_increase_level::@6 @@ -26379,7 +26365,7 @@ play_increase_level: { cld // play_increase_level::@return // } - // [339] return + // [338] return rts } // play_remove_lines @@ -26393,121 +26379,121 @@ play_remove_lines: { .label y = $c .label removed = $d .label full = $f - // [341] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1] - // [341] phi (byte) play_remove_lines::removed#11 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1 + // [340] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1] + // [340] phi (byte) play_remove_lines::removed#11 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1 lda #0 sta removed - // [341] phi (byte) play_remove_lines::y#8 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1 + // [340] phi (byte) play_remove_lines::y#8 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1 sta y - // [341] phi (byte) play_remove_lines::w#12 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuxx=vbuc1 + // [340] phi (byte) play_remove_lines::w#12 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuxx=vbuc1 ldx #PLAYFIELD_LINES*PLAYFIELD_COLS-1 - // [341] phi (byte) play_remove_lines::r#3 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuyy=vbuc1 + // [340] phi (byte) play_remove_lines::r#3 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuyy=vbuc1 ldy #PLAYFIELD_LINES*PLAYFIELD_COLS-1 // Read all lines and rewrite them - // [341] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1] - // [341] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#8 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy - // [341] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy - // [341] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy - // [341] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy + // [340] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1] + // [340] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#8 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy + // [340] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy + // [340] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy + // [340] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy // play_remove_lines::@1 b1: - // [342] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2] - // [342] phi (byte) play_remove_lines::full#4 = (byte) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1 + // [341] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2] + // [341] phi (byte) play_remove_lines::full#4 = (byte) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1 lda #1 sta full - // [342] phi (byte) play_remove_lines::x#2 = (byte) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1 + // [341] phi (byte) play_remove_lines::x#2 = (byte) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1 lda #0 sta x - // [342] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy - // [342] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy - // [342] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2] - // [342] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy - // [342] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy - // [342] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy - // [342] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy + // [341] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy + // [341] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy + // [341] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2] + // [341] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy + // [341] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy + // [341] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy + // [341] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy // play_remove_lines::@2 b2: // c = playfield[r--] - // [343] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuyy + // [342] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuyy lda playfield,y sta c - // [344] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuyy=_dec_vbuyy + // [343] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuyy=_dec_vbuyy dey // if(c==0) - // [345] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1 + // [344] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1 cmp #0 bne b3 - // [347] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3] - // [347] phi (byte) play_remove_lines::full#2 = (byte) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1 + // [346] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3] + // [346] phi (byte) play_remove_lines::full#2 = (byte) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1 lda #0 sta full - // [346] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9] + // [345] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9] // play_remove_lines::@9 - // [347] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3] - // [347] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy + // [346] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3] + // [346] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy // play_remove_lines::@3 b3: // playfield[w--] = c - // [348] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuxx=vbuz1 + // [347] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuxx=vbuz1 lda c sta playfield,x // playfield[w--] = c; - // [349] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuxx=_dec_vbuxx + // [348] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuxx=_dec_vbuxx dex // for(byte x:0..PLAYFIELD_COLS-1) - // [350] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1 + // [349] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1 inc x - // [351] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte) 1+(byte) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1 + // [350] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte) 1+(byte) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_COLS-1+1 cmp x bne b2 // play_remove_lines::@4 // if(full==1) - // [352] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1 + // [351] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1 lda #1 cmp full bne b6 // play_remove_lines::@5 // w = w + PLAYFIELD_COLS - // [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 -- vbuxx=vbuxx_plus_vbuc1 + // [352] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[PLAYFIELD_COLS] // removed++; - // [354] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1 + // [353] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1 inc removed - // [355] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6] - // [355] phi (byte) play_remove_lines::removed#8 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy - // [355] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy + // [354] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6] + // [354] phi (byte) play_remove_lines::removed#8 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy + // [354] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy // play_remove_lines::@6 b6: // for(byte y:0..PLAYFIELD_LINES-1) - // [356] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1 + // [355] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1 inc y - // [357] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1 + // [356] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_LINES-1+1 cmp y bne b1 - // [358] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7] + // [357] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7] b4: - // [358] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy + // [357] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy // Write zeros in the rest of the lines // play_remove_lines::@7 // while(w!=$ff) - // [359] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 -- vbuxx_neq_vbuc1_then_la1 + // [358] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 -- vbuxx_neq_vbuc1_then_la1 cpx #$ff bne b8 // play_remove_lines::@return // } - // [360] return + // [359] return rts // play_remove_lines::@8 b8: // playfield[w--] = 0 - // [361] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [360] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta playfield,x // playfield[w--] = 0; - // [362] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuxx=_dec_vbuxx + // [361] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuxx=_dec_vbuxx dex jmp b4 } @@ -26524,98 +26510,98 @@ play_lock_current: { .label i_7 = $11 .label i_9 = $11 // yp = current_ypos - // [363] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 - // [364] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1] - // [364] phi (byte) play_lock_current::l#6 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1 + // [362] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 + // [363] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1] + // [363] phi (byte) play_lock_current::l#6 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1 lda #0 sta l - // [364] phi (byte) play_lock_current::i#3 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1 + // [363] phi (byte) play_lock_current::i#3 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1 sta i_3 - // [364] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy + // [363] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy // play_lock_current::@1 b1: // playfield_line = playfield_lines[yp] - // [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [364] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda yp asl - // [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) -- pbuz1=pptc1_derefidx_vbuaa + // [365] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) -- pbuz1=pptc1_derefidx_vbuaa tay lda playfield_lines,y sta playfield_line lda playfield_lines+1,y sta playfield_line+1 // xp = current_xpos - // [367] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 -- vbuz1=vbuz2 + // [366] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 -- vbuz1=vbuz2 lda current_xpos sta xp - // [368] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2] - // [368] phi (byte) play_lock_current::c#2 = (byte) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuxx=vbuc1 + // [367] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2] + // [367] phi (byte) play_lock_current::c#2 = (byte) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuxx=vbuc1 ldx #0 - // [368] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy - // [368] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy + // [367] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy + // [367] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy // play_lock_current::@2 b2: // if(current_piece_gfx[i++]!=0) - // [369] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2 + // [368] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2 ldy i_2 iny sty i - // [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1 + // [369] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1 ldy i_2 lda (current_piece_gfx),y cmp #0 beq b3 // play_lock_current::@4 // playfield_line[xp] = current_piece_char - // [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3 + // [370] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3 lda current_piece_char ldy xp sta (playfield_line),y // play_lock_current::@3 b3: // xp++; - // [372] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 -- vbuz1=_inc_vbuz1 + // [371] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 -- vbuz1=_inc_vbuz1 inc xp // for(byte c:0..3) - // [373] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuxx=_inc_vbuxx + // [372] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuxx=_inc_vbuxx inx - // [374] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 -- vbuxx_neq_vbuc1_then_la1 + // [373] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 -- vbuxx_neq_vbuc1_then_la1 cpx #4 bne b7 // play_lock_current::@5 // yp++; - // [375] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 -- vbuz1=_inc_vbuz1 + // [374] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 -- vbuz1=_inc_vbuz1 inc yp // for(byte l:0..3) - // [376] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1 + // [375] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1 inc l - // [377] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1 + // [376] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp l bne b6 // play_lock_current::@return // } - // [378] return + // [377] return rts // play_lock_current::@6 b6: - // [379] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 + // [378] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 lda i sta i_7 - // [364] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1] - // [364] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy - // [364] phi (byte) play_lock_current::i#3 = (byte~) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy - // [364] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy + // [363] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1] + // [363] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy + // [363] phi (byte) play_lock_current::i#3 = (byte~) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy + // [363] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy jmp b1 // play_lock_current::@7 b7: - // [380] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 + // [379] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 lda i sta i_9 - // [368] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2] - // [368] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy - // [368] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy - // [368] phi (byte) play_lock_current::i#2 = (byte~) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy + // [367] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2] + // [367] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy + // [367] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy + // [367] phi (byte) play_lock_current::i#2 = (byte~) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy jmp b2 } // keyboard_event_pressed @@ -26626,28 +26612,28 @@ keyboard_event_pressed: { .label row_bits = $2e .label keycode = $12 // keycode>>3 - // [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 -- vbuaa=vbuz1_ror_3 + // [381] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 -- vbuaa=vbuz1_ror_3 lda keycode lsr lsr lsr // row_bits = keyboard_scan_values[keycode>>3] - // [383] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) -- vbuz1=pbuc1_derefidx_vbuaa + // [382] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) -- vbuz1=pbuc1_derefidx_vbuaa tay lda keyboard_scan_values,y sta row_bits // keycode&7 - // [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 -- vbuaa=vbuz1_band_vbuc1 + // [383] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 -- vbuaa=vbuz1_band_vbuc1 lda #7 and keycode // row_bits & keyboard_matrix_col_bitmask[keycode&7] - // [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuaa + // [384] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuaa tay lda keyboard_matrix_col_bitmask,y and row_bits // keyboard_event_pressed::@return // } - // [386] return + // [385] return rts } // keyboard_event_get @@ -26656,29 +26642,29 @@ keyboard_event_pressed: { // The buffer is filled by keyboard_event_scan() keyboard_event_get: { // if(keyboard_events_size==0) - // [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1 + // [386] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1 lda keyboard_events_size cmp #0 beq b1 // keyboard_event_get::@1 // return keyboard_events[--keyboard_events_size]; - // [388] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1 + // [387] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1 dec keyboard_events_size - // [389] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) -- vbuxx=pbuc1_derefidx_vbuz1 + // [388] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) -- vbuxx=pbuc1_derefidx_vbuz1 ldy keyboard_events_size ldx keyboard_events,y - // [390] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return] - // [390] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy - // [390] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy + // [389] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return] + // [389] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy + // [389] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy rts - // [390] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return] + // [389] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return] b1: - // [390] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy - // [390] phi (byte) keyboard_event_get::return#2 = (byte) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuxx=vbuc1 + // [389] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy + // [389] phi (byte) keyboard_event_get::return#2 = (byte) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuxx=vbuc1 ldx #$ff // keyboard_event_get::@return // } - // [391] return + // [390] return rts } // keyboard_event_scan @@ -26690,194 +26676,194 @@ keyboard_event_scan: { .label row_scan = $2f .label keycode = $21 .label row = $20 - // [393] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7] - // [393] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy - // [393] phi (byte) keyboard_event_scan::keycode#11 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1 + // [392] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7] + // [392] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy + // [392] phi (byte) keyboard_event_scan::keycode#11 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1 lda #0 sta keycode - // [393] phi (byte) keyboard_event_scan::row#2 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1 + // [392] phi (byte) keyboard_event_scan::row#2 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1 sta row - // [393] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7] - // [393] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy - // [393] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy - // [393] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy + // [392] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7] + // [392] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy + // [392] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy + // [392] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy // keyboard_event_scan::@7 b7: // keyboard_matrix_read(row) - // [394] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuxx=vbuz1 + // [393] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuxx=vbuz1 ldx row - // [395] call keyboard_matrix_read + // [394] call keyboard_matrix_read jsr keyboard_matrix_read - // [396] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + // [395] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 // keyboard_event_scan::@19 // row_scan = keyboard_matrix_read(row) - // [397] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuaa + // [396] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuaa sta row_scan // if(row_scan!=keyboard_scan_values[row]) - // [398] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 + // [397] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 ldy row cmp keyboard_scan_values,y bne b5 // keyboard_event_scan::@16 // keycode = keycode + 8 - // [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 + // [398] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 lax keycode axs #-[8] stx keycode - // [400] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8] - // [400] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy - // [400] phi (byte) keyboard_event_scan::keycode#13 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy + // [399] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8] + // [399] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy + // [399] phi (byte) keyboard_event_scan::keycode#13 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy // keyboard_event_scan::@8 b8: // for(byte row : 0..7) - // [401] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1 + // [400] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1 inc row - // [402] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1 + // [401] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp row bne b7 - // [403] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17] + // [402] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17] // keyboard_event_scan::@17 // keyboard_event_pressed(KEY_LSHIFT) - // [404] call keyboard_event_pressed - // [381] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed] - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_LSHIFT#0 [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [403] call keyboard_event_pressed + // [380] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed] + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_LSHIFT#0 [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_LSHIFT sta keyboard_event_pressed.keycode jsr keyboard_event_pressed // keyboard_event_pressed(KEY_LSHIFT) - // [405] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 + // [404] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 // keyboard_event_scan::@20 - // [406] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 + // [405] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 // if(keyboard_event_pressed(KEY_LSHIFT)!= 0) - // [407] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -- vbuaa_eq_0_then_la1 + // [406] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -- vbuaa_eq_0_then_la1 cmp #0 - // [408] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18] + // [407] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18] // keyboard_event_scan::@18 - // [409] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1] + // [408] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1] // keyboard_event_scan::@1 // keyboard_event_pressed(KEY_RSHIFT) - // [410] call keyboard_event_pressed - // [381] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed] - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_RSHIFT#0 [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [409] call keyboard_event_pressed + // [380] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed] + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_RSHIFT#0 [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_RSHIFT sta keyboard_event_pressed.keycode jsr keyboard_event_pressed // keyboard_event_pressed(KEY_RSHIFT) - // [411] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 + // [410] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 // keyboard_event_scan::@21 - // [412] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 + // [411] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 // if(keyboard_event_pressed(KEY_RSHIFT)!= 0) - // [413] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -- vbuaa_eq_0_then_la1 + // [412] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -- vbuaa_eq_0_then_la1 cmp #0 - // [414] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4] + // [413] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4] // keyboard_event_scan::@4 - // [415] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2] + // [414] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2] // keyboard_event_scan::@2 // keyboard_event_pressed(KEY_CTRL) - // [416] call keyboard_event_pressed - // [381] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed] - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_CTRL#0 [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [415] call keyboard_event_pressed + // [380] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed] + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_CTRL#0 [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_CTRL sta keyboard_event_pressed.keycode jsr keyboard_event_pressed // keyboard_event_pressed(KEY_CTRL) - // [417] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 + // [416] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 // keyboard_event_scan::@22 - // [418] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 + // [417] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 // if(keyboard_event_pressed(KEY_CTRL)!= 0) - // [419] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -- vbuaa_eq_0_then_la1 + // [418] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -- vbuaa_eq_0_then_la1 cmp #0 - // [420] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5] + // [419] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5] // keyboard_event_scan::@5 - // [421] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3] + // [420] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3] // keyboard_event_scan::@3 // keyboard_event_pressed(KEY_COMMODORE) - // [422] call keyboard_event_pressed - // [381] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed] - // [381] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_COMMODORE#0 [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [421] call keyboard_event_pressed + // [380] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed] + // [380] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_COMMODORE#0 [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_COMMODORE sta keyboard_event_pressed.keycode jsr keyboard_event_pressed // keyboard_event_pressed(KEY_COMMODORE) - // [423] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 + // [422] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 // keyboard_event_scan::@23 - // [424] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 + // [423] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 // if(keyboard_event_pressed(KEY_COMMODORE)!= 0) - // [425] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -- vbuaa_eq_0_then_la1 + // [424] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -- vbuaa_eq_0_then_la1 cmp #0 - // [426] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6] + // [425] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6] // keyboard_event_scan::@6 // keyboard_event_scan::@return // } - // [427] return + // [426] return rts // Something has changed on the keyboard row - check each column - // [428] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9] - // [428] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy - // [428] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy - // [428] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy - // [428] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9] + // [427] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9] + // [427] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy + // [427] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy + // [427] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy + // [427] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9] b5: - // [428] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy - // [428] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy - // [428] phi (byte) keyboard_event_scan::col#2 = (byte) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuxx=vbuc1 + // [427] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy + // [427] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy + // [427] phi (byte) keyboard_event_scan::col#2 = (byte) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuxx=vbuc1 ldx #0 // keyboard_event_scan::@9 b9: // row_scan^keyboard_scan_values[row] - // [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) -- vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2 + // [428] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) -- vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2 lda row_scan ldy row eor keyboard_scan_values,y // (row_scan^keyboard_scan_values[row])&keyboard_matrix_col_bitmask[col] - // [430] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx + // [429] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx and keyboard_matrix_col_bitmask,x // if(((row_scan^keyboard_scan_values[row])&keyboard_matrix_col_bitmask[col])!=0) - // [431] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 -- vbuaa_eq_0_then_la1 + // [430] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 -- vbuaa_eq_0_then_la1 cmp #0 beq b10 // keyboard_event_scan::@12 // if(keyboard_events_size!=8) - // [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1 + // [431] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1 lda #8 cmp keyboard_events_size beq b10 // keyboard_event_scan::@13 // event_type = row_scan&keyboard_matrix_col_bitmask[col] - // [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx + // [432] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx lda keyboard_matrix_col_bitmask,x and row_scan // if(event_type==0) - // [434] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 -- vbuaa_eq_0_then_la1 + // [433] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 -- vbuaa_eq_0_then_la1 cmp #0 beq b11 // keyboard_event_scan::@14 // keyboard_events[keyboard_events_size++] = keycode - // [435] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2 + // [434] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2 // Key pressed lda keycode ldy keyboard_events_size sta keyboard_events,y // keyboard_events[keyboard_events_size++] = keycode; - // [436] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 + // [435] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 inc keyboard_events_size - // [437] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10] - // [437] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy + // [436] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10] + // [436] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy // keyboard_event_scan::@10 b10: // keycode++; - // [438] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1 + // [437] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1 inc keycode // for(byte col : 0..7) - // [439] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuxx=_inc_vbuxx + // [438] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuxx=_inc_vbuxx inx - // [440] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 -- vbuxx_neq_vbuc1_then_la1 + // [439] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne b9 // keyboard_event_scan::@15 // keyboard_scan_values[row] = row_scan - // [441] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [440] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2 // Store the current keyboard status for the row to debounce lda row_scan ldy row @@ -26886,16 +26872,16 @@ keyboard_event_scan: { // keyboard_event_scan::@11 b11: // keycode|$40 - // [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 -- vbuaa=vbuz1_bor_vbuc1 + // [441] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 -- vbuaa=vbuz1_bor_vbuc1 lda #$40 ora keycode // keyboard_events[keyboard_events_size++] = keycode|$40 - // [443] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuaa + // [442] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuaa // Key released ldy keyboard_events_size sta keyboard_events,y // keyboard_events[keyboard_events_size++] = keycode|$40; - // [444] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 + // [443] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 inc keyboard_events_size jmp b10 } @@ -26908,16 +26894,16 @@ keyboard_event_scan: { // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] - // [445] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [444] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x sta CIA1_PORT_A // ~*CIA1_PORT_B - // [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) -- vbuaa=_bnot__deref_pbuc1 + // [445] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) -- vbuaa=_bnot__deref_pbuc1 lda CIA1_PORT_B eor #$ff // keyboard_matrix_read::@return // } - // [447] return + // [446] return rts } // render_show @@ -26926,42 +26912,42 @@ render_show: { .const toD0181_return = (>(PLAYFIELD_SCREEN_1&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f .const toD0182_return = (>(PLAYFIELD_SCREEN_2&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f // if(render_screen_show==0) - // [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1 + // [447] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1 lda render_screen_show cmp #0 beq toD0181 - // [449] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182] + // [448] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182] // render_show::toD0182 - // [450] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1] - // [450] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuaa=vbuc1 + // [449] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1] + // [449] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuaa=vbuc1 lda #toD0182_return // render_show::@1 b1: // *D018 = d018val - // [451] *((const byte*) D018#0) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuaa + // [450] *((const byte*) D018#0) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuaa sta D018 // *BGCOL2 = PIECES_COLORS_1[level] - // [452] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [451] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy level lda PIECES_COLORS_1,y sta BGCOL2 // *BGCOL3 = PIECES_COLORS_2[level] - // [453] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [452] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 lda PIECES_COLORS_2,y sta BGCOL3 // render_screen_showing = render_screen_show - // [454] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 -- vbuz1=vbuz2 + // [453] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 -- vbuz1=vbuz2 lda render_screen_show sta render_screen_showing // render_show::@return // } - // [455] return + // [454] return rts - // [456] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181] + // [455] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181] // render_show::toD0181 toD0181: - // [450] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1] - // [450] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuaa=vbuc1 + // [449] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1] + // [449] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuaa=vbuc1 lda #toD0181_return jmp b1 } @@ -26970,39 +26956,39 @@ render_show: { play_init: { .label pli = $22 .label idx = $14 - // [458] phi from play_init to play_init::@1 [phi:play_init->play_init::@1] - // [458] phi (byte) play_init::idx#2 = (byte) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1 + // [457] phi from play_init to play_init::@1 [phi:play_init->play_init::@1] + // [457] phi (byte) play_init::idx#2 = (byte) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1 lda #0 sta idx - // [458] phi (byte*) play_init::pli#2 = (const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1 + // [457] phi (byte*) play_init::pli#2 = (const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1 lda #playfield sta pli+1 - // [458] phi (byte) play_init::j#2 = (byte) 0 [phi:play_init->play_init::@1#2] -- vbuyy=vbuc1 + // [457] phi (byte) play_init::j#2 = (byte) 0 [phi:play_init->play_init::@1#2] -- vbuyy=vbuc1 ldy #0 - // [458] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1] - // [458] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy - // [458] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy - // [458] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy + // [457] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1] + // [457] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy + // [457] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy + // [457] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy // play_init::@1 b1: // playfield_lines[j] = pli - // [459] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 + // [458] (byte~) play_init::$4 ← (byte) play_init::j#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 tya asl tax - // [460] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuxx=pbuz1 + // [459] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$4) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuxx=pbuz1 lda pli sta playfield_lines,x lda pli+1 sta playfield_lines+1,x // playfield_lines_idx[j] = idx - // [461] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuyy=vbuz1 + // [460] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuyy=vbuz1 lda idx sta playfield_lines_idx,y // pli += PLAYFIELD_COLS - // [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 -- pbuz1=pbuz1_plus_vbuc1 + // [461] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 -- pbuz1=pbuz1_plus_vbuc1 lda #PLAYFIELD_COLS clc adc pli @@ -27011,40 +26997,40 @@ play_init: { inc pli+1 !: // idx += PLAYFIELD_COLS - // [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 -- vbuz1=vbuz1_plus_vbuc1 + // [462] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 -- vbuz1=vbuz1_plus_vbuc1 lax idx axs #-[PLAYFIELD_COLS] stx idx // for(byte j:0..PLAYFIELD_LINES-1) - // [464] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuyy=_inc_vbuyy + // [463] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuyy=_inc_vbuyy iny - // [465] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_init::@1 -- vbuyy_neq_vbuc1_then_la1 + // [464] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto play_init::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #PLAYFIELD_LINES-1+1 bne b1 // play_init::@2 // playfield_lines_idx[PLAYFIELD_LINES] = PLAYFIELD_COLS*PLAYFIELD_LINES - // [466] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 -- _deref_pbuc1=vbuc2 + // [465] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 -- _deref_pbuc1=vbuc2 lda #PLAYFIELD_COLS*PLAYFIELD_LINES sta playfield_lines_idx+PLAYFIELD_LINES // current_movedown_slow = MOVEDOWN_SLOW_SPEEDS[level] - // [467] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) -- vbuz1=_deref_pbuc1 + // [466] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) -- vbuz1=_deref_pbuc1 // Set initial speed of moving down a tetromino lda MOVEDOWN_SLOW_SPEEDS sta current_movedown_slow - // [468] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3] - // [468] phi (byte) play_init::b#2 = (byte) 0 [phi:play_init::@2->play_init::@3#0] -- vbuxx=vbuc1 + // [467] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3] + // [467] phi (byte) play_init::b#2 = (byte) 0 [phi:play_init::@2->play_init::@3#0] -- vbuxx=vbuc1 ldx #0 // Set the initial score add values - // [468] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3] - // [468] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy + // [467] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3] + // [467] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy // play_init::@3 b3: // score_add_bcd[b] = SCORE_BASE_BCD[b] - // [469] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 + // [468] (byte~) play_init::$5 ← (byte) play_init::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 txa asl asl - // [470] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) -- pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa + // [469] *((const dword[5]) score_add_bcd#0 + (byte~) play_init::$5) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte~) play_init::$5) -- pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa tay lda SCORE_BASE_BCD,y sta score_add_bcd,y @@ -27055,14 +27041,14 @@ play_init: { lda SCORE_BASE_BCD+3,y sta score_add_bcd+3,y // for(byte b: 0..4) - // [471] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuxx=_inc_vbuxx + // [470] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuxx=_inc_vbuxx inx - // [472] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 -- vbuxx_neq_vbuc1_then_la1 + // [471] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne b3 // play_init::@return // } - // [473] return + // [472] return rts } // sprites_irq_init @@ -27072,7 +27058,7 @@ sprites_irq_init: { // asm { sei } sei // *IRQ_STATUS = IRQ_RASTER - // [475] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 + // [474] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 // Acknowledge any IRQ and setup the next one lda #IRQ_RASTER sta IRQ_STATUS @@ -27080,36 +27066,36 @@ sprites_irq_init: { // asm { ldaCIA1_INTERRUPT } lda CIA1_INTERRUPT // *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK - // [477] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2 + // [476] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR // *PROCPORT = PROCPORT_RAM_IO - // [478] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2 + // [477] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [479] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2 + // [478] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT // *VIC_CONTROL &=$7f - // [480] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [479] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line lda #$7f and VIC_CONTROL sta VIC_CONTROL // *RASTER = IRQ_RASTER_FIRST - // [481] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 -- _deref_pbuc1=vbuc2 + // [480] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 -- _deref_pbuc1=vbuc2 lda #IRQ_RASTER_FIRST sta RASTER // *IRQ_ENABLE = IRQ_RASTER - // [482] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 + // [481] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE // *HARDWARE_IRQ = &sprites_irq - // [483] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2 + // [482] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #sprites_init::@1] - // [490] phi (byte) sprites_init::xpos#2 = (byte)(number) $18+(number) $f*(number) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1 + // [489] phi from sprites_init to sprites_init::@1 [phi:sprites_init->sprites_init::@1] + // [489] phi (byte) sprites_init::xpos#2 = (byte)(number) $18+(number) $f*(number) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1 lda #$18+$f*8 sta xpos - // [490] phi (byte) sprites_init::s#2 = (byte) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuyy=vbuc1 + // [489] phi (byte) sprites_init::s#2 = (byte) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuyy=vbuc1 ldy #0 - // [490] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1] - // [490] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy - // [490] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy + // [489] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1] + // [489] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy + // [489] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy // sprites_init::@1 b1: // s2 = s*2 - // [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 + // [490] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 tya asl tax // SPRITES_XPOS[s2] = xpos - // [492] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuxx=vbuz1 + // [491] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuxx=vbuz1 lda xpos sta SPRITES_XPOS,x // SPRITES_COLS[s] = BLACK - // [493] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuyy=vbuc2 + // [492] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuyy=vbuc2 lda #BLACK sta SPRITES_COLS,y // xpos = xpos+24 - // [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 + // [493] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 lax xpos axs #-[$18] stx xpos // for(byte s:0..3) - // [495] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuyy=_inc_vbuyy + // [494] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuyy=_inc_vbuyy iny - // [496] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 -- vbuyy_neq_vbuc1_then_la1 + // [495] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #4 bne b1 // sprites_init::@return // } - // [497] return + // [496] return rts } // render_init @@ -27189,98 +27175,98 @@ render_init: { .label li_2 = $2c // render_init::vicSelectGfxBank1 // *CIA2_PORT_A_DDR = %00000011 - // [499] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [498] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 sta CIA2_PORT_A_DDR - // [500] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] + // [499] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] // render_init::vicSelectGfxBank1_toDd001 // render_init::vicSelectGfxBank1_@1 // *CIA2_PORT_A = toDd00(gfx) - // [501] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [500] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return sta CIA2_PORT_A // render_init::@2 // *D011 = VIC_ECM | VIC_DEN | VIC_RSEL | 3 - // [502] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 -- _deref_pbuc1=vbuc2 + // [501] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 -- _deref_pbuc1=vbuc2 // Enable Extended Background Color Mode lda #VIC_ECM|VIC_DEN|VIC_RSEL|3 sta D011 // *BORDERCOL = BLACK - // [503] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 + // [502] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 lda #BLACK sta BORDERCOL // *BGCOL1 = BLACK - // [504] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 + // [503] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 sta BGCOL1 // *BGCOL2 = PIECES_COLORS_1[0] - // [505] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) -- _deref_pbuc1=_deref_pbuc2 + // [504] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) -- _deref_pbuc1=_deref_pbuc2 lda PIECES_COLORS_1 sta BGCOL2 // *BGCOL3 = PIECES_COLORS_2[0] - // [506] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) -- _deref_pbuc1=_deref_pbuc2 + // [505] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) -- _deref_pbuc1=_deref_pbuc2 lda PIECES_COLORS_2 sta BGCOL3 // *BGCOL4 = GREY - // [507] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 -- _deref_pbuc1=vbuc2 + // [506] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 -- _deref_pbuc1=vbuc2 lda #GREY sta BGCOL4 // render_screen_original(PLAYFIELD_SCREEN_1) - // [508] call render_screen_original - // [520] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original] - // [520] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_1#0 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1 + // [507] call render_screen_original + // [519] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original] + // [519] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_1#0 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_1 sta render_screen_original.screen+1 jsr render_screen_original - // [509] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3] + // [508] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3] // render_init::@3 // render_screen_original(PLAYFIELD_SCREEN_2) - // [510] call render_screen_original - // [520] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original] - // [520] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_2#0 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1 + // [509] call render_screen_original + // [519] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original] + // [519] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_2#0 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_2 sta render_screen_original.screen+1 jsr render_screen_original - // [511] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1] - // [511] phi (byte*) render_init::li_2#2 = (const byte*) PLAYFIELD_SCREEN_2#0+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1 + // [510] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1] + // [510] phi (byte*) render_init::li_2#2 = (const byte*) PLAYFIELD_SCREEN_2#0+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_2+2*$28+$10 sta li_2+1 - // [511] phi (byte*) render_init::li_1#2 = (const byte*) PLAYFIELD_SCREEN_1#0+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1 + // [510] phi (byte*) render_init::li_1#2 = (const byte*) PLAYFIELD_SCREEN_1#0+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_1+2*$28+$10 sta li_1+1 - // [511] phi (byte) render_init::i#2 = (byte) 0 [phi:render_init::@3->render_init::@1#2] -- vbuyy=vbuc1 + // [510] phi (byte) render_init::i#2 = (byte) 0 [phi:render_init::@3->render_init::@1#2] -- vbuyy=vbuc1 ldy #0 - // [511] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1] - // [511] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy - // [511] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy - // [511] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy + // [510] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1] + // [510] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy + // [510] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy + // [510] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy // render_init::@1 b1: // screen_lines_1[i] = li_1 - // [512] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 + // [511] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 tya asl tax - // [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuxx=pbuz1 + // [512] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuxx=pbuz1 lda li_1 sta screen_lines_1,x lda li_1+1 sta screen_lines_1+1,x // screen_lines_2[i] = li_2 - // [514] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuxx=pbuz1 + // [513] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$13) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuxx=pbuz1 lda li_2 sta screen_lines_2,x lda li_2+1 sta screen_lines_2+1,x // li_1 += 40 - // [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [514] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc li_1 @@ -27289,7 +27275,7 @@ render_init: { inc li_1+1 !: // li_2 += 40 - // [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [515] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc li_2 @@ -27298,14 +27284,14 @@ render_init: { inc li_2+1 !: // for(byte i:0..PLAYFIELD_LINES-1) - // [517] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuyy=_inc_vbuyy + // [516] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuyy=_inc_vbuyy iny - // [518] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto render_init::@1 -- vbuyy_neq_vbuc1_then_la1 + // [517] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte) 1+(byte) 1) goto render_init::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #PLAYFIELD_LINES-1+1 bne b1 // render_init::@return // } - // [519] return + // [518] return rts } // render_screen_original @@ -27319,182 +27305,182 @@ render_screen_original: { .label oscr = $19 .label ocols = $22 .label y = $18 - // [521] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1] - // [521] phi (byte) render_screen_original::y#6 = (byte) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1 + // [520] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1] + // [520] phi (byte) render_screen_original::y#6 = (byte) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1 lda #0 sta y - // [521] phi (byte*) render_screen_original::ocols#4 = (const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1 + // [520] phi (byte*) render_screen_original::ocols#4 = (const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1 lda #PLAYFIELD_COLORS_ORIGINAL+$20*2 sta ocols+1 - // [521] phi (byte*) render_screen_original::oscr#4 = (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1 + // [520] phi (byte*) render_screen_original::oscr#4 = (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_ORIGINAL+$20*2 sta oscr+1 - // [521] phi (byte*) render_screen_original::cols#7 = (const byte*) COLS#0 [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1 + // [520] phi (byte*) render_screen_original::cols#7 = (const byte*) COLS#0 [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1 lda #COLS sta cols+1 - // [521] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy - // [521] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1] - // [521] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy - // [521] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy - // [521] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy - // [521] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy - // [521] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy + // [520] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy + // [520] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1] + // [520] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy + // [520] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy + // [520] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy + // [520] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy + // [520] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy // render_screen_original::@1 b1: - // [522] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2] - // [522] phi (byte) render_screen_original::x#4 = (byte) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuxx=vbuc1 + // [521] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2] + // [521] phi (byte) render_screen_original::x#4 = (byte) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuxx=vbuc1 ldx #0 - // [522] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy - // [522] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy - // [522] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2] - // [522] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy - // [522] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy - // [522] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy + // [521] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy + // [521] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy + // [521] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2] + // [521] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy + // [521] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy + // [521] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy // render_screen_original::@2 b2: // *screen++ = SPACE - // [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1 + // [522] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1 lda #SPACE ldy #0 sta (screen),y // *screen++ = SPACE; - // [524] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1 + // [523] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: // *cols++ = BLACK - // [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 + // [524] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 lda #BLACK ldy #0 sta (cols),y // *cols++ = BLACK; - // [526] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1 + // [525] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1 inc cols bne !+ inc cols+1 !: // while(++x!=4) - // [527] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuxx=_inc_vbuxx + // [526] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuxx=_inc_vbuxx inx - // [528] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -- vbuxx_neq_vbuc1_then_la1 + // [527] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -- vbuxx_neq_vbuc1_then_la1 cpx #4 bne b2 - // [529] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3] - // [529] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy - // [529] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy - // [529] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy - // [529] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy - // [529] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy + // [528] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3] + // [528] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy + // [528] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy + // [528] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy + // [528] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy + // [528] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy // render_screen_original::@3 b3: // *screen++ = *oscr++ - // [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2 + // [529] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (oscr),y sta (screen),y // *screen++ = *oscr++; - // [531] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1 + // [530] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [532] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1 + // [531] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1 inc oscr bne !+ inc oscr+1 !: // *cols++ = *ocols++ - // [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2 + // [532] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (ocols),y sta (cols),y // *cols++ = *ocols++; - // [534] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1 + // [533] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1 inc cols bne !+ inc cols+1 !: - // [535] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1 + // [534] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1 inc ocols bne !+ inc ocols+1 !: // while(++x!=36) - // [536] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuxx=_inc_vbuxx + // [535] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuxx=_inc_vbuxx inx - // [537] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -- vbuxx_neq_vbuc1_then_la1 + // [536] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #$24 bne b3 - // [538] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4] - // [538] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy - // [538] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy - // [538] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy + // [537] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4] + // [537] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy + // [537] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy + // [537] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy // render_screen_original::@4 b4: // *screen++ = SPACE - // [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1 + // [538] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1 lda #SPACE ldy #0 sta (screen),y // *screen++ = SPACE; - // [540] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1 + // [539] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: // *cols++ = BLACK - // [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 + // [540] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 lda #BLACK ldy #0 sta (cols),y // *cols++ = BLACK; - // [542] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1 + // [541] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1 inc cols bne !+ inc cols+1 !: // while(++x!=40) - // [543] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuxx=_inc_vbuxx + // [542] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuxx=_inc_vbuxx inx - // [544] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -- vbuxx_neq_vbuc1_then_la1 + // [543] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -- vbuxx_neq_vbuc1_then_la1 cpx #$28 bne b4 // render_screen_original::@5 // for(byte y:0..24) - // [545] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1 + // [544] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1 inc y - // [546] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1 + // [545] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp y bne b1 // render_screen_original::@return // } - // [547] return + // [546] return rts } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { // *SID_VOICE3_FREQ = $ffff - // [548] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [547] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff sta SID_VOICE3_FREQ lda #>$ffff sta SID_VOICE3_FREQ+1 // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE - // [549] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [548] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL // sid_rnd_init::@return // } - // [550] return + // [549] return rts } // sprites_irq @@ -27513,118 +27499,118 @@ sprites_irq: { // Clear decimal flag (because it is used by the score algorithm) cld // ypos = irq_sprite_ypos - // [552] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 -- vbuaa=vbuz1 + // [551] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 -- vbuaa=vbuz1 // Place the sprites lda irq_sprite_ypos // SPRITES_YPOS[0] = ypos - // [553] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [552] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS // SPRITES_YPOS[2] = ypos - // [554] *((const byte*) SPRITES_YPOS#0+(byte) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [553] *((const byte*) SPRITES_YPOS#0+(byte) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS+2 // SPRITES_YPOS[4] = ypos - // [555] *((const byte*) SPRITES_YPOS#0+(byte) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [554] *((const byte*) SPRITES_YPOS#0+(byte) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS+4 // SPRITES_YPOS[6] = ypos - // [556] *((const byte*) SPRITES_YPOS#0+(byte) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [555] *((const byte*) SPRITES_YPOS#0+(byte) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS+6 // irq_raster_next+1 - // [557] (byte~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 + // [556] (byte~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 ldx irq_raster_next inx // raster_sprite_gfx_modify = irq_raster_next+1 - // [558] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte~) sprites_irq::$0 -- vbuz1=vbuxx + // [557] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte~) sprites_irq::$0 -- vbuz1=vbuxx // Wait for the y-position before changing sprite pointers stx raster_sprite_gfx_modify // sprites_irq::@8 b8: // while(*RASTERsprites_irq::@5] - // [574] phi (byte) irq_sprite_ptr#11 = (byte) irq_sprite_ptr#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy - // [574] phi (byte) irq_sprite_ypos#11 = (byte) irq_sprite_ypos#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#1] -- register_copy - // [574] phi (byte) irq_cnt#3 = (byte) irq_cnt#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#2] -- register_copy - // [574] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#3] -- register_copy + // [573] phi from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 to sprites_irq::@5 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5] + // [573] phi (byte) irq_sprite_ptr#11 = (byte) irq_sprite_ptr#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy + // [573] phi (byte) irq_sprite_ypos#11 = (byte) irq_sprite_ypos#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#1] -- register_copy + // [573] phi (byte) irq_cnt#3 = (byte) irq_cnt#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#2] -- register_copy + // [573] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#3] -- register_copy // sprites_irq::@5 b5: // *RASTER = irq_raster_next - // [575] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1 + // [574] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1 // Setup next interrupt lda irq_raster_next sta RASTER // *IRQ_STATUS = IRQ_RASTER - // [576] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 + // [575] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ and setup the next one lda #IRQ_RASTER sta IRQ_STATUS // sprites_irq::@return // } - // [577] return - exit interrupt(HARDWARE_CLOBBER) + // [576] return - exit interrupt(HARDWARE_CLOBBER) rega: lda #00 regx: @@ -27633,20 +27619,20 @@ sprites_irq: { // sprites_irq::@4 b4: // irq_cnt = 0 - // [578] (byte) irq_cnt#2 ← (byte) 0 -- vbuz1=vbuc1 + // [577] (byte) irq_cnt#2 ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta irq_cnt // irq_raster_next = IRQ_RASTER_FIRST - // [579] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1 + // [578] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1 lda #IRQ_RASTER_FIRST sta irq_raster_next // irq_sprite_ypos += 21 - // [580] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [579] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax irq_sprite_ypos axs #-[$15] stx irq_sprite_ypos // irq_sprite_ptr += 3 - // [581] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [580] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax irq_sprite_ptr axs #-[3] stx irq_sprite_ptr @@ -27654,42 +27640,42 @@ sprites_irq: { // sprites_irq::@3 b3: // irq_raster_next += 21 - // [582] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [581] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax irq_raster_next axs #-[$15] stx irq_raster_next // irq_sprite_ypos = SPRITES_FIRST_YPOS - // [583] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1 + // [582] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1 lda #SPRITES_FIRST_YPOS sta irq_sprite_ypos - // [584] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2] + // [583] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2] // sprites_irq::toSpritePtr2 // sprites_irq::@11 // irq_sprite_ptr = toSpritePtr(PLAYFIELD_SPRITES) - // [585] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1 + // [584] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1 lda #toSpritePtr2_return sta irq_sprite_ptr jmp b5 // sprites_irq::@1 b1: // PLAYFIELD_SPRITE_PTRS_1[0] = ptr++ - // [586] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx + // [585] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_1 // PLAYFIELD_SPRITE_PTRS_1[0] = ptr++; - // [587] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx + // [586] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx inx // PLAYFIELD_SPRITE_PTRS_1[1] = ptr - // [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx + // [587] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_1+1 // PLAYFIELD_SPRITE_PTRS_1[2] = ptr++ - // [589] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx + // [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_1+2 // PLAYFIELD_SPRITE_PTRS_1[2] = ptr++; - // [590] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx + // [589] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx inx txa // PLAYFIELD_SPRITE_PTRS_1[3] = ptr - // [591] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa + // [590] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa sta PLAYFIELD_SPRITE_PTRS_1+3 jmp b2 } diff --git a/src/test/ref/complex/tetris/tetris.sym b/src/test/ref/complex/tetris/tetris.sym index 17cb49a54..0406cc4e3 100644 --- a/src/test/ref/complex/tetris/tetris.sym +++ b/src/test/ref/complex/tetris/tetris.sym @@ -234,7 +234,7 @@ (byte~) current_piece_char#101 current_piece_char#101 zp ZP_BYTE:15 22.0 (byte) current_piece_char#16 current_piece_char zp ZP_BYTE:38 3.4324324324324325 (byte) current_piece_char#29 current_piece_char zp ZP_BYTE:38 6.0 -(byte) current_piece_char#5 current_piece_char zp ZP_BYTE:38 0.25 +(byte) current_piece_char#5 current_piece_char zp ZP_BYTE:38 0.25806451612903225 (byte) current_piece_char#68 current_piece_char#68 zp ZP_BYTE:15 48.285714285714285 (byte*) current_piece_gfx (byte*~) current_piece_gfx#112 current_piece_gfx#112 zp ZP_WORD:36 2.0 @@ -249,7 +249,7 @@ (byte*) current_piece_gfx#64 current_piece_gfx#64 zp ZP_WORD:36 48.285714285714285 (byte*) current_piece_gfx#7 current_piece_gfx zp ZP_WORD:25 4.0 (byte) current_xpos -(byte) current_xpos#100 current_xpos zp ZP_BYTE:43 0.3225806451612903 +(byte) current_xpos#100 current_xpos zp ZP_BYTE:43 0.3333333333333333 (byte~) current_xpos#119 current_xpos#119 zp ZP_BYTE:14 1.3333333333333333 (byte~) current_xpos#120 current_xpos#120 zp ZP_BYTE:14 7.333333333333333 (byte) current_xpos#14 current_xpos zp ZP_BYTE:43 20.38181818181818 @@ -266,14 +266,14 @@ (byte) current_ypos#19 current_ypos zp ZP_BYTE:24 1.7051282051282046 (byte) current_ypos#3 current_ypos zp ZP_BYTE:24 4.0 (byte) current_ypos#38 current_ypos zp ZP_BYTE:24 6.0 -(byte) current_ypos#6 current_ypos zp ZP_BYTE:24 0.3333333333333333 +(byte) current_ypos#6 current_ypos zp ZP_BYTE:24 0.3448275862068966 (byte~) current_ypos#98 reg byte x 1.0 (byte~) current_ypos#99 reg byte x 4.4 (byte) game_over (byte) game_over#10 game_over zp ZP_BYTE:11 4.804347826086958 (byte) game_over#15 game_over zp ZP_BYTE:11 3.189189189189189 (byte) game_over#27 game_over zp ZP_BYTE:11 6.0 -(byte) game_over#52 game_over zp ZP_BYTE:11 0.34782608695652173 +(byte) game_over#52 game_over zp ZP_BYTE:11 0.36363636363636365 (byte) game_over#65 game_over zp ZP_BYTE:11 0.42857142857142855 (byte) irq_cnt (byte) irq_cnt#0 irq_cnt zp ZP_BYTE:31 0.17391304347826086 @@ -710,7 +710,7 @@ (byte) play_remove_lines::y#8 y zp ZP_BYTE:12 133.46666666666667 (void()) play_spawn_current() (byte~) play_spawn_current::$1 reg byte a 4.0 -(byte~) play_spawn_current::$7 $7 zp ZP_BYTE:46 0.06451612903225806 +(byte~) play_spawn_current::$7 $7 zp ZP_BYTE:46 0.06666666666666667 (label) play_spawn_current::@1 (label) play_spawn_current::@2 (label) play_spawn_current::@3 @@ -720,8 +720,7 @@ (byte) play_spawn_current::current_piece_idx (byte) play_spawn_current::current_piece_idx#0 reg byte x 2.5 (byte) play_spawn_current::piece_idx -(byte) play_spawn_current::piece_idx#1 piece_idx zp ZP_BYTE:10 2002.0 -(byte) play_spawn_current::piece_idx#2 piece_idx zp ZP_BYTE:10 100.5 +(byte) play_spawn_current::piece_idx#1 piece_idx zp ZP_BYTE:10 100.5 (label) play_spawn_current::sid_rnd1 (byte) play_spawn_current::sid_rnd1_return (byte) play_spawn_current::sid_rnd1_return#0 reg byte a 2002.0 @@ -1098,7 +1097,7 @@ zp ZP_BYTE:7 [ level#33 level#10 level#17 level#19 level#21 ] zp ZP_BYTE:8 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] zp ZP_BYTE:9 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] reg byte x [ play_move_down::return#3 ] -zp ZP_BYTE:10 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] +zp ZP_BYTE:10 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#1 ] zp ZP_BYTE:11 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] zp ZP_BYTE:12 [ play_remove_lines::y#8 play_remove_lines::y#1 current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] diff --git a/src/test/ref/condition-integer-0.asm b/src/test/ref/condition-integer-0.asm index d9baaa994..9773d11f6 100644 --- a/src/test/ref/condition-integer-0.asm +++ b/src/test/ref/condition-integer-0.asm @@ -10,37 +10,18 @@ main: { sta SCREEN lda #' ' sta SCREEN+1 - ldy #2 - ldx #0 - // loop byte - b3: - cpx #0 - beq b4 - lda #'+' - sta SCREEN,y - iny + ldy #0 + ldx #2 b4: - inx - cpx #3 + iny + cpy #3 bne b3 lda #' ' - sta SCREEN,y - iny + sta SCREEN,x + inx lda #<0 sta i1 sta i1+1 - // loop word - b7: - lda i1 - cmp #<0 - bne !+ - lda i1+1 - cmp #>0 - beq b8 - !: - lda #'+' - sta SCREEN,y - iny b8: inc i1 bne !+ @@ -53,4 +34,25 @@ main: { cmp #<3 bne b7 rts + // loop word + b7: + lda i1 + cmp #<0 + bne !+ + lda i1+1 + cmp #>0 + beq b8 + !: + lda #'+' + sta SCREEN,x + inx + jmp b8 + // loop byte + b3: + cpy #0 + beq b4 + lda #'+' + sta SCREEN,x + inx + jmp b4 } diff --git a/src/test/ref/condition-integer-0.cfg b/src/test/ref/condition-integer-0.cfg index ceede22d2..47c04cdc5 100644 --- a/src/test/ref/condition-integer-0.cfg +++ b/src/test/ref/condition-integer-0.cfg @@ -15,39 +15,37 @@ main::@2: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@2 [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' - to:main::@3 -main::@3: scope:[main] from main::@1 main::@4 - [7] (byte) main::idx#10 ← phi( main::@1/(byte) 2 main::@4/(byte) main::idx#11 ) - [7] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::i#1 ) - [8] if((byte) 0==(byte) main::i#2) goto main::@4 - to:main::@5 -main::@5: scope:[main] from main::@3 - [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' - [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 to:main::@4 -main::@4: scope:[main] from main::@3 main::@5 - [11] (byte) main::idx#11 ← phi( main::@3/(byte) main::idx#10 main::@5/(byte) main::idx#4 ) - [12] (byte) main::i#1 ← ++ (byte) main::i#2 - [13] if((byte) main::i#1!=(byte) 3) goto main::@3 +main::@4: scope:[main] from main::@1 main::@3 main::@5 + [7] (byte) main::i#5 ← phi( main::@3/(byte) main::i#1 main::@1/(byte) 0 main::@5/(byte) main::i#1 ) + [7] (byte) main::idx#10 ← phi( main::@3/(byte) main::idx#10 main::@1/(byte) 2 main::@5/(byte) main::idx#4 ) + [8] (byte) main::i#1 ← ++ (byte) main::i#5 + [9] if((byte) main::i#1!=(byte) 3) goto main::@3 to:main::@6 main::@6: scope:[main] from main::@4 - [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' - [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 - to:main::@7 -main::@7: scope:[main] from main::@6 main::@8 - [16] (byte) main::idx#12 ← phi( main::@8/(byte) main::idx#17 main::@6/(byte) main::idx#5 ) - [16] (word) main::i1#2 ← phi( main::@8/(word) main::i1#1 main::@6/(word) 0 ) - [17] if((byte) 0==(word) main::i1#2) goto main::@8 - to:main::@9 -main::@9: scope:[main] from main::@7 - [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' - [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 + [10] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) ' ' + [11] (byte) main::idx#21 ← ++ (byte) main::idx#10 to:main::@8 -main::@8: scope:[main] from main::@7 main::@9 - [20] (byte) main::idx#17 ← phi( main::@9/(byte) main::idx#6 main::@7/(byte) main::idx#12 ) - [21] (word) main::i1#1 ← ++ (word) main::i1#2 - [22] if((word) main::i1#1!=(byte) 3) goto main::@7 +main::@8: scope:[main] from main::@6 main::@7 main::@9 + [12] (word) main::i1#5 ← phi( main::@9/(word) main::i1#1 main::@7/(word) main::i1#1 main::@6/(word) 0 ) + [12] (byte) main::idx#12 ← phi( main::@9/(byte) main::idx#6 main::@7/(byte) main::idx#12 main::@6/(byte) main::idx#21 ) + [13] (word) main::i1#1 ← ++ (word) main::i1#5 + [14] if((word) main::i1#1!=(byte) 3) goto main::@7 to:main::@return main::@return: scope:[main] from main::@8 - [23] return + [15] return to:@return +main::@7: scope:[main] from main::@8 + [16] if((byte) 0==(word) main::i1#1) goto main::@8 + to:main::@9 +main::@9: scope:[main] from main::@7 + [17] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' + [18] (byte) main::idx#6 ← ++ (byte) main::idx#12 + to:main::@8 +main::@3: scope:[main] from main::@4 + [19] if((byte) 0==(byte) main::i#1) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 + [20] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' + [21] (byte) main::idx#4 ← ++ (byte) main::idx#10 + to:main::@4 diff --git a/src/test/ref/condition-integer-0.log b/src/test/ref/condition-integer-0.log index b6b498869..d3119e38c 100644 --- a/src/test/ref/condition-integer-0.log +++ b/src/test/ref/condition-integer-0.log @@ -208,6 +208,8 @@ Eliminating variable (byte) main::idx#1 from unused block main::@3 Removing PHI-reference to removed block (main::@3) in block main::@1 Removing unused block main::@3 Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 3 in if((byte) main::i#1!=(number) 3) goto main::@5 Adding number conversion cast (unumber) 3 in if((word) main::i1#1!=(number) 3) goto main::@9 Successful SSA optimization PassNAddNumberTypeConversions @@ -218,28 +220,48 @@ Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 3 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::idx#3 = (byte) main::idx#8 +Alias (byte) main::i#1 = (byte) main::i#2 +Alias (byte) main::idx#10 = (byte) main::idx#11 +Alias (word) main::i1#1 = (word) main::i1#2 +Alias (byte) main::idx#12 = (byte) main::idx#17 +Alias (byte) main::idx#19 = (byte) main::idx#2 +Alias (byte) main::idx#21 = (byte) main::idx#5 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) main::idx#13 (const byte) main::idx#0 +Identical Phi Values (byte) main::i#7 (const byte) main::i#0 +Identical Phi Values (word) main::i1#7 (const word) main::i1#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [5] (byte) main::idx#3 ← ++ (const byte) main::idx#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#3 = ++main::idx#0 Successful SSA optimization Pass2ConstantIdentification +Removing PHI-reference to removed block (main::@5_1) in block main::@7 +Removing PHI-reference to removed block (main::@5_1) in block main::@7 +if() condition always true - replacing block destination [27] if((byte) 0==(const byte) main::i#0) goto main::@6 +Removing PHI-reference to removed block (main::@9_1) in block main::@11 +Removing PHI-reference to removed block (main::@9_1) in block main::@11 +if() condition always true - replacing block destination [29] if((byte) 0==(const word) main::i1#0) goto main::@10 +Successful SSA optimization Pass2ConstantIfs Simplifying expression containing zero SCREEN#0 in [4] *((const byte*) SCREEN#0 + (const byte) main::idx#0) ← (byte) '+' Successful SSA optimization PassNSimplifyExpressionWithZero -Constant right-side identified [1] (byte) main::idx#2 ← ++ (const byte) main::idx#3 +Alias (byte) main::i#1 = (byte) main::i#6 +Alias (byte) main::idx#10 = (byte) main::idx#18 +Alias (word) main::i1#1 = (word) main::i1#6 +Alias (byte) main::idx#12 = (byte) main::idx#20 +Successful SSA optimization Pass2AliasElimination +Constant right-side identified [1] (byte) main::idx#19 ← ++ (const byte) main::idx#3 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::idx#2 = ++main::idx#3 +Constant (const byte) main::idx#19 = ++main::idx#3 Successful SSA optimization Pass2ConstantIdentification Inlining constant with var siblings (const byte) main::idx#0 Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const word) main::i1#0 Inlining constant with var siblings (const byte) main::idx#3 -Inlining constant with var siblings (const byte) main::idx#2 +Inlining constant with var siblings (const byte) main::idx#19 Constant inlined main::i#0 = (byte) 0 Constant inlined main::i1#0 = (word) 0 Constant inlined main::idx#0 = (byte) 0 -Constant inlined main::idx#2 = ++++(byte) 0 +Constant inlined main::idx#19 = ++++(byte) 0 Constant inlined main::idx#3 = ++(byte) 0 Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in *(SCREEN#0+++0) @@ -249,36 +271,35 @@ Simplifying constant integer increment ++0 Successful SSA optimization Pass2ConstantSimplification Simplifying constant integer increment ++1 Successful SSA optimization Pass2ConstantSimplification -Added new block during phi lifting main::@13(between main::@6 and main::@5) -Added new block during phi lifting main::@14(between main::@5 and main::@6) -Added new block during phi lifting main::@15(between main::@10 and main::@9) -Added new block during phi lifting main::@16(between main::@9 and main::@10) +Added new block during phi lifting main::@13(between main::@5 and main::@6) +Added new block during phi lifting main::@14(between main::@9 and main::@10) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@5_1 CALL GRAPH Calls in [] to main:2 -Created 6 initial phi equivalence classes -Coalesced [13] main::idx#20 ← main::idx#4 -Coalesced [19] main::idx#22 ← main::idx#5 -Coalesced [24] main::idx#23 ← main::idx#6 -Coalesced [29] main::i1#5 ← main::i1#1 -Coalesced [30] main::idx#21 ← main::idx#17 -Coalesced (already) [31] main::idx#24 ← main::idx#12 -Coalesced [32] main::i#5 ← main::i#1 -Coalesced [33] main::idx#18 ← main::idx#11 -Coalesced (already) [34] main::idx#19 ← main::idx#10 +Created 4 initial phi equivalence classes +Coalesced [15] main::idx#26 ← main::idx#21 +Coalesced [23] main::idx#24 ← main::idx#6 +Coalesced [24] main::i1#8 ← main::i1#1 +Coalesced (already) [25] main::idx#25 ← main::idx#12 +Coalesced (already) [26] main::i1#9 ← main::i1#1 +Coalesced [30] main::idx#23 ← main::idx#4 +Coalesced [31] main::i#9 ← main::i#1 +Coalesced (already) [32] main::idx#22 ← main::idx#10 +Coalesced (already) [33] main::i#8 ← main::i#1 Coalesced down to 4 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) main::@1 -Culled Empty Block (label) main::@15 -Culled Empty Block (label) main::@16 -Culled Empty Block (label) main::@13 +Culled Empty Block (label) main::@5_1 +Culled Empty Block (label) main::@9_1 Culled Empty Block (label) main::@14 +Culled Empty Block (label) main::@13 Renumbering block main::@2 to main::@1 Renumbering block main::@4 to main::@2 Renumbering block main::@5 to main::@3 @@ -311,76 +332,72 @@ main::@2: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@2 [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' - to:main::@3 -main::@3: scope:[main] from main::@1 main::@4 - [7] (byte) main::idx#10 ← phi( main::@1/(byte) 2 main::@4/(byte) main::idx#11 ) - [7] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::i#1 ) - [8] if((byte) 0==(byte) main::i#2) goto main::@4 - to:main::@5 -main::@5: scope:[main] from main::@3 - [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' - [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 to:main::@4 -main::@4: scope:[main] from main::@3 main::@5 - [11] (byte) main::idx#11 ← phi( main::@3/(byte) main::idx#10 main::@5/(byte) main::idx#4 ) - [12] (byte) main::i#1 ← ++ (byte) main::i#2 - [13] if((byte) main::i#1!=(byte) 3) goto main::@3 +main::@4: scope:[main] from main::@1 main::@3 main::@5 + [7] (byte) main::i#5 ← phi( main::@3/(byte) main::i#1 main::@1/(byte) 0 main::@5/(byte) main::i#1 ) + [7] (byte) main::idx#10 ← phi( main::@3/(byte) main::idx#10 main::@1/(byte) 2 main::@5/(byte) main::idx#4 ) + [8] (byte) main::i#1 ← ++ (byte) main::i#5 + [9] if((byte) main::i#1!=(byte) 3) goto main::@3 to:main::@6 main::@6: scope:[main] from main::@4 - [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' - [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 - to:main::@7 -main::@7: scope:[main] from main::@6 main::@8 - [16] (byte) main::idx#12 ← phi( main::@8/(byte) main::idx#17 main::@6/(byte) main::idx#5 ) - [16] (word) main::i1#2 ← phi( main::@8/(word) main::i1#1 main::@6/(word) 0 ) - [17] if((byte) 0==(word) main::i1#2) goto main::@8 - to:main::@9 -main::@9: scope:[main] from main::@7 - [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' - [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 + [10] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) ' ' + [11] (byte) main::idx#21 ← ++ (byte) main::idx#10 to:main::@8 -main::@8: scope:[main] from main::@7 main::@9 - [20] (byte) main::idx#17 ← phi( main::@9/(byte) main::idx#6 main::@7/(byte) main::idx#12 ) - [21] (word) main::i1#1 ← ++ (word) main::i1#2 - [22] if((word) main::i1#1!=(byte) 3) goto main::@7 +main::@8: scope:[main] from main::@6 main::@7 main::@9 + [12] (word) main::i1#5 ← phi( main::@9/(word) main::i1#1 main::@7/(word) main::i1#1 main::@6/(word) 0 ) + [12] (byte) main::idx#12 ← phi( main::@9/(byte) main::idx#6 main::@7/(byte) main::idx#12 main::@6/(byte) main::idx#21 ) + [13] (word) main::i1#1 ← ++ (word) main::i1#5 + [14] if((word) main::i1#1!=(byte) 3) goto main::@7 to:main::@return main::@return: scope:[main] from main::@8 - [23] return + [15] return to:@return +main::@7: scope:[main] from main::@8 + [16] if((byte) 0==(word) main::i1#1) goto main::@8 + to:main::@9 +main::@9: scope:[main] from main::@7 + [17] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' + [18] (byte) main::idx#6 ← ++ (byte) main::idx#12 + to:main::@8 +main::@3: scope:[main] from main::@4 + [19] if((byte) 0==(byte) main::i#1) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 + [20] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' + [21] (byte) main::idx#4 ← ++ (byte) main::idx#10 + to:main::@4 VARIABLE REGISTER WEIGHTS (byte*) SCREEN (void()) main() (byte) main::i -(byte) main::i#1 16.5 -(byte) main::i#2 6.6000000000000005 +(byte) main::i#1 83.0 +(byte) main::i#5 213.0 (word) main::i1 -(word) main::i1#1 16.5 -(word) main::i1#2 6.6000000000000005 +(word) main::i1#1 83.0 +(word) main::i1#5 213.0 (byte) main::idx -(byte) main::idx#10 14.666666666666666 -(byte) main::idx#11 9.25 -(byte) main::idx#12 15.333333333333332 -(byte) main::idx#17 11.0 +(byte) main::idx#10 39.83333333333334 +(byte) main::idx#12 47.400000000000006 +(byte) main::idx#21 4.0 (byte) main::idx#4 22.0 -(byte) main::idx#5 4.0 (byte) main::idx#6 22.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] -[ main::idx#10 main::idx#11 main::idx#4 ] -[ main::i1#2 main::i1#1 ] -[ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +[ main::idx#10 main::idx#4 ] +[ main::i#5 main::i#1 ] +[ main::idx#12 main::idx#6 main::idx#21 ] +[ main::i1#5 main::i1#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ main::idx#10 main::idx#11 main::idx#4 ] -[ main::i1#2 main::i1#1 ] -[ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] -Allocated zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] -Allocated zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +[ main::idx#10 main::idx#4 ] +[ main::i#5 main::i#1 ] +[ main::idx#12 main::idx#6 main::idx#21 ] +[ main::i1#5 main::i1#1 ] +Allocated zp ZP_BYTE:2 [ main::idx#10 main::idx#4 ] +Allocated zp ZP_BYTE:3 [ main::i#5 main::i#1 ] +Allocated zp ZP_BYTE:4 [ main::idx#12 main::idx#6 main::idx#21 ] +Allocated zp ZP_WORD:5 [ main::i1#5 main::i1#1 ] INITIAL ASM Target platform is c64basic @@ -411,13 +428,12 @@ bend_from_b1: bend: // main main: { - .label i = 2 - .label idx = 3 - .label idx_5 = 6 - .label i1 = 4 - .label idx_6 = 6 - .label idx_12 = 6 - .label idx_17 = 6 + .label i = 3 + .label idx = 2 + .label i1 = 5 + .label idx_6 = 4 + .label idx_12 = 4 + .label idx_21 = 4 jmp b2 // main::@2 b2: @@ -430,78 +446,78 @@ main: { // [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' -- _deref_pbuc1=vbuc2 lda #' ' sta SCREEN+1 - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b3_from_b1: - // [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 - lda #2 - sta idx - // [7] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuz1=vbuc1 + // [7] phi from main::@1 to main::@4 [phi:main::@1->main::@4] + b4_from_b1: + // [7] phi (byte) main::i#5 = (byte) 0 [phi:main::@1->main::@4#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b3 - // loop byte - // [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - b3_from_b4: - // [7] phi (byte) main::idx#10 = (byte) main::idx#11 [phi:main::@4->main::@3#0] -- register_copy - // [7] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#1] -- register_copy - jmp b3 - // main::@3 - b3: - // [8] if((byte) 0==(byte) main::i#2) goto main::@4 -- vbuc1_eq_vbuz1_then_la1 - lda #0 - cmp i - beq b4_from_b3 - jmp b5 - // main::@5 - b5: - // [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuz1=vbuc2 - lda #'+' - ldy idx - sta SCREEN,y - // [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuz1=_inc_vbuz1 - inc idx - // [11] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] + // [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@4#1] -- vbuz1=vbuc1 + lda #2 + sta idx + jmp b4 + // [7] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] b4_from_b3: b4_from_b5: - // [11] phi (byte) main::idx#11 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#0] -- register_copy + // [7] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@3/main::@5->main::@4#0] -- register_copy + // [7] phi (byte) main::idx#10 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#1] -- register_copy jmp b4 // main::@4 b4: - // [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [8] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuz1=_inc_vbuz1 inc i - // [13] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 + // [9] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 lda #3 cmp i - bne b3_from_b4 + bne b3 jmp b6 // main::@6 b6: - // [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 + // [10] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 lda #' ' ldy idx sta SCREEN,y - // [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 -- vbuz1=_inc_vbuz2 + // [11] (byte) main::idx#21 ← ++ (byte) main::idx#10 -- vbuz1=_inc_vbuz2 ldy idx iny - sty idx_5 - // [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] - b7_from_b6: - // [16] phi (byte) main::idx#12 = (byte) main::idx#5 [phi:main::@6->main::@7#0] -- register_copy - // [16] phi (word) main::i1#2 = (word) 0 [phi:main::@6->main::@7#1] -- vwuz1=vwuc1 + sty idx_21 + // [12] phi from main::@6 to main::@8 [phi:main::@6->main::@8] + b8_from_b6: + // [12] phi (word) main::i1#5 = (word) 0 [phi:main::@6->main::@8#0] -- vwuz1=vwuc1 lda #<0 sta i1 lda #>0 sta i1+1 - jmp b7 + // [12] phi (byte) main::idx#12 = (byte) main::idx#21 [phi:main::@6->main::@8#1] -- register_copy + jmp b8 + // [12] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] + b8_from_b7: + b8_from_b9: + // [12] phi (word) main::i1#5 = (word) main::i1#1 [phi:main::@7/main::@9->main::@8#0] -- register_copy + // [12] phi (byte) main::idx#12 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#1] -- register_copy + jmp b8 + // main::@8 + b8: + // [13] (word) main::i1#1 ← ++ (word) main::i1#5 -- vwuz1=_inc_vwuz1 + inc i1 + bne !+ + inc i1+1 + !: + // [14] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 + lda i1+1 + cmp #>3 + bne b7 + lda i1 + cmp #<3 + bne b7 + jmp breturn + // main::@return + breturn: + // [15] return + rts // loop word - // [16] phi from main::@8 to main::@7 [phi:main::@8->main::@7] - b7_from_b8: - // [16] phi (byte) main::idx#12 = (byte) main::idx#17 [phi:main::@8->main::@7#0] -- register_copy - // [16] phi (word) main::i1#2 = (word) main::i1#1 [phi:main::@8->main::@7#1] -- register_copy - jmp b7 // main::@7 b7: - // [17] if((byte) 0==(word) main::i1#2) goto main::@8 -- vwuc1_eq_vwuz1_then_la1 + // [16] if((byte) 0==(word) main::i1#1) goto main::@8 -- vwuc1_eq_vwuz1_then_la1 lda i1 cmp #<0 bne !+ @@ -512,69 +528,63 @@ main: { jmp b9 // main::@9 b9: - // [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' -- pbuc1_derefidx_vbuz1=vbuc2 + // [17] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' -- pbuc1_derefidx_vbuz1=vbuc2 lda #'+' ldy idx_12 sta SCREEN,y - // [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuz1=_inc_vbuz1 + // [18] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuz1=_inc_vbuz1 inc idx_6 - // [20] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] - b8_from_b7: - b8_from_b9: - // [20] phi (byte) main::idx#17 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#0] -- register_copy - jmp b8 - // main::@8 - b8: - // [21] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 - inc i1 - bne !+ - inc i1+1 - !: - // [22] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 - lda i1+1 - cmp #>3 - bne b7_from_b8 - lda i1 - cmp #<3 - bne b7_from_b8 - jmp breturn - // main::@return - breturn: - // [23] return - rts + jmp b8_from_b9 + // loop byte + // main::@3 + b3: + // [19] if((byte) 0==(byte) main::i#1) goto main::@4 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp i + beq b4_from_b3 + jmp b5 + // main::@5 + b5: + // [20] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'+' + ldy idx + sta SCREEN,y + // [21] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuz1=_inc_vbuz1 + inc idx + jmp b4_from_b5 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS Statement [5] *((const byte*) SCREEN#0) ← (byte) '+' [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' [ main::i#2 main::idx#10 ] ( main:2 [ main::i#2 main::idx#10 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] -Statement [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' [ main::idx#11 ] ( main:2 [ main::idx#11 ] ) always clobbers reg byte a -Statement [17] if((byte) 0==(word) main::i1#2) goto main::@8 [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] -Statement [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a -Statement [22] if((word) main::i1#1!=(byte) 3) goto main::@7 [ main::i1#1 main::idx#17 ] ( main:2 [ main::i1#1 main::idx#17 ] ) always clobbers reg byte a +Statement [10] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) ' ' [ main::idx#10 ] ( main:2 [ main::idx#10 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::idx#10 main::idx#4 ] +Statement [14] if((word) main::i1#1!=(byte) 3) goto main::@7 [ main::idx#12 main::i1#1 ] ( main:2 [ main::idx#12 main::i1#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::idx#12 main::idx#6 main::idx#21 ] +Statement [16] if((byte) 0==(word) main::i1#1) goto main::@8 [ main::idx#12 main::i1#1 ] ( main:2 [ main::idx#12 main::i1#1 ] ) always clobbers reg byte a +Statement [17] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' [ main::idx#12 main::i1#1 ] ( main:2 [ main::idx#12 main::i1#1 ] ) always clobbers reg byte a +Statement [20] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' [ main::idx#10 main::i#1 ] ( main:2 [ main::idx#10 main::i#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::i#5 main::i#1 ] Statement [5] *((const byte*) SCREEN#0) ← (byte) '+' [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' [ main::i#2 main::idx#10 ] ( main:2 [ main::i#2 main::idx#10 ] ) always clobbers reg byte a -Statement [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' [ main::idx#11 ] ( main:2 [ main::idx#11 ] ) always clobbers reg byte a -Statement [17] if((byte) 0==(word) main::i1#2) goto main::@8 [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a -Statement [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a -Statement [22] if((word) main::i1#1!=(byte) 3) goto main::@7 [ main::i1#1 main::idx#17 ] ( main:2 [ main::i1#1 main::idx#17 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] : zp ZP_WORD:4 , -Potential registers zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , +Statement [10] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) ' ' [ main::idx#10 ] ( main:2 [ main::idx#10 ] ) always clobbers reg byte a +Statement [14] if((word) main::i1#1!=(byte) 3) goto main::@7 [ main::idx#12 main::i1#1 ] ( main:2 [ main::idx#12 main::i1#1 ] ) always clobbers reg byte a +Statement [16] if((byte) 0==(word) main::i1#1) goto main::@8 [ main::idx#12 main::i1#1 ] ( main:2 [ main::idx#12 main::i1#1 ] ) always clobbers reg byte a +Statement [17] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' [ main::idx#12 main::i1#1 ] ( main:2 [ main::idx#12 main::i1#1 ] ) always clobbers reg byte a +Statement [20] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' [ main::idx#10 main::i#1 ] ( main:2 [ main::idx#10 main::i#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::idx#10 main::idx#4 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::i#5 main::i#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ main::idx#12 main::idx#6 main::idx#21 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:5 [ main::i1#5 main::i1#1 ] : zp ZP_WORD:5 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 52.33: zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] 45.92: zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] 23.1: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 23.1: zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] +Uplift Scope [main] 296: zp ZP_BYTE:3 [ main::i#5 main::i#1 ] 296: zp ZP_WORD:5 [ main::i1#5 main::i1#1 ] 73.4: zp ZP_BYTE:4 [ main::idx#12 main::idx#6 main::idx#21 ] 61.83: zp ZP_BYTE:2 [ main::idx#10 main::idx#4 ] Uplift Scope [] -Uplifting [main] best 1227 combination reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] -Uplifting [] best 1227 combination -Allocated (was zp ZP_WORD:4) zp ZP_WORD:2 [ main::i1#2 main::i1#1 ] +Uplifting [main] best 9462 combination reg byte y [ main::i#5 main::i#1 ] zp ZP_WORD:5 [ main::i1#5 main::i1#1 ] reg byte x [ main::idx#12 main::idx#6 main::idx#21 ] reg byte x [ main::idx#10 main::idx#4 ] +Uplifting [] best 9462 combination +Allocated (was zp ZP_WORD:5) zp ZP_WORD:2 [ main::i1#5 main::i1#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -617,70 +627,72 @@ main: { // [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' -- _deref_pbuc1=vbuc2 lda #' ' sta SCREEN+1 - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b3_from_b1: - // [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@3#0] -- vbuyy=vbuc1 - ldy #2 - // [7] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuxx=vbuc1 - ldx #0 - jmp b3 - // loop byte - // [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - b3_from_b4: - // [7] phi (byte) main::idx#10 = (byte) main::idx#11 [phi:main::@4->main::@3#0] -- register_copy - // [7] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#1] -- register_copy - jmp b3 - // main::@3 - b3: - // [8] if((byte) 0==(byte) main::i#2) goto main::@4 -- vbuc1_eq_vbuxx_then_la1 - cpx #0 - beq b4_from_b3 - jmp b5 - // main::@5 - b5: - // [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuyy=vbuc2 - lda #'+' - sta SCREEN,y - // [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuyy=_inc_vbuyy - iny - // [11] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] + // [7] phi from main::@1 to main::@4 [phi:main::@1->main::@4] + b4_from_b1: + // [7] phi (byte) main::i#5 = (byte) 0 [phi:main::@1->main::@4#0] -- vbuyy=vbuc1 + ldy #0 + // [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@4#1] -- vbuxx=vbuc1 + ldx #2 + jmp b4 + // [7] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] b4_from_b3: b4_from_b5: - // [11] phi (byte) main::idx#11 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#0] -- register_copy + // [7] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@3/main::@5->main::@4#0] -- register_copy + // [7] phi (byte) main::idx#10 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#1] -- register_copy jmp b4 // main::@4 b4: - // [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [13] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuxx_neq_vbuc1_then_la1 - cpx #3 - bne b3_from_b4 + // [8] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuyy=_inc_vbuyy + iny + // [9] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuyy_neq_vbuc1_then_la1 + cpy #3 + bne b3 jmp b6 // main::@6 b6: - // [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + // [10] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 lda #' ' - sta SCREEN,y - // [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 -- vbuyy=_inc_vbuyy - iny - // [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] - b7_from_b6: - // [16] phi (byte) main::idx#12 = (byte) main::idx#5 [phi:main::@6->main::@7#0] -- register_copy - // [16] phi (word) main::i1#2 = (word) 0 [phi:main::@6->main::@7#1] -- vwuz1=vwuc1 + sta SCREEN,x + // [11] (byte) main::idx#21 ← ++ (byte) main::idx#10 -- vbuxx=_inc_vbuxx + inx + // [12] phi from main::@6 to main::@8 [phi:main::@6->main::@8] + b8_from_b6: + // [12] phi (word) main::i1#5 = (word) 0 [phi:main::@6->main::@8#0] -- vwuz1=vwuc1 lda #<0 sta i1 lda #>0 sta i1+1 - jmp b7 + // [12] phi (byte) main::idx#12 = (byte) main::idx#21 [phi:main::@6->main::@8#1] -- register_copy + jmp b8 + // [12] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] + b8_from_b7: + b8_from_b9: + // [12] phi (word) main::i1#5 = (word) main::i1#1 [phi:main::@7/main::@9->main::@8#0] -- register_copy + // [12] phi (byte) main::idx#12 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#1] -- register_copy + jmp b8 + // main::@8 + b8: + // [13] (word) main::i1#1 ← ++ (word) main::i1#5 -- vwuz1=_inc_vwuz1 + inc i1 + bne !+ + inc i1+1 + !: + // [14] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 + lda i1+1 + cmp #>3 + bne b7 + lda i1 + cmp #<3 + bne b7 + jmp breturn + // main::@return + breturn: + // [15] return + rts // loop word - // [16] phi from main::@8 to main::@7 [phi:main::@8->main::@7] - b7_from_b8: - // [16] phi (byte) main::idx#12 = (byte) main::idx#17 [phi:main::@8->main::@7#0] -- register_copy - // [16] phi (word) main::i1#2 = (word) main::i1#1 [phi:main::@8->main::@7#1] -- register_copy - jmp b7 // main::@7 b7: - // [17] if((byte) 0==(word) main::i1#2) goto main::@8 -- vwuc1_eq_vwuz1_then_la1 + // [16] if((byte) 0==(word) main::i1#1) goto main::@8 -- vwuc1_eq_vwuz1_then_la1 lda i1 cmp #<0 bne !+ @@ -691,35 +703,27 @@ main: { jmp b9 // main::@9 b9: - // [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' -- pbuc1_derefidx_vbuyy=vbuc2 + // [17] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' -- pbuc1_derefidx_vbuxx=vbuc2 lda #'+' - sta SCREEN,y - // [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuyy=_inc_vbuyy - iny - // [20] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] - b8_from_b7: - b8_from_b9: - // [20] phi (byte) main::idx#17 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#0] -- register_copy - jmp b8 - // main::@8 - b8: - // [21] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 - inc i1 - bne !+ - inc i1+1 - !: - // [22] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 - lda i1+1 - cmp #>3 - bne b7_from_b8 - lda i1 - cmp #<3 - bne b7_from_b8 - jmp breturn - // main::@return - breturn: - // [23] return - rts + sta SCREEN,x + // [18] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuxx=_inc_vbuxx + inx + jmp b8_from_b9 + // loop byte + // main::@3 + b3: + // [19] if((byte) 0==(byte) main::i#1) goto main::@4 -- vbuc1_eq_vbuyy_then_la1 + cpy #0 + beq b4_from_b3 + jmp b5 + // main::@5 + b5: + // [20] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'+' + sta SCREEN,x + // [21] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuxx=_inc_vbuxx + inx + jmp b4_from_b5 } // File Data @@ -728,48 +732,43 @@ Removing instruction jmp b1 Removing instruction jmp bend Removing instruction jmp b2 Removing instruction jmp b1 -Removing instruction jmp b3 -Removing instruction jmp b5 Removing instruction jmp b4 Removing instruction jmp b6 -Removing instruction jmp b7 -Removing instruction jmp b9 Removing instruction jmp b8 Removing instruction jmp breturn +Removing instruction jmp b9 +Removing instruction jmp b5 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label b4_from_b3 with b4 -Replacing label b3_from_b4 with b3 Replacing label b8_from_b7 with b8 -Replacing label b7_from_b8 with b7 -Replacing label b7_from_b8 with b7 +Replacing label b8_from_b9 with b8 +Replacing label b4_from_b3 with b4 +Replacing label b4_from_b5 with b4 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b3_from_b4: Removing instruction b4_from_b3: Removing instruction b4_from_b5: -Removing instruction b7_from_b8: Removing instruction b8_from_b7: Removing instruction b8_from_b9: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction b2: Removing instruction b1: -Removing instruction b3_from_b1: -Removing instruction b5: +Removing instruction b4_from_b1: Removing instruction b6: -Removing instruction b7_from_b6: -Removing instruction b9: +Removing instruction b8_from_b6: Removing instruction breturn: +Removing instruction b9: +Removing instruction b5: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Removing instruction jmp b3 -Removing instruction jmp b7 +Removing instruction jmp b4 +Removing instruction jmp b8 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -792,28 +791,26 @@ FINAL SYMBOL TABLE (label) main::@9 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 6.6000000000000005 +(byte) main::i#1 reg byte y 83.0 +(byte) main::i#5 reg byte y 213.0 (word) main::i1 -(word) main::i1#1 i1 zp ZP_WORD:2 16.5 -(word) main::i1#2 i1 zp ZP_WORD:2 6.6000000000000005 +(word) main::i1#1 i1 zp ZP_WORD:2 83.0 +(word) main::i1#5 i1 zp ZP_WORD:2 213.0 (byte) main::idx -(byte) main::idx#10 reg byte y 14.666666666666666 -(byte) main::idx#11 reg byte y 9.25 -(byte) main::idx#12 reg byte y 15.333333333333332 -(byte) main::idx#17 reg byte y 11.0 -(byte) main::idx#4 reg byte y 22.0 -(byte) main::idx#5 reg byte y 4.0 -(byte) main::idx#6 reg byte y 22.0 +(byte) main::idx#10 reg byte x 39.83333333333334 +(byte) main::idx#12 reg byte x 47.400000000000006 +(byte) main::idx#21 reg byte x 4.0 +(byte) main::idx#4 reg byte x 22.0 +(byte) main::idx#6 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] -reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] -zp ZP_WORD:2 [ main::i1#2 main::i1#1 ] -reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +reg byte x [ main::idx#10 main::idx#4 ] +reg byte y [ main::i#5 main::i#1 ] +reg byte x [ main::idx#12 main::idx#6 main::idx#21 ] +zp ZP_WORD:2 [ main::i1#5 main::i1#1 ] FINAL ASSEMBLER -Score: 862 +Score: 6817 // File Comments // Tests using integer conditions in if() @@ -844,61 +841,63 @@ main: { // [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' -- _deref_pbuc1=vbuc2 lda #' ' sta SCREEN+1 - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - // [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@3#0] -- vbuyy=vbuc1 - ldy #2 - // [7] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuxx=vbuc1 - ldx #0 - // loop byte - // [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - // [7] phi (byte) main::idx#10 = (byte) main::idx#11 [phi:main::@4->main::@3#0] -- register_copy - // [7] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#1] -- register_copy - // main::@3 - b3: - // if(i) - // [8] if((byte) 0==(byte) main::i#2) goto main::@4 -- vbuc1_eq_vbuxx_then_la1 - cpx #0 - beq b4 - // main::@5 - // SCREEN[idx++] = '+' - // [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuyy=vbuc2 - lda #'+' - sta SCREEN,y - // SCREEN[idx++] = '+'; - // [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuyy=_inc_vbuyy - iny - // [11] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] - // [11] phi (byte) main::idx#11 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#0] -- register_copy + // [7] phi from main::@1 to main::@4 [phi:main::@1->main::@4] + // [7] phi (byte) main::i#5 = (byte) 0 [phi:main::@1->main::@4#0] -- vbuyy=vbuc1 + ldy #0 + // [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@4#1] -- vbuxx=vbuc1 + ldx #2 + // [7] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] + // [7] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@3/main::@5->main::@4#0] -- register_copy + // [7] phi (byte) main::idx#10 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#1] -- register_copy // main::@4 b4: // for( byte i:0..2) - // [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [13] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuxx_neq_vbuc1_then_la1 - cpx #3 + // [8] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuyy=_inc_vbuyy + iny + // [9] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuyy_neq_vbuc1_then_la1 + cpy #3 bne b3 // main::@6 // SCREEN[idx++] = ' ' - // [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + // [10] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 lda #' ' - sta SCREEN,y + sta SCREEN,x // SCREEN[idx++] = ' '; - // [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 -- vbuyy=_inc_vbuyy - iny - // [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] - // [16] phi (byte) main::idx#12 = (byte) main::idx#5 [phi:main::@6->main::@7#0] -- register_copy - // [16] phi (word) main::i1#2 = (word) 0 [phi:main::@6->main::@7#1] -- vwuz1=vwuc1 + // [11] (byte) main::idx#21 ← ++ (byte) main::idx#10 -- vbuxx=_inc_vbuxx + inx + // [12] phi from main::@6 to main::@8 [phi:main::@6->main::@8] + // [12] phi (word) main::i1#5 = (word) 0 [phi:main::@6->main::@8#0] -- vwuz1=vwuc1 lda #<0 sta i1 sta i1+1 + // [12] phi (byte) main::idx#12 = (byte) main::idx#21 [phi:main::@6->main::@8#1] -- register_copy + // [12] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] + // [12] phi (word) main::i1#5 = (word) main::i1#1 [phi:main::@7/main::@9->main::@8#0] -- register_copy + // [12] phi (byte) main::idx#12 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#1] -- register_copy + // main::@8 + b8: + // for( word i:0..2) + // [13] (word) main::i1#1 ← ++ (word) main::i1#5 -- vwuz1=_inc_vwuz1 + inc i1 + bne !+ + inc i1+1 + !: + // [14] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 + lda i1+1 + cmp #>3 + bne b7 + lda i1 + cmp #<3 + bne b7 + // main::@return + // } + // [15] return + rts // loop word - // [16] phi from main::@8 to main::@7 [phi:main::@8->main::@7] - // [16] phi (byte) main::idx#12 = (byte) main::idx#17 [phi:main::@8->main::@7#0] -- register_copy - // [16] phi (word) main::i1#2 = (word) main::i1#1 [phi:main::@8->main::@7#1] -- register_copy // main::@7 b7: // if(i) - // [17] if((byte) 0==(word) main::i1#2) goto main::@8 -- vwuc1_eq_vwuz1_then_la1 + // [16] if((byte) 0==(word) main::i1#1) goto main::@8 -- vwuc1_eq_vwuz1_then_la1 lda i1 cmp #<0 bne !+ @@ -908,33 +907,29 @@ main: { !: // main::@9 // SCREEN[idx++] = '+' - // [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' -- pbuc1_derefidx_vbuyy=vbuc2 + // [17] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' -- pbuc1_derefidx_vbuxx=vbuc2 lda #'+' - sta SCREEN,y + sta SCREEN,x // SCREEN[idx++] = '+'; - // [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuyy=_inc_vbuyy - iny - // [20] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] - // [20] phi (byte) main::idx#17 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#0] -- register_copy - // main::@8 - b8: - // for( word i:0..2) - // [21] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 - inc i1 - bne !+ - inc i1+1 - !: - // [22] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 - lda i1+1 - cmp #>3 - bne b7 - lda i1 - cmp #<3 - bne b7 - // main::@return - // } - // [23] return - rts + // [18] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuxx=_inc_vbuxx + inx + jmp b8 + // loop byte + // main::@3 + b3: + // if(i) + // [19] if((byte) 0==(byte) main::i#1) goto main::@4 -- vbuc1_eq_vbuyy_then_la1 + cpy #0 + beq b4 + // main::@5 + // SCREEN[idx++] = '+' + // [20] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'+' + sta SCREEN,x + // SCREEN[idx++] = '+'; + // [21] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuxx=_inc_vbuxx + inx + jmp b4 } // File Data diff --git a/src/test/ref/condition-integer-0.sym b/src/test/ref/condition-integer-0.sym index 1dd505468..820853e46 100644 --- a/src/test/ref/condition-integer-0.sym +++ b/src/test/ref/condition-integer-0.sym @@ -15,21 +15,19 @@ (label) main::@9 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 6.6000000000000005 +(byte) main::i#1 reg byte y 83.0 +(byte) main::i#5 reg byte y 213.0 (word) main::i1 -(word) main::i1#1 i1 zp ZP_WORD:2 16.5 -(word) main::i1#2 i1 zp ZP_WORD:2 6.6000000000000005 +(word) main::i1#1 i1 zp ZP_WORD:2 83.0 +(word) main::i1#5 i1 zp ZP_WORD:2 213.0 (byte) main::idx -(byte) main::idx#10 reg byte y 14.666666666666666 -(byte) main::idx#11 reg byte y 9.25 -(byte) main::idx#12 reg byte y 15.333333333333332 -(byte) main::idx#17 reg byte y 11.0 -(byte) main::idx#4 reg byte y 22.0 -(byte) main::idx#5 reg byte y 4.0 -(byte) main::idx#6 reg byte y 22.0 +(byte) main::idx#10 reg byte x 39.83333333333334 +(byte) main::idx#12 reg byte x 47.400000000000006 +(byte) main::idx#21 reg byte x 4.0 +(byte) main::idx#4 reg byte x 22.0 +(byte) main::idx#6 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] -reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] -zp ZP_WORD:2 [ main::i1#2 main::i1#1 ] -reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +reg byte x [ main::idx#10 main::idx#4 ] +reg byte y [ main::i#5 main::i#1 ] +reg byte x [ main::idx#12 main::idx#6 main::idx#21 ] +zp ZP_WORD:2 [ main::i1#5 main::i1#1 ] diff --git a/src/test/ref/condition-integer-1.asm b/src/test/ref/condition-integer-1.asm index 7e6ce3b29..85f7f52ea 100644 --- a/src/test/ref/condition-integer-1.asm +++ b/src/test/ref/condition-integer-1.asm @@ -10,36 +10,26 @@ main: { sta SCREEN lda #' ' sta SCREEN+1 - ldy #2 - ldx #0 - // loop byte - b3: - cpx #0 - bne b4 + ldx #2 + ldy #0 + b5: lda #'0' - sta SCREEN,y - iny - b4: + sta SCREEN,x inx - cpx #3 + b4: + iny + cpy #3 bne b3 lda #' ' - sta SCREEN,y - iny + sta SCREEN,x + inx lda #<0 sta i1 sta i1+1 - // loop word - b7: - lda i1+1 - cmp #>0 - bne b8 - lda i1 - cmp #<0 - bne b8 + b9: lda #'0' - sta SCREEN,y - iny + sta SCREEN,x + inx b8: inc i1 bne !+ @@ -52,4 +42,18 @@ main: { cmp #<3 bne b7 rts + // loop word + b7: + lda i1+1 + cmp #>0 + bne b8 + lda i1 + cmp #<0 + bne b8 + jmp b9 + // loop byte + b3: + cpy #0 + bne b4 + jmp b5 } diff --git a/src/test/ref/condition-integer-1.cfg b/src/test/ref/condition-integer-1.cfg index c5cd311fd..4db739498 100644 --- a/src/test/ref/condition-integer-1.cfg +++ b/src/test/ref/condition-integer-1.cfg @@ -15,39 +15,39 @@ main::@2: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@2 [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' - to:main::@3 -main::@3: scope:[main] from main::@1 main::@4 - [7] (byte) main::idx#10 ← phi( main::@1/(byte) 2 main::@4/(byte) main::idx#11 ) - [7] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::i#1 ) - [8] if((byte) 0!=(byte) main::i#2) goto main::@4 to:main::@5 -main::@5: scope:[main] from main::@3 - [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' - [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 +main::@5: scope:[main] from main::@1 main::@3 + [7] (byte) main::idx#18 ← phi( main::@3/(byte) main::idx#4 main::@1/(byte) 2 ) + [7] (byte) main::i#6 ← phi( main::@3/(byte) main::i#1 main::@1/(byte) 0 ) + [8] *((const byte*) SCREEN#0 + (byte) main::idx#18) ← (byte) '0' + [9] (byte) main::idx#4 ← ++ (byte) main::idx#18 to:main::@4 main::@4: scope:[main] from main::@3 main::@5 - [11] (byte) main::idx#11 ← phi( main::@3/(byte) main::idx#10 main::@5/(byte) main::idx#4 ) - [12] (byte) main::i#1 ← ++ (byte) main::i#2 - [13] if((byte) main::i#1!=(byte) 3) goto main::@3 + [10] (byte) main::i#5 ← phi( main::@3/(byte) main::i#1 main::@5/(byte) main::i#6 ) + [11] (byte) main::i#1 ← ++ (byte) main::i#5 + [12] if((byte) main::i#1!=(byte) 3) goto main::@3 to:main::@6 main::@6: scope:[main] from main::@4 - [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' - [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 - to:main::@7 -main::@7: scope:[main] from main::@6 main::@8 - [16] (byte) main::idx#12 ← phi( main::@8/(byte) main::idx#17 main::@6/(byte) main::idx#5 ) - [16] (word) main::i1#2 ← phi( main::@8/(word) main::i1#1 main::@6/(word) 0 ) - [17] if((byte) 0!=(word) main::i1#2) goto main::@8 + [13] *((const byte*) SCREEN#0 + (byte) main::idx#4) ← (byte) ' ' + [14] (byte) main::idx#21 ← ++ (byte) main::idx#4 to:main::@9 -main::@9: scope:[main] from main::@7 - [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' - [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 +main::@9: scope:[main] from main::@6 main::@7 + [15] (byte) main::idx#20 ← phi( main::@7/(byte) main::idx#6 main::@6/(byte) main::idx#21 ) + [15] (word) main::i1#6 ← phi( main::@7/(word) main::i1#1 main::@6/(word) 0 ) + [16] *((const byte*) SCREEN#0 + (byte) main::idx#20) ← (byte) '0' + [17] (byte) main::idx#6 ← ++ (byte) main::idx#20 to:main::@8 main::@8: scope:[main] from main::@7 main::@9 - [20] (byte) main::idx#17 ← phi( main::@9/(byte) main::idx#6 main::@7/(byte) main::idx#12 ) - [21] (word) main::i1#1 ← ++ (word) main::i1#2 - [22] if((word) main::i1#1!=(byte) 3) goto main::@7 + [18] (word) main::i1#5 ← phi( main::@9/(word) main::i1#6 main::@7/(word) main::i1#1 ) + [19] (word) main::i1#1 ← ++ (word) main::i1#5 + [20] if((word) main::i1#1!=(byte) 3) goto main::@7 to:main::@return main::@return: scope:[main] from main::@8 - [23] return + [21] return to:@return +main::@7: scope:[main] from main::@8 + [22] if((byte) 0!=(word) main::i1#1) goto main::@8 + to:main::@9 +main::@3: scope:[main] from main::@4 + [23] if((byte) 0!=(byte) main::i#1) goto main::@4 + to:main::@5 diff --git a/src/test/ref/condition-integer-1.log b/src/test/ref/condition-integer-1.log index fdd1f94dc..23f4d9177 100644 --- a/src/test/ref/condition-integer-1.log +++ b/src/test/ref/condition-integer-1.log @@ -214,6 +214,8 @@ Eliminating variable (byte) main::idx#3 from unused block main::@4 Removing PHI-reference to removed block (main::@4) in block main::@2 Removing unused block main::@4 Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 3 in if((byte) main::i#1!=(number) 3) goto main::@5 Adding number conversion cast (unumber) 3 in if((word) main::i1#1!=(number) 3) goto main::@9 Successful SSA optimization PassNAddNumberTypeConversions @@ -224,25 +226,44 @@ Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 3 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::idx#1 = (byte) main::idx#13 (byte) main::idx#8 +Alias (byte) main::i#1 = (byte) main::i#2 +Alias (byte) main::idx#10 = (byte) main::idx#11 +Alias (word) main::i1#1 = (word) main::i1#2 +Alias (byte) main::idx#12 = (byte) main::idx#17 +Alias (byte) main::idx#19 = (byte) main::idx#2 +Alias (byte) main::idx#21 = (byte) main::idx#5 Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#7 (const byte) main::i#0 +Identical Phi Values (word) main::i1#7 (const word) main::i1#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [2] (byte) main::idx#1 ← ++ (const byte) main::idx#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#1 = ++main::idx#0 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [2] (byte) main::idx#2 ← ++ (const byte) main::idx#1 +Removing PHI-reference to removed block (main::@5_1) in block main::@6 +Removing PHI-reference to removed block (main::@5_1) in block main::@6 +if() condition always false - eliminating [27] if((byte) 0!=(const byte) main::i#0) goto main::@6 +Removing PHI-reference to removed block (main::@9_1) in block main::@10 +Removing PHI-reference to removed block (main::@9_1) in block main::@10 +if() condition always false - eliminating [29] if((byte) 0!=(const word) main::i1#0) goto main::@10 +Successful SSA optimization Pass2ConstantIfs +Identical Phi Values (byte) main::idx#10 (byte) main::idx#4 +Identical Phi Values (byte) main::idx#12 (byte) main::idx#6 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [2] (byte) main::idx#19 ← ++ (const byte) main::idx#1 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::idx#2 = ++main::idx#1 +Constant (const byte) main::idx#19 = ++main::idx#1 Successful SSA optimization Pass2ConstantIdentification Inlining constant with var siblings (const byte) main::idx#0 Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const word) main::i1#0 Inlining constant with var siblings (const byte) main::idx#1 -Inlining constant with var siblings (const byte) main::idx#2 +Inlining constant with var siblings (const byte) main::idx#19 Constant inlined main::i#0 = (byte) 0 Constant inlined main::i1#0 = (word) 0 Constant inlined main::idx#0 = (byte) 0 Constant inlined main::idx#1 = ++(byte) 0 -Constant inlined main::idx#2 = ++++(byte) 0 +Constant inlined main::idx#19 = ++++(byte) 0 Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in *(SCREEN#0+++0) Successful SSA optimization Pass2ConstantAdditionElimination @@ -251,36 +272,39 @@ Simplifying constant integer increment ++0 Successful SSA optimization Pass2ConstantSimplification Simplifying constant integer increment ++1 Successful SSA optimization Pass2ConstantSimplification -Added new block during phi lifting main::@13(between main::@6 and main::@5) -Added new block during phi lifting main::@14(between main::@5 and main::@6) -Added new block during phi lifting main::@15(between main::@10 and main::@9) -Added new block during phi lifting main::@16(between main::@9 and main::@10) +Added new block during phi lifting main::@13(between main::@5 and main::@6) +Added new block during phi lifting main::@14(between main::@5 and main::@7) +Added new block during phi lifting main::@15(between main::@9 and main::@10) +Added new block during phi lifting main::@16(between main::@9 and main::@11) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@5_1 CALL GRAPH Calls in [] to main:2 Created 6 initial phi equivalence classes -Coalesced [13] main::idx#20 ← main::idx#4 -Coalesced [19] main::idx#22 ← main::idx#5 -Coalesced [24] main::idx#23 ← main::idx#6 -Coalesced [29] main::i1#5 ← main::i1#1 -Coalesced [30] main::idx#21 ← main::idx#17 -Coalesced (already) [31] main::idx#24 ← main::idx#12 -Coalesced [32] main::i#5 ← main::i#1 -Coalesced [33] main::idx#18 ← main::idx#11 -Coalesced (already) [34] main::idx#19 ← main::idx#10 +Coalesced [13] main::i#9 ← main::i#6 +Coalesced [19] main::idx#24 ← main::idx#21 +Coalesced [23] main::i1#8 ← main::i1#6 +Coalesced [29] main::i1#10 ← main::i1#1 +Coalesced [30] main::idx#23 ← main::idx#6 +Coalesced (already) [31] main::i1#9 ← main::i1#1 +Coalesced [33] main::i#10 ← main::i#1 +Coalesced [34] main::idx#22 ← main::idx#4 +Coalesced (already) [35] main::i#8 ← main::i#1 Coalesced down to 4 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) main::@1 -Culled Empty Block (label) main::@15 +Culled Empty Block (label) main::@5_1 +Culled Empty Block (label) main::@9_1 Culled Empty Block (label) main::@16 -Culled Empty Block (label) main::@13 +Culled Empty Block (label) main::@15 Culled Empty Block (label) main::@14 +Culled Empty Block (label) main::@13 Renumbering block main::@2 to main::@1 Renumbering block main::@3 to main::@2 Renumbering block main::@5 to main::@3 @@ -313,76 +337,76 @@ main::@2: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@2 [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' - to:main::@3 -main::@3: scope:[main] from main::@1 main::@4 - [7] (byte) main::idx#10 ← phi( main::@1/(byte) 2 main::@4/(byte) main::idx#11 ) - [7] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::i#1 ) - [8] if((byte) 0!=(byte) main::i#2) goto main::@4 to:main::@5 -main::@5: scope:[main] from main::@3 - [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' - [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 +main::@5: scope:[main] from main::@1 main::@3 + [7] (byte) main::idx#18 ← phi( main::@3/(byte) main::idx#4 main::@1/(byte) 2 ) + [7] (byte) main::i#6 ← phi( main::@3/(byte) main::i#1 main::@1/(byte) 0 ) + [8] *((const byte*) SCREEN#0 + (byte) main::idx#18) ← (byte) '0' + [9] (byte) main::idx#4 ← ++ (byte) main::idx#18 to:main::@4 main::@4: scope:[main] from main::@3 main::@5 - [11] (byte) main::idx#11 ← phi( main::@3/(byte) main::idx#10 main::@5/(byte) main::idx#4 ) - [12] (byte) main::i#1 ← ++ (byte) main::i#2 - [13] if((byte) main::i#1!=(byte) 3) goto main::@3 + [10] (byte) main::i#5 ← phi( main::@3/(byte) main::i#1 main::@5/(byte) main::i#6 ) + [11] (byte) main::i#1 ← ++ (byte) main::i#5 + [12] if((byte) main::i#1!=(byte) 3) goto main::@3 to:main::@6 main::@6: scope:[main] from main::@4 - [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' - [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 - to:main::@7 -main::@7: scope:[main] from main::@6 main::@8 - [16] (byte) main::idx#12 ← phi( main::@8/(byte) main::idx#17 main::@6/(byte) main::idx#5 ) - [16] (word) main::i1#2 ← phi( main::@8/(word) main::i1#1 main::@6/(word) 0 ) - [17] if((byte) 0!=(word) main::i1#2) goto main::@8 + [13] *((const byte*) SCREEN#0 + (byte) main::idx#4) ← (byte) ' ' + [14] (byte) main::idx#21 ← ++ (byte) main::idx#4 to:main::@9 -main::@9: scope:[main] from main::@7 - [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' - [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 +main::@9: scope:[main] from main::@6 main::@7 + [15] (byte) main::idx#20 ← phi( main::@7/(byte) main::idx#6 main::@6/(byte) main::idx#21 ) + [15] (word) main::i1#6 ← phi( main::@7/(word) main::i1#1 main::@6/(word) 0 ) + [16] *((const byte*) SCREEN#0 + (byte) main::idx#20) ← (byte) '0' + [17] (byte) main::idx#6 ← ++ (byte) main::idx#20 to:main::@8 main::@8: scope:[main] from main::@7 main::@9 - [20] (byte) main::idx#17 ← phi( main::@9/(byte) main::idx#6 main::@7/(byte) main::idx#12 ) - [21] (word) main::i1#1 ← ++ (word) main::i1#2 - [22] if((word) main::i1#1!=(byte) 3) goto main::@7 + [18] (word) main::i1#5 ← phi( main::@9/(word) main::i1#6 main::@7/(word) main::i1#1 ) + [19] (word) main::i1#1 ← ++ (word) main::i1#5 + [20] if((word) main::i1#1!=(byte) 3) goto main::@7 to:main::@return main::@return: scope:[main] from main::@8 - [23] return + [21] return to:@return +main::@7: scope:[main] from main::@8 + [22] if((byte) 0!=(word) main::i1#1) goto main::@8 + to:main::@9 +main::@3: scope:[main] from main::@4 + [23] if((byte) 0!=(byte) main::i#1) goto main::@4 + to:main::@5 VARIABLE REGISTER WEIGHTS (byte*) SCREEN (void()) main() (byte) main::i -(byte) main::i#1 16.5 -(byte) main::i#2 6.6000000000000005 +(byte) main::i#1 168.33333333333331 +(byte) main::i#5 213.0 +(byte) main::i#6 37.33333333333333 (word) main::i1 -(word) main::i1#1 16.5 -(word) main::i1#2 6.6000000000000005 +(word) main::i1#1 168.33333333333331 +(word) main::i1#5 213.0 +(word) main::i1#6 37.33333333333333 (byte) main::idx -(byte) main::idx#10 14.666666666666666 -(byte) main::idx#11 9.25 -(byte) main::idx#12 15.333333333333332 -(byte) main::idx#17 11.0 -(byte) main::idx#4 22.0 -(byte) main::idx#5 4.0 -(byte) main::idx#6 22.0 +(byte) main::idx#18 61.5 +(byte) main::idx#20 62.5 +(byte) main::idx#21 4.0 +(byte) main::idx#4 19.33333333333333 +(byte) main::idx#6 22.4 Initial phi equivalence classes -[ main::i#2 main::i#1 ] -[ main::idx#10 main::idx#11 main::idx#4 ] -[ main::i1#2 main::i1#1 ] -[ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +[ main::idx#18 main::idx#4 ] +[ main::i#5 main::i#6 main::i#1 ] +[ main::idx#20 main::idx#6 main::idx#21 ] +[ main::i1#5 main::i1#6 main::i1#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ main::idx#10 main::idx#11 main::idx#4 ] -[ main::i1#2 main::i1#1 ] -[ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] -Allocated zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] -Allocated zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +[ main::idx#18 main::idx#4 ] +[ main::i#5 main::i#6 main::i#1 ] +[ main::idx#20 main::idx#6 main::idx#21 ] +[ main::i1#5 main::i1#6 main::i1#1 ] +Allocated zp ZP_BYTE:2 [ main::idx#18 main::idx#4 ] +Allocated zp ZP_BYTE:3 [ main::i#5 main::i#6 main::i#1 ] +Allocated zp ZP_BYTE:4 [ main::idx#20 main::idx#6 main::idx#21 ] +Allocated zp ZP_WORD:5 [ main::i1#5 main::i1#6 main::i1#1 ] INITIAL ASM Target platform is c64basic @@ -413,13 +437,12 @@ bend_from_b1: bend: // main main: { - .label i = 2 - .label idx = 3 - .label idx_5 = 6 - .label i1 = 4 - .label idx_6 = 6 - .label idx_12 = 6 - .label idx_17 = 6 + .label i = 3 + .label idx = 2 + .label i1 = 5 + .label idx_6 = 4 + .label idx_20 = 4 + .label idx_21 = 4 jmp b2 // main::@2 b2: @@ -432,150 +455,148 @@ main: { // [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' -- _deref_pbuc1=vbuc2 lda #' ' sta SCREEN+1 - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b3_from_b1: - // [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + // [7] phi from main::@1 to main::@5 [phi:main::@1->main::@5] + b5_from_b1: + // [7] phi (byte) main::idx#18 = (byte) 2 [phi:main::@1->main::@5#0] -- vbuz1=vbuc1 lda #2 sta idx - // [7] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuz1=vbuc1 + // [7] phi (byte) main::i#6 = (byte) 0 [phi:main::@1->main::@5#1] -- vbuz1=vbuc1 lda #0 sta i - jmp b3 - // loop byte - // [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - b3_from_b4: - // [7] phi (byte) main::idx#10 = (byte) main::idx#11 [phi:main::@4->main::@3#0] -- register_copy - // [7] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#1] -- register_copy - jmp b3 - // main::@3 - b3: - // [8] if((byte) 0!=(byte) main::i#2) goto main::@4 -- vbuc1_neq_vbuz1_then_la1 - lda #0 - cmp i - bne b4_from_b3 jmp b5 // main::@5 b5: - // [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' -- pbuc1_derefidx_vbuz1=vbuc2 + // [8] *((const byte*) SCREEN#0 + (byte) main::idx#18) ← (byte) '0' -- pbuc1_derefidx_vbuz1=vbuc2 lda #'0' ldy idx sta SCREEN,y - // [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuz1=_inc_vbuz1 + // [9] (byte) main::idx#4 ← ++ (byte) main::idx#18 -- vbuz1=_inc_vbuz1 inc idx - // [11] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] + // [10] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] b4_from_b3: b4_from_b5: - // [11] phi (byte) main::idx#11 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#0] -- register_copy + // [10] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@3/main::@5->main::@4#0] -- register_copy jmp b4 // main::@4 b4: - // [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [11] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuz1=_inc_vbuz1 inc i - // [13] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 + // [12] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 lda #3 cmp i - bne b3_from_b4 + bne b3 jmp b6 // main::@6 b6: - // [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 + // [13] *((const byte*) SCREEN#0 + (byte) main::idx#4) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 lda #' ' ldy idx sta SCREEN,y - // [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 -- vbuz1=_inc_vbuz2 + // [14] (byte) main::idx#21 ← ++ (byte) main::idx#4 -- vbuz1=_inc_vbuz2 ldy idx iny - sty idx_5 - // [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] - b7_from_b6: - // [16] phi (byte) main::idx#12 = (byte) main::idx#5 [phi:main::@6->main::@7#0] -- register_copy - // [16] phi (word) main::i1#2 = (word) 0 [phi:main::@6->main::@7#1] -- vwuz1=vwuc1 + sty idx_21 + // [15] phi from main::@6 to main::@9 [phi:main::@6->main::@9] + b9_from_b6: + // [15] phi (byte) main::idx#20 = (byte) main::idx#21 [phi:main::@6->main::@9#0] -- register_copy + // [15] phi (word) main::i1#6 = (word) 0 [phi:main::@6->main::@9#1] -- vwuz1=vwuc1 lda #<0 sta i1 lda #>0 sta i1+1 - jmp b7 + jmp b9 + // main::@9 + b9: + // [16] *((const byte*) SCREEN#0 + (byte) main::idx#20) ← (byte) '0' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'0' + ldy idx_20 + sta SCREEN,y + // [17] (byte) main::idx#6 ← ++ (byte) main::idx#20 -- vbuz1=_inc_vbuz1 + inc idx_6 + // [18] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] + b8_from_b7: + b8_from_b9: + // [18] phi (word) main::i1#5 = (word) main::i1#1 [phi:main::@7/main::@9->main::@8#0] -- register_copy + jmp b8 + // main::@8 + b8: + // [19] (word) main::i1#1 ← ++ (word) main::i1#5 -- vwuz1=_inc_vwuz1 + inc i1 + bne !+ + inc i1+1 + !: + // [20] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 + lda i1+1 + cmp #>3 + bne b7 + lda i1 + cmp #<3 + bne b7 + jmp breturn + // main::@return + breturn: + // [21] return + rts // loop word - // [16] phi from main::@8 to main::@7 [phi:main::@8->main::@7] - b7_from_b8: - // [16] phi (byte) main::idx#12 = (byte) main::idx#17 [phi:main::@8->main::@7#0] -- register_copy - // [16] phi (word) main::i1#2 = (word) main::i1#1 [phi:main::@8->main::@7#1] -- register_copy - jmp b7 // main::@7 b7: - // [17] if((byte) 0!=(word) main::i1#2) goto main::@8 -- vwuc1_neq_vwuz1_then_la1 + // [22] if((byte) 0!=(word) main::i1#1) goto main::@8 -- vwuc1_neq_vwuz1_then_la1 lda i1+1 cmp #>0 bne b8_from_b7 lda i1 cmp #<0 bne b8_from_b7 + // [15] phi from main::@7 to main::@9 [phi:main::@7->main::@9] + b9_from_b7: + // [15] phi (byte) main::idx#20 = (byte) main::idx#6 [phi:main::@7->main::@9#0] -- register_copy + // [15] phi (word) main::i1#6 = (word) main::i1#1 [phi:main::@7->main::@9#1] -- register_copy jmp b9 - // main::@9 - b9: - // [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' -- pbuc1_derefidx_vbuz1=vbuc2 - lda #'0' - ldy idx_12 - sta SCREEN,y - // [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuz1=_inc_vbuz1 - inc idx_6 - // [20] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] - b8_from_b7: - b8_from_b9: - // [20] phi (byte) main::idx#17 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#0] -- register_copy - jmp b8 - // main::@8 - b8: - // [21] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 - inc i1 - bne !+ - inc i1+1 - !: - // [22] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 - lda i1+1 - cmp #>3 - bne b7_from_b8 - lda i1 - cmp #<3 - bne b7_from_b8 - jmp breturn - // main::@return - breturn: - // [23] return - rts + // loop byte + // main::@3 + b3: + // [23] if((byte) 0!=(byte) main::i#1) goto main::@4 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp i + bne b4_from_b3 + // [7] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + b5_from_b3: + // [7] phi (byte) main::idx#18 = (byte) main::idx#4 [phi:main::@3->main::@5#0] -- register_copy + // [7] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@3->main::@5#1] -- register_copy + jmp b5 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS Statement [5] *((const byte*) SCREEN#0) ← (byte) '0' [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' [ main::i#2 main::idx#10 ] ( main:2 [ main::i#2 main::idx#10 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] -Statement [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' [ main::idx#11 ] ( main:2 [ main::idx#11 ] ) always clobbers reg byte a -Statement [17] if((byte) 0!=(word) main::i1#2) goto main::@8 [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] -Statement [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a -Statement [22] if((word) main::i1#1!=(byte) 3) goto main::@7 [ main::i1#1 main::idx#17 ] ( main:2 [ main::i1#1 main::idx#17 ] ) always clobbers reg byte a +Statement [8] *((const byte*) SCREEN#0 + (byte) main::idx#18) ← (byte) '0' [ main::i#6 main::idx#18 ] ( main:2 [ main::i#6 main::idx#18 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::i#5 main::i#6 main::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::idx#18 main::idx#4 ] +Statement [13] *((const byte*) SCREEN#0 + (byte) main::idx#4) ← (byte) ' ' [ main::idx#4 ] ( main:2 [ main::idx#4 ] ) always clobbers reg byte a +Statement [16] *((const byte*) SCREEN#0 + (byte) main::idx#20) ← (byte) '0' [ main::i1#6 main::idx#20 ] ( main:2 [ main::i1#6 main::idx#20 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::idx#20 main::idx#6 main::idx#21 ] +Statement [20] if((word) main::i1#1!=(byte) 3) goto main::@7 [ main::i1#1 main::idx#6 ] ( main:2 [ main::i1#1 main::idx#6 ] ) always clobbers reg byte a +Statement [22] if((byte) 0!=(word) main::i1#1) goto main::@8 [ main::i1#1 main::idx#6 ] ( main:2 [ main::i1#1 main::idx#6 ] ) always clobbers reg byte a Statement [5] *((const byte*) SCREEN#0) ← (byte) '0' [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' [ main::i#2 main::idx#10 ] ( main:2 [ main::i#2 main::idx#10 ] ) always clobbers reg byte a -Statement [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' [ main::idx#11 ] ( main:2 [ main::idx#11 ] ) always clobbers reg byte a -Statement [17] if((byte) 0!=(word) main::i1#2) goto main::@8 [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a -Statement [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a -Statement [22] if((word) main::i1#1!=(byte) 3) goto main::@7 [ main::i1#1 main::idx#17 ] ( main:2 [ main::i1#1 main::idx#17 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] : zp ZP_WORD:4 , -Potential registers zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , +Statement [8] *((const byte*) SCREEN#0 + (byte) main::idx#18) ← (byte) '0' [ main::i#6 main::idx#18 ] ( main:2 [ main::i#6 main::idx#18 ] ) always clobbers reg byte a +Statement [13] *((const byte*) SCREEN#0 + (byte) main::idx#4) ← (byte) ' ' [ main::idx#4 ] ( main:2 [ main::idx#4 ] ) always clobbers reg byte a +Statement [16] *((const byte*) SCREEN#0 + (byte) main::idx#20) ← (byte) '0' [ main::i1#6 main::idx#20 ] ( main:2 [ main::i1#6 main::idx#20 ] ) always clobbers reg byte a +Statement [20] if((word) main::i1#1!=(byte) 3) goto main::@7 [ main::i1#1 main::idx#6 ] ( main:2 [ main::i1#1 main::idx#6 ] ) always clobbers reg byte a +Statement [22] if((byte) 0!=(word) main::i1#1) goto main::@8 [ main::i1#1 main::idx#6 ] ( main:2 [ main::i1#1 main::idx#6 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::idx#18 main::idx#4 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::i#5 main::i#6 main::i#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ main::idx#20 main::idx#6 main::idx#21 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:5 [ main::i1#5 main::i1#6 main::i1#1 ] : zp ZP_WORD:5 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 52.33: zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] 45.92: zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] 23.1: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 23.1: zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] +Uplift Scope [main] 418.67: zp ZP_BYTE:3 [ main::i#5 main::i#6 main::i#1 ] 418.67: zp ZP_WORD:5 [ main::i1#5 main::i1#6 main::i1#1 ] 88.9: zp ZP_BYTE:4 [ main::idx#20 main::idx#6 main::idx#21 ] 80.83: zp ZP_BYTE:2 [ main::idx#18 main::idx#4 ] Uplift Scope [] -Uplifting [main] best 1227 combination reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] -Uplifting [] best 1227 combination -Allocated (was zp ZP_WORD:4) zp ZP_WORD:2 [ main::i1#2 main::i1#1 ] +Uplifting [main] best 7062 combination reg byte y [ main::i#5 main::i#6 main::i#1 ] zp ZP_WORD:5 [ main::i1#5 main::i1#6 main::i1#1 ] reg byte x [ main::idx#20 main::idx#6 main::idx#21 ] reg byte x [ main::idx#18 main::idx#4 ] +Uplifting [] best 7062 combination +Allocated (was zp ZP_WORD:5) zp ZP_WORD:2 [ main::i1#5 main::i1#6 main::i1#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -618,108 +639,106 @@ main: { // [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' -- _deref_pbuc1=vbuc2 lda #' ' sta SCREEN+1 - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b3_from_b1: - // [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@3#0] -- vbuyy=vbuc1 - ldy #2 - // [7] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuxx=vbuc1 - ldx #0 - jmp b3 - // loop byte - // [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - b3_from_b4: - // [7] phi (byte) main::idx#10 = (byte) main::idx#11 [phi:main::@4->main::@3#0] -- register_copy - // [7] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#1] -- register_copy - jmp b3 - // main::@3 - b3: - // [8] if((byte) 0!=(byte) main::i#2) goto main::@4 -- vbuc1_neq_vbuxx_then_la1 - cpx #0 - bne b4_from_b3 + // [7] phi from main::@1 to main::@5 [phi:main::@1->main::@5] + b5_from_b1: + // [7] phi (byte) main::idx#18 = (byte) 2 [phi:main::@1->main::@5#0] -- vbuxx=vbuc1 + ldx #2 + // [7] phi (byte) main::i#6 = (byte) 0 [phi:main::@1->main::@5#1] -- vbuyy=vbuc1 + ldy #0 jmp b5 // main::@5 b5: - // [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' -- pbuc1_derefidx_vbuyy=vbuc2 + // [8] *((const byte*) SCREEN#0 + (byte) main::idx#18) ← (byte) '0' -- pbuc1_derefidx_vbuxx=vbuc2 lda #'0' - sta SCREEN,y - // [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuyy=_inc_vbuyy - iny - // [11] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] + sta SCREEN,x + // [9] (byte) main::idx#4 ← ++ (byte) main::idx#18 -- vbuxx=_inc_vbuxx + inx + // [10] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] b4_from_b3: b4_from_b5: - // [11] phi (byte) main::idx#11 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#0] -- register_copy + // [10] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@3/main::@5->main::@4#0] -- register_copy jmp b4 // main::@4 b4: - // [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [13] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuxx_neq_vbuc1_then_la1 - cpx #3 - bne b3_from_b4 + // [11] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuyy=_inc_vbuyy + iny + // [12] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuyy_neq_vbuc1_then_la1 + cpy #3 + bne b3 jmp b6 // main::@6 b6: - // [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + // [13] *((const byte*) SCREEN#0 + (byte) main::idx#4) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 lda #' ' - sta SCREEN,y - // [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 -- vbuyy=_inc_vbuyy - iny - // [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] - b7_from_b6: - // [16] phi (byte) main::idx#12 = (byte) main::idx#5 [phi:main::@6->main::@7#0] -- register_copy - // [16] phi (word) main::i1#2 = (word) 0 [phi:main::@6->main::@7#1] -- vwuz1=vwuc1 + sta SCREEN,x + // [14] (byte) main::idx#21 ← ++ (byte) main::idx#4 -- vbuxx=_inc_vbuxx + inx + // [15] phi from main::@6 to main::@9 [phi:main::@6->main::@9] + b9_from_b6: + // [15] phi (byte) main::idx#20 = (byte) main::idx#21 [phi:main::@6->main::@9#0] -- register_copy + // [15] phi (word) main::i1#6 = (word) 0 [phi:main::@6->main::@9#1] -- vwuz1=vwuc1 lda #<0 sta i1 lda #>0 sta i1+1 - jmp b7 + jmp b9 + // main::@9 + b9: + // [16] *((const byte*) SCREEN#0 + (byte) main::idx#20) ← (byte) '0' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'0' + sta SCREEN,x + // [17] (byte) main::idx#6 ← ++ (byte) main::idx#20 -- vbuxx=_inc_vbuxx + inx + // [18] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] + b8_from_b7: + b8_from_b9: + // [18] phi (word) main::i1#5 = (word) main::i1#1 [phi:main::@7/main::@9->main::@8#0] -- register_copy + jmp b8 + // main::@8 + b8: + // [19] (word) main::i1#1 ← ++ (word) main::i1#5 -- vwuz1=_inc_vwuz1 + inc i1 + bne !+ + inc i1+1 + !: + // [20] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 + lda i1+1 + cmp #>3 + bne b7 + lda i1 + cmp #<3 + bne b7 + jmp breturn + // main::@return + breturn: + // [21] return + rts // loop word - // [16] phi from main::@8 to main::@7 [phi:main::@8->main::@7] - b7_from_b8: - // [16] phi (byte) main::idx#12 = (byte) main::idx#17 [phi:main::@8->main::@7#0] -- register_copy - // [16] phi (word) main::i1#2 = (word) main::i1#1 [phi:main::@8->main::@7#1] -- register_copy - jmp b7 // main::@7 b7: - // [17] if((byte) 0!=(word) main::i1#2) goto main::@8 -- vwuc1_neq_vwuz1_then_la1 + // [22] if((byte) 0!=(word) main::i1#1) goto main::@8 -- vwuc1_neq_vwuz1_then_la1 lda i1+1 cmp #>0 bne b8_from_b7 lda i1 cmp #<0 bne b8_from_b7 + // [15] phi from main::@7 to main::@9 [phi:main::@7->main::@9] + b9_from_b7: + // [15] phi (byte) main::idx#20 = (byte) main::idx#6 [phi:main::@7->main::@9#0] -- register_copy + // [15] phi (word) main::i1#6 = (word) main::i1#1 [phi:main::@7->main::@9#1] -- register_copy jmp b9 - // main::@9 - b9: - // [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' -- pbuc1_derefidx_vbuyy=vbuc2 - lda #'0' - sta SCREEN,y - // [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuyy=_inc_vbuyy - iny - // [20] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] - b8_from_b7: - b8_from_b9: - // [20] phi (byte) main::idx#17 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#0] -- register_copy - jmp b8 - // main::@8 - b8: - // [21] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 - inc i1 - bne !+ - inc i1+1 - !: - // [22] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 - lda i1+1 - cmp #>3 - bne b7_from_b8 - lda i1 - cmp #<3 - bne b7_from_b8 - jmp breturn - // main::@return - breturn: - // [23] return - rts + // loop byte + // main::@3 + b3: + // [23] if((byte) 0!=(byte) main::i#1) goto main::@4 -- vbuc1_neq_vbuyy_then_la1 + cpy #0 + bne b4_from_b3 + // [7] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + b5_from_b3: + // [7] phi (byte) main::idx#18 = (byte) main::idx#4 [phi:main::@3->main::@5#0] -- register_copy + // [7] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@3->main::@5#1] -- register_copy + jmp b5 } // File Data @@ -728,50 +747,40 @@ Removing instruction jmp b1 Removing instruction jmp bend Removing instruction jmp b2 Removing instruction jmp b1 -Removing instruction jmp b3 Removing instruction jmp b5 Removing instruction jmp b4 Removing instruction jmp b6 -Removing instruction jmp b7 Removing instruction jmp b9 Removing instruction jmp b8 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b8_from_b7 with b8 +Replacing label b8_from_b7 with b8 Replacing label b4_from_b3 with b4 -Replacing label b3_from_b4 with b3 -Replacing label b8_from_b7 with b8 -Replacing label b8_from_b7 with b8 -Replacing label b7_from_b8 with b7 -Replacing label b7_from_b8 with b7 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b3_from_b4: Removing instruction b4_from_b3: Removing instruction b4_from_b5: -Removing instruction b7_from_b8: Removing instruction b8_from_b7: Removing instruction b8_from_b9: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction b2: Removing instruction b1: -Removing instruction b3_from_b1: -Removing instruction b5: +Removing instruction b5_from_b1: Removing instruction b6: -Removing instruction b7_from_b6: -Removing instruction b9: +Removing instruction b9_from_b6: Removing instruction breturn: +Removing instruction b9_from_b7: +Removing instruction b5_from_b3: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Removing instruction jmp b3 -Removing instruction jmp b7 -Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -793,28 +802,28 @@ FINAL SYMBOL TABLE (label) main::@9 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 6.6000000000000005 +(byte) main::i#1 reg byte y 168.33333333333331 +(byte) main::i#5 reg byte y 213.0 +(byte) main::i#6 reg byte y 37.33333333333333 (word) main::i1 -(word) main::i1#1 i1 zp ZP_WORD:2 16.5 -(word) main::i1#2 i1 zp ZP_WORD:2 6.6000000000000005 +(word) main::i1#1 i1 zp ZP_WORD:2 168.33333333333331 +(word) main::i1#5 i1 zp ZP_WORD:2 213.0 +(word) main::i1#6 i1 zp ZP_WORD:2 37.33333333333333 (byte) main::idx -(byte) main::idx#10 reg byte y 14.666666666666666 -(byte) main::idx#11 reg byte y 9.25 -(byte) main::idx#12 reg byte y 15.333333333333332 -(byte) main::idx#17 reg byte y 11.0 -(byte) main::idx#4 reg byte y 22.0 -(byte) main::idx#5 reg byte y 4.0 -(byte) main::idx#6 reg byte y 22.0 +(byte) main::idx#18 reg byte x 61.5 +(byte) main::idx#20 reg byte x 62.5 +(byte) main::idx#21 reg byte x 4.0 +(byte) main::idx#4 reg byte x 19.33333333333333 +(byte) main::idx#6 reg byte x 22.4 -reg byte x [ main::i#2 main::i#1 ] -reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] -zp ZP_WORD:2 [ main::i1#2 main::i1#1 ] -reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +reg byte x [ main::idx#18 main::idx#4 ] +reg byte y [ main::i#5 main::i#6 main::i#1 ] +reg byte x [ main::idx#20 main::idx#6 main::idx#21 ] +zp ZP_WORD:2 [ main::i1#5 main::i1#6 main::i1#1 ] FINAL ASSEMBLER -Score: 862 +Score: 5737 // File Comments // Tests using integer conditions in if() @@ -845,86 +854,64 @@ main: { // [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' -- _deref_pbuc1=vbuc2 lda #' ' sta SCREEN+1 - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - // [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@3#0] -- vbuyy=vbuc1 - ldy #2 - // [7] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuxx=vbuc1 - ldx #0 - // loop byte - // [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - // [7] phi (byte) main::idx#10 = (byte) main::idx#11 [phi:main::@4->main::@3#0] -- register_copy - // [7] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#1] -- register_copy - // main::@3 - b3: - // if(!i) - // [8] if((byte) 0!=(byte) main::i#2) goto main::@4 -- vbuc1_neq_vbuxx_then_la1 - cpx #0 - bne b4 + // [7] phi from main::@1 to main::@5 [phi:main::@1->main::@5] + // [7] phi (byte) main::idx#18 = (byte) 2 [phi:main::@1->main::@5#0] -- vbuxx=vbuc1 + ldx #2 + // [7] phi (byte) main::i#6 = (byte) 0 [phi:main::@1->main::@5#1] -- vbuyy=vbuc1 + ldy #0 // main::@5 + b5: // SCREEN[idx++] = '0' - // [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' -- pbuc1_derefidx_vbuyy=vbuc2 + // [8] *((const byte*) SCREEN#0 + (byte) main::idx#18) ← (byte) '0' -- pbuc1_derefidx_vbuxx=vbuc2 lda #'0' - sta SCREEN,y + sta SCREEN,x // SCREEN[idx++] = '0'; - // [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuyy=_inc_vbuyy - iny - // [11] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] - // [11] phi (byte) main::idx#11 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#0] -- register_copy + // [9] (byte) main::idx#4 ← ++ (byte) main::idx#18 -- vbuxx=_inc_vbuxx + inx + // [10] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] + // [10] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@3/main::@5->main::@4#0] -- register_copy // main::@4 b4: // for( byte i:0..2) - // [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [13] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuxx_neq_vbuc1_then_la1 - cpx #3 + // [11] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuyy=_inc_vbuyy + iny + // [12] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuyy_neq_vbuc1_then_la1 + cpy #3 bne b3 // main::@6 // SCREEN[idx++] = ' ' - // [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + // [13] *((const byte*) SCREEN#0 + (byte) main::idx#4) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 lda #' ' - sta SCREEN,y + sta SCREEN,x // SCREEN[idx++] = ' '; - // [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 -- vbuyy=_inc_vbuyy - iny - // [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] - // [16] phi (byte) main::idx#12 = (byte) main::idx#5 [phi:main::@6->main::@7#0] -- register_copy - // [16] phi (word) main::i1#2 = (word) 0 [phi:main::@6->main::@7#1] -- vwuz1=vwuc1 + // [14] (byte) main::idx#21 ← ++ (byte) main::idx#4 -- vbuxx=_inc_vbuxx + inx + // [15] phi from main::@6 to main::@9 [phi:main::@6->main::@9] + // [15] phi (byte) main::idx#20 = (byte) main::idx#21 [phi:main::@6->main::@9#0] -- register_copy + // [15] phi (word) main::i1#6 = (word) 0 [phi:main::@6->main::@9#1] -- vwuz1=vwuc1 lda #<0 sta i1 sta i1+1 - // loop word - // [16] phi from main::@8 to main::@7 [phi:main::@8->main::@7] - // [16] phi (byte) main::idx#12 = (byte) main::idx#17 [phi:main::@8->main::@7#0] -- register_copy - // [16] phi (word) main::i1#2 = (word) main::i1#1 [phi:main::@8->main::@7#1] -- register_copy - // main::@7 - b7: - // if(!i) - // [17] if((byte) 0!=(word) main::i1#2) goto main::@8 -- vwuc1_neq_vwuz1_then_la1 - lda i1+1 - cmp #>0 - bne b8 - lda i1 - cmp #<0 - bne b8 // main::@9 + b9: // SCREEN[idx++] = '0' - // [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' -- pbuc1_derefidx_vbuyy=vbuc2 + // [16] *((const byte*) SCREEN#0 + (byte) main::idx#20) ← (byte) '0' -- pbuc1_derefidx_vbuxx=vbuc2 lda #'0' - sta SCREEN,y + sta SCREEN,x // SCREEN[idx++] = '0'; - // [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuyy=_inc_vbuyy - iny - // [20] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] - // [20] phi (byte) main::idx#17 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#0] -- register_copy + // [17] (byte) main::idx#6 ← ++ (byte) main::idx#20 -- vbuxx=_inc_vbuxx + inx + // [18] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] + // [18] phi (word) main::i1#5 = (word) main::i1#1 [phi:main::@7/main::@9->main::@8#0] -- register_copy // main::@8 b8: // for( word i:0..2) - // [21] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 + // [19] (word) main::i1#1 ← ++ (word) main::i1#5 -- vwuz1=_inc_vwuz1 inc i1 bne !+ inc i1+1 !: - // [22] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 + // [20] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 lda i1+1 cmp #>3 bne b7 @@ -933,8 +920,34 @@ main: { bne b7 // main::@return // } - // [23] return + // [21] return rts + // loop word + // main::@7 + b7: + // if(!i) + // [22] if((byte) 0!=(word) main::i1#1) goto main::@8 -- vwuc1_neq_vwuz1_then_la1 + lda i1+1 + cmp #>0 + bne b8 + lda i1 + cmp #<0 + bne b8 + // [15] phi from main::@7 to main::@9 [phi:main::@7->main::@9] + // [15] phi (byte) main::idx#20 = (byte) main::idx#6 [phi:main::@7->main::@9#0] -- register_copy + // [15] phi (word) main::i1#6 = (word) main::i1#1 [phi:main::@7->main::@9#1] -- register_copy + jmp b9 + // loop byte + // main::@3 + b3: + // if(!i) + // [23] if((byte) 0!=(byte) main::i#1) goto main::@4 -- vbuc1_neq_vbuyy_then_la1 + cpy #0 + bne b4 + // [7] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + // [7] phi (byte) main::idx#18 = (byte) main::idx#4 [phi:main::@3->main::@5#0] -- register_copy + // [7] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@3->main::@5#1] -- register_copy + jmp b5 } // File Data diff --git a/src/test/ref/condition-integer-1.sym b/src/test/ref/condition-integer-1.sym index 1dd505468..5cfcf12d8 100644 --- a/src/test/ref/condition-integer-1.sym +++ b/src/test/ref/condition-integer-1.sym @@ -15,21 +15,21 @@ (label) main::@9 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 6.6000000000000005 +(byte) main::i#1 reg byte y 168.33333333333331 +(byte) main::i#5 reg byte y 213.0 +(byte) main::i#6 reg byte y 37.33333333333333 (word) main::i1 -(word) main::i1#1 i1 zp ZP_WORD:2 16.5 -(word) main::i1#2 i1 zp ZP_WORD:2 6.6000000000000005 +(word) main::i1#1 i1 zp ZP_WORD:2 168.33333333333331 +(word) main::i1#5 i1 zp ZP_WORD:2 213.0 +(word) main::i1#6 i1 zp ZP_WORD:2 37.33333333333333 (byte) main::idx -(byte) main::idx#10 reg byte y 14.666666666666666 -(byte) main::idx#11 reg byte y 9.25 -(byte) main::idx#12 reg byte y 15.333333333333332 -(byte) main::idx#17 reg byte y 11.0 -(byte) main::idx#4 reg byte y 22.0 -(byte) main::idx#5 reg byte y 4.0 -(byte) main::idx#6 reg byte y 22.0 +(byte) main::idx#18 reg byte x 61.5 +(byte) main::idx#20 reg byte x 62.5 +(byte) main::idx#21 reg byte x 4.0 +(byte) main::idx#4 reg byte x 19.33333333333333 +(byte) main::idx#6 reg byte x 22.4 -reg byte x [ main::i#2 main::i#1 ] -reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] -zp ZP_WORD:2 [ main::i1#2 main::i1#1 ] -reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +reg byte x [ main::idx#18 main::idx#4 ] +reg byte y [ main::i#5 main::i#6 main::i#1 ] +reg byte x [ main::idx#20 main::idx#6 main::idx#21 ] +zp ZP_WORD:2 [ main::i1#5 main::i1#6 main::i1#1 ] diff --git a/src/test/ref/condition-integer-2.asm b/src/test/ref/condition-integer-2.asm index 0f07ec01d..1deda6ac1 100644 --- a/src/test/ref/condition-integer-2.asm +++ b/src/test/ref/condition-integer-2.asm @@ -7,8 +7,12 @@ main: { ldy #0 ldx #2 + b2: + txa + sta SCREEN,y + iny + dex // for() - b1: cpx #0 bne b2 lda #' ' @@ -36,10 +40,4 @@ main: { sta SCREEN,y iny jmp b4 - b2: - txa - sta SCREEN,y - iny - dex - jmp b1 } diff --git a/src/test/ref/condition-integer-2.cfg b/src/test/ref/condition-integer-2.cfg index a1b0339c2..e9edd9684 100644 --- a/src/test/ref/condition-integer-2.cfg +++ b/src/test/ref/condition-integer-2.cfg @@ -9,43 +9,43 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) idx#19 ← phi( main::@1/(byte) idx#1 main/(byte) 0 ) + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 2 ) + [6] *((const byte*) SCREEN#0 + (byte) idx#19) ← (byte) main::i#4 + [7] (byte) idx#1 ← ++ (byte) idx#19 + [8] (byte) main::i#1 ← -- (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) idx#15 ← phi( main/(byte) 0 main::@2/(byte) idx#1 ) - [5] (byte) main::i#2 ← phi( main/(byte) 2 main::@2/(byte) main::i#1 ) - [6] if((byte) 0!=(byte) main::i#2) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((byte) 0!=(byte) main::i#1) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [7] *((const byte*) SCREEN#0 + (byte) idx#15) ← (byte) ' ' - [8] (byte) idx#2 ← ++ (byte) idx#15 + [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' + [11] (byte) idx#2 ← ++ (byte) idx#1 to:main::@4 main::@4: scope:[main] from main::@3 main::@5 - [9] (byte) idx#10 ← phi( main::@3/(byte) idx#2 main::@5/(byte) idx#3 ) - [9] (byte) main::j#2 ← phi( main::@3/(byte) 3 main::@5/(byte) main::j#1 ) - [10] (byte) main::j#1 ← -- (byte) main::j#2 - [11] if((byte) 0!=(byte) main::j#1) goto main::@5 + [12] (byte) idx#10 ← phi( main::@3/(byte) idx#2 main::@5/(byte) idx#3 ) + [12] (byte) main::j#2 ← phi( main::@3/(byte) 3 main::@5/(byte) main::j#1 ) + [13] (byte) main::j#1 ← -- (byte) main::j#2 + [14] if((byte) 0!=(byte) main::j#1) goto main::@5 to:main::@6 main::@6: scope:[main] from main::@4 - [12] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' - [13] (byte) idx#4 ← ++ (byte) idx#10 + [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' + [16] (byte) idx#4 ← ++ (byte) idx#10 to:main::@7 main::@7: scope:[main] from main::@6 main::@7 - [14] (byte) idx#12 ← phi( main::@7/(byte) idx#13 main::@6/(byte) idx#4 ) - [14] (byte) main::k#2 ← phi( main::@7/(byte) main::k#1 main::@6/(byte) 2 ) - [15] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 - [16] (byte) idx#13 ← ++ (byte) idx#12 - [17] (byte) main::k#1 ← -- (byte) main::k#2 - [18] if((byte) 0!=(byte) main::k#1) goto main::@7 + [17] (byte) idx#12 ← phi( main::@7/(byte) idx#13 main::@6/(byte) idx#4 ) + [17] (byte) main::k#2 ← phi( main::@7/(byte) main::k#1 main::@6/(byte) 2 ) + [18] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 + [19] (byte) idx#13 ← ++ (byte) idx#12 + [20] (byte) main::k#1 ← -- (byte) main::k#2 + [21] if((byte) 0!=(byte) main::k#1) goto main::@7 to:main::@return main::@return: scope:[main] from main::@7 - [19] return + [22] return to:@return main::@5: scope:[main] from main::@4 - [20] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 - [21] (byte) idx#3 ← ++ (byte) idx#10 + [23] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 + [24] (byte) idx#3 ← ++ (byte) idx#10 to:main::@4 -main::@2: scope:[main] from main::@1 - [22] *((const byte*) SCREEN#0 + (byte) idx#15) ← (byte) main::i#2 - [23] (byte) idx#1 ← ++ (byte) idx#15 - [24] (byte) main::i#1 ← -- (byte) main::i#2 - to:main::@1 diff --git a/src/test/ref/condition-integer-2.log b/src/test/ref/condition-integer-2.log index 52feca998..1b6356a24 100644 --- a/src/test/ref/condition-integer-2.log +++ b/src/test/ref/condition-integer-2.log @@ -186,6 +186,18 @@ Constant (const byte) main::i#0 = 2 Constant (const byte) main::j#0 = 3 Constant (const byte) main::k#0 = 2 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Alias (byte) idx#1 = (byte) idx#15 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Identical Phi Values (byte) idx#21 (const byte) idx#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (main::@1_1) in block main::@3 +if() condition always true - replacing block destination [24] if((byte) 0!=(const byte) main::i#0) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Alias (byte) idx#1 = (byte) idx#20 +Successful SSA optimization Pass2AliasElimination 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::k#0 @@ -195,26 +207,30 @@ Constant inlined main::k#0 = (byte) 2 Constant inlined main::j#0 = (byte) 3 Constant inlined idx#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@15(between main::@13 and main::@13) +Added new block during phi lifting main::@15(between main::@1 and main::@2) +Added new block during phi lifting main::@16(between main::@13 and main::@13) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 6 initial phi equivalence classes -Coalesced [10] idx#20 ← idx#2 -Coalesced [16] idx#23 ← idx#4 -Coalesced [23] main::k#3 ← main::k#1 -Coalesced [24] idx#22 ← idx#13 -Coalesced [27] main::j#4 ← main::j#1 -Coalesced [28] idx#21 ← idx#3 -Coalesced [32] main::i#4 ← main::i#1 -Coalesced [33] idx#19 ← idx#1 +Coalesced [14] idx#23 ← idx#2 +Coalesced [20] idx#26 ← idx#4 +Coalesced [27] main::k#3 ← main::k#1 +Coalesced [28] idx#25 ← idx#13 +Coalesced [31] main::j#4 ← main::j#1 +Coalesced [32] idx#24 ← idx#3 +Coalesced [33] main::i#6 ← main::i#1 +Coalesced [34] idx#22 ← idx#1 Coalesced down to 6 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@16 Culled Empty Block (label) main::@15 Renumbering block main::@7 to main::@4 Renumbering block main::@8 to main::@5 @@ -237,63 +253,63 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) idx#19 ← phi( main::@1/(byte) idx#1 main/(byte) 0 ) + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 2 ) + [6] *((const byte*) SCREEN#0 + (byte) idx#19) ← (byte) main::i#4 + [7] (byte) idx#1 ← ++ (byte) idx#19 + [8] (byte) main::i#1 ← -- (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) idx#15 ← phi( main/(byte) 0 main::@2/(byte) idx#1 ) - [5] (byte) main::i#2 ← phi( main/(byte) 2 main::@2/(byte) main::i#1 ) - [6] if((byte) 0!=(byte) main::i#2) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((byte) 0!=(byte) main::i#1) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [7] *((const byte*) SCREEN#0 + (byte) idx#15) ← (byte) ' ' - [8] (byte) idx#2 ← ++ (byte) idx#15 + [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' + [11] (byte) idx#2 ← ++ (byte) idx#1 to:main::@4 main::@4: scope:[main] from main::@3 main::@5 - [9] (byte) idx#10 ← phi( main::@3/(byte) idx#2 main::@5/(byte) idx#3 ) - [9] (byte) main::j#2 ← phi( main::@3/(byte) 3 main::@5/(byte) main::j#1 ) - [10] (byte) main::j#1 ← -- (byte) main::j#2 - [11] if((byte) 0!=(byte) main::j#1) goto main::@5 + [12] (byte) idx#10 ← phi( main::@3/(byte) idx#2 main::@5/(byte) idx#3 ) + [12] (byte) main::j#2 ← phi( main::@3/(byte) 3 main::@5/(byte) main::j#1 ) + [13] (byte) main::j#1 ← -- (byte) main::j#2 + [14] if((byte) 0!=(byte) main::j#1) goto main::@5 to:main::@6 main::@6: scope:[main] from main::@4 - [12] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' - [13] (byte) idx#4 ← ++ (byte) idx#10 + [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' + [16] (byte) idx#4 ← ++ (byte) idx#10 to:main::@7 main::@7: scope:[main] from main::@6 main::@7 - [14] (byte) idx#12 ← phi( main::@7/(byte) idx#13 main::@6/(byte) idx#4 ) - [14] (byte) main::k#2 ← phi( main::@7/(byte) main::k#1 main::@6/(byte) 2 ) - [15] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 - [16] (byte) idx#13 ← ++ (byte) idx#12 - [17] (byte) main::k#1 ← -- (byte) main::k#2 - [18] if((byte) 0!=(byte) main::k#1) goto main::@7 + [17] (byte) idx#12 ← phi( main::@7/(byte) idx#13 main::@6/(byte) idx#4 ) + [17] (byte) main::k#2 ← phi( main::@7/(byte) main::k#1 main::@6/(byte) 2 ) + [18] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 + [19] (byte) idx#13 ← ++ (byte) idx#12 + [20] (byte) main::k#1 ← -- (byte) main::k#2 + [21] if((byte) 0!=(byte) main::k#1) goto main::@7 to:main::@return main::@return: scope:[main] from main::@7 - [19] return + [22] return to:@return main::@5: scope:[main] from main::@4 - [20] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 - [21] (byte) idx#3 ← ++ (byte) idx#10 + [23] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 + [24] (byte) idx#3 ← ++ (byte) idx#10 to:main::@4 -main::@2: scope:[main] from main::@1 - [22] *((const byte*) SCREEN#0 + (byte) idx#15) ← (byte) main::i#2 - [23] (byte) idx#1 ← ++ (byte) idx#15 - [24] (byte) main::i#1 ← -- (byte) main::i#2 - to:main::@1 VARIABLE REGISTER WEIGHTS (byte*) SCREEN (byte) idx -(byte) idx#1 11.0 +(byte) idx#1 6.5 (byte) idx#10 7.8 (byte) idx#12 17.5 (byte) idx#13 7.333333333333333 -(byte) idx#15 9.25 +(byte) idx#19 16.5 (byte) idx#2 4.0 (byte) idx#3 22.0 (byte) idx#4 4.0 (void()) main() (byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 11.0 +(byte) main::i#1 16.5 +(byte) main::i#4 11.0 (byte) main::j (byte) main::j#1 11.0 (byte) main::j#2 22.0 @@ -302,21 +318,21 @@ VARIABLE REGISTER WEIGHTS (byte) main::k#2 11.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] -[ idx#15 idx#1 ] +[ main::i#4 main::i#1 ] +[ idx#19 idx#1 ] [ main::j#2 main::j#1 ] [ idx#10 idx#2 idx#3 ] [ main::k#2 main::k#1 ] [ idx#12 idx#13 idx#4 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ idx#15 idx#1 ] +[ main::i#4 main::i#1 ] +[ idx#19 idx#1 ] [ main::j#2 main::j#1 ] [ idx#10 idx#2 idx#3 ] [ main::k#2 main::k#1 ] [ idx#12 idx#13 idx#4 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ idx#15 idx#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:3 [ idx#19 idx#1 ] Allocated zp ZP_BYTE:4 [ main::j#2 main::j#1 ] Allocated zp ZP_BYTE:5 [ idx#10 idx#2 idx#3 ] Allocated zp ZP_BYTE:6 [ main::k#2 main::k#1 ] @@ -361,141 +377,142 @@ main: { .label i = 2 .label j = 4 .label k = 6 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) idx#15 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) idx#19 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta idx - // [5] phi (byte) main::i#2 = (byte) 2 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::i#4 = (byte) 2 [phi:main->main::@2#1] -- vbuz1=vbuc1 lda #2 sta i + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) idx#19 = (byte) idx#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) SCREEN#0 + (byte) idx#19) ← (byte) main::i#4 -- pbuc1_derefidx_vbuz1=vbuz2 + lda i + ldy idx + sta SCREEN,y + // [7] (byte) idx#1 ← ++ (byte) idx#19 -- vbuz1=_inc_vbuz1 + inc idx + // [8] (byte) main::i#1 ← -- (byte) main::i#4 -- vbuz1=_dec_vbuz1 + dec i jmp b1 // for() // main::@1 b1: - // [6] if((byte) 0!=(byte) main::i#2) goto main::@2 -- vbuc1_neq_vbuz1_then_la1 + // [9] if((byte) 0!=(byte) main::i#1) goto main::@2 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp i - bne b2 + bne b2_from_b1 jmp b3 // main::@3 b3: - // [7] *((const byte*) SCREEN#0 + (byte) idx#15) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 + // [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 lda #' ' ldy idx sta SCREEN,y - // [8] (byte) idx#2 ← ++ (byte) idx#15 -- vbuz1=_inc_vbuz2 + // [11] (byte) idx#2 ← ++ (byte) idx#1 -- vbuz1=_inc_vbuz2 ldy idx iny sty idx_2 - // [9] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] b4_from_b3: - // [9] phi (byte) idx#10 = (byte) idx#2 [phi:main::@3->main::@4#0] -- register_copy - // [9] phi (byte) main::j#2 = (byte) 3 [phi:main::@3->main::@4#1] -- vbuz1=vbuc1 + // [12] phi (byte) idx#10 = (byte) idx#2 [phi:main::@3->main::@4#0] -- register_copy + // [12] phi (byte) main::j#2 = (byte) 3 [phi:main::@3->main::@4#1] -- vbuz1=vbuc1 lda #3 sta j jmp b4 // main::@4 b4: - // [10] (byte) main::j#1 ← -- (byte) main::j#2 -- vbuz1=_dec_vbuz1 + // [13] (byte) main::j#1 ← -- (byte) main::j#2 -- vbuz1=_dec_vbuz1 dec j - // [11] if((byte) 0!=(byte) main::j#1) goto main::@5 -- vbuc1_neq_vbuz1_then_la1 + // [14] if((byte) 0!=(byte) main::j#1) goto main::@5 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp j bne b5 jmp b6 // main::@6 b6: - // [12] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 + // [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 lda #' ' ldy idx_10 sta SCREEN,y - // [13] (byte) idx#4 ← ++ (byte) idx#10 -- vbuz1=_inc_vbuz2 + // [16] (byte) idx#4 ← ++ (byte) idx#10 -- vbuz1=_inc_vbuz2 ldy idx_10 iny sty idx_4 - // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + // [17] phi from main::@6 to main::@7 [phi:main::@6->main::@7] b7_from_b6: - // [14] phi (byte) idx#12 = (byte) idx#4 [phi:main::@6->main::@7#0] -- register_copy - // [14] phi (byte) main::k#2 = (byte) 2 [phi:main::@6->main::@7#1] -- vbuz1=vbuc1 + // [17] phi (byte) idx#12 = (byte) idx#4 [phi:main::@6->main::@7#0] -- register_copy + // [17] phi (byte) main::k#2 = (byte) 2 [phi:main::@6->main::@7#1] -- vbuz1=vbuc1 lda #2 sta k jmp b7 - // [14] phi from main::@7 to main::@7 [phi:main::@7->main::@7] + // [17] phi from main::@7 to main::@7 [phi:main::@7->main::@7] b7_from_b7: - // [14] phi (byte) idx#12 = (byte) idx#13 [phi:main::@7->main::@7#0] -- register_copy - // [14] phi (byte) main::k#2 = (byte) main::k#1 [phi:main::@7->main::@7#1] -- register_copy + // [17] phi (byte) idx#12 = (byte) idx#13 [phi:main::@7->main::@7#0] -- register_copy + // [17] phi (byte) main::k#2 = (byte) main::k#1 [phi:main::@7->main::@7#1] -- register_copy jmp b7 // main::@7 b7: - // [15] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [18] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda k ldy idx_12 sta SCREEN,y - // [16] (byte) idx#13 ← ++ (byte) idx#12 -- vbuz1=_inc_vbuz1 + // [19] (byte) idx#13 ← ++ (byte) idx#12 -- vbuz1=_inc_vbuz1 inc idx_13 - // [17] (byte) main::k#1 ← -- (byte) main::k#2 -- vbuz1=_dec_vbuz1 + // [20] (byte) main::k#1 ← -- (byte) main::k#2 -- vbuz1=_dec_vbuz1 dec k - // [18] if((byte) 0!=(byte) main::k#1) goto main::@7 -- vbuc1_neq_vbuz1_then_la1 + // [21] if((byte) 0!=(byte) main::k#1) goto main::@7 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp k bne b7_from_b7 jmp breturn // main::@return breturn: - // [19] return + // [22] return rts // main::@5 b5: - // [20] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 -- pbuc1_derefidx_vbuz1=vbuz2 + // [23] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 -- pbuc1_derefidx_vbuz1=vbuz2 lda j ldy idx_10 sta SCREEN,y - // [21] (byte) idx#3 ← ++ (byte) idx#10 -- vbuz1=_inc_vbuz1 + // [24] (byte) idx#3 ← ++ (byte) idx#10 -- vbuz1=_inc_vbuz1 inc idx_3 - // [9] phi from main::@5 to main::@4 [phi:main::@5->main::@4] + // [12] phi from main::@5 to main::@4 [phi:main::@5->main::@4] b4_from_b5: - // [9] phi (byte) idx#10 = (byte) idx#3 [phi:main::@5->main::@4#0] -- register_copy - // [9] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@5->main::@4#1] -- register_copy + // [12] phi (byte) idx#10 = (byte) idx#3 [phi:main::@5->main::@4#0] -- register_copy + // [12] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@5->main::@4#1] -- register_copy jmp b4 - // main::@2 - b2: - // [22] *((const byte*) SCREEN#0 + (byte) idx#15) ← (byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz2 - lda i - ldy idx - sta SCREEN,y - // [23] (byte) idx#1 ← ++ (byte) idx#15 -- vbuz1=_inc_vbuz1 - inc idx - // [24] (byte) main::i#1 ← -- (byte) main::i#2 -- vbuz1=_dec_vbuz1 - dec i - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) idx#15 = (byte) idx#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [7] *((const byte*) SCREEN#0 + (byte) idx#15) ← (byte) ' ' [ idx#15 ] ( main:2 [ idx#15 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ idx#15 idx#1 ] -Statement [12] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' [ idx#10 ] ( main:2 [ idx#10 ] ) always clobbers reg byte a +Statement [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' [ idx#1 ] ( main:2 [ idx#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ idx#19 idx#1 ] +Statement [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' [ idx#10 ] ( main:2 [ idx#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ idx#10 idx#2 idx#3 ] -Statement [7] *((const byte*) SCREEN#0 + (byte) idx#15) ← (byte) ' ' [ idx#15 ] ( main:2 [ idx#15 ] ) always clobbers reg byte a -Statement [12] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' [ idx#10 ] ( main:2 [ idx#10 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ idx#15 idx#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Statement [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' [ idx#1 ] ( main:2 [ idx#1 ] ) always clobbers reg byte a +Statement [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' [ idx#10 ] ( main:2 [ idx#10 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ idx#19 idx#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:4 [ main::j#2 main::j#1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:5 [ idx#10 idx#2 idx#3 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:6 [ main::k#2 main::k#1 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:7 [ idx#12 idx#13 idx#4 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 33: zp ZP_BYTE:4 [ main::j#2 main::j#1 ] 27.5: zp ZP_BYTE:6 [ main::k#2 main::k#1 ] -Uplift Scope [] 33.8: zp ZP_BYTE:5 [ idx#10 idx#2 idx#3 ] 28.83: zp ZP_BYTE:7 [ idx#12 idx#13 idx#4 ] 20.25: zp ZP_BYTE:3 [ idx#15 idx#1 ] +Uplift Scope [main] 33: zp ZP_BYTE:4 [ main::j#2 main::j#1 ] 27.5: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] 27.5: zp ZP_BYTE:6 [ main::k#2 main::k#1 ] +Uplift Scope [] 33.8: zp ZP_BYTE:5 [ idx#10 idx#2 idx#3 ] 28.83: zp ZP_BYTE:7 [ idx#12 idx#13 idx#4 ] 23: zp ZP_BYTE:3 [ idx#19 idx#1 ] -Uplifting [main] best 1079 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::j#2 main::j#1 ] reg byte a [ main::k#2 main::k#1 ] -Uplifting [] best 851 combination reg byte y [ idx#10 idx#2 idx#3 ] reg byte y [ idx#12 idx#13 idx#4 ] reg byte y [ idx#15 idx#1 ] +Uplifting [main] best 1109 combination reg byte a [ main::j#2 main::j#1 ] reg byte x [ main::i#4 main::i#1 ] reg byte a [ main::k#2 main::k#1 ] +Uplifting [] best 881 combination reg byte y [ idx#10 idx#2 idx#3 ] reg byte y [ idx#12 idx#13 idx#4 ] reg byte y [ idx#19 idx#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -525,108 +542,110 @@ bend_from_b1: bend: // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) idx#15 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) idx#19 = (byte) 0 [phi:main->main::@2#0] -- vbuyy=vbuc1 ldy #0 - // [5] phi (byte) main::i#2 = (byte) 2 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi (byte) main::i#4 = (byte) 2 [phi:main->main::@2#1] -- vbuxx=vbuc1 ldx #2 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) idx#19 = (byte) idx#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) SCREEN#0 + (byte) idx#19) ← (byte) main::i#4 -- pbuc1_derefidx_vbuyy=vbuxx + txa + sta SCREEN,y + // [7] (byte) idx#1 ← ++ (byte) idx#19 -- vbuyy=_inc_vbuyy + iny + // [8] (byte) main::i#1 ← -- (byte) main::i#4 -- vbuxx=_dec_vbuxx + dex jmp b1 // for() // main::@1 b1: - // [6] if((byte) 0!=(byte) main::i#2) goto main::@2 -- vbuc1_neq_vbuxx_then_la1 + // [9] if((byte) 0!=(byte) main::i#1) goto main::@2 -- vbuc1_neq_vbuxx_then_la1 cpx #0 - bne b2 + bne b2_from_b1 jmp b3 // main::@3 b3: - // [7] *((const byte*) SCREEN#0 + (byte) idx#15) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + // [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 lda #' ' sta SCREEN,y - // [8] (byte) idx#2 ← ++ (byte) idx#15 -- vbuyy=_inc_vbuyy + // [11] (byte) idx#2 ← ++ (byte) idx#1 -- vbuyy=_inc_vbuyy iny - // [9] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] b4_from_b3: - // [9] phi (byte) idx#10 = (byte) idx#2 [phi:main::@3->main::@4#0] -- register_copy - // [9] phi (byte) main::j#2 = (byte) 3 [phi:main::@3->main::@4#1] -- vbuaa=vbuc1 + // [12] phi (byte) idx#10 = (byte) idx#2 [phi:main::@3->main::@4#0] -- register_copy + // [12] phi (byte) main::j#2 = (byte) 3 [phi:main::@3->main::@4#1] -- vbuaa=vbuc1 lda #3 jmp b4 // main::@4 b4: - // [10] (byte) main::j#1 ← -- (byte) main::j#2 -- vbuaa=_dec_vbuaa + // [13] (byte) main::j#1 ← -- (byte) main::j#2 -- vbuaa=_dec_vbuaa sec sbc #1 - // [11] if((byte) 0!=(byte) main::j#1) goto main::@5 -- vbuc1_neq_vbuaa_then_la1 + // [14] if((byte) 0!=(byte) main::j#1) goto main::@5 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne b5 jmp b6 // main::@6 b6: - // [12] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + // [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 lda #' ' sta SCREEN,y - // [13] (byte) idx#4 ← ++ (byte) idx#10 -- vbuyy=_inc_vbuyy + // [16] (byte) idx#4 ← ++ (byte) idx#10 -- vbuyy=_inc_vbuyy iny - // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + // [17] phi from main::@6 to main::@7 [phi:main::@6->main::@7] b7_from_b6: - // [14] phi (byte) idx#12 = (byte) idx#4 [phi:main::@6->main::@7#0] -- register_copy - // [14] phi (byte) main::k#2 = (byte) 2 [phi:main::@6->main::@7#1] -- vbuaa=vbuc1 + // [17] phi (byte) idx#12 = (byte) idx#4 [phi:main::@6->main::@7#0] -- register_copy + // [17] phi (byte) main::k#2 = (byte) 2 [phi:main::@6->main::@7#1] -- vbuaa=vbuc1 lda #2 jmp b7 - // [14] phi from main::@7 to main::@7 [phi:main::@7->main::@7] + // [17] phi from main::@7 to main::@7 [phi:main::@7->main::@7] b7_from_b7: - // [14] phi (byte) idx#12 = (byte) idx#13 [phi:main::@7->main::@7#0] -- register_copy - // [14] phi (byte) main::k#2 = (byte) main::k#1 [phi:main::@7->main::@7#1] -- register_copy + // [17] phi (byte) idx#12 = (byte) idx#13 [phi:main::@7->main::@7#0] -- register_copy + // [17] phi (byte) main::k#2 = (byte) main::k#1 [phi:main::@7->main::@7#1] -- register_copy jmp b7 // main::@7 b7: - // [15] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 -- pbuc1_derefidx_vbuyy=vbuaa + // [18] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 -- pbuc1_derefidx_vbuyy=vbuaa sta SCREEN,y - // [16] (byte) idx#13 ← ++ (byte) idx#12 -- vbuyy=_inc_vbuyy + // [19] (byte) idx#13 ← ++ (byte) idx#12 -- vbuyy=_inc_vbuyy iny - // [17] (byte) main::k#1 ← -- (byte) main::k#2 -- vbuaa=_dec_vbuaa + // [20] (byte) main::k#1 ← -- (byte) main::k#2 -- vbuaa=_dec_vbuaa sec sbc #1 - // [18] if((byte) 0!=(byte) main::k#1) goto main::@7 -- vbuc1_neq_vbuaa_then_la1 + // [21] if((byte) 0!=(byte) main::k#1) goto main::@7 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne b7_from_b7 jmp breturn // main::@return breturn: - // [19] return + // [22] return rts // main::@5 b5: - // [20] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 -- pbuc1_derefidx_vbuyy=vbuaa + // [23] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 -- pbuc1_derefidx_vbuyy=vbuaa sta SCREEN,y - // [21] (byte) idx#3 ← ++ (byte) idx#10 -- vbuyy=_inc_vbuyy + // [24] (byte) idx#3 ← ++ (byte) idx#10 -- vbuyy=_inc_vbuyy iny - // [9] phi from main::@5 to main::@4 [phi:main::@5->main::@4] + // [12] phi from main::@5 to main::@4 [phi:main::@5->main::@4] b4_from_b5: - // [9] phi (byte) idx#10 = (byte) idx#3 [phi:main::@5->main::@4#0] -- register_copy - // [9] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@5->main::@4#1] -- register_copy + // [12] phi (byte) idx#10 = (byte) idx#3 [phi:main::@5->main::@4#0] -- register_copy + // [12] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@5->main::@4#1] -- register_copy jmp b4 - // main::@2 - b2: - // [22] *((const byte*) SCREEN#0 + (byte) idx#15) ← (byte) main::i#2 -- pbuc1_derefidx_vbuyy=vbuxx - txa - sta SCREEN,y - // [23] (byte) idx#1 ← ++ (byte) idx#15 -- vbuyy=_inc_vbuyy - iny - // [24] (byte) main::i#1 ← -- (byte) main::i#2 -- vbuxx=_dec_vbuxx - dex - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) idx#15 = (byte) idx#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b4 @@ -634,26 +653,29 @@ Removing instruction jmp b6 Removing instruction jmp b7 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Replacing label b7_from_b7 with b7 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Removing instruction b7_from_b7: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction b3: Removing instruction b4_from_b3: Removing instruction b6: Removing instruction b7_from_b6: Removing instruction breturn: Removing instruction b4_from_b5: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 Removing instruction jmp b7 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: @@ -666,11 +688,11 @@ FINAL SYMBOL TABLE (byte*) SCREEN (const byte*) SCREEN#0 SCREEN = (byte*) 1024 (byte) idx -(byte) idx#1 reg byte y 11.0 +(byte) idx#1 reg byte y 6.5 (byte) idx#10 reg byte y 7.8 (byte) idx#12 reg byte y 17.5 (byte) idx#13 reg byte y 7.333333333333333 -(byte) idx#15 reg byte y 9.25 +(byte) idx#19 reg byte y 16.5 (byte) idx#2 reg byte y 4.0 (byte) idx#3 reg byte y 22.0 (byte) idx#4 reg byte y 4.0 @@ -684,8 +706,8 @@ FINAL SYMBOL TABLE (label) main::@7 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 11.0 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 11.0 (byte) main::j (byte) main::j#1 reg byte a 11.0 (byte) main::j#2 reg byte a 22.0 @@ -693,8 +715,8 @@ FINAL SYMBOL TABLE (byte) main::k#1 reg byte a 16.5 (byte) main::k#2 reg byte a 11.0 -reg byte x [ main::i#2 main::i#1 ] -reg byte y [ idx#15 idx#1 ] +reg byte x [ main::i#4 main::i#1 ] +reg byte y [ idx#19 idx#1 ] reg byte a [ main::j#2 main::j#1 ] reg byte y [ idx#10 idx#2 idx#3 ] reg byte a [ main::k#2 main::k#1 ] @@ -702,7 +724,7 @@ reg byte y [ idx#12 idx#13 idx#4 ] FINAL ASSEMBLER -Score: 629 +Score: 599 // File Comments // Tests using integer conditions in while() / for() / do..while @@ -722,101 +744,98 @@ Score: 629 // @end // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) idx#15 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) idx#19 = (byte) 0 [phi:main->main::@2#0] -- vbuyy=vbuc1 ldy #0 - // [5] phi (byte) main::i#2 = (byte) 2 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi (byte) main::i#4 = (byte) 2 [phi:main->main::@2#1] -- vbuxx=vbuc1 ldx #2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) idx#19 = (byte) idx#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + // main::@2 + b2: + // SCREEN[idx++] = i + // [6] *((const byte*) SCREEN#0 + (byte) idx#19) ← (byte) main::i#4 -- pbuc1_derefidx_vbuyy=vbuxx + txa + sta SCREEN,y + // SCREEN[idx++] = i; + // [7] (byte) idx#1 ← ++ (byte) idx#19 -- vbuyy=_inc_vbuyy + iny + // for( byte i=2;i;i--) + // [8] (byte) main::i#1 ← -- (byte) main::i#4 -- vbuxx=_dec_vbuxx + dex // for() // main::@1 - b1: - // for( byte i=2;i;i--) - // [6] if((byte) 0!=(byte) main::i#2) goto main::@2 -- vbuc1_neq_vbuxx_then_la1 + // [9] if((byte) 0!=(byte) main::i#1) goto main::@2 -- vbuc1_neq_vbuxx_then_la1 cpx #0 bne b2 // main::@3 // SCREEN[idx++] = ' ' - // [7] *((const byte*) SCREEN#0 + (byte) idx#15) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + // [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 lda #' ' sta SCREEN,y // SCREEN[idx++] = ' '; - // [8] (byte) idx#2 ← ++ (byte) idx#15 -- vbuyy=_inc_vbuyy + // [11] (byte) idx#2 ← ++ (byte) idx#1 -- vbuyy=_inc_vbuyy iny - // [9] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - // [9] phi (byte) idx#10 = (byte) idx#2 [phi:main::@3->main::@4#0] -- register_copy - // [9] phi (byte) main::j#2 = (byte) 3 [phi:main::@3->main::@4#1] -- vbuaa=vbuc1 + // [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [12] phi (byte) idx#10 = (byte) idx#2 [phi:main::@3->main::@4#0] -- register_copy + // [12] phi (byte) main::j#2 = (byte) 3 [phi:main::@3->main::@4#1] -- vbuaa=vbuc1 lda #3 // main::@4 b4: // while( j-- ) - // [10] (byte) main::j#1 ← -- (byte) main::j#2 -- vbuaa=_dec_vbuaa + // [13] (byte) main::j#1 ← -- (byte) main::j#2 -- vbuaa=_dec_vbuaa sec sbc #1 - // [11] if((byte) 0!=(byte) main::j#1) goto main::@5 -- vbuc1_neq_vbuaa_then_la1 + // [14] if((byte) 0!=(byte) main::j#1) goto main::@5 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne b5 // main::@6 // SCREEN[idx++] = ' ' - // [12] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + // [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 lda #' ' sta SCREEN,y // SCREEN[idx++] = ' '; - // [13] (byte) idx#4 ← ++ (byte) idx#10 -- vbuyy=_inc_vbuyy + // [16] (byte) idx#4 ← ++ (byte) idx#10 -- vbuyy=_inc_vbuyy iny - // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] - // [14] phi (byte) idx#12 = (byte) idx#4 [phi:main::@6->main::@7#0] -- register_copy - // [14] phi (byte) main::k#2 = (byte) 2 [phi:main::@6->main::@7#1] -- vbuaa=vbuc1 + // [17] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + // [17] phi (byte) idx#12 = (byte) idx#4 [phi:main::@6->main::@7#0] -- register_copy + // [17] phi (byte) main::k#2 = (byte) 2 [phi:main::@6->main::@7#1] -- vbuaa=vbuc1 lda #2 - // [14] phi from main::@7 to main::@7 [phi:main::@7->main::@7] - // [14] phi (byte) idx#12 = (byte) idx#13 [phi:main::@7->main::@7#0] -- register_copy - // [14] phi (byte) main::k#2 = (byte) main::k#1 [phi:main::@7->main::@7#1] -- register_copy + // [17] phi from main::@7 to main::@7 [phi:main::@7->main::@7] + // [17] phi (byte) idx#12 = (byte) idx#13 [phi:main::@7->main::@7#0] -- register_copy + // [17] phi (byte) main::k#2 = (byte) main::k#1 [phi:main::@7->main::@7#1] -- register_copy // main::@7 b7: // SCREEN[idx++] = k - // [15] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 -- pbuc1_derefidx_vbuyy=vbuaa + // [18] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 -- pbuc1_derefidx_vbuyy=vbuaa sta SCREEN,y // SCREEN[idx++] = k; - // [16] (byte) idx#13 ← ++ (byte) idx#12 -- vbuyy=_inc_vbuyy + // [19] (byte) idx#13 ← ++ (byte) idx#12 -- vbuyy=_inc_vbuyy iny // while(k--) - // [17] (byte) main::k#1 ← -- (byte) main::k#2 -- vbuaa=_dec_vbuaa + // [20] (byte) main::k#1 ← -- (byte) main::k#2 -- vbuaa=_dec_vbuaa sec sbc #1 - // [18] if((byte) 0!=(byte) main::k#1) goto main::@7 -- vbuc1_neq_vbuaa_then_la1 + // [21] if((byte) 0!=(byte) main::k#1) goto main::@7 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne b7 // main::@return // } - // [19] return + // [22] return rts // main::@5 b5: // SCREEN[idx++] = j - // [20] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 -- pbuc1_derefidx_vbuyy=vbuaa + // [23] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 -- pbuc1_derefidx_vbuyy=vbuaa sta SCREEN,y // SCREEN[idx++] = j; - // [21] (byte) idx#3 ← ++ (byte) idx#10 -- vbuyy=_inc_vbuyy + // [24] (byte) idx#3 ← ++ (byte) idx#10 -- vbuyy=_inc_vbuyy iny - // [9] phi from main::@5 to main::@4 [phi:main::@5->main::@4] - // [9] phi (byte) idx#10 = (byte) idx#3 [phi:main::@5->main::@4#0] -- register_copy - // [9] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@5->main::@4#1] -- register_copy + // [12] phi from main::@5 to main::@4 [phi:main::@5->main::@4] + // [12] phi (byte) idx#10 = (byte) idx#3 [phi:main::@5->main::@4#0] -- register_copy + // [12] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@5->main::@4#1] -- register_copy jmp b4 - // main::@2 - b2: - // SCREEN[idx++] = i - // [22] *((const byte*) SCREEN#0 + (byte) idx#15) ← (byte) main::i#2 -- pbuc1_derefidx_vbuyy=vbuxx - txa - sta SCREEN,y - // SCREEN[idx++] = i; - // [23] (byte) idx#1 ← ++ (byte) idx#15 -- vbuyy=_inc_vbuyy - iny - // for( byte i=2;i;i--) - // [24] (byte) main::i#1 ← -- (byte) main::i#2 -- vbuxx=_dec_vbuxx - dex - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) idx#15 = (byte) idx#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/condition-integer-2.sym b/src/test/ref/condition-integer-2.sym index 3e34586c0..27e3c6f70 100644 --- a/src/test/ref/condition-integer-2.sym +++ b/src/test/ref/condition-integer-2.sym @@ -4,11 +4,11 @@ (byte*) SCREEN (const byte*) SCREEN#0 SCREEN = (byte*) 1024 (byte) idx -(byte) idx#1 reg byte y 11.0 +(byte) idx#1 reg byte y 6.5 (byte) idx#10 reg byte y 7.8 (byte) idx#12 reg byte y 17.5 (byte) idx#13 reg byte y 7.333333333333333 -(byte) idx#15 reg byte y 9.25 +(byte) idx#19 reg byte y 16.5 (byte) idx#2 reg byte y 4.0 (byte) idx#3 reg byte y 22.0 (byte) idx#4 reg byte y 4.0 @@ -22,8 +22,8 @@ (label) main::@7 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 11.0 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 11.0 (byte) main::j (byte) main::j#1 reg byte a 11.0 (byte) main::j#2 reg byte a 22.0 @@ -31,8 +31,8 @@ (byte) main::k#1 reg byte a 16.5 (byte) main::k#2 reg byte a 11.0 -reg byte x [ main::i#2 main::i#1 ] -reg byte y [ idx#15 idx#1 ] +reg byte x [ main::i#4 main::i#1 ] +reg byte y [ idx#19 idx#1 ] reg byte a [ main::j#2 main::j#1 ] reg byte y [ idx#10 idx#2 idx#3 ] reg byte a [ main::k#2 main::k#1 ] diff --git a/src/test/ref/condition-integer-3.asm b/src/test/ref/condition-integer-3.asm index 45b12030f..efe0aabdf 100644 --- a/src/test/ref/condition-integer-3.asm +++ b/src/test/ref/condition-integer-3.asm @@ -7,11 +7,6 @@ main: { ldx #0 ldy #-2 - b1: - cpy #0 - bne b2 - lda #'0' - jmp b3 b2: lda #'+' b3: @@ -21,4 +16,9 @@ main: { cpy #3 bne b1 rts + b1: + cpy #0 + bne b2 + lda #'0' + jmp b3 } diff --git a/src/test/ref/condition-integer-3.cfg b/src/test/ref/condition-integer-3.cfg index ccd8c8740..e846a3952 100644 --- a/src/test/ref/condition-integer-3.cfg +++ b/src/test/ref/condition-integer-3.cfg @@ -9,22 +9,23 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@3 - [5] (byte) main::idx#2 ← phi( main/(byte) 0 main::@3/(byte) main::idx#1 ) - [5] (signed byte) main::i#2 ← phi( main/(signed byte) -2 main::@3/(signed byte) main::i#1 ) - [6] if((signed byte) 0!=(signed byte) main::i#2) goto main::@2 - to:main::@3 -main::@2: scope:[main] from main::@1 - [7] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::idx#7 ← phi( main::@1/(byte) main::idx#1 main/(byte) 0 ) + [5] (signed byte) main::i#7 ← phi( main::@1/(signed byte) main::i#1 main/(signed byte) -2 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@2 - [8] (byte) main::j#0 ← phi( main::@2/(byte) '+' main::@1/(byte) '0' ) - [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← (byte) main::j#0 - [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 - [11] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 - [12] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 + [6] (byte) main::idx#6 ← phi( main::@2/(byte) main::idx#7 main::@1/(byte) main::idx#1 ) + [6] (signed byte) main::i#6 ← phi( main::@2/(signed byte) main::i#7 main::@1/(signed byte) main::i#1 ) + [6] (byte) main::j#0 ← phi( main::@2/(byte) '+' main::@1/(byte) '0' ) + [7] *((const byte*) SCREEN#0 + (byte) main::idx#6) ← (byte) main::j#0 + [8] (byte) main::idx#1 ← ++ (byte) main::idx#6 + [9] (signed byte) main::i#1 ← ++ (signed byte) main::i#6 + [10] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 to:main::@return main::@return: scope:[main] from main::@3 - [13] return + [11] return to:@return +main::@1: scope:[main] from main::@3 + [12] if((signed byte) 0!=(signed byte) main::i#1) goto main::@2 + to:main::@3 diff --git a/src/test/ref/condition-integer-3.log b/src/test/ref/condition-integer-3.log index f5423b27a..fc7554b32 100644 --- a/src/test/ref/condition-integer-3.log +++ b/src/test/ref/condition-integer-3.log @@ -114,12 +114,26 @@ Constant (const byte) main::$0 = '0' Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [14] main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value [16] if(main::i#1!=rangelast(-2,2)) goto main::@1 to (number) 3 +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (snumber) 3 in if((signed byte) main::i#1!=(number) 3) goto main::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast 3 Successful SSA optimization PassNCastSimplification Finalized signed number type (signed byte) 3 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (signed byte) main::i#1 = (signed byte) main::i#2 +Alias (byte) main::idx#1 = (byte) main::idx#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (signed byte) main::i#9 (const signed byte) main::i#0 +Identical Phi Values (byte) main::idx#9 (const byte) main::idx#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (main::@1_1) in block main::@3 +Removing PHI-reference to removed block (main::@1_1) in block main::@3 +if() condition always true - replacing block destination [12] if((signed byte) 0!=(const signed byte) main::i#0) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Alias (signed byte) main::i#1 = (signed byte) main::i#8 +Alias (byte) main::idx#1 = (byte) main::idx#8 +Successful SSA optimization Pass2AliasElimination Inlining constant with var siblings (const byte) main::idx#0 Inlining constant with var siblings (const signed byte) main::i#0 Constant inlined main::i#0 = (signed byte) -2 @@ -127,22 +141,26 @@ Constant inlined main::idx#0 = (byte) 0 Constant inlined main::$1 = (byte) '+' Constant inlined main::$0 = (byte) '0' Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@8(between main::@4 and main::@1) +Added new block during phi lifting main::@8(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@3 -Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 -Created 3 initial phi equivalence classes -Coalesced [15] main::i#6 ← main::i#1 -Coalesced [16] main::idx#6 ← main::idx#1 +Created 5 initial phi equivalence classes +Coalesced [8] main::i#11 ← main::i#7 +Coalesced [9] main::idx#11 ← main::idx#7 +Coalesced [17] main::i#12 ← main::i#1 +Coalesced [18] main::idx#12 ← main::idx#1 +Coalesced (already) [19] main::i#10 ← main::i#1 +Coalesced (already) [20] main::idx#10 ← main::idx#1 Coalesced down to 3 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@8 Renumbering block main::@4 to main::@3 @@ -150,7 +168,6 @@ Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@2 FINAL CONTROL FLOW GRAPH @begin: scope:[] from @@ -164,50 +181,53 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@3 - [5] (byte) main::idx#2 ← phi( main/(byte) 0 main::@3/(byte) main::idx#1 ) - [5] (signed byte) main::i#2 ← phi( main/(signed byte) -2 main::@3/(signed byte) main::i#1 ) - [6] if((signed byte) 0!=(signed byte) main::i#2) goto main::@2 - to:main::@3 -main::@2: scope:[main] from main::@1 - [7] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::idx#7 ← phi( main::@1/(byte) main::idx#1 main/(byte) 0 ) + [5] (signed byte) main::i#7 ← phi( main::@1/(signed byte) main::i#1 main/(signed byte) -2 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@2 - [8] (byte) main::j#0 ← phi( main::@2/(byte) '+' main::@1/(byte) '0' ) - [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← (byte) main::j#0 - [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 - [11] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 - [12] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 + [6] (byte) main::idx#6 ← phi( main::@2/(byte) main::idx#7 main::@1/(byte) main::idx#1 ) + [6] (signed byte) main::i#6 ← phi( main::@2/(signed byte) main::i#7 main::@1/(signed byte) main::i#1 ) + [6] (byte) main::j#0 ← phi( main::@2/(byte) '+' main::@1/(byte) '0' ) + [7] *((const byte*) SCREEN#0 + (byte) main::idx#6) ← (byte) main::j#0 + [8] (byte) main::idx#1 ← ++ (byte) main::idx#6 + [9] (signed byte) main::i#1 ← ++ (signed byte) main::i#6 + [10] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 to:main::@return main::@return: scope:[main] from main::@3 - [13] return + [11] return to:@return +main::@1: scope:[main] from main::@3 + [12] if((signed byte) 0!=(signed byte) main::i#1) goto main::@2 + to:main::@3 VARIABLE REGISTER WEIGHTS (byte*) SCREEN (void()) main() (signed byte) main::i -(signed byte) main::i#1 16.5 -(signed byte) main::i#2 5.5 +(signed byte) main::i#1 168.33333333333331 +(signed byte) main::i#6 71.0 +(signed byte) main::i#7 112.0 (byte) main::idx -(byte) main::idx#1 7.333333333333333 -(byte) main::idx#2 6.6000000000000005 +(byte) main::idx#1 75.75 +(byte) main::idx#6 157.0 +(byte) main::idx#7 112.0 (byte) main::j -(byte) main::j#0 11.0 +(byte) main::j#0 101.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] -[ main::idx#2 main::idx#1 ] [ main::j#0 ] +[ main::i#6 main::i#7 main::i#1 ] +[ main::idx#6 main::idx#7 main::idx#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ main::idx#2 main::idx#1 ] [ main::j#0 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::idx#2 main::idx#1 ] -Allocated zp ZP_BYTE:4 [ main::j#0 ] +[ main::i#6 main::i#7 main::i#1 ] +[ main::idx#6 main::idx#7 main::idx#1 ] +Allocated zp ZP_BYTE:2 [ main::j#0 ] +Allocated zp ZP_BYTE:3 [ main::i#6 main::i#7 main::i#1 ] +Allocated zp ZP_BYTE:4 [ main::idx#6 main::idx#7 main::idx#1 ] INITIAL ASM Target platform is c64basic @@ -238,79 +258,80 @@ bend_from_b1: bend: // main main: { - .label j = 4 - .label idx = 3 - .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::idx#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + .label j = 2 + .label idx = 4 + .label i = 3 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::idx#7 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta idx - // [5] phi (signed byte) main::i#2 = (signed byte) -2 [phi:main->main::@1#1] -- vbsz1=vbsc1 + // [5] phi (signed byte) main::i#7 = (signed byte) -2 [phi:main->main::@2#1] -- vbsz1=vbsc1 lda #-2 sta i - jmp b1 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - b1_from_b3: - // [5] phi (byte) main::idx#2 = (byte) main::idx#1 [phi:main::@3->main::@1#0] -- register_copy - // [5] phi (signed byte) main::i#2 = (signed byte) main::i#1 [phi:main::@3->main::@1#1] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((signed byte) 0!=(signed byte) main::i#2) goto main::@2 -- vbsc1_neq_vbsz1_then_la1 - lda #0 - cmp i - bne b2_from_b1 - // [8] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b3_from_b1: - // [8] phi (byte) main::j#0 = (byte) '0' [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 - lda #'0' - sta j - jmp b3 - // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: + // [5] phi (byte) main::idx#7 = (byte) main::idx#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (signed byte) main::i#7 = (signed byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy jmp b2 // main::@2 b2: - // [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] b3_from_b2: - // [8] phi (byte) main::j#0 = (byte) '+' [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 + // [6] phi (byte) main::idx#6 = (byte) main::idx#7 [phi:main::@2->main::@3#0] -- register_copy + // [6] phi (signed byte) main::i#6 = (signed byte) main::i#7 [phi:main::@2->main::@3#1] -- register_copy + // [6] phi (byte) main::j#0 = (byte) '+' [phi:main::@2->main::@3#2] -- vbuz1=vbuc1 lda #'+' sta j jmp b3 // main::@3 b3: - // [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← (byte) main::j#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [7] *((const byte*) SCREEN#0 + (byte) main::idx#6) ← (byte) main::j#0 -- pbuc1_derefidx_vbuz1=vbuz2 lda j ldy idx sta SCREEN,y - // [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 -- vbuz1=_inc_vbuz1 + // [8] (byte) main::idx#1 ← ++ (byte) main::idx#6 -- vbuz1=_inc_vbuz1 inc idx - // [11] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 -- vbsz1=_inc_vbsz1 + // [9] (signed byte) main::i#1 ← ++ (signed byte) main::i#6 -- vbsz1=_inc_vbsz1 inc i - // [12] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 + // [10] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 lda #3 cmp i - bne b1_from_b3 + bne b1 jmp breturn // main::@return breturn: - // [13] return + // [11] return rts + // main::@1 + b1: + // [12] if((signed byte) 0!=(signed byte) main::i#1) goto main::@2 -- vbsc1_neq_vbsz1_then_la1 + lda #0 + cmp i + bne b2_from_b1 + // [6] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + // [6] phi (byte) main::idx#6 = (byte) main::idx#1 [phi:main::@1->main::@3#0] -- register_copy + // [6] phi (signed byte) main::i#6 = (signed byte) main::i#1 [phi:main::@1->main::@3#1] -- register_copy + // [6] phi (byte) main::j#0 = (byte) '0' [phi:main::@1->main::@3#2] -- vbuz1=vbuc1 + lda #'0' + sta j + jmp b3 } // File Data 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::idx#2 main::idx#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:4 [ main::j#0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::j#0 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::i#6 main::i#7 main::i#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ main::idx#6 main::idx#7 main::idx#1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 22: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 13.93: zp ZP_BYTE:3 [ main::idx#2 main::idx#1 ] 11: zp ZP_BYTE:4 [ main::j#0 ] +Uplift Scope [main] 351.33: zp ZP_BYTE:3 [ main::i#6 main::i#7 main::i#1 ] 344.75: zp ZP_BYTE:4 [ main::idx#6 main::idx#7 main::idx#1 ] 101: zp ZP_BYTE:2 [ main::j#0 ] Uplift Scope [] -Uplifting [main] best 458 combination reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::idx#2 main::idx#1 ] reg byte a [ main::j#0 ] -Uplifting [] best 458 combination +Uplifting [main] best 3218 combination reg byte y [ main::i#6 main::i#7 main::i#1 ] reg byte x [ main::idx#6 main::idx#7 main::idx#1 ] reg byte a [ main::j#0 ] +Uplifting [] best 3218 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -340,84 +361,82 @@ bend_from_b1: bend: // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::idx#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::idx#7 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi (signed byte) main::i#2 = (signed byte) -2 [phi:main->main::@1#1] -- vbsyy=vbsc1 + // [5] phi (signed byte) main::i#7 = (signed byte) -2 [phi:main->main::@2#1] -- vbsyy=vbsc1 ldy #-2 - jmp b1 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - b1_from_b3: - // [5] phi (byte) main::idx#2 = (byte) main::idx#1 [phi:main::@3->main::@1#0] -- register_copy - // [5] phi (signed byte) main::i#2 = (signed byte) main::i#1 [phi:main::@3->main::@1#1] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((signed byte) 0!=(signed byte) main::i#2) goto main::@2 -- vbsc1_neq_vbsyy_then_la1 - cpy #0 - bne b2_from_b1 - // [8] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b3_from_b1: - // [8] phi (byte) main::j#0 = (byte) '0' [phi:main::@1->main::@3#0] -- vbuaa=vbuc1 - lda #'0' - jmp b3 - // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: + // [5] phi (byte) main::idx#7 = (byte) main::idx#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (signed byte) main::i#7 = (signed byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy jmp b2 // main::@2 b2: - // [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] b3_from_b2: - // [8] phi (byte) main::j#0 = (byte) '+' [phi:main::@2->main::@3#0] -- vbuaa=vbuc1 + // [6] phi (byte) main::idx#6 = (byte) main::idx#7 [phi:main::@2->main::@3#0] -- register_copy + // [6] phi (signed byte) main::i#6 = (signed byte) main::i#7 [phi:main::@2->main::@3#1] -- register_copy + // [6] phi (byte) main::j#0 = (byte) '+' [phi:main::@2->main::@3#2] -- vbuaa=vbuc1 lda #'+' jmp b3 // main::@3 b3: - // [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← (byte) main::j#0 -- pbuc1_derefidx_vbuxx=vbuaa + // [7] *((const byte*) SCREEN#0 + (byte) main::idx#6) ← (byte) main::j#0 -- pbuc1_derefidx_vbuxx=vbuaa sta SCREEN,x - // [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 -- vbuxx=_inc_vbuxx + // [8] (byte) main::idx#1 ← ++ (byte) main::idx#6 -- vbuxx=_inc_vbuxx inx - // [11] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 -- vbsyy=_inc_vbsyy + // [9] (signed byte) main::i#1 ← ++ (signed byte) main::i#6 -- vbsyy=_inc_vbsyy iny - // [12] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 -- vbsyy_neq_vbsc1_then_la1 + // [10] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 -- vbsyy_neq_vbsc1_then_la1 cpy #3 - bne b1_from_b3 + bne b1 jmp breturn // main::@return breturn: - // [13] return + // [11] return rts + // main::@1 + b1: + // [12] if((signed byte) 0!=(signed byte) main::i#1) goto main::@2 -- vbsc1_neq_vbsyy_then_la1 + cpy #0 + bne b2_from_b1 + // [6] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + // [6] phi (byte) main::idx#6 = (byte) main::idx#1 [phi:main::@1->main::@3#0] -- register_copy + // [6] phi (signed byte) main::i#6 = (signed byte) main::i#1 [phi:main::@1->main::@3#1] -- register_copy + // [6] phi (byte) main::j#0 = (byte) '0' [phi:main::@1->main::@3#2] -- vbuaa=vbuc1 + lda #'0' + jmp b3 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Replacing label b2_from_b1 with b2 -Replacing label b1_from_b3 with b1 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b1_from_b3: Removing instruction b2_from_b1: Removing instruction b3_from_b2: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b3_from_b1: +Removing instruction b2_from_main: Removing instruction breturn: +Removing instruction b3_from_b1: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Removing instruction jmp b1 +Removing instruction jmp b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -434,21 +453,23 @@ FINAL SYMBOL TABLE (label) main::@3 (label) main::@return (signed byte) main::i -(signed byte) main::i#1 reg byte y 16.5 -(signed byte) main::i#2 reg byte y 5.5 +(signed byte) main::i#1 reg byte y 168.33333333333331 +(signed byte) main::i#6 reg byte y 71.0 +(signed byte) main::i#7 reg byte y 112.0 (byte) main::idx -(byte) main::idx#1 reg byte x 7.333333333333333 -(byte) main::idx#2 reg byte x 6.6000000000000005 +(byte) main::idx#1 reg byte x 75.75 +(byte) main::idx#6 reg byte x 157.0 +(byte) main::idx#7 reg byte x 112.0 (byte) main::j -(byte) main::j#0 reg byte a 11.0 +(byte) main::j#0 reg byte a 101.0 -reg byte y [ main::i#2 main::i#1 ] -reg byte x [ main::idx#2 main::idx#1 ] reg byte a [ main::j#0 ] +reg byte y [ main::i#6 main::i#7 main::i#1 ] +reg byte x [ main::idx#6 main::idx#7 main::idx#1 ] FINAL ASSEMBLER -Score: 296 +Score: 2546 // File Comments // Tests using integer conditions in ternary operator @@ -468,48 +489,51 @@ Score: 296 // @end // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::idx#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::idx#7 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi (signed byte) main::i#2 = (signed byte) -2 [phi:main->main::@1#1] -- vbsyy=vbsc1 + // [5] phi (signed byte) main::i#7 = (signed byte) -2 [phi:main->main::@2#1] -- vbsyy=vbsc1 ldy #-2 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - // [5] phi (byte) main::idx#2 = (byte) main::idx#1 [phi:main::@3->main::@1#0] -- register_copy - // [5] phi (signed byte) main::i#2 = (signed byte) main::i#1 [phi:main::@3->main::@1#1] -- register_copy - // main::@1 - b1: - // i?'+':'0' - // [6] if((signed byte) 0!=(signed byte) main::i#2) goto main::@2 -- vbsc1_neq_vbsyy_then_la1 - cpy #0 - bne b2 - // [8] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - // [8] phi (byte) main::j#0 = (byte) '0' [phi:main::@1->main::@3#0] -- vbuaa=vbuc1 - lda #'0' - jmp b3 - // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::idx#7 = (byte) main::idx#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (signed byte) main::i#7 = (signed byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy // main::@2 b2: - // [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - // [8] phi (byte) main::j#0 = (byte) '+' [phi:main::@2->main::@3#0] -- vbuaa=vbuc1 + // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [6] phi (byte) main::idx#6 = (byte) main::idx#7 [phi:main::@2->main::@3#0] -- register_copy + // [6] phi (signed byte) main::i#6 = (signed byte) main::i#7 [phi:main::@2->main::@3#1] -- register_copy + // [6] phi (byte) main::j#0 = (byte) '+' [phi:main::@2->main::@3#2] -- vbuaa=vbuc1 lda #'+' // main::@3 b3: // SCREEN[idx++] = j - // [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← (byte) main::j#0 -- pbuc1_derefidx_vbuxx=vbuaa + // [7] *((const byte*) SCREEN#0 + (byte) main::idx#6) ← (byte) main::j#0 -- pbuc1_derefidx_vbuxx=vbuaa sta SCREEN,x // SCREEN[idx++] = j; - // [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 -- vbuxx=_inc_vbuxx + // [8] (byte) main::idx#1 ← ++ (byte) main::idx#6 -- vbuxx=_inc_vbuxx inx // for( signed byte i: -2..2) - // [11] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 -- vbsyy=_inc_vbsyy + // [9] (signed byte) main::i#1 ← ++ (signed byte) main::i#6 -- vbsyy=_inc_vbsyy iny - // [12] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 -- vbsyy_neq_vbsc1_then_la1 + // [10] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 -- vbsyy_neq_vbsc1_then_la1 cpy #3 bne b1 // main::@return // } - // [13] return + // [11] return rts + // main::@1 + b1: + // i?'+':'0' + // [12] if((signed byte) 0!=(signed byte) main::i#1) goto main::@2 -- vbsc1_neq_vbsyy_then_la1 + cpy #0 + bne b2 + // [6] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [6] phi (byte) main::idx#6 = (byte) main::idx#1 [phi:main::@1->main::@3#0] -- register_copy + // [6] phi (signed byte) main::i#6 = (signed byte) main::i#1 [phi:main::@1->main::@3#1] -- register_copy + // [6] phi (byte) main::j#0 = (byte) '0' [phi:main::@1->main::@3#2] -- vbuaa=vbuc1 + lda #'0' + jmp b3 } // File Data diff --git a/src/test/ref/condition-integer-3.sym b/src/test/ref/condition-integer-3.sym index 40fe5248d..6539e8176 100644 --- a/src/test/ref/condition-integer-3.sym +++ b/src/test/ref/condition-integer-3.sym @@ -9,14 +9,16 @@ (label) main::@3 (label) main::@return (signed byte) main::i -(signed byte) main::i#1 reg byte y 16.5 -(signed byte) main::i#2 reg byte y 5.5 +(signed byte) main::i#1 reg byte y 168.33333333333331 +(signed byte) main::i#6 reg byte y 71.0 +(signed byte) main::i#7 reg byte y 112.0 (byte) main::idx -(byte) main::idx#1 reg byte x 7.333333333333333 -(byte) main::idx#2 reg byte x 6.6000000000000005 +(byte) main::idx#1 reg byte x 75.75 +(byte) main::idx#6 reg byte x 157.0 +(byte) main::idx#7 reg byte x 112.0 (byte) main::j -(byte) main::j#0 reg byte a 11.0 +(byte) main::j#0 reg byte a 101.0 -reg byte y [ main::i#2 main::i#1 ] -reg byte x [ main::idx#2 main::idx#1 ] reg byte a [ main::j#0 ] +reg byte y [ main::i#6 main::i#7 main::i#1 ] +reg byte x [ main::idx#6 main::idx#7 main::idx#1 ] diff --git a/src/test/ref/const-identification.asm b/src/test/ref/const-identification.asm index 61ccd2c55..2e7c9201c 100644 --- a/src/test/ref/const-identification.asm +++ b/src/test/ref/const-identification.asm @@ -21,14 +21,12 @@ line: { .const x0 = 0 .const x1 = $a ldy #x0 - b1: - cpy #x1+1 - bcc b2 - rts b2: jsr plot iny - jmp b1 + cpy #x1+1 + bcc b2 + rts } // plot(byte register(Y) x) plot: { diff --git a/src/test/ref/const-identification.cfg b/src/test/ref/const-identification.cfg index 65cd14162..fd33475bb 100644 --- a/src/test/ref/const-identification.cfg +++ b/src/test/ref/const-identification.cfg @@ -23,21 +23,21 @@ main::@2: scope:[main] from main::@1 main::@2 to:main::@2 line: scope:[line] from main::@2 [12] phi() - to:line::@1 -line::@1: scope:[line] from line line::@3 - [13] (byte) line::x#2 ← phi( line/(const byte) line::x0#0 line::@3/(byte) line::x#1 ) - [14] if((byte) line::x#2<(const byte) line::x1#0+(byte) 1) goto line::@2 - to:line::@return -line::@return: scope:[line] from line::@1 - [15] return - to:@return -line::@2: scope:[line] from line::@1 - [16] (byte) plot::x#1 ← (byte) line::x#2 - [17] call plot + to:line::@2 +line::@2: scope:[line] from line line::@1 + [13] (byte) line::x#5 ← phi( line::@1/(byte) line::x#1 line/(const byte) line::x0#0 ) + [14] (byte) plot::x#1 ← (byte) line::x#5 + [15] call plot to:line::@3 line::@3: scope:[line] from line::@2 - [18] (byte) line::x#1 ← ++ (byte) line::x#2 + [16] (byte) line::x#1 ← ++ (byte) line::x#5 to:line::@1 +line::@1: scope:[line] from line::@3 + [17] if((byte) line::x#1<(const byte) line::x1#0+(byte) 1) goto line::@2 + to:line::@return +line::@return: scope:[line] from line::@1 + [18] return + to:@return plot: scope:[plot] from line::@2 [19] (byte) plot::idx#0 ← *((const byte*) plots#0 + (byte) plot::x#1) [20] (byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte) 1 diff --git a/src/test/ref/const-identification.log b/src/test/ref/const-identification.log index 228b32ec9..b918919b3 100644 --- a/src/test/ref/const-identification.log +++ b/src/test/ref/const-identification.log @@ -204,6 +204,7 @@ Removing PHI-reference to removed block (line::@3) in block plot Removing unused block line::@3 Removing unused block line::@11 Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $28 in if((byte) main::i#1!=(number) $28) goto main::@1 Adding number conversion cast (unumber) line::x1#0+1 in if((byte) line::x#2<(const byte) line::x1#0+(number) 1) goto line::@6 Adding number conversion cast (unumber) 1 in if((byte) line::x#2<(unumber)(const byte) line::x1#0+(number) 1) goto line::@6 @@ -215,14 +216,21 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) line::x#1 = (byte) line::x#2 +Alias (byte) line::x#5 = (byte) line::x#6 +Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) plot::x#2 (byte) plot::x#1 +Identical Phi Values (byte) line::x#7 (const byte) line::x0#0 Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [22] if((const byte) line::x0#0<(const byte) line::x1#0+(byte) 1) goto line::@6 +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const byte) plot::x#0 Successful SSA optimization PassNEliminateUnusedVars Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@6(between main::@1 and main::@1) +Added new block during phi lifting line::@13(between line::@5 and line::@6) Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @4 @@ -232,19 +240,22 @@ Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::@5 Adding NOP phi() at start of line Adding NOP phi() at start of line::@1 +Adding NOP phi() at start of line::@5_1 CALL GRAPH Calls in [] to main:2 Calls in [main] to line:12 -Calls in [line] to plot:21 +Calls in [line] to plot:20 Created 2 initial phi equivalence classes Coalesced [14] main::i#3 ← main::i#1 -Coalesced [23] line::x#5 ← line::x#1 +Coalesced [24] line::x#8 ← line::x#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 Culled Empty Block (label) line::@1 +Culled Empty Block (label) line::@5_1 +Culled Empty Block (label) line::@13 Renumbering block @3 to @1 Renumbering block main::@3 to main::@2 Renumbering block line::@5 to line::@1 @@ -283,21 +294,21 @@ main::@2: scope:[main] from main::@1 main::@2 to:main::@2 line: scope:[line] from main::@2 [12] phi() - to:line::@1 -line::@1: scope:[line] from line line::@3 - [13] (byte) line::x#2 ← phi( line/(const byte) line::x0#0 line::@3/(byte) line::x#1 ) - [14] if((byte) line::x#2<(const byte) line::x1#0+(byte) 1) goto line::@2 - to:line::@return -line::@return: scope:[line] from line::@1 - [15] return - to:@return -line::@2: scope:[line] from line::@1 - [16] (byte) plot::x#1 ← (byte) line::x#2 - [17] call plot + to:line::@2 +line::@2: scope:[line] from line line::@1 + [13] (byte) line::x#5 ← phi( line::@1/(byte) line::x#1 line/(const byte) line::x0#0 ) + [14] (byte) plot::x#1 ← (byte) line::x#5 + [15] call plot to:line::@3 line::@3: scope:[line] from line::@2 - [18] (byte) line::x#1 ← ++ (byte) line::x#2 + [16] (byte) line::x#1 ← ++ (byte) line::x#5 to:line::@1 +line::@1: scope:[line] from line::@3 + [17] if((byte) line::x#1<(const byte) line::x1#0+(byte) 1) goto line::@2 + to:line::@return +line::@return: scope:[line] from line::@1 + [18] return + to:@return plot: scope:[plot] from line::@2 [19] (byte) plot::idx#0 ← *((const byte*) plots#0 + (byte) plot::x#1) [20] (byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte) 1 @@ -312,8 +323,8 @@ VARIABLE REGISTER WEIGHTS (byte*) SCREEN (void()) line((byte) line::x0 , (byte) line::x1) (byte) line::x -(byte) line::x#1 202.0 -(byte) line::x#2 101.0 +(byte) line::x#1 151.5 +(byte) line::x#5 101.0 (byte) line::x0 (byte) line::x1 (void()) main() @@ -330,18 +341,18 @@ VARIABLE REGISTER WEIGHTS Initial phi equivalence classes [ main::i#2 main::i#1 ] -[ line::x#2 line::x#1 ] +[ line::x#5 line::x#1 ] Added variable plot::x#1 to zero page equivalence class [ plot::x#1 ] Added variable plot::idx#0 to zero page equivalence class [ plot::idx#0 ] Added variable plot::$0 to zero page equivalence class [ plot::$0 ] Complete equivalence classes [ main::i#2 main::i#1 ] -[ line::x#2 line::x#1 ] +[ line::x#5 line::x#1 ] [ plot::x#1 ] [ plot::idx#0 ] [ plot::$0 ] Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ line::x#2 line::x#1 ] +Allocated zp ZP_BYTE:3 [ line::x#5 line::x#1 ] Allocated zp ZP_BYTE:4 [ plot::x#1 ] Allocated zp ZP_BYTE:5 [ plot::idx#0 ] Allocated zp ZP_BYTE:6 [ plot::$0 ] @@ -418,39 +429,40 @@ line: { .const x0 = 0 .const x1 = $a .label x = 3 - // [13] phi from line to line::@1 [phi:line->line::@1] - b1_from_line: - // [13] phi (byte) line::x#2 = (const byte) line::x0#0 [phi:line->line::@1#0] -- vbuz1=vbuc1 + // [13] phi from line to line::@2 [phi:line->line::@2] + b2_from_line: + // [13] phi (byte) line::x#5 = (const byte) line::x0#0 [phi:line->line::@2#0] -- vbuz1=vbuc1 lda #x0 sta x - jmp b1 - // line::@1 - b1: - // [14] if((byte) line::x#2<(const byte) line::x1#0+(byte) 1) goto line::@2 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #x1+1 - bcc b2 - jmp breturn - // line::@return - breturn: - // [15] return - rts + jmp b2 + // [13] phi from line::@1 to line::@2 [phi:line::@1->line::@2] + b2_from_b1: + // [13] phi (byte) line::x#5 = (byte) line::x#1 [phi:line::@1->line::@2#0] -- register_copy + jmp b2 // line::@2 b2: - // [16] (byte) plot::x#1 ← (byte) line::x#2 -- vbuz1=vbuz2 + // [14] (byte) plot::x#1 ← (byte) line::x#5 -- vbuz1=vbuz2 lda x sta plot.x - // [17] call plot + // [15] call plot jsr plot jmp b3 // line::@3 b3: - // [18] (byte) line::x#1 ← ++ (byte) line::x#2 -- vbuz1=_inc_vbuz1 + // [16] (byte) line::x#1 ← ++ (byte) line::x#5 -- vbuz1=_inc_vbuz1 inc x - // [13] phi from line::@3 to line::@1 [phi:line::@3->line::@1] - b1_from_b3: - // [13] phi (byte) line::x#2 = (byte) line::x#1 [phi:line::@3->line::@1#0] -- register_copy jmp b1 + // line::@1 + b1: + // [17] if((byte) line::x#1<(const byte) line::x1#0+(byte) 1) goto line::@2 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #x1+1 + bcc b2_from_b1 + jmp breturn + // line::@return + breturn: + // [18] return + rts } // plot // plot(byte zeropage(4) x) @@ -485,23 +497,23 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ ma Statement [6] *((const byte*) plots#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ line::x#2 line::x#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ line::x#5 line::x#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:4 [ plot::x#1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:5 [ plot::idx#0 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:6 [ plot::$0 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [line] 303: zp ZP_BYTE:3 [ line::x#2 line::x#1 ] +Uplift Scope [line] 252.5: zp ZP_BYTE:3 [ line::x#5 line::x#1 ] Uplift Scope [plot] 103: zp ZP_BYTE:4 [ plot::x#1 ] 4: zp ZP_BYTE:6 [ plot::$0 ] 3: zp ZP_BYTE:5 [ plot::idx#0 ] Uplift Scope [main] 34.83: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplift Scope [] -Uplifting [line] best 4684 combination zp ZP_BYTE:3 [ line::x#2 line::x#1 ] -Uplifting [plot] best 4368 combination reg byte y [ plot::x#1 ] reg byte a [ plot::$0 ] reg byte x [ plot::idx#0 ] -Uplifting [main] best 4218 combination reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 4218 combination -Attempting to uplift remaining variables inzp ZP_BYTE:3 [ line::x#2 line::x#1 ] -Uplifting [line] best 3018 combination reg byte y [ line::x#2 line::x#1 ] +Uplifting [line] best 4984 combination zp ZP_BYTE:3 [ line::x#5 line::x#1 ] +Uplifting [plot] best 4668 combination reg byte y [ plot::x#1 ] reg byte a [ plot::$0 ] reg byte x [ plot::idx#0 ] +Uplifting [main] best 4518 combination reg byte x [ main::i#2 main::i#1 ] +Uplifting [] best 4518 combination +Attempting to uplift remaining variables inzp ZP_BYTE:3 [ line::x#5 line::x#1 ] +Uplifting [line] best 3318 combination reg byte y [ line::x#5 line::x#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -568,35 +580,36 @@ main: { line: { .const x0 = 0 .const x1 = $a - // [13] phi from line to line::@1 [phi:line->line::@1] - b1_from_line: - // [13] phi (byte) line::x#2 = (const byte) line::x0#0 [phi:line->line::@1#0] -- vbuyy=vbuc1 + // [13] phi from line to line::@2 [phi:line->line::@2] + b2_from_line: + // [13] phi (byte) line::x#5 = (const byte) line::x0#0 [phi:line->line::@2#0] -- vbuyy=vbuc1 ldy #x0 - jmp b1 - // line::@1 - b1: - // [14] if((byte) line::x#2<(const byte) line::x1#0+(byte) 1) goto line::@2 -- vbuyy_lt_vbuc1_then_la1 - cpy #x1+1 - bcc b2 - jmp breturn - // line::@return - breturn: - // [15] return - rts + jmp b2 + // [13] phi from line::@1 to line::@2 [phi:line::@1->line::@2] + b2_from_b1: + // [13] phi (byte) line::x#5 = (byte) line::x#1 [phi:line::@1->line::@2#0] -- register_copy + jmp b2 // line::@2 b2: - // [16] (byte) plot::x#1 ← (byte) line::x#2 - // [17] call plot + // [14] (byte) plot::x#1 ← (byte) line::x#5 + // [15] call plot jsr plot jmp b3 // line::@3 b3: - // [18] (byte) line::x#1 ← ++ (byte) line::x#2 -- vbuyy=_inc_vbuyy + // [16] (byte) line::x#1 ← ++ (byte) line::x#5 -- vbuyy=_inc_vbuyy iny - // [13] phi from line::@3 to line::@1 [phi:line::@3->line::@1] - b1_from_b3: - // [13] phi (byte) line::x#2 = (byte) line::x#1 [phi:line::@3->line::@1#0] -- register_copy jmp b1 + // line::@1 + b1: + // [17] if((byte) line::x#1<(const byte) line::x1#0+(byte) 1) goto line::@2 -- vbuyy_lt_vbuc1_then_la1 + cpy #x1+1 + bcc b2_from_b1 + jmp breturn + // line::@return + breturn: + // [18] return + rts } // plot // plot(byte register(Y) x) @@ -622,13 +635,15 @@ Removing instruction jmp b1 Removing instruction jmp bend Removing instruction jmp b1 Removing instruction jmp b2 +Removing instruction jmp b2 +Removing instruction jmp b3 Removing instruction jmp b1 Removing instruction jmp breturn -Removing instruction jmp b3 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Replacing label b1_from_b1 with b1 Replacing label b2_from_b2 with b2 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: @@ -637,19 +652,21 @@ Removing instruction b1_from_b1: Removing instruction b2_from_b1: Removing instruction b2_from_b2: Removing instruction line_from_b2: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction b1_from_main: -Removing instruction b1_from_line: -Removing instruction breturn: +Removing instruction b2_from_line: Removing instruction b3: -Removing instruction b1_from_b3: +Removing instruction b1: +Removing instruction breturn: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin Removing instruction jmp b1 +Removing instruction jmp b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -666,8 +683,8 @@ FINAL SYMBOL TABLE (label) line::@3 (label) line::@return (byte) line::x -(byte) line::x#1 reg byte y 202.0 -(byte) line::x#2 reg byte y 101.0 +(byte) line::x#1 reg byte y 151.5 +(byte) line::x#5 reg byte y 101.0 (byte) line::x0 (const byte) line::x0#0 x0 = (byte) 0 (byte) line::x1 @@ -689,14 +706,14 @@ FINAL SYMBOL TABLE (const byte*) plots#0 plots = (byte*) 4096 reg byte x [ main::i#2 main::i#1 ] -reg byte y [ line::x#2 line::x#1 ] +reg byte y [ line::x#5 line::x#1 ] reg byte y [ plot::x#1 ] reg byte x [ plot::idx#0 ] reg byte a [ plot::$0 ] FINAL ASSEMBLER -Score: 2013 +Score: 1713 // File Comments // Upstart @@ -749,32 +766,29 @@ main: { line: { .const x0 = 0 .const x1 = $a - // [13] phi from line to line::@1 [phi:line->line::@1] - // [13] phi (byte) line::x#2 = (const byte) line::x0#0 [phi:line->line::@1#0] -- vbuyy=vbuc1 + // [13] phi from line to line::@2 [phi:line->line::@2] + // [13] phi (byte) line::x#5 = (const byte) line::x0#0 [phi:line->line::@2#0] -- vbuyy=vbuc1 ldy #x0 - // line::@1 - b1: + // [13] phi from line::@1 to line::@2 [phi:line::@1->line::@2] + // [13] phi (byte) line::x#5 = (byte) line::x#1 [phi:line::@1->line::@2#0] -- register_copy + // line::@2 + b2: + // plot(x) + // [14] (byte) plot::x#1 ← (byte) line::x#5 + // [15] call plot + jsr plot + // line::@3 // for(byte x = x0; x<=x1; x++) - // [14] if((byte) line::x#2<(const byte) line::x1#0+(byte) 1) goto line::@2 -- vbuyy_lt_vbuc1_then_la1 + // [16] (byte) line::x#1 ← ++ (byte) line::x#5 -- vbuyy=_inc_vbuyy + iny + // line::@1 + // [17] if((byte) line::x#1<(const byte) line::x1#0+(byte) 1) goto line::@2 -- vbuyy_lt_vbuc1_then_la1 cpy #x1+1 bcc b2 // line::@return // } - // [15] return + // [18] return rts - // line::@2 - b2: - // plot(x) - // [16] (byte) plot::x#1 ← (byte) line::x#2 - // [17] call plot - jsr plot - // line::@3 - // for(byte x = x0; x<=x1; x++) - // [18] (byte) line::x#1 ← ++ (byte) line::x#2 -- vbuyy=_inc_vbuyy - iny - // [13] phi from line::@3 to line::@1 [phi:line::@3->line::@1] - // [13] phi (byte) line::x#2 = (byte) line::x#1 [phi:line::@3->line::@1#0] -- register_copy - jmp b1 } // plot // plot(byte register(Y) x) diff --git a/src/test/ref/const-identification.sym b/src/test/ref/const-identification.sym index fd50c7b58..36b04b35e 100644 --- a/src/test/ref/const-identification.sym +++ b/src/test/ref/const-identification.sym @@ -9,8 +9,8 @@ (label) line::@3 (label) line::@return (byte) line::x -(byte) line::x#1 reg byte y 202.0 -(byte) line::x#2 reg byte y 101.0 +(byte) line::x#1 reg byte y 151.5 +(byte) line::x#5 reg byte y 101.0 (byte) line::x0 (const byte) line::x0#0 x0 = (byte) 0 (byte) line::x1 @@ -32,7 +32,7 @@ (const byte*) plots#0 plots = (byte*) 4096 reg byte x [ main::i#2 main::i#1 ] -reg byte y [ line::x#2 line::x#1 ] +reg byte y [ line::x#5 line::x#1 ] reg byte y [ plot::x#1 ] reg byte x [ plot::idx#0 ] reg byte a [ plot::$0 ] diff --git a/src/test/ref/constants.asm b/src/test/ref/constants.asm index c7779ebdb..5167c88cb 100644 --- a/src/test/ref/constants.asm +++ b/src/test/ref/constants.asm @@ -238,14 +238,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [72] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [72] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [72] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [73] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [72] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [75] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [73] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [76] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [74] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [72] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [72] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [75] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [72] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [72] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [72] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [73] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [72] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [75] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [73] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [76] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [74] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [72] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [72] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [75] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [72] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [72] phi from memset to memset::@2 [phi:memset->memset::@2] + // [72] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [72] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [72] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [73] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [73] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [74] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [75] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -3573,24 +3605,8 @@ memset: { bne b2 // memset::@return // } - // [74] return + // [76] return rts - // memset::@2 - b2: - // *dst = c - // [75] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [76] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [72] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [72] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data msg: .text "0=0@" diff --git a/src/test/ref/constants.sym b/src/test/ref/constants.sym index 4ad969609..e7eb73eba 100644 --- a/src/test/ref/constants.sym +++ b/src/test/ref/constants.sym @@ -48,8 +48,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:7 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:7 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:7 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:7 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -127,4 +127,4 @@ zp ZP_WORD:2 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 pri zp ZP_WORD:4 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ] reg byte x [ assert_byte::b#3 ] zp ZP_BYTE:6 [ assert_byte::c#3 assert_sbyte::c#5 ] -zp ZP_WORD:7 [ memset::dst#2 memset::dst#1 assert_sbyte::msg#5 print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 assert_byte::msg#3 ] +zp ZP_WORD:7 [ memset::dst#4 memset::dst#1 assert_sbyte::msg#5 print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 assert_byte::msg#3 ] diff --git a/src/test/ref/cordic-atan2-clear.asm b/src/test/ref/cordic-atan2-clear.asm index f4acdee72..12f2e6109 100644 --- a/src/test/ref/cordic-atan2-clear.asm +++ b/src/test/ref/cordic-atan2-clear.asm @@ -69,29 +69,6 @@ init_angle_screen: { sta xb lda #0 sta x - b2: - lda x - cmp #$13+1 - bcc b3 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - inc y - lda #$d - cmp y - bne b1 - rts b3: lda x asl @@ -134,7 +111,28 @@ init_angle_screen: { sta (screen_bottomline),y inc x dec xb - jmp b2 + lda x + cmp #$13+1 + bcc b3 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + inc y + lda #$d + cmp y + bne b1 + rts } // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 diff --git a/src/test/ref/cordic-atan2-clear.cfg b/src/test/ref/cordic-atan2-clear.cfg index 81ed87b9d..fab8b1539 100644 --- a/src/test/ref/cordic-atan2-clear.cfg +++ b/src/test/ref/cordic-atan2-clear.cfg @@ -38,46 +38,46 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an [15] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(const byte*) SCREEN#0+(word)(number) $28*(number) $c init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) [15] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(const byte*) SCREEN#0+(word)(number) $28*(number) $c init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) [15] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - to:init_angle_screen::@2 -init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [16] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [16] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [17] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 - to:init_angle_screen::@4 -init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [18] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [19] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [20] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [21] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 - to:init_angle_screen::@return -init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [22] return - to:@return -init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [23] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [24] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [25] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [26] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [27] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [28] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [29] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [30] call atan2_16 - [31] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + to:init_angle_screen::@3 +init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@2 + [16] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 ) + [16] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 ) + [17] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 + [18] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [19] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [20] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [21] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [22] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [23] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [24] call atan2_16 + [25] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [32] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [33] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [34] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [35] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [36] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 - [37] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [38] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [39] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 - [40] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$15 - [41] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [42] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [43] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [26] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [27] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [28] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [29] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [30] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$13 + [31] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [32] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 + [33] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 + [34] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$15 + [35] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 + [36] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 + [37] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 to:init_angle_screen::@2 +init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@5 + [38] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 + to:init_angle_screen::@4 +init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 + [39] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [40] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [41] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [42] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + to:init_angle_screen::@return +init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 + [43] return + to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@3 [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 diff --git a/src/test/ref/cordic-atan2-clear.log b/src/test/ref/cordic-atan2-clear.log index 002d075fc..49bdf8472 100644 --- a/src/test/ref/cordic-atan2-clear.log +++ b/src/test/ref/cordic-atan2-clear.log @@ -1332,6 +1332,7 @@ Eliminating unused variable (byte) init_font_hex::idx#4 and assignment [15] (byt Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 5 in if((byte) init_font_hex::i#1!=(number) 5) goto init_font_hex::@3 Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c1#1!=(number) $10) goto init_font_hex::@2 Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c#1!=(number) $10) goto init_font_hex::@1 @@ -1354,6 +1355,14 @@ Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) init_angle_screen::x#1 = (byte) init_angle_screen::x#2 +Alias (byte) init_angle_screen::xb#1 = (byte) init_angle_screen::xb#2 +Alias (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#6 +Alias (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#6 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) init_angle_screen::x#7 (const byte) init_angle_screen::x#0 +Identical Phi Values (byte) init_angle_screen::xb#7 (const byte) init_angle_screen::xb#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 Constant right-side identified [29] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 Constant right-side identified [76] (byte*~) main::$4 ← (const byte*) CHARSET#0 + (word) $800 @@ -1368,6 +1377,8 @@ Constant (const byte*) main::$4 = CHARSET#0+$800 Constant (const byte*) init_angle_screen::screen_topline#0 = init_angle_screen::screen#0+(word)$28*$c Constant (const byte*) init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0+(word)$28*$c Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [118] if((const byte) init_angle_screen::x#0<(byte) $13+(byte) 1) goto init_angle_screen::@3 +Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [54] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ Resolved ranged comparison value [55] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 Adding number conversion cast (unumber) atan2_16::$16+1 in if((byte) atan2_16::i#1==(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17 @@ -1406,7 +1417,7 @@ Successful SSA optimization Pass2NopCastInlining Rewriting division to use shift [31] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2 Rewriting multiplication to use shift [45] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD Rewriting multiplication to use shift [49] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [71] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [71] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 * (byte) 2 Rewriting multiplication to use shift [75] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte) init_font_hex::c#0 @@ -1470,6 +1481,7 @@ Added new block during phi lifting atan2_16::@38(between atan2_16::@17 and atan2 Added new block during phi lifting atan2_16::@39(between atan2_16::@7 and atan2_16::@8) Added new block during phi lifting main::@14(between main::@5 and main::@1) Added new block during phi lifting init_angle_screen::@10(between init_angle_screen::@4 and init_angle_screen::@1) +Added new block during phi lifting init_angle_screen::@11(between init_angle_screen::@2 and init_angle_screen::@3) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @3 @@ -1483,61 +1495,62 @@ Adding NOP phi() at start of main::toD0181 Adding NOP phi() at start of main::toD0181_@return Adding NOP phi() at start of main::@13 Adding NOP phi() at start of init_angle_screen +Adding NOP phi() at start of init_angle_screen::@2_1 Adding NOP phi() at start of init_font_hex CALL GRAPH Calls in [] to main:5 Calls in [main] to init_font_hex:9 init_angle_screen:14 -Calls in [init_angle_screen] to atan2_16:42 +Calls in [init_angle_screen] to atan2_16:34 Created 31 initial phi equivalence classes Coalesced [21] main::clear_char#7 ← main::clear_char#1 Coalesced (already) [22] main::clear_char#6 ← main::clear_char#5 -Coalesced [32] init_angle_screen::y#7 ← init_angle_screen::y#1 -Coalesced [33] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#1 -Coalesced [34] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#1 -Coalesced [56] init_angle_screen::x#5 ← init_angle_screen::x#1 -Coalesced [57] init_angle_screen::xb#5 ← init_angle_screen::xb#1 -Coalesced [60] atan2_16::yi#17 ← atan2_16::$2 -Coalesced [64] atan2_16::xi#14 ← atan2_16::$7 -Coalesced [66] atan2_16::yi#19 ← atan2_16::yi#0 -Coalesced [67] atan2_16::xi#16 ← atan2_16::xi#0 -Coalesced [70] atan2_16::angle#22 ← atan2_16::angle#12 -Coalesced [75] atan2_16::angle#27 ← atan2_16::angle#4 -Coalesced [79] atan2_16::return#5 ← atan2_16::angle#5 -Coalesced [82] atan2_16::return#6 ← atan2_16::angle#11 -Coalesced [83] atan2_16::angle#26 ← atan2_16::angle#1 -Not coalescing [84] atan2_16::shift#5 ← atan2_16::i#2 -Not coalescing [85] atan2_16::xd#10 ← atan2_16::xi#3 -Not coalescing [86] atan2_16::yd#10 ← atan2_16::yi#3 -Coalesced [92] atan2_16::yd#13 ← atan2_16::yd#2 -Coalesced [93] atan2_16::xd#13 ← atan2_16::xd#2 -Coalesced [100] atan2_16::yi#21 ← atan2_16::yi#2 -Coalesced [101] atan2_16::angle#25 ← atan2_16::angle#3 -Coalesced [102] atan2_16::xi#18 ← atan2_16::xi#2 -Coalesced [106] atan2_16::yi#18 ← atan2_16::yi#8 -Coalesced [107] atan2_16::xi#15 ← atan2_16::xi#8 -Coalesced [108] atan2_16::i#12 ← atan2_16::i#1 -Coalesced [109] atan2_16::angle#21 ← atan2_16::angle#13 -Coalesced (already) [110] atan2_16::angle#23 ← atan2_16::angle#13 -Coalesced [115] atan2_16::yi#20 ← atan2_16::yi#1 -Coalesced [116] atan2_16::angle#24 ← atan2_16::angle#2 -Coalesced [117] atan2_16::xi#17 ← atan2_16::xi#1 -Coalesced [118] atan2_16::yd#12 ← atan2_16::yd#3 -Coalesced [119] atan2_16::xd#12 ← atan2_16::xd#3 -Coalesced [123] atan2_16::shift#6 ← atan2_16::shift#1 -Coalesced [124] atan2_16::xd#11 ← atan2_16::xd#1 -Coalesced [125] atan2_16::yd#11 ← atan2_16::yd#1 -Not coalescing [126] atan2_16::xi#13 ← atan2_16::x#0 -Not coalescing [127] atan2_16::yi#16 ← atan2_16::y#0 -Coalesced [130] init_font_hex::charset#9 ← init_font_hex::charset#5 -Coalesced [152] init_font_hex::charset#8 ← init_font_hex::charset#0 -Coalesced [153] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 -Coalesced [154] init_font_hex::c#7 ← init_font_hex::c#1 -Coalesced (already) [155] init_font_hex::charset#10 ← init_font_hex::charset#0 -Coalesced [156] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 -Coalesced [157] init_font_hex::c1#5 ← init_font_hex::c1#1 -Coalesced [158] init_font_hex::i#3 ← init_font_hex::i#1 -Coalesced [159] init_font_hex::idx#7 ← init_font_hex::idx#2 +Coalesced [54] init_angle_screen::y#7 ← init_angle_screen::y#1 +Coalesced [55] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#1 +Coalesced [56] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#1 +Coalesced [57] init_angle_screen::x#8 ← init_angle_screen::x#1 +Coalesced [58] init_angle_screen::xb#8 ← init_angle_screen::xb#1 +Coalesced [61] atan2_16::yi#17 ← atan2_16::$2 +Coalesced [65] atan2_16::xi#14 ← atan2_16::$7 +Coalesced [67] atan2_16::yi#19 ← atan2_16::yi#0 +Coalesced [68] atan2_16::xi#16 ← atan2_16::xi#0 +Coalesced [71] atan2_16::angle#22 ← atan2_16::angle#12 +Coalesced [76] atan2_16::angle#27 ← atan2_16::angle#4 +Coalesced [80] atan2_16::return#5 ← atan2_16::angle#5 +Coalesced [83] atan2_16::return#6 ← atan2_16::angle#11 +Coalesced [84] atan2_16::angle#26 ← atan2_16::angle#1 +Not coalescing [85] atan2_16::shift#5 ← atan2_16::i#2 +Not coalescing [86] atan2_16::xd#10 ← atan2_16::xi#3 +Not coalescing [87] atan2_16::yd#10 ← atan2_16::yi#3 +Coalesced [93] atan2_16::yd#13 ← atan2_16::yd#2 +Coalesced [94] atan2_16::xd#13 ← atan2_16::xd#2 +Coalesced [101] atan2_16::yi#21 ← atan2_16::yi#2 +Coalesced [102] atan2_16::angle#25 ← atan2_16::angle#3 +Coalesced [103] atan2_16::xi#18 ← atan2_16::xi#2 +Coalesced [107] atan2_16::yi#18 ← atan2_16::yi#8 +Coalesced [108] atan2_16::xi#15 ← atan2_16::xi#8 +Coalesced [109] atan2_16::i#12 ← atan2_16::i#1 +Coalesced [110] atan2_16::angle#21 ← atan2_16::angle#13 +Coalesced (already) [111] atan2_16::angle#23 ← atan2_16::angle#13 +Coalesced [116] atan2_16::yi#20 ← atan2_16::yi#1 +Coalesced [117] atan2_16::angle#24 ← atan2_16::angle#2 +Coalesced [118] atan2_16::xi#17 ← atan2_16::xi#1 +Coalesced [119] atan2_16::yd#12 ← atan2_16::yd#3 +Coalesced [120] atan2_16::xd#12 ← atan2_16::xd#3 +Coalesced [124] atan2_16::shift#6 ← atan2_16::shift#1 +Coalesced [125] atan2_16::xd#11 ← atan2_16::xd#1 +Coalesced [126] atan2_16::yd#11 ← atan2_16::yd#1 +Not coalescing [127] atan2_16::xi#13 ← atan2_16::x#0 +Not coalescing [128] atan2_16::yi#16 ← atan2_16::y#0 +Coalesced [131] init_font_hex::charset#9 ← init_font_hex::charset#5 +Coalesced [153] init_font_hex::charset#8 ← init_font_hex::charset#0 +Coalesced [154] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 +Coalesced [155] init_font_hex::c#7 ← init_font_hex::c#1 +Coalesced (already) [156] init_font_hex::charset#10 ← init_font_hex::charset#0 +Coalesced [157] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 +Coalesced [158] init_font_hex::c1#5 ← init_font_hex::c1#1 +Coalesced [159] init_font_hex::i#3 ← init_font_hex::i#1 +Coalesced [160] init_font_hex::idx#7 ← init_font_hex::idx#2 Coalesced down to 23 phi equivalence classes Culled Empty Block (label) @1 Culled Empty Block (label) @3 @@ -1547,7 +1560,9 @@ Culled Empty Block (label) main::@12 Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@14 +Culled Empty Block (label) init_angle_screen::@2_1 Culled Empty Block (label) init_angle_screen::@10 +Culled Empty Block (label) init_angle_screen::@11 Culled Empty Block (label) atan2_16::@35 Culled Empty Block (label) atan2_16::@39 Culled Empty Block (label) atan2_16::@38 @@ -1625,46 +1640,46 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an [15] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(const byte*) SCREEN#0+(word)(number) $28*(number) $c init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) [15] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(const byte*) SCREEN#0+(word)(number) $28*(number) $c init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) [15] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - to:init_angle_screen::@2 -init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [16] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [16] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [17] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 - to:init_angle_screen::@4 -init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [18] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [19] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [20] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [21] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 - to:init_angle_screen::@return -init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [22] return - to:@return -init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [23] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [24] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [25] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [26] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [27] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [28] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [29] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [30] call atan2_16 - [31] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + to:init_angle_screen::@3 +init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@2 + [16] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 ) + [16] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 ) + [17] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 + [18] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [19] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [20] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [21] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [22] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [23] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [24] call atan2_16 + [25] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [32] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [33] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [34] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [35] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [36] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 - [37] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [38] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [39] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 - [40] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$15 - [41] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [42] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [43] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [26] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [27] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [28] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [29] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [30] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$13 + [31] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [32] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 + [33] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 + [34] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$15 + [35] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 + [36] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 + [37] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 to:init_angle_screen::@2 +init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@5 + [38] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 + to:init_angle_screen::@4 +init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 + [39] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [40] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [41] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [42] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + to:init_angle_screen::@return +init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 + [43] return + to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@3 [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 @@ -1884,16 +1899,16 @@ VARIABLE REGISTER WEIGHTS (byte*) init_angle_screen::screen (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#1 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 8.96 +(byte*) init_angle_screen::screen_bottomline#6 8.959999999999999 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#1 5.5 -(byte*) init_angle_screen::screen_topline#6 9.333333333333332 +(byte*) init_angle_screen::screen_topline#6 9.333333333333334 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 101.0 -(byte) init_angle_screen::x#2 28.857142857142858 +(byte) init_angle_screen::x#5 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 202.0 -(byte) init_angle_screen::xb#2 18.363636363636363 +(byte) init_angle_screen::xb#1 101.0 +(byte) init_angle_screen::xb#5 19.238095238095237 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 33.666666666666664 (byte) init_angle_screen::y @@ -1950,8 +1965,8 @@ Initial phi equivalence classes [ init_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::x#2 init_angle_screen::x#1 ] -[ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +[ init_angle_screen::x#5 init_angle_screen::x#1 ] +[ init_angle_screen::xb#5 init_angle_screen::xb#1 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] [ atan2_16::i#2 atan2_16::i#1 ] @@ -1992,8 +2007,8 @@ Complete equivalence classes [ init_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::x#2 init_angle_screen::x#1 ] -[ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +[ init_angle_screen::x#5 init_angle_screen::x#1 ] +[ init_angle_screen::xb#5 init_angle_screen::xb#1 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] [ atan2_16::i#2 atan2_16::i#1 ] @@ -2033,8 +2048,8 @@ Allocated zp ZP_WORD:2 [ main::clear_char#5 main::clear_char#1 ] Allocated zp ZP_BYTE:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Allocated zp ZP_WORD:5 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] Allocated zp ZP_WORD:7 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] -Allocated zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Allocated zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Allocated zp ZP_BYTE:9 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Allocated zp ZP_BYTE:10 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] Allocated zp ZP_WORD:11 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] Allocated zp ZP_WORD:13 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] Allocated zp ZP_BYTE:15 [ atan2_16::i#2 atan2_16::i#1 ] @@ -2218,89 +2233,58 @@ init_angle_screen: { jmp b1 // init_angle_screen::@1 b1: - // [16] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - b2_from_b1: - // [16] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [16] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + b3_from_b1: + // [16] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [16] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [16] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b2 - // init_angle_screen::@2 - b2: - // [17] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - jmp b4 - // init_angle_screen::@4 - b4: - // [18] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // [19] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // [20] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [21] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b4 - jmp breturn - // init_angle_screen::@return - breturn: - // [22] return - rts + jmp b3 + // [16] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + b3_from_b2: + // [16] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [16] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy + jmp b3 // init_angle_screen::@3 b3: - // [23] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [17] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta _3 - // [24] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 + // [18] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc _3 sta _4 - // [25] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [19] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _4 ldy #0 sta xw+1 sty xw - // [26] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [20] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda y asl sta _7 - // [27] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [21] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _7 ldy #0 sta yw+1 sty yw - // [28] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 + // [22] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 lda xw sta atan2_16.x lda xw+1 sta atan2_16.x+1 - // [29] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 + // [23] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 lda yw sta atan2_16.y lda yw+1 sta atan2_16.y+1 - // [30] call atan2_16 + // [24] call atan2_16 jsr atan2_16 - // [31] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 + // [25] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 lda atan2_16.return sta atan2_16.return_2 lda atan2_16.return+1 @@ -2308,12 +2292,12 @@ init_angle_screen: { jmp b5 // init_angle_screen::@5 b5: - // [32] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 + // [26] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 lda atan2_16.return_2 sta angle_w lda atan2_16.return_2+1 sta angle_w+1 - // [33] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 + // [27] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 lda #$80 clc adc angle_w @@ -2321,49 +2305,81 @@ init_angle_screen: { lda #0 adc angle_w+1 sta _11+1 - // [34] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [28] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w - // [35] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 + // [29] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 lax ang_w axs #-[$80] stx _13 - // [36] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 + // [30] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 lda _13 ldy x sta (screen_topline),y - // [37] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 + // [31] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$80 sec sbc ang_w sta _14 - // [38] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 + // [32] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 lda _14 ldy x sta (screen_bottomline),y - // [39] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 + // [33] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 lda ang_w eor #$ff clc adc #1 sta _15 - // [40] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 + // [34] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 lda _15 ldy xb sta (screen_topline),y - // [41] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [35] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [42] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [36] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [43] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [37] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [16] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - b2_from_b5: - // [16] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [16] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp b2 + // init_angle_screen::@2 + b2: + // [38] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3_from_b2 + jmp b4 + // init_angle_screen::@4 + b4: + // [39] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // [40] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // [41] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [42] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b4 + jmp breturn + // init_angle_screen::@return + breturn: + // [43] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) @@ -2882,62 +2898,62 @@ Statement [7] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ Statement [10] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ main::clear_char#5 ] ( main:2 [ main::clear_char#5 ] ) always clobbers reg byte a Statement [11] if((byte*) main::clear_char#5>=(const byte*) CHARSET#0+(word) $800) goto main::@1 [ main::clear_char#5 ] ( main:2 [ main::clear_char#5 ] ) always clobbers reg byte a Statement [12] *((byte*) main::clear_char#5) ← (byte) 0 [ main::clear_char#5 ] ( main:2 [ main::clear_char#5 ] ) always clobbers reg byte a reg byte y -Statement [18] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [17] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Statement [19] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [23] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [24] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [25] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Statement [18] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [19] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [26] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [27] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [28] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [29] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [31] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [32] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [33] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [34] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [36] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:9 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:10 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Statement [20] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [21] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [22] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [23] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [25] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [26] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [27] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [28] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [30] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] -Statement [37] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [31] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] -Statement [38] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [39] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$15 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [40] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [41] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte a reg byte y -Statement [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [45] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [47] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [48] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [51] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [32] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [33] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$15 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [34] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [35] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte a reg byte y +Statement [39] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [40] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [45] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [47] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [48] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [51] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ atan2_16::i#2 atan2_16::i#1 ] -Statement [53] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [54] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [55] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [57] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [58] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [62] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [53] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [54] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [55] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [57] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [58] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [62] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -Statement [63] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [67] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [68] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [70] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [71] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [72] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [73] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [74] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [78] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [79] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [80] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [81] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [82] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [83] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [85] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [86] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [63] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [67] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [68] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [70] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [71] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [72] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [73] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [74] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [78] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [79] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [80] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [81] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [82] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [83] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [85] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [86] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [90] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] @@ -2957,53 +2973,53 @@ Statement [7] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ Statement [10] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ main::clear_char#5 ] ( main:2 [ main::clear_char#5 ] ) always clobbers reg byte a Statement [11] if((byte*) main::clear_char#5>=(const byte*) CHARSET#0+(word) $800) goto main::@1 [ main::clear_char#5 ] ( main:2 [ main::clear_char#5 ] ) always clobbers reg byte a Statement [12] *((byte*) main::clear_char#5) ← (byte) 0 [ main::clear_char#5 ] ( main:2 [ main::clear_char#5 ] ) always clobbers reg byte a reg byte y -Statement [18] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [19] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [23] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [24] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [25] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [26] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [27] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [28] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [29] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [31] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [32] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [33] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [34] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [35] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [36] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [37] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [38] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [39] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$15 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [40] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [41] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte a reg byte y -Statement [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [45] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [47] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [48] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [51] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [53] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [54] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [55] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [57] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [58] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [62] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [63] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [67] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [68] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [70] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [71] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [72] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [73] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [74] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [78] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [79] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [80] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [81] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [82] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [83] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [85] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [86] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:8::atan2_16:30 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [17] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [18] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [19] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [20] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [21] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [22] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [23] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [25] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [26] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [27] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [28] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [29] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [30] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [31] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [32] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [33] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$15 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [34] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [35] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte a reg byte y +Statement [39] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [40] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:2::init_angle_screen:8 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [45] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [47] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [48] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [51] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [53] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [54] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [55] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [57] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [58] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [62] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [63] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [67] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [68] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [70] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [71] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [72] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [73] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [74] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [78] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [79] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [80] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [81] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [82] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [83] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [85] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [86] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:8::atan2_16:24 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [90] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y Statement [92] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a Statement [93] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a @@ -3016,8 +3032,8 @@ Potential registers zp ZP_WORD:2 [ main::clear_char#5 main::clear_char#1 ] : zp Potential registers zp ZP_BYTE:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp ZP_BYTE:4 , reg byte x , Potential registers zp ZP_WORD:5 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:5 , Potential registers zp ZP_WORD:7 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:7 , -Potential registers zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp ZP_BYTE:9 , reg byte x , -Potential registers zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp ZP_BYTE:10 , reg byte x , +Potential registers zp ZP_BYTE:9 [ init_angle_screen::x#5 init_angle_screen::x#1 ] : zp ZP_BYTE:9 , reg byte x , +Potential registers zp ZP_BYTE:10 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] : zp ZP_BYTE:10 , reg byte x , Potential registers zp ZP_WORD:11 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp ZP_WORD:11 , Potential registers zp ZP_WORD:13 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp ZP_WORD:13 , Potential registers zp ZP_BYTE:15 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:15 , reg byte x , reg byte y , @@ -3057,42 +3073,40 @@ Potential registers zp ZP_BYTE:61 [ init_font_hex::idx#3 ] : zp ZP_BYTE:61 , reg REGISTER UPLIFT SCOPES Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:20 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:21 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:23 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:16 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:11 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:13 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:56 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:57 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:15 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:46 [ atan2_16::return#2 ] 50: zp ZP_WORD:18 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:42 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:44 [ atan2_16::y#0 ] Uplift Scope [init_font_hex] 2,168.83: zp ZP_BYTE:33 [ init_font_hex::i#2 init_font_hex::i#1 ] 2,002: zp ZP_BYTE:59 [ init_font_hex::$1 ] 2,002: zp ZP_BYTE:60 [ init_font_hex::$2 ] 1,151.6: zp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 1,001: zp ZP_BYTE:58 [ init_font_hex::$0 ] 202: zp ZP_BYTE:61 [ init_font_hex::idx#3 ] 165.86: zp ZP_WORD:28 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 164.97: zp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 143.04: zp ZP_WORD:30 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 64.17: zp ZP_WORD:25 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 17.66: zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] -Uplift Scope [init_angle_screen] 220.36: zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 202: zp ZP_BYTE:35 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:36 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:39 [ init_angle_screen::$7 ] 202: zp ZP_WORD:48 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:50 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:53 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:54 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:55 [ init_angle_screen::$15 ] 129.86: zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 72.14: zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:40 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:37 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 16.29: zp ZP_WORD:7 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] 14.83: zp ZP_WORD:5 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] +Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:35 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:36 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:39 [ init_angle_screen::$7 ] 202: zp ZP_WORD:48 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:50 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:53 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:54 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:55 [ init_angle_screen::$15 ] 126.25: zp ZP_BYTE:9 [ init_angle_screen::x#5 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:10 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] 72.14: zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:40 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:37 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 16.29: zp ZP_WORD:7 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] 14.83: zp ZP_WORD:5 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] Uplift Scope [main] 106: zp ZP_WORD:2 [ main::clear_char#5 main::clear_char#1 ] Uplift Scope [] -Uplifting [atan2_16] best 1174671 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:21 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:23 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:16 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:11 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:13 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:46 [ atan2_16::return#2 ] zp ZP_WORD:18 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:42 [ atan2_16::x#0 ] zp ZP_WORD:44 [ atan2_16::y#0 ] +Uplifting [atan2_16] best 1174971 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:21 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:23 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:16 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:11 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:13 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:46 [ atan2_16::return#2 ] zp ZP_WORD:18 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:42 [ atan2_16::x#0 ] zp ZP_WORD:44 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [init_font_hex] best 1155671 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:58 [ init_font_hex::$0 ] zp ZP_BYTE:61 [ init_font_hex::idx#3 ] zp ZP_WORD:28 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:30 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:25 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplifting [init_font_hex] best 1155971 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:58 [ init_font_hex::$0 ] zp ZP_BYTE:61 [ init_font_hex::idx#3 ] zp ZP_WORD:28 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:30 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:25 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] Limited combination testing to 100 combinations of 6912 possible. -Uplifting [init_angle_screen] best 1154071 combination zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:48 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:50 [ init_angle_screen::$11 ] zp ZP_BYTE:53 [ init_angle_screen::$13 ] zp ZP_BYTE:54 [ init_angle_screen::$14 ] zp ZP_BYTE:55 [ init_angle_screen::$15 ] zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:40 [ init_angle_screen::yw#0 ] zp ZP_WORD:37 [ init_angle_screen::xw#0 ] zp ZP_BYTE:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:7 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:5 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] +Uplifting [init_angle_screen] best 1153971 combination reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:48 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:50 [ init_angle_screen::$11 ] reg byte a [ init_angle_screen::$13 ] zp ZP_BYTE:54 [ init_angle_screen::$14 ] zp ZP_BYTE:55 [ init_angle_screen::$15 ] zp ZP_BYTE:9 [ init_angle_screen::x#5 init_angle_screen::x#1 ] zp ZP_BYTE:10 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:40 [ init_angle_screen::yw#0 ] zp ZP_WORD:37 [ init_angle_screen::xw#0 ] zp ZP_BYTE:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:7 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:5 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [main] best 1154071 combination zp ZP_WORD:2 [ main::clear_char#5 main::clear_char#1 ] -Uplifting [] best 1154071 combination +Uplifting [main] best 1153971 combination zp ZP_WORD:2 [ main::clear_char#5 main::clear_char#1 ] +Uplifting [] best 1153971 combination Attempting to uplift remaining variables inzp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] -Uplifting [init_font_hex] best 1154071 combination zp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Uplifting [init_font_hex] best 1153971 combination zp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:58 [ init_font_hex::$0 ] -Uplifting [init_font_hex] best 1154071 combination zp ZP_BYTE:58 [ init_font_hex::$0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Uplifting [init_angle_screen] best 1154071 combination zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:53 [ init_angle_screen::$13 ] -Uplifting [init_angle_screen] best 1153671 combination reg byte a [ init_angle_screen::$13 ] +Uplifting [init_font_hex] best 1153971 combination zp ZP_BYTE:58 [ init_font_hex::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:54 [ init_angle_screen::$14 ] -Uplifting [init_angle_screen] best 1153071 combination reg byte a [ init_angle_screen::$14 ] +Uplifting [init_angle_screen] best 1153371 combination reg byte a [ init_angle_screen::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:55 [ init_angle_screen::$15 ] -Uplifting [init_angle_screen] best 1152471 combination reg byte a [ init_angle_screen::$15 ] +Uplifting [init_angle_screen] best 1152771 combination reg byte a [ init_angle_screen::$15 ] Attempting to uplift remaining variables inzp ZP_BYTE:61 [ init_font_hex::idx#3 ] -Uplifting [init_font_hex] best 1151871 combination reg byte y [ init_font_hex::idx#3 ] +Uplifting [init_font_hex] best 1152171 combination reg byte y [ init_font_hex::idx#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Uplifting [init_font_hex] best 1151871 combination zp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Uplifting [init_angle_screen] best 1151871 combination zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Uplifting [init_font_hex] best 1152171 combination zp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:9 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Uplifting [init_angle_screen] best 1152171 combination zp ZP_BYTE:9 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:10 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Uplifting [init_angle_screen] best 1152171 combination zp ZP_BYTE:10 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] -Uplifting [init_angle_screen] best 1151871 combination zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1152171 combination zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Uplifting [init_angle_screen] best 1151871 combination zp ZP_BYTE:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] +Uplifting [init_angle_screen] best 1152171 combination zp ZP_BYTE:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] -Uplifting [init_font_hex] best 1151871 combination zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplifting [init_font_hex] best 1152171 combination zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] Coalescing zero page register [ zp ZP_WORD:16 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:18 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:37 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:42 [ atan2_16::x#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:40 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:44 [ atan2_16::y#0 ] ] - score: 1 @@ -3104,8 +3118,8 @@ Coalescing zero page register [ zp ZP_WORD:25 [ init_font_hex::proto_hi#6 init_f Coalescing zero page register [ zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] ] with [ zp ZP_BYTE:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] Coalescing zero page register [ zp ZP_WORD:28 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] ] with [ zp ZP_WORD:11 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] Coalescing zero page register [ zp ZP_WORD:30 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] ] with [ zp ZP_WORD:13 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] -Coalescing zero page register [ zp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] ] with [ zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] ] with [ zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] ] with [ zp ZP_BYTE:9 [ init_angle_screen::x#5 init_angle_screen::x#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] ] with [ zp ZP_BYTE:10 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] ] Coalescing zero page register [ zp ZP_BYTE:58 [ init_font_hex::$0 ] ] with [ zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] ] Allocated (was zp ZP_WORD:5) zp ZP_WORD:2 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 main::clear_char#5 main::clear_char#1 ] Allocated (was zp ZP_WORD:16) zp ZP_WORD:4 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] @@ -3115,8 +3129,8 @@ Allocated (was zp ZP_WORD:25) zp ZP_WORD:10 [ init_font_hex::proto_hi#6 init_fon Allocated (was zp ZP_BYTE:27) zp ZP_BYTE:12 [ init_font_hex::c#6 init_font_hex::c#1 init_angle_screen::y#5 init_angle_screen::y#1 ] Allocated (was zp ZP_WORD:28) zp ZP_WORD:13 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] Allocated (was zp ZP_WORD:30) zp ZP_WORD:15 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] -Allocated (was zp ZP_BYTE:32) zp ZP_BYTE:17 [ init_font_hex::c1#4 init_font_hex::c1#1 init_angle_screen::x#2 init_angle_screen::x#1 ] -Allocated (was zp ZP_BYTE:34) zp ZP_BYTE:18 [ init_font_hex::idx#5 init_font_hex::idx#2 init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Allocated (was zp ZP_BYTE:32) zp ZP_BYTE:17 [ init_font_hex::c1#4 init_font_hex::c1#1 init_angle_screen::x#5 init_angle_screen::x#1 ] +Allocated (was zp ZP_BYTE:34) zp ZP_BYTE:18 [ init_font_hex::idx#5 init_font_hex::idx#2 init_angle_screen::xb#5 init_angle_screen::xb#1 ] Allocated (was zp ZP_WORD:37) zp ZP_WORD:19 [ init_angle_screen::xw#0 atan2_16::x#0 ] Allocated (was zp ZP_WORD:40) zp ZP_WORD:21 [ init_angle_screen::yw#0 atan2_16::y#0 ] Allocated (was zp ZP_BYTE:58) zp ZP_BYTE:23 [ init_font_hex::$0 init_angle_screen::ang_w#0 ] @@ -3261,81 +3275,50 @@ init_angle_screen: { jmp b1 // init_angle_screen::@1 b1: - // [16] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - b2_from_b1: - // [16] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [16] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + b3_from_b1: + // [16] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [16] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [16] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b2 - // init_angle_screen::@2 - b2: - // [17] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - jmp b4 - // init_angle_screen::@4 - b4: - // [18] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // [19] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // [20] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [21] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b4 - jmp breturn - // init_angle_screen::@return - breturn: - // [22] return - rts + jmp b3 + // [16] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + b3_from_b2: + // [16] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [16] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy + jmp b3 // init_angle_screen::@3 b3: - // [23] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [17] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [24] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [18] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [25] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [19] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw - // [26] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [20] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl - // [27] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [21] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta yw+1 sty yw - // [28] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [29] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [30] call atan2_16 + // [22] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [23] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [24] call atan2_16 jsr atan2_16 - // [31] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [25] (word) atan2_16::return#2 ← (word) atan2_16::return#0 jmp b5 // init_angle_screen::@5 b5: - // [32] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - // [33] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [26] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [27] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _11 @@ -3343,44 +3326,76 @@ init_angle_screen: { bcc !+ inc _11+1 !: - // [34] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [28] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w - // [35] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [29] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w - // [36] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [30] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y - // [37] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [31] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w - // [38] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [32] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_bottomline),y - // [39] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [33] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 lda ang_w eor #$ff clc adc #1 - // [40] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [34] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y - // [41] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [35] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [42] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [36] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [43] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [37] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [16] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - b2_from_b5: - // [16] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [16] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp b2 + // init_angle_screen::@2 + b2: + // [38] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3_from_b2 + jmp b4 + // init_angle_screen::@4 + b4: + // [39] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // [40] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // [41] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [42] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b4 + jmp breturn + // init_angle_screen::@return + breturn: + // [43] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) @@ -3874,10 +3889,11 @@ Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp b4 Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b4 Removing instruction jmp breturn -Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp b5 @@ -3916,6 +3932,7 @@ Replacing label b1 with b2 Replacing label b1_from_b3 with b2 Replacing label b1_from_b3 with b2 Replacing label b1_from_b4 with b2 +Replacing label b3_from_b2 with b3 Replacing label b1_from_b4 with b1 Replacing label b7_from_b12 with b7 Replacing label b8_from_b7 with b8 @@ -3938,7 +3955,8 @@ Removing instruction b1_from_b3: Removing instruction b1_from_b4: Removing instruction b1: Removing instruction b1_from_b4: -Removing instruction b2_from_b1: +Removing instruction b3_from_b1: +Removing instruction b3_from_b2: Removing instruction b3_from_b1: Removing instruction b3_from_b2: Removing instruction b6_from_b4: @@ -3970,10 +3988,10 @@ Removing instruction b1_from_b5: Removing instruction b3: Removing instruction b4: Removing instruction b1_from_init_angle_screen: +Removing instruction b5: +Removing instruction b2: Removing instruction b4: Removing instruction breturn: -Removing instruction b5: -Removing instruction b2_from_b5: Removing instruction b2: Removing instruction b5: Removing instruction b21: @@ -3993,15 +4011,16 @@ Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin Removing instruction jmp b2 Removing instruction jmp b1 +Removing instruction jmp b3 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [260] beq b12 to bne -Fixing long branch [154] bpl b1 to bmi -Fixing long branch [166] bpl b4 to bmi +Fixing long branch [258] beq b12 to bne +Fixing long branch [152] bpl b1 to bmi +Fixing long branch [164] bpl b4 to bmi FINAL SYMBOL TABLE (label) @1 @@ -4121,16 +4140,16 @@ FINAL SYMBOL TABLE (byte*) init_angle_screen::screen (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:10 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:10 8.96 +(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:10 8.959999999999999 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:2 5.5 -(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:2 9.333333333333332 +(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:2 9.333333333333334 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 x zp ZP_BYTE:17 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:17 28.857142857142858 +(byte) init_angle_screen::x#5 x zp ZP_BYTE:17 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:18 202.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:18 18.363636363636363 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:18 101.0 +(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:18 19.238095238095237 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 xw zp ZP_WORD:19 33.666666666666664 (byte) init_angle_screen::y @@ -4205,9 +4224,9 @@ zp ZP_WORD:10 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 init_angle_s zp ZP_BYTE:12 [ init_font_hex::c#6 init_font_hex::c#1 init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:13 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:15 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] -zp ZP_BYTE:17 [ init_font_hex::c1#4 init_font_hex::c1#1 init_angle_screen::x#2 init_angle_screen::x#1 ] +zp ZP_BYTE:17 [ init_font_hex::c1#4 init_font_hex::c1#1 init_angle_screen::x#5 init_angle_screen::x#1 ] reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] -zp ZP_BYTE:18 [ init_font_hex::idx#5 init_font_hex::idx#2 init_angle_screen::xb#2 init_angle_screen::xb#1 ] +zp ZP_BYTE:18 [ init_font_hex::idx#5 init_font_hex::idx#2 init_angle_screen::xb#5 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] zp ZP_WORD:19 [ init_angle_screen::xw#0 atan2_16::x#0 ] @@ -4225,7 +4244,7 @@ reg byte y [ init_font_hex::idx#3 ] FINAL ASSEMBLER -Score: 1056709 +Score: 1056409 // File Comments // Find atan2(x, y) using the CORDIC method @@ -4342,85 +4361,51 @@ init_angle_screen: { // [15] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy // init_angle_screen::@1 b1: - // [16] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - // [16] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [16] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + // [16] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [16] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [16] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - // init_angle_screen::@2 - b2: - // for( byte x=0,xb=39; x<=19; x++, xb--) - // [17] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - // init_angle_screen::@4 - // screen_topline -= 40 - // [18] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // screen_bottomline += 40 - // [19] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // for(byte y: 0..12) - // [20] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [21] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1 - // init_angle_screen::@return - // } - // [22] return - rts + // [16] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + // [16] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [16] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy // init_angle_screen::@3 b3: // x*2 - // [23] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [17] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // 39-x*2 - // [24] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [18] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // (word){ 39-x*2, 0 } - // [25] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [19] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw // y*2 - // [26] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [20] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl // (word){ y*2, 0 } - // [27] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [21] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 sta yw+1 sty yw // atan2_16(xw, yw) - // [28] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [29] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [30] call atan2_16 + // [22] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [23] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [24] call atan2_16 jsr atan2_16 - // [31] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [25] (word) atan2_16::return#2 ← (word) atan2_16::return#0 // init_angle_screen::@5 // angle_w = atan2_16(xw, yw) - // [32] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [26] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 // angle_w+0x0080 - // [33] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [27] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _11 @@ -4429,49 +4414,80 @@ init_angle_screen: { inc _11+1 !: // ang_w = >(angle_w+0x0080) - // [34] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [28] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w // 0x80+ang_w - // [35] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [29] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w // screen_topline[x] = 0x80+ang_w - // [36] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [30] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y // 0x80-ang_w - // [37] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [31] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w // screen_bottomline[x] = 0x80-ang_w - // [38] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [32] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // -ang_w - // [39] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [33] (byte~) init_angle_screen::$15 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 lda ang_w eor #$ff clc adc #1 // screen_topline[xb] = -ang_w - // [40] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [34] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y // screen_bottomline[xb] = ang_w - // [41] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [35] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [42] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [36] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [43] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [37] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [16] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - // [16] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [16] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy - jmp b2 + // init_angle_screen::@2 + // [38] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3 + // init_angle_screen::@4 + // screen_topline -= 40 + // [39] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // screen_bottomline += 40 + // [40] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // for(byte y: 0..12) + // [41] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [42] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1 + // init_angle_screen::@return + // } + // [43] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) diff --git a/src/test/ref/cordic-atan2-clear.sym b/src/test/ref/cordic-atan2-clear.sym index a0a34df4e..3d349980b 100644 --- a/src/test/ref/cordic-atan2-clear.sym +++ b/src/test/ref/cordic-atan2-clear.sym @@ -115,16 +115,16 @@ (byte*) init_angle_screen::screen (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:10 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:10 8.96 +(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:10 8.959999999999999 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:2 5.5 -(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:2 9.333333333333332 +(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:2 9.333333333333334 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 x zp ZP_BYTE:17 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:17 28.857142857142858 +(byte) init_angle_screen::x#5 x zp ZP_BYTE:17 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:18 202.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:18 18.363636363636363 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:18 101.0 +(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:18 19.238095238095237 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 xw zp ZP_WORD:19 33.666666666666664 (byte) init_angle_screen::y @@ -199,9 +199,9 @@ zp ZP_WORD:10 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 init_angle_s zp ZP_BYTE:12 [ init_font_hex::c#6 init_font_hex::c#1 init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:13 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:15 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] -zp ZP_BYTE:17 [ init_font_hex::c1#4 init_font_hex::c1#1 init_angle_screen::x#2 init_angle_screen::x#1 ] +zp ZP_BYTE:17 [ init_font_hex::c1#4 init_font_hex::c1#1 init_angle_screen::x#5 init_angle_screen::x#1 ] reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] -zp ZP_BYTE:18 [ init_font_hex::idx#5 init_font_hex::idx#2 init_angle_screen::xb#2 init_angle_screen::xb#1 ] +zp ZP_BYTE:18 [ init_font_hex::idx#5 init_font_hex::idx#2 init_angle_screen::xb#5 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] zp ZP_WORD:19 [ init_angle_screen::xw#0 atan2_16::x#0 ] diff --git a/src/test/ref/default-font.asm b/src/test/ref/default-font.asm index f4ab649bd..0a30ab94f 100644 --- a/src/test/ref/default-font.asm +++ b/src/test/ref/default-font.asm @@ -54,14 +54,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [18] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [18] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [18] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [19] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [18] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [21] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [19] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [22] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [20] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [18] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [18] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [21] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [18] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [18] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [18] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [19] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [18] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [21] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [19] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [22] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [20] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [18] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [18] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [21] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [18] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [18] phi from memset to memset::@2 [phi:memset->memset::@2] + // [18] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [18] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [18] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [19] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [19] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [20] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [21] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -1019,24 +1050,8 @@ memset: { bne b2 // memset::@return // } - // [20] return + // [22] return rts - // memset::@2 - b2: - // *dst = c - // [21] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [22] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [18] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [18] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/default-font.sym b/src/test/ref/default-font.sym index 9617eea04..e5d080601 100644 --- a/src/test/ref/default-font.sym +++ b/src/test/ref/default-font.sym @@ -30,8 +30,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:4 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:4 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:4 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:4 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -43,4 +43,4 @@ zp ZP_BYTE:2 [ main::x#4 main::x#1 ] zp ZP_BYTE:3 [ main::ch#2 main::ch#3 main::ch#1 ] reg byte x [ main::y#2 main::y#1 ] -zp ZP_WORD:4 [ memset::dst#2 memset::dst#1 main::screen#3 main::screen#5 main::screen#2 main::screen#1 ] +zp ZP_WORD:4 [ memset::dst#4 memset::dst#1 main::screen#3 main::screen#5 main::screen#2 main::screen#1 ] diff --git a/src/test/ref/derefidx-word-0.asm b/src/test/ref/derefidx-word-0.asm index 7af9beb5b..7912d922d 100644 --- a/src/test/ref/derefidx-word-0.asm +++ b/src/test/ref/derefidx-word-0.asm @@ -9,16 +9,6 @@ main: { lda #<0 sta i sta i+1 - b1: - lda i+1 - cmp #>$3e8 - bcc b2 - bne !+ - lda i - cmp #<$3e8 - bcc b2 - !: - rts b2: lda i clc @@ -37,5 +27,13 @@ main: { bcc !+ inc i+1 !: - jmp b1 + lda i+1 + cmp #>$3e8 + bcc b2 + bne !+ + lda i + cmp #<$3e8 + bcc b2 + !: + rts } diff --git a/src/test/ref/derefidx-word-0.cfg b/src/test/ref/derefidx-word-0.cfg index f311efb25..9b12d44fa 100644 --- a/src/test/ref/derefidx-word-0.cfg +++ b/src/test/ref/derefidx-word-0.cfg @@ -9,16 +9,16 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (word) main::i#4 ← phi( main::@1/(word) main::i#1 main/(byte) 0 ) + [6] (byte*~) main::$1 ← (const byte*) main::screen#0 + (word) main::i#4 + [7] *((byte*~) main::$1) ← (byte) 'a' + [8] (word) main::i#1 ← (word) main::i#4 + (byte) $28 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (word) main::i#2 ← phi( main/(byte) 0 main::@2/(word) main::i#1 ) - [6] if((word) main::i#2<(word) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((word) main::i#1<(word) $3e8) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] (byte*~) main::$1 ← (const byte*) main::screen#0 + (word) main::i#2 - [9] *((byte*~) main::$1) ← (byte) 'a' - [10] (word) main::i#1 ← (word) main::i#2 + (byte) $28 - to:main::@1 diff --git a/src/test/ref/derefidx-word-0.log b/src/test/ref/derefidx-word-0.log index 394ae2f23..6927d5a9f 100644 --- a/src/test/ref/derefidx-word-0.log +++ b/src/test/ref/derefidx-word-0.log @@ -73,21 +73,32 @@ Constant (const word) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification De-inlining pointer[w] to *(pointer+w) [6] *((const byte*) main::screen#0 + (word) main::i#2) ← (byte) 'a' Successful SSA optimization Pass2DeInlineWordDerefIdx +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (word) main::i#1 = (word) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (word) main::i#5 (const word) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [10] if((const word) main::i#0<(word) $3e8) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const word) main::i#0 Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 1 initial phi equivalence classes -Coalesced [12] main::i#4 ← main::i#1 +Coalesced [13] main::i#6 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -105,36 +116,36 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (word) main::i#4 ← phi( main::@1/(word) main::i#1 main/(byte) 0 ) + [6] (byte*~) main::$1 ← (const byte*) main::screen#0 + (word) main::i#4 + [7] *((byte*~) main::$1) ← (byte) 'a' + [8] (word) main::i#1 ← (word) main::i#4 + (byte) $28 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (word) main::i#2 ← phi( main/(byte) 0 main::@2/(word) main::i#1 ) - [6] if((word) main::i#2<(word) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((word) main::i#1<(word) $3e8) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] (byte*~) main::$1 ← (const byte*) main::screen#0 + (word) main::i#2 - [9] *((byte*~) main::$1) ← (byte) 'a' - [10] (word) main::i#1 ← (word) main::i#2 + (byte) $28 - to:main::@1 VARIABLE REGISTER WEIGHTS (void()) main() (byte*~) main::$1 22.0 (word) main::i -(word) main::i#1 22.0 -(word) main::i#2 11.0 +(word) main::i#1 16.5 +(word) main::i#4 11.0 (byte*) main::screen Initial phi equivalence classes -[ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] Added variable main::$1 to zero page equivalence class [ main::$1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] [ main::$1 ] -Allocated zp ZP_WORD:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_WORD:2 [ main::i#4 main::i#1 ] Allocated zp ZP_WORD:4 [ main::$1 ] INITIAL ASM @@ -167,33 +178,21 @@ main: { .label screen = $400 .label i = 2 .label _1 = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (word) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (word) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // main::@1 - b1: - // [6] if((word) main::i#2<(word) $3e8) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>$3e8 - bcc b2 - bne !+ - lda i - cmp #<$3e8 - bcc b2 - !: - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (word) main::i#4 = (word) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 // main::@2 b2: - // [8] (byte*~) main::$1 ← (const byte*) main::screen#0 + (word) main::i#2 -- pbuz1=pbuc1_plus_vwuz2 + // [6] (byte*~) main::$1 ← (const byte*) main::screen#0 + (word) main::i#4 -- pbuz1=pbuc1_plus_vwuz2 lda i clc adc #screen sta _1+1 - // [9] *((byte*~) main::$1) ← (byte) 'a' -- _deref_pbuz1=vbuc1 + // [7] *((byte*~) main::$1) ← (byte) 'a' -- _deref_pbuz1=vbuc1 lda #'a' ldy #0 sta (_1),y - // [10] (word) main::i#1 ← (word) main::i#2 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 + // [8] (word) main::i#1 ← (word) main::i#4 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 lda #$28 clc adc i @@ -213,27 +212,40 @@ main: { bcc !+ inc i+1 !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (word) main::i#2 = (word) main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp b1 + // main::@1 + b1: + // [9] if((word) main::i#1<(word) $3e8) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>$3e8 + bcc b2_from_b1 + bne !+ + lda i + cmp #<$3e8 + bcc b2_from_b1 + !: + jmp breturn + // main::@return + breturn: + // [10] return + rts } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if((word) main::i#2<(word) $3e8) goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Statement [8] (byte*~) main::$1 ← (const byte*) main::screen#0 + (word) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) always clobbers reg byte a -Statement [9] *((byte*~) main::$1) ← (byte) 'a' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a reg byte y -Statement [10] (word) main::i#1 ← (word) main::i#2 + (byte) $28 [ main::i#1 ] ( main:2 [ main::i#1 ] ) always clobbers reg byte a -Potential registers zp ZP_WORD:2 [ main::i#2 main::i#1 ] : zp ZP_WORD:2 , +Statement [6] (byte*~) main::$1 ← (const byte*) main::screen#0 + (word) main::i#4 [ main::i#4 main::$1 ] ( main:2 [ main::i#4 main::$1 ] ) always clobbers reg byte a +Statement [7] *((byte*~) main::$1) ← (byte) 'a' [ main::i#4 ] ( main:2 [ main::i#4 ] ) always clobbers reg byte a reg byte y +Statement [8] (word) main::i#1 ← (word) main::i#4 + (byte) $28 [ main::i#1 ] ( main:2 [ main::i#1 ] ) always clobbers reg byte a +Statement [9] if((word) main::i#1<(word) $3e8) goto main::@2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ main::i#4 main::i#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:4 [ main::$1 ] : zp ZP_WORD:4 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 33: zp ZP_WORD:2 [ main::i#2 main::i#1 ] 22: zp ZP_WORD:4 [ main::$1 ] +Uplift Scope [main] 27.5: zp ZP_WORD:2 [ main::i#4 main::i#1 ] 22: zp ZP_WORD:4 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 838 combination zp ZP_WORD:2 [ main::i#2 main::i#1 ] zp ZP_WORD:4 [ main::$1 ] -Uplifting [] best 838 combination +Uplifting [main] best 868 combination zp ZP_WORD:2 [ main::i#4 main::i#1 ] zp ZP_WORD:4 [ main::$1 ] +Uplifting [] best 868 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -264,33 +276,21 @@ main: { .label screen = $400 .label i = 2 .label _1 = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (word) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (word) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // main::@1 - b1: - // [6] if((word) main::i#2<(word) $3e8) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>$3e8 - bcc b2 - bne !+ - lda i - cmp #<$3e8 - bcc b2 - !: - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (word) main::i#4 = (word) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 // main::@2 b2: - // [8] (byte*~) main::$1 ← (const byte*) main::screen#0 + (word) main::i#2 -- pbuz1=pbuc1_plus_vwuz2 + // [6] (byte*~) main::$1 ← (const byte*) main::screen#0 + (word) main::i#4 -- pbuz1=pbuc1_plus_vwuz2 lda i clc adc #screen sta _1+1 - // [9] *((byte*~) main::$1) ← (byte) 'a' -- _deref_pbuz1=vbuc1 + // [7] *((byte*~) main::$1) ← (byte) 'a' -- _deref_pbuz1=vbuc1 lda #'a' ldy #0 sta (_1),y - // [10] (word) main::i#1 ← (word) main::i#2 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 + // [8] (word) main::i#1 ← (word) main::i#4 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 lda #$28 clc adc i @@ -310,34 +310,53 @@ main: { bcc !+ inc i+1 !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (word) main::i#2 = (word) main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp b1 + // main::@1 + b1: + // [9] if((word) main::i#1<(word) $3e8) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>$3e8 + bcc b2_from_b1 + bne !+ + lda i + cmp #<$3e8 + bcc b2_from_b1 + !: + jmp breturn + // main::@return + breturn: + // [10] return + rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -351,17 +370,17 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return (word) main::i -(word) main::i#1 i zp ZP_WORD:2 22.0 -(word) main::i#2 i zp ZP_WORD:2 11.0 +(word) main::i#1 i zp ZP_WORD:2 16.5 +(word) main::i#4 i zp ZP_WORD:2 11.0 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -zp ZP_WORD:2 [ main::i#2 main::i#1 ] +zp ZP_WORD:2 [ main::i#4 main::i#1 ] zp ZP_WORD:4 [ main::$1 ] FINAL ASSEMBLER -Score: 746 +Score: 716 // File Comments // Tests that array-indexing by a word variable is turned into pointer addition @@ -382,15 +401,40 @@ main: { .label screen = $400 .label i = 2 .label _1 = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (word) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (word) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vwuz1=vbuc1 lda #<0 sta i sta i+1 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (word) main::i#4 = (word) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // screen[i] = 'a' + // [6] (byte*~) main::$1 ← (const byte*) main::screen#0 + (word) main::i#4 -- pbuz1=pbuc1_plus_vwuz2 + lda i + clc + adc #screen + sta _1+1 + // [7] *((byte*~) main::$1) ← (byte) 'a' -- _deref_pbuz1=vbuc1 + lda #'a' + ldy #0 + sta (_1),y + // i+=40 + // [8] (word) main::i#1 ← (word) main::i#4 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 + lda #$28 + clc + adc i + sta i + bcc !+ + inc i+1 + !: // main::@1 - b1: // for( word i=0;i<1000;i+=40) - // [6] if((word) main::i#2<(word) $3e8) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 + // [9] if((word) main::i#1<(word) $3e8) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 lda i+1 cmp #>$3e8 bcc b2 @@ -401,35 +445,8 @@ main: { !: // main::@return // } - // [7] return + // [10] return rts - // main::@2 - b2: - // screen[i] = 'a' - // [8] (byte*~) main::$1 ← (const byte*) main::screen#0 + (word) main::i#2 -- pbuz1=pbuc1_plus_vwuz2 - lda i - clc - adc #screen - sta _1+1 - // [9] *((byte*~) main::$1) ← (byte) 'a' -- _deref_pbuz1=vbuc1 - lda #'a' - ldy #0 - sta (_1),y - // i+=40 - // [10] (word) main::i#1 ← (word) main::i#2 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 - lda #$28 - clc - adc i - sta i - bcc !+ - inc i+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (word) main::i#2 = (word) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/derefidx-word-0.sym b/src/test/ref/derefidx-word-0.sym index e578dd097..635b046d9 100644 --- a/src/test/ref/derefidx-word-0.sym +++ b/src/test/ref/derefidx-word-0.sym @@ -7,10 +7,10 @@ (label) main::@2 (label) main::@return (word) main::i -(word) main::i#1 i zp ZP_WORD:2 22.0 -(word) main::i#2 i zp ZP_WORD:2 11.0 +(word) main::i#1 i zp ZP_WORD:2 16.5 +(word) main::i#4 i zp ZP_WORD:2 11.0 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -zp ZP_WORD:2 [ main::i#2 main::i#1 ] +zp ZP_WORD:2 [ main::i#4 main::i#1 ] zp ZP_WORD:4 [ main::$1 ] diff --git a/src/test/ref/euclid-3.asm b/src/test/ref/euclid-3.asm index 4c4115759..903952ab4 100644 --- a/src/test/ref/euclid-3.asm +++ b/src/test/ref/euclid-3.asm @@ -177,14 +177,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [65] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [65] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [65] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [66] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [65] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [68] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [66] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [69] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [67] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [65] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [65] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [68] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [65] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [65] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [65] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [66] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [65] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [68] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [66] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [69] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [67] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [65] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [65] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [68] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [65] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [65] phi from memset to memset::@2 [phi:memset->memset::@2] + // [65] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [65] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [65] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [66] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [66] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [67] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [68] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -2843,24 +2875,8 @@ memset: { bne b2 // memset::@return // } - // [67] return + // [69] return rts - // memset::@2 - b2: - // *dst = c - // [68] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [69] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [65] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [65] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/euclid-3.sym b/src/test/ref/euclid-3.sym index 747a12305..7d3444b2a 100644 --- a/src/test/ref/euclid-3.sym +++ b/src/test/ref/euclid-3.sym @@ -36,8 +36,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:6 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:6 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:6 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:6 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -102,7 +102,7 @@ reg byte x [ print_byte::b#3 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] reg byte a [ print_char::ch#4 print_char::ch#0 print_char::ch#1 ] zp ZP_WORD:4 [ print_char_cursor#31 print_char_cursor#51 print_char_cursor#53 print_char_cursor#64 print_char_cursor#65 print_char_cursor#66 print_char_cursor#67 print_char_cursor#68 print_char_cursor#32 ] reg byte x [ euclid::b#2 euclid::b#0 euclid::b#1 ] -zp ZP_WORD:6 [ memset::dst#2 memset::dst#1 print_line_cursor#16 print_line_cursor#33 print_line_cursor#1 ] +zp ZP_WORD:6 [ memset::dst#4 memset::dst#1 print_line_cursor#16 print_line_cursor#33 print_line_cursor#1 ] reg byte a [ euclid::return#0 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] diff --git a/src/test/ref/euclid-problem.asm b/src/test/ref/euclid-problem.asm index 3b87d9ebf..8a84b191b 100644 --- a/src/test/ref/euclid-problem.asm +++ b/src/test/ref/euclid-problem.asm @@ -9,6 +9,12 @@ main: { ldx #2 lda #$80 sta a + b4: + txa + eor #$ff + sec + adc a + sta a b1: cpx a bne b2 @@ -23,11 +29,4 @@ main: { sbc a tax jmp b1 - b4: - txa - eor #$ff - sec - adc a - sta a - jmp b1 } diff --git a/src/test/ref/euclid-problem.cfg b/src/test/ref/euclid-problem.cfg index 3a48bae1c..ed56e6868 100644 --- a/src/test/ref/euclid-problem.cfg +++ b/src/test/ref/euclid-problem.cfg @@ -9,24 +9,25 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@4 +main::@4: scope:[main] from main main::@2 + [5] (byte) main::b#10 ← phi( main::@2/(byte) main::b#11 main/(byte) 2 ) + [5] (byte) main::a#13 ← phi( main::@2/(byte) main::a#1 main/(byte) $80 ) + [6] (byte) main::a#1 ← (byte) main::a#13 - (byte) main::b#10 to:main::@1 -main::@1: scope:[main] from main main::@4 main::@5 - [5] (byte) main::b#2 ← phi( main/(byte) 2 main::@4/(byte) main::b#2 main::@5/(byte) main::b#1 ) - [5] (byte) main::a#2 ← phi( main/(byte) $80 main::@4/(byte) main::a#1 main::@5/(byte) main::a#2 ) - [6] if((byte) main::a#2!=(byte) main::b#2) goto main::@2 +main::@1: scope:[main] from main::@4 main::@5 + [7] (byte) main::b#11 ← phi( main::@4/(byte) main::b#10 main::@5/(byte) main::b#1 ) + [8] if((byte) main::a#1!=(byte) main::b#11) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [7] *((const byte*) SCREEN#0) ← (byte) main::a#2 + [9] *((const byte*) SCREEN#0) ← (byte) main::a#1 to:main::@return main::@return: scope:[main] from main::@3 - [8] return + [10] return to:@return main::@2: scope:[main] from main::@1 - [9] if((byte) main::a#2>(byte) main::b#2) goto main::@4 + [11] if((byte) main::a#1>(byte) main::b#11) goto main::@4 to:main::@5 main::@5: scope:[main] from main::@2 - [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 - to:main::@1 -main::@4: scope:[main] from main::@2 - [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 + [12] (byte) main::b#1 ← (byte) main::b#11 - (byte) main::a#1 to:main::@1 diff --git a/src/test/ref/euclid-problem.log b/src/test/ref/euclid-problem.log index e0dbc1627..3ba92e91a 100644 --- a/src/test/ref/euclid-problem.log +++ b/src/test/ref/euclid-problem.log @@ -111,26 +111,58 @@ Constant (const byte*) SCREEN#0 = (byte*) 1024 Constant (const byte) main::a#0 = $80 Constant (const byte) main::b#0 = 2 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::a#10 = (byte) main::a#8 (byte) main::a#7 +Alias (byte) main::b#6 = (byte) main::b#7 (byte) main::b#8 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::a#11 (const byte) main::a#0 +Identical Phi Values (byte) main::b#9 (const byte) main::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (main::@1_1) in block main::@3 +if() condition always true - replacing block destination [13] if((const byte) main::a#0!=(const byte) main::b#0) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::a#10 = (byte) main::a#2 (byte) main::a#9 +Alias (byte) main::b#2 = (byte) main::b#6 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::a#14 (const byte) main::a#0 +Identical Phi Values (byte) main::b#12 (const byte) main::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (main::@2_1) in block main::@8 +Removing PHI-reference to removed block (main::@2_1) in block main::@8 +if() condition always true - replacing block destination [13] if((const byte) main::a#0>(const byte) main::b#0) goto main::@4 +Successful SSA optimization Pass2ConstantIfs +Alias (byte) main::a#10 = (byte) main::a#12 +Alias (byte) main::b#11 = (byte) main::b#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::a#10 (byte) main::a#1 +Successful SSA optimization Pass2IdenticalPhiElimination Inlining constant with var siblings (const byte) main::a#0 Inlining constant with var siblings (const byte) main::b#0 Constant inlined main::a#0 = (byte) $80 Constant inlined main::b#0 = (byte) 2 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@11(between main::@2 and main::@4) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 +Adding NOP phi() at start of main::@2_1 CALL GRAPH Calls in [] to main:2 -Created 2 initial phi equivalence classes -Coalesced (already) [12] main::a#8 ← main::a#2 -Coalesced [13] main::b#7 ← main::b#1 -Coalesced [15] main::a#7 ← main::a#1 -Coalesced (already) [16] main::b#6 ← main::b#2 +Created 3 initial phi equivalence classes +Coalesced [10] main::b#13 ← main::b#10 +Coalesced [17] main::b#14 ← main::b#1 +Coalesced [18] main::a#15 ← main::a#1 +Coalesced (already) [19] main::b#15 ← main::b#11 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@2_1 +Culled Empty Block (label) main::@11 Renumbering block main::@8 to main::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 @@ -149,26 +181,27 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@4 +main::@4: scope:[main] from main main::@2 + [5] (byte) main::b#10 ← phi( main::@2/(byte) main::b#11 main/(byte) 2 ) + [5] (byte) main::a#13 ← phi( main::@2/(byte) main::a#1 main/(byte) $80 ) + [6] (byte) main::a#1 ← (byte) main::a#13 - (byte) main::b#10 to:main::@1 -main::@1: scope:[main] from main main::@4 main::@5 - [5] (byte) main::b#2 ← phi( main/(byte) 2 main::@4/(byte) main::b#2 main::@5/(byte) main::b#1 ) - [5] (byte) main::a#2 ← phi( main/(byte) $80 main::@4/(byte) main::a#1 main::@5/(byte) main::a#2 ) - [6] if((byte) main::a#2!=(byte) main::b#2) goto main::@2 +main::@1: scope:[main] from main::@4 main::@5 + [7] (byte) main::b#11 ← phi( main::@4/(byte) main::b#10 main::@5/(byte) main::b#1 ) + [8] if((byte) main::a#1!=(byte) main::b#11) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [7] *((const byte*) SCREEN#0) ← (byte) main::a#2 + [9] *((const byte*) SCREEN#0) ← (byte) main::a#1 to:main::@return main::@return: scope:[main] from main::@3 - [8] return + [10] return to:@return main::@2: scope:[main] from main::@1 - [9] if((byte) main::a#2>(byte) main::b#2) goto main::@4 + [11] if((byte) main::a#1>(byte) main::b#11) goto main::@4 to:main::@5 main::@5: scope:[main] from main::@2 - [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 - to:main::@1 -main::@4: scope:[main] from main::@2 - [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 + [12] (byte) main::b#1 ← (byte) main::b#11 - (byte) main::a#1 to:main::@1 @@ -176,20 +209,21 @@ VARIABLE REGISTER WEIGHTS (byte*) SCREEN (void()) main() (byte) main::a -(byte) main::a#1 22.0 -(byte) main::a#2 19.75 +(byte) main::a#1 83.39999999999999 +(byte) main::a#13 112.0 (byte) main::b -(byte) main::b#1 22.0 -(byte) main::b#2 19.25 +(byte) main::b#1 202.0 +(byte) main::b#10 61.5 +(byte) main::b#11 171.99999999999997 Initial phi equivalence classes -[ main::a#2 main::a#1 ] -[ main::b#2 main::b#1 ] +[ main::a#13 main::a#1 ] +[ main::b#10 main::b#11 main::b#1 ] Complete equivalence classes -[ main::a#2 main::a#1 ] -[ main::b#2 main::b#1 ] -Allocated zp ZP_BYTE:2 [ main::a#2 main::a#1 ] -Allocated zp ZP_BYTE:3 [ main::b#2 main::b#1 ] +[ main::a#13 main::a#1 ] +[ main::b#10 main::b#11 main::b#1 ] +Allocated zp ZP_BYTE:2 [ main::a#13 main::a#1 ] +Allocated zp ZP_BYTE:3 [ main::b#10 main::b#11 main::b#1 ] INITIAL ASM Target platform is c64basic @@ -222,81 +256,85 @@ bend: main: { .label a = 2 .label b = 3 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::b#2 = (byte) 2 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@4 [phi:main->main::@4] + b4_from_main: + // [5] phi (byte) main::b#10 = (byte) 2 [phi:main->main::@4#0] -- vbuz1=vbuc1 lda #2 sta b - // [5] phi (byte) main::a#2 = (byte) $80 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::a#13 = (byte) $80 [phi:main->main::@4#1] -- vbuz1=vbuc1 lda #$80 sta a + jmp b4 + // [5] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + b4_from_b2: + // [5] phi (byte) main::b#10 = (byte) main::b#11 [phi:main::@2->main::@4#0] -- register_copy + // [5] phi (byte) main::a#13 = (byte) main::a#1 [phi:main::@2->main::@4#1] -- register_copy + jmp b4 + // main::@4 + b4: + // [6] (byte) main::a#1 ← (byte) main::a#13 - (byte) main::b#10 -- vbuz1=vbuz1_minus_vbuz2 + lda a + sec + sbc b + sta a + // [7] phi from main::@4 main::@5 to main::@1 [phi:main::@4/main::@5->main::@1] + b1_from_b4: + b1_from_b5: + // [7] phi (byte) main::b#11 = (byte) main::b#10 [phi:main::@4/main::@5->main::@1#0] -- register_copy jmp b1 // main::@1 b1: - // [6] if((byte) main::a#2!=(byte) main::b#2) goto main::@2 -- vbuz1_neq_vbuz2_then_la1 + // [8] if((byte) main::a#1!=(byte) main::b#11) goto main::@2 -- vbuz1_neq_vbuz2_then_la1 lda a cmp b bne b2 jmp b3 // main::@3 b3: - // [7] *((const byte*) SCREEN#0) ← (byte) main::a#2 -- _deref_pbuc1=vbuz1 + // [9] *((const byte*) SCREEN#0) ← (byte) main::a#1 -- _deref_pbuc1=vbuz1 lda a sta SCREEN jmp breturn // main::@return breturn: - // [8] return + // [10] return rts // main::@2 b2: - // [9] if((byte) main::a#2>(byte) main::b#2) goto main::@4 -- vbuz1_gt_vbuz2_then_la1 + // [11] if((byte) main::a#1>(byte) main::b#11) goto main::@4 -- vbuz1_gt_vbuz2_then_la1 lda b cmp a - bcc b4 + bcc b4_from_b2 jmp b5 // main::@5 b5: - // [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 -- vbuz1=vbuz1_minus_vbuz2 + // [12] (byte) main::b#1 ← (byte) main::b#11 - (byte) main::a#1 -- vbuz1=vbuz1_minus_vbuz2 lda b sec sbc a sta b - // [5] phi from main::@4 main::@5 to main::@1 [phi:main::@4/main::@5->main::@1] - b1_from_b4: - b1_from_b5: - // [5] phi (byte) main::b#2 = (byte) main::b#2 [phi:main::@4/main::@5->main::@1#0] -- register_copy - // [5] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@4/main::@5->main::@1#1] -- register_copy - jmp b1 - // main::@4 - b4: - // [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 -- vbuz1=vbuz1_minus_vbuz2 - lda a - sec - sbc b - sta a - jmp b1_from_b4 + jmp b1_from_b5 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 [ main::a#2 main::b#1 ] ( main:2 [ main::a#2 main::b#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::a#2 main::a#1 ] -Statement [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 [ main::b#2 main::a#1 ] ( main:2 [ main::b#2 main::a#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::b#2 main::b#1 ] -Statement [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 [ main::a#2 main::b#1 ] ( main:2 [ main::a#2 main::b#1 ] ) always clobbers reg byte a -Statement [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 [ main::b#2 main::a#1 ] ( main:2 [ main::b#2 main::a#1 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::a#2 main::a#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ main::b#2 main::b#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Statement [6] (byte) main::a#1 ← (byte) main::a#13 - (byte) main::b#10 [ main::b#10 main::a#1 ] ( main:2 [ main::b#10 main::a#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::b#10 main::b#11 main::b#1 ] +Statement [12] (byte) main::b#1 ← (byte) main::b#11 - (byte) main::a#1 [ main::a#1 main::b#1 ] ( main:2 [ main::a#1 main::b#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::a#13 main::a#1 ] +Statement [6] (byte) main::a#1 ← (byte) main::a#13 - (byte) main::b#10 [ main::b#10 main::a#1 ] ( main:2 [ main::b#10 main::a#1 ] ) always clobbers reg byte a +Statement [12] (byte) main::b#1 ← (byte) main::b#11 - (byte) main::a#1 [ main::a#1 main::b#1 ] ( main:2 [ main::a#1 main::b#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::a#13 main::a#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::b#10 main::b#11 main::b#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 41.75: zp ZP_BYTE:2 [ main::a#2 main::a#1 ] 41.25: zp ZP_BYTE:3 [ main::b#2 main::b#1 ] +Uplift Scope [main] 435.5: zp ZP_BYTE:3 [ main::b#10 main::b#11 main::b#1 ] 195.4: zp ZP_BYTE:2 [ main::a#13 main::a#1 ] Uplift Scope [] -Uplifting [main] best 568 combination zp ZP_BYTE:2 [ main::a#2 main::a#1 ] reg byte x [ main::b#2 main::b#1 ] -Uplifting [] best 568 combination -Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::a#2 main::a#1 ] -Uplifting [main] best 568 combination zp ZP_BYTE:2 [ main::a#2 main::a#1 ] +Uplifting [main] best 3478 combination reg byte x [ main::b#10 main::b#11 main::b#1 ] zp ZP_BYTE:2 [ main::a#13 main::a#1 ] +Uplifting [] best 3478 combination +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::a#13 main::a#1 ] +Uplifting [main] best 3478 combination zp ZP_BYTE:2 [ main::a#13 main::a#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -327,78 +365,86 @@ bend: // main main: { .label a = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::b#2 = (byte) 2 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@4 [phi:main->main::@4] + b4_from_main: + // [5] phi (byte) main::b#10 = (byte) 2 [phi:main->main::@4#0] -- vbuxx=vbuc1 ldx #2 - // [5] phi (byte) main::a#2 = (byte) $80 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::a#13 = (byte) $80 [phi:main->main::@4#1] -- vbuz1=vbuc1 lda #$80 sta a - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::a#2!=(byte) main::b#2) goto main::@2 -- vbuz1_neq_vbuxx_then_la1 - cpx a - bne b2 - jmp b3 - // main::@3 - b3: - // [7] *((const byte*) SCREEN#0) ← (byte) main::a#2 -- _deref_pbuc1=vbuz1 - lda a - sta SCREEN - jmp breturn - // main::@return - breturn: - // [8] return - rts - // main::@2 - b2: - // [9] if((byte) main::a#2>(byte) main::b#2) goto main::@4 -- vbuz1_gt_vbuxx_then_la1 - cpx a - bcc b4 - jmp b5 - // main::@5 - b5: - // [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 -- vbuxx=vbuxx_minus_vbuz1 - txa - sec - sbc a - tax - // [5] phi from main::@4 main::@5 to main::@1 [phi:main::@4/main::@5->main::@1] - b1_from_b4: - b1_from_b5: - // [5] phi (byte) main::b#2 = (byte) main::b#2 [phi:main::@4/main::@5->main::@1#0] -- register_copy - // [5] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@4/main::@5->main::@1#1] -- register_copy - jmp b1 + jmp b4 + // [5] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + b4_from_b2: + // [5] phi (byte) main::b#10 = (byte) main::b#11 [phi:main::@2->main::@4#0] -- register_copy + // [5] phi (byte) main::a#13 = (byte) main::a#1 [phi:main::@2->main::@4#1] -- register_copy + jmp b4 // main::@4 b4: - // [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 -- vbuz1=vbuz1_minus_vbuxx + // [6] (byte) main::a#1 ← (byte) main::a#13 - (byte) main::b#10 -- vbuz1=vbuz1_minus_vbuxx txa eor #$ff sec adc a sta a - jmp b1_from_b4 + // [7] phi from main::@4 main::@5 to main::@1 [phi:main::@4/main::@5->main::@1] + b1_from_b4: + b1_from_b5: + // [7] phi (byte) main::b#11 = (byte) main::b#10 [phi:main::@4/main::@5->main::@1#0] -- register_copy + jmp b1 + // main::@1 + b1: + // [8] if((byte) main::a#1!=(byte) main::b#11) goto main::@2 -- vbuz1_neq_vbuxx_then_la1 + cpx a + bne b2 + jmp b3 + // main::@3 + b3: + // [9] *((const byte*) SCREEN#0) ← (byte) main::a#1 -- _deref_pbuc1=vbuz1 + lda a + sta SCREEN + jmp breturn + // main::@return + breturn: + // [10] return + rts + // main::@2 + b2: + // [11] if((byte) main::a#1>(byte) main::b#11) goto main::@4 -- vbuz1_gt_vbuxx_then_la1 + cpx a + bcc b4_from_b2 + jmp b5 + // main::@5 + b5: + // [12] (byte) main::b#1 ← (byte) main::b#11 - (byte) main::a#1 -- vbuxx=vbuxx_minus_vbuz1 + txa + sec + sbc a + tax + jmp b1_from_b5 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b4 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp breturn Removing instruction jmp b5 Succesful ASM optimization Pass5NextJumpElimination -Replacing label b1_from_b4 with b1_from_b5 +Replacing label b4_from_b2 with b4 +Replacing label b1_from_b5 with b1 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b4_from_b2: Removing instruction b1_from_b4: +Removing instruction b1_from_b5: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b4_from_main: Removing instruction b3: Removing instruction breturn: Removing instruction b5: @@ -406,12 +452,9 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Skipping double jump to b1 in jmp b1_from_b5 -Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b1_from_b5 to b3 -Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b4 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: -Removing instruction b3: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE @@ -428,18 +471,19 @@ FINAL SYMBOL TABLE (label) main::@5 (label) main::@return (byte) main::a -(byte) main::a#1 a zp ZP_BYTE:2 22.0 -(byte) main::a#2 a zp ZP_BYTE:2 19.75 +(byte) main::a#1 a zp ZP_BYTE:2 83.39999999999999 +(byte) main::a#13 a zp ZP_BYTE:2 112.0 (byte) main::b -(byte) main::b#1 reg byte x 22.0 -(byte) main::b#2 reg byte x 19.25 +(byte) main::b#1 reg byte x 202.0 +(byte) main::b#10 reg byte x 61.5 +(byte) main::b#11 reg byte x 171.99999999999997 -zp ZP_BYTE:2 [ main::a#2 main::a#1 ] -reg byte x [ main::b#2 main::b#1 ] +zp ZP_BYTE:2 [ main::a#13 main::a#1 ] +reg byte x [ main::b#10 main::b#11 main::b#1 ] FINAL ASSEMBLER -Score: 463 +Score: 2503 // File Comments // Demonstrates a problem where wrong alive ranges result in clobbering an alive variable @@ -460,53 +504,54 @@ Score: 463 // main main: { .label a = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::b#2 = (byte) 2 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@4 [phi:main->main::@4] + // [5] phi (byte) main::b#10 = (byte) 2 [phi:main->main::@4#0] -- vbuxx=vbuc1 ldx #2 - // [5] phi (byte) main::a#2 = (byte) $80 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::a#13 = (byte) $80 [phi:main->main::@4#1] -- vbuz1=vbuc1 lda #$80 sta a - // main::@1 - b1: - // while (a!=b) - // [6] if((byte) main::a#2!=(byte) main::b#2) goto main::@2 -- vbuz1_neq_vbuxx_then_la1 - cpx a - bne b2 - // main::@3 - // *SCREEN = a - // [7] *((const byte*) SCREEN#0) ← (byte) main::a#2 -- _deref_pbuc1=vbuz1 - lda a - sta SCREEN - // main::@return - // } - // [8] return - rts - // main::@2 - b2: - // if(a>b) - // [9] if((byte) main::a#2>(byte) main::b#2) goto main::@4 -- vbuz1_gt_vbuxx_then_la1 - cpx a - bcc b4 - // main::@5 - // b = b-a - // [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 -- vbuxx=vbuxx_minus_vbuz1 - txa - sec - sbc a - tax - // [5] phi from main::@4 main::@5 to main::@1 [phi:main::@4/main::@5->main::@1] - // [5] phi (byte) main::b#2 = (byte) main::b#2 [phi:main::@4/main::@5->main::@1#0] -- register_copy - // [5] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@4/main::@5->main::@1#1] -- register_copy - jmp b1 + // [5] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + // [5] phi (byte) main::b#10 = (byte) main::b#11 [phi:main::@2->main::@4#0] -- register_copy + // [5] phi (byte) main::a#13 = (byte) main::a#1 [phi:main::@2->main::@4#1] -- register_copy // main::@4 b4: // a = a-b - // [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 -- vbuz1=vbuz1_minus_vbuxx + // [6] (byte) main::a#1 ← (byte) main::a#13 - (byte) main::b#10 -- vbuz1=vbuz1_minus_vbuxx txa eor #$ff sec adc a sta a + // [7] phi from main::@4 main::@5 to main::@1 [phi:main::@4/main::@5->main::@1] + // [7] phi (byte) main::b#11 = (byte) main::b#10 [phi:main::@4/main::@5->main::@1#0] -- register_copy + // main::@1 + b1: + // while (a!=b) + // [8] if((byte) main::a#1!=(byte) main::b#11) goto main::@2 -- vbuz1_neq_vbuxx_then_la1 + cpx a + bne b2 + // main::@3 + // *SCREEN = a + // [9] *((const byte*) SCREEN#0) ← (byte) main::a#1 -- _deref_pbuc1=vbuz1 + lda a + sta SCREEN + // main::@return + // } + // [10] return + rts + // main::@2 + b2: + // if(a>b) + // [11] if((byte) main::a#1>(byte) main::b#11) goto main::@4 -- vbuz1_gt_vbuxx_then_la1 + cpx a + bcc b4 + // main::@5 + // b = b-a + // [12] (byte) main::b#1 ← (byte) main::b#11 - (byte) main::a#1 -- vbuxx=vbuxx_minus_vbuz1 + txa + sec + sbc a + tax jmp b1 } // File Data diff --git a/src/test/ref/euclid-problem.sym b/src/test/ref/euclid-problem.sym index 5acfef455..3d0b94cbe 100644 --- a/src/test/ref/euclid-problem.sym +++ b/src/test/ref/euclid-problem.sym @@ -11,11 +11,12 @@ (label) main::@5 (label) main::@return (byte) main::a -(byte) main::a#1 a zp ZP_BYTE:2 22.0 -(byte) main::a#2 a zp ZP_BYTE:2 19.75 +(byte) main::a#1 a zp ZP_BYTE:2 83.39999999999999 +(byte) main::a#13 a zp ZP_BYTE:2 112.0 (byte) main::b -(byte) main::b#1 reg byte x 22.0 -(byte) main::b#2 reg byte x 19.25 +(byte) main::b#1 reg byte x 202.0 +(byte) main::b#10 reg byte x 61.5 +(byte) main::b#11 reg byte x 171.99999999999997 -zp ZP_BYTE:2 [ main::a#2 main::a#1 ] -reg byte x [ main::b#2 main::b#1 ] +zp ZP_BYTE:2 [ main::a#13 main::a#1 ] +reg byte x [ main::b#10 main::b#11 main::b#1 ] diff --git a/src/test/ref/examples/3d/3d.asm b/src/test/ref/examples/3d/3d.asm index 08f666bca..cb699d6e3 100644 --- a/src/test/ref/examples/3d/3d.asm +++ b/src/test/ref/examples/3d/3d.asm @@ -964,14 +964,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [254] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [254] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [254] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [255] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [254] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [257] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [255] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [258] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [256] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [254] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [254] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [257] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [254] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [254] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [254] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [255] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [254] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [257] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [255] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [258] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [256] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [254] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [254] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [257] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [254] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [254] phi from memset to memset::@2 [phi:memset->memset::@2] + // [254] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [254] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [254] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [255] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [255] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [256] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [257] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -11703,24 +11734,8 @@ memset: { bne b2 // memset::@return // } - // [256] return + // [258] return rts - // memset::@2 - b2: - // *dst = c - // [257] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [258] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [254] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [254] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // sprites_init // Initialize sprites diff --git a/src/test/ref/examples/3d/3d.sym b/src/test/ref/examples/3d/3d.sym index ab7a128c8..51e0607cd 100644 --- a/src/test/ref/examples/3d/3d.sym +++ b/src/test/ref/examples/3d/3d.sym @@ -350,8 +350,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:15 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:15 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:15 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:15 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -580,7 +580,7 @@ reg byte a [ calculate_matrix::$33 ] reg byte a [ calculate_matrix::$34 ] reg byte x [ debug_print_init::col#0 ] zp ZP_WORD:13 [ debug_print_init::$41 print_str_at::str#13 print_str_at::str#15 print_str_at::str#0 print_sbyte_at::at#21 print_sbyte_at::at#15 print_sbyte_at::at#16 print_sbyte_at::at#17 print_sbyte_at::at#18 print_sbyte_at::at#19 print_sbyte_at::at#20 print_sbyte_at::at#0 print_sbyte_at::at#1 print_sbyte_at::at#2 print_char_at::at#4 print_char_at::at#2 print_char_at::at#3 print_char_at::at#0 print_char_at::at#1 print_byte_at::at#0 ] -zp ZP_WORD:15 [ debug_print_init::$44 memset::dst#2 memset::dst#1 print_str_at::at#13 print_str_at::at#15 print_str_at::at#0 ] +zp ZP_WORD:15 [ debug_print_init::$44 memset::dst#4 memset::dst#1 print_str_at::at#13 print_str_at::at#15 print_str_at::at#0 ] zp ZP_WORD:17 [ debug_print_init::$47 ] zp ZP_WORD:19 [ debug_print_init::$50 ] zp ZP_WORD:21 [ debug_print_init::$53 ] diff --git a/src/test/ref/examples/3d/perspective.asm b/src/test/ref/examples/3d/perspective.asm index 9b7adac1d..ba7b64680 100644 --- a/src/test/ref/examples/3d/perspective.asm +++ b/src/test/ref/examples/3d/perspective.asm @@ -226,14 +226,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [83] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [83] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [83] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [83] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [84] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [85] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [83] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [83] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [86] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp # (signed word) mulf_init::sqr#2 [ mulf_init::sqr#2 mulf_init::i#2 mulf_init::add#2 mulf_init::val#0 ] ( main:2::mulf_init:5 [ mulf_init::sqr#2 mulf_init::i#2 mulf_init::add#2 mulf_init::val#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ mulf_init::i#2 mulf_init::i#1 ] Statement [93] (byte~) mulf_init::$4 ← - (byte) mulf_init::i#2 [ mulf_init::sqr#2 mulf_init::i#2 mulf_init::add#2 mulf_init::val#0 mulf_init::$4 ] ( main:2::mulf_init:5 [ mulf_init::sqr#2 mulf_init::i#2 mulf_init::add#2 mulf_init::val#0 mulf_init::$4 ] ) always clobbers reg byte a @@ -2479,8 +2491,8 @@ Statement [64] *((const signed byte*) yr#0) ← (const signed byte) do_perspecti Statement [65] *((const signed byte*) zr#0) ← (const signed byte) do_perspective::z#0 [ ] ( main:2::do_perspective:10::perspective:27 [ print_char_cursor#2 ] ) always clobbers reg byte a Statement asm { ldazr staPP+1 PP: ldaPERSP_Z stapsp1 eor#$ff stapsp2 clc ldyyr lda(psp1),y sbc(psp2),y adc#$80 stayr clc ldyxr lda(psp1),y sbc(psp2),y adc#$80 staxr } always clobbers reg byte a reg byte y Statement [78] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#4 [ print_char_cursor#12 print_sbyte::b#0 ] ( main:2::do_perspective:10::print_sbyte:15 [ print_char_cursor#12 print_sbyte::b#0 ] main:2::do_perspective:10::print_sbyte:19 [ print_char_cursor#12 print_sbyte::b#0 ] main:2::do_perspective:10::print_sbyte:23 [ print_char_cursor#12 print_sbyte::b#0 ] ) always clobbers reg byte a -Statement [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:8::memset:80 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:8::memset:80 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [84] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:8::memset:80 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [86] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:8::memset:80 [ memset::dst#1 ] ) always clobbers reg byte a Statement [90] (byte) mulf_init::val#0 ← > (signed word) mulf_init::sqr#2 [ mulf_init::sqr#2 mulf_init::i#2 mulf_init::add#2 mulf_init::val#0 ] ( main:2::mulf_init:5 [ mulf_init::sqr#2 mulf_init::i#2 mulf_init::add#2 mulf_init::val#0 ] ) always clobbers reg byte a Statement [91] *((const byte[$200]) mulf_sqr1#0 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0 [ mulf_init::sqr#2 mulf_init::i#2 mulf_init::add#2 mulf_init::val#0 ] ( main:2::mulf_init:5 [ mulf_init::sqr#2 mulf_init::i#2 mulf_init::add#2 mulf_init::val#0 ] ) always clobbers reg byte a Statement [92] *((const byte[$200]) mulf_sqr1#0+(word) $100 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0 [ mulf_init::sqr#2 mulf_init::i#2 mulf_init::add#2 mulf_init::val#0 ] ( main:2::mulf_init:5 [ mulf_init::sqr#2 mulf_init::i#2 mulf_init::add#2 mulf_init::val#0 ] ) always clobbers reg byte a @@ -2501,7 +2513,7 @@ Potential registers zp ZP_BYTE:6 [ print_byte::b#3 print_byte::b#5 print_byte::b Potential registers zp ZP_BYTE:7 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:8 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] : zp ZP_WORD:8 , Potential registers zp ZP_BYTE:10 [ print_sbyte::b#6 print_sbyte::b#0 print_sbyte::b#4 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , -Potential registers zp ZP_WORD:11 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:11 , +Potential registers zp ZP_WORD:11 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:11 , Potential registers zp ZP_WORD:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ] : zp ZP_WORD:13 , Potential registers zp ZP_BYTE:15 [ mulf_init::i#2 mulf_init::i#1 ] : zp ZP_BYTE:15 , reg byte x , reg byte y , Potential registers zp ZP_WORD:16 [ mulf_init::add#2 mulf_init::add#1 ] : zp ZP_WORD:16 , @@ -2515,8 +2527,8 @@ Potential registers zp ZP_BYTE:23 [ mulf_init::$10 ] : zp ZP_BYTE:23 , reg byte REGISTER UPLIFT SCOPES Uplift Scope [mulf_init] 23.1: zp ZP_BYTE:15 [ mulf_init::i#2 mulf_init::i#1 ] 22: zp ZP_BYTE:22 [ mulf_init::$8 ] 22: zp ZP_BYTE:23 [ mulf_init::$10 ] 16.5: zp ZP_BYTE:21 [ mulf_init::$4 ] 9.69: zp ZP_WORD:16 [ mulf_init::add#2 mulf_init::add#1 ] 9: zp ZP_BYTE:20 [ mulf_init::val#0 ] 8.04: zp ZP_WORD:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ] Uplift Scope [] 38.5: zp ZP_WORD:2 [ print_line_cursor#11 print_line_cursor#1 ] 34.41: zp ZP_WORD:8 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:11 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_str] 35.5: zp ZP_WORD:4 [ print_str::str#7 print_str::str#9 print_str::str#0 ] +Uplift Scope [memset] 33: zp ZP_WORD:11 [ memset::dst#4 memset::dst#1 ] Uplift Scope [print_byte] 14.5: zp ZP_BYTE:6 [ print_byte::b#3 print_byte::b#5 print_byte::b#6 print_byte::b#0 ] 4: zp ZP_BYTE:18 [ print_byte::$0 ] 4: zp ZP_BYTE:19 [ print_byte::$2 ] Uplift Scope [print_char] 14: zp ZP_BYTE:7 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Uplift Scope [print_sbyte] 9: zp ZP_BYTE:10 [ print_sbyte::b#6 print_sbyte::b#0 print_sbyte::b#4 ] @@ -2527,28 +2539,28 @@ Uplift Scope [main] Uplift Scope [do_perspective] Uplift Scope [perspective] -Uplifting [mulf_init] best 4030 combination reg byte y [ mulf_init::i#2 mulf_init::i#1 ] reg byte x [ mulf_init::$8 ] reg byte x [ mulf_init::$10 ] reg byte x [ mulf_init::$4 ] zp ZP_WORD:16 [ mulf_init::add#2 mulf_init::add#1 ] zp ZP_BYTE:20 [ mulf_init::val#0 ] zp ZP_WORD:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ] +Uplifting [mulf_init] best 4060 combination reg byte y [ mulf_init::i#2 mulf_init::i#1 ] reg byte x [ mulf_init::$8 ] reg byte x [ mulf_init::$10 ] reg byte x [ mulf_init::$4 ] zp ZP_WORD:16 [ mulf_init::add#2 mulf_init::add#1 ] zp ZP_BYTE:20 [ mulf_init::val#0 ] zp ZP_WORD:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ] Limited combination testing to 100 combinations of 432 possible. -Uplifting [] best 4030 combination zp ZP_WORD:2 [ print_line_cursor#11 print_line_cursor#1 ] zp ZP_WORD:8 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] -Uplifting [memset] best 4030 combination zp ZP_WORD:11 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_str] best 4030 combination zp ZP_WORD:4 [ print_str::str#7 print_str::str#9 print_str::str#0 ] -Uplifting [print_byte] best 4009 combination reg byte x [ print_byte::b#3 print_byte::b#5 print_byte::b#6 print_byte::b#0 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -Uplifting [print_char] best 3994 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] -Uplifting [print_sbyte] best 3979 combination reg byte x [ print_sbyte::b#6 print_sbyte::b#0 print_sbyte::b#4 ] -Uplifting [RADIX] best 3979 combination -Uplifting [print_ln] best 3979 combination -Uplifting [print_cls] best 3979 combination -Uplifting [main] best 3979 combination -Uplifting [do_perspective] best 3979 combination -Uplifting [perspective] best 3979 combination +Uplifting [] best 4060 combination zp ZP_WORD:2 [ print_line_cursor#11 print_line_cursor#1 ] zp ZP_WORD:8 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] +Uplifting [print_str] best 4060 combination zp ZP_WORD:4 [ print_str::str#7 print_str::str#9 print_str::str#0 ] +Uplifting [memset] best 4060 combination zp ZP_WORD:11 [ memset::dst#4 memset::dst#1 ] +Uplifting [print_byte] best 4039 combination reg byte x [ print_byte::b#3 print_byte::b#5 print_byte::b#6 print_byte::b#0 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [print_char] best 4024 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] +Uplifting [print_sbyte] best 4009 combination reg byte x [ print_sbyte::b#6 print_sbyte::b#0 print_sbyte::b#4 ] +Uplifting [RADIX] best 4009 combination +Uplifting [print_ln] best 4009 combination +Uplifting [print_cls] best 4009 combination +Uplifting [main] best 4009 combination +Uplifting [do_perspective] best 4009 combination +Uplifting [perspective] best 4009 combination Attempting to uplift remaining variables inzp ZP_BYTE:20 [ mulf_init::val#0 ] -Uplifting [mulf_init] best 3979 combination zp ZP_BYTE:20 [ mulf_init::val#0 ] +Uplifting [mulf_init] best 4009 combination zp ZP_BYTE:20 [ mulf_init::val#0 ] Coalescing zero page register [ zp ZP_WORD:4 [ print_str::str#7 print_str::str#9 print_str::str#0 ] ] with [ zp ZP_WORD:2 [ print_line_cursor#11 print_line_cursor#1 ] ] -Coalescing zero page register [ zp ZP_WORD:11 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:8 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] ] +Coalescing zero page register [ zp ZP_WORD:11 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:8 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] ] Coalescing zero page register [ zp ZP_WORD:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ] ] with [ zp ZP_WORD:4 [ print_str::str#7 print_str::str#9 print_str::str#0 print_line_cursor#11 print_line_cursor#1 ] ] -Coalescing zero page register [ zp ZP_WORD:16 [ mulf_init::add#2 mulf_init::add#1 ] ] with [ zp ZP_WORD:11 [ memset::dst#2 memset::dst#1 print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] ] +Coalescing zero page register [ zp ZP_WORD:16 [ mulf_init::add#2 mulf_init::add#1 ] ] with [ zp ZP_WORD:11 [ memset::dst#4 memset::dst#1 print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] ] Allocated (was zp ZP_WORD:13) zp ZP_WORD:2 [ mulf_init::sqr#2 mulf_init::sqr#1 print_str::str#7 print_str::str#9 print_str::str#0 print_line_cursor#11 print_line_cursor#1 ] -Allocated (was zp ZP_WORD:16) zp ZP_WORD:4 [ mulf_init::add#2 mulf_init::add#1 memset::dst#2 memset::dst#1 print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] +Allocated (was zp ZP_WORD:16) zp ZP_WORD:4 [ mulf_init::add#2 mulf_init::add#1 memset::dst#4 memset::dst#1 print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] Allocated (was zp ZP_BYTE:20) zp ZP_BYTE:6 [ mulf_init::val#0 ] ASSEMBLER BEFORE OPTIMIZATION @@ -3060,43 +3072,44 @@ memset: { .label str = $400 .label end = str+num .label dst = 4 - // [83] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [83] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [83] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [83] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [83] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [84] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [85] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [83] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [83] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [86] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [83] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [83] phi from memset to memset::@2 [phi:memset->memset::@2] + // [83] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [83] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [83] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [84] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [85] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [86] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -4010,24 +4041,8 @@ memset: { bne b2 // memset::@return // } - // [85] return + // [87] return rts - // memset::@2 - b2: - // *dst = c - // [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [83] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [83] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // mulf_init // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x) and g(x) = f(1-x) diff --git a/src/test/ref/examples/3d/perspective.sym b/src/test/ref/examples/3d/perspective.sym index e6f089827..3046127de 100644 --- a/src/test/ref/examples/3d/perspective.sym +++ b/src/test/ref/examples/3d/perspective.sym @@ -53,8 +53,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:4 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:4 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:4 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:4 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -156,7 +156,7 @@ reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] reg byte x [ print_sbyte::b#6 print_sbyte::b#0 print_sbyte::b#4 ] zp ZP_WORD:2 [ mulf_init::sqr#2 mulf_init::sqr#1 print_str::str#7 print_str::str#9 print_str::str#0 print_line_cursor#11 print_line_cursor#1 ] reg byte y [ mulf_init::i#2 mulf_init::i#1 ] -zp ZP_WORD:4 [ mulf_init::add#2 mulf_init::add#1 memset::dst#2 memset::dst#1 print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] +zp ZP_WORD:4 [ mulf_init::add#2 mulf_init::add#1 memset::dst#4 memset::dst#1 print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] zp ZP_BYTE:6 [ mulf_init::val#0 ] diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.asm b/src/test/ref/examples/bresenham/bitmap-bresenham.asm index 6e5c5599f..c63c340b2 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.asm +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.asm @@ -30,11 +30,6 @@ lines: { .label l = 6 lda #0 sta l - b1: - lda l - cmp #lines_cnt - bcc b2 - rts b2: ldy l lda lines_x,y @@ -47,7 +42,10 @@ lines: { ldy lines_y+1,x jsr bitmap_line inc l - jmp b1 + lda l + cmp #lines_cnt + bcc b2 + rts } // Draw a line on the bitmap // bitmap_line(byte zeropage(3) x0, byte zeropage(5) x1, byte zeropage(2) y0, byte register(Y) y1) @@ -319,14 +317,6 @@ init_screen: { sta c lda #>SCREEN sta c+1 - b1: - lda c+1 - cmp #>SCREEN+$400 - bne b2 - lda c - cmp #SCREEN+$400 + bne b2 + lda c + cmp # (const byte*) bitmap_init::bitmap#0 Constant right-side identified [168] (byte~) main::$0 ← (const byte) VIC_BMM#0 | (const byte) VIC_DEN#0 -Constant right-side identified [197] (byte*~) init_screen::$0 ← (const byte*) SCREEN#0 + (word) $400 +Constant right-side identified [200] (byte*~) init_screen::$0 ← (const byte*) SCREEN#0 + (word) $400 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) bitmap_init::$1 = >bitmap_init::bitmap#0 Constant (const byte) main::$0 = VIC_BMM#0|VIC_DEN#0 @@ -1691,6 +1696,13 @@ Constant (const word) main::$3 = (word)SCREEN#0 Constant (const word) main::$6 = (word)BITMAP#0 Constant (const byte*) init_screen::$0 = SCREEN#0+$400 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [207] if((const byte) lines::l#0<(const byte) lines_cnt#0) goto lines::@2 +Successful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) init_screen::c#1 = (byte*) init_screen::c#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) init_screen::c#5 (const byte*) init_screen::c#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [166] (byte~) main::$1 ← (const byte) main::$0 | (const byte) VIC_RSEL#0 Constant right-side identified [169] (word~) main::$4 ← (const word) main::$3 & (word) $3fff Constant right-side identified [171] (word~) main::$7 ← (const word) main::$6 & (word) $3fff @@ -1699,6 +1711,8 @@ Constant (const byte) main::$1 = main::$0|VIC_RSEL#0 Constant (const word) main::$4 = main::$3&$3fff Constant (const word) main::$7 = main::$6&$3fff Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [200] if((const byte*) init_screen::c#0!=(const byte*) init_screen::$0) goto init_screen::@2 +Successful SSA optimization Pass2ConstantIfs Constant right-side identified [166] (byte~) main::$2 ← (const byte) main::$1 | (byte) 3 Constant right-side identified [168] (word~) main::$5 ← (const word) main::$4 / (byte) $40 Constant right-side identified [169] (word~) main::$8 ← (const word) main::$7 / (word) $400 @@ -1754,7 +1768,7 @@ Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in assignment *(lines_x#0+1 + lines::$1) Consolidated array index constant in assignment *(lines_y#0+1 + lines::$2) Successful SSA optimization Pass2ConstantAdditionElimination -Alias (byte) lines::l#2 = (byte~) lines::$1 (byte~) lines::$2 +Alias (byte) lines::l#5 = (byte~) lines::$1 (byte~) lines::$2 Successful SSA optimization Pass2AliasElimination Added new block during phi lifting bitmap_init::@9(between bitmap_init::@2 and bitmap_init::@1) Added new block during phi lifting bitmap_init::@10(between bitmap_init::@1 and bitmap_init::@2) @@ -1770,6 +1784,8 @@ Added new block during phi lifting bitmap_line_ydxi::@6(between bitmap_line_ydxi Added new block during phi lifting bitmap_line_ydxi::@7(between bitmap_line_ydxi::@5 and bitmap_line_ydxi::@2) Added new block during phi lifting bitmap_line_ydxd::@6(between bitmap_line_ydxd::@2 and bitmap_line_ydxd::@1) Added new block during phi lifting bitmap_line_ydxd::@7(between bitmap_line_ydxd::@5 and bitmap_line_ydxd::@2) +Added new block during phi lifting lines::@8(between lines::@1 and lines::@2) +Added new block during phi lifting init_screen::@7(between init_screen::@1 and init_screen::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @12 @@ -1782,6 +1798,7 @@ Adding NOP phi() at start of main::@5 Adding NOP phi() at start of main::@1 Adding NOP phi() at start of main::@6 Adding NOP phi() at start of lines +Adding NOP phi() at start of lines::@1_1 Adding NOP phi() at start of bitmap_line::@30 Adding NOP phi() at start of bitmap_line::@29 Adding NOP phi() at start of bitmap_line::@32 @@ -1791,128 +1808,131 @@ Adding NOP phi() at start of bitmap_line::@33 Adding NOP phi() at start of bitmap_line::@36 Adding NOP phi() at start of bitmap_line::@35 Adding NOP phi() at start of init_screen +Adding NOP phi() at start of init_screen::@1_1 Adding NOP phi() at start of bitmap_init Adding NOP phi() at start of bitmap_init::@3 Adding NOP phi() at start of bitmap_init::@4 CALL GRAPH Calls in [] to main:4 Calls in [main] to bitmap_init:11 bitmap_clear:13 init_screen:15 lines:18 -Calls in [lines] to bitmap_line:28 -Calls in [bitmap_line] to bitmap_line_ydxi:46 bitmap_line_xdyi:59 bitmap_line_ydxd:73 bitmap_line_xdyd:85 bitmap_line_ydxd:101 bitmap_line_xdyd:113 bitmap_line_ydxi:127 bitmap_line_xdyi:139 -Calls in [bitmap_line_xdyi] to bitmap_plot:151 -Calls in [bitmap_line_ydxi] to bitmap_plot:185 -Calls in [bitmap_line_xdyd] to bitmap_plot:212 -Calls in [bitmap_line_ydxd] to bitmap_plot:239 +Calls in [lines] to bitmap_line:27 +Calls in [bitmap_line] to bitmap_line_ydxi:47 bitmap_line_xdyi:60 bitmap_line_ydxd:74 bitmap_line_xdyd:86 bitmap_line_ydxd:102 bitmap_line_xdyd:114 bitmap_line_ydxi:128 bitmap_line_xdyi:140 +Calls in [bitmap_line_xdyi] to bitmap_plot:152 +Calls in [bitmap_line_ydxi] to bitmap_plot:186 +Calls in [bitmap_line_xdyd] to bitmap_plot:213 +Calls in [bitmap_line_ydxd] to bitmap_plot:240 Created 54 initial phi equivalence classes -Coalesced [30] lines::l#5 ← lines::l#1 -Coalesced [41] bitmap_line_ydxi::xd#8 ← bitmap_line_ydxi::xd#0 -Coalesced [42] bitmap_line_ydxi::x#9 ← bitmap_line_ydxi::x#0 -Coalesced [43] bitmap_line_ydxi::y#9 ← bitmap_line_ydxi::y#0 -Coalesced [44] bitmap_line_ydxi::yd#8 ← bitmap_line_ydxi::yd#0 -Coalesced [45] bitmap_line_ydxi::y1#8 ← bitmap_line_ydxi::y1#0 -Coalesced [54] bitmap_line_xdyi::yd#7 ← bitmap_line_xdyi::yd#0 -Coalesced [55] bitmap_line_xdyi::x#8 ← bitmap_line_xdyi::x#0 -Coalesced [56] bitmap_line_xdyi::y#8 ← bitmap_line_xdyi::y#0 -Coalesced [57] bitmap_line_xdyi::xd#7 ← bitmap_line_xdyi::xd#0 -Coalesced [58] bitmap_line_xdyi::x1#7 ← bitmap_line_xdyi::x1#0 -Coalesced [68] bitmap_line_ydxd::xd#7 ← bitmap_line_ydxd::xd#0 -Coalesced [69] bitmap_line_ydxd::x#8 ← bitmap_line_ydxd::x#0 -Coalesced [70] bitmap_line_ydxd::y#9 ← bitmap_line_ydxd::y#0 -Coalesced [71] bitmap_line_ydxd::yd#7 ← bitmap_line_ydxd::yd#0 -Coalesced [72] bitmap_line_ydxd::y1#7 ← bitmap_line_ydxd::y1#0 -Coalesced [80] bitmap_line_xdyd::yd#7 ← bitmap_line_xdyd::yd#0 -Coalesced [81] bitmap_line_xdyd::x#8 ← bitmap_line_xdyd::x#0 -Coalesced [82] bitmap_line_xdyd::y#8 ← bitmap_line_xdyd::y#0 -Coalesced [83] bitmap_line_xdyd::xd#7 ← bitmap_line_xdyd::xd#0 -Coalesced [84] bitmap_line_xdyd::x1#7 ← bitmap_line_xdyd::x1#0 -Coalesced [96] bitmap_line_ydxd::xd#8 ← bitmap_line_ydxd::xd#1 -Coalesced [97] bitmap_line_ydxd::x#9 ← bitmap_line_ydxd::x#1 -Coalesced [98] bitmap_line_ydxd::y#10 ← bitmap_line_ydxd::y#1 -Coalesced [99] bitmap_line_ydxd::yd#8 ← bitmap_line_ydxd::yd#1 -Coalesced [100] bitmap_line_ydxd::y1#8 ← bitmap_line_ydxd::y1#1 -Coalesced [108] bitmap_line_xdyd::yd#8 ← bitmap_line_xdyd::yd#1 -Coalesced [109] bitmap_line_xdyd::x#9 ← bitmap_line_xdyd::x#1 -Coalesced [110] bitmap_line_xdyd::y#9 ← bitmap_line_xdyd::y#1 -Coalesced [111] bitmap_line_xdyd::xd#8 ← bitmap_line_xdyd::xd#1 -Coalesced [112] bitmap_line_xdyd::x1#8 ← bitmap_line_xdyd::x1#1 -Coalesced [122] bitmap_line_ydxi::xd#7 ← bitmap_line_ydxi::xd#1 -Coalesced [123] bitmap_line_ydxi::x#8 ← bitmap_line_ydxi::x#1 -Coalesced [124] bitmap_line_ydxi::y#8 ← bitmap_line_ydxi::y#1 -Coalesced [125] bitmap_line_ydxi::yd#7 ← bitmap_line_ydxi::yd#1 -Coalesced [126] bitmap_line_ydxi::y1#7 ← bitmap_line_ydxi::y1#1 -Coalesced [134] bitmap_line_xdyi::yd#8 ← bitmap_line_xdyi::yd#1 -Coalesced [135] bitmap_line_xdyi::x#9 ← bitmap_line_xdyi::x#1 -Coalesced [136] bitmap_line_xdyi::y#9 ← bitmap_line_xdyi::y#1 -Coalesced [137] bitmap_line_xdyi::xd#8 ← bitmap_line_xdyi::xd#1 -Coalesced [138] bitmap_line_xdyi::x1#8 ← bitmap_line_xdyi::x1#1 -Coalesced [143] bitmap_line_xdyi::x#10 ← bitmap_line_xdyi::x#6 -Coalesced [144] bitmap_line_xdyi::y#10 ← bitmap_line_xdyi::y#5 -Coalesced [145] bitmap_line_xdyi::e#7 ← bitmap_line_xdyi::e#0 -Coalesced [149] bitmap_plot::x#6 ← bitmap_plot::x#0 -Coalesced [150] bitmap_plot::y#6 ← bitmap_plot::y#0 -Coalesced [157] bitmap_line_xdyi::y#12 ← bitmap_line_xdyi::y#2 -Coalesced [158] bitmap_line_xdyi::e#9 ← bitmap_line_xdyi::e#2 -Coalesced [163] bitmap_line_xdyi::x#11 ← bitmap_line_xdyi::x#2 -Coalesced [164] bitmap_line_xdyi::y#11 ← bitmap_line_xdyi::y#6 -Coalesced [165] bitmap_line_xdyi::e#8 ← bitmap_line_xdyi::e#6 -Coalesced (already) [166] bitmap_line_xdyi::y#13 ← bitmap_line_xdyi::y#3 -Coalesced [167] bitmap_line_xdyi::e#10 ← bitmap_line_xdyi::e#1 -Coalesced [177] bitmap_line_ydxi::x#10 ← bitmap_line_ydxi::x#5 -Coalesced [178] bitmap_line_ydxi::y#10 ← bitmap_line_ydxi::y#6 -Coalesced [179] bitmap_line_ydxi::e#7 ← bitmap_line_ydxi::e#0 -Coalesced [183] bitmap_plot::x#8 ← bitmap_plot::x#2 -Coalesced [184] bitmap_plot::y#8 ← bitmap_plot::y#2 -Coalesced [191] bitmap_line_ydxi::x#12 ← bitmap_line_ydxi::x#2 -Coalesced [192] bitmap_line_ydxi::e#9 ← bitmap_line_ydxi::e#2 -Coalesced [197] bitmap_line_ydxi::x#11 ← bitmap_line_ydxi::x#6 -Coalesced [198] bitmap_line_ydxi::y#11 ← bitmap_line_ydxi::y#2 -Coalesced [199] bitmap_line_ydxi::e#8 ← bitmap_line_ydxi::e#6 -Coalesced (already) [200] bitmap_line_ydxi::x#13 ← bitmap_line_ydxi::x#3 -Coalesced [201] bitmap_line_ydxi::e#10 ← bitmap_line_ydxi::e#1 -Coalesced [204] bitmap_line_xdyd::x#10 ← bitmap_line_xdyd::x#6 -Coalesced [205] bitmap_line_xdyd::y#10 ← bitmap_line_xdyd::y#5 -Coalesced [206] bitmap_line_xdyd::e#7 ← bitmap_line_xdyd::e#0 -Coalesced [210] bitmap_plot::x#5 ← bitmap_plot::x#1 -Coalesced [211] bitmap_plot::y#5 ← bitmap_plot::y#1 -Coalesced [218] bitmap_line_xdyd::y#12 ← bitmap_line_xdyd::y#2 -Coalesced [219] bitmap_line_xdyd::e#9 ← bitmap_line_xdyd::e#2 -Coalesced [224] bitmap_line_xdyd::x#11 ← bitmap_line_xdyd::x#2 -Coalesced [225] bitmap_line_xdyd::y#11 ← bitmap_line_xdyd::y#6 -Coalesced [226] bitmap_line_xdyd::e#8 ← bitmap_line_xdyd::e#6 -Coalesced (already) [227] bitmap_line_xdyd::y#13 ← bitmap_line_xdyd::y#3 -Coalesced [228] bitmap_line_xdyd::e#10 ← bitmap_line_xdyd::e#1 -Coalesced [231] bitmap_line_ydxd::x#10 ← bitmap_line_ydxd::x#5 -Coalesced [232] bitmap_line_ydxd::y#11 ← bitmap_line_ydxd::y#7 -Coalesced [233] bitmap_line_ydxd::e#7 ← bitmap_line_ydxd::e#0 -Coalesced [237] bitmap_plot::x#7 ← bitmap_plot::x#3 -Coalesced [238] bitmap_plot::y#7 ← bitmap_plot::y#3 -Coalesced [245] bitmap_line_ydxd::x#12 ← bitmap_line_ydxd::x#2 -Coalesced [246] bitmap_line_ydxd::e#9 ← bitmap_line_ydxd::e#2 -Coalesced [251] bitmap_line_ydxd::x#11 ← bitmap_line_ydxd::x#6 -Coalesced [252] bitmap_line_ydxd::y#12 ← bitmap_line_ydxd::y#3 -Coalesced [253] bitmap_line_ydxd::e#8 ← bitmap_line_ydxd::e#6 -Coalesced (already) [254] bitmap_line_ydxd::x#13 ← bitmap_line_ydxd::x#3 -Coalesced [255] bitmap_line_ydxd::e#10 ← bitmap_line_ydxd::e#1 -Coalesced [262] init_screen::c#4 ← init_screen::c#1 -Coalesced [266] bitmap_clear::bitmap#7 ← bitmap_clear::bitmap#3 -Coalesced [275] bitmap_clear::bitmap#6 ← bitmap_clear::bitmap#1 -Coalesced [276] bitmap_clear::y#5 ← bitmap_clear::y#1 -Coalesced (already) [277] bitmap_clear::bitmap#8 ← bitmap_clear::bitmap#1 -Coalesced [278] bitmap_clear::x#3 ← bitmap_clear::x#1 -Coalesced [301] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 -Coalesced [306] bitmap_init::y#5 ← bitmap_init::y#1 -Coalesced [307] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 -Coalesced (already) [308] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 -Coalesced [309] bitmap_init::x#5 ← bitmap_init::x#1 -Coalesced [310] bitmap_init::bits#5 ← bitmap_init::bits#4 -Coalesced [311] bitmap_init::bits#6 ← bitmap_init::bits#1 +Coalesced [31] lines::l#8 ← lines::l#1 +Coalesced [42] bitmap_line_ydxi::xd#8 ← bitmap_line_ydxi::xd#0 +Coalesced [43] bitmap_line_ydxi::x#9 ← bitmap_line_ydxi::x#0 +Coalesced [44] bitmap_line_ydxi::y#9 ← bitmap_line_ydxi::y#0 +Coalesced [45] bitmap_line_ydxi::yd#8 ← bitmap_line_ydxi::yd#0 +Coalesced [46] bitmap_line_ydxi::y1#8 ← bitmap_line_ydxi::y1#0 +Coalesced [55] bitmap_line_xdyi::yd#7 ← bitmap_line_xdyi::yd#0 +Coalesced [56] bitmap_line_xdyi::x#8 ← bitmap_line_xdyi::x#0 +Coalesced [57] bitmap_line_xdyi::y#8 ← bitmap_line_xdyi::y#0 +Coalesced [58] bitmap_line_xdyi::xd#7 ← bitmap_line_xdyi::xd#0 +Coalesced [59] bitmap_line_xdyi::x1#7 ← bitmap_line_xdyi::x1#0 +Coalesced [69] bitmap_line_ydxd::xd#7 ← bitmap_line_ydxd::xd#0 +Coalesced [70] bitmap_line_ydxd::x#8 ← bitmap_line_ydxd::x#0 +Coalesced [71] bitmap_line_ydxd::y#9 ← bitmap_line_ydxd::y#0 +Coalesced [72] bitmap_line_ydxd::yd#7 ← bitmap_line_ydxd::yd#0 +Coalesced [73] bitmap_line_ydxd::y1#7 ← bitmap_line_ydxd::y1#0 +Coalesced [81] bitmap_line_xdyd::yd#7 ← bitmap_line_xdyd::yd#0 +Coalesced [82] bitmap_line_xdyd::x#8 ← bitmap_line_xdyd::x#0 +Coalesced [83] bitmap_line_xdyd::y#8 ← bitmap_line_xdyd::y#0 +Coalesced [84] bitmap_line_xdyd::xd#7 ← bitmap_line_xdyd::xd#0 +Coalesced [85] bitmap_line_xdyd::x1#7 ← bitmap_line_xdyd::x1#0 +Coalesced [97] bitmap_line_ydxd::xd#8 ← bitmap_line_ydxd::xd#1 +Coalesced [98] bitmap_line_ydxd::x#9 ← bitmap_line_ydxd::x#1 +Coalesced [99] bitmap_line_ydxd::y#10 ← bitmap_line_ydxd::y#1 +Coalesced [100] bitmap_line_ydxd::yd#8 ← bitmap_line_ydxd::yd#1 +Coalesced [101] bitmap_line_ydxd::y1#8 ← bitmap_line_ydxd::y1#1 +Coalesced [109] bitmap_line_xdyd::yd#8 ← bitmap_line_xdyd::yd#1 +Coalesced [110] bitmap_line_xdyd::x#9 ← bitmap_line_xdyd::x#1 +Coalesced [111] bitmap_line_xdyd::y#9 ← bitmap_line_xdyd::y#1 +Coalesced [112] bitmap_line_xdyd::xd#8 ← bitmap_line_xdyd::xd#1 +Coalesced [113] bitmap_line_xdyd::x1#8 ← bitmap_line_xdyd::x1#1 +Coalesced [123] bitmap_line_ydxi::xd#7 ← bitmap_line_ydxi::xd#1 +Coalesced [124] bitmap_line_ydxi::x#8 ← bitmap_line_ydxi::x#1 +Coalesced [125] bitmap_line_ydxi::y#8 ← bitmap_line_ydxi::y#1 +Coalesced [126] bitmap_line_ydxi::yd#7 ← bitmap_line_ydxi::yd#1 +Coalesced [127] bitmap_line_ydxi::y1#7 ← bitmap_line_ydxi::y1#1 +Coalesced [135] bitmap_line_xdyi::yd#8 ← bitmap_line_xdyi::yd#1 +Coalesced [136] bitmap_line_xdyi::x#9 ← bitmap_line_xdyi::x#1 +Coalesced [137] bitmap_line_xdyi::y#9 ← bitmap_line_xdyi::y#1 +Coalesced [138] bitmap_line_xdyi::xd#8 ← bitmap_line_xdyi::xd#1 +Coalesced [139] bitmap_line_xdyi::x1#8 ← bitmap_line_xdyi::x1#1 +Coalesced [144] bitmap_line_xdyi::x#10 ← bitmap_line_xdyi::x#6 +Coalesced [145] bitmap_line_xdyi::y#10 ← bitmap_line_xdyi::y#5 +Coalesced [146] bitmap_line_xdyi::e#7 ← bitmap_line_xdyi::e#0 +Coalesced [150] bitmap_plot::x#6 ← bitmap_plot::x#0 +Coalesced [151] bitmap_plot::y#6 ← bitmap_plot::y#0 +Coalesced [158] bitmap_line_xdyi::y#12 ← bitmap_line_xdyi::y#2 +Coalesced [159] bitmap_line_xdyi::e#9 ← bitmap_line_xdyi::e#2 +Coalesced [164] bitmap_line_xdyi::x#11 ← bitmap_line_xdyi::x#2 +Coalesced [165] bitmap_line_xdyi::y#11 ← bitmap_line_xdyi::y#6 +Coalesced [166] bitmap_line_xdyi::e#8 ← bitmap_line_xdyi::e#6 +Coalesced (already) [167] bitmap_line_xdyi::y#13 ← bitmap_line_xdyi::y#3 +Coalesced [168] bitmap_line_xdyi::e#10 ← bitmap_line_xdyi::e#1 +Coalesced [178] bitmap_line_ydxi::x#10 ← bitmap_line_ydxi::x#5 +Coalesced [179] bitmap_line_ydxi::y#10 ← bitmap_line_ydxi::y#6 +Coalesced [180] bitmap_line_ydxi::e#7 ← bitmap_line_ydxi::e#0 +Coalesced [184] bitmap_plot::x#8 ← bitmap_plot::x#2 +Coalesced [185] bitmap_plot::y#8 ← bitmap_plot::y#2 +Coalesced [192] bitmap_line_ydxi::x#12 ← bitmap_line_ydxi::x#2 +Coalesced [193] bitmap_line_ydxi::e#9 ← bitmap_line_ydxi::e#2 +Coalesced [198] bitmap_line_ydxi::x#11 ← bitmap_line_ydxi::x#6 +Coalesced [199] bitmap_line_ydxi::y#11 ← bitmap_line_ydxi::y#2 +Coalesced [200] bitmap_line_ydxi::e#8 ← bitmap_line_ydxi::e#6 +Coalesced (already) [201] bitmap_line_ydxi::x#13 ← bitmap_line_ydxi::x#3 +Coalesced [202] bitmap_line_ydxi::e#10 ← bitmap_line_ydxi::e#1 +Coalesced [205] bitmap_line_xdyd::x#10 ← bitmap_line_xdyd::x#6 +Coalesced [206] bitmap_line_xdyd::y#10 ← bitmap_line_xdyd::y#5 +Coalesced [207] bitmap_line_xdyd::e#7 ← bitmap_line_xdyd::e#0 +Coalesced [211] bitmap_plot::x#5 ← bitmap_plot::x#1 +Coalesced [212] bitmap_plot::y#5 ← bitmap_plot::y#1 +Coalesced [219] bitmap_line_xdyd::y#12 ← bitmap_line_xdyd::y#2 +Coalesced [220] bitmap_line_xdyd::e#9 ← bitmap_line_xdyd::e#2 +Coalesced [225] bitmap_line_xdyd::x#11 ← bitmap_line_xdyd::x#2 +Coalesced [226] bitmap_line_xdyd::y#11 ← bitmap_line_xdyd::y#6 +Coalesced [227] bitmap_line_xdyd::e#8 ← bitmap_line_xdyd::e#6 +Coalesced (already) [228] bitmap_line_xdyd::y#13 ← bitmap_line_xdyd::y#3 +Coalesced [229] bitmap_line_xdyd::e#10 ← bitmap_line_xdyd::e#1 +Coalesced [232] bitmap_line_ydxd::x#10 ← bitmap_line_ydxd::x#5 +Coalesced [233] bitmap_line_ydxd::y#11 ← bitmap_line_ydxd::y#7 +Coalesced [234] bitmap_line_ydxd::e#7 ← bitmap_line_ydxd::e#0 +Coalesced [238] bitmap_plot::x#7 ← bitmap_plot::x#3 +Coalesced [239] bitmap_plot::y#7 ← bitmap_plot::y#3 +Coalesced [246] bitmap_line_ydxd::x#12 ← bitmap_line_ydxd::x#2 +Coalesced [247] bitmap_line_ydxd::e#9 ← bitmap_line_ydxd::e#2 +Coalesced [252] bitmap_line_ydxd::x#11 ← bitmap_line_ydxd::x#6 +Coalesced [253] bitmap_line_ydxd::y#12 ← bitmap_line_ydxd::y#3 +Coalesced [254] bitmap_line_ydxd::e#8 ← bitmap_line_ydxd::e#6 +Coalesced (already) [255] bitmap_line_ydxd::x#13 ← bitmap_line_ydxd::x#3 +Coalesced [256] bitmap_line_ydxd::e#10 ← bitmap_line_ydxd::e#1 +Coalesced [264] init_screen::c#6 ← init_screen::c#1 +Coalesced [268] bitmap_clear::bitmap#7 ← bitmap_clear::bitmap#3 +Coalesced [277] bitmap_clear::bitmap#6 ← bitmap_clear::bitmap#1 +Coalesced [278] bitmap_clear::y#5 ← bitmap_clear::y#1 +Coalesced (already) [279] bitmap_clear::bitmap#8 ← bitmap_clear::bitmap#1 +Coalesced [280] bitmap_clear::x#3 ← bitmap_clear::x#1 +Coalesced [303] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 +Coalesced [308] bitmap_init::y#5 ← bitmap_init::y#1 +Coalesced [309] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 +Coalesced (already) [310] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 +Coalesced [311] bitmap_init::x#5 ← bitmap_init::x#1 +Coalesced [312] bitmap_init::bits#5 ← bitmap_init::bits#4 +Coalesced [313] bitmap_init::bits#6 ← bitmap_init::bits#1 Coalesced down to 35 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @12 Culled Empty Block (label) @16 Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 +Culled Empty Block (label) lines::@1_1 +Culled Empty Block (label) lines::@8 Culled Empty Block (label) bitmap_line::@30 Culled Empty Block (label) bitmap_line::@29 Culled Empty Block (label) bitmap_line::@32 @@ -1929,6 +1949,8 @@ Culled Empty Block (label) bitmap_line_xdyd::@6 Culled Empty Block (label) bitmap_line_xdyd::@7 Culled Empty Block (label) bitmap_line_ydxd::@6 Culled Empty Block (label) bitmap_line_ydxd::@7 +Culled Empty Block (label) init_screen::@1_1 +Culled Empty Block (label) init_screen::@7 Culled Empty Block (label) bitmap_clear::@5 Culled Empty Block (label) bitmap_clear::@6 Culled Empty Block (label) bitmap_init::@3 @@ -2003,24 +2025,24 @@ main::@1: scope:[main] from main::@1 main::@3 to:main::@1 lines: scope:[lines] from main::@1 [15] phi() - to:lines::@1 -lines::@1: scope:[lines] from lines lines::@3 - [16] (byte) lines::l#2 ← phi( lines/(byte) 0 lines::@3/(byte) lines::l#1 ) - [17] if((byte) lines::l#2<(const byte) lines_cnt#0) goto lines::@2 - to:lines::@return -lines::@return: scope:[lines] from lines::@1 - [18] return - to:@return -lines::@2: scope:[lines] from lines::@1 - [19] (byte) bitmap_line::x0#0 ← *((const byte[]) lines_x#0 + (byte) lines::l#2) - [20] (byte) bitmap_line::x1#0 ← *((const byte[]) lines_x#0+(byte) 1 + (byte) lines::l#2) - [21] (byte) bitmap_line::y0#0 ← *((const byte[]) lines_y#0 + (byte) lines::l#2) - [22] (byte) bitmap_line::y1#0 ← *((const byte[]) lines_y#0+(byte) 1 + (byte) lines::l#2) - [23] call bitmap_line + to:lines::@2 +lines::@2: scope:[lines] from lines lines::@1 + [16] (byte) lines::l#5 ← phi( lines::@1/(byte) lines::l#1 lines/(byte) 0 ) + [17] (byte) bitmap_line::x0#0 ← *((const byte[]) lines_x#0 + (byte) lines::l#5) + [18] (byte) bitmap_line::x1#0 ← *((const byte[]) lines_x#0+(byte) 1 + (byte) lines::l#5) + [19] (byte) bitmap_line::y0#0 ← *((const byte[]) lines_y#0 + (byte) lines::l#5) + [20] (byte) bitmap_line::y1#0 ← *((const byte[]) lines_y#0+(byte) 1 + (byte) lines::l#5) + [21] call bitmap_line to:lines::@3 lines::@3: scope:[lines] from lines::@2 - [24] (byte) lines::l#1 ← ++ (byte) lines::l#2 + [22] (byte) lines::l#1 ← ++ (byte) lines::l#5 to:lines::@1 +lines::@1: scope:[lines] from lines::@3 + [23] if((byte) lines::l#1<(const byte) lines_cnt#0) goto lines::@2 + to:lines::@return +lines::@return: scope:[lines] from lines::@1 + [24] return + to:@return bitmap_line: scope:[bitmap_line] from lines::@2 [25] if((byte) bitmap_line::x0#0<(byte) bitmap_line::x1#0) goto bitmap_line::@1 to:bitmap_line::@2 @@ -2265,18 +2287,18 @@ bitmap_line_ydxd::@return: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@2 to:@return init_screen: scope:[init_screen] from main::@3 [154] phi() + to:init_screen::@2 +init_screen::@2: scope:[init_screen] from init_screen init_screen::@1 + [155] (byte*) init_screen::c#4 ← phi( init_screen::@1/(byte*) init_screen::c#1 init_screen/(const byte*) SCREEN#0 ) + [156] *((byte*) init_screen::c#4) ← (byte) $14 + [157] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#4 to:init_screen::@1 -init_screen::@1: scope:[init_screen] from init_screen init_screen::@2 - [155] (byte*) init_screen::c#2 ← phi( init_screen/(const byte*) SCREEN#0 init_screen::@2/(byte*) init_screen::c#1 ) - [156] if((byte*) init_screen::c#2!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@2 +init_screen::@1: scope:[init_screen] from init_screen::@2 + [158] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@2 to:init_screen::@return init_screen::@return: scope:[init_screen] from init_screen::@1 - [157] return + [159] return to:@return -init_screen::@2: scope:[init_screen] from init_screen::@1 - [158] *((byte*) init_screen::c#2) ← (byte) $14 - [159] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2 - to:init_screen::@1 bitmap_clear: scope:[bitmap_clear] from main::@2 [160] (word) bitmap_clear::bitmap#0 ← *((const byte[$100]) bitmap_plot_xhi#0) w= *((const byte[$100]) bitmap_plot_xlo#0) [161] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word) bitmap_clear::bitmap#0 @@ -2565,19 +2587,19 @@ VARIABLE REGISTER WEIGHTS (byte[$100]) bitmap_plot_ylo (void()) init_screen() (byte*) init_screen::c -(byte*) init_screen::c#1 22.0 -(byte*) init_screen::c#2 14.666666666666666 +(byte*) init_screen::c#1 16.5 +(byte*) init_screen::c#4 16.5 (void()) lines() (byte) lines::l -(byte) lines::l#1 202.0 -(byte) lines::l#2 101.0 +(byte) lines::l#1 151.5 +(byte) lines::l#5 100.99999999999999 (byte) lines_cnt (byte[]) lines_x (byte[]) lines_y (void()) main() Initial phi equivalence classes -[ lines::l#2 lines::l#1 ] +[ lines::l#5 lines::l#1 ] [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] @@ -2604,7 +2626,7 @@ Initial phi equivalence classes [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] [ 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 ] -[ init_screen::c#2 init_screen::c#1 ] +[ init_screen::c#4 init_screen::c#1 ] [ bitmap_clear::y#4 bitmap_clear::y#1 ] [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] [ bitmap_clear::x#2 bitmap_clear::x#1 ] @@ -2637,7 +2659,7 @@ Added variable bitmap_init::$7 to zero page equivalence class [ bitmap_init::$7 Added variable bitmap_init::$8 to zero page equivalence class [ bitmap_init::$8 ] Added variable bitmap_init::$9 to zero page equivalence class [ bitmap_init::$9 ] Complete equivalence classes -[ lines::l#2 lines::l#1 ] +[ lines::l#5 lines::l#1 ] [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] @@ -2664,7 +2686,7 @@ Complete equivalence classes [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] [ 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 ] -[ init_screen::c#2 init_screen::c#1 ] +[ init_screen::c#4 init_screen::c#1 ] [ bitmap_clear::y#4 bitmap_clear::y#1 ] [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] [ bitmap_clear::x#2 bitmap_clear::x#1 ] @@ -2696,7 +2718,7 @@ Complete equivalence classes [ bitmap_init::$7 ] [ bitmap_init::$8 ] [ bitmap_init::$9 ] -Allocated zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ] +Allocated zp ZP_BYTE:2 [ lines::l#5 lines::l#1 ] Allocated zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Allocated zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Allocated zp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] @@ -2723,7 +2745,7 @@ Allocated zp ZP_BYTE:25 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_l Allocated zp ZP_BYTE:26 [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] Allocated zp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] Allocated zp ZP_BYTE:28 [ 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 ] -Allocated zp ZP_WORD:29 [ init_screen::c#2 init_screen::c#1 ] +Allocated zp ZP_WORD:29 [ init_screen::c#4 init_screen::c#1 ] Allocated zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ] Allocated zp ZP_WORD:32 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] Allocated zp ZP_BYTE:34 [ bitmap_clear::x#2 bitmap_clear::x#1 ] @@ -2837,52 +2859,53 @@ main: { // lines lines: { .label l = 2 - // [16] phi from lines to lines::@1 [phi:lines->lines::@1] - b1_from_lines: - // [16] phi (byte) lines::l#2 = (byte) 0 [phi:lines->lines::@1#0] -- vbuz1=vbuc1 + // [16] phi from lines to lines::@2 [phi:lines->lines::@2] + b2_from_lines: + // [16] phi (byte) lines::l#5 = (byte) 0 [phi:lines->lines::@2#0] -- vbuz1=vbuc1 lda #0 sta l - jmp b1 - // lines::@1 - b1: - // [17] if((byte) lines::l#2<(const byte) lines_cnt#0) goto lines::@2 -- vbuz1_lt_vbuc1_then_la1 - lda l - cmp #lines_cnt - bcc b2 - jmp breturn - // lines::@return - breturn: - // [18] return - rts + jmp b2 + // [16] phi from lines::@1 to lines::@2 [phi:lines::@1->lines::@2] + b2_from_b1: + // [16] phi (byte) lines::l#5 = (byte) lines::l#1 [phi:lines::@1->lines::@2#0] -- register_copy + jmp b2 // lines::@2 b2: - // [19] (byte) bitmap_line::x0#0 ← *((const byte[]) lines_x#0 + (byte) lines::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [17] (byte) bitmap_line::x0#0 ← *((const byte[]) lines_x#0 + (byte) lines::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_x,y sta bitmap_line.x0 - // [20] (byte) bitmap_line::x1#0 ← *((const byte[]) lines_x#0+(byte) 1 + (byte) lines::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [18] (byte) bitmap_line::x1#0 ← *((const byte[]) lines_x#0+(byte) 1 + (byte) lines::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_x+1,y sta bitmap_line.x1 - // [21] (byte) bitmap_line::y0#0 ← *((const byte[]) lines_y#0 + (byte) lines::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [19] (byte) bitmap_line::y0#0 ← *((const byte[]) lines_y#0 + (byte) lines::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_y,y sta bitmap_line.y0 - // [22] (byte) bitmap_line::y1#0 ← *((const byte[]) lines_y#0+(byte) 1 + (byte) lines::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [20] (byte) bitmap_line::y1#0 ← *((const byte[]) lines_y#0+(byte) 1 + (byte) lines::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_y+1,y sta bitmap_line.y1 - // [23] call bitmap_line + // [21] call bitmap_line jsr bitmap_line jmp b3 // lines::@3 b3: - // [24] (byte) lines::l#1 ← ++ (byte) lines::l#2 -- vbuz1=_inc_vbuz1 + // [22] (byte) lines::l#1 ← ++ (byte) lines::l#5 -- vbuz1=_inc_vbuz1 inc l - // [16] phi from lines::@3 to lines::@1 [phi:lines::@3->lines::@1] - b1_from_b3: - // [16] phi (byte) lines::l#2 = (byte) lines::l#1 [phi:lines::@3->lines::@1#0] -- register_copy jmp b1 + // lines::@1 + b1: + // [23] if((byte) lines::l#1<(const byte) lines_cnt#0) goto lines::@2 -- vbuz1_lt_vbuc1_then_la1 + lda l + cmp #lines_cnt + bcc b2_from_b1 + jmp breturn + // lines::@return + breturn: + // [24] return + rts } // bitmap_line // Draw a line on the bitmap @@ -3568,43 +3591,44 @@ bitmap_line_ydxd: { // init_screen init_screen: { .label c = $1d - // [155] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] - b1_from_init_screen: - // [155] phi (byte*) init_screen::c#2 = (const byte*) SCREEN#0 [phi:init_screen->init_screen::@1#0] -- pbuz1=pbuc1 + // [155] phi from init_screen to init_screen::@2 [phi:init_screen->init_screen::@2] + b2_from_init_screen: + // [155] phi (byte*) init_screen::c#4 = (const byte*) SCREEN#0 [phi:init_screen->init_screen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta c+1 - jmp b1 - // init_screen::@1 - b1: - // [156] if((byte*) init_screen::c#2!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@2 -- pbuz1_neq_pbuc1_then_la1 - lda c+1 - cmp #>SCREEN+$400 - bne b2 - lda c - cmp #init_screen::@2] + b2_from_b1: + // [155] phi (byte*) init_screen::c#4 = (byte*) init_screen::c#1 [phi:init_screen::@1->init_screen::@2#0] -- register_copy + jmp b2 // init_screen::@2 b2: - // [158] *((byte*) init_screen::c#2) ← (byte) $14 -- _deref_pbuz1=vbuc1 + // [156] *((byte*) init_screen::c#4) ← (byte) $14 -- _deref_pbuz1=vbuc1 lda #$14 ldy #0 sta (c),y - // [159] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2 -- pbuz1=_inc_pbuz1 + // [157] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#4 -- pbuz1=_inc_pbuz1 inc c bne !+ inc c+1 !: - // [155] phi from init_screen::@2 to init_screen::@1 [phi:init_screen::@2->init_screen::@1] - b1_from_b2: - // [155] phi (byte*) init_screen::c#2 = (byte*) init_screen::c#1 [phi:init_screen::@2->init_screen::@1#0] -- register_copy jmp b1 + // init_screen::@1 + b1: + // [158] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@2 -- pbuz1_neq_pbuc1_then_la1 + lda c+1 + cmp #>SCREEN+$400 + bne b2_from_b1 + lda c + cmp #> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a +Statement [73] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::lines:14::bitmap_line:21 [ lines::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a +Statement [88] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] -Statement [94] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a -Statement [97] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a -Statement [103] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a +Statement [94] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a +Statement [97] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a +Statement [103] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] @@ -3890,10 +3914,10 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ b Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:28 [ 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 ] -Statement [104] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a -Statement [105] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a -Statement [106] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ] +Statement [104] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a +Statement [105] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a +Statement [106] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ lines::l#5 lines::l#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] @@ -3918,18 +3942,18 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:25 [ b Removing always clobbered register reg byte y as potential for zp ZP_BYTE:26 [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:28 [ 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 ] -Statement [107] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y -Statement [110] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a -Statement [116] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a -Statement [119] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a -Statement [125] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a -Statement [131] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a -Statement [134] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a -Statement [140] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a -Statement [146] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a -Statement [149] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a -Statement [156] if((byte*) init_screen::c#2!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@2 [ init_screen::c#2 ] ( main:2::init_screen:12 [ init_screen::c#2 ] ) always clobbers reg byte a -Statement [158] *((byte*) init_screen::c#2) ← (byte) $14 [ init_screen::c#2 ] ( main:2::init_screen:12 [ init_screen::c#2 ] ) always clobbers reg byte a reg byte y +Statement [107] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y +Statement [110] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a +Statement [116] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a +Statement [119] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a +Statement [125] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a +Statement [131] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a +Statement [134] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a +Statement [140] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a +Statement [146] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a +Statement [149] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a +Statement [156] *((byte*) init_screen::c#4) ← (byte) $14 [ init_screen::c#4 ] ( main:2::init_screen:12 [ init_screen::c#4 ] ) always clobbers reg byte a reg byte y +Statement [158] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@2 [ init_screen::c#1 ] ( main:2::init_screen:12 [ init_screen::c#1 ] ) always clobbers reg byte a Statement [160] (word) bitmap_clear::bitmap#0 ← *((const byte[$100]) bitmap_plot_xhi#0) w= *((const byte[$100]) bitmap_plot_xlo#0) [ bitmap_clear::bitmap#0 ] ( main:2::bitmap_clear:10 [ bitmap_clear::bitmap#0 ] ) always clobbers reg byte a Statement [161] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word) bitmap_clear::bitmap#0 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:10 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a Statement [164] *((byte*) bitmap_clear::bitmap#2) ← (byte) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:10 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y @@ -3947,31 +3971,31 @@ Statement [4] *((const byte*) BORDERCOL#0) ← (byte) 0 [ ] ( main:2 [ ] ) alway Statement [5] *((const byte*) BGCOL#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [7] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0&(word) $3fff/(byte) $40|(word)(const byte*) BITMAP#0&(word) $3fff/(word) $400 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [26] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ( main:2::lines:14::bitmap_line:23 [ lines::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ) always clobbers reg byte a -Statement [28] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ( main:2::lines:14::bitmap_line:23 [ lines::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ) always clobbers reg byte a -Statement [43] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ( main:2::lines:14::bitmap_line:23 [ lines::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ) always clobbers reg byte a -Statement [57] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ( main:2::lines:14::bitmap_line:23 [ lines::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ) always clobbers reg byte a -Statement [59] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ( main:2::lines:14::bitmap_line:23 [ lines::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ) always clobbers reg byte a -Statement [73] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::lines:14::bitmap_line:23 [ lines::l#2 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a -Statement [88] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a -Statement [94] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a -Statement [97] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a -Statement [103] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a -Statement [104] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a -Statement [105] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a -Statement [106] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y -Statement [107] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y -Statement [110] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a -Statement [116] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a -Statement [119] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:35 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxi:80 [ lines::l#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a -Statement [125] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a -Statement [131] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a -Statement [134] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:56 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::lines:14::bitmap_line:23::bitmap_line_xdyd:72 [ lines::l#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a -Statement [140] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a -Statement [146] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a -Statement [149] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:50 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::lines:14::bitmap_line:23::bitmap_line_ydxd:66 [ lines::l#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a -Statement [156] if((byte*) init_screen::c#2!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@2 [ init_screen::c#2 ] ( main:2::init_screen:12 [ init_screen::c#2 ] ) always clobbers reg byte a -Statement [158] *((byte*) init_screen::c#2) ← (byte) $14 [ init_screen::c#2 ] ( main:2::init_screen:12 [ init_screen::c#2 ] ) always clobbers reg byte a reg byte y +Statement [26] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ( main:2::lines:14::bitmap_line:21 [ lines::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 ] ) always clobbers reg byte a +Statement [28] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ( main:2::lines:14::bitmap_line:21 [ lines::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#2 ] ) always clobbers reg byte a +Statement [43] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ( main:2::lines:14::bitmap_line:21 [ lines::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#2 bitmap_line::yd#1 ] ) always clobbers reg byte a +Statement [57] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ( main:2::lines:14::bitmap_line:21 [ lines::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 ] ) always clobbers reg byte a +Statement [59] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ( main:2::lines:14::bitmap_line:21 [ lines::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#10 ] ) always clobbers reg byte a +Statement [73] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0 [ bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ( main:2::lines:14::bitmap_line:21 [ lines::l#5 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 bitmap_line::xd#1 bitmap_line::yd#11 ] ) always clobbers reg byte a +Statement [88] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ) always clobbers reg byte a +Statement [94] (byte) bitmap_line_xdyi::e#1 ← (byte) bitmap_line_xdyi::e#3 + (byte) bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ) always clobbers reg byte a +Statement [97] (byte) bitmap_line_xdyi::e#2 ← (byte) bitmap_line_xdyi::e#1 - (byte) bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ) always clobbers reg byte a +Statement [103] (word) bitmap_plot::plotter_x#0 ← *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) w= *((const byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::y#4 bitmap_plot::plotter_x#0 ] ) always clobbers reg byte a +Statement [104] (word) bitmap_plot::plotter_y#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#4) [ bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter_x#0 bitmap_plot::plotter_y#0 ] ) always clobbers reg byte a +Statement [105] (word) bitmap_plot::plotter#0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] ) always clobbers reg byte a +Statement [106] (byte~) bitmap_plot::$1 ← *((byte*)(word) bitmap_plot::plotter#0) | *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_plot::x#4) [ bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a reg byte y +Statement [107] *((byte*)(word) bitmap_plot::plotter#0) ← (byte~) bitmap_plot::$1 [ ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:42::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyi:86::bitmap_plot:92 [ lines::l#5 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80::bitmap_plot:114 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72::bitmap_plot:129 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66::bitmap_plot:144 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 ] ) always clobbers reg byte y +Statement [110] (byte) bitmap_line_ydxi::e#0 ← (byte) bitmap_line_ydxi::xd#2 >> (byte) 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ) always clobbers reg byte a +Statement [116] (byte) bitmap_line_ydxi::e#1 ← (byte) bitmap_line_ydxi::e#3 + (byte) bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ) always clobbers reg byte a +Statement [119] (byte) bitmap_line_ydxi::e#2 ← (byte) bitmap_line_ydxi::e#1 - (byte) bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:35 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxi:80 [ lines::l#5 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ) always clobbers reg byte a +Statement [125] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ) always clobbers reg byte a +Statement [131] (byte) bitmap_line_xdyd::e#1 ← (byte) bitmap_line_xdyd::e#3 + (byte) bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ) always clobbers reg byte a +Statement [134] (byte) bitmap_line_xdyd::e#2 ← (byte) bitmap_line_xdyd::e#1 - (byte) bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:56 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] main:2::lines:14::bitmap_line:21::bitmap_line_xdyd:72 [ lines::l#5 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ) always clobbers reg byte a +Statement [140] (byte) bitmap_line_ydxd::e#0 ← (byte) bitmap_line_ydxd::xd#2 >> (byte) 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ) always clobbers reg byte a +Statement [146] (byte) bitmap_line_ydxd::e#1 ← (byte) bitmap_line_ydxd::e#3 + (byte) bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ) always clobbers reg byte a +Statement [149] (byte) bitmap_line_ydxd::e#2 ← (byte) bitmap_line_ydxd::e#1 - (byte) bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:50 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] main:2::lines:14::bitmap_line:21::bitmap_line_ydxd:66 [ lines::l#5 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ) always clobbers reg byte a +Statement [156] *((byte*) init_screen::c#4) ← (byte) $14 [ init_screen::c#4 ] ( main:2::init_screen:12 [ init_screen::c#4 ] ) always clobbers reg byte a reg byte y +Statement [158] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@2 [ init_screen::c#1 ] ( main:2::init_screen:12 [ init_screen::c#1 ] ) always clobbers reg byte a Statement [160] (word) bitmap_clear::bitmap#0 ← *((const byte[$100]) bitmap_plot_xhi#0) w= *((const byte[$100]) bitmap_plot_xlo#0) [ bitmap_clear::bitmap#0 ] ( main:2::bitmap_clear:10 [ bitmap_clear::bitmap#0 ] ) always clobbers reg byte a Statement [161] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word) bitmap_clear::bitmap#0 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:10 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a Statement [164] *((byte*) bitmap_clear::bitmap#2) ← (byte) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:10 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y @@ -3980,7 +4004,7 @@ Statement [175] *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_init::x#2 Statement [176] *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::x#2 bitmap_init::bits#3 ] ( main:2::bitmap_init:8 [ bitmap_init::x#2 bitmap_init::bits#3 ] ) always clobbers reg byte a Statement [184] (byte~) bitmap_init::$10 ← (byte) bitmap_init::y#2 & (byte) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$10 ] ( main:2::bitmap_init:8 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$10 ] ) always clobbers reg byte a Statement [191] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ] : zp ZP_BYTE:2 , reg byte x , +Potential registers zp ZP_BYTE:2 [ lines::l#5 lines::l#1 ] : zp ZP_BYTE:2 , reg byte x , Potential registers zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] : zp ZP_BYTE:3 , reg byte x , Potential registers zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] : zp ZP_BYTE:4 , reg byte x , Potential registers zp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] : zp ZP_BYTE:5 , reg byte x , @@ -4007,7 +4031,7 @@ Potential registers zp ZP_BYTE:25 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1# Potential registers zp ZP_BYTE:26 [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] : zp ZP_BYTE:26 , reg byte x , Potential registers zp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] : zp ZP_BYTE:27 , reg byte x , Potential registers zp ZP_BYTE:28 [ 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 ] : zp ZP_BYTE:28 , reg byte x , -Potential registers zp ZP_WORD:29 [ init_screen::c#2 init_screen::c#1 ] : zp ZP_WORD:29 , +Potential registers zp ZP_WORD:29 [ init_screen::c#4 init_screen::c#1 ] : zp ZP_WORD:29 , Potential registers zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ] : zp ZP_BYTE:31 , reg byte x , Potential registers zp ZP_WORD:32 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] : zp ZP_WORD:32 , Potential registers zp ZP_BYTE:34 [ bitmap_clear::x#2 bitmap_clear::x#1 ] : zp ZP_BYTE:34 , reg byte x , @@ -4047,105 +4071,105 @@ Uplift Scope [bitmap_line_xdyd] 4,742.47: zp ZP_BYTE:22 [ bitmap_line_xdyd::e#3 Uplift Scope [bitmap_line_ydxi] 4,742.47: zp ZP_BYTE:16 [ 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 ] 2,579.29: zp ZP_BYTE:14 [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] 2,002: zp ZP_BYTE:58 [ bitmap_line_ydxi::$6 ] 1,131.22: zp ZP_BYTE:15 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] 147.29: zp ZP_BYTE:12 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] 79.93: zp ZP_BYTE:11 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] 74.45: zp ZP_BYTE:13 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] Uplift Scope [bitmap_line_ydxd] 4,742.47: zp ZP_BYTE:28 [ 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 ] 2,579.29: zp ZP_BYTE:26 [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] 2,002: zp ZP_BYTE:60 [ bitmap_line_ydxd::$6 ] 1,131.22: zp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] 147.29: zp ZP_BYTE:24 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] 79.93: zp ZP_BYTE:23 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] 74.45: zp ZP_BYTE:25 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] Uplift Scope [bitmap_clear] 227.6: zp ZP_WORD:32 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] 218.83: zp ZP_BYTE:34 [ bitmap_clear::x#2 bitmap_clear::x#1 ] 20.17: zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ] 2: zp ZP_WORD:61 [ bitmap_clear::bitmap#0 ] -Uplift Scope [lines] 303: zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ] +Uplift Scope [lines] 252.5: zp ZP_BYTE:2 [ lines::l#5 lines::l#1 ] Uplift Scope [bitmap_init] 39.88: zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 24.93: zp ZP_BYTE:36 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 23.83: zp ZP_BYTE:35 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp ZP_BYTE:37 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp ZP_BYTE:63 [ bitmap_init::$0 ] 22: zp ZP_BYTE:65 [ bitmap_init::$7 ] 22: zp ZP_BYTE:66 [ bitmap_init::$8 ] 22: zp ZP_BYTE:67 [ bitmap_init::$9 ] 5.5: zp ZP_BYTE:64 [ bitmap_init::$10 ] -Uplift Scope [init_screen] 36.67: zp ZP_WORD:29 [ init_screen::c#2 init_screen::c#1 ] +Uplift Scope [init_screen] 33: zp ZP_WORD:29 [ init_screen::c#4 init_screen::c#1 ] Uplift Scope [bitmap_line] 6.25: zp ZP_BYTE:43 [ bitmap_line::y1#0 ] 5.95: zp ZP_BYTE:42 [ bitmap_line::y0#0 ] 5.41: zp ZP_BYTE:41 [ bitmap_line::x1#0 ] 5.17: zp ZP_BYTE:40 [ bitmap_line::x0#0 ] 0.89: zp ZP_BYTE:45 [ bitmap_line::yd#2 ] 0.89: zp ZP_BYTE:46 [ bitmap_line::yd#1 ] 0.89: zp ZP_BYTE:48 [ bitmap_line::yd#10 ] 0.89: zp ZP_BYTE:49 [ bitmap_line::yd#11 ] 0.7: zp ZP_BYTE:44 [ bitmap_line::xd#2 ] 0.7: zp ZP_BYTE:47 [ bitmap_line::xd#1 ] Uplift Scope [main] Uplift Scope [] -Uplifting [bitmap_plot] best 316401 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp ZP_WORD:53 [ bitmap_plot::plotter_y#0 ] reg byte a [ bitmap_plot::$1 ] zp ZP_WORD:51 [ bitmap_plot::plotter_x#0 ] zp ZP_WORD:55 [ bitmap_plot::plotter#0 ] -Uplifting [bitmap_line_xdyi] best 307395 combination zp ZP_BYTE:8 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] zp ZP_BYTE:7 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] zp ZP_BYTE:50 [ bitmap_line_xdyi::$6 ] reg byte x [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] zp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] +Uplifting [bitmap_plot] best 316731 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp ZP_WORD:53 [ bitmap_plot::plotter_y#0 ] reg byte a [ bitmap_plot::$1 ] zp ZP_WORD:51 [ bitmap_plot::plotter_x#0 ] zp ZP_WORD:55 [ bitmap_plot::plotter#0 ] +Uplifting [bitmap_line_xdyi] best 307725 combination zp ZP_BYTE:8 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] zp ZP_BYTE:7 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] zp ZP_BYTE:50 [ bitmap_line_xdyi::$6 ] reg byte x [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] zp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [bitmap_line_xdyd] best 298389 combination zp ZP_BYTE:22 [ 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 ] zp ZP_BYTE:21 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] zp ZP_BYTE:59 [ bitmap_line_xdyd::$6 ] reg byte x [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] zp ZP_BYTE:18 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] zp ZP_BYTE:17 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] zp ZP_BYTE:19 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] +Uplifting [bitmap_line_xdyd] best 298719 combination zp ZP_BYTE:22 [ 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 ] zp ZP_BYTE:21 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] zp ZP_BYTE:59 [ bitmap_line_xdyd::$6 ] reg byte x [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] zp ZP_BYTE:18 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] zp ZP_BYTE:17 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] zp ZP_BYTE:19 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [bitmap_line_ydxi] best 286383 combination zp ZP_BYTE:16 [ 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 ] reg byte x [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] reg byte y [ bitmap_line_ydxi::$6 ] zp ZP_BYTE:15 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] zp ZP_BYTE:12 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] zp ZP_BYTE:11 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] zp ZP_BYTE:13 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] +Uplifting [bitmap_line_ydxi] best 286713 combination zp ZP_BYTE:16 [ 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 ] reg byte x [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] reg byte y [ bitmap_line_ydxi::$6 ] zp ZP_BYTE:15 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] zp ZP_BYTE:12 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] zp ZP_BYTE:11 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] zp ZP_BYTE:13 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [bitmap_line_ydxd] best 274377 combination zp ZP_BYTE:28 [ 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_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] reg byte y [ bitmap_line_ydxd::$6 ] zp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] zp ZP_BYTE:24 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] zp ZP_BYTE:23 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] zp ZP_BYTE:25 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] +Uplifting [bitmap_line_ydxd] best 274707 combination zp ZP_BYTE:28 [ 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_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] reg byte y [ bitmap_line_ydxd::$6 ] zp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] zp ZP_BYTE:24 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] zp ZP_BYTE:23 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] zp ZP_BYTE:25 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [bitmap_clear] best 273477 combination zp ZP_WORD:32 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:61 [ bitmap_clear::bitmap#0 ] -Uplifting [lines] best 273477 combination zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ] -Uplifting [bitmap_init] best 272957 combination zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$0 ] zp ZP_BYTE:65 [ bitmap_init::$7 ] zp ZP_BYTE:66 [ bitmap_init::$8 ] zp ZP_BYTE:67 [ bitmap_init::$9 ] zp ZP_BYTE:64 [ bitmap_init::$10 ] +Uplifting [bitmap_clear] best 273807 combination zp ZP_WORD:32 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:61 [ bitmap_clear::bitmap#0 ] +Uplifting [lines] best 273807 combination zp ZP_BYTE:2 [ lines::l#5 lines::l#1 ] +Uplifting [bitmap_init] best 273287 combination zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$0 ] zp ZP_BYTE:65 [ bitmap_init::$7 ] zp ZP_BYTE:66 [ bitmap_init::$8 ] zp ZP_BYTE:67 [ bitmap_init::$9 ] zp ZP_BYTE:64 [ bitmap_init::$10 ] Limited combination testing to 100 combinations of 34560 possible. -Uplifting [init_screen] best 272957 combination zp ZP_WORD:29 [ init_screen::c#2 init_screen::c#1 ] -Uplifting [bitmap_line] best 272643 combination reg byte y [ bitmap_line::y1#0 ] zp ZP_BYTE:42 [ bitmap_line::y0#0 ] zp ZP_BYTE:41 [ bitmap_line::x1#0 ] zp ZP_BYTE:40 [ bitmap_line::x0#0 ] zp ZP_BYTE:45 [ bitmap_line::yd#2 ] zp ZP_BYTE:46 [ bitmap_line::yd#1 ] zp ZP_BYTE:48 [ bitmap_line::yd#10 ] zp ZP_BYTE:49 [ bitmap_line::yd#11 ] zp ZP_BYTE:44 [ bitmap_line::xd#2 ] zp ZP_BYTE:47 [ bitmap_line::xd#1 ] +Uplifting [init_screen] best 273287 combination zp ZP_WORD:29 [ init_screen::c#4 init_screen::c#1 ] +Uplifting [bitmap_line] best 272973 combination reg byte y [ bitmap_line::y1#0 ] zp ZP_BYTE:42 [ bitmap_line::y0#0 ] zp ZP_BYTE:41 [ bitmap_line::x1#0 ] zp ZP_BYTE:40 [ bitmap_line::x0#0 ] zp ZP_BYTE:45 [ bitmap_line::yd#2 ] zp ZP_BYTE:46 [ bitmap_line::yd#1 ] zp ZP_BYTE:48 [ bitmap_line::yd#10 ] zp ZP_BYTE:49 [ bitmap_line::yd#11 ] zp ZP_BYTE:44 [ bitmap_line::xd#2 ] zp ZP_BYTE:47 [ bitmap_line::xd#1 ] Limited combination testing to 100 combinations of 186624 possible. -Uplifting [main] best 272643 combination -Uplifting [] best 272643 combination +Uplifting [main] best 272973 combination +Uplifting [] best 272973 combination Attempting to uplift remaining variables inzp ZP_BYTE:8 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] -Uplifting [bitmap_line_xdyi] best 272643 combination zp ZP_BYTE:8 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] +Uplifting [bitmap_line_xdyi] best 272973 combination zp ZP_BYTE:8 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:16 [ 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 ] -Uplifting [bitmap_line_ydxi] best 272643 combination zp ZP_BYTE:16 [ 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 ] +Uplifting [bitmap_line_ydxi] best 272973 combination zp ZP_BYTE:16 [ 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 ] Attempting to uplift remaining variables inzp ZP_BYTE:22 [ 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 ] -Uplifting [bitmap_line_xdyd] best 272643 combination zp ZP_BYTE:22 [ 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 ] +Uplifting [bitmap_line_xdyd] best 272973 combination zp ZP_BYTE:22 [ 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 ] Attempting to uplift remaining variables inzp ZP_BYTE:28 [ 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 ] -Uplifting [bitmap_line_ydxd] best 272643 combination zp ZP_BYTE:28 [ 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 ] +Uplifting [bitmap_line_ydxd] best 272973 combination zp ZP_BYTE:28 [ 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 ] Attempting to uplift remaining variables inzp ZP_BYTE:7 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] -Uplifting [bitmap_line_xdyi] best 272643 combination zp ZP_BYTE:7 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] +Uplifting [bitmap_line_xdyi] best 272973 combination zp ZP_BYTE:7 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:21 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] -Uplifting [bitmap_line_xdyd] best 272643 combination zp ZP_BYTE:21 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] +Uplifting [bitmap_line_xdyd] best 272973 combination zp ZP_BYTE:21 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:50 [ bitmap_line_xdyi::$6 ] -Uplifting [bitmap_line_xdyi] best 272643 combination zp ZP_BYTE:50 [ bitmap_line_xdyi::$6 ] +Uplifting [bitmap_line_xdyi] best 272973 combination zp ZP_BYTE:50 [ bitmap_line_xdyi::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:59 [ bitmap_line_xdyd::$6 ] -Uplifting [bitmap_line_xdyd] best 272643 combination zp ZP_BYTE:59 [ bitmap_line_xdyd::$6 ] +Uplifting [bitmap_line_xdyd] best 272973 combination zp ZP_BYTE:59 [ bitmap_line_xdyd::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:15 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] -Uplifting [bitmap_line_ydxi] best 272643 combination zp ZP_BYTE:15 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] +Uplifting [bitmap_line_ydxi] best 272973 combination zp ZP_BYTE:15 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] -Uplifting [bitmap_line_ydxd] best 272643 combination zp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] -Attempting to uplift remaining variables inzp ZP_BYTE:2 [ lines::l#2 lines::l#1 ] -Uplifting [lines] best 272643 combination zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ] +Uplifting [bitmap_line_ydxd] best 272973 combination zp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ lines::l#5 lines::l#1 ] +Uplifting [lines] best 272973 combination zp ZP_BYTE:2 [ lines::l#5 lines::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] -Uplifting [bitmap_line_xdyi] best 272643 combination zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] +Uplifting [bitmap_line_xdyi] best 272973 combination zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:12 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] -Uplifting [bitmap_line_ydxi] best 272643 combination zp ZP_BYTE:12 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] +Uplifting [bitmap_line_ydxi] best 272973 combination zp ZP_BYTE:12 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:18 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] -Uplifting [bitmap_line_xdyd] best 272643 combination zp ZP_BYTE:18 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] +Uplifting [bitmap_line_xdyd] best 272973 combination zp ZP_BYTE:18 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:24 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] -Uplifting [bitmap_line_ydxd] best 272643 combination zp ZP_BYTE:24 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] +Uplifting [bitmap_line_ydxd] best 272973 combination zp ZP_BYTE:24 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] -Uplifting [bitmap_line_xdyi] best 272643 combination zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] +Uplifting [bitmap_line_xdyi] best 272973 combination zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:11 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] -Uplifting [bitmap_line_ydxi] best 272643 combination zp ZP_BYTE:11 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] +Uplifting [bitmap_line_ydxi] best 272973 combination zp ZP_BYTE:11 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:17 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] -Uplifting [bitmap_line_xdyd] best 272643 combination zp ZP_BYTE:17 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] +Uplifting [bitmap_line_xdyd] best 272973 combination zp ZP_BYTE:17 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:23 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] -Uplifting [bitmap_line_ydxd] best 272643 combination zp ZP_BYTE:23 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] +Uplifting [bitmap_line_ydxd] best 272973 combination zp ZP_BYTE:23 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] -Uplifting [bitmap_line_xdyi] best 272643 combination zp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] +Uplifting [bitmap_line_xdyi] best 272973 combination zp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:13 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] -Uplifting [bitmap_line_ydxi] best 272643 combination zp ZP_BYTE:13 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] +Uplifting [bitmap_line_ydxi] best 272973 combination zp ZP_BYTE:13 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:19 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] -Uplifting [bitmap_line_xdyd] best 272643 combination zp ZP_BYTE:19 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] +Uplifting [bitmap_line_xdyd] best 272973 combination zp ZP_BYTE:19 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:25 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] -Uplifting [bitmap_line_ydxd] best 272643 combination zp ZP_BYTE:25 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] +Uplifting [bitmap_line_ydxd] best 272973 combination zp ZP_BYTE:25 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:65 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 272583 combination reg byte a [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 272913 combination reg byte a [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:66 [ bitmap_init::$8 ] -Uplifting [bitmap_init] best 272523 combination reg byte a [ bitmap_init::$8 ] +Uplifting [bitmap_init] best 272853 combination reg byte a [ bitmap_init::$8 ] Attempting to uplift remaining variables inzp ZP_BYTE:67 [ bitmap_init::$9 ] -Uplifting [bitmap_init] best 272463 combination reg byte a [ bitmap_init::$9 ] +Uplifting [bitmap_init] best 272793 combination reg byte a [ bitmap_init::$9 ] Attempting to uplift remaining variables inzp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ] -Uplifting [bitmap_clear] best 272463 combination zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ] +Uplifting [bitmap_clear] best 272793 combination zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:42 [ bitmap_line::y0#0 ] -Uplifting [bitmap_line] best 272463 combination zp ZP_BYTE:42 [ bitmap_line::y0#0 ] +Uplifting [bitmap_line] best 272793 combination zp ZP_BYTE:42 [ bitmap_line::y0#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:64 [ bitmap_init::$10 ] -Uplifting [bitmap_init] best 272463 combination zp ZP_BYTE:64 [ bitmap_init::$10 ] +Uplifting [bitmap_init] best 272793 combination zp ZP_BYTE:64 [ bitmap_init::$10 ] Attempting to uplift remaining variables inzp ZP_BYTE:41 [ bitmap_line::x1#0 ] -Uplifting [bitmap_line] best 272463 combination zp ZP_BYTE:41 [ bitmap_line::x1#0 ] +Uplifting [bitmap_line] best 272793 combination zp ZP_BYTE:41 [ bitmap_line::x1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:40 [ bitmap_line::x0#0 ] -Uplifting [bitmap_line] best 272463 combination zp ZP_BYTE:40 [ bitmap_line::x0#0 ] +Uplifting [bitmap_line] best 272793 combination zp ZP_BYTE:40 [ bitmap_line::x0#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:45 [ bitmap_line::yd#2 ] -Uplifting [bitmap_line] best 272463 combination zp ZP_BYTE:45 [ bitmap_line::yd#2 ] +Uplifting [bitmap_line] best 272793 combination zp ZP_BYTE:45 [ bitmap_line::yd#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:46 [ bitmap_line::yd#1 ] -Uplifting [bitmap_line] best 272463 combination zp ZP_BYTE:46 [ bitmap_line::yd#1 ] +Uplifting [bitmap_line] best 272793 combination zp ZP_BYTE:46 [ bitmap_line::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:48 [ bitmap_line::yd#10 ] -Uplifting [bitmap_line] best 272463 combination zp ZP_BYTE:48 [ bitmap_line::yd#10 ] +Uplifting [bitmap_line] best 272793 combination zp ZP_BYTE:48 [ bitmap_line::yd#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:49 [ bitmap_line::yd#11 ] -Uplifting [bitmap_line] best 272463 combination zp ZP_BYTE:49 [ bitmap_line::yd#11 ] +Uplifting [bitmap_line] best 272793 combination zp ZP_BYTE:49 [ bitmap_line::yd#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:44 [ bitmap_line::xd#2 ] -Uplifting [bitmap_line] best 272463 combination zp ZP_BYTE:44 [ bitmap_line::xd#2 ] +Uplifting [bitmap_line] best 272793 combination zp ZP_BYTE:44 [ bitmap_line::xd#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:47 [ bitmap_line::xd#1 ] -Uplifting [bitmap_line] best 272463 combination zp ZP_BYTE:47 [ bitmap_line::xd#1 ] +Uplifting [bitmap_line] best 272793 combination zp ZP_BYTE:47 [ bitmap_line::xd#1 ] Coalescing zero page register [ zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] ] with [ zp ZP_BYTE:45 [ bitmap_line::yd#2 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 bitmap_line::yd#2 ] ] with [ zp ZP_BYTE:49 [ bitmap_line::yd#11 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] ] with [ zp ZP_BYTE:44 [ bitmap_line::xd#2 ] ] - score: 1 @@ -4169,21 +4193,21 @@ Coalescing zero page register [ zp ZP_BYTE:15 [ bitmap_line_ydxi::y#3 bitmap_lin Coalescing zero page register [ zp ZP_BYTE:16 [ 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 ] ] with [ zp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 ] ] Coalescing zero page register [ zp ZP_BYTE:22 [ 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 ] ] with [ zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 bitmap_line::yd#2 bitmap_line::yd#11 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] ] Coalescing zero page register [ zp ZP_BYTE:28 [ 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 ] ] with [ zp ZP_BYTE:19 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 bitmap_line::x1#0 ] ] -Coalescing zero page register [ zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ] ] with [ zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ] ] -Coalescing zero page register [ zp ZP_WORD:32 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 ] ] with [ zp ZP_WORD:29 [ init_screen::c#2 init_screen::c#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ] ] with [ zp ZP_BYTE:2 [ lines::l#5 lines::l#1 ] ] +Coalescing zero page register [ zp ZP_WORD:32 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 ] ] with [ zp ZP_WORD:29 [ init_screen::c#4 init_screen::c#1 ] ] Coalescing zero page register [ zp ZP_BYTE:50 [ bitmap_line_xdyi::$6 ] ] with [ zp ZP_BYTE:17 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 bitmap_line::yd#1 bitmap_line::yd#10 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] ] Coalescing zero page register [ zp ZP_WORD:51 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 ] ] with [ zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] Coalescing zero page register [ zp ZP_BYTE:59 [ bitmap_line_xdyd::$6 ] ] with [ zp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] ] Coalescing zero page register [ zp ZP_BYTE:64 [ bitmap_init::$10 ] ] with [ zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] ] -Coalescing zero page register [ zp ZP_WORD:51 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp ZP_WORD:32 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 init_screen::c#2 init_screen::c#1 ] ] +Coalescing zero page register [ zp ZP_WORD:51 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp ZP_WORD:32 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 init_screen::c#4 init_screen::c#1 ] ] Coalescing zero page register [ zp ZP_BYTE:59 [ bitmap_line_xdyd::$6 bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] ] with [ zp ZP_BYTE:15 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] ] Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:2 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 bitmap_line::y0#0 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 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 ] Allocated (was zp ZP_BYTE:16) zp ZP_BYTE:3 [ 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_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 ] Allocated (was zp ZP_BYTE:22) zp ZP_BYTE:4 [ 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_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 bitmap_line::yd#2 bitmap_line::yd#11 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] Allocated (was zp ZP_BYTE:28) zp ZP_BYTE:5 [ 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 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 bitmap_line::x1#0 ] -Allocated (was zp ZP_BYTE:31) zp ZP_BYTE:6 [ bitmap_clear::y#4 bitmap_clear::y#1 lines::l#2 lines::l#1 ] +Allocated (was zp ZP_BYTE:31) zp ZP_BYTE:6 [ bitmap_clear::y#4 bitmap_clear::y#1 lines::l#5 lines::l#1 ] Allocated (was zp ZP_BYTE:50) zp ZP_BYTE:7 [ bitmap_line_xdyi::$6 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 bitmap_line::yd#1 bitmap_line::yd#10 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] -Allocated (was zp ZP_WORD:51) zp ZP_WORD:8 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 init_screen::c#2 init_screen::c#1 ] +Allocated (was zp ZP_WORD:51) zp ZP_WORD:8 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 init_screen::c#4 init_screen::c#1 ] Allocated (was zp ZP_WORD:53) zp ZP_WORD:10 [ bitmap_plot::plotter_y#0 ] Allocated (was zp ZP_BYTE:59) zp ZP_BYTE:12 [ bitmap_line_xdyd::$6 bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] Allocated (was zp ZP_BYTE:64) zp ZP_BYTE:13 [ bitmap_init::$10 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] @@ -4268,51 +4292,52 @@ main: { // lines lines: { .label l = 6 - // [16] phi from lines to lines::@1 [phi:lines->lines::@1] - b1_from_lines: - // [16] phi (byte) lines::l#2 = (byte) 0 [phi:lines->lines::@1#0] -- vbuz1=vbuc1 + // [16] phi from lines to lines::@2 [phi:lines->lines::@2] + b2_from_lines: + // [16] phi (byte) lines::l#5 = (byte) 0 [phi:lines->lines::@2#0] -- vbuz1=vbuc1 lda #0 sta l - jmp b1 - // lines::@1 - b1: - // [17] if((byte) lines::l#2<(const byte) lines_cnt#0) goto lines::@2 -- vbuz1_lt_vbuc1_then_la1 - lda l - cmp #lines_cnt - bcc b2 - jmp breturn - // lines::@return - breturn: - // [18] return - rts + jmp b2 + // [16] phi from lines::@1 to lines::@2 [phi:lines::@1->lines::@2] + b2_from_b1: + // [16] phi (byte) lines::l#5 = (byte) lines::l#1 [phi:lines::@1->lines::@2#0] -- register_copy + jmp b2 // lines::@2 b2: - // [19] (byte) bitmap_line::x0#0 ← *((const byte[]) lines_x#0 + (byte) lines::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [17] (byte) bitmap_line::x0#0 ← *((const byte[]) lines_x#0 + (byte) lines::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_x,y sta bitmap_line.x0 - // [20] (byte) bitmap_line::x1#0 ← *((const byte[]) lines_x#0+(byte) 1 + (byte) lines::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [18] (byte) bitmap_line::x1#0 ← *((const byte[]) lines_x#0+(byte) 1 + (byte) lines::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_x+1,y sta bitmap_line.x1 - // [21] (byte) bitmap_line::y0#0 ← *((const byte[]) lines_y#0 + (byte) lines::l#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [19] (byte) bitmap_line::y0#0 ← *((const byte[]) lines_y#0 + (byte) lines::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 ldy l lda lines_y,y sta bitmap_line.y0 - // [22] (byte) bitmap_line::y1#0 ← *((const byte[]) lines_y#0+(byte) 1 + (byte) lines::l#2) -- vbuyy=pbuc1_derefidx_vbuz1 + // [20] (byte) bitmap_line::y1#0 ← *((const byte[]) lines_y#0+(byte) 1 + (byte) lines::l#5) -- vbuyy=pbuc1_derefidx_vbuz1 ldx l ldy lines_y+1,x - // [23] call bitmap_line + // [21] call bitmap_line jsr bitmap_line jmp b3 // lines::@3 b3: - // [24] (byte) lines::l#1 ← ++ (byte) lines::l#2 -- vbuz1=_inc_vbuz1 + // [22] (byte) lines::l#1 ← ++ (byte) lines::l#5 -- vbuz1=_inc_vbuz1 inc l - // [16] phi from lines::@3 to lines::@1 [phi:lines::@3->lines::@1] - b1_from_b3: - // [16] phi (byte) lines::l#2 = (byte) lines::l#1 [phi:lines::@3->lines::@1#0] -- register_copy jmp b1 + // lines::@1 + b1: + // [23] if((byte) lines::l#1<(const byte) lines_cnt#0) goto lines::@2 -- vbuz1_lt_vbuc1_then_la1 + lda l + cmp #lines_cnt + bcc b2_from_b1 + jmp breturn + // lines::@return + breturn: + // [24] return + rts } // bitmap_line // Draw a line on the bitmap @@ -4911,43 +4936,44 @@ bitmap_line_ydxd: { // init_screen init_screen: { .label c = 8 - // [155] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] - b1_from_init_screen: - // [155] phi (byte*) init_screen::c#2 = (const byte*) SCREEN#0 [phi:init_screen->init_screen::@1#0] -- pbuz1=pbuc1 + // [155] phi from init_screen to init_screen::@2 [phi:init_screen->init_screen::@2] + b2_from_init_screen: + // [155] phi (byte*) init_screen::c#4 = (const byte*) SCREEN#0 [phi:init_screen->init_screen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta c+1 - jmp b1 - // init_screen::@1 - b1: - // [156] if((byte*) init_screen::c#2!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@2 -- pbuz1_neq_pbuc1_then_la1 - lda c+1 - cmp #>SCREEN+$400 - bne b2 - lda c - cmp #init_screen::@2] + b2_from_b1: + // [155] phi (byte*) init_screen::c#4 = (byte*) init_screen::c#1 [phi:init_screen::@1->init_screen::@2#0] -- register_copy + jmp b2 // init_screen::@2 b2: - // [158] *((byte*) init_screen::c#2) ← (byte) $14 -- _deref_pbuz1=vbuc1 + // [156] *((byte*) init_screen::c#4) ← (byte) $14 -- _deref_pbuz1=vbuc1 lda #$14 ldy #0 sta (c),y - // [159] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2 -- pbuz1=_inc_pbuz1 + // [157] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#4 -- pbuz1=_inc_pbuz1 inc c bne !+ inc c+1 !: - // [155] phi from init_screen::@2 to init_screen::@1 [phi:init_screen::@2->init_screen::@1] - b1_from_b2: - // [155] phi (byte*) init_screen::c#2 = (byte*) init_screen::c#1 [phi:init_screen::@2->init_screen::@1#0] -- register_copy jmp b1 + // init_screen::@1 + b1: + // [158] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@2 -- pbuz1_neq_pbuc1_then_la1 + lda c+1 + cmp #>SCREEN+$400 + bne b2_from_b1 + lda c + cmp #0 Replacing instruction ldx #0 with TAX Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b1 with b1 +Replacing label b2_from_b1 with b2 Replacing label b2_from_b4 with b2 Replacing label b1_from_b2 with b1 Replacing label b2_from_b4 with b2 @@ -5220,6 +5249,8 @@ Replacing label b2_from_b4 with b2 Replacing label b1_from_b2 with b1 Replacing label b2_from_b4 with b2 Replacing label b1_from_b2 with b1 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Replacing label b2_from_b2 with b2 Replacing label b1_from_b3 with b1 Replacing label b6_from_b1 with b2 @@ -5235,6 +5266,7 @@ Removing instruction init_screen_from_b3: Removing instruction b1_from_b1: Removing instruction b1_from_b3: Removing instruction lines_from_b1: +Removing instruction b2_from_b1: Removing instruction b1_from_bitmap_line_xdyi: Removing instruction b1_from_b2: Removing instruction b2_from_b3: @@ -5251,6 +5283,7 @@ Removing instruction b1_from_bitmap_line_ydxd: Removing instruction b1_from_b2: Removing instruction b2_from_b3: Removing instruction b2_from_b4: +Removing instruction b2_from_b1: Removing instruction b1_from_b3: Removing instruction b2_from_b1: Removing instruction b2_from_b2: @@ -5266,10 +5299,10 @@ Removing instruction bend: Removing instruction bitmap_init_from_main: Removing instruction b2: Removing instruction b3: -Removing instruction b1_from_lines: -Removing instruction breturn: +Removing instruction b2_from_lines: Removing instruction b3: -Removing instruction b1_from_b3: +Removing instruction b1: +Removing instruction breturn: Removing instruction b2: Removing instruction b3: Removing instruction b4: @@ -5302,9 +5335,9 @@ Removing instruction bitmap_plot_from_b1: Removing instruction b4: Removing instruction b3: Removing instruction breturn: -Removing instruction b1_from_init_screen: +Removing instruction b2_from_init_screen: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Removing instruction b1_from_bitmap_clear: Removing instruction b3: Removing instruction breturn: @@ -5325,6 +5358,8 @@ Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn Succesful ASM optimization Pass5DoubleJumpElimination +Removing instruction jmp b2 +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b1 @@ -5624,16 +5659,16 @@ FINAL SYMBOL TABLE (label) init_screen::@2 (label) init_screen::@return (byte*) init_screen::c -(byte*) init_screen::c#1 c zp ZP_WORD:8 22.0 -(byte*) init_screen::c#2 c zp ZP_WORD:8 14.666666666666666 +(byte*) init_screen::c#1 c zp ZP_WORD:8 16.5 +(byte*) init_screen::c#4 c zp ZP_WORD:8 16.5 (void()) lines() (label) lines::@1 (label) lines::@2 (label) lines::@3 (label) lines::@return (byte) lines::l -(byte) lines::l#1 l zp ZP_BYTE:6 202.0 -(byte) lines::l#2 l zp ZP_BYTE:6 101.0 +(byte) lines::l#1 l zp ZP_BYTE:6 151.5 +(byte) lines::l#5 l zp ZP_BYTE:6 100.99999999999999 (byte) lines_cnt (const byte) lines_cnt#0 lines_cnt = (byte) 8 (byte[]) lines_x @@ -5655,14 +5690,14 @@ reg byte x [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 b zp ZP_BYTE:4 [ 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_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 bitmap_line::yd#2 bitmap_line::yd#11 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] reg byte x [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] zp ZP_BYTE:5 [ 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 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 bitmap_line::x1#0 ] -zp ZP_BYTE:6 [ bitmap_clear::y#4 bitmap_clear::y#1 lines::l#2 lines::l#1 ] +zp ZP_BYTE:6 [ bitmap_clear::y#4 bitmap_clear::y#1 lines::l#5 lines::l#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte y [ bitmap_line::y1#0 ] zp ZP_BYTE:7 [ bitmap_line_xdyi::$6 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 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_WORD:8 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 init_screen::c#2 init_screen::c#1 ] +zp ZP_WORD:8 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 init_screen::c#4 init_screen::c#1 ] zp ZP_WORD:10 [ bitmap_plot::plotter_y#0 ] reg byte a [ bitmap_plot::$1 ] reg byte y [ bitmap_line_ydxi::$6 ] @@ -5676,7 +5711,7 @@ reg byte a [ bitmap_init::$9 ] FINAL ASSEMBLER -Score: 221364 +Score: 221034 // File Comments // Upstart @@ -5744,46 +5779,43 @@ main: { // lines lines: { .label l = 6 - // [16] phi from lines to lines::@1 [phi:lines->lines::@1] - // [16] phi (byte) lines::l#2 = (byte) 0 [phi:lines->lines::@1#0] -- vbuz1=vbuc1 + // [16] phi from lines to lines::@2 [phi:lines->lines::@2] + // [16] phi (byte) lines::l#5 = (byte) 0 [phi:lines->lines::@2#0] -- vbuz1=vbuc1 lda #0 sta l - // lines::@1 - b1: + // [16] phi from lines::@1 to lines::@2 [phi:lines::@1->lines::@2] + // [16] phi (byte) lines::l#5 = (byte) lines::l#1 [phi:lines::@1->lines::@2#0] -- register_copy + // lines::@2 + b2: + // bitmap_line(lines_x[l], lines_x[l+1], lines_y[l], lines_y[l+1]) + // [17] (byte) bitmap_line::x0#0 ← *((const byte[]) lines_x#0 + (byte) lines::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy l + lda lines_x,y + sta bitmap_line.x0 + // [18] (byte) bitmap_line::x1#0 ← *((const byte[]) lines_x#0+(byte) 1 + (byte) lines::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + lda lines_x+1,y + sta bitmap_line.x1 + // [19] (byte) bitmap_line::y0#0 ← *((const byte[]) lines_y#0 + (byte) lines::l#5) -- vbuz1=pbuc1_derefidx_vbuz2 + lda lines_y,y + sta bitmap_line.y0 + // [20] (byte) bitmap_line::y1#0 ← *((const byte[]) lines_y#0+(byte) 1 + (byte) lines::l#5) -- vbuyy=pbuc1_derefidx_vbuz1 + ldx l + ldy lines_y+1,x + // [21] call bitmap_line + jsr bitmap_line + // lines::@3 // for(byte l=0; llines::@1] - // [16] phi (byte) lines::l#2 = (byte) lines::l#1 [phi:lines::@3->lines::@1#0] -- register_copy - jmp b1 } // bitmap_line // Draw a line on the bitmap @@ -6366,16 +6398,29 @@ bitmap_line_ydxd: { // init_screen init_screen: { .label c = 8 - // [155] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] - // [155] phi (byte*) init_screen::c#2 = (const byte*) SCREEN#0 [phi:init_screen->init_screen::@1#0] -- pbuz1=pbuc1 + // [155] phi from init_screen to init_screen::@2 [phi:init_screen->init_screen::@2] + // [155] phi (byte*) init_screen::c#4 = (const byte*) SCREEN#0 [phi:init_screen->init_screen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta c+1 - // init_screen::@1 - b1: + // [155] phi from init_screen::@1 to init_screen::@2 [phi:init_screen::@1->init_screen::@2] + // [155] phi (byte*) init_screen::c#4 = (byte*) init_screen::c#1 [phi:init_screen::@1->init_screen::@2#0] -- register_copy + // init_screen::@2 + b2: + // *c = $14 + // [156] *((byte*) init_screen::c#4) ← (byte) $14 -- _deref_pbuz1=vbuc1 + lda #$14 + ldy #0 + sta (c),y // for(byte* c = SCREEN; c!=SCREEN+$400;c++) - // [156] if((byte*) init_screen::c#2!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@2 -- pbuz1_neq_pbuc1_then_la1 + // [157] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#4 -- pbuz1=_inc_pbuz1 + inc c + bne !+ + inc c+1 + !: + // init_screen::@1 + // [158] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word) $400) goto init_screen::@2 -- pbuz1_neq_pbuc1_then_la1 lda c+1 cmp #>SCREEN+$400 bne b2 @@ -6384,24 +6429,8 @@ init_screen: { bne b2 // init_screen::@return // } - // [157] return + // [159] return rts - // init_screen::@2 - b2: - // *c = $14 - // [158] *((byte*) init_screen::c#2) ← (byte) $14 -- _deref_pbuz1=vbuc1 - lda #$14 - ldy #0 - sta (c),y - // for(byte* c = SCREEN; c!=SCREEN+$400;c++) - // [159] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2 -- pbuz1=_inc_pbuz1 - inc c - bne !+ - inc c+1 - !: - // [155] phi from init_screen::@2 to init_screen::@1 [phi:init_screen::@2->init_screen::@1] - // [155] phi (byte*) init_screen::c#2 = (byte*) init_screen::c#1 [phi:init_screen::@2->init_screen::@1#0] -- register_copy - jmp b1 } // bitmap_clear // Clear all graphics on the bitmap diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.sym b/src/test/ref/examples/bresenham/bitmap-bresenham.sym index f52754bd9..32b38218a 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.sym +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.sym @@ -284,16 +284,16 @@ (label) init_screen::@2 (label) init_screen::@return (byte*) init_screen::c -(byte*) init_screen::c#1 c zp ZP_WORD:8 22.0 -(byte*) init_screen::c#2 c zp ZP_WORD:8 14.666666666666666 +(byte*) init_screen::c#1 c zp ZP_WORD:8 16.5 +(byte*) init_screen::c#4 c zp ZP_WORD:8 16.5 (void()) lines() (label) lines::@1 (label) lines::@2 (label) lines::@3 (label) lines::@return (byte) lines::l -(byte) lines::l#1 l zp ZP_BYTE:6 202.0 -(byte) lines::l#2 l zp ZP_BYTE:6 101.0 +(byte) lines::l#1 l zp ZP_BYTE:6 151.5 +(byte) lines::l#5 l zp ZP_BYTE:6 100.99999999999999 (byte) lines_cnt (const byte) lines_cnt#0 lines_cnt = (byte) 8 (byte[]) lines_x @@ -315,14 +315,14 @@ reg byte x [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 b zp ZP_BYTE:4 [ 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_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 bitmap_line::yd#2 bitmap_line::yd#11 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] reg byte x [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] zp ZP_BYTE:5 [ 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 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 bitmap_line::x1#0 ] -zp ZP_BYTE:6 [ bitmap_clear::y#4 bitmap_clear::y#1 lines::l#2 lines::l#1 ] +zp ZP_BYTE:6 [ bitmap_clear::y#4 bitmap_clear::y#1 lines::l#5 lines::l#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte y [ bitmap_line::y1#0 ] zp ZP_BYTE:7 [ bitmap_line_xdyi::$6 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 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_WORD:8 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 init_screen::c#2 init_screen::c#1 ] +zp ZP_WORD:8 [ bitmap_plot::plotter_x#0 bitmap_plot::plotter#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 init_screen::c#4 init_screen::c#1 ] zp ZP_WORD:10 [ bitmap_plot::plotter_y#0 ] reg byte a [ bitmap_plot::$1 ] reg byte y [ bitmap_line_ydxi::$6 ] diff --git a/src/test/ref/examples/chargen/chargen-analysis.asm b/src/test/ref/examples/chargen/chargen-analysis.asm index fdfd868d3..c9aadf519 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.asm +++ b/src/test/ref/examples/chargen/chargen-analysis.asm @@ -76,19 +76,22 @@ main: { sta sc lda #>SCREEN sta sc+1 + b2: + lda #' ' + ldy #0 + sta (sc),y + inc sc + bne !+ + inc sc+1 + !: // Clear screen - b1: lda sc+1 cmp #>SCREEN+$3e8 - bcs !b2+ - jmp b2 - !b2: + bcc b2 bne !+ lda sc cmp #main::@1] - b1_from_main: - // [5] phi (byte*) main::sc#2 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::sc#4 = (const byte*) SCREEN#0 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta sc+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((byte*) main::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + // [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: jmp b1 // Clear screen // main::@1 b1: - // [6] if((byte*) main::sc#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_lt_pbuc1_then_la1 + // [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_lt_pbuc1_then_la1 lda sc+1 cmp #>SCREEN+$3e8 - bcc b2 + bcc b2_from_b1 bne !+ lda sc cmp #main::@3] + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: jmp b3 // main::@3 b3: - // [8] call print_str_at + // [10] call print_str_at // [127] phi from main::@3 to print_str_at [phi:main::@3->print_str_at] print_str_at_from_b3: // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte) 1 [phi:main::@3->print_str_at#0] -- pbuz1=pbuc1 @@ -2698,12 +2725,12 @@ main: { lda #>str sta print_str_at.str+1 jsr print_str_at - // [9] phi from main::@3 to main::@17 [phi:main::@3->main::@17] + // [11] phi from main::@3 to main::@17 [phi:main::@3->main::@17] b17_from_b3: jmp b17 // main::@17 b17: - // [10] call print_str_at + // [12] call print_str_at // [127] phi from main::@17 to print_str_at [phi:main::@17->print_str_at] print_str_at_from_b17: // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte) 1+(byte) $a [phi:main::@17->print_str_at#0] -- pbuz1=pbuc1 @@ -2717,12 +2744,12 @@ main: { lda #>str1 sta print_str_at.str+1 jsr print_str_at - // [11] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + // [13] phi from main::@17 to main::@18 [phi:main::@17->main::@18] b18_from_b17: jmp b18 // main::@18 b18: - // [12] call print_str_at + // [14] call print_str_at // [127] phi from main::@18 to print_str_at [phi:main::@18->print_str_at] print_str_at_from_b18: // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte) 1+(byte) $14 [phi:main::@18->print_str_at#0] -- pbuz1=pbuc1 @@ -2736,12 +2763,12 @@ main: { lda #>str2 sta print_str_at.str+1 jsr print_str_at - // [13] phi from main::@18 to main::@19 [phi:main::@18->main::@19] + // [15] phi from main::@18 to main::@19 [phi:main::@18->main::@19] b19_from_b18: jmp b19 // main::@19 b19: - // [14] call print_str_at + // [16] call print_str_at // [127] phi from main::@19 to print_str_at [phi:main::@19->print_str_at] print_str_at_from_b19: // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte) 1+(byte) $1e [phi:main::@19->print_str_at#0] -- pbuz1=pbuc1 @@ -2755,22 +2782,22 @@ main: { lda #>str3 sta print_str_at.str+1 jsr print_str_at - // [15] phi from main::@19 to main::@4 [phi:main::@19->main::@4] + // [17] phi from main::@19 to main::@4 [phi:main::@19->main::@4] b4_from_b19: - // [15] phi (byte) main::i#2 = (byte) 0 [phi:main::@19->main::@4#0] -- vbuz1=vbuc1 + // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@19->main::@4#0] -- vbuz1=vbuc1 lda #0 sta i jmp b4 - // [15] phi from main::@20 to main::@4 [phi:main::@20->main::@4] + // [17] phi from main::@20 to main::@4 [phi:main::@20->main::@4] b4_from_b20: - // [15] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@20->main::@4#0] -- register_copy + // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@20->main::@4#0] -- register_copy jmp b4 // main::@4 b4: - // [16] (byte) plot_chargen::pos#0 ← (byte) main::i#2 -- vbuz1=vbuz2 + // [18] (byte) plot_chargen::pos#0 ← (byte) main::i#2 -- vbuz1=vbuz2 lda i sta plot_chargen.pos - // [17] call plot_chargen + // [19] call plot_chargen // [71] phi from main::@4 to plot_chargen [phi:main::@4->plot_chargen] plot_chargen_from_b4: // [71] phi (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#0 [phi:main::@4->plot_chargen#0] -- register_copy @@ -2784,287 +2811,287 @@ main: { jmp b20 // main::@20 b20: - // [18] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [20] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc i - // [19] if((byte) main::i#1!=(byte) 4) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 + // [21] if((byte) main::i#1!=(byte) 4) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp i bne b4_from_b20 - // [20] phi from main::@20 to main::@5 [phi:main::@20->main::@5] + // [22] phi from main::@20 to main::@5 [phi:main::@20->main::@5] b5_from_b20: - // [20] phi (byte) main::cur_pos#24 = (byte) 0 [phi:main::@20->main::@5#0] -- vbuz1=vbuc1 + // [22] phi (byte) main::cur_pos#24 = (byte) 0 [phi:main::@20->main::@5#0] -- vbuz1=vbuc1 lda #0 sta cur_pos jmp b5 // main::@5 b5: - // [21] call keyboard_key_pressed + // [23] call keyboard_key_pressed // [113] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] keyboard_key_pressed_from_b5: // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F1#0 [phi:main::@5->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_F1 sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [22] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [24] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_2 jmp b21 // main::@21 b21: - // [23] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2 -- vbuz1=vbuz2 + // [25] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_2 sta _15 - // [24] if((byte~) main::$15==(byte) 0) goto main::@28 -- vbuz1_eq_0_then_la1 + // [26] if((byte~) main::$15==(byte) 0) goto main::@28 -- vbuz1_eq_0_then_la1 lda _15 cmp #0 beq b28_from_b21 - // [26] phi from main::@21 to main::@6 [phi:main::@21->main::@6] + // [28] phi from main::@21 to main::@6 [phi:main::@21->main::@6] b6_from_b21: - // [26] phi (byte) main::cur_pos#22 = (byte) 0 [phi:main::@21->main::@6#0] -- vbuz1=vbuc1 + // [28] phi (byte) main::cur_pos#22 = (byte) 0 [phi:main::@21->main::@6#0] -- vbuz1=vbuc1 lda #0 sta cur_pos jmp b6 - // [25] phi from main::@21 to main::@28 [phi:main::@21->main::@28] + // [27] phi from main::@21 to main::@28 [phi:main::@21->main::@28] b28_from_b21: jmp b28 // main::@28 b28: - // [26] phi from main::@28 to main::@6 [phi:main::@28->main::@6] + // [28] phi from main::@28 to main::@6 [phi:main::@28->main::@6] b6_from_b28: - // [26] phi (byte) main::cur_pos#22 = (byte) main::cur_pos#24 [phi:main::@28->main::@6#0] -- register_copy + // [28] phi (byte) main::cur_pos#22 = (byte) main::cur_pos#24 [phi:main::@28->main::@6#0] -- register_copy jmp b6 // main::@6 b6: - // [27] call keyboard_key_pressed + // [29] call keyboard_key_pressed // [113] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed] keyboard_key_pressed_from_b6: // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F3#0 [phi:main::@6->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_F3 sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [28] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [30] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_10 jmp b22 // main::@22 b22: - // [29] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10 -- vbuz1=vbuz2 + // [31] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_10 sta _18 - // [30] if((byte~) main::$18==(byte) 0) goto main::@29 -- vbuz1_eq_0_then_la1 + // [32] if((byte~) main::$18==(byte) 0) goto main::@29 -- vbuz1_eq_0_then_la1 lda _18 cmp #0 beq b29_from_b22 - // [32] phi from main::@22 to main::@7 [phi:main::@22->main::@7] + // [34] phi from main::@22 to main::@7 [phi:main::@22->main::@7] b7_from_b22: - // [32] phi (byte) main::cur_pos#20 = (byte) 1 [phi:main::@22->main::@7#0] -- vbuz1=vbuc1 + // [34] phi (byte) main::cur_pos#20 = (byte) 1 [phi:main::@22->main::@7#0] -- vbuz1=vbuc1 lda #1 sta cur_pos jmp b7 - // [31] phi from main::@22 to main::@29 [phi:main::@22->main::@29] + // [33] phi from main::@22 to main::@29 [phi:main::@22->main::@29] b29_from_b22: jmp b29 // main::@29 b29: - // [32] phi from main::@29 to main::@7 [phi:main::@29->main::@7] + // [34] phi from main::@29 to main::@7 [phi:main::@29->main::@7] b7_from_b29: - // [32] phi (byte) main::cur_pos#20 = (byte) main::cur_pos#22 [phi:main::@29->main::@7#0] -- register_copy + // [34] phi (byte) main::cur_pos#20 = (byte) main::cur_pos#22 [phi:main::@29->main::@7#0] -- register_copy jmp b7 // main::@7 b7: - // [33] call keyboard_key_pressed + // [35] call keyboard_key_pressed // [113] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed] keyboard_key_pressed_from_b7: // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F5#0 [phi:main::@7->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_F5 sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [34] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [36] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_11 jmp b23 // main::@23 b23: - // [35] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11 -- vbuz1=vbuz2 + // [37] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_11 sta _21 - // [36] if((byte~) main::$21==(byte) 0) goto main::@30 -- vbuz1_eq_0_then_la1 + // [38] if((byte~) main::$21==(byte) 0) goto main::@30 -- vbuz1_eq_0_then_la1 lda _21 cmp #0 beq b30_from_b23 - // [38] phi from main::@23 to main::@8 [phi:main::@23->main::@8] + // [40] phi from main::@23 to main::@8 [phi:main::@23->main::@8] b8_from_b23: - // [38] phi (byte) main::cur_pos#18 = (byte) 2 [phi:main::@23->main::@8#0] -- vbuz1=vbuc1 + // [40] phi (byte) main::cur_pos#18 = (byte) 2 [phi:main::@23->main::@8#0] -- vbuz1=vbuc1 lda #2 sta cur_pos jmp b8 - // [37] phi from main::@23 to main::@30 [phi:main::@23->main::@30] + // [39] phi from main::@23 to main::@30 [phi:main::@23->main::@30] b30_from_b23: jmp b30 // main::@30 b30: - // [38] phi from main::@30 to main::@8 [phi:main::@30->main::@8] + // [40] phi from main::@30 to main::@8 [phi:main::@30->main::@8] b8_from_b30: - // [38] phi (byte) main::cur_pos#18 = (byte) main::cur_pos#20 [phi:main::@30->main::@8#0] -- register_copy + // [40] phi (byte) main::cur_pos#18 = (byte) main::cur_pos#20 [phi:main::@30->main::@8#0] -- register_copy jmp b8 // main::@8 b8: - // [39] call keyboard_key_pressed + // [41] call keyboard_key_pressed // [113] phi from main::@8 to keyboard_key_pressed [phi:main::@8->keyboard_key_pressed] keyboard_key_pressed_from_b8: // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F7#0 [phi:main::@8->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_F7 sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [40] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [42] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_12 jmp b24 // main::@24 b24: - // [41] (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12 -- vbuz1=vbuz2 + // [43] (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_12 sta _24 - // [42] if((byte~) main::$24==(byte) 0) goto main::@31 -- vbuz1_eq_0_then_la1 + // [44] if((byte~) main::$24==(byte) 0) goto main::@31 -- vbuz1_eq_0_then_la1 lda _24 cmp #0 beq b31_from_b24 - // [44] phi from main::@24 to main::@9 [phi:main::@24->main::@9] + // [46] phi from main::@24 to main::@9 [phi:main::@24->main::@9] b9_from_b24: - // [44] phi (byte) main::cur_pos#11 = (byte) 3 [phi:main::@24->main::@9#0] -- vbuz1=vbuc1 + // [46] phi (byte) main::cur_pos#11 = (byte) 3 [phi:main::@24->main::@9#0] -- vbuz1=vbuc1 lda #3 sta cur_pos jmp b9 - // [43] phi from main::@24 to main::@31 [phi:main::@24->main::@31] + // [45] phi from main::@24 to main::@31 [phi:main::@24->main::@31] b31_from_b24: jmp b31 // main::@31 b31: - // [44] phi from main::@31 to main::@9 [phi:main::@31->main::@9] + // [46] phi from main::@31 to main::@9 [phi:main::@31->main::@9] b9_from_b31: - // [44] phi (byte) main::cur_pos#11 = (byte) main::cur_pos#18 [phi:main::@31->main::@9#0] -- register_copy + // [46] phi (byte) main::cur_pos#11 = (byte) main::cur_pos#18 [phi:main::@31->main::@9#0] -- register_copy jmp b9 // main::@9 b9: - // [45] call keyboard_key_pressed + // [47] call keyboard_key_pressed // [113] phi from main::@9 to keyboard_key_pressed [phi:main::@9->keyboard_key_pressed] keyboard_key_pressed_from_b9: // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_LSHIFT#0 [phi:main::@9->keyboard_key_pressed#0] -- vbuz1=vbuc1 lda #KEY_LSHIFT sta keyboard_key_pressed.key jsr keyboard_key_pressed - // [46] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [48] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_13 jmp b25 // main::@25 b25: - // [47] (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13 -- vbuz1=vbuz2 + // [49] (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_13 sta _27 - // [48] if((byte~) main::$27!=(byte) 0) goto main::@10 -- vbuz1_neq_0_then_la1 + // [50] if((byte~) main::$27!=(byte) 0) goto main::@10 -- vbuz1_neq_0_then_la1 lda _27 cmp #0 bne b10_from_b25 - // [50] phi from main::@25 to main::@11 [phi:main::@25->main::@11] + // [52] phi from main::@25 to main::@11 [phi:main::@25->main::@11] b11_from_b25: - // [50] phi (byte) main::shift#9 = (byte) 0 [phi:main::@25->main::@11#0] -- vbuz1=vbuc1 + // [52] phi (byte) main::shift#9 = (byte) 0 [phi:main::@25->main::@11#0] -- vbuz1=vbuc1 lda #0 sta shift jmp b11 - // [49] phi from main::@25 to main::@10 [phi:main::@25->main::@10] + // [51] phi from main::@25 to main::@10 [phi:main::@25->main::@10] b10_from_b25: jmp b10 // main::@10 b10: - // [50] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [52] phi from main::@10 to main::@11 [phi:main::@10->main::@11] b11_from_b10: - // [50] phi (byte) main::shift#9 = (byte) 1 [phi:main::@10->main::@11#0] -- vbuz1=vbuc1 + // [52] phi (byte) main::shift#9 = (byte) 1 [phi:main::@10->main::@11#0] -- vbuz1=vbuc1 lda #1 sta shift jmp b11 // main::@11 b11: - // [51] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + // [53] phi from main::@11 to main::@12 [phi:main::@11->main::@12] b12_from_b11: - // [51] phi (byte) main::ch#2 = (byte) 0 [phi:main::@11->main::@12#0] -- vbuz1=vbuc1 + // [53] phi (byte) main::ch#2 = (byte) 0 [phi:main::@11->main::@12#0] -- vbuz1=vbuc1 lda #0 sta ch jmp b12 // Check for key presses - and plot char if found - // [51] phi from main::@14 to main::@12 [phi:main::@14->main::@12] + // [53] phi from main::@14 to main::@12 [phi:main::@14->main::@12] b12_from_b14: - // [51] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@14->main::@12#0] -- register_copy + // [53] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@14->main::@12#0] -- register_copy jmp b12 // main::@12 b12: - // [52] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 -- vbuz1=vbuz2 + // [54] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 -- vbuz1=vbuz2 lda ch sta keyboard_get_keycode.ch - // [53] call keyboard_get_keycode + // [55] call keyboard_get_keycode jsr keyboard_get_keycode - // [54] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 -- vbuz1=vbuz2 + // [56] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 -- vbuz1=vbuz2 lda keyboard_get_keycode.return sta keyboard_get_keycode.return_2 jmp b26 // main::@26 b26: - // [55] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 -- vbuz1=vbuz2 + // [57] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 -- vbuz1=vbuz2 lda keyboard_get_keycode.return_2 sta key - // [56] if((byte) main::key#0==(byte) $3f) goto main::@13 -- vbuz1_eq_vbuc1_then_la1 + // [58] if((byte) main::key#0==(byte) $3f) goto main::@13 -- vbuz1_eq_vbuc1_then_la1 lda #$3f cmp key beq b13_from_b26 jmp b15 // main::@15 b15: - // [57] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 -- vbuz1=vbuz2 + // [59] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 -- vbuz1=vbuz2 lda key sta keyboard_key_pressed.key - // [58] call keyboard_key_pressed + // [60] call keyboard_key_pressed // [113] phi from main::@15 to keyboard_key_pressed [phi:main::@15->keyboard_key_pressed] keyboard_key_pressed_from_b15: // [113] phi (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#5 [phi:main::@15->keyboard_key_pressed#0] -- register_copy jsr keyboard_key_pressed - // [59] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [61] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_14 jmp b27 // main::@27 b27: - // [60] (byte) main::pressed#1 ← (byte) keyboard_key_pressed::return#14 -- vbuz1=vbuz2 + // [62] (byte) main::pressed#1 ← (byte) keyboard_key_pressed::return#14 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_14 sta pressed - // [61] phi from main::@27 to main::@13 [phi:main::@27->main::@13] + // [63] phi from main::@27 to main::@13 [phi:main::@27->main::@13] b13_from_b27: - // [61] phi (byte) main::pressed#2 = (byte) main::pressed#1 [phi:main::@27->main::@13#0] -- register_copy + // [63] phi (byte) main::pressed#2 = (byte) main::pressed#1 [phi:main::@27->main::@13#0] -- register_copy jmp b13 - // [61] phi from main::@26 to main::@13 [phi:main::@26->main::@13] + // [63] phi from main::@26 to main::@13 [phi:main::@26->main::@13] b13_from_b26: - // [61] phi (byte) main::pressed#2 = (byte) 0 [phi:main::@26->main::@13#0] -- vbuz1=vbuc1 + // [63] phi (byte) main::pressed#2 = (byte) 0 [phi:main::@26->main::@13#0] -- vbuz1=vbuc1 lda #0 sta pressed jmp b13 // main::@13 b13: - // [62] if((byte) main::pressed#2==(byte) 0) goto main::@14 -- vbuz1_eq_0_then_la1 + // [64] if((byte) main::pressed#2==(byte) 0) goto main::@14 -- vbuz1_eq_0_then_la1 lda pressed cmp #0 beq b14 jmp b16 // main::@16 b16: - // [63] (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#11 -- vbuz1=vbuz2 + // [65] (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#11 -- vbuz1=vbuz2 lda cur_pos sta plot_chargen.pos - // [64] (byte) plot_chargen::ch#1 ← (byte) main::ch#2 -- vbuz1=vbuz2 + // [66] (byte) plot_chargen::ch#1 ← (byte) main::ch#2 -- vbuz1=vbuz2 lda ch sta plot_chargen.ch - // [65] (byte) plot_chargen::shift#1 ← (byte) main::shift#9 -- vbuz1=vbuz2 + // [67] (byte) plot_chargen::shift#1 ← (byte) main::shift#9 -- vbuz1=vbuz2 lda shift sta plot_chargen.shift - // [66] call plot_chargen + // [68] call plot_chargen // [71] phi from main::@16 to plot_chargen [phi:main::@16->plot_chargen] plot_chargen_from_b16: // [71] phi (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#1 [phi:main::@16->plot_chargen#0] -- register_copy @@ -3074,31 +3101,16 @@ main: { jmp b14 // main::@14 b14: - // [67] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 + // [69] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 inc ch - // [68] if((byte) main::ch#1!=(byte) $40) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 + // [70] if((byte) main::ch#1!=(byte) $40) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 lda #$40 cmp ch bne b12_from_b14 - // [20] phi from main::@14 to main::@5 [phi:main::@14->main::@5] + // [22] phi from main::@14 to main::@5 [phi:main::@14->main::@5] b5_from_b14: - // [20] phi (byte) main::cur_pos#24 = (byte) main::cur_pos#11 [phi:main::@14->main::@5#0] -- register_copy + // [22] phi (byte) main::cur_pos#24 = (byte) main::cur_pos#11 [phi:main::@14->main::@5#0] -- register_copy jmp b5 - // main::@2 - b2: - // [69] *((byte*) main::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // [70] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 str: .text "f1@" str1: .text "f3@" str2: .text "f5@" @@ -3535,25 +3547,25 @@ print_str_at: { keyboard_char_keycodes: .byte KEY_AT, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, $3f, KEY_POUND, $3f, KEY_ARROW_UP, KEY_ARROW_LEFT, KEY_SPACE, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK, KEY_PLUS, KEY_COMMA, KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_COLON, KEY_SEMICOLON, $3f, KEY_EQUALS, $3f, $3f REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if((byte*) main::sc#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a -Statement [69] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a reg byte y -Statement [73] (word~) plot_chargen::$0 ← (word)(byte) plot_chargen::ch#2 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ) always clobbers reg byte a +Statement [6] *((byte*) main::sc#4) ← (byte) ' ' [ main::sc#4 ] ( main:2 [ main::sc#4 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a +Statement [73] (word~) plot_chargen::$0 ← (word)(byte) plot_chargen::ch#2 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::shift#9 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] -Statement [74] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ) always clobbers reg byte a -Statement [75] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN#0 + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) always clobbers reg byte a -Statement [77] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word) $800 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] ) always clobbers reg byte a -Statement [79] *((const byte*) PROCPORT#0) ← (byte) $32 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) always clobbers reg byte a -Statement [82] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] ) always clobbers reg byte a -Statement [83] (word~) plot_chargen::$7 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$7 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$7 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::$7 ] ) always clobbers reg byte a -Statement [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte) $28+(byte) 1 + (word~) plot_chargen::$7 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) always clobbers reg byte a -Statement [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) always clobbers reg byte a +Statement [74] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ) always clobbers reg byte a +Statement [75] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN#0 + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) always clobbers reg byte a +Statement [77] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word) $800 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] ) always clobbers reg byte a +Statement [79] *((const byte*) PROCPORT#0) ← (byte) $32 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) always clobbers reg byte a +Statement [82] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] ) always clobbers reg byte a +Statement [83] (word~) plot_chargen::$7 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$7 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$7 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::$7 ] ) always clobbers reg byte a +Statement [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte) $28+(byte) 1 + (word~) plot_chargen::$7 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) always clobbers reg byte a +Statement [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] -Statement [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) always clobbers reg byte y +Statement [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] @@ -3561,38 +3573,38 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ p Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::shift#9 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] -Statement [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) always clobbers reg byte a -Statement [100] *((const byte*) PROCPORT#0) ← (byte) $37 [ ] ( main:2::plot_chargen:17 [ main::i#2 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 ] ) always clobbers reg byte a -Statement [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:17::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:66::mul8u:81 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) always clobbers reg byte a +Statement [100] *((const byte*) PROCPORT#0) ← (byte) $37 [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 ] ) always clobbers reg byte a +Statement [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:19::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:68::mul8u:81 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] -Statement [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:21 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:27 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:39 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:45 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:58 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a +Statement [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:29 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:35 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:41 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:47 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:60 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:54 [ keyboard_key_pressed::colidx#0 ] -Statement [122] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:27::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:39::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:45::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:58::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a -Statement [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:27::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:39::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:45::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:58::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y -Statement [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y -Statement [6] if((byte*) main::sc#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a -Statement [69] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a reg byte y -Statement [73] (word~) plot_chargen::$0 ← (word)(byte) plot_chargen::ch#2 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ) always clobbers reg byte a -Statement [74] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ) always clobbers reg byte a -Statement [75] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN#0 + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) always clobbers reg byte a -Statement [77] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word) $800 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] ) always clobbers reg byte a -Statement [79] *((const byte*) PROCPORT#0) ← (byte) $32 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) always clobbers reg byte a -Statement [82] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] ) always clobbers reg byte a -Statement [83] (word~) plot_chargen::$7 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$7 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$7 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::$7 ] ) always clobbers reg byte a -Statement [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte) $28+(byte) 1 + (word~) plot_chargen::$7 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) always clobbers reg byte a -Statement [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) always clobbers reg byte a reg byte y -Statement [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) always clobbers reg byte y -Statement [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) always clobbers reg byte a -Statement [100] *((const byte*) PROCPORT#0) ← (byte) $37 [ ] ( main:2::plot_chargen:17 [ main::i#2 ] main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 ] ) always clobbers reg byte a -Statement [107] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::plot_chargen:17::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::plot_chargen:66::mul8u:81 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a -Statement [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:17::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:66::mul8u:81 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a -Statement [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:21 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:27 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:39 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:45 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:58 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a -Statement [122] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:27::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:39::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:45::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:58::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a -Statement [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:27::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:39::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:45::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:58::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y -Statement [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] : zp ZP_WORD:2 , +Statement [122] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:29::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:41::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:47::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a +Statement [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:29::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:41::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:47::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y +Statement [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y +Statement [6] *((byte*) main::sc#4) ← (byte) ' ' [ main::sc#4 ] ( main:2 [ main::sc#4 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a +Statement [73] (word~) plot_chargen::$0 ← (word)(byte) plot_chargen::ch#2 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ) always clobbers reg byte a +Statement [74] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ) always clobbers reg byte a +Statement [75] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN#0 + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) always clobbers reg byte a +Statement [77] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word) $800 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] ) always clobbers reg byte a +Statement [79] *((const byte*) PROCPORT#0) ← (byte) $32 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) always clobbers reg byte a +Statement [82] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] ) always clobbers reg byte a +Statement [83] (word~) plot_chargen::$7 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$7 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$7 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::$7 ] ) always clobbers reg byte a +Statement [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte) $28+(byte) 1 + (word~) plot_chargen::$7 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) always clobbers reg byte a +Statement [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) always clobbers reg byte a reg byte y +Statement [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) always clobbers reg byte y +Statement [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) always clobbers reg byte a +Statement [100] *((const byte*) PROCPORT#0) ← (byte) $37 [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:68 [ main::cur_pos#11 main::shift#9 main::ch#2 ] ) always clobbers reg byte a +Statement [107] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::plot_chargen:19::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::plot_chargen:68::mul8u:81 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:19::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:68::mul8u:81 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:29 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:35 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:41 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:47 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:60 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a +Statement [122] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:29::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:41::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:47::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a +Statement [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:29::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:41::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:47::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y +Statement [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y +Potential registers zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_BYTE:4 [ main::i#2 main::i#1 ] : zp ZP_BYTE:4 , reg byte x , Potential registers zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] : zp ZP_BYTE:5 , reg byte x , Potential registers zp ZP_BYTE:6 [ main::shift#9 ] : zp ZP_BYTE:6 , reg byte x , @@ -3645,79 +3657,79 @@ Potential registers zp ZP_BYTE:61 [ keyboard_get_keycode::return#0 ] : zp ZP_BYT REGISTER UPLIFT SCOPES Uplift Scope [plot_chargen] 20,002: zp ZP_BYTE:52 [ plot_chargen::$10 ] 17,501.75: zp ZP_BYTE:18 [ plot_chargen::x#2 plot_chargen::x#1 ] 13,098.48: zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] 12,091.42: zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] 10,001: zp ZP_BYTE:19 [ plot_chargen::c#2 ] 1,732.5: zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] 222.6: zp ZP_BYTE:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] 151.5: zp ZP_BYTE:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] 102: zp ZP_BYTE:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] 52.68: zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] 4: zp ZP_WORD:44 [ plot_chargen::$0 ] 4: zp ZP_WORD:46 [ plot_chargen::$1 ] 4: zp ZP_WORD:50 [ plot_chargen::$7 ] Uplift Scope [mul8u] 3,503.83: zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 2,431: zp ZP_WORD:23 [ mul8u::mb#2 mul8u::mb#1 ] 2,002: zp ZP_BYTE:53 [ mul8u::$1 ] 1,670.67: zp ZP_BYTE:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 4: zp ZP_WORD:48 [ mul8u::return#2 ] -Uplift Scope [main] 404: zp ZP_BYTE:8 [ main::pressed#2 main::pressed#1 ] 176.75: zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] 151.5: zp ZP_BYTE:42 [ main::key#0 ] 38.19: zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] 36.67: zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] 27.5: zp ZP_BYTE:4 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:31 [ main::$15 ] 22: zp ZP_BYTE:33 [ main::$18 ] 22: zp ZP_BYTE:35 [ main::$21 ] 22: zp ZP_BYTE:37 [ main::$24 ] 22: zp ZP_BYTE:39 [ main::$27 ] 5.32: zp ZP_BYTE:6 [ main::shift#9 ] +Uplift Scope [main] 404: zp ZP_BYTE:8 [ main::pressed#2 main::pressed#1 ] 176.75: zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] 151.5: zp ZP_BYTE:42 [ main::key#0 ] 38.19: zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] 33: zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] 27.5: zp ZP_BYTE:4 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:31 [ main::$15 ] 22: zp ZP_BYTE:33 [ main::$18 ] 22: zp ZP_BYTE:35 [ main::$21 ] 22: zp ZP_BYTE:37 [ main::$24 ] 22: zp ZP_BYTE:39 [ main::$27 ] 5.32: zp ZP_BYTE:6 [ main::shift#9 ] Uplift Scope [keyboard_key_pressed] 254.5: zp ZP_BYTE:25 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] 202: zp ZP_BYTE:43 [ keyboard_key_pressed::return#14 ] 22: zp ZP_BYTE:30 [ keyboard_key_pressed::return#2 ] 22: zp ZP_BYTE:32 [ keyboard_key_pressed::return#10 ] 22: zp ZP_BYTE:34 [ keyboard_key_pressed::return#11 ] 22: zp ZP_BYTE:36 [ keyboard_key_pressed::return#12 ] 22: zp ZP_BYTE:38 [ keyboard_key_pressed::return#13 ] 19.75: zp ZP_BYTE:59 [ keyboard_key_pressed::return#0 ] 4: zp ZP_BYTE:55 [ keyboard_key_pressed::rowidx#0 ] 4: zp ZP_BYTE:58 [ keyboard_key_pressed::$2 ] 0.67: zp ZP_BYTE:54 [ keyboard_key_pressed::colidx#0 ] Uplift Scope [keyboard_get_keycode] 202: zp ZP_BYTE:41 [ keyboard_get_keycode::return#2 ] 103: zp ZP_BYTE:40 [ keyboard_get_keycode::ch#0 ] 34.33: zp ZP_BYTE:61 [ keyboard_get_keycode::return#0 ] Uplift Scope [print_str_at] 35.5: zp ZP_WORD:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] 24.67: zp ZP_WORD:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] Uplift Scope [keyboard_matrix_read] 4: zp ZP_BYTE:56 [ keyboard_matrix_read::rowid#0 ] 4: zp ZP_BYTE:57 [ keyboard_matrix_read::return#2 ] 1.33: zp ZP_BYTE:60 [ keyboard_matrix_read::return#0 ] Uplift Scope [] -Uplifting [plot_chargen] best 819629 combination reg byte a [ plot_chargen::$10 ] reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ] zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] reg byte a [ plot_chargen::c#2 ] zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] zp ZP_BYTE:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] zp ZP_BYTE:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] zp ZP_BYTE:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] zp ZP_WORD:44 [ plot_chargen::$0 ] zp ZP_WORD:46 [ plot_chargen::$1 ] zp ZP_WORD:50 [ plot_chargen::$7 ] +Uplifting [plot_chargen] best 819659 combination reg byte a [ plot_chargen::$10 ] reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ] zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] reg byte a [ plot_chargen::c#2 ] zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] zp ZP_BYTE:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] zp ZP_BYTE:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] zp ZP_BYTE:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] zp ZP_WORD:44 [ plot_chargen::$0 ] zp ZP_WORD:46 [ plot_chargen::$1 ] zp ZP_WORD:50 [ plot_chargen::$7 ] Limited combination testing to 100 combinations of 10368 possible. -Uplifting [mul8u] best 810626 combination zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:23 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:48 [ mul8u::return#2 ] -Uplifting [main] best 808826 combination reg byte a [ main::pressed#2 main::pressed#1 ] zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] reg byte a [ main::key#0 ] zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] zp ZP_BYTE:4 [ main::i#2 main::i#1 ] zp ZP_BYTE:31 [ main::$15 ] zp ZP_BYTE:33 [ main::$18 ] zp ZP_BYTE:35 [ main::$21 ] zp ZP_BYTE:37 [ main::$24 ] zp ZP_BYTE:39 [ main::$27 ] zp ZP_BYTE:6 [ main::shift#9 ] +Uplifting [mul8u] best 810656 combination zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:23 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:48 [ mul8u::return#2 ] +Uplifting [main] best 808856 combination reg byte a [ main::pressed#2 main::pressed#1 ] zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] reg byte a [ main::key#0 ] zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] zp ZP_BYTE:4 [ main::i#2 main::i#1 ] zp ZP_BYTE:31 [ main::$15 ] zp ZP_BYTE:33 [ main::$18 ] zp ZP_BYTE:35 [ main::$21 ] zp ZP_BYTE:37 [ main::$24 ] zp ZP_BYTE:39 [ main::$27 ] zp ZP_BYTE:6 [ main::shift#9 ] Limited combination testing to 100 combinations of 262144 possible. -Uplifting [keyboard_key_pressed] best 807987 combination reg byte x [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] reg byte a [ keyboard_key_pressed::return#14 ] reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#10 ] zp ZP_BYTE:34 [ keyboard_key_pressed::return#11 ] zp ZP_BYTE:36 [ keyboard_key_pressed::return#12 ] zp ZP_BYTE:38 [ keyboard_key_pressed::return#13 ] zp ZP_BYTE:59 [ keyboard_key_pressed::return#0 ] zp ZP_BYTE:55 [ keyboard_key_pressed::rowidx#0 ] zp ZP_BYTE:58 [ keyboard_key_pressed::$2 ] zp ZP_BYTE:54 [ keyboard_key_pressed::colidx#0 ] +Uplifting [keyboard_key_pressed] best 808017 combination reg byte x [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] reg byte a [ keyboard_key_pressed::return#14 ] reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#10 ] zp ZP_BYTE:34 [ keyboard_key_pressed::return#11 ] zp ZP_BYTE:36 [ keyboard_key_pressed::return#12 ] zp ZP_BYTE:38 [ keyboard_key_pressed::return#13 ] zp ZP_BYTE:59 [ keyboard_key_pressed::return#0 ] zp ZP_BYTE:55 [ keyboard_key_pressed::rowidx#0 ] zp ZP_BYTE:58 [ keyboard_key_pressed::$2 ] zp ZP_BYTE:54 [ keyboard_key_pressed::colidx#0 ] Limited combination testing to 100 combinations of 3145728 possible. -Uplifting [keyboard_get_keycode] best 806781 combination reg byte a [ keyboard_get_keycode::return#2 ] reg byte x [ keyboard_get_keycode::ch#0 ] reg byte a [ keyboard_get_keycode::return#0 ] -Uplifting [print_str_at] best 806781 combination zp ZP_WORD:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] zp ZP_WORD:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] -Uplifting [keyboard_matrix_read] best 806763 combination reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#2 ] reg byte a [ keyboard_matrix_read::return#0 ] -Uplifting [] best 806763 combination +Uplifting [keyboard_get_keycode] best 806811 combination reg byte a [ keyboard_get_keycode::return#2 ] reg byte x [ keyboard_get_keycode::ch#0 ] reg byte a [ keyboard_get_keycode::return#0 ] +Uplifting [print_str_at] best 806811 combination zp ZP_WORD:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] zp ZP_WORD:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] +Uplifting [keyboard_matrix_read] best 806793 combination reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#2 ] reg byte a [ keyboard_matrix_read::return#0 ] +Uplifting [] best 806793 combination Attempting to uplift remaining variables inzp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] -Uplifting [plot_chargen] best 806763 combination zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] +Uplifting [plot_chargen] best 806793 combination zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] -Uplifting [plot_chargen] best 806763 combination zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] +Uplifting [plot_chargen] best 806793 combination zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] -Uplifting [plot_chargen] best 806457 combination reg byte x [ plot_chargen::shift#2 plot_chargen::shift#1 ] +Uplifting [plot_chargen] best 806487 combination reg byte x [ plot_chargen::shift#2 plot_chargen::shift#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] -Uplifting [main] best 806457 combination zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] +Uplifting [main] best 806487 combination zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] -Uplifting [plot_chargen] best 806151 combination reg byte a [ plot_chargen::ch#2 plot_chargen::ch#1 ] +Uplifting [plot_chargen] best 806181 combination reg byte a [ plot_chargen::ch#2 plot_chargen::ch#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] -Uplifting [plot_chargen] best 805822 combination reg byte y [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] +Uplifting [plot_chargen] best 805852 combination reg byte y [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] -Uplifting [main] best 805822 combination zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] +Uplifting [main] best 805852 combination zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ main::i#2 main::i#1 ] -Uplifting [main] best 805822 combination zp ZP_BYTE:4 [ main::i#2 main::i#1 ] +Uplifting [main] best 805852 combination zp ZP_BYTE:4 [ main::i#2 main::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:31 [ main::$15 ] -Uplifting [main] best 805762 combination reg byte a [ main::$15 ] +Uplifting [main] best 805792 combination reg byte a [ main::$15 ] Attempting to uplift remaining variables inzp ZP_BYTE:33 [ main::$18 ] -Uplifting [main] best 805702 combination reg byte a [ main::$18 ] +Uplifting [main] best 805732 combination reg byte a [ main::$18 ] Attempting to uplift remaining variables inzp ZP_BYTE:34 [ keyboard_key_pressed::return#11 ] -Uplifting [keyboard_key_pressed] best 805642 combination reg byte a [ keyboard_key_pressed::return#11 ] +Uplifting [keyboard_key_pressed] best 805672 combination reg byte a [ keyboard_key_pressed::return#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:35 [ main::$21 ] -Uplifting [main] best 805582 combination reg byte a [ main::$21 ] +Uplifting [main] best 805612 combination reg byte a [ main::$21 ] Attempting to uplift remaining variables inzp ZP_BYTE:36 [ keyboard_key_pressed::return#12 ] -Uplifting [keyboard_key_pressed] best 805522 combination reg byte a [ keyboard_key_pressed::return#12 ] +Uplifting [keyboard_key_pressed] best 805552 combination reg byte a [ keyboard_key_pressed::return#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:37 [ main::$24 ] -Uplifting [main] best 805462 combination reg byte a [ main::$24 ] +Uplifting [main] best 805492 combination reg byte a [ main::$24 ] Attempting to uplift remaining variables inzp ZP_BYTE:38 [ keyboard_key_pressed::return#13 ] -Uplifting [keyboard_key_pressed] best 805402 combination reg byte a [ keyboard_key_pressed::return#13 ] +Uplifting [keyboard_key_pressed] best 805432 combination reg byte a [ keyboard_key_pressed::return#13 ] Attempting to uplift remaining variables inzp ZP_BYTE:39 [ main::$27 ] -Uplifting [main] best 805342 combination reg byte a [ main::$27 ] +Uplifting [main] best 805372 combination reg byte a [ main::$27 ] Attempting to uplift remaining variables inzp ZP_BYTE:59 [ keyboard_key_pressed::return#0 ] -Uplifting [keyboard_key_pressed] best 804889 combination reg byte a [ keyboard_key_pressed::return#0 ] +Uplifting [keyboard_key_pressed] best 804919 combination reg byte a [ keyboard_key_pressed::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::shift#9 ] -Uplifting [main] best 804889 combination zp ZP_BYTE:6 [ main::shift#9 ] +Uplifting [main] best 804919 combination zp ZP_BYTE:6 [ main::shift#9 ] Attempting to uplift remaining variables inzp ZP_BYTE:55 [ keyboard_key_pressed::rowidx#0 ] -Uplifting [keyboard_key_pressed] best 804885 combination reg byte a [ keyboard_key_pressed::rowidx#0 ] +Uplifting [keyboard_key_pressed] best 804915 combination reg byte a [ keyboard_key_pressed::rowidx#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:58 [ keyboard_key_pressed::$2 ] -Uplifting [keyboard_key_pressed] best 804879 combination reg byte a [ keyboard_key_pressed::$2 ] +Uplifting [keyboard_key_pressed] best 804909 combination reg byte a [ keyboard_key_pressed::$2 ] Attempting to uplift remaining variables inzp ZP_BYTE:54 [ keyboard_key_pressed::colidx#0 ] -Uplifting [keyboard_key_pressed] best 804877 combination reg byte y [ keyboard_key_pressed::colidx#0 ] +Uplifting [keyboard_key_pressed] best 804907 combination reg byte y [ keyboard_key_pressed::colidx#0 ] Coalescing zero page register [ zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] ] with [ zp ZP_WORD:46 [ plot_chargen::$1 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] ] with [ zp ZP_WORD:50 [ plot_chargen::$7 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp ZP_WORD:48 [ mul8u::return#2 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 ] ] with [ zp ZP_WORD:44 [ plot_chargen::$0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$7 ] ] with [ zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 ] ] with [ zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] ] +Coalescing zero page register [ zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 ] ] with [ zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] ] Coalescing zero page register [ zp ZP_WORD:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] ] with [ zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$7 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ] Coalescing zero page register [ zp ZP_WORD:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] ] with [ zp ZP_WORD:23 [ mul8u::mb#2 mul8u::mb#1 ] ] Allocated (was zp ZP_BYTE:4) zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:3 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] Allocated (was zp ZP_BYTE:6) zp ZP_BYTE:4 [ main::shift#9 ] Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:5 [ main::ch#2 main::ch#1 ] -Allocated (was zp ZP_WORD:12) zp ZP_WORD:6 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 main::sc#2 main::sc#1 ] +Allocated (was zp ZP_WORD:12) zp ZP_WORD:6 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 main::sc#4 main::sc#1 ] Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:8 [ plot_chargen::y#2 plot_chargen::y#1 ] Allocated (was zp ZP_BYTE:15) zp ZP_BYTE:9 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] Allocated (was zp ZP_WORD:26) zp ZP_WORD:10 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$7 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] @@ -3818,32 +3830,48 @@ main: { .label ch = 5 .label cur_pos = 3 .label shift = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::sc#2 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::sc#4 = (const byte*) SCREEN#0 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta sc+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((byte*) main::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + // [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: jmp b1 // Clear screen // main::@1 b1: - // [6] if((byte*) main::sc#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_lt_pbuc1_then_la1 + // [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_lt_pbuc1_then_la1 lda sc+1 cmp #>SCREEN+$3e8 - bcc b2 + bcc b2_from_b1 bne !+ lda sc cmp #main::@3] + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: jmp b3 // main::@3 b3: - // [8] call print_str_at + // [10] call print_str_at // [127] phi from main::@3 to print_str_at [phi:main::@3->print_str_at] print_str_at_from_b3: // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte) 1 [phi:main::@3->print_str_at#0] -- pbuz1=pbuc1 @@ -3857,12 +3885,12 @@ main: { lda #>str sta print_str_at.str+1 jsr print_str_at - // [9] phi from main::@3 to main::@17 [phi:main::@3->main::@17] + // [11] phi from main::@3 to main::@17 [phi:main::@3->main::@17] b17_from_b3: jmp b17 // main::@17 b17: - // [10] call print_str_at + // [12] call print_str_at // [127] phi from main::@17 to print_str_at [phi:main::@17->print_str_at] print_str_at_from_b17: // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte) 1+(byte) $a [phi:main::@17->print_str_at#0] -- pbuz1=pbuc1 @@ -3876,12 +3904,12 @@ main: { lda #>str1 sta print_str_at.str+1 jsr print_str_at - // [11] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + // [13] phi from main::@17 to main::@18 [phi:main::@17->main::@18] b18_from_b17: jmp b18 // main::@18 b18: - // [12] call print_str_at + // [14] call print_str_at // [127] phi from main::@18 to print_str_at [phi:main::@18->print_str_at] print_str_at_from_b18: // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte) 1+(byte) $14 [phi:main::@18->print_str_at#0] -- pbuz1=pbuc1 @@ -3895,12 +3923,12 @@ main: { lda #>str2 sta print_str_at.str+1 jsr print_str_at - // [13] phi from main::@18 to main::@19 [phi:main::@18->main::@19] + // [15] phi from main::@18 to main::@19 [phi:main::@18->main::@19] b19_from_b18: jmp b19 // main::@19 b19: - // [14] call print_str_at + // [16] call print_str_at // [127] phi from main::@19 to print_str_at [phi:main::@19->print_str_at] print_str_at_from_b19: // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte) 1+(byte) $1e [phi:main::@19->print_str_at#0] -- pbuz1=pbuc1 @@ -3914,21 +3942,21 @@ main: { lda #>str3 sta print_str_at.str+1 jsr print_str_at - // [15] phi from main::@19 to main::@4 [phi:main::@19->main::@4] + // [17] phi from main::@19 to main::@4 [phi:main::@19->main::@4] b4_from_b19: - // [15] phi (byte) main::i#2 = (byte) 0 [phi:main::@19->main::@4#0] -- vbuz1=vbuc1 + // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@19->main::@4#0] -- vbuz1=vbuc1 lda #0 sta i jmp b4 - // [15] phi from main::@20 to main::@4 [phi:main::@20->main::@4] + // [17] phi from main::@20 to main::@4 [phi:main::@20->main::@4] b4_from_b20: - // [15] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@20->main::@4#0] -- register_copy + // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@20->main::@4#0] -- register_copy jmp b4 // main::@4 b4: - // [16] (byte) plot_chargen::pos#0 ← (byte) main::i#2 -- vbuyy=vbuz1 + // [18] (byte) plot_chargen::pos#0 ← (byte) main::i#2 -- vbuyy=vbuz1 ldy i - // [17] call plot_chargen + // [19] call plot_chargen // [71] phi from main::@4 to plot_chargen [phi:main::@4->plot_chargen] plot_chargen_from_b4: // [71] phi (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#0 [phi:main::@4->plot_chargen#0] -- register_copy @@ -3940,241 +3968,241 @@ main: { jmp b20 // main::@20 b20: - // [18] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [20] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc i - // [19] if((byte) main::i#1!=(byte) 4) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 + // [21] if((byte) main::i#1!=(byte) 4) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp i bne b4_from_b20 - // [20] phi from main::@20 to main::@5 [phi:main::@20->main::@5] + // [22] phi from main::@20 to main::@5 [phi:main::@20->main::@5] b5_from_b20: - // [20] phi (byte) main::cur_pos#24 = (byte) 0 [phi:main::@20->main::@5#0] -- vbuz1=vbuc1 + // [22] phi (byte) main::cur_pos#24 = (byte) 0 [phi:main::@20->main::@5#0] -- vbuz1=vbuc1 lda #0 sta cur_pos jmp b5 // main::@5 b5: - // [21] call keyboard_key_pressed + // [23] call keyboard_key_pressed // [113] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] keyboard_key_pressed_from_b5: // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F1#0 [phi:main::@5->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_F1 jsr keyboard_key_pressed - // [22] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + // [24] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 jmp b21 // main::@21 b21: - // [23] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2 - // [24] if((byte~) main::$15==(byte) 0) goto main::@28 -- vbuaa_eq_0_then_la1 + // [25] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2 + // [26] if((byte~) main::$15==(byte) 0) goto main::@28 -- vbuaa_eq_0_then_la1 cmp #0 beq b28_from_b21 - // [26] phi from main::@21 to main::@6 [phi:main::@21->main::@6] + // [28] phi from main::@21 to main::@6 [phi:main::@21->main::@6] b6_from_b21: - // [26] phi (byte) main::cur_pos#22 = (byte) 0 [phi:main::@21->main::@6#0] -- vbuz1=vbuc1 + // [28] phi (byte) main::cur_pos#22 = (byte) 0 [phi:main::@21->main::@6#0] -- vbuz1=vbuc1 lda #0 sta cur_pos jmp b6 - // [25] phi from main::@21 to main::@28 [phi:main::@21->main::@28] + // [27] phi from main::@21 to main::@28 [phi:main::@21->main::@28] b28_from_b21: jmp b28 // main::@28 b28: - // [26] phi from main::@28 to main::@6 [phi:main::@28->main::@6] + // [28] phi from main::@28 to main::@6 [phi:main::@28->main::@6] b6_from_b28: - // [26] phi (byte) main::cur_pos#22 = (byte) main::cur_pos#24 [phi:main::@28->main::@6#0] -- register_copy + // [28] phi (byte) main::cur_pos#22 = (byte) main::cur_pos#24 [phi:main::@28->main::@6#0] -- register_copy jmp b6 // main::@6 b6: - // [27] call keyboard_key_pressed + // [29] call keyboard_key_pressed // [113] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed] keyboard_key_pressed_from_b6: // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F3#0 [phi:main::@6->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_F3 jsr keyboard_key_pressed - // [28] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 + // [30] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 jmp b22 // main::@22 b22: - // [29] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10 - // [30] if((byte~) main::$18==(byte) 0) goto main::@29 -- vbuaa_eq_0_then_la1 + // [31] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10 + // [32] if((byte~) main::$18==(byte) 0) goto main::@29 -- vbuaa_eq_0_then_la1 cmp #0 beq b29_from_b22 - // [32] phi from main::@22 to main::@7 [phi:main::@22->main::@7] + // [34] phi from main::@22 to main::@7 [phi:main::@22->main::@7] b7_from_b22: - // [32] phi (byte) main::cur_pos#20 = (byte) 1 [phi:main::@22->main::@7#0] -- vbuz1=vbuc1 + // [34] phi (byte) main::cur_pos#20 = (byte) 1 [phi:main::@22->main::@7#0] -- vbuz1=vbuc1 lda #1 sta cur_pos jmp b7 - // [31] phi from main::@22 to main::@29 [phi:main::@22->main::@29] + // [33] phi from main::@22 to main::@29 [phi:main::@22->main::@29] b29_from_b22: jmp b29 // main::@29 b29: - // [32] phi from main::@29 to main::@7 [phi:main::@29->main::@7] + // [34] phi from main::@29 to main::@7 [phi:main::@29->main::@7] b7_from_b29: - // [32] phi (byte) main::cur_pos#20 = (byte) main::cur_pos#22 [phi:main::@29->main::@7#0] -- register_copy + // [34] phi (byte) main::cur_pos#20 = (byte) main::cur_pos#22 [phi:main::@29->main::@7#0] -- register_copy jmp b7 // main::@7 b7: - // [33] call keyboard_key_pressed + // [35] call keyboard_key_pressed // [113] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed] keyboard_key_pressed_from_b7: // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F5#0 [phi:main::@7->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_F5 jsr keyboard_key_pressed - // [34] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 + // [36] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 jmp b23 // main::@23 b23: - // [35] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11 - // [36] if((byte~) main::$21==(byte) 0) goto main::@30 -- vbuaa_eq_0_then_la1 + // [37] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11 + // [38] if((byte~) main::$21==(byte) 0) goto main::@30 -- vbuaa_eq_0_then_la1 cmp #0 beq b30_from_b23 - // [38] phi from main::@23 to main::@8 [phi:main::@23->main::@8] + // [40] phi from main::@23 to main::@8 [phi:main::@23->main::@8] b8_from_b23: - // [38] phi (byte) main::cur_pos#18 = (byte) 2 [phi:main::@23->main::@8#0] -- vbuz1=vbuc1 + // [40] phi (byte) main::cur_pos#18 = (byte) 2 [phi:main::@23->main::@8#0] -- vbuz1=vbuc1 lda #2 sta cur_pos jmp b8 - // [37] phi from main::@23 to main::@30 [phi:main::@23->main::@30] + // [39] phi from main::@23 to main::@30 [phi:main::@23->main::@30] b30_from_b23: jmp b30 // main::@30 b30: - // [38] phi from main::@30 to main::@8 [phi:main::@30->main::@8] + // [40] phi from main::@30 to main::@8 [phi:main::@30->main::@8] b8_from_b30: - // [38] phi (byte) main::cur_pos#18 = (byte) main::cur_pos#20 [phi:main::@30->main::@8#0] -- register_copy + // [40] phi (byte) main::cur_pos#18 = (byte) main::cur_pos#20 [phi:main::@30->main::@8#0] -- register_copy jmp b8 // main::@8 b8: - // [39] call keyboard_key_pressed + // [41] call keyboard_key_pressed // [113] phi from main::@8 to keyboard_key_pressed [phi:main::@8->keyboard_key_pressed] keyboard_key_pressed_from_b8: // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F7#0 [phi:main::@8->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_F7 jsr keyboard_key_pressed - // [40] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 + // [42] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 jmp b24 // main::@24 b24: - // [41] (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12 - // [42] if((byte~) main::$24==(byte) 0) goto main::@31 -- vbuaa_eq_0_then_la1 + // [43] (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12 + // [44] if((byte~) main::$24==(byte) 0) goto main::@31 -- vbuaa_eq_0_then_la1 cmp #0 beq b31_from_b24 - // [44] phi from main::@24 to main::@9 [phi:main::@24->main::@9] + // [46] phi from main::@24 to main::@9 [phi:main::@24->main::@9] b9_from_b24: - // [44] phi (byte) main::cur_pos#11 = (byte) 3 [phi:main::@24->main::@9#0] -- vbuz1=vbuc1 + // [46] phi (byte) main::cur_pos#11 = (byte) 3 [phi:main::@24->main::@9#0] -- vbuz1=vbuc1 lda #3 sta cur_pos jmp b9 - // [43] phi from main::@24 to main::@31 [phi:main::@24->main::@31] + // [45] phi from main::@24 to main::@31 [phi:main::@24->main::@31] b31_from_b24: jmp b31 // main::@31 b31: - // [44] phi from main::@31 to main::@9 [phi:main::@31->main::@9] + // [46] phi from main::@31 to main::@9 [phi:main::@31->main::@9] b9_from_b31: - // [44] phi (byte) main::cur_pos#11 = (byte) main::cur_pos#18 [phi:main::@31->main::@9#0] -- register_copy + // [46] phi (byte) main::cur_pos#11 = (byte) main::cur_pos#18 [phi:main::@31->main::@9#0] -- register_copy jmp b9 // main::@9 b9: - // [45] call keyboard_key_pressed + // [47] call keyboard_key_pressed // [113] phi from main::@9 to keyboard_key_pressed [phi:main::@9->keyboard_key_pressed] keyboard_key_pressed_from_b9: // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_LSHIFT#0 [phi:main::@9->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_LSHIFT jsr keyboard_key_pressed - // [46] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 + // [48] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 jmp b25 // main::@25 b25: - // [47] (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13 - // [48] if((byte~) main::$27!=(byte) 0) goto main::@10 -- vbuaa_neq_0_then_la1 + // [49] (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13 + // [50] if((byte~) main::$27!=(byte) 0) goto main::@10 -- vbuaa_neq_0_then_la1 cmp #0 bne b10_from_b25 - // [50] phi from main::@25 to main::@11 [phi:main::@25->main::@11] + // [52] phi from main::@25 to main::@11 [phi:main::@25->main::@11] b11_from_b25: - // [50] phi (byte) main::shift#9 = (byte) 0 [phi:main::@25->main::@11#0] -- vbuz1=vbuc1 + // [52] phi (byte) main::shift#9 = (byte) 0 [phi:main::@25->main::@11#0] -- vbuz1=vbuc1 lda #0 sta shift jmp b11 - // [49] phi from main::@25 to main::@10 [phi:main::@25->main::@10] + // [51] phi from main::@25 to main::@10 [phi:main::@25->main::@10] b10_from_b25: jmp b10 // main::@10 b10: - // [50] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [52] phi from main::@10 to main::@11 [phi:main::@10->main::@11] b11_from_b10: - // [50] phi (byte) main::shift#9 = (byte) 1 [phi:main::@10->main::@11#0] -- vbuz1=vbuc1 + // [52] phi (byte) main::shift#9 = (byte) 1 [phi:main::@10->main::@11#0] -- vbuz1=vbuc1 lda #1 sta shift jmp b11 // main::@11 b11: - // [51] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + // [53] phi from main::@11 to main::@12 [phi:main::@11->main::@12] b12_from_b11: - // [51] phi (byte) main::ch#2 = (byte) 0 [phi:main::@11->main::@12#0] -- vbuz1=vbuc1 + // [53] phi (byte) main::ch#2 = (byte) 0 [phi:main::@11->main::@12#0] -- vbuz1=vbuc1 lda #0 sta ch jmp b12 // Check for key presses - and plot char if found - // [51] phi from main::@14 to main::@12 [phi:main::@14->main::@12] + // [53] phi from main::@14 to main::@12 [phi:main::@14->main::@12] b12_from_b14: - // [51] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@14->main::@12#0] -- register_copy + // [53] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@14->main::@12#0] -- register_copy jmp b12 // main::@12 b12: - // [52] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 -- vbuxx=vbuz1 + // [54] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 -- vbuxx=vbuz1 ldx ch - // [53] call keyboard_get_keycode + // [55] call keyboard_get_keycode jsr keyboard_get_keycode - // [54] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 + // [56] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 jmp b26 // main::@26 b26: - // [55] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 - // [56] if((byte) main::key#0==(byte) $3f) goto main::@13 -- vbuaa_eq_vbuc1_then_la1 + // [57] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 + // [58] if((byte) main::key#0==(byte) $3f) goto main::@13 -- vbuaa_eq_vbuc1_then_la1 cmp #$3f beq b13_from_b26 jmp b15 // main::@15 b15: - // [57] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 -- vbuxx=vbuaa + // [59] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 -- vbuxx=vbuaa tax - // [58] call keyboard_key_pressed + // [60] call keyboard_key_pressed // [113] phi from main::@15 to keyboard_key_pressed [phi:main::@15->keyboard_key_pressed] keyboard_key_pressed_from_b15: // [113] phi (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#5 [phi:main::@15->keyboard_key_pressed#0] -- register_copy jsr keyboard_key_pressed - // [59] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0 + // [61] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0 jmp b27 // main::@27 b27: - // [60] (byte) main::pressed#1 ← (byte) keyboard_key_pressed::return#14 - // [61] phi from main::@27 to main::@13 [phi:main::@27->main::@13] + // [62] (byte) main::pressed#1 ← (byte) keyboard_key_pressed::return#14 + // [63] phi from main::@27 to main::@13 [phi:main::@27->main::@13] b13_from_b27: - // [61] phi (byte) main::pressed#2 = (byte) main::pressed#1 [phi:main::@27->main::@13#0] -- register_copy + // [63] phi (byte) main::pressed#2 = (byte) main::pressed#1 [phi:main::@27->main::@13#0] -- register_copy jmp b13 - // [61] phi from main::@26 to main::@13 [phi:main::@26->main::@13] + // [63] phi from main::@26 to main::@13 [phi:main::@26->main::@13] b13_from_b26: - // [61] phi (byte) main::pressed#2 = (byte) 0 [phi:main::@26->main::@13#0] -- vbuaa=vbuc1 + // [63] phi (byte) main::pressed#2 = (byte) 0 [phi:main::@26->main::@13#0] -- vbuaa=vbuc1 lda #0 jmp b13 // main::@13 b13: - // [62] if((byte) main::pressed#2==(byte) 0) goto main::@14 -- vbuaa_eq_0_then_la1 + // [64] if((byte) main::pressed#2==(byte) 0) goto main::@14 -- vbuaa_eq_0_then_la1 cmp #0 beq b14 jmp b16 // main::@16 b16: - // [63] (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#11 -- vbuyy=vbuz1 + // [65] (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#11 -- vbuyy=vbuz1 ldy cur_pos - // [64] (byte) plot_chargen::ch#1 ← (byte) main::ch#2 -- vbuaa=vbuz1 + // [66] (byte) plot_chargen::ch#1 ← (byte) main::ch#2 -- vbuaa=vbuz1 lda ch - // [65] (byte) plot_chargen::shift#1 ← (byte) main::shift#9 -- vbuxx=vbuz1 + // [67] (byte) plot_chargen::shift#1 ← (byte) main::shift#9 -- vbuxx=vbuz1 ldx shift - // [66] call plot_chargen + // [68] call plot_chargen // [71] phi from main::@16 to plot_chargen [phi:main::@16->plot_chargen] plot_chargen_from_b16: // [71] phi (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#1 [phi:main::@16->plot_chargen#0] -- register_copy @@ -4184,31 +4212,16 @@ main: { jmp b14 // main::@14 b14: - // [67] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 + // [69] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 inc ch - // [68] if((byte) main::ch#1!=(byte) $40) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 + // [70] if((byte) main::ch#1!=(byte) $40) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 lda #$40 cmp ch bne b12_from_b14 - // [20] phi from main::@14 to main::@5 [phi:main::@14->main::@5] + // [22] phi from main::@14 to main::@5 [phi:main::@14->main::@5] b5_from_b14: - // [20] phi (byte) main::cur_pos#24 = (byte) main::cur_pos#11 [phi:main::@14->main::@5#0] -- register_copy + // [22] phi (byte) main::cur_pos#24 = (byte) main::cur_pos#11 [phi:main::@14->main::@5#0] -- register_copy jmp b5 - // main::@2 - b2: - // [69] *((byte*) main::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // [70] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 str: .text "f1@" str1: .text "f3@" str2: .text "f5@" @@ -4587,6 +4600,7 @@ print_str_at: { ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b17 @@ -4641,6 +4655,8 @@ Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #>0 Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Replacing label b4_from_b20 with b4 Replacing label b28_from_b21 with b6 Replacing label b29_from_b22 with b7 @@ -4657,6 +4673,7 @@ Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Removing instruction b3_from_b1: Removing instruction print_str_at_from_b3: Removing instruction b17_from_b3: @@ -4700,7 +4717,8 @@ Removing instruction b1_from_print_str_at: Removing instruction b1_from_b2: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction b3: Removing instruction b17: Removing instruction b18: @@ -4726,7 +4744,6 @@ Removing instruction b27: Removing instruction b16: Removing instruction plot_chargen_from_b16: Removing instruction b5_from_b14: -Removing instruction b1_from_b2: Removing instruction b2: Removing instruction mul8u_from_b1: Removing instruction b9: @@ -4749,9 +4766,10 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Relabelling long label b13_from_b26 to b3 +Relabelling long label b13_from_b26 to b1 Relabelling long label b5_from_b4 to b2 Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b2 Removing instruction jmp b4 Removing instruction jmp b6 Removing instruction jmp b7 @@ -4763,8 +4781,6 @@ Removing instruction jmp b4 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [82] bcc b2 to bcs -Fixing long branch [88] bcc b2 to bcs FINAL SYMBOL TABLE (label) @1 @@ -4985,8 +5001,8 @@ FINAL SYMBOL TABLE (byte) main::pressed#1 reg byte a 202.0 (byte) main::pressed#2 reg byte a 202.0 (byte*) main::sc -(byte*) main::sc#1 sc zp ZP_WORD:6 22.0 -(byte*) main::sc#2 sc zp ZP_WORD:6 14.666666666666666 +(byte*) main::sc#1 sc zp ZP_WORD:6 16.5 +(byte*) main::sc#4 sc zp ZP_WORD:6 16.5 (byte) main::shift (byte) main::shift#9 shift zp ZP_BYTE:4 5.315789473684211 (const string) main::str str = (string) "f1@" @@ -5083,7 +5099,7 @@ reg byte a [ main::pressed#2 main::pressed#1 ] reg byte a [ plot_chargen::ch#2 plot_chargen::ch#1 ] reg byte x [ plot_chargen::shift#2 plot_chargen::shift#1 ] reg byte y [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] -zp ZP_WORD:6 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 main::sc#2 main::sc#1 ] +zp ZP_WORD:6 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 main::sc#4 main::sc#1 ] zp ZP_BYTE:8 [ plot_chargen::y#2 plot_chargen::y#1 ] zp ZP_BYTE:9 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ] @@ -5119,7 +5135,7 @@ reg byte a [ keyboard_get_keycode::return#0 ] FINAL ASSEMBLER -Score: 628983 +Score: 628893 // File Comments // Allows analysis of the CHARGEN ROM font @@ -5206,33 +5222,42 @@ main: { .label ch = 5 .label cur_pos = 3 .label shift = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte*) main::sc#2 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte*) main::sc#4 = (const byte*) SCREEN#0 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta sc+1 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // *sc = ' ' + // [6] *((byte*) main::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + // for( byte* sc=SCREEN;scSCREEN+$3e8 - bcs !b2+ - jmp b2 - !b2: + bcc b2 bne !+ lda sc cmp #main::@3] + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // print_str_at("f1", SCREEN+1) - // [8] call print_str_at + // [10] call print_str_at // [127] phi from main::@3 to print_str_at [phi:main::@3->print_str_at] // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte) 1 [phi:main::@3->print_str_at#0] -- pbuz1=pbuc1 lda #str sta print_str_at.str+1 jsr print_str_at - // [9] phi from main::@3 to main::@17 [phi:main::@3->main::@17] + // [11] phi from main::@3 to main::@17 [phi:main::@3->main::@17] // main::@17 // print_str_at("f3", SCREEN+1+10) - // [10] call print_str_at + // [12] call print_str_at // [127] phi from main::@17 to print_str_at [phi:main::@17->print_str_at] // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte) 1+(byte) $a [phi:main::@17->print_str_at#0] -- pbuz1=pbuc1 lda #str1 sta print_str_at.str+1 jsr print_str_at - // [11] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + // [13] phi from main::@17 to main::@18 [phi:main::@17->main::@18] // main::@18 // print_str_at("f5", SCREEN+1+20) - // [12] call print_str_at + // [14] call print_str_at // [127] phi from main::@18 to print_str_at [phi:main::@18->print_str_at] // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte) 1+(byte) $14 [phi:main::@18->print_str_at#0] -- pbuz1=pbuc1 lda #str2 sta print_str_at.str+1 jsr print_str_at - // [13] phi from main::@18 to main::@19 [phi:main::@18->main::@19] + // [15] phi from main::@18 to main::@19 [phi:main::@18->main::@19] // main::@19 // print_str_at("f7", SCREEN+1+30) - // [14] call print_str_at + // [16] call print_str_at // [127] phi from main::@19 to print_str_at [phi:main::@19->print_str_at] // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte) 1+(byte) $1e [phi:main::@19->print_str_at#0] -- pbuz1=pbuc1 lda #str3 sta print_str_at.str+1 jsr print_str_at - // [15] phi from main::@19 to main::@4 [phi:main::@19->main::@4] - // [15] phi (byte) main::i#2 = (byte) 0 [phi:main::@19->main::@4#0] -- vbuz1=vbuc1 + // [17] phi from main::@19 to main::@4 [phi:main::@19->main::@4] + // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@19->main::@4#0] -- vbuz1=vbuc1 lda #0 sta i - // [15] phi from main::@20 to main::@4 [phi:main::@20->main::@4] - // [15] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@20->main::@4#0] -- register_copy + // [17] phi from main::@20 to main::@4 [phi:main::@20->main::@4] + // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@20->main::@4#0] -- register_copy // main::@4 b4: // plot_chargen(i, $20, 0) - // [16] (byte) plot_chargen::pos#0 ← (byte) main::i#2 -- vbuyy=vbuz1 + // [18] (byte) plot_chargen::pos#0 ← (byte) main::i#2 -- vbuyy=vbuz1 ldy i - // [17] call plot_chargen + // [19] call plot_chargen // [71] phi from main::@4 to plot_chargen [phi:main::@4->plot_chargen] // [71] phi (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#0 [phi:main::@4->plot_chargen#0] -- register_copy // [71] phi (byte) plot_chargen::shift#2 = (byte) 0 [phi:main::@4->plot_chargen#1] -- vbuxx=vbuc1 @@ -5314,199 +5339,199 @@ main: { jsr plot_chargen // main::@20 // for(byte i : 0..3 ) - // [18] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [20] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc i - // [19] if((byte) main::i#1!=(byte) 4) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 + // [21] if((byte) main::i#1!=(byte) 4) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp i bne b4 - // [20] phi from main::@20 to main::@5 [phi:main::@20->main::@5] - // [20] phi (byte) main::cur_pos#24 = (byte) 0 [phi:main::@20->main::@5#0] -- vbuz1=vbuc1 + // [22] phi from main::@20 to main::@5 [phi:main::@20->main::@5] + // [22] phi (byte) main::cur_pos#24 = (byte) 0 [phi:main::@20->main::@5#0] -- vbuz1=vbuc1 lda #0 sta cur_pos // main::@5 b5: // keyboard_key_pressed(KEY_F1) - // [21] call keyboard_key_pressed + // [23] call keyboard_key_pressed // [113] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F1#0 [phi:main::@5->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_F1 jsr keyboard_key_pressed // keyboard_key_pressed(KEY_F1) - // [22] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + // [24] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 // main::@21 - // [23] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2 + // [25] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2 // if(keyboard_key_pressed(KEY_F1)!=0) - // [24] if((byte~) main::$15==(byte) 0) goto main::@28 -- vbuaa_eq_0_then_la1 + // [26] if((byte~) main::$15==(byte) 0) goto main::@28 -- vbuaa_eq_0_then_la1 cmp #0 beq b6 - // [26] phi from main::@21 to main::@6 [phi:main::@21->main::@6] - // [26] phi (byte) main::cur_pos#22 = (byte) 0 [phi:main::@21->main::@6#0] -- vbuz1=vbuc1 + // [28] phi from main::@21 to main::@6 [phi:main::@21->main::@6] + // [28] phi (byte) main::cur_pos#22 = (byte) 0 [phi:main::@21->main::@6#0] -- vbuz1=vbuc1 lda #0 sta cur_pos - // [25] phi from main::@21 to main::@28 [phi:main::@21->main::@28] + // [27] phi from main::@21 to main::@28 [phi:main::@21->main::@28] // main::@28 - // [26] phi from main::@28 to main::@6 [phi:main::@28->main::@6] - // [26] phi (byte) main::cur_pos#22 = (byte) main::cur_pos#24 [phi:main::@28->main::@6#0] -- register_copy + // [28] phi from main::@28 to main::@6 [phi:main::@28->main::@6] + // [28] phi (byte) main::cur_pos#22 = (byte) main::cur_pos#24 [phi:main::@28->main::@6#0] -- register_copy // main::@6 b6: // keyboard_key_pressed(KEY_F3) - // [27] call keyboard_key_pressed + // [29] call keyboard_key_pressed // [113] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed] // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F3#0 [phi:main::@6->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_F3 jsr keyboard_key_pressed // keyboard_key_pressed(KEY_F3) - // [28] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 + // [30] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 // main::@22 - // [29] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10 + // [31] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10 // if(keyboard_key_pressed(KEY_F3)!=0) - // [30] if((byte~) main::$18==(byte) 0) goto main::@29 -- vbuaa_eq_0_then_la1 + // [32] if((byte~) main::$18==(byte) 0) goto main::@29 -- vbuaa_eq_0_then_la1 cmp #0 beq b7 - // [32] phi from main::@22 to main::@7 [phi:main::@22->main::@7] - // [32] phi (byte) main::cur_pos#20 = (byte) 1 [phi:main::@22->main::@7#0] -- vbuz1=vbuc1 + // [34] phi from main::@22 to main::@7 [phi:main::@22->main::@7] + // [34] phi (byte) main::cur_pos#20 = (byte) 1 [phi:main::@22->main::@7#0] -- vbuz1=vbuc1 lda #1 sta cur_pos - // [31] phi from main::@22 to main::@29 [phi:main::@22->main::@29] + // [33] phi from main::@22 to main::@29 [phi:main::@22->main::@29] // main::@29 - // [32] phi from main::@29 to main::@7 [phi:main::@29->main::@7] - // [32] phi (byte) main::cur_pos#20 = (byte) main::cur_pos#22 [phi:main::@29->main::@7#0] -- register_copy + // [34] phi from main::@29 to main::@7 [phi:main::@29->main::@7] + // [34] phi (byte) main::cur_pos#20 = (byte) main::cur_pos#22 [phi:main::@29->main::@7#0] -- register_copy // main::@7 b7: // keyboard_key_pressed(KEY_F5) - // [33] call keyboard_key_pressed + // [35] call keyboard_key_pressed // [113] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed] // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F5#0 [phi:main::@7->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_F5 jsr keyboard_key_pressed // keyboard_key_pressed(KEY_F5) - // [34] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 + // [36] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 // main::@23 - // [35] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11 + // [37] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11 // if(keyboard_key_pressed(KEY_F5)!=0) - // [36] if((byte~) main::$21==(byte) 0) goto main::@30 -- vbuaa_eq_0_then_la1 + // [38] if((byte~) main::$21==(byte) 0) goto main::@30 -- vbuaa_eq_0_then_la1 cmp #0 beq b8 - // [38] phi from main::@23 to main::@8 [phi:main::@23->main::@8] - // [38] phi (byte) main::cur_pos#18 = (byte) 2 [phi:main::@23->main::@8#0] -- vbuz1=vbuc1 + // [40] phi from main::@23 to main::@8 [phi:main::@23->main::@8] + // [40] phi (byte) main::cur_pos#18 = (byte) 2 [phi:main::@23->main::@8#0] -- vbuz1=vbuc1 lda #2 sta cur_pos - // [37] phi from main::@23 to main::@30 [phi:main::@23->main::@30] + // [39] phi from main::@23 to main::@30 [phi:main::@23->main::@30] // main::@30 - // [38] phi from main::@30 to main::@8 [phi:main::@30->main::@8] - // [38] phi (byte) main::cur_pos#18 = (byte) main::cur_pos#20 [phi:main::@30->main::@8#0] -- register_copy + // [40] phi from main::@30 to main::@8 [phi:main::@30->main::@8] + // [40] phi (byte) main::cur_pos#18 = (byte) main::cur_pos#20 [phi:main::@30->main::@8#0] -- register_copy // main::@8 b8: // keyboard_key_pressed(KEY_F7) - // [39] call keyboard_key_pressed + // [41] call keyboard_key_pressed // [113] phi from main::@8 to keyboard_key_pressed [phi:main::@8->keyboard_key_pressed] // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F7#0 [phi:main::@8->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_F7 jsr keyboard_key_pressed // keyboard_key_pressed(KEY_F7) - // [40] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 + // [42] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 // main::@24 - // [41] (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12 + // [43] (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12 // if(keyboard_key_pressed(KEY_F7)!=0) - // [42] if((byte~) main::$24==(byte) 0) goto main::@31 -- vbuaa_eq_0_then_la1 + // [44] if((byte~) main::$24==(byte) 0) goto main::@31 -- vbuaa_eq_0_then_la1 cmp #0 beq b9 - // [44] phi from main::@24 to main::@9 [phi:main::@24->main::@9] - // [44] phi (byte) main::cur_pos#11 = (byte) 3 [phi:main::@24->main::@9#0] -- vbuz1=vbuc1 + // [46] phi from main::@24 to main::@9 [phi:main::@24->main::@9] + // [46] phi (byte) main::cur_pos#11 = (byte) 3 [phi:main::@24->main::@9#0] -- vbuz1=vbuc1 lda #3 sta cur_pos - // [43] phi from main::@24 to main::@31 [phi:main::@24->main::@31] + // [45] phi from main::@24 to main::@31 [phi:main::@24->main::@31] // main::@31 - // [44] phi from main::@31 to main::@9 [phi:main::@31->main::@9] - // [44] phi (byte) main::cur_pos#11 = (byte) main::cur_pos#18 [phi:main::@31->main::@9#0] -- register_copy + // [46] phi from main::@31 to main::@9 [phi:main::@31->main::@9] + // [46] phi (byte) main::cur_pos#11 = (byte) main::cur_pos#18 [phi:main::@31->main::@9#0] -- register_copy // main::@9 b9: // keyboard_key_pressed(KEY_LSHIFT) - // [45] call keyboard_key_pressed + // [47] call keyboard_key_pressed // [113] phi from main::@9 to keyboard_key_pressed [phi:main::@9->keyboard_key_pressed] // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_LSHIFT#0 [phi:main::@9->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_LSHIFT jsr keyboard_key_pressed // keyboard_key_pressed(KEY_LSHIFT) - // [46] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 + // [48] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 // main::@25 - // [47] (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13 + // [49] (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13 // if(keyboard_key_pressed(KEY_LSHIFT)!=0) - // [48] if((byte~) main::$27!=(byte) 0) goto main::@10 -- vbuaa_neq_0_then_la1 + // [50] if((byte~) main::$27!=(byte) 0) goto main::@10 -- vbuaa_neq_0_then_la1 cmp #0 bne b10 - // [50] phi from main::@25 to main::@11 [phi:main::@25->main::@11] - // [50] phi (byte) main::shift#9 = (byte) 0 [phi:main::@25->main::@11#0] -- vbuz1=vbuc1 + // [52] phi from main::@25 to main::@11 [phi:main::@25->main::@11] + // [52] phi (byte) main::shift#9 = (byte) 0 [phi:main::@25->main::@11#0] -- vbuz1=vbuc1 lda #0 sta shift jmp b11 - // [49] phi from main::@25 to main::@10 [phi:main::@25->main::@10] + // [51] phi from main::@25 to main::@10 [phi:main::@25->main::@10] // main::@10 b10: - // [50] phi from main::@10 to main::@11 [phi:main::@10->main::@11] - // [50] phi (byte) main::shift#9 = (byte) 1 [phi:main::@10->main::@11#0] -- vbuz1=vbuc1 + // [52] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [52] phi (byte) main::shift#9 = (byte) 1 [phi:main::@10->main::@11#0] -- vbuz1=vbuc1 lda #1 sta shift // main::@11 b11: - // [51] phi from main::@11 to main::@12 [phi:main::@11->main::@12] - // [51] phi (byte) main::ch#2 = (byte) 0 [phi:main::@11->main::@12#0] -- vbuz1=vbuc1 + // [53] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + // [53] phi (byte) main::ch#2 = (byte) 0 [phi:main::@11->main::@12#0] -- vbuz1=vbuc1 lda #0 sta ch // Check for key presses - and plot char if found - // [51] phi from main::@14 to main::@12 [phi:main::@14->main::@12] - // [51] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@14->main::@12#0] -- register_copy + // [53] phi from main::@14 to main::@12 [phi:main::@14->main::@12] + // [53] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@14->main::@12#0] -- register_copy // main::@12 b12: // keyboard_get_keycode(ch) - // [52] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 -- vbuxx=vbuz1 + // [54] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 -- vbuxx=vbuz1 ldx ch - // [53] call keyboard_get_keycode + // [55] call keyboard_get_keycode jsr keyboard_get_keycode - // [54] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 + // [56] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 // main::@26 // key = keyboard_get_keycode(ch) - // [55] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 + // [57] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 // if(key!=$3f) - // [56] if((byte) main::key#0==(byte) $3f) goto main::@13 -- vbuaa_eq_vbuc1_then_la1 + // [58] if((byte) main::key#0==(byte) $3f) goto main::@13 -- vbuaa_eq_vbuc1_then_la1 cmp #$3f - beq b3 + beq b1 // main::@15 // keyboard_key_pressed(key) - // [57] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 -- vbuxx=vbuaa + // [59] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 -- vbuxx=vbuaa tax - // [58] call keyboard_key_pressed + // [60] call keyboard_key_pressed // [113] phi from main::@15 to keyboard_key_pressed [phi:main::@15->keyboard_key_pressed] // [113] phi (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#5 [phi:main::@15->keyboard_key_pressed#0] -- register_copy jsr keyboard_key_pressed // keyboard_key_pressed(key) - // [59] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0 + // [61] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0 // main::@27 // pressed = keyboard_key_pressed(key) - // [60] (byte) main::pressed#1 ← (byte) keyboard_key_pressed::return#14 - // [61] phi from main::@27 to main::@13 [phi:main::@27->main::@13] - // [61] phi (byte) main::pressed#2 = (byte) main::pressed#1 [phi:main::@27->main::@13#0] -- register_copy + // [62] (byte) main::pressed#1 ← (byte) keyboard_key_pressed::return#14 + // [63] phi from main::@27 to main::@13 [phi:main::@27->main::@13] + // [63] phi (byte) main::pressed#2 = (byte) main::pressed#1 [phi:main::@27->main::@13#0] -- register_copy jmp b13 - // [61] phi from main::@26 to main::@13 [phi:main::@26->main::@13] - b3: - // [61] phi (byte) main::pressed#2 = (byte) 0 [phi:main::@26->main::@13#0] -- vbuaa=vbuc1 + // [63] phi from main::@26 to main::@13 [phi:main::@26->main::@13] + b1: + // [63] phi (byte) main::pressed#2 = (byte) 0 [phi:main::@26->main::@13#0] -- vbuaa=vbuc1 lda #0 // main::@13 b13: // if(pressed!=0) - // [62] if((byte) main::pressed#2==(byte) 0) goto main::@14 -- vbuaa_eq_0_then_la1 + // [64] if((byte) main::pressed#2==(byte) 0) goto main::@14 -- vbuaa_eq_0_then_la1 cmp #0 beq b14 // main::@16 // plot_chargen(cur_pos, ch, shift) - // [63] (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#11 -- vbuyy=vbuz1 + // [65] (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#11 -- vbuyy=vbuz1 ldy cur_pos - // [64] (byte) plot_chargen::ch#1 ← (byte) main::ch#2 -- vbuaa=vbuz1 + // [66] (byte) plot_chargen::ch#1 ← (byte) main::ch#2 -- vbuaa=vbuz1 lda ch - // [65] (byte) plot_chargen::shift#1 ← (byte) main::shift#9 -- vbuxx=vbuz1 + // [67] (byte) plot_chargen::shift#1 ← (byte) main::shift#9 -- vbuxx=vbuz1 ldx shift - // [66] call plot_chargen + // [68] call plot_chargen // [71] phi from main::@16 to plot_chargen [phi:main::@16->plot_chargen] // [71] phi (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#1 [phi:main::@16->plot_chargen#0] -- register_copy // [71] phi (byte) plot_chargen::shift#2 = (byte) plot_chargen::shift#1 [phi:main::@16->plot_chargen#1] -- register_copy @@ -5515,31 +5540,15 @@ main: { // main::@14 b14: // for( byte ch : 0..$3f) - // [67] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 + // [69] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 inc ch - // [68] if((byte) main::ch#1!=(byte) $40) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 + // [70] if((byte) main::ch#1!=(byte) $40) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 lda #$40 cmp ch bne b12 - // [20] phi from main::@14 to main::@5 [phi:main::@14->main::@5] - // [20] phi (byte) main::cur_pos#24 = (byte) main::cur_pos#11 [phi:main::@14->main::@5#0] -- register_copy + // [22] phi from main::@14 to main::@5 [phi:main::@14->main::@5] + // [22] phi (byte) main::cur_pos#24 = (byte) main::cur_pos#11 [phi:main::@14->main::@5#0] -- register_copy jmp b5 - // main::@2 - b2: - // *sc = ' ' - // [69] *((byte*) main::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // for( byte* sc=SCREEN;scmain::@1] - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 str: .text "f1@" str1: .text "f3@" str2: .text "f5@" diff --git a/src/test/ref/examples/chargen/chargen-analysis.sym b/src/test/ref/examples/chargen/chargen-analysis.sym index 03279e044..adc875e79 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.sym +++ b/src/test/ref/examples/chargen/chargen-analysis.sym @@ -216,8 +216,8 @@ (byte) main::pressed#1 reg byte a 202.0 (byte) main::pressed#2 reg byte a 202.0 (byte*) main::sc -(byte*) main::sc#1 sc zp ZP_WORD:6 22.0 -(byte*) main::sc#2 sc zp ZP_WORD:6 14.666666666666666 +(byte*) main::sc#1 sc zp ZP_WORD:6 16.5 +(byte*) main::sc#4 sc zp ZP_WORD:6 16.5 (byte) main::shift (byte) main::shift#9 shift zp ZP_BYTE:4 5.315789473684211 (const string) main::str str = (string) "f1@" @@ -314,7 +314,7 @@ reg byte a [ main::pressed#2 main::pressed#1 ] reg byte a [ plot_chargen::ch#2 plot_chargen::ch#1 ] reg byte x [ plot_chargen::shift#2 plot_chargen::shift#1 ] reg byte y [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] -zp ZP_WORD:6 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 main::sc#2 main::sc#1 ] +zp ZP_WORD:6 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 main::sc#4 main::sc#1 ] zp ZP_BYTE:8 [ plot_chargen::y#2 plot_chargen::y#1 ] zp ZP_BYTE:9 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ] diff --git a/src/test/ref/examples/fastmultiply/fastmultiply8.asm b/src/test/ref/examples/fastmultiply/fastmultiply8.asm index c6229560e..783930696 100644 --- a/src/test/ref/examples/fastmultiply/fastmultiply8.asm +++ b/src/test/ref/examples/fastmultiply/fastmultiply8.asm @@ -238,14 +238,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [82] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [82] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [82] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [83] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [82] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [85] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [83] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [86] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [84] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [82] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [82] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [85] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [82] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [82] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [82] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [83] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [82] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [85] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [83] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [86] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [84] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [82] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [82] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [85] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [82] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [82] phi from memset to memset::@2 [phi:memset->memset::@2] + // [82] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [82] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [82] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [83] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [83] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [84] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [85] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -3317,24 +3348,8 @@ memset: { bne b2 // memset::@return // } - // [84] return + // [86] return rts - // memset::@2 - b2: - // *dst = c - // [85] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [86] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [82] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [82] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/examples/fastmultiply/fastmultiply8.sym b/src/test/ref/examples/fastmultiply/fastmultiply8.sym index 4bab78090..756b6ab5c 100644 --- a/src/test/ref/examples/fastmultiply/fastmultiply8.sym +++ b/src/test/ref/examples/fastmultiply/fastmultiply8.sym @@ -72,8 +72,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:12 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:12 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:12 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:12 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -153,7 +153,7 @@ zp ZP_BYTE:9 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ] reg byte x [ init_screen::l#2 init_screen::l#1 ] zp ZP_WORD:10 [ init_screen::COLS#3 init_screen::COLS#1 main::at#4 main::at#1 ] reg byte x [ init_screen::m#2 init_screen::m#1 ] -zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 main::at_line#2 main::at#2 ] +zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 main::at_line#2 main::at#2 ] reg byte a [ fmul8::a#0 ] reg byte x [ fmul8::b#0 ] reg byte a [ fmul8::return#0 ] diff --git a/src/test/ref/examples/fire/fire.asm b/src/test/ref/examples/fire/fire.asm index eec6edbe8..6e75fc2ac 100644 --- a/src/test/ref/examples/fire/fire.asm +++ b/src/test/ref/examples/fire/fire.asm @@ -76,67 +76,20 @@ main: { // Animate the fire on the passed screen. Uses BUFFER to store the current values. fire: { .label screen = 2 - .label screen_2 = $b + .label screen_2 = $c .label buffer = 4 - .label buffer_3 = 9 - .label screen_4 = $b .label buffer_10 = 9 - .label screen_11 = $b + .label screen_11 = $c + .label buffer_15 = 9 + .label screen_19 = $c lda screen - sta screen_11 + sta screen_19 lda screen+1 - sta screen_11+1 + sta screen_19+1 lda #BUFFER sta buffer+1 - b1: - lda buffer+1 - cmp #>BUFFER+$18*$28 - bne b2 - lda buffer - cmp #$18*$28 - sta screen+1 - lda #BUFFER+$18*$28 - sta buffer_10+1 - b6: - lda buffer_10+1 - cmp #>BUFFER+$19*$28 - bne b7 - lda buffer_10 - cmp #BUFFER+$18*$28 + bne b2 + lda buffer + cmp #$18*$28 + sta screen+1 + lda #BUFFER+$18*$28 + sta buffer_15+1 + b7: + jsr sid_rnd + lsr + lsr + lsr + lsr + clc + adc #$30 + ldy #0 + sta (buffer_15),y + lda (buffer_15),y + sta (screen),y + inc screen + bne !+ + inc screen+1 + !: + inc buffer_10 + bne !+ + inc buffer_10+1 + !: + lda buffer_10+1 + cmp #>BUFFER+$19*$28 + bne b7 + lda buffer_10 + cmp #CHARSET sta font+1 - b1: + b2: + lda #0 + tay + sta (font),y + inc font + bne !+ + inc font+1 + !: lda font+1 cmp #>CHARSET+1*8 - beq !b2+ - jmp b2 - !b2: + bne b2 lda font cmp #CHARSET+$40*8 sta font1+1 - b3: + b4: + lda #$ff + ldy #0 + sta (font1),y + inc font1 + bne !+ + inc font1+1 + !: lda font1+1 cmp #>CHARSET+$100*8 - beq !b4+ - jmp b4 - !b4: + bne b4 lda font1 cmp #> (byte) 4 - [38] (byte~) fire::$14 ← (byte) $30 + (byte~) fire::$13 - [39] *((byte*) fire::buffer#10) ← (byte~) fire::$14 - [40] *((byte*) fire::screen#10) ← *((byte*) fire::buffer#10) - [41] (byte*) fire::screen#3 ← ++ (byte*) fire::screen#10 - [42] (byte*) fire::buffer#3 ← ++ (byte*) fire::buffer#10 - to:fire::@6 -fire::@2: scope:[fire] from fire::@1 - [43] (byte~) fire::$4 ← *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) - [44] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#4 + (byte) $28) - [45] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#4 + (byte) $29) - [46] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 - [47] if((byte) fire::c#0<(byte) 2+(byte) 1) goto fire::@4 + to:fire::@1_1 +fire::@1_1: scope:[fire] from fire + [26] (byte*~) fire::screen#19 ← (byte*) fire::screen#0 + to:fire::@2 +fire::@2: scope:[fire] from fire::@1 fire::@1_1 + [27] (byte*) fire::screen#11 ← phi( fire::@1/(byte*) fire::screen#2 fire::@1_1/(byte*~) fire::screen#19 ) + [27] (byte*) fire::buffer#11 ← phi( fire::@1/(byte*) fire::buffer#2 fire::@1_1/(const byte*) BUFFER#0 ) + [28] (byte~) fire::$4 ← *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) + [29] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#11 + (byte) $28) + [30] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#11 + (byte) $29) + [31] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 + [32] if((byte) fire::c#0<(byte) 2+(byte) 1) goto fire::@4 to:fire::@5 fire::@5: scope:[fire] from fire::@2 - [48] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 + [33] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 to:fire::@4 fire::@4: scope:[fire] from fire::@2 fire::@5 - [49] (byte) fire::c#2 ← phi( fire::@2/(byte) fire::c#0 fire::@5/(byte) fire::c#1 ) - [50] *((byte*) fire::buffer#4) ← (byte) fire::c#2 - [51] *((byte*) fire::screen#4) ← *((byte*) fire::buffer#4) - [52] (byte*) fire::screen#2 ← ++ (byte*) fire::screen#4 - [53] (byte*) fire::buffer#2 ← ++ (byte*) fire::buffer#4 + [34] (byte) fire::c#2 ← phi( fire::@2/(byte) fire::c#0 fire::@5/(byte) fire::c#1 ) + [35] *((byte*) fire::buffer#11) ← (byte) fire::c#2 + [36] *((byte*) fire::screen#11) ← *((byte*) fire::buffer#11) + [37] (byte*) fire::screen#2 ← ++ (byte*) fire::screen#11 + [38] (byte*) fire::buffer#2 ← ++ (byte*) fire::buffer#11 to:fire::@1 +fire::@1: scope:[fire] from fire::@4 + [39] if((byte*) fire::buffer#2!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 + to:fire::@3 +fire::@3: scope:[fire] from fire::@1 + [40] (byte*) fire::screen#1 ← (byte*) fire::screen#0 + (word)(number) $18*(number) $28 + to:fire::@7 +fire::@7: scope:[fire] from fire::@3 fire::@6 + [41] (byte*) fire::screen#15 ← phi( fire::@6/(byte*) fire::screen#10 fire::@3/(byte*) fire::screen#1 ) + [41] (byte*) fire::buffer#15 ← phi( fire::@6/(byte*) fire::buffer#10 fire::@3/(const byte*) BUFFER#0+(word)(number) $18*(number) $28 ) + [42] call sid_rnd + [43] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + to:fire::@8 +fire::@8: scope:[fire] from fire::@7 + [44] (byte~) fire::$12 ← (byte) sid_rnd::return#2 + [45] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 + [46] (byte~) fire::$14 ← (byte) $30 + (byte~) fire::$13 + [47] *((byte*) fire::buffer#15) ← (byte~) fire::$14 + [48] *((byte*) fire::screen#15) ← *((byte*) fire::buffer#15) + [49] (byte*) fire::screen#10 ← ++ (byte*) fire::screen#15 + [50] (byte*) fire::buffer#10 ← ++ (byte*) fire::buffer#15 + to:fire::@6 +fire::@6: scope:[fire] from fire::@8 + [51] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 + to:fire::@return +fire::@return: scope:[fire] from fire::@6 + [52] return + to:@return sid_rnd: scope:[sid_rnd] from fire::@7 - [54] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) + [53] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) to:sid_rnd::@return sid_rnd::@return: scope:[sid_rnd] from sid_rnd - [55] return + [54] return to:@return makecharset: scope:[makecharset] from main::@8 - [56] phi() + [55] phi() + to:makecharset::@2 +makecharset::@2: scope:[makecharset] from makecharset makecharset::@1 + [56] (byte*) makecharset::font#4 ← phi( makecharset::@1/(byte*) makecharset::font#1 makecharset/(const byte*) CHARSET#0 ) + [57] *((byte*) makecharset::font#4) ← (byte) 0 + [58] (byte*) makecharset::font#1 ← ++ (byte*) makecharset::font#4 to:makecharset::@1 -makecharset::@1: scope:[makecharset] from makecharset makecharset::@2 - [57] (byte*) makecharset::font#2 ← phi( makecharset/(const byte*) CHARSET#0 makecharset::@2/(byte*) makecharset::font#1 ) - [58] if((byte*) makecharset::font#2!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 +makecharset::@1: scope:[makecharset] from makecharset::@2 + [59] if((byte*) makecharset::font#1!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 + to:makecharset::@4 +makecharset::@4: scope:[makecharset] from makecharset::@1 makecharset::@3 + [60] (byte*) makecharset::font1#4 ← phi( makecharset::@3/(byte*) makecharset::font1#1 makecharset::@1/(const byte*) CHARSET#0+(word)(number) $40*(number) 8 ) + [61] *((byte*) makecharset::font1#4) ← (byte) $ff + [62] (byte*) makecharset::font1#1 ← ++ (byte*) makecharset::font1#4 to:makecharset::@3 -makecharset::@3: scope:[makecharset] from makecharset::@1 makecharset::@4 - [59] (byte*) makecharset::font1#2 ← phi( makecharset::@1/(const byte*) CHARSET#0+(word)(number) $40*(number) 8 makecharset::@4/(byte*) makecharset::font1#1 ) - [60] if((byte*) makecharset::font1#2!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 +makecharset::@3: scope:[makecharset] from makecharset::@4 + [63] if((byte*) makecharset::font1#1!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 + to:makecharset::@6 +makecharset::@6: scope:[makecharset] from makecharset::@3 makecharset::@5 + [64] (byte) makecharset::c#17 ← phi( makecharset::@5/(byte) makecharset::c#1 makecharset::@3/(byte) 0 ) + to:makecharset::@8 +makecharset::@8: scope:[makecharset] from makecharset::@6 makecharset::@7 + [65] (byte) makecharset::bc#10 ← phi( makecharset::@7/(byte) makecharset::bc#12 makecharset::@6/(byte) 0 ) + [65] (byte) makecharset::i#13 ← phi( makecharset::@7/(byte) makecharset::i#1 makecharset::@6/(byte) 0 ) + to:makecharset::@11 +makecharset::@11: scope:[makecharset] from makecharset::@10 makecharset::@8 + [66] (byte) makecharset::b#8 ← phi( makecharset::@10/(byte) makecharset::b#2 makecharset::@8/(byte) 0 ) + [66] (byte) makecharset::bc#13 ← phi( makecharset::@10/(byte) makecharset::bc#12 makecharset::@8/(byte) makecharset::bc#10 ) + [66] (byte) makecharset::ii#6 ← phi( makecharset::@10/(byte) makecharset::ii#1 makecharset::@8/(byte) 0 ) + [67] (byte) makecharset::bc#1 ← (byte) makecharset::bc#13 + (byte) makecharset::c#17 + [68] if((byte) makecharset::bc#1<(byte) $3f+(byte) 1) goto makecharset::@13 + to:makecharset::@14 +makecharset::@14: scope:[makecharset] from makecharset::@11 + [69] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 + [70] (byte~) makecharset::$11 ← (byte) makecharset::i#13 & (byte) 1 + [71] (byte~) makecharset::$12 ← (byte) makecharset::ii#6 + (byte~) makecharset::$11 + [72] (byte~) makecharset::$13 ← (byte~) makecharset::$12 & (byte) 7 + [73] (byte) makecharset::b#1 ← (byte) makecharset::b#8 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) + to:makecharset::@13 +makecharset::@13: scope:[makecharset] from makecharset::@11 makecharset::@14 + [74] (byte) makecharset::b#2 ← phi( makecharset::@11/(byte) makecharset::b#8 makecharset::@14/(byte) makecharset::b#1 ) + [74] (byte) makecharset::bc#12 ← phi( makecharset::@11/(byte) makecharset::bc#1 makecharset::@14/(byte) makecharset::bc#2 ) + [75] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#6 + to:makecharset::@10 +makecharset::@10: scope:[makecharset] from makecharset::@13 + [76] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@11 + to:makecharset::@12 +makecharset::@12: scope:[makecharset] from makecharset::@10 + [77] (word~) makecharset::$15 ← (word)(byte) makecharset::c#17 + [78] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 + [79] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#13 + [80] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 + [81] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 + [82] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 + to:makecharset::@7 +makecharset::@7: scope:[makecharset] from makecharset::@12 + [83] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@8 + to:makecharset::@9 +makecharset::@9: scope:[makecharset] from makecharset::@7 + [84] (byte) makecharset::c#1 ← ++ (byte) makecharset::c#17 to:makecharset::@5 -makecharset::@5: scope:[makecharset] from makecharset::@3 makecharset::@7 - [61] (byte) makecharset::c#2 ← phi( makecharset::@7/(byte) makecharset::c#1 makecharset::@3/(byte) 0 ) - [62] if((byte) makecharset::c#2<(byte) $40) goto makecharset::@6 +makecharset::@5: scope:[makecharset] from makecharset::@9 + [85] if((byte) makecharset::c#1<(byte) $40) goto makecharset::@6 to:makecharset::@return makecharset::@return: scope:[makecharset] from makecharset::@5 - [63] return + [86] return to:@return -makecharset::@6: scope:[makecharset] from makecharset::@10 makecharset::@5 - [64] (byte) makecharset::bc#6 ← phi( makecharset::@5/(byte) 0 makecharset::@10/(byte) makecharset::bc#3 ) - [64] (byte) makecharset::i#2 ← phi( makecharset::@5/(byte) 0 makecharset::@10/(byte) makecharset::i#1 ) - [65] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@8 - to:makecharset::@7 -makecharset::@7: scope:[makecharset] from makecharset::@6 - [66] (byte) makecharset::c#1 ← ++ (byte) makecharset::c#2 - to:makecharset::@5 -makecharset::@8: scope:[makecharset] from makecharset::@11 makecharset::@6 - [67] (byte) makecharset::b#2 ← phi( makecharset::@6/(byte) 0 makecharset::@11/(byte) makecharset::b#6 ) - [67] (byte) makecharset::bc#3 ← phi( makecharset::@6/(byte) makecharset::bc#6 makecharset::@11/(byte) makecharset::bc#7 ) - [67] (byte) makecharset::ii#2 ← phi( makecharset::@6/(byte) 0 makecharset::@11/(byte) makecharset::ii#1 ) - [68] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@9 - to:makecharset::@10 -makecharset::@10: scope:[makecharset] from makecharset::@8 - [69] (word~) makecharset::$15 ← (word)(byte) makecharset::c#2 - [70] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 - [71] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#2 - [72] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 - [73] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 - [74] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 - to:makecharset::@6 -makecharset::@9: scope:[makecharset] from makecharset::@8 - [75] (byte) makecharset::bc#1 ← (byte) makecharset::bc#3 + (byte) makecharset::c#2 - [76] if((byte) makecharset::bc#1<(byte) $3f+(byte) 1) goto makecharset::@11 - to:makecharset::@12 -makecharset::@12: scope:[makecharset] from makecharset::@9 - [77] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 - [78] (byte~) makecharset::$11 ← (byte) makecharset::i#2 & (byte) 1 - [79] (byte~) makecharset::$12 ← (byte) makecharset::ii#2 + (byte~) makecharset::$11 - [80] (byte~) makecharset::$13 ← (byte~) makecharset::$12 & (byte) 7 - [81] (byte) makecharset::b#1 ← (byte) makecharset::b#2 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) - to:makecharset::@11 -makecharset::@11: scope:[makecharset] from makecharset::@12 makecharset::@9 - [82] (byte) makecharset::b#6 ← phi( makecharset::@9/(byte) makecharset::b#2 makecharset::@12/(byte) makecharset::b#1 ) - [82] (byte) makecharset::bc#7 ← phi( makecharset::@9/(byte) makecharset::bc#1 makecharset::@12/(byte) makecharset::bc#2 ) - [83] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 - to:makecharset::@8 -makecharset::@4: scope:[makecharset] from makecharset::@3 - [84] *((byte*) makecharset::font1#2) ← (byte) $ff - [85] (byte*) makecharset::font1#1 ← ++ (byte*) makecharset::font1#2 - to:makecharset::@3 -makecharset::@2: scope:[makecharset] from makecharset::@1 - [86] *((byte*) makecharset::font#2) ← (byte) 0 - [87] (byte*) makecharset::font#1 ← ++ (byte*) makecharset::font#2 - to:makecharset::@1 sid_rnd_init: scope:[sid_rnd_init] from main::@7 - [88] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff - [89] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 + [87] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff + [88] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - [90] return + [89] return to:@return fillscreen: scope:[fillscreen] from main main::@4 main::@5 main::@6 - [91] (byte*) fillscreen::screen#6 ← phi( main/(const byte*) BUFFER#0 main::@5/(const byte*) SCREEN2#0 main::@6/(const byte*) COLS#0 main::@4/(const byte*) SCREEN1#0 ) - [91] (byte) fillscreen::fill#5 ← phi( main/(byte) 0 main::@5/(byte) 0 main::@6/(const byte) YELLOW#0 main::@4/(byte) 0 ) + [90] (byte*) fillscreen::screen#6 ← phi( main/(const byte*) BUFFER#0 main::@5/(const byte*) SCREEN2#0 main::@6/(const byte*) COLS#0 main::@4/(const byte*) SCREEN1#0 ) + [90] (byte) fillscreen::fill#5 ← phi( main/(byte) 0 main::@5/(byte) 0 main::@6/(const byte) YELLOW#0 main::@4/(byte) 0 ) to:fillscreen::@1 fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@1 - [92] (word) fillscreen::i#2 ← phi( fillscreen/(word) 0 fillscreen::@1/(word) fillscreen::i#1 ) - [92] (byte*) fillscreen::screen#5 ← phi( fillscreen/(byte*) fillscreen::screen#6 fillscreen::@1/(byte*) fillscreen::screen#4 ) - [93] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 - [94] (byte*) fillscreen::screen#4 ← ++ (byte*) fillscreen::screen#5 - [95] (word) fillscreen::i#1 ← ++ (word) fillscreen::i#2 - [96] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 + [91] (word) fillscreen::i#2 ← phi( fillscreen/(word) 0 fillscreen::@1/(word) fillscreen::i#1 ) + [91] (byte*) fillscreen::screen#5 ← phi( fillscreen/(byte*) fillscreen::screen#6 fillscreen::@1/(byte*) fillscreen::screen#4 ) + [92] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 + [93] (byte*) fillscreen::screen#4 ← ++ (byte*) fillscreen::screen#5 + [94] (word) fillscreen::i#1 ← ++ (word) fillscreen::i#2 + [95] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 to:fillscreen::@return fillscreen::@return: scope:[fillscreen] from fillscreen::@1 - [97] return + [96] return to:@return diff --git a/src/test/ref/examples/fire/fire.log b/src/test/ref/examples/fire/fire.log index bcabc8f17..ab54fcfdf 100644 --- a/src/test/ref/examples/fire/fire.log +++ b/src/test/ref/examples/fire/fire.log @@ -1085,6 +1085,9 @@ De-inlining pointer[w] to *(pointer+w) [174] *((byte*~) makecharset::$14 + (wo Successful SSA optimization Pass2DeInlineWordDerefIdx Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 2+1 in if((byte) fire::c#0<(byte) 2+(number) 1) goto fire::@4 Adding number conversion cast (unumber) 1 in if((byte) fire::c#0<(unumber)(byte) 2+(number) 1) goto fire::@4 Adding number conversion cast (unumber) $3f+1 in if((byte) makecharset::bc#1<(byte) $3f+(number) 1) goto makecharset::@22 @@ -1101,13 +1104,50 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $3e8 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) makecharset::c#1 = (byte) makecharset::c#2 +Alias (byte) makecharset::i#1 = (byte) makecharset::i#2 +Alias (byte) makecharset::bc#12 = (byte) makecharset::bc#6 +Alias (byte) makecharset::c#14 = (byte) makecharset::c#15 +Alias (byte) makecharset::ii#1 = (byte) makecharset::ii#2 +Alias (byte) makecharset::bc#3 = (byte) makecharset::bc#7 +Alias (byte) makecharset::b#2 = (byte) makecharset::b#6 +Alias (byte) makecharset::c#16 = (byte) makecharset::c#19 +Alias (byte) makecharset::i#11 = (byte) makecharset::i#14 +Alias (byte) makecharset::c#13 = (byte) makecharset::c#20 +Alias (byte) makecharset::i#10 = (byte) makecharset::i#12 +Alias (byte) makecharset::ii#7 = (byte) makecharset::ii#8 +Alias (byte) makecharset::b#8 = (byte) makecharset::b#9 +Alias (byte) makecharset::c#17 = (byte) makecharset::c#22 +Alias (byte) makecharset::bc#10 = (byte) makecharset::bc#14 +Alias (byte) makecharset::c#18 = (byte) makecharset::c#23 +Alias (byte) makecharset::i#13 = (byte) makecharset::i#16 +Successful SSA optimization Pass2AliasElimination +Alias (byte) makecharset::c#13 = (byte) makecharset::c#16 +Alias (byte) makecharset::i#10 = (byte) makecharset::i#11 +Alias (byte) makecharset::ii#6 = (byte) makecharset::ii#7 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) makecharset::c#13 (byte) makecharset::c#18 +Identical Phi Values (byte) makecharset::i#10 (byte) makecharset::i#13 +Identical Phi Values (byte) makecharset::c#21 (const byte) makecharset::c#0 +Identical Phi Values (byte) makecharset::i#15 (const byte) makecharset::i#0 +Identical Phi Values (byte) makecharset::bc#11 (const byte) makecharset::bc#0 +Identical Phi Values (byte) makecharset::ii#9 (const byte) makecharset::ii#0 +Identical Phi Values (byte) makecharset::b#10 (const byte) makecharset::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) makecharset::c#14 (byte) makecharset::c#18 +Identical Phi Values (byte) makecharset::i#9 (byte) makecharset::i#13 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) makecharset::c#18 (byte) makecharset::c#17 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) makecharset::c#12 (byte) makecharset::c#17 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [38] (byte*~) fire::$2 ← (const byte*) BUFFER#0 + (word)(number) $18*(number) $28 Constant right-side identified [46] (byte*) fire::buffer#1 ← (const byte*) BUFFER#0 + (word)(number) $18*(number) $28 Constant right-side identified [54] (byte*~) fire::$10 ← (const byte*) BUFFER#0 + (word)(number) $19*(number) $28 Constant right-side identified [67] (byte*~) makecharset::$0 ← (const byte*) makecharset::charset#0 + (byte)(number) 1*(number) 8 Constant right-side identified [71] (byte*) makecharset::font1#0 ← (const byte*) makecharset::charset#0 + (word)(number) $40*(number) 8 Constant right-side identified [73] (byte*~) makecharset::$3 ← (const byte*) makecharset::charset#0 + (word)(number) $100*(number) 8 -Constant right-side identified [86] (byte*~) makecharset::$14 ← (const byte*) makecharset::charset#0 + (byte)(number) 1*(number) 8 +Constant right-side identified [91] (byte*~) makecharset::$14 ← (const byte*) makecharset::charset#0 + (byte)(number) 1*(number) 8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) main::toD0181_$0#0 = (word)main::toD0181_screen#0 Constant (const word) main::toD0181_$4#0 = (word)main::toD0181_gfx#0 @@ -1121,6 +1161,39 @@ Constant (const byte*) makecharset::font1#0 = makecharset::charset#0+(word)$40*8 Constant (const byte*) makecharset::$3 = makecharset::charset#0+(word)$100*8 Constant (const byte*) makecharset::$14 = makecharset::charset#0+(byte)1*8 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [117] if((const byte) makecharset::c#0<(byte) $40) goto makecharset::@14 +if() condition always true - replacing block destination [119] if((const byte) makecharset::i#0<(byte) 8) goto makecharset::@17 +Removing PHI-reference to removed block (makecharset::@19_1) in block makecharset::@21 +Removing PHI-reference to removed block (makecharset::@19_1) in block makecharset::@21 +if() condition always true - replacing block destination [121] if((const byte) makecharset::ii#0<(byte) 8) goto makecharset::@20 +Successful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) fire::buffer#2 = (byte*) fire::buffer#4 +Alias (byte*) fire::screen#2 = (byte*) fire::screen#4 +Alias (byte*) fire::buffer#11 = (byte*) fire::buffer#13 +Alias (byte*) fire::screen#12 = (byte*) fire::screen#13 +Alias (byte*) fire::buffer#10 = (byte*) fire::buffer#3 +Alias (byte*) fire::screen#10 = (byte*) fire::screen#3 +Alias (byte*) fire::buffer#15 = (byte*) fire::buffer#16 +Alias (byte*) fire::screen#15 = (byte*) fire::screen#16 +Alias (byte*) makecharset::font#1 = (byte*) makecharset::font#2 +Alias (byte*) makecharset::font1#1 = (byte*) makecharset::font1#2 +Alias (byte) makecharset::bc#12 = (byte) makecharset::bc#3 +Alias (byte) makecharset::b#2 = (byte) makecharset::b#7 +Alias (byte*) fire::screen#0 = (byte*) fire::screen#14 +Alias (byte*) fire::screen#1 = (byte*) fire::screen#17 +Successful SSA optimization Pass2AliasElimination +Alias (byte*) fire::buffer#11 = (byte*) fire::buffer#12 +Alias (byte*) fire::screen#11 = (byte*) fire::screen#12 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) fire::buffer#14 (const byte*) fire::buffer#0 +Identical Phi Values (byte*) fire::buffer#17 (const byte*) fire::buffer#1 +Identical Phi Values (byte*) makecharset::font#5 (const byte*) makecharset::charset#0 +Identical Phi Values (byte*) makecharset::font1#5 (const byte*) makecharset::font1#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [15] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff Constant right-side identified [18] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 Constant right-side identified [24] (word~) main::toD0182_$1#0 ← (const word) main::toD0182_$0#0 & (word) $3fff @@ -1131,6 +1204,11 @@ Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0 Constant (const word) main::toD0182_$1#0 = main::toD0182_$0#0&$3fff Constant (const byte) main::toD0182_$5#0 = >main::toD0182_$4#0 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [110] if((const byte*) fire::buffer#0!=(const byte*) fire::$2) goto fire::@2 +if() condition always true - replacing block destination [112] if((const byte*) fire::buffer#1!=(const byte*) fire::$10) goto fire::@10 +if() condition always true - replacing block destination [114] if((const byte*) makecharset::charset#0!=(const byte*) makecharset::$0) goto makecharset::@2 +if() condition always true - replacing block destination [116] if((const byte*) makecharset::font1#0!=(const byte*) makecharset::$3) goto makecharset::@8 +Successful SSA optimization Pass2ConstantIfs Constant right-side identified [15] (word~) main::toD0181_$2#0 ← (const word) main::toD0181_$1#0 * (byte) 4 Constant right-side identified [17] (byte~) main::toD0181_$6#0 ← (const byte) main::toD0181_$5#0 / (byte) 4 Constant right-side identified [22] (word~) main::toD0182_$2#0 ← (const word) main::toD0182_$1#0 * (byte) 4 @@ -1223,8 +1301,15 @@ Constant inlined makecharset::c#0 = (byte) 0 Constant inlined fire::buffer#0 = (const byte*) BUFFER#0 Constant inlined fillscreen::fill#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting fire::@16(between fire::@2 and fire::@4) -Added new block during phi lifting makecharset::@33(between makecharset::@20 and makecharset::@22) +Added new block during phi lifting fire::@16(between fire::@1 and fire::@2) +Added new block during phi lifting fire::@17(between fire::@2 and fire::@4) +Added new block during phi lifting fire::@18(between fire::@9 and fire::@10) +Added new block during phi lifting makecharset::@33(between makecharset::@1 and makecharset::@2) +Added new block during phi lifting makecharset::@34(between makecharset::@7 and makecharset::@8) +Added new block during phi lifting makecharset::@35(between makecharset::@13 and makecharset::@14) +Added new block during phi lifting makecharset::@36(between makecharset::@16 and makecharset::@17) +Added new block during phi lifting makecharset::@37(between makecharset::@19 and makecharset::@20) +Added new block during phi lifting makecharset::@38(between makecharset::@20 and makecharset::@22) Added new block during phi lifting fillscreen::@3(between fillscreen::@1 and fillscreen::@1) Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 @@ -1246,41 +1331,43 @@ Adding NOP phi() at start of main::toD0181_@return Adding NOP phi() at start of main::@16 Adding NOP phi() at start of main::toD0182 Adding NOP phi() at start of main::toD0182_@return -Adding NOP phi() at start of fire::@10 Adding NOP phi() at start of makecharset +Adding NOP phi() at start of makecharset::@1_1 Adding NOP phi() at start of makecharset::@3 +Adding NOP phi() at start of makecharset::@7_1 Adding NOP phi() at start of makecharset::@9 -Adding NOP phi() at start of makecharset::@14 +Adding NOP phi() at start of makecharset::@13_1 +Adding NOP phi() at start of makecharset::@16_1 CALL GRAPH Calls in [] to main:4 Calls in [main] to fillscreen:10 fillscreen:12 fillscreen:14 fillscreen:16 sid_rnd_init:18 makecharset:20 fire:24 fire:29 -Calls in [fire] to sid_rnd:44 +Calls in [fire] to sid_rnd:53 Created 20 initial phi equivalence classes -Not coalescing [35] fire::screen#11 ← fire::screen#0 -Coalesced [39] fire::screen#14 ← fire::screen#1 -Coalesced [53] fire::buffer#12 ← fire::buffer#3 -Coalesced [54] fire::screen#13 ← fire::screen#3 -Coalesced [61] fire::c#5 ← fire::c#1 -Coalesced [67] fire::buffer#11 ← fire::buffer#2 -Coalesced [68] fire::screen#12 ← fire::screen#2 -Coalesced [69] fire::c#4 ← fire::c#0 -Coalesced [86] makecharset::c#12 ← makecharset::c#1 -Coalesced [87] makecharset::bc#11 ← makecharset::bc#6 -Coalesced [96] makecharset::i#9 ← makecharset::i#1 -Coalesced (already) [97] makecharset::bc#10 ← makecharset::bc#3 -Coalesced [105] makecharset::bc#14 ← makecharset::bc#2 -Coalesced [106] makecharset::b#9 ← makecharset::b#1 -Coalesced [109] makecharset::ii#6 ← makecharset::ii#1 -Coalesced [110] makecharset::bc#12 ← makecharset::bc#7 -Coalesced [111] makecharset::b#7 ← makecharset::b#6 -Coalesced [112] makecharset::bc#13 ← makecharset::bc#1 -Coalesced (already) [113] makecharset::b#8 ← makecharset::b#2 -Coalesced [116] makecharset::font1#4 ← makecharset::font1#1 -Coalesced [119] makecharset::font#4 ← makecharset::font#1 -Coalesced [124] fillscreen::screen#7 ← fillscreen::screen#6 -Coalesced [131] fillscreen::screen#8 ← fillscreen::screen#4 -Coalesced [132] fillscreen::i#3 ← fillscreen::i#1 +Not coalescing [35] fire::screen#19 ← fire::screen#0 +Coalesced [43] fire::c#5 ← fire::c#1 +Coalesced [51] fire::screen#21 ← fire::screen#1 +Coalesced [64] fire::buffer#19 ← fire::buffer#10 +Coalesced [65] fire::screen#20 ← fire::screen#10 +Coalesced [66] fire::buffer#18 ← fire::buffer#2 +Coalesced [67] fire::screen#18 ← fire::screen#2 +Coalesced [68] fire::c#4 ← fire::c#0 +Coalesced [88] makecharset::bc#17 ← makecharset::bc#10 +Coalesced [97] makecharset::bc#19 ← makecharset::bc#2 +Coalesced [98] makecharset::b#13 ← makecharset::b#1 +Coalesced [112] makecharset::c#24 ← makecharset::c#1 +Coalesced [113] makecharset::i#17 ← makecharset::i#1 +Coalesced [114] makecharset::bc#15 ← makecharset::bc#12 +Coalesced [115] makecharset::ii#10 ← makecharset::ii#1 +Coalesced (already) [116] makecharset::bc#16 ← makecharset::bc#12 +Coalesced [117] makecharset::b#11 ← makecharset::b#2 +Coalesced [118] makecharset::bc#18 ← makecharset::bc#1 +Coalesced (already) [119] makecharset::b#12 ← makecharset::b#8 +Coalesced [120] makecharset::font1#6 ← makecharset::font1#1 +Coalesced [121] makecharset::font#6 ← makecharset::font#1 +Coalesced [126] fillscreen::screen#7 ← fillscreen::screen#6 +Coalesced [133] fillscreen::screen#8 ← fillscreen::screen#4 +Coalesced [134] fillscreen::i#3 ← fillscreen::i#1 Coalesced down to 16 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @6 @@ -1291,11 +1378,22 @@ Culled Empty Block (label) main::@15 Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@16 Culled Empty Block (label) main::toD0182_@return +Culled Empty Block (label) fire::@9_1 +Culled Empty Block (label) fire::@18 Culled Empty Block (label) fire::@16 +Culled Empty Block (label) fire::@17 +Culled Empty Block (label) makecharset::@1_1 Culled Empty Block (label) makecharset::@3 +Culled Empty Block (label) makecharset::@7_1 Culled Empty Block (label) makecharset::@9 -Culled Empty Block (label) makecharset::@14 -Culled Empty Block (label) makecharset::@17 +Culled Empty Block (label) makecharset::@13_1 +Culled Empty Block (label) makecharset::@16_1 +Culled Empty Block (label) makecharset::@19_1 +Culled Empty Block (label) makecharset::@35 +Culled Empty Block (label) makecharset::@36 +Culled Empty Block (label) makecharset::@37 +Culled Empty Block (label) makecharset::@38 +Culled Empty Block (label) makecharset::@34 Culled Empty Block (label) makecharset::@33 Culled Empty Block (label) fillscreen::@3 Renumbering block @10 to @1 @@ -1314,13 +1412,15 @@ Renumbering block fire::@15 to fire::@8 Renumbering block makecharset::@7 to makecharset::@3 Renumbering block makecharset::@8 to makecharset::@4 Renumbering block makecharset::@13 to makecharset::@5 -Renumbering block makecharset::@16 to makecharset::@6 -Renumbering block makecharset::@18 to makecharset::@7 -Renumbering block makecharset::@19 to makecharset::@8 -Renumbering block makecharset::@20 to makecharset::@9 -Renumbering block makecharset::@21 to makecharset::@10 -Renumbering block makecharset::@22 to makecharset::@11 -Renumbering block makecharset::@25 to makecharset::@12 +Renumbering block makecharset::@14 to makecharset::@6 +Renumbering block makecharset::@16 to makecharset::@7 +Renumbering block makecharset::@17 to makecharset::@8 +Renumbering block makecharset::@18 to makecharset::@9 +Renumbering block makecharset::@19 to makecharset::@10 +Renumbering block makecharset::@20 to makecharset::@11 +Renumbering block makecharset::@21 to makecharset::@12 +Renumbering block makecharset::@22 to makecharset::@13 +Renumbering block makecharset::@25 to makecharset::@14 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -1332,7 +1432,6 @@ Adding NOP phi() at start of main::@8 Adding NOP phi() at start of main::@1 Adding NOP phi() at start of main::toD0181 Adding NOP phi() at start of main::toD0182 -Adding NOP phi() at start of fire::@7 Adding NOP phi() at start of makecharset FINAL CONTROL FLOW GRAPH @@ -1390,146 +1489,151 @@ main::@3: scope:[main] from main::toD0182 to:main::@1 fire: scope:[fire] from main::@1 main::@2 [25] (byte*) fire::screen#0 ← phi( main::@1/(const byte*) SCREEN1#0 main::@2/(const byte*) SCREEN2#0 ) - [26] (byte*~) fire::screen#11 ← (byte*) fire::screen#0 - to:fire::@1 -fire::@1: scope:[fire] from fire fire::@4 - [27] (byte*) fire::screen#4 ← phi( fire/(byte*~) fire::screen#11 fire::@4/(byte*) fire::screen#2 ) - [27] (byte*) fire::buffer#4 ← phi( fire/(const byte*) BUFFER#0 fire::@4/(byte*) fire::buffer#2 ) - [28] if((byte*) fire::buffer#4!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 - to:fire::@3 -fire::@3: scope:[fire] from fire::@1 - [29] (byte*) fire::screen#1 ← (byte*) fire::screen#0 + (word)(number) $18*(number) $28 - to:fire::@6 -fire::@6: scope:[fire] from fire::@3 fire::@8 - [30] (byte*) fire::screen#10 ← phi( fire::@8/(byte*) fire::screen#3 fire::@3/(byte*) fire::screen#1 ) - [30] (byte*) fire::buffer#10 ← phi( fire::@8/(byte*) fire::buffer#3 fire::@3/(const byte*) BUFFER#0+(word)(number) $18*(number) $28 ) - [31] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 - to:fire::@return -fire::@return: scope:[fire] from fire::@6 - [32] return - to:@return -fire::@7: scope:[fire] from fire::@6 - [33] phi() - [34] call sid_rnd - [35] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - to:fire::@8 -fire::@8: scope:[fire] from fire::@7 - [36] (byte~) fire::$12 ← (byte) sid_rnd::return#2 - [37] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 - [38] (byte~) fire::$14 ← (byte) $30 + (byte~) fire::$13 - [39] *((byte*) fire::buffer#10) ← (byte~) fire::$14 - [40] *((byte*) fire::screen#10) ← *((byte*) fire::buffer#10) - [41] (byte*) fire::screen#3 ← ++ (byte*) fire::screen#10 - [42] (byte*) fire::buffer#3 ← ++ (byte*) fire::buffer#10 - to:fire::@6 -fire::@2: scope:[fire] from fire::@1 - [43] (byte~) fire::$4 ← *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) - [44] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#4 + (byte) $28) - [45] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#4 + (byte) $29) - [46] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 - [47] if((byte) fire::c#0<(byte) 2+(byte) 1) goto fire::@4 + to:fire::@1_1 +fire::@1_1: scope:[fire] from fire + [26] (byte*~) fire::screen#19 ← (byte*) fire::screen#0 + to:fire::@2 +fire::@2: scope:[fire] from fire::@1 fire::@1_1 + [27] (byte*) fire::screen#11 ← phi( fire::@1/(byte*) fire::screen#2 fire::@1_1/(byte*~) fire::screen#19 ) + [27] (byte*) fire::buffer#11 ← phi( fire::@1/(byte*) fire::buffer#2 fire::@1_1/(const byte*) BUFFER#0 ) + [28] (byte~) fire::$4 ← *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) + [29] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#11 + (byte) $28) + [30] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#11 + (byte) $29) + [31] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 + [32] if((byte) fire::c#0<(byte) 2+(byte) 1) goto fire::@4 to:fire::@5 fire::@5: scope:[fire] from fire::@2 - [48] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 + [33] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 to:fire::@4 fire::@4: scope:[fire] from fire::@2 fire::@5 - [49] (byte) fire::c#2 ← phi( fire::@2/(byte) fire::c#0 fire::@5/(byte) fire::c#1 ) - [50] *((byte*) fire::buffer#4) ← (byte) fire::c#2 - [51] *((byte*) fire::screen#4) ← *((byte*) fire::buffer#4) - [52] (byte*) fire::screen#2 ← ++ (byte*) fire::screen#4 - [53] (byte*) fire::buffer#2 ← ++ (byte*) fire::buffer#4 + [34] (byte) fire::c#2 ← phi( fire::@2/(byte) fire::c#0 fire::@5/(byte) fire::c#1 ) + [35] *((byte*) fire::buffer#11) ← (byte) fire::c#2 + [36] *((byte*) fire::screen#11) ← *((byte*) fire::buffer#11) + [37] (byte*) fire::screen#2 ← ++ (byte*) fire::screen#11 + [38] (byte*) fire::buffer#2 ← ++ (byte*) fire::buffer#11 to:fire::@1 +fire::@1: scope:[fire] from fire::@4 + [39] if((byte*) fire::buffer#2!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 + to:fire::@3 +fire::@3: scope:[fire] from fire::@1 + [40] (byte*) fire::screen#1 ← (byte*) fire::screen#0 + (word)(number) $18*(number) $28 + to:fire::@7 +fire::@7: scope:[fire] from fire::@3 fire::@6 + [41] (byte*) fire::screen#15 ← phi( fire::@6/(byte*) fire::screen#10 fire::@3/(byte*) fire::screen#1 ) + [41] (byte*) fire::buffer#15 ← phi( fire::@6/(byte*) fire::buffer#10 fire::@3/(const byte*) BUFFER#0+(word)(number) $18*(number) $28 ) + [42] call sid_rnd + [43] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + to:fire::@8 +fire::@8: scope:[fire] from fire::@7 + [44] (byte~) fire::$12 ← (byte) sid_rnd::return#2 + [45] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 + [46] (byte~) fire::$14 ← (byte) $30 + (byte~) fire::$13 + [47] *((byte*) fire::buffer#15) ← (byte~) fire::$14 + [48] *((byte*) fire::screen#15) ← *((byte*) fire::buffer#15) + [49] (byte*) fire::screen#10 ← ++ (byte*) fire::screen#15 + [50] (byte*) fire::buffer#10 ← ++ (byte*) fire::buffer#15 + to:fire::@6 +fire::@6: scope:[fire] from fire::@8 + [51] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 + to:fire::@return +fire::@return: scope:[fire] from fire::@6 + [52] return + to:@return sid_rnd: scope:[sid_rnd] from fire::@7 - [54] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) + [53] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) to:sid_rnd::@return sid_rnd::@return: scope:[sid_rnd] from sid_rnd - [55] return + [54] return to:@return makecharset: scope:[makecharset] from main::@8 - [56] phi() + [55] phi() + to:makecharset::@2 +makecharset::@2: scope:[makecharset] from makecharset makecharset::@1 + [56] (byte*) makecharset::font#4 ← phi( makecharset::@1/(byte*) makecharset::font#1 makecharset/(const byte*) CHARSET#0 ) + [57] *((byte*) makecharset::font#4) ← (byte) 0 + [58] (byte*) makecharset::font#1 ← ++ (byte*) makecharset::font#4 to:makecharset::@1 -makecharset::@1: scope:[makecharset] from makecharset makecharset::@2 - [57] (byte*) makecharset::font#2 ← phi( makecharset/(const byte*) CHARSET#0 makecharset::@2/(byte*) makecharset::font#1 ) - [58] if((byte*) makecharset::font#2!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 +makecharset::@1: scope:[makecharset] from makecharset::@2 + [59] if((byte*) makecharset::font#1!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 + to:makecharset::@4 +makecharset::@4: scope:[makecharset] from makecharset::@1 makecharset::@3 + [60] (byte*) makecharset::font1#4 ← phi( makecharset::@3/(byte*) makecharset::font1#1 makecharset::@1/(const byte*) CHARSET#0+(word)(number) $40*(number) 8 ) + [61] *((byte*) makecharset::font1#4) ← (byte) $ff + [62] (byte*) makecharset::font1#1 ← ++ (byte*) makecharset::font1#4 to:makecharset::@3 -makecharset::@3: scope:[makecharset] from makecharset::@1 makecharset::@4 - [59] (byte*) makecharset::font1#2 ← phi( makecharset::@1/(const byte*) CHARSET#0+(word)(number) $40*(number) 8 makecharset::@4/(byte*) makecharset::font1#1 ) - [60] if((byte*) makecharset::font1#2!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 +makecharset::@3: scope:[makecharset] from makecharset::@4 + [63] if((byte*) makecharset::font1#1!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 + to:makecharset::@6 +makecharset::@6: scope:[makecharset] from makecharset::@3 makecharset::@5 + [64] (byte) makecharset::c#17 ← phi( makecharset::@5/(byte) makecharset::c#1 makecharset::@3/(byte) 0 ) + to:makecharset::@8 +makecharset::@8: scope:[makecharset] from makecharset::@6 makecharset::@7 + [65] (byte) makecharset::bc#10 ← phi( makecharset::@7/(byte) makecharset::bc#12 makecharset::@6/(byte) 0 ) + [65] (byte) makecharset::i#13 ← phi( makecharset::@7/(byte) makecharset::i#1 makecharset::@6/(byte) 0 ) + to:makecharset::@11 +makecharset::@11: scope:[makecharset] from makecharset::@10 makecharset::@8 + [66] (byte) makecharset::b#8 ← phi( makecharset::@10/(byte) makecharset::b#2 makecharset::@8/(byte) 0 ) + [66] (byte) makecharset::bc#13 ← phi( makecharset::@10/(byte) makecharset::bc#12 makecharset::@8/(byte) makecharset::bc#10 ) + [66] (byte) makecharset::ii#6 ← phi( makecharset::@10/(byte) makecharset::ii#1 makecharset::@8/(byte) 0 ) + [67] (byte) makecharset::bc#1 ← (byte) makecharset::bc#13 + (byte) makecharset::c#17 + [68] if((byte) makecharset::bc#1<(byte) $3f+(byte) 1) goto makecharset::@13 + to:makecharset::@14 +makecharset::@14: scope:[makecharset] from makecharset::@11 + [69] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 + [70] (byte~) makecharset::$11 ← (byte) makecharset::i#13 & (byte) 1 + [71] (byte~) makecharset::$12 ← (byte) makecharset::ii#6 + (byte~) makecharset::$11 + [72] (byte~) makecharset::$13 ← (byte~) makecharset::$12 & (byte) 7 + [73] (byte) makecharset::b#1 ← (byte) makecharset::b#8 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) + to:makecharset::@13 +makecharset::@13: scope:[makecharset] from makecharset::@11 makecharset::@14 + [74] (byte) makecharset::b#2 ← phi( makecharset::@11/(byte) makecharset::b#8 makecharset::@14/(byte) makecharset::b#1 ) + [74] (byte) makecharset::bc#12 ← phi( makecharset::@11/(byte) makecharset::bc#1 makecharset::@14/(byte) makecharset::bc#2 ) + [75] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#6 + to:makecharset::@10 +makecharset::@10: scope:[makecharset] from makecharset::@13 + [76] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@11 + to:makecharset::@12 +makecharset::@12: scope:[makecharset] from makecharset::@10 + [77] (word~) makecharset::$15 ← (word)(byte) makecharset::c#17 + [78] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 + [79] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#13 + [80] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 + [81] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 + [82] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 + to:makecharset::@7 +makecharset::@7: scope:[makecharset] from makecharset::@12 + [83] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@8 + to:makecharset::@9 +makecharset::@9: scope:[makecharset] from makecharset::@7 + [84] (byte) makecharset::c#1 ← ++ (byte) makecharset::c#17 to:makecharset::@5 -makecharset::@5: scope:[makecharset] from makecharset::@3 makecharset::@7 - [61] (byte) makecharset::c#2 ← phi( makecharset::@7/(byte) makecharset::c#1 makecharset::@3/(byte) 0 ) - [62] if((byte) makecharset::c#2<(byte) $40) goto makecharset::@6 +makecharset::@5: scope:[makecharset] from makecharset::@9 + [85] if((byte) makecharset::c#1<(byte) $40) goto makecharset::@6 to:makecharset::@return makecharset::@return: scope:[makecharset] from makecharset::@5 - [63] return + [86] return to:@return -makecharset::@6: scope:[makecharset] from makecharset::@10 makecharset::@5 - [64] (byte) makecharset::bc#6 ← phi( makecharset::@5/(byte) 0 makecharset::@10/(byte) makecharset::bc#3 ) - [64] (byte) makecharset::i#2 ← phi( makecharset::@5/(byte) 0 makecharset::@10/(byte) makecharset::i#1 ) - [65] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@8 - to:makecharset::@7 -makecharset::@7: scope:[makecharset] from makecharset::@6 - [66] (byte) makecharset::c#1 ← ++ (byte) makecharset::c#2 - to:makecharset::@5 -makecharset::@8: scope:[makecharset] from makecharset::@11 makecharset::@6 - [67] (byte) makecharset::b#2 ← phi( makecharset::@6/(byte) 0 makecharset::@11/(byte) makecharset::b#6 ) - [67] (byte) makecharset::bc#3 ← phi( makecharset::@6/(byte) makecharset::bc#6 makecharset::@11/(byte) makecharset::bc#7 ) - [67] (byte) makecharset::ii#2 ← phi( makecharset::@6/(byte) 0 makecharset::@11/(byte) makecharset::ii#1 ) - [68] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@9 - to:makecharset::@10 -makecharset::@10: scope:[makecharset] from makecharset::@8 - [69] (word~) makecharset::$15 ← (word)(byte) makecharset::c#2 - [70] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 - [71] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#2 - [72] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 - [73] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 - [74] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 - to:makecharset::@6 -makecharset::@9: scope:[makecharset] from makecharset::@8 - [75] (byte) makecharset::bc#1 ← (byte) makecharset::bc#3 + (byte) makecharset::c#2 - [76] if((byte) makecharset::bc#1<(byte) $3f+(byte) 1) goto makecharset::@11 - to:makecharset::@12 -makecharset::@12: scope:[makecharset] from makecharset::@9 - [77] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 - [78] (byte~) makecharset::$11 ← (byte) makecharset::i#2 & (byte) 1 - [79] (byte~) makecharset::$12 ← (byte) makecharset::ii#2 + (byte~) makecharset::$11 - [80] (byte~) makecharset::$13 ← (byte~) makecharset::$12 & (byte) 7 - [81] (byte) makecharset::b#1 ← (byte) makecharset::b#2 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) - to:makecharset::@11 -makecharset::@11: scope:[makecharset] from makecharset::@12 makecharset::@9 - [82] (byte) makecharset::b#6 ← phi( makecharset::@9/(byte) makecharset::b#2 makecharset::@12/(byte) makecharset::b#1 ) - [82] (byte) makecharset::bc#7 ← phi( makecharset::@9/(byte) makecharset::bc#1 makecharset::@12/(byte) makecharset::bc#2 ) - [83] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 - to:makecharset::@8 -makecharset::@4: scope:[makecharset] from makecharset::@3 - [84] *((byte*) makecharset::font1#2) ← (byte) $ff - [85] (byte*) makecharset::font1#1 ← ++ (byte*) makecharset::font1#2 - to:makecharset::@3 -makecharset::@2: scope:[makecharset] from makecharset::@1 - [86] *((byte*) makecharset::font#2) ← (byte) 0 - [87] (byte*) makecharset::font#1 ← ++ (byte*) makecharset::font#2 - to:makecharset::@1 sid_rnd_init: scope:[sid_rnd_init] from main::@7 - [88] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff - [89] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 + [87] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff + [88] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - [90] return + [89] return to:@return fillscreen: scope:[fillscreen] from main main::@4 main::@5 main::@6 - [91] (byte*) fillscreen::screen#6 ← phi( main/(const byte*) BUFFER#0 main::@5/(const byte*) SCREEN2#0 main::@6/(const byte*) COLS#0 main::@4/(const byte*) SCREEN1#0 ) - [91] (byte) fillscreen::fill#5 ← phi( main/(byte) 0 main::@5/(byte) 0 main::@6/(const byte) YELLOW#0 main::@4/(byte) 0 ) + [90] (byte*) fillscreen::screen#6 ← phi( main/(const byte*) BUFFER#0 main::@5/(const byte*) SCREEN2#0 main::@6/(const byte*) COLS#0 main::@4/(const byte*) SCREEN1#0 ) + [90] (byte) fillscreen::fill#5 ← phi( main/(byte) 0 main::@5/(byte) 0 main::@6/(const byte) YELLOW#0 main::@4/(byte) 0 ) to:fillscreen::@1 fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@1 - [92] (word) fillscreen::i#2 ← phi( fillscreen/(word) 0 fillscreen::@1/(word) fillscreen::i#1 ) - [92] (byte*) fillscreen::screen#5 ← phi( fillscreen/(byte*) fillscreen::screen#6 fillscreen::@1/(byte*) fillscreen::screen#4 ) - [93] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 - [94] (byte*) fillscreen::screen#4 ← ++ (byte*) fillscreen::screen#5 - [95] (word) fillscreen::i#1 ← ++ (word) fillscreen::i#2 - [96] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 + [91] (word) fillscreen::i#2 ← phi( fillscreen/(word) 0 fillscreen::@1/(word) fillscreen::i#1 ) + [91] (byte*) fillscreen::screen#5 ← phi( fillscreen/(byte*) fillscreen::screen#6 fillscreen::@1/(byte*) fillscreen::screen#4 ) + [92] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 + [93] (byte*) fillscreen::screen#4 ← ++ (byte*) fillscreen::screen#5 + [94] (word) fillscreen::i#1 ← ++ (word) fillscreen::i#2 + [95] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 to:fillscreen::@return fillscreen::@return: scope:[fillscreen] from fillscreen::@1 - [97] return + [96] return to:@return @@ -1566,10 +1670,10 @@ VARIABLE REGISTER WEIGHTS (byte~) fire::$5 202.0 (byte~) fire::$6 202.0 (byte*) fire::buffer -(byte*) fire::buffer#10 45.90909090909091 -(byte*) fire::buffer#2 202.0 -(byte*) fire::buffer#3 202.0 -(byte*) fire::buffer#4 75.75 +(byte*) fire::buffer#10 151.5 +(byte*) fire::buffer#11 73.45454545454545 +(byte*) fire::buffer#15 44.888888888888886 +(byte*) fire::buffer#2 151.5 (byte) fire::c (byte) fire::c#0 202.0 (byte) fire::c#1 202.0 @@ -1577,11 +1681,11 @@ VARIABLE REGISTER WEIGHTS (byte*) fire::screen (byte*) fire::screen#0 0.26666666666666666 (byte*) fire::screen#1 4.0 -(byte*) fire::screen#10 30.5 -(byte*~) fire::screen#11 4.0 -(byte*) fire::screen#2 101.0 -(byte*) fire::screen#3 101.0 -(byte*) fire::screen#4 27.727272727272727 +(byte*) fire::screen#10 67.33333333333333 +(byte*) fire::screen#11 30.5 +(byte*) fire::screen#15 38.125 +(byte*~) fire::screen#19 4.0 +(byte*) fire::screen#2 67.33333333333333 (byte*) fire::screenbase (void()) main() (word~) main::toD0181_$0 @@ -1618,31 +1722,31 @@ VARIABLE REGISTER WEIGHTS (byte*~) makecharset::$18 202.0 (byte) makecharset::b (byte) makecharset::b#1 2002.0 -(byte) makecharset::b#2 258.6666666666667 -(byte) makecharset::b#6 1501.5 +(byte) makecharset::b#2 443.42857142857144 +(byte) makecharset::b#8 429.0 (byte) makecharset::bc (byte) makecharset::bc#1 2002.0 +(byte) makecharset::bc#10 202.0 +(byte) makecharset::bc#12 310.4 +(byte) makecharset::bc#13 2103.0 (byte) makecharset::bc#2 400.4 -(byte) makecharset::bc#3 275.5 -(byte) makecharset::bc#6 101.0 -(byte) makecharset::bc#7 1501.5 (byte[8]) makecharset::bittab (byte) makecharset::c -(byte) makecharset::c#1 22.0 -(byte) makecharset::c#2 49.238095238095234 +(byte) makecharset::c#1 16.5 +(byte) makecharset::c#17 51.14999999999999 (byte*) makecharset::charset (byte*) makecharset::font -(byte*) makecharset::font#1 22.0 -(byte*) makecharset::font#2 14.666666666666666 +(byte*) makecharset::font#1 16.5 +(byte*) makecharset::font#4 16.5 (byte*) makecharset::font1 -(byte*) makecharset::font1#1 22.0 -(byte*) makecharset::font1#2 14.666666666666666 +(byte*) makecharset::font1#1 16.5 +(byte*) makecharset::font1#4 16.5 (byte) makecharset::i -(byte) makecharset::i#1 202.0 -(byte) makecharset::i#2 78.05555555555556 +(byte) makecharset::i#1 151.5 +(byte) makecharset::i#13 76.70588235294117 (byte) makecharset::ii -(byte) makecharset::ii#1 2002.0 -(byte) makecharset::ii#2 400.4 +(byte) makecharset::ii#1 1501.5 +(byte) makecharset::ii#6 333.6666666666667 (byte()) sid_rnd() (byte) sid_rnd::return (byte) sid_rnd::return#0 34.33333333333333 @@ -1651,99 +1755,99 @@ VARIABLE REGISTER WEIGHTS Initial phi equivalence classes [ fire::screen#0 ] -[ fire::buffer#4 fire::buffer#2 ] -[ fire::screen#4 fire::screen#11 fire::screen#2 ] -[ fire::buffer#10 fire::buffer#3 ] -[ fire::screen#10 fire::screen#3 fire::screen#1 ] +[ fire::buffer#11 fire::buffer#2 ] +[ fire::screen#11 fire::screen#2 fire::screen#19 ] [ fire::c#2 fire::c#0 fire::c#1 ] -[ makecharset::font#2 makecharset::font#1 ] -[ makecharset::font1#2 makecharset::font1#1 ] -[ makecharset::c#2 makecharset::c#1 ] -[ makecharset::i#2 makecharset::i#1 ] -[ makecharset::bc#6 makecharset::bc#3 makecharset::bc#7 makecharset::bc#1 makecharset::bc#2 ] -[ makecharset::ii#2 makecharset::ii#1 ] -[ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] +[ fire::buffer#15 fire::buffer#10 ] +[ fire::screen#15 fire::screen#10 fire::screen#1 ] +[ makecharset::font#4 makecharset::font#1 ] +[ makecharset::font1#4 makecharset::font1#1 ] +[ makecharset::c#17 makecharset::c#1 ] +[ makecharset::i#13 makecharset::i#1 ] +[ makecharset::ii#6 makecharset::ii#1 ] +[ makecharset::bc#13 makecharset::bc#10 makecharset::bc#12 makecharset::bc#1 makecharset::bc#2 ] +[ makecharset::b#8 makecharset::b#2 makecharset::b#1 ] [ fillscreen::fill#5 ] [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] [ fillscreen::i#2 fillscreen::i#1 ] +Added variable fire::$4 to zero page equivalence class [ fire::$4 ] +Added variable fire::$5 to zero page equivalence class [ fire::$5 ] +Added variable fire::$6 to zero page equivalence class [ fire::$6 ] Added variable sid_rnd::return#2 to zero page equivalence class [ sid_rnd::return#2 ] Added variable fire::$12 to zero page equivalence class [ fire::$12 ] Added variable fire::$13 to zero page equivalence class [ fire::$13 ] Added variable fire::$14 to zero page equivalence class [ fire::$14 ] -Added variable fire::$4 to zero page equivalence class [ fire::$4 ] -Added variable fire::$5 to zero page equivalence class [ fire::$5 ] -Added variable fire::$6 to zero page equivalence class [ fire::$6 ] Added variable sid_rnd::return#0 to zero page equivalence class [ sid_rnd::return#0 ] +Added variable makecharset::$11 to zero page equivalence class [ makecharset::$11 ] +Added variable makecharset::$12 to zero page equivalence class [ makecharset::$12 ] +Added variable makecharset::$13 to zero page equivalence class [ makecharset::$13 ] Added variable makecharset::$15 to zero page equivalence class [ makecharset::$15 ] Added variable makecharset::$16 to zero page equivalence class [ makecharset::$16 ] Added variable makecharset::$17 to zero page equivalence class [ makecharset::$17 ] Added variable makecharset::$18 to zero page equivalence class [ makecharset::$18 ] -Added variable makecharset::$11 to zero page equivalence class [ makecharset::$11 ] -Added variable makecharset::$12 to zero page equivalence class [ makecharset::$12 ] -Added variable makecharset::$13 to zero page equivalence class [ makecharset::$13 ] Complete equivalence classes [ fire::screen#0 ] -[ fire::buffer#4 fire::buffer#2 ] -[ fire::screen#4 fire::screen#11 fire::screen#2 ] -[ fire::buffer#10 fire::buffer#3 ] -[ fire::screen#10 fire::screen#3 fire::screen#1 ] +[ fire::buffer#11 fire::buffer#2 ] +[ fire::screen#11 fire::screen#2 fire::screen#19 ] [ fire::c#2 fire::c#0 fire::c#1 ] -[ makecharset::font#2 makecharset::font#1 ] -[ makecharset::font1#2 makecharset::font1#1 ] -[ makecharset::c#2 makecharset::c#1 ] -[ makecharset::i#2 makecharset::i#1 ] -[ makecharset::bc#6 makecharset::bc#3 makecharset::bc#7 makecharset::bc#1 makecharset::bc#2 ] -[ makecharset::ii#2 makecharset::ii#1 ] -[ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] +[ fire::buffer#15 fire::buffer#10 ] +[ fire::screen#15 fire::screen#10 fire::screen#1 ] +[ makecharset::font#4 makecharset::font#1 ] +[ makecharset::font1#4 makecharset::font1#1 ] +[ makecharset::c#17 makecharset::c#1 ] +[ makecharset::i#13 makecharset::i#1 ] +[ makecharset::ii#6 makecharset::ii#1 ] +[ makecharset::bc#13 makecharset::bc#10 makecharset::bc#12 makecharset::bc#1 makecharset::bc#2 ] +[ makecharset::b#8 makecharset::b#2 makecharset::b#1 ] [ fillscreen::fill#5 ] [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] [ fillscreen::i#2 fillscreen::i#1 ] +[ fire::$4 ] +[ fire::$5 ] +[ fire::$6 ] [ sid_rnd::return#2 ] [ fire::$12 ] [ fire::$13 ] [ fire::$14 ] -[ fire::$4 ] -[ fire::$5 ] -[ fire::$6 ] [ sid_rnd::return#0 ] +[ makecharset::$11 ] +[ makecharset::$12 ] +[ makecharset::$13 ] [ makecharset::$15 ] [ makecharset::$16 ] [ makecharset::$17 ] [ makecharset::$18 ] -[ makecharset::$11 ] -[ makecharset::$12 ] -[ makecharset::$13 ] Allocated zp ZP_WORD:2 [ fire::screen#0 ] -Allocated zp ZP_WORD:4 [ fire::buffer#4 fire::buffer#2 ] -Allocated zp ZP_WORD:6 [ fire::screen#4 fire::screen#11 fire::screen#2 ] -Allocated zp ZP_WORD:8 [ fire::buffer#10 fire::buffer#3 ] -Allocated zp ZP_WORD:10 [ fire::screen#10 fire::screen#3 fire::screen#1 ] -Allocated zp ZP_BYTE:12 [ fire::c#2 fire::c#0 fire::c#1 ] -Allocated zp ZP_WORD:13 [ makecharset::font#2 makecharset::font#1 ] -Allocated zp ZP_WORD:15 [ makecharset::font1#2 makecharset::font1#1 ] -Allocated zp ZP_BYTE:17 [ makecharset::c#2 makecharset::c#1 ] -Allocated zp ZP_BYTE:18 [ makecharset::i#2 makecharset::i#1 ] -Allocated zp ZP_BYTE:19 [ makecharset::bc#6 makecharset::bc#3 makecharset::bc#7 makecharset::bc#1 makecharset::bc#2 ] -Allocated zp ZP_BYTE:20 [ makecharset::ii#2 makecharset::ii#1 ] -Allocated zp ZP_BYTE:21 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] +Allocated zp ZP_WORD:4 [ fire::buffer#11 fire::buffer#2 ] +Allocated zp ZP_WORD:6 [ fire::screen#11 fire::screen#2 fire::screen#19 ] +Allocated zp ZP_BYTE:8 [ fire::c#2 fire::c#0 fire::c#1 ] +Allocated zp ZP_WORD:9 [ fire::buffer#15 fire::buffer#10 ] +Allocated zp ZP_WORD:11 [ fire::screen#15 fire::screen#10 fire::screen#1 ] +Allocated zp ZP_WORD:13 [ makecharset::font#4 makecharset::font#1 ] +Allocated zp ZP_WORD:15 [ makecharset::font1#4 makecharset::font1#1 ] +Allocated zp ZP_BYTE:17 [ makecharset::c#17 makecharset::c#1 ] +Allocated zp ZP_BYTE:18 [ makecharset::i#13 makecharset::i#1 ] +Allocated zp ZP_BYTE:19 [ makecharset::ii#6 makecharset::ii#1 ] +Allocated zp ZP_BYTE:20 [ makecharset::bc#13 makecharset::bc#10 makecharset::bc#12 makecharset::bc#1 makecharset::bc#2 ] +Allocated zp ZP_BYTE:21 [ makecharset::b#8 makecharset::b#2 makecharset::b#1 ] Allocated zp ZP_BYTE:22 [ fillscreen::fill#5 ] Allocated zp ZP_WORD:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] Allocated zp ZP_WORD:25 [ fillscreen::i#2 fillscreen::i#1 ] -Allocated zp ZP_BYTE:27 [ sid_rnd::return#2 ] -Allocated zp ZP_BYTE:28 [ fire::$12 ] -Allocated zp ZP_BYTE:29 [ fire::$13 ] -Allocated zp ZP_BYTE:30 [ fire::$14 ] -Allocated zp ZP_BYTE:31 [ fire::$4 ] -Allocated zp ZP_BYTE:32 [ fire::$5 ] -Allocated zp ZP_BYTE:33 [ fire::$6 ] +Allocated zp ZP_BYTE:27 [ fire::$4 ] +Allocated zp ZP_BYTE:28 [ fire::$5 ] +Allocated zp ZP_BYTE:29 [ fire::$6 ] +Allocated zp ZP_BYTE:30 [ sid_rnd::return#2 ] +Allocated zp ZP_BYTE:31 [ fire::$12 ] +Allocated zp ZP_BYTE:32 [ fire::$13 ] +Allocated zp ZP_BYTE:33 [ fire::$14 ] Allocated zp ZP_BYTE:34 [ sid_rnd::return#0 ] -Allocated zp ZP_WORD:35 [ makecharset::$15 ] -Allocated zp ZP_WORD:37 [ makecharset::$16 ] -Allocated zp ZP_WORD:39 [ makecharset::$17 ] -Allocated zp ZP_WORD:41 [ makecharset::$18 ] -Allocated zp ZP_BYTE:43 [ makecharset::$11 ] -Allocated zp ZP_BYTE:44 [ makecharset::$12 ] -Allocated zp ZP_BYTE:45 [ makecharset::$13 ] +Allocated zp ZP_BYTE:35 [ makecharset::$11 ] +Allocated zp ZP_BYTE:36 [ makecharset::$12 ] +Allocated zp ZP_BYTE:37 [ makecharset::$13 ] +Allocated zp ZP_WORD:38 [ makecharset::$15 ] +Allocated zp ZP_WORD:40 [ makecharset::$16 ] +Allocated zp ZP_WORD:42 [ makecharset::$17 ] +Allocated zp ZP_WORD:44 [ makecharset::$18 ] INITIAL ASM Target platform is c64basic @@ -1802,14 +1906,14 @@ main: { lda #BLACK sta BGCOL // [7] call fillscreen - // [91] phi from main to fillscreen [phi:main->fillscreen] + // [90] phi from main to fillscreen [phi:main->fillscreen] fillscreen_from_main: - // [91] phi (byte*) fillscreen::screen#6 = (const byte*) BUFFER#0 [phi:main->fillscreen#0] -- pbuz1=pbuc1 + // [90] phi (byte*) fillscreen::screen#6 = (const byte*) BUFFER#0 [phi:main->fillscreen#0] -- pbuz1=pbuc1 lda #BUFFER sta fillscreen.screen+1 - // [91] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main->fillscreen#1] -- vbuz1=vbuc1 + // [90] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main->fillscreen#1] -- vbuz1=vbuc1 lda #0 sta fillscreen.fill jsr fillscreen @@ -1819,14 +1923,14 @@ main: { // main::@4 b4: // [9] call fillscreen - // [91] phi from main::@4 to fillscreen [phi:main::@4->fillscreen] + // [90] phi from main::@4 to fillscreen [phi:main::@4->fillscreen] fillscreen_from_b4: - // [91] phi (byte*) fillscreen::screen#6 = (const byte*) SCREEN1#0 [phi:main::@4->fillscreen#0] -- pbuz1=pbuc1 + // [90] phi (byte*) fillscreen::screen#6 = (const byte*) SCREEN1#0 [phi:main::@4->fillscreen#0] -- pbuz1=pbuc1 lda #SCREEN1 sta fillscreen.screen+1 - // [91] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main::@4->fillscreen#1] -- vbuz1=vbuc1 + // [90] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main::@4->fillscreen#1] -- vbuz1=vbuc1 lda #0 sta fillscreen.fill jsr fillscreen @@ -1836,14 +1940,14 @@ main: { // main::@5 b5: // [11] call fillscreen - // [91] phi from main::@5 to fillscreen [phi:main::@5->fillscreen] + // [90] phi from main::@5 to fillscreen [phi:main::@5->fillscreen] fillscreen_from_b5: - // [91] phi (byte*) fillscreen::screen#6 = (const byte*) SCREEN2#0 [phi:main::@5->fillscreen#0] -- pbuz1=pbuc1 + // [90] phi (byte*) fillscreen::screen#6 = (const byte*) SCREEN2#0 [phi:main::@5->fillscreen#0] -- pbuz1=pbuc1 lda #SCREEN2 sta fillscreen.screen+1 - // [91] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main::@5->fillscreen#1] -- vbuz1=vbuc1 + // [90] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main::@5->fillscreen#1] -- vbuz1=vbuc1 lda #0 sta fillscreen.fill jsr fillscreen @@ -1853,14 +1957,14 @@ main: { // main::@6 b6: // [13] call fillscreen - // [91] phi from main::@6 to fillscreen [phi:main::@6->fillscreen] + // [90] phi from main::@6 to fillscreen [phi:main::@6->fillscreen] fillscreen_from_b6: - // [91] phi (byte*) fillscreen::screen#6 = (const byte*) COLS#0 [phi:main::@6->fillscreen#0] -- pbuz1=pbuc1 + // [90] phi (byte*) fillscreen::screen#6 = (const byte*) COLS#0 [phi:main::@6->fillscreen#0] -- pbuz1=pbuc1 lda #COLS sta fillscreen.screen+1 - // [91] phi (byte) fillscreen::fill#5 = (const byte) YELLOW#0 [phi:main::@6->fillscreen#1] -- vbuz1=vbuc1 + // [90] phi (byte) fillscreen::fill#5 = (const byte) YELLOW#0 [phi:main::@6->fillscreen#1] -- vbuz1=vbuc1 lda #YELLOW sta fillscreen.fill jsr fillscreen @@ -1877,7 +1981,7 @@ main: { // main::@8 b8: // [17] call makecharset - // [56] phi from main::@8 to makecharset [phi:main::@8->makecharset] + // [55] phi from main::@8 to makecharset [phi:main::@8->makecharset] makecharset_from_b8: jsr makecharset // [18] phi from main::@3 main::@8 to main::@1 [phi:main::@3/main::@8->main::@1] @@ -1931,50 +2035,122 @@ main: { // fire // Animate the fire on the passed screen. Uses BUFFER to store the current values. fire: { - .label _4 = $1f - .label _5 = $20 - .label _6 = $21 - .label _12 = $1c - .label _13 = $1d - .label _14 = $1e + .label _4 = $1b + .label _5 = $1c + .label _6 = $1d + .label _12 = $1f + .label _13 = $20 + .label _14 = $21 .label screen = 2 - .label c = $c - .label screen_1 = $a + .label c = 8 + .label screen_1 = $b .label screen_2 = 6 .label buffer = 4 - .label screen_3 = $a - .label buffer_3 = 8 - .label screen_4 = 6 - .label buffer_10 = 8 - .label screen_10 = $a + .label buffer_10 = 9 + .label screen_10 = $b .label screen_11 = 6 - // [26] (byte*~) fire::screen#11 ← (byte*) fire::screen#0 -- pbuz1=pbuz2 + .label buffer_15 = 9 + .label screen_15 = $b + .label screen_19 = 6 + jmp b1_1 + // fire::@1_1 + b1_1: + // [26] (byte*~) fire::screen#19 ← (byte*) fire::screen#0 -- pbuz1=pbuz2 lda screen - sta screen_11 + sta screen_19 lda screen+1 - sta screen_11+1 - // [27] phi from fire to fire::@1 [phi:fire->fire::@1] - b1_from_fire: - // [27] phi (byte*) fire::screen#4 = (byte*~) fire::screen#11 [phi:fire->fire::@1#0] -- register_copy - // [27] phi (byte*) fire::buffer#4 = (const byte*) BUFFER#0 [phi:fire->fire::@1#1] -- pbuz1=pbuc1 + sta screen_19+1 + // [27] phi from fire::@1_1 to fire::@2 [phi:fire::@1_1->fire::@2] + b2_from_b1_1: + // [27] phi (byte*) fire::screen#11 = (byte*~) fire::screen#19 [phi:fire::@1_1->fire::@2#0] -- register_copy + // [27] phi (byte*) fire::buffer#11 = (const byte*) BUFFER#0 [phi:fire::@1_1->fire::@2#1] -- pbuz1=pbuc1 lda #BUFFER sta buffer+1 + jmp b2 + // [27] phi from fire::@1 to fire::@2 [phi:fire::@1->fire::@2] + b2_from_b1: + // [27] phi (byte*) fire::screen#11 = (byte*) fire::screen#2 [phi:fire::@1->fire::@2#0] -- register_copy + // [27] phi (byte*) fire::buffer#11 = (byte*) fire::buffer#2 [phi:fire::@1->fire::@2#1] -- register_copy + jmp b2 + // fire::@2 + b2: + // [28] (byte~) fire::$4 ← *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) -- vbuz1=pbuz2_derefidx_vbuc1_plus_pbuz2_derefidx_vbuc2 + ldy #$28-1 + clc + lda (buffer),y + ldy #$28-1 + adc (buffer),y + sta _4 + // [29] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#11 + (byte) $28) -- vbuz1=vbuz2_plus_pbuz3_derefidx_vbuc1 + lda _4 + ldy #$28 + clc + adc (buffer),y + sta _5 + // [30] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#11 + (byte) $29) -- vbuz1=vbuz2_plus_pbuz3_derefidx_vbuc1 + lda _5 + ldy #$29 + clc + adc (buffer),y + sta _6 + // [31] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 -- vbuz1=vbuz2_ror_2 + lda _6 + lsr + lsr + sta c + // [32] if((byte) fire::c#0<(byte) 2+(byte) 1) goto fire::@4 -- vbuz1_lt_vbuc1_then_la1 + lda c + cmp #2+1 + bcc b4_from_b2 + jmp b5 + // fire::@5 + b5: + // [33] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 + lax c + axs #3 + stx c + // [34] phi from fire::@2 fire::@5 to fire::@4 [phi:fire::@2/fire::@5->fire::@4] + b4_from_b2: + b4_from_b5: + // [34] phi (byte) fire::c#2 = (byte) fire::c#0 [phi:fire::@2/fire::@5->fire::@4#0] -- register_copy + jmp b4 + // fire::@4 + b4: + // [35] *((byte*) fire::buffer#11) ← (byte) fire::c#2 -- _deref_pbuz1=vbuz2 + lda c + ldy #0 + sta (buffer),y + // [36] *((byte*) fire::screen#11) ← *((byte*) fire::buffer#11) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (buffer),y + ldy #0 + sta (screen_11),y + // [37] (byte*) fire::screen#2 ← ++ (byte*) fire::screen#11 -- pbuz1=_inc_pbuz1 + inc screen_2 + bne !+ + inc screen_2+1 + !: + // [38] (byte*) fire::buffer#2 ← ++ (byte*) fire::buffer#11 -- pbuz1=_inc_pbuz1 + inc buffer + bne !+ + inc buffer+1 + !: jmp b1 // fire::@1 b1: - // [28] if((byte*) fire::buffer#4!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 -- pbuz1_neq_pbuc1_then_la1 + // [39] if((byte*) fire::buffer#2!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 -- pbuz1_neq_pbuc1_then_la1 lda buffer+1 cmp #>BUFFER+$18*$28 - bne b2 + bne b2_from_b1 lda buffer cmp #$18*$28 sta screen_1+1 - // [30] phi from fire::@3 to fire::@6 [phi:fire::@3->fire::@6] - b6_from_b3: - // [30] phi (byte*) fire::screen#10 = (byte*) fire::screen#1 [phi:fire::@3->fire::@6#0] -- register_copy - // [30] phi (byte*) fire::buffer#10 = (const byte*) BUFFER#0+(word)(number) $18*(number) $28 [phi:fire::@3->fire::@6#1] -- pbuz1=pbuc1 + // [41] phi from fire::@3 to fire::@7 [phi:fire::@3->fire::@7] + b7_from_b3: + // [41] phi (byte*) fire::screen#15 = (byte*) fire::screen#1 [phi:fire::@3->fire::@7#0] -- register_copy + // [41] phi (byte*) fire::buffer#15 = (const byte*) BUFFER#0+(word)(number) $18*(number) $28 [phi:fire::@3->fire::@7#1] -- pbuz1=pbuc1 lda #BUFFER+$18*$28 - sta buffer_10+1 + sta buffer_15+1 + jmp b7 + // [41] phi from fire::@6 to fire::@7 [phi:fire::@6->fire::@7] + b7_from_b6: + // [41] phi (byte*) fire::screen#15 = (byte*) fire::screen#10 [phi:fire::@6->fire::@7#0] -- register_copy + // [41] phi (byte*) fire::buffer#15 = (byte*) fire::buffer#10 [phi:fire::@6->fire::@7#1] -- register_copy + jmp b7 + // fire::@7 + b7: + // [42] call sid_rnd + jsr sid_rnd + // [43] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 + lda sid_rnd.return + sta sid_rnd.return_2 + jmp b8 + // fire::@8 + b8: + // [44] (byte~) fire::$12 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 + lda sid_rnd.return_2 + sta _12 + // [45] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + lda _12 + lsr + lsr + lsr + lsr + sta _13 + // [46] (byte~) fire::$14 ← (byte) $30 + (byte~) fire::$13 -- vbuz1=vbuc1_plus_vbuz2 + lax _13 + axs #-[$30] + stx _14 + // [47] *((byte*) fire::buffer#15) ← (byte~) fire::$14 -- _deref_pbuz1=vbuz2 + lda _14 + ldy #0 + sta (buffer_15),y + // [48] *((byte*) fire::screen#15) ← *((byte*) fire::buffer#15) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (buffer_15),y + ldy #0 + sta (screen_15),y + // [49] (byte*) fire::screen#10 ← ++ (byte*) fire::screen#15 -- pbuz1=_inc_pbuz1 + inc screen_10 + bne !+ + inc screen_10+1 + !: + // [50] (byte*) fire::buffer#10 ← ++ (byte*) fire::buffer#15 -- pbuz1=_inc_pbuz1 + inc buffer_10 + bne !+ + inc buffer_10+1 + !: jmp b6 // fire::@6 b6: - // [31] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 -- pbuz1_neq_pbuc1_then_la1 + // [51] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 -- pbuz1_neq_pbuc1_then_la1 lda buffer_10+1 cmp #>BUFFER+$19*$28 bne b7_from_b6 @@ -2003,260 +2228,214 @@ fire: { jmp breturn // fire::@return breturn: - // [32] return + // [52] return rts - // [33] phi from fire::@6 to fire::@7 [phi:fire::@6->fire::@7] - b7_from_b6: - jmp b7 - // fire::@7 - b7: - // [34] call sid_rnd - jsr sid_rnd - // [35] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 - lda sid_rnd.return - sta sid_rnd.return_2 - jmp b8 - // fire::@8 - b8: - // [36] (byte~) fire::$12 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 - lda sid_rnd.return_2 - sta _12 - // [37] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 -- vbuz1=vbuz2_ror_4 - lda _12 - lsr - lsr - lsr - lsr - sta _13 - // [38] (byte~) fire::$14 ← (byte) $30 + (byte~) fire::$13 -- vbuz1=vbuc1_plus_vbuz2 - lax _13 - axs #-[$30] - stx _14 - // [39] *((byte*) fire::buffer#10) ← (byte~) fire::$14 -- _deref_pbuz1=vbuz2 - lda _14 - ldy #0 - sta (buffer_10),y - // [40] *((byte*) fire::screen#10) ← *((byte*) fire::buffer#10) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (buffer_10),y - ldy #0 - sta (screen_10),y - // [41] (byte*) fire::screen#3 ← ++ (byte*) fire::screen#10 -- pbuz1=_inc_pbuz1 - inc screen_3 - bne !+ - inc screen_3+1 - !: - // [42] (byte*) fire::buffer#3 ← ++ (byte*) fire::buffer#10 -- pbuz1=_inc_pbuz1 - inc buffer_3 - bne !+ - inc buffer_3+1 - !: - // [30] phi from fire::@8 to fire::@6 [phi:fire::@8->fire::@6] - b6_from_b8: - // [30] phi (byte*) fire::screen#10 = (byte*) fire::screen#3 [phi:fire::@8->fire::@6#0] -- register_copy - // [30] phi (byte*) fire::buffer#10 = (byte*) fire::buffer#3 [phi:fire::@8->fire::@6#1] -- register_copy - jmp b6 - // fire::@2 - b2: - // [43] (byte~) fire::$4 ← *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) -- vbuz1=pbuz2_derefidx_vbuc1_plus_pbuz2_derefidx_vbuc2 - ldy #$28-1 - clc - lda (buffer),y - ldy #$28-1 - adc (buffer),y - sta _4 - // [44] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#4 + (byte) $28) -- vbuz1=vbuz2_plus_pbuz3_derefidx_vbuc1 - lda _4 - ldy #$28 - clc - adc (buffer),y - sta _5 - // [45] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#4 + (byte) $29) -- vbuz1=vbuz2_plus_pbuz3_derefidx_vbuc1 - lda _5 - ldy #$29 - clc - adc (buffer),y - sta _6 - // [46] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 -- vbuz1=vbuz2_ror_2 - lda _6 - lsr - lsr - sta c - // [47] if((byte) fire::c#0<(byte) 2+(byte) 1) goto fire::@4 -- vbuz1_lt_vbuc1_then_la1 - lda c - cmp #2+1 - bcc b4_from_b2 - jmp b5 - // fire::@5 - b5: - // [48] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 - lax c - axs #3 - stx c - // [49] phi from fire::@2 fire::@5 to fire::@4 [phi:fire::@2/fire::@5->fire::@4] - b4_from_b2: - b4_from_b5: - // [49] phi (byte) fire::c#2 = (byte) fire::c#0 [phi:fire::@2/fire::@5->fire::@4#0] -- register_copy - jmp b4 - // fire::@4 - b4: - // [50] *((byte*) fire::buffer#4) ← (byte) fire::c#2 -- _deref_pbuz1=vbuz2 - lda c - ldy #0 - sta (buffer),y - // [51] *((byte*) fire::screen#4) ← *((byte*) fire::buffer#4) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (buffer),y - ldy #0 - sta (screen_4),y - // [52] (byte*) fire::screen#2 ← ++ (byte*) fire::screen#4 -- pbuz1=_inc_pbuz1 - inc screen_2 - bne !+ - inc screen_2+1 - !: - // [53] (byte*) fire::buffer#2 ← ++ (byte*) fire::buffer#4 -- pbuz1=_inc_pbuz1 - inc buffer - bne !+ - inc buffer+1 - !: - // [27] phi from fire::@4 to fire::@1 [phi:fire::@4->fire::@1] - b1_from_b4: - // [27] phi (byte*) fire::screen#4 = (byte*) fire::screen#2 [phi:fire::@4->fire::@1#0] -- register_copy - // [27] phi (byte*) fire::buffer#4 = (byte*) fire::buffer#2 [phi:fire::@4->fire::@1#1] -- register_copy - jmp b1 } // sid_rnd // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { .label return = $22 - .label return_2 = $1b - // [54] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 + .label return_2 = $1e + // [53] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 lda SID_VOICE3_OSC sta return jmp breturn // sid_rnd::@return breturn: - // [55] return + // [54] return rts } // makecharset // Make a fire-friendly charset in chars $00-$3f of the passed charset makecharset: { - .label _11 = $2b - .label _12 = $2c - .label _13 = $2d - .label _15 = $23 - .label _16 = $25 - .label _17 = $27 + .label _11 = $23 + .label _12 = $24 + .label _13 = $25 + .label _15 = $26 + .label _16 = $28 + .label _17 = $2a .label font = $d .label font1 = $f .label c = $11 - .label bc = $13 + .label bc = $14 .label i = $12 - .label ii = $14 + .label ii = $13 .label b = $15 - .label _18 = $29 - // [57] phi from makecharset to makecharset::@1 [phi:makecharset->makecharset::@1] - b1_from_makecharset: - // [57] phi (byte*) makecharset::font#2 = (const byte*) CHARSET#0 [phi:makecharset->makecharset::@1#0] -- pbuz1=pbuc1 + .label _18 = $2c + // [56] phi from makecharset to makecharset::@2 [phi:makecharset->makecharset::@2] + b2_from_makecharset: + // [56] phi (byte*) makecharset::font#4 = (const byte*) CHARSET#0 [phi:makecharset->makecharset::@2#0] -- pbuz1=pbuc1 lda #CHARSET sta font+1 + jmp b2 + // [56] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2] + b2_from_b1: + // [56] phi (byte*) makecharset::font#4 = (byte*) makecharset::font#1 [phi:makecharset::@1->makecharset::@2#0] -- register_copy + jmp b2 + // makecharset::@2 + b2: + // [57] *((byte*) makecharset::font#4) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (font),y + // [58] (byte*) makecharset::font#1 ← ++ (byte*) makecharset::font#4 -- pbuz1=_inc_pbuz1 + inc font + bne !+ + inc font+1 + !: jmp b1 // makecharset::@1 b1: - // [58] if((byte*) makecharset::font#2!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [59] if((byte*) makecharset::font#1!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 -- pbuz1_neq_pbuc1_then_la1 lda font+1 cmp #>CHARSET+1*8 - bne b2 + bne b2_from_b1 lda font cmp #makecharset::@3] - b3_from_b1: - // [59] phi (byte*) makecharset::font1#2 = (const byte*) CHARSET#0+(word)(number) $40*(number) 8 [phi:makecharset::@1->makecharset::@3#0] -- pbuz1=pbuc1 + bne b2_from_b1 + // [60] phi from makecharset::@1 to makecharset::@4 [phi:makecharset::@1->makecharset::@4] + b4_from_b1: + // [60] phi (byte*) makecharset::font1#4 = (const byte*) CHARSET#0+(word)(number) $40*(number) 8 [phi:makecharset::@1->makecharset::@4#0] -- pbuz1=pbuc1 lda #CHARSET+$40*8 sta font1+1 + jmp b4 + // [60] phi from makecharset::@3 to makecharset::@4 [phi:makecharset::@3->makecharset::@4] + b4_from_b3: + // [60] phi (byte*) makecharset::font1#4 = (byte*) makecharset::font1#1 [phi:makecharset::@3->makecharset::@4#0] -- register_copy + jmp b4 + // makecharset::@4 + b4: + // [61] *((byte*) makecharset::font1#4) ← (byte) $ff -- _deref_pbuz1=vbuc1 + lda #$ff + ldy #0 + sta (font1),y + // [62] (byte*) makecharset::font1#1 ← ++ (byte*) makecharset::font1#4 -- pbuz1=_inc_pbuz1 + inc font1 + bne !+ + inc font1+1 + !: jmp b3 // makecharset::@3 b3: - // [60] if((byte*) makecharset::font1#2!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 -- pbuz1_neq_pbuc1_then_la1 + // [63] if((byte*) makecharset::font1#1!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 -- pbuz1_neq_pbuc1_then_la1 lda font1+1 cmp #>CHARSET+$100*8 - bne b4 + bne b4_from_b3 lda font1 cmp #makecharset::@5] - b5_from_b3: - // [61] phi (byte) makecharset::c#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#0] -- vbuz1=vbuc1 + bne b4_from_b3 + // [64] phi from makecharset::@3 to makecharset::@6 [phi:makecharset::@3->makecharset::@6] + b6_from_b3: + // [64] phi (byte) makecharset::c#17 = (byte) 0 [phi:makecharset::@3->makecharset::@6#0] -- vbuz1=vbuc1 lda #0 sta c - jmp b5 - // makecharset::@5 - b5: - // [62] if((byte) makecharset::c#2<(byte) $40) goto makecharset::@6 -- vbuz1_lt_vbuc1_then_la1 - lda c - cmp #$40 - bcc b6_from_b5 - jmp breturn - // makecharset::@return - breturn: - // [63] return - rts + jmp b6 // [64] phi from makecharset::@5 to makecharset::@6 [phi:makecharset::@5->makecharset::@6] b6_from_b5: - // [64] phi (byte) makecharset::bc#6 = (byte) 0 [phi:makecharset::@5->makecharset::@6#0] -- vbuz1=vbuc1 - lda #0 - sta bc - // [64] phi (byte) makecharset::i#2 = (byte) 0 [phi:makecharset::@5->makecharset::@6#1] -- vbuz1=vbuc1 - lda #0 - sta i + // [64] phi (byte) makecharset::c#17 = (byte) makecharset::c#1 [phi:makecharset::@5->makecharset::@6#0] -- register_copy jmp b6 // makecharset::@6 b6: - // [65] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@8 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #8 - bcc b8_from_b6 - jmp b7 - // makecharset::@7 - b7: - // [66] (byte) makecharset::c#1 ← ++ (byte) makecharset::c#2 -- vbuz1=_inc_vbuz1 - inc c - // [61] phi from makecharset::@7 to makecharset::@5 [phi:makecharset::@7->makecharset::@5] - b5_from_b7: - // [61] phi (byte) makecharset::c#2 = (byte) makecharset::c#1 [phi:makecharset::@7->makecharset::@5#0] -- register_copy - jmp b5 - // [67] phi from makecharset::@6 to makecharset::@8 [phi:makecharset::@6->makecharset::@8] + // [65] phi from makecharset::@6 to makecharset::@8 [phi:makecharset::@6->makecharset::@8] b8_from_b6: - // [67] phi (byte) makecharset::b#2 = (byte) 0 [phi:makecharset::@6->makecharset::@8#0] -- vbuz1=vbuc1 + // [65] phi (byte) makecharset::bc#10 = (byte) 0 [phi:makecharset::@6->makecharset::@8#0] -- vbuz1=vbuc1 lda #0 - sta b - // [67] phi (byte) makecharset::bc#3 = (byte) makecharset::bc#6 [phi:makecharset::@6->makecharset::@8#1] -- register_copy - // [67] phi (byte) makecharset::ii#2 = (byte) 0 [phi:makecharset::@6->makecharset::@8#2] -- vbuz1=vbuc1 + sta bc + // [65] phi (byte) makecharset::i#13 = (byte) 0 [phi:makecharset::@6->makecharset::@8#1] -- vbuz1=vbuc1 lda #0 - sta ii + sta i + jmp b8 + // [65] phi from makecharset::@7 to makecharset::@8 [phi:makecharset::@7->makecharset::@8] + b8_from_b7: + // [65] phi (byte) makecharset::bc#10 = (byte) makecharset::bc#12 [phi:makecharset::@7->makecharset::@8#0] -- register_copy + // [65] phi (byte) makecharset::i#13 = (byte) makecharset::i#1 [phi:makecharset::@7->makecharset::@8#1] -- register_copy jmp b8 // makecharset::@8 b8: - // [68] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@9 -- vbuz1_lt_vbuc1_then_la1 + // [66] phi from makecharset::@8 to makecharset::@11 [phi:makecharset::@8->makecharset::@11] + b11_from_b8: + // [66] phi (byte) makecharset::b#8 = (byte) 0 [phi:makecharset::@8->makecharset::@11#0] -- vbuz1=vbuc1 + lda #0 + sta b + // [66] phi (byte) makecharset::bc#13 = (byte) makecharset::bc#10 [phi:makecharset::@8->makecharset::@11#1] -- register_copy + // [66] phi (byte) makecharset::ii#6 = (byte) 0 [phi:makecharset::@8->makecharset::@11#2] -- vbuz1=vbuc1 + lda #0 + sta ii + jmp b11 + // [66] phi from makecharset::@10 to makecharset::@11 [phi:makecharset::@10->makecharset::@11] + b11_from_b10: + // [66] phi (byte) makecharset::b#8 = (byte) makecharset::b#2 [phi:makecharset::@10->makecharset::@11#0] -- register_copy + // [66] phi (byte) makecharset::bc#13 = (byte) makecharset::bc#12 [phi:makecharset::@10->makecharset::@11#1] -- register_copy + // [66] phi (byte) makecharset::ii#6 = (byte) makecharset::ii#1 [phi:makecharset::@10->makecharset::@11#2] -- register_copy + jmp b11 + // makecharset::@11 + b11: + // [67] (byte) makecharset::bc#1 ← (byte) makecharset::bc#13 + (byte) makecharset::c#17 -- vbuz1=vbuz1_plus_vbuz2 + lda bc + clc + adc c + sta bc + // [68] if((byte) makecharset::bc#1<(byte) $3f+(byte) 1) goto makecharset::@13 -- vbuz1_lt_vbuc1_then_la1 + lda bc + cmp #$3f+1 + bcc b13_from_b11 + jmp b14 + // makecharset::@14 + b14: + // [69] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 -- vbuz1=vbuz1_minus_vbuc1 + lax bc + axs #$40 + stx bc + // [70] (byte~) makecharset::$11 ← (byte) makecharset::i#13 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + lda #1 + and i + sta _11 + // [71] (byte~) makecharset::$12 ← (byte) makecharset::ii#6 + (byte~) makecharset::$11 -- vbuz1=vbuz2_plus_vbuz3 lda ii - cmp #8 - bcc b9 + clc + adc _11 + sta _12 + // [72] (byte~) makecharset::$13 ← (byte~) makecharset::$12 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + lda #7 + and _12 + sta _13 + // [73] (byte) makecharset::b#1 ← (byte) makecharset::b#8 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) -- vbuz1=vbuz1_plus_pbuc1_derefidx_vbuz2 + lda b + ldy _13 + clc + adc bittab,y + sta b + // [74] phi from makecharset::@11 makecharset::@14 to makecharset::@13 [phi:makecharset::@11/makecharset::@14->makecharset::@13] + b13_from_b11: + b13_from_b14: + // [74] phi (byte) makecharset::b#2 = (byte) makecharset::b#8 [phi:makecharset::@11/makecharset::@14->makecharset::@13#0] -- register_copy + // [74] phi (byte) makecharset::bc#12 = (byte) makecharset::bc#1 [phi:makecharset::@11/makecharset::@14->makecharset::@13#1] -- register_copy + jmp b13 + // makecharset::@13 + b13: + // [75] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#6 -- vbuz1=_inc_vbuz1 + inc ii jmp b10 // makecharset::@10 b10: - // [69] (word~) makecharset::$15 ← (word)(byte) makecharset::c#2 -- vwuz1=_word_vbuz2 + // [76] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@11 -- vbuz1_lt_vbuc1_then_la1 + lda ii + cmp #8 + bcc b11_from_b10 + jmp b12 + // makecharset::@12 + b12: + // [77] (word~) makecharset::$15 ← (word)(byte) makecharset::c#17 -- vwuz1=_word_vbuz2 lda c sta _15 lda #0 sta _15+1 - // [70] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [78] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda _15 asl sta _16 @@ -2267,7 +2446,7 @@ makecharset: { rol _16+1 asl _16 rol _16+1 - // [71] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#2 -- vwuz1=vwuz2_plus_vbuz3 + // [79] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#13 -- vwuz1=vwuz2_plus_vbuz3 lda i clc adc _16 @@ -2275,7 +2454,7 @@ makecharset: { lda #0 adc _16+1 sta _17+1 - // [72] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 -- pbuz1=pbuc1_plus_vwuz2 + // [80] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 -- pbuz1=pbuc1_plus_vwuz2 lda _17 clc adc #CHARSET+1*8 sta _18+1 - // [73] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuz2 + // [81] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuz2 lda b ldy #0 sta (_18),y - // [74] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 -- vbuz1=_inc_vbuz1 + // [82] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 -- vbuz1=_inc_vbuz1 inc i - // [64] phi from makecharset::@10 to makecharset::@6 [phi:makecharset::@10->makecharset::@6] - b6_from_b10: - // [64] phi (byte) makecharset::bc#6 = (byte) makecharset::bc#3 [phi:makecharset::@10->makecharset::@6#0] -- register_copy - // [64] phi (byte) makecharset::i#2 = (byte) makecharset::i#1 [phi:makecharset::@10->makecharset::@6#1] -- register_copy - jmp b6 + jmp b7 + // makecharset::@7 + b7: + // [83] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@8 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #8 + bcc b8_from_b7 + jmp b9 // makecharset::@9 b9: - // [75] (byte) makecharset::bc#1 ← (byte) makecharset::bc#3 + (byte) makecharset::c#2 -- vbuz1=vbuz1_plus_vbuz2 - lda bc - clc - adc c - sta bc - // [76] if((byte) makecharset::bc#1<(byte) $3f+(byte) 1) goto makecharset::@11 -- vbuz1_lt_vbuc1_then_la1 - lda bc - cmp #$3f+1 - bcc b11_from_b9 - jmp b12 - // makecharset::@12 - b12: - // [77] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 -- vbuz1=vbuz1_minus_vbuc1 - lax bc - axs #$40 - stx bc - // [78] (byte~) makecharset::$11 ← (byte) makecharset::i#2 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 - lda #1 - and i - sta _11 - // [79] (byte~) makecharset::$12 ← (byte) makecharset::ii#2 + (byte~) makecharset::$11 -- vbuz1=vbuz2_plus_vbuz3 - lda ii - clc - adc _11 - sta _12 - // [80] (byte~) makecharset::$13 ← (byte~) makecharset::$12 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 - lda #7 - and _12 - sta _13 - // [81] (byte) makecharset::b#1 ← (byte) makecharset::b#2 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) -- vbuz1=vbuz1_plus_pbuc1_derefidx_vbuz2 - lda b - ldy _13 - clc - adc bittab,y - sta b - // [82] phi from makecharset::@12 makecharset::@9 to makecharset::@11 [phi:makecharset::@12/makecharset::@9->makecharset::@11] - b11_from_b12: - b11_from_b9: - // [82] phi (byte) makecharset::b#6 = (byte) makecharset::b#1 [phi:makecharset::@12/makecharset::@9->makecharset::@11#0] -- register_copy - // [82] phi (byte) makecharset::bc#7 = (byte) makecharset::bc#2 [phi:makecharset::@12/makecharset::@9->makecharset::@11#1] -- register_copy - jmp b11 - // makecharset::@11 - b11: - // [83] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuz1=_inc_vbuz1 - inc ii - // [67] phi from makecharset::@11 to makecharset::@8 [phi:makecharset::@11->makecharset::@8] - b8_from_b11: - // [67] phi (byte) makecharset::b#2 = (byte) makecharset::b#6 [phi:makecharset::@11->makecharset::@8#0] -- register_copy - // [67] phi (byte) makecharset::bc#3 = (byte) makecharset::bc#7 [phi:makecharset::@11->makecharset::@8#1] -- register_copy - // [67] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@11->makecharset::@8#2] -- register_copy - jmp b8 - // makecharset::@4 - b4: - // [84] *((byte*) makecharset::font1#2) ← (byte) $ff -- _deref_pbuz1=vbuc1 - lda #$ff - ldy #0 - sta (font1),y - // [85] (byte*) makecharset::font1#1 ← ++ (byte*) makecharset::font1#2 -- pbuz1=_inc_pbuz1 - inc font1 - bne !+ - inc font1+1 - !: - // [59] phi from makecharset::@4 to makecharset::@3 [phi:makecharset::@4->makecharset::@3] - b3_from_b4: - // [59] phi (byte*) makecharset::font1#2 = (byte*) makecharset::font1#1 [phi:makecharset::@4->makecharset::@3#0] -- register_copy - jmp b3 - // makecharset::@2 - b2: - // [86] *((byte*) makecharset::font#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 - lda #0 - ldy #0 - sta (font),y - // [87] (byte*) makecharset::font#1 ← ++ (byte*) makecharset::font#2 -- pbuz1=_inc_pbuz1 - inc font - bne !+ - inc font+1 - !: - // [57] phi from makecharset::@2 to makecharset::@1 [phi:makecharset::@2->makecharset::@1] - b1_from_b2: - // [57] phi (byte*) makecharset::font#2 = (byte*) makecharset::font#1 [phi:makecharset::@2->makecharset::@1#0] -- register_copy - jmp b1 + // [84] (byte) makecharset::c#1 ← ++ (byte) makecharset::c#17 -- vbuz1=_inc_vbuz1 + inc c + jmp b5 + // makecharset::@5 + b5: + // [85] if((byte) makecharset::c#1<(byte) $40) goto makecharset::@6 -- vbuz1_lt_vbuc1_then_la1 + lda c + cmp #$40 + bcc b6_from_b5 + jmp breturn + // makecharset::@return + breturn: + // [86] return + rts bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [88] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [87] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff sta SID_VOICE3_FREQ lda #>$ffff sta SID_VOICE3_FREQ+1 - // [89] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [88] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL jmp breturn // sid_rnd_init::@return breturn: - // [90] return + // [89] return rts } // fillscreen @@ -2403,37 +2518,37 @@ fillscreen: { .label screen = $17 .label i = $19 .label fill = $16 - // [92] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] + // [91] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] b1_from_fillscreen: - // [92] phi (word) fillscreen::i#2 = (word) 0 [phi:fillscreen->fillscreen::@1#0] -- vwuz1=vwuc1 + // [91] phi (word) fillscreen::i#2 = (word) 0 [phi:fillscreen->fillscreen::@1#0] -- vwuz1=vwuc1 lda #<0 sta i lda #>0 sta i+1 - // [92] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#6 [phi:fillscreen->fillscreen::@1#1] -- register_copy + // [91] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#6 [phi:fillscreen->fillscreen::@1#1] -- register_copy jmp b1 - // [92] phi from fillscreen::@1 to fillscreen::@1 [phi:fillscreen::@1->fillscreen::@1] + // [91] phi from fillscreen::@1 to fillscreen::@1 [phi:fillscreen::@1->fillscreen::@1] b1_from_b1: - // [92] phi (word) fillscreen::i#2 = (word) fillscreen::i#1 [phi:fillscreen::@1->fillscreen::@1#0] -- register_copy - // [92] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#4 [phi:fillscreen::@1->fillscreen::@1#1] -- register_copy + // [91] phi (word) fillscreen::i#2 = (word) fillscreen::i#1 [phi:fillscreen::@1->fillscreen::@1#0] -- register_copy + // [91] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#4 [phi:fillscreen::@1->fillscreen::@1#1] -- register_copy jmp b1 // fillscreen::@1 b1: - // [93] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 -- _deref_pbuz1=vbuz2 + // [92] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 -- _deref_pbuz1=vbuz2 lda fill ldy #0 sta (screen),y - // [94] (byte*) fillscreen::screen#4 ← ++ (byte*) fillscreen::screen#5 -- pbuz1=_inc_pbuz1 + // [93] (byte*) fillscreen::screen#4 ← ++ (byte*) fillscreen::screen#5 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [95] (word) fillscreen::i#1 ← ++ (word) fillscreen::i#2 -- vwuz1=_inc_vwuz1 + // [94] (word) fillscreen::i#1 ← ++ (word) fillscreen::i#2 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [96] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 -- vwuz1_neq_vwuc1_then_la1 + // [95] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 -- vwuz1_neq_vwuc1_then_la1 lda i+1 cmp #>$3e8 bne b1_from_b1 @@ -2443,7 +2558,7 @@ fillscreen: { jmp breturn // fillscreen::@return breturn: - // [97] return + // [96] return rts } // File Data @@ -2453,171 +2568,209 @@ Statement [5] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:2 Statement [6] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [21] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [24] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [26] (byte*~) fire::screen#11 ← (byte*) fire::screen#0 [ fire::screen#0 fire::screen#11 ] ( main:2::fire:19 [ fire::screen#0 fire::screen#11 ] main:2::fire:22 [ fire::screen#0 fire::screen#11 ] ) always clobbers reg byte a -Statement [28] if((byte*) fire::buffer#4!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] ) always clobbers reg byte a -Statement [29] (byte*) fire::screen#1 ← (byte*) fire::screen#0 + (word)(number) $18*(number) $28 [ fire::screen#1 ] ( main:2::fire:19 [ fire::screen#1 ] main:2::fire:22 [ fire::screen#1 ] ) always clobbers reg byte a -Statement [31] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 [ fire::buffer#10 fire::screen#10 ] ( main:2::fire:19 [ fire::buffer#10 fire::screen#10 ] main:2::fire:22 [ fire::buffer#10 fire::screen#10 ] ) always clobbers reg byte a -Statement [37] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 [ fire::buffer#10 fire::screen#10 fire::$13 ] ( main:2::fire:19 [ fire::buffer#10 fire::screen#10 fire::$13 ] main:2::fire:22 [ fire::buffer#10 fire::screen#10 fire::$13 ] ) always clobbers reg byte a -Statement [39] *((byte*) fire::buffer#10) ← (byte~) fire::$14 [ fire::buffer#10 fire::screen#10 ] ( main:2::fire:19 [ fire::buffer#10 fire::screen#10 ] main:2::fire:22 [ fire::buffer#10 fire::screen#10 ] ) always clobbers reg byte y -Statement [40] *((byte*) fire::screen#10) ← *((byte*) fire::buffer#10) [ fire::buffer#10 fire::screen#10 ] ( main:2::fire:19 [ fire::buffer#10 fire::screen#10 ] main:2::fire:22 [ fire::buffer#10 fire::screen#10 ] ) always clobbers reg byte a reg byte y -Statement [43] (byte~) fire::$4 ← *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$4 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$4 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$4 ] ) always clobbers reg byte a reg byte y -Statement [44] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#4 + (byte) $28) [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$5 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$5 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$5 ] ) always clobbers reg byte a reg byte y -Statement [45] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#4 + (byte) $29) [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$6 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$6 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$6 ] ) always clobbers reg byte a reg byte y -Statement [46] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::c#0 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::c#0 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::c#0 ] ) always clobbers reg byte a -Statement [48] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::c#1 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::c#1 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::c#1 ] ) always clobbers reg byte a -Statement [50] *((byte*) fire::buffer#4) ← (byte) fire::c#2 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] ) always clobbers reg byte y -Statement [51] *((byte*) fire::screen#4) ← *((byte*) fire::buffer#4) [ fire::screen#0 fire::buffer#4 fire::screen#4 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] ) always clobbers reg byte a reg byte y -Statement [58] if((byte*) makecharset::font#2!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 [ makecharset::font#2 ] ( main:2::makecharset:17 [ makecharset::font#2 ] ) always clobbers reg byte a -Statement [60] if((byte*) makecharset::font1#2!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 [ makecharset::font1#2 ] ( main:2::makecharset:17 [ makecharset::font1#2 ] ) always clobbers reg byte a -Statement [69] (word~) makecharset::$15 ← (word)(byte) makecharset::c#2 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$15 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$15 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ makecharset::c#2 makecharset::c#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ makecharset::i#2 makecharset::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ makecharset::bc#6 makecharset::bc#3 makecharset::bc#7 makecharset::bc#1 makecharset::bc#2 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -Statement [70] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a -Statement [71] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#2 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$17 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$17 ] ) always clobbers reg byte a -Statement [72] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$18 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$18 ] ) always clobbers reg byte a -Statement [73] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:17 [ makecharset::c#2 makecharset::c#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ makecharset::i#2 makecharset::i#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:19 [ makecharset::bc#6 makecharset::bc#3 makecharset::bc#7 makecharset::bc#1 makecharset::bc#2 ] -Statement [75] (byte) makecharset::bc#1 ← (byte) makecharset::bc#3 + (byte) makecharset::c#2 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#1 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ makecharset::ii#2 makecharset::ii#1 ] -Statement [77] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#2 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#2 ] ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:17 [ makecharset::c#2 makecharset::c#1 ] -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:18 [ makecharset::i#2 makecharset::i#1 ] -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:20 [ makecharset::ii#2 makecharset::ii#1 ] -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:21 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -Statement [78] (byte~) makecharset::$11 ← (byte) makecharset::i#2 & (byte) 1 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#2 makecharset::$11 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#2 makecharset::$11 ] ) always clobbers reg byte a -Statement [79] (byte~) makecharset::$12 ← (byte) makecharset::ii#2 + (byte~) makecharset::$11 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#2 makecharset::$12 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#2 makecharset::$12 ] ) always clobbers reg byte a -Statement [81] (byte) makecharset::b#1 ← (byte) makecharset::b#2 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::bc#2 makecharset::b#1 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::bc#2 makecharset::b#1 ] ) always clobbers reg byte a -Statement [84] *((byte*) makecharset::font1#2) ← (byte) $ff [ makecharset::font1#2 ] ( main:2::makecharset:17 [ makecharset::font1#2 ] ) always clobbers reg byte a reg byte y -Statement [86] *((byte*) makecharset::font#2) ← (byte) 0 [ makecharset::font#2 ] ( main:2::makecharset:17 [ makecharset::font#2 ] ) always clobbers reg byte a reg byte y -Statement [88] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::sid_rnd_init:15 [ ] ) always clobbers reg byte a -Statement [89] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::sid_rnd_init:15 [ ] ) always clobbers reg byte a -Statement [93] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] ) always clobbers reg byte y +Statement [26] (byte*~) fire::screen#19 ← (byte*) fire::screen#0 [ fire::screen#0 fire::screen#19 ] ( main:2::fire:19 [ fire::screen#0 fire::screen#19 ] main:2::fire:22 [ fire::screen#0 fire::screen#19 ] ) always clobbers reg byte a +Statement [28] (byte~) fire::$4 ← *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$4 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$4 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$4 ] ) always clobbers reg byte a reg byte y +Statement [29] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#11 + (byte) $28) [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$5 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$5 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$5 ] ) always clobbers reg byte a reg byte y +Statement [30] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#11 + (byte) $29) [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$6 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$6 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$6 ] ) always clobbers reg byte a reg byte y +Statement [31] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#0 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#0 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#0 ] ) always clobbers reg byte a +Statement [33] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#1 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#1 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#1 ] ) always clobbers reg byte a +Statement [35] *((byte*) fire::buffer#11) ← (byte) fire::c#2 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] ) always clobbers reg byte y +Statement [36] *((byte*) fire::screen#11) ← *((byte*) fire::buffer#11) [ fire::screen#0 fire::buffer#11 fire::screen#11 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] ) always clobbers reg byte a reg byte y +Statement [39] if((byte*) fire::buffer#2!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 [ fire::screen#0 fire::buffer#2 fire::screen#2 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#2 fire::screen#2 ] main:2::fire:22 [ fire::screen#0 fire::buffer#2 fire::screen#2 ] ) always clobbers reg byte a +Statement [40] (byte*) fire::screen#1 ← (byte*) fire::screen#0 + (word)(number) $18*(number) $28 [ fire::screen#1 ] ( main:2::fire:19 [ fire::screen#1 ] main:2::fire:22 [ fire::screen#1 ] ) always clobbers reg byte a +Statement [45] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 [ fire::buffer#15 fire::screen#15 fire::$13 ] ( main:2::fire:19 [ fire::buffer#15 fire::screen#15 fire::$13 ] main:2::fire:22 [ fire::buffer#15 fire::screen#15 fire::$13 ] ) always clobbers reg byte a +Statement [47] *((byte*) fire::buffer#15) ← (byte~) fire::$14 [ fire::buffer#15 fire::screen#15 ] ( main:2::fire:19 [ fire::buffer#15 fire::screen#15 ] main:2::fire:22 [ fire::buffer#15 fire::screen#15 ] ) always clobbers reg byte y +Statement [48] *((byte*) fire::screen#15) ← *((byte*) fire::buffer#15) [ fire::buffer#15 fire::screen#15 ] ( main:2::fire:19 [ fire::buffer#15 fire::screen#15 ] main:2::fire:22 [ fire::buffer#15 fire::screen#15 ] ) always clobbers reg byte a reg byte y +Statement [51] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 [ fire::buffer#10 fire::screen#10 ] ( main:2::fire:19 [ fire::buffer#10 fire::screen#10 ] main:2::fire:22 [ fire::buffer#10 fire::screen#10 ] ) always clobbers reg byte a +Statement [57] *((byte*) makecharset::font#4) ← (byte) 0 [ makecharset::font#4 ] ( main:2::makecharset:17 [ makecharset::font#4 ] ) always clobbers reg byte a reg byte y +Statement [59] if((byte*) makecharset::font#1!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 [ makecharset::font#1 ] ( main:2::makecharset:17 [ makecharset::font#1 ] ) always clobbers reg byte a +Statement [61] *((byte*) makecharset::font1#4) ← (byte) $ff [ makecharset::font1#4 ] ( main:2::makecharset:17 [ makecharset::font1#4 ] ) always clobbers reg byte a reg byte y +Statement [63] if((byte*) makecharset::font1#1!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 [ makecharset::font1#1 ] ( main:2::makecharset:17 [ makecharset::font1#1 ] ) always clobbers reg byte a +Statement [67] (byte) makecharset::bc#1 ← (byte) makecharset::bc#13 + (byte) makecharset::c#17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#1 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ makecharset::c#17 makecharset::c#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ makecharset::i#13 makecharset::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ makecharset::ii#6 makecharset::ii#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ makecharset::b#8 makecharset::b#2 makecharset::b#1 ] +Statement [69] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 ] ) always clobbers reg byte a +Statement [70] (byte~) makecharset::$11 ← (byte) makecharset::i#13 & (byte) 1 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 makecharset::$11 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 makecharset::$11 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ makecharset::bc#13 makecharset::bc#10 makecharset::bc#12 makecharset::bc#1 makecharset::bc#2 ] +Statement [71] (byte~) makecharset::$12 ← (byte) makecharset::ii#6 + (byte~) makecharset::$11 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 makecharset::$12 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 makecharset::$12 ] ) always clobbers reg byte a +Statement [73] (byte) makecharset::b#1 ← (byte) makecharset::b#8 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::bc#2 makecharset::b#1 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::bc#2 makecharset::b#1 ] ) always clobbers reg byte a +Statement [77] (word~) makecharset::$15 ← (word)(byte) makecharset::c#17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$15 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$15 ] ) always clobbers reg byte a +Statement [78] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a +Statement [79] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#13 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$17 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$17 ] ) always clobbers reg byte a +Statement [80] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$18 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$18 ] ) always clobbers reg byte a +Statement [81] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:17 [ makecharset::c#17 makecharset::c#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ makecharset::i#13 makecharset::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ makecharset::bc#13 makecharset::bc#10 makecharset::bc#12 makecharset::bc#1 makecharset::bc#2 ] +Statement [87] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::sid_rnd_init:15 [ ] ) always clobbers reg byte a +Statement [88] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::sid_rnd_init:15 [ ] ) always clobbers reg byte a +Statement [92] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:22 [ fillscreen::fill#5 ] -Statement [96] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] ) always clobbers reg byte a +Statement [95] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ fillscreen::fill#5 ] Statement [5] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [21] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [24] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [26] (byte*~) fire::screen#11 ← (byte*) fire::screen#0 [ fire::screen#0 fire::screen#11 ] ( main:2::fire:19 [ fire::screen#0 fire::screen#11 ] main:2::fire:22 [ fire::screen#0 fire::screen#11 ] ) always clobbers reg byte a -Statement [28] if((byte*) fire::buffer#4!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] ) always clobbers reg byte a -Statement [29] (byte*) fire::screen#1 ← (byte*) fire::screen#0 + (word)(number) $18*(number) $28 [ fire::screen#1 ] ( main:2::fire:19 [ fire::screen#1 ] main:2::fire:22 [ fire::screen#1 ] ) always clobbers reg byte a -Statement [31] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 [ fire::buffer#10 fire::screen#10 ] ( main:2::fire:19 [ fire::buffer#10 fire::screen#10 ] main:2::fire:22 [ fire::buffer#10 fire::screen#10 ] ) always clobbers reg byte a -Statement [37] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 [ fire::buffer#10 fire::screen#10 fire::$13 ] ( main:2::fire:19 [ fire::buffer#10 fire::screen#10 fire::$13 ] main:2::fire:22 [ fire::buffer#10 fire::screen#10 fire::$13 ] ) always clobbers reg byte a -Statement [39] *((byte*) fire::buffer#10) ← (byte~) fire::$14 [ fire::buffer#10 fire::screen#10 ] ( main:2::fire:19 [ fire::buffer#10 fire::screen#10 ] main:2::fire:22 [ fire::buffer#10 fire::screen#10 ] ) always clobbers reg byte y -Statement [40] *((byte*) fire::screen#10) ← *((byte*) fire::buffer#10) [ fire::buffer#10 fire::screen#10 ] ( main:2::fire:19 [ fire::buffer#10 fire::screen#10 ] main:2::fire:22 [ fire::buffer#10 fire::screen#10 ] ) always clobbers reg byte a reg byte y -Statement [43] (byte~) fire::$4 ← *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$4 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$4 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$4 ] ) always clobbers reg byte a reg byte y -Statement [44] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#4 + (byte) $28) [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$5 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$5 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$5 ] ) always clobbers reg byte a reg byte y -Statement [45] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#4 + (byte) $29) [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$6 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$6 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::$6 ] ) always clobbers reg byte a reg byte y -Statement [46] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::c#0 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::c#0 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::c#0 ] ) always clobbers reg byte a -Statement [48] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::c#1 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::c#1 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 fire::c#1 ] ) always clobbers reg byte a -Statement [50] *((byte*) fire::buffer#4) ← (byte) fire::c#2 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] ) always clobbers reg byte y -Statement [51] *((byte*) fire::screen#4) ← *((byte*) fire::buffer#4) [ fire::screen#0 fire::buffer#4 fire::screen#4 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] main:2::fire:22 [ fire::screen#0 fire::buffer#4 fire::screen#4 ] ) always clobbers reg byte a reg byte y -Statement [58] if((byte*) makecharset::font#2!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 [ makecharset::font#2 ] ( main:2::makecharset:17 [ makecharset::font#2 ] ) always clobbers reg byte a -Statement [60] if((byte*) makecharset::font1#2!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 [ makecharset::font1#2 ] ( main:2::makecharset:17 [ makecharset::font1#2 ] ) always clobbers reg byte a -Statement [62] if((byte) makecharset::c#2<(byte) $40) goto makecharset::@6 [ makecharset::c#2 ] ( main:2::makecharset:17 [ makecharset::c#2 ] ) always clobbers reg byte a -Statement [65] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@8 [ makecharset::c#2 makecharset::i#2 makecharset::bc#6 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#6 ] ) always clobbers reg byte a -Statement [69] (word~) makecharset::$15 ← (word)(byte) makecharset::c#2 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$15 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$15 ] ) always clobbers reg byte a -Statement [70] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a -Statement [71] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#2 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$17 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$17 ] ) always clobbers reg byte a -Statement [72] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$18 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 makecharset::b#2 makecharset::$18 ] ) always clobbers reg byte a -Statement [73] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::bc#3 ] ) always clobbers reg byte a reg byte y -Statement [75] (byte) makecharset::bc#1 ← (byte) makecharset::bc#3 + (byte) makecharset::c#2 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#1 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#1 ] ) always clobbers reg byte a -Statement [77] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#2 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#2 ] ) always clobbers reg byte a reg byte x -Statement [78] (byte~) makecharset::$11 ← (byte) makecharset::i#2 & (byte) 1 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#2 makecharset::$11 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#2 makecharset::$11 ] ) always clobbers reg byte a -Statement [79] (byte~) makecharset::$12 ← (byte) makecharset::ii#2 + (byte~) makecharset::$11 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#2 makecharset::$12 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::b#2 makecharset::bc#2 makecharset::$12 ] ) always clobbers reg byte a -Statement [81] (byte) makecharset::b#1 ← (byte) makecharset::b#2 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::bc#2 makecharset::b#1 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::bc#2 makecharset::b#1 ] ) always clobbers reg byte a -Statement [84] *((byte*) makecharset::font1#2) ← (byte) $ff [ makecharset::font1#2 ] ( main:2::makecharset:17 [ makecharset::font1#2 ] ) always clobbers reg byte a reg byte y -Statement [86] *((byte*) makecharset::font#2) ← (byte) 0 [ makecharset::font#2 ] ( main:2::makecharset:17 [ makecharset::font#2 ] ) always clobbers reg byte a reg byte y -Statement [88] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::sid_rnd_init:15 [ ] ) always clobbers reg byte a -Statement [89] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::sid_rnd_init:15 [ ] ) always clobbers reg byte a -Statement [93] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] ) always clobbers reg byte a reg byte y -Statement [96] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] ) always clobbers reg byte a +Statement [26] (byte*~) fire::screen#19 ← (byte*) fire::screen#0 [ fire::screen#0 fire::screen#19 ] ( main:2::fire:19 [ fire::screen#0 fire::screen#19 ] main:2::fire:22 [ fire::screen#0 fire::screen#19 ] ) always clobbers reg byte a +Statement [28] (byte~) fire::$4 ← *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$4 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$4 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$4 ] ) always clobbers reg byte a reg byte y +Statement [29] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#11 + (byte) $28) [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$5 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$5 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$5 ] ) always clobbers reg byte a reg byte y +Statement [30] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#11 + (byte) $29) [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$6 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$6 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$6 ] ) always clobbers reg byte a reg byte y +Statement [31] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#0 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#0 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#0 ] ) always clobbers reg byte a +Statement [33] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#1 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#1 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#1 ] ) always clobbers reg byte a +Statement [35] *((byte*) fire::buffer#11) ← (byte) fire::c#2 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] ) always clobbers reg byte y +Statement [36] *((byte*) fire::screen#11) ← *((byte*) fire::buffer#11) [ fire::screen#0 fire::buffer#11 fire::screen#11 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] ) always clobbers reg byte a reg byte y +Statement [39] if((byte*) fire::buffer#2!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 [ fire::screen#0 fire::buffer#2 fire::screen#2 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#2 fire::screen#2 ] main:2::fire:22 [ fire::screen#0 fire::buffer#2 fire::screen#2 ] ) always clobbers reg byte a +Statement [40] (byte*) fire::screen#1 ← (byte*) fire::screen#0 + (word)(number) $18*(number) $28 [ fire::screen#1 ] ( main:2::fire:19 [ fire::screen#1 ] main:2::fire:22 [ fire::screen#1 ] ) always clobbers reg byte a +Statement [45] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 [ fire::buffer#15 fire::screen#15 fire::$13 ] ( main:2::fire:19 [ fire::buffer#15 fire::screen#15 fire::$13 ] main:2::fire:22 [ fire::buffer#15 fire::screen#15 fire::$13 ] ) always clobbers reg byte a +Statement [47] *((byte*) fire::buffer#15) ← (byte~) fire::$14 [ fire::buffer#15 fire::screen#15 ] ( main:2::fire:19 [ fire::buffer#15 fire::screen#15 ] main:2::fire:22 [ fire::buffer#15 fire::screen#15 ] ) always clobbers reg byte y +Statement [48] *((byte*) fire::screen#15) ← *((byte*) fire::buffer#15) [ fire::buffer#15 fire::screen#15 ] ( main:2::fire:19 [ fire::buffer#15 fire::screen#15 ] main:2::fire:22 [ fire::buffer#15 fire::screen#15 ] ) always clobbers reg byte a reg byte y +Statement [51] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 [ fire::buffer#10 fire::screen#10 ] ( main:2::fire:19 [ fire::buffer#10 fire::screen#10 ] main:2::fire:22 [ fire::buffer#10 fire::screen#10 ] ) always clobbers reg byte a +Statement [57] *((byte*) makecharset::font#4) ← (byte) 0 [ makecharset::font#4 ] ( main:2::makecharset:17 [ makecharset::font#4 ] ) always clobbers reg byte a reg byte y +Statement [59] if((byte*) makecharset::font#1!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 [ makecharset::font#1 ] ( main:2::makecharset:17 [ makecharset::font#1 ] ) always clobbers reg byte a +Statement [61] *((byte*) makecharset::font1#4) ← (byte) $ff [ makecharset::font1#4 ] ( main:2::makecharset:17 [ makecharset::font1#4 ] ) always clobbers reg byte a reg byte y +Statement [63] if((byte*) makecharset::font1#1!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 [ makecharset::font1#1 ] ( main:2::makecharset:17 [ makecharset::font1#1 ] ) always clobbers reg byte a +Statement [67] (byte) makecharset::bc#1 ← (byte) makecharset::bc#13 + (byte) makecharset::c#17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#1 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#1 ] ) always clobbers reg byte a +Statement [69] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 ] ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:17 [ makecharset::c#17 makecharset::c#1 ] +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:18 [ makecharset::i#13 makecharset::i#1 ] +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:19 [ makecharset::ii#6 makecharset::ii#1 ] +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:21 [ makecharset::b#8 makecharset::b#2 makecharset::b#1 ] +Statement [70] (byte~) makecharset::$11 ← (byte) makecharset::i#13 & (byte) 1 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 makecharset::$11 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 makecharset::$11 ] ) always clobbers reg byte a +Statement [71] (byte~) makecharset::$12 ← (byte) makecharset::ii#6 + (byte~) makecharset::$11 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 makecharset::$12 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 makecharset::$12 ] ) always clobbers reg byte a +Statement [73] (byte) makecharset::b#1 ← (byte) makecharset::b#8 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::bc#2 makecharset::b#1 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::bc#2 makecharset::b#1 ] ) always clobbers reg byte a +Statement [77] (word~) makecharset::$15 ← (word)(byte) makecharset::c#17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$15 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$15 ] ) always clobbers reg byte a +Statement [78] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a +Statement [79] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#13 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$17 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$17 ] ) always clobbers reg byte a +Statement [80] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$18 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$18 ] ) always clobbers reg byte a +Statement [81] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 ] ) always clobbers reg byte a reg byte y +Statement [83] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@8 [ makecharset::c#17 makecharset::i#1 makecharset::bc#12 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#1 makecharset::bc#12 ] ) always clobbers reg byte a +Statement [85] if((byte) makecharset::c#1<(byte) $40) goto makecharset::@6 [ makecharset::c#1 ] ( main:2::makecharset:17 [ makecharset::c#1 ] ) always clobbers reg byte a +Statement [87] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::sid_rnd_init:15 [ ] ) always clobbers reg byte a +Statement [88] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::sid_rnd_init:15 [ ] ) always clobbers reg byte a +Statement [92] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] ) always clobbers reg byte a reg byte y +Statement [95] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] ) always clobbers reg byte a +Statement [5] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [6] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [21] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [24] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [26] (byte*~) fire::screen#19 ← (byte*) fire::screen#0 [ fire::screen#0 fire::screen#19 ] ( main:2::fire:19 [ fire::screen#0 fire::screen#19 ] main:2::fire:22 [ fire::screen#0 fire::screen#19 ] ) always clobbers reg byte a +Statement [28] (byte~) fire::$4 ← *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$4 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$4 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$4 ] ) always clobbers reg byte a reg byte y +Statement [29] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#11 + (byte) $28) [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$5 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$5 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$5 ] ) always clobbers reg byte a reg byte y +Statement [30] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#11 + (byte) $29) [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$6 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$6 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::$6 ] ) always clobbers reg byte a reg byte y +Statement [31] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#0 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#0 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#0 ] ) always clobbers reg byte a +Statement [33] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#1 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#1 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 fire::c#1 ] ) always clobbers reg byte a +Statement [35] *((byte*) fire::buffer#11) ← (byte) fire::c#2 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] ) always clobbers reg byte y +Statement [36] *((byte*) fire::screen#11) ← *((byte*) fire::buffer#11) [ fire::screen#0 fire::buffer#11 fire::screen#11 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] main:2::fire:22 [ fire::screen#0 fire::buffer#11 fire::screen#11 ] ) always clobbers reg byte a reg byte y +Statement [39] if((byte*) fire::buffer#2!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 [ fire::screen#0 fire::buffer#2 fire::screen#2 ] ( main:2::fire:19 [ fire::screen#0 fire::buffer#2 fire::screen#2 ] main:2::fire:22 [ fire::screen#0 fire::buffer#2 fire::screen#2 ] ) always clobbers reg byte a +Statement [40] (byte*) fire::screen#1 ← (byte*) fire::screen#0 + (word)(number) $18*(number) $28 [ fire::screen#1 ] ( main:2::fire:19 [ fire::screen#1 ] main:2::fire:22 [ fire::screen#1 ] ) always clobbers reg byte a +Statement [45] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 [ fire::buffer#15 fire::screen#15 fire::$13 ] ( main:2::fire:19 [ fire::buffer#15 fire::screen#15 fire::$13 ] main:2::fire:22 [ fire::buffer#15 fire::screen#15 fire::$13 ] ) always clobbers reg byte a +Statement [47] *((byte*) fire::buffer#15) ← (byte~) fire::$14 [ fire::buffer#15 fire::screen#15 ] ( main:2::fire:19 [ fire::buffer#15 fire::screen#15 ] main:2::fire:22 [ fire::buffer#15 fire::screen#15 ] ) always clobbers reg byte y +Statement [48] *((byte*) fire::screen#15) ← *((byte*) fire::buffer#15) [ fire::buffer#15 fire::screen#15 ] ( main:2::fire:19 [ fire::buffer#15 fire::screen#15 ] main:2::fire:22 [ fire::buffer#15 fire::screen#15 ] ) always clobbers reg byte a reg byte y +Statement [51] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 [ fire::buffer#10 fire::screen#10 ] ( main:2::fire:19 [ fire::buffer#10 fire::screen#10 ] main:2::fire:22 [ fire::buffer#10 fire::screen#10 ] ) always clobbers reg byte a +Statement [57] *((byte*) makecharset::font#4) ← (byte) 0 [ makecharset::font#4 ] ( main:2::makecharset:17 [ makecharset::font#4 ] ) always clobbers reg byte a reg byte y +Statement [59] if((byte*) makecharset::font#1!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 [ makecharset::font#1 ] ( main:2::makecharset:17 [ makecharset::font#1 ] ) always clobbers reg byte a +Statement [61] *((byte*) makecharset::font1#4) ← (byte) $ff [ makecharset::font1#4 ] ( main:2::makecharset:17 [ makecharset::font1#4 ] ) always clobbers reg byte a reg byte y +Statement [63] if((byte*) makecharset::font1#1!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 [ makecharset::font1#1 ] ( main:2::makecharset:17 [ makecharset::font1#1 ] ) always clobbers reg byte a +Statement [67] (byte) makecharset::bc#1 ← (byte) makecharset::bc#13 + (byte) makecharset::c#17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#1 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#1 ] ) always clobbers reg byte a +Statement [69] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 ] ) always clobbers reg byte a reg byte x +Statement [70] (byte~) makecharset::$11 ← (byte) makecharset::i#13 & (byte) 1 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 makecharset::$11 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 makecharset::$11 ] ) always clobbers reg byte a +Statement [71] (byte~) makecharset::$12 ← (byte) makecharset::ii#6 + (byte~) makecharset::$11 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 makecharset::$12 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::b#8 makecharset::bc#2 makecharset::$12 ] ) always clobbers reg byte a +Statement [73] (byte) makecharset::b#1 ← (byte) makecharset::b#8 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::bc#2 makecharset::b#1 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::ii#6 makecharset::bc#2 makecharset::b#1 ] ) always clobbers reg byte a +Statement [77] (word~) makecharset::$15 ← (word)(byte) makecharset::c#17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$15 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$15 ] ) always clobbers reg byte a +Statement [78] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a +Statement [79] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#13 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$17 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$17 ] ) always clobbers reg byte a +Statement [80] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$18 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 makecharset::b#2 makecharset::$18 ] ) always clobbers reg byte a +Statement [81] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#13 makecharset::bc#12 ] ) always clobbers reg byte a reg byte y +Statement [83] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@8 [ makecharset::c#17 makecharset::i#1 makecharset::bc#12 ] ( main:2::makecharset:17 [ makecharset::c#17 makecharset::i#1 makecharset::bc#12 ] ) always clobbers reg byte a +Statement [85] if((byte) makecharset::c#1<(byte) $40) goto makecharset::@6 [ makecharset::c#1 ] ( main:2::makecharset:17 [ makecharset::c#1 ] ) always clobbers reg byte a +Statement [87] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::sid_rnd_init:15 [ ] ) always clobbers reg byte a +Statement [88] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::sid_rnd_init:15 [ ] ) always clobbers reg byte a +Statement [92] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] ) always clobbers reg byte a reg byte y +Statement [95] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ fire::screen#0 ] : zp ZP_WORD:2 , -Potential registers zp ZP_WORD:4 [ fire::buffer#4 fire::buffer#2 ] : zp ZP_WORD:4 , -Potential registers zp ZP_WORD:6 [ fire::screen#4 fire::screen#11 fire::screen#2 ] : zp ZP_WORD:6 , -Potential registers zp ZP_WORD:8 [ fire::buffer#10 fire::buffer#3 ] : zp ZP_WORD:8 , -Potential registers zp ZP_WORD:10 [ fire::screen#10 fire::screen#3 fire::screen#1 ] : zp ZP_WORD:10 , -Potential registers zp ZP_BYTE:12 [ fire::c#2 fire::c#0 fire::c#1 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:13 [ makecharset::font#2 makecharset::font#1 ] : zp ZP_WORD:13 , -Potential registers zp ZP_WORD:15 [ makecharset::font1#2 makecharset::font1#1 ] : zp ZP_WORD:15 , -Potential registers zp ZP_BYTE:17 [ makecharset::c#2 makecharset::c#1 ] : zp ZP_BYTE:17 , -Potential registers zp ZP_BYTE:18 [ makecharset::i#2 makecharset::i#1 ] : zp ZP_BYTE:18 , -Potential registers zp ZP_BYTE:19 [ makecharset::bc#6 makecharset::bc#3 makecharset::bc#7 makecharset::bc#1 makecharset::bc#2 ] : zp ZP_BYTE:19 , reg byte x , -Potential registers zp ZP_BYTE:20 [ makecharset::ii#2 makecharset::ii#1 ] : zp ZP_BYTE:20 , reg byte y , -Potential registers zp ZP_BYTE:21 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] : zp ZP_BYTE:21 , reg byte y , +Potential registers zp ZP_WORD:4 [ fire::buffer#11 fire::buffer#2 ] : zp ZP_WORD:4 , +Potential registers zp ZP_WORD:6 [ fire::screen#11 fire::screen#2 fire::screen#19 ] : zp ZP_WORD:6 , +Potential registers zp ZP_BYTE:8 [ fire::c#2 fire::c#0 fire::c#1 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:9 [ fire::buffer#15 fire::buffer#10 ] : zp ZP_WORD:9 , +Potential registers zp ZP_WORD:11 [ fire::screen#15 fire::screen#10 fire::screen#1 ] : zp ZP_WORD:11 , +Potential registers zp ZP_WORD:13 [ makecharset::font#4 makecharset::font#1 ] : zp ZP_WORD:13 , +Potential registers zp ZP_WORD:15 [ makecharset::font1#4 makecharset::font1#1 ] : zp ZP_WORD:15 , +Potential registers zp ZP_BYTE:17 [ makecharset::c#17 makecharset::c#1 ] : zp ZP_BYTE:17 , +Potential registers zp ZP_BYTE:18 [ makecharset::i#13 makecharset::i#1 ] : zp ZP_BYTE:18 , +Potential registers zp ZP_BYTE:19 [ makecharset::ii#6 makecharset::ii#1 ] : zp ZP_BYTE:19 , reg byte y , +Potential registers zp ZP_BYTE:20 [ makecharset::bc#13 makecharset::bc#10 makecharset::bc#12 makecharset::bc#1 makecharset::bc#2 ] : zp ZP_BYTE:20 , reg byte x , +Potential registers zp ZP_BYTE:21 [ makecharset::b#8 makecharset::b#2 makecharset::b#1 ] : zp ZP_BYTE:21 , reg byte y , Potential registers zp ZP_BYTE:22 [ fillscreen::fill#5 ] : zp ZP_BYTE:22 , reg byte x , Potential registers zp ZP_WORD:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] : zp ZP_WORD:23 , Potential registers zp ZP_WORD:25 [ fillscreen::i#2 fillscreen::i#1 ] : zp ZP_WORD:25 , -Potential registers zp ZP_BYTE:27 [ sid_rnd::return#2 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:28 [ fire::$12 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:29 [ fire::$13 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:30 [ fire::$14 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:31 [ fire::$4 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:32 [ fire::$5 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:33 [ fire::$6 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:27 [ fire::$4 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:28 [ fire::$5 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:29 [ fire::$6 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:30 [ sid_rnd::return#2 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:31 [ fire::$12 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:32 [ fire::$13 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:33 [ fire::$14 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:34 [ sid_rnd::return#0 ] : zp ZP_BYTE:34 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:35 [ makecharset::$15 ] : zp ZP_WORD:35 , -Potential registers zp ZP_WORD:37 [ makecharset::$16 ] : zp ZP_WORD:37 , -Potential registers zp ZP_WORD:39 [ makecharset::$17 ] : zp ZP_WORD:39 , -Potential registers zp ZP_WORD:41 [ makecharset::$18 ] : zp ZP_WORD:41 , -Potential registers zp ZP_BYTE:43 [ makecharset::$11 ] : zp ZP_BYTE:43 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:44 [ makecharset::$12 ] : zp ZP_BYTE:44 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:45 [ makecharset::$13 ] : zp ZP_BYTE:45 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:35 [ makecharset::$11 ] : zp ZP_BYTE:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:36 [ makecharset::$12 ] : zp ZP_BYTE:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:37 [ makecharset::$13 ] : zp ZP_BYTE:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:38 [ makecharset::$15 ] : zp ZP_WORD:38 , +Potential registers zp ZP_WORD:40 [ makecharset::$16 ] : zp ZP_WORD:40 , +Potential registers zp ZP_WORD:42 [ makecharset::$17 ] : zp ZP_WORD:42 , +Potential registers zp ZP_WORD:44 [ makecharset::$18 ] : zp ZP_WORD:44 , REGISTER UPLIFT SCOPES -Uplift Scope [makecharset] 4,280.4: zp ZP_BYTE:19 [ makecharset::bc#6 makecharset::bc#3 makecharset::bc#7 makecharset::bc#1 makecharset::bc#2 ] 3,762.17: zp ZP_BYTE:21 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] 2,402.4: zp ZP_BYTE:20 [ makecharset::ii#2 makecharset::ii#1 ] 2,002: zp ZP_BYTE:43 [ makecharset::$11 ] 2,002: zp ZP_BYTE:44 [ makecharset::$12 ] 2,002: zp ZP_BYTE:45 [ makecharset::$13 ] 280.06: zp ZP_BYTE:18 [ makecharset::i#2 makecharset::i#1 ] 202: zp ZP_WORD:35 [ makecharset::$15 ] 202: zp ZP_WORD:37 [ makecharset::$16 ] 202: zp ZP_WORD:39 [ makecharset::$17 ] 202: zp ZP_WORD:41 [ makecharset::$18 ] 71.24: zp ZP_BYTE:17 [ makecharset::c#2 makecharset::c#1 ] 36.67: zp ZP_WORD:13 [ makecharset::font#2 makecharset::font#1 ] 36.67: zp ZP_WORD:15 [ makecharset::font1#2 makecharset::font1#1 ] -Uplift Scope [fire] 707: zp ZP_BYTE:12 [ fire::c#2 fire::c#0 fire::c#1 ] 277.75: zp ZP_WORD:4 [ fire::buffer#4 fire::buffer#2 ] 247.91: zp ZP_WORD:8 [ fire::buffer#10 fire::buffer#3 ] 202: zp ZP_BYTE:28 [ fire::$12 ] 202: zp ZP_BYTE:29 [ fire::$13 ] 202: zp ZP_BYTE:30 [ fire::$14 ] 202: zp ZP_BYTE:31 [ fire::$4 ] 202: zp ZP_BYTE:32 [ fire::$5 ] 202: zp ZP_BYTE:33 [ fire::$6 ] 135.5: zp ZP_WORD:10 [ fire::screen#10 fire::screen#3 fire::screen#1 ] 132.73: zp ZP_WORD:6 [ fire::screen#4 fire::screen#11 fire::screen#2 ] 0.27: zp ZP_WORD:2 [ fire::screen#0 ] -Uplift Scope [sid_rnd] 202: zp ZP_BYTE:27 [ sid_rnd::return#2 ] 34.33: zp ZP_BYTE:34 [ sid_rnd::return#0 ] +Uplift Scope [makecharset] 5,017.8: zp ZP_BYTE:20 [ makecharset::bc#13 makecharset::bc#10 makecharset::bc#12 makecharset::bc#1 makecharset::bc#2 ] 2,874.43: zp ZP_BYTE:21 [ makecharset::b#8 makecharset::b#2 makecharset::b#1 ] 2,002: zp ZP_BYTE:35 [ makecharset::$11 ] 2,002: zp ZP_BYTE:36 [ makecharset::$12 ] 2,002: zp ZP_BYTE:37 [ makecharset::$13 ] 1,835.17: zp ZP_BYTE:19 [ makecharset::ii#6 makecharset::ii#1 ] 228.21: zp ZP_BYTE:18 [ makecharset::i#13 makecharset::i#1 ] 202: zp ZP_WORD:38 [ makecharset::$15 ] 202: zp ZP_WORD:40 [ makecharset::$16 ] 202: zp ZP_WORD:42 [ makecharset::$17 ] 202: zp ZP_WORD:44 [ makecharset::$18 ] 67.65: zp ZP_BYTE:17 [ makecharset::c#17 makecharset::c#1 ] 33: zp ZP_WORD:13 [ makecharset::font#4 makecharset::font#1 ] 33: zp ZP_WORD:15 [ makecharset::font1#4 makecharset::font1#1 ] +Uplift Scope [fire] 707: zp ZP_BYTE:8 [ fire::c#2 fire::c#0 fire::c#1 ] 224.95: zp ZP_WORD:4 [ fire::buffer#11 fire::buffer#2 ] 202: zp ZP_BYTE:27 [ fire::$4 ] 202: zp ZP_BYTE:28 [ fire::$5 ] 202: zp ZP_BYTE:29 [ fire::$6 ] 202: zp ZP_BYTE:31 [ fire::$12 ] 202: zp ZP_BYTE:32 [ fire::$13 ] 202: zp ZP_BYTE:33 [ fire::$14 ] 196.39: zp ZP_WORD:9 [ fire::buffer#15 fire::buffer#10 ] 109.46: zp ZP_WORD:11 [ fire::screen#15 fire::screen#10 fire::screen#1 ] 101.83: zp ZP_WORD:6 [ fire::screen#11 fire::screen#2 fire::screen#19 ] 0.27: zp ZP_WORD:2 [ fire::screen#0 ] +Uplift Scope [sid_rnd] 202: zp ZP_BYTE:30 [ sid_rnd::return#2 ] 34.33: zp ZP_BYTE:34 [ sid_rnd::return#0 ] Uplift Scope [fillscreen] 26.83: zp ZP_WORD:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] 23.83: zp ZP_WORD:25 [ fillscreen::i#2 fillscreen::i#1 ] 1.83: zp ZP_BYTE:22 [ fillscreen::fill#5 ] Uplift Scope [sid_rnd_init] Uplift Scope [main] Uplift Scope [] -Uplifting [makecharset] best 125295 combination reg byte x [ makecharset::bc#6 makecharset::bc#3 makecharset::bc#7 makecharset::bc#1 makecharset::bc#2 ] reg byte y [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] zp ZP_BYTE:20 [ makecharset::ii#2 makecharset::ii#1 ] reg byte a [ makecharset::$11 ] reg byte a [ makecharset::$12 ] zp ZP_BYTE:45 [ makecharset::$13 ] zp ZP_BYTE:18 [ makecharset::i#2 makecharset::i#1 ] zp ZP_WORD:35 [ makecharset::$15 ] zp ZP_WORD:37 [ makecharset::$16 ] zp ZP_WORD:39 [ makecharset::$17 ] zp ZP_WORD:41 [ makecharset::$18 ] zp ZP_BYTE:17 [ makecharset::c#2 makecharset::c#1 ] zp ZP_WORD:13 [ makecharset::font#2 makecharset::font#1 ] zp ZP_WORD:15 [ makecharset::font1#2 makecharset::font1#1 ] +Uplifting [makecharset] best 129015 combination reg byte x [ makecharset::bc#13 makecharset::bc#10 makecharset::bc#12 makecharset::bc#1 makecharset::bc#2 ] reg byte y [ makecharset::b#8 makecharset::b#2 makecharset::b#1 ] reg byte a [ makecharset::$11 ] reg byte a [ makecharset::$12 ] zp ZP_BYTE:37 [ makecharset::$13 ] zp ZP_BYTE:19 [ makecharset::ii#6 makecharset::ii#1 ] zp ZP_BYTE:18 [ makecharset::i#13 makecharset::i#1 ] zp ZP_WORD:38 [ makecharset::$15 ] zp ZP_WORD:40 [ makecharset::$16 ] zp ZP_WORD:42 [ makecharset::$17 ] zp ZP_WORD:44 [ makecharset::$18 ] zp ZP_BYTE:17 [ makecharset::c#17 makecharset::c#1 ] zp ZP_WORD:13 [ makecharset::font#4 makecharset::font#1 ] zp ZP_WORD:15 [ makecharset::font1#4 makecharset::font1#1 ] Limited combination testing to 100 combinations of 512 possible. -Uplifting [fire] best 122395 combination reg byte a [ fire::c#2 fire::c#0 fire::c#1 ] zp ZP_WORD:4 [ fire::buffer#4 fire::buffer#2 ] zp ZP_WORD:8 [ fire::buffer#10 fire::buffer#3 ] reg byte a [ fire::$12 ] reg byte a [ fire::$13 ] reg byte a [ fire::$14 ] zp ZP_BYTE:31 [ fire::$4 ] zp ZP_BYTE:32 [ fire::$5 ] zp ZP_BYTE:33 [ fire::$6 ] zp ZP_WORD:10 [ fire::screen#10 fire::screen#3 fire::screen#1 ] zp ZP_WORD:6 [ fire::screen#4 fire::screen#11 fire::screen#2 ] zp ZP_WORD:2 [ fire::screen#0 ] +Uplifting [fire] best 125915 combination reg byte a [ fire::c#2 fire::c#0 fire::c#1 ] zp ZP_WORD:4 [ fire::buffer#11 fire::buffer#2 ] reg byte a [ fire::$4 ] reg byte a [ fire::$5 ] reg byte a [ fire::$6 ] zp ZP_BYTE:31 [ fire::$12 ] zp ZP_BYTE:32 [ fire::$13 ] zp ZP_BYTE:33 [ fire::$14 ] zp ZP_WORD:9 [ fire::buffer#15 fire::buffer#10 ] zp ZP_WORD:11 [ fire::screen#15 fire::screen#10 fire::screen#1 ] zp ZP_WORD:6 [ fire::screen#11 fire::screen#2 fire::screen#19 ] zp ZP_WORD:2 [ fire::screen#0 ] Limited combination testing to 100 combinations of 16384 possible. -Uplifting [sid_rnd] best 121492 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] -Uplifting [fillscreen] best 121470 combination zp ZP_WORD:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] zp ZP_WORD:25 [ fillscreen::i#2 fillscreen::i#1 ] reg byte x [ fillscreen::fill#5 ] -Uplifting [sid_rnd_init] best 121470 combination -Uplifting [main] best 121470 combination -Uplifting [] best 121470 combination -Attempting to uplift remaining variables inzp ZP_BYTE:20 [ makecharset::ii#2 makecharset::ii#1 ] -Uplifting [makecharset] best 121470 combination zp ZP_BYTE:20 [ makecharset::ii#2 makecharset::ii#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:45 [ makecharset::$13 ] -Uplifting [makecharset] best 121470 combination zp ZP_BYTE:45 [ makecharset::$13 ] -Attempting to uplift remaining variables inzp ZP_BYTE:18 [ makecharset::i#2 makecharset::i#1 ] -Uplifting [makecharset] best 121470 combination zp ZP_BYTE:18 [ makecharset::i#2 makecharset::i#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:31 [ fire::$4 ] -Uplifting [fire] best 120870 combination reg byte a [ fire::$4 ] -Attempting to uplift remaining variables inzp ZP_BYTE:32 [ fire::$5 ] -Uplifting [fire] best 120270 combination reg byte a [ fire::$5 ] -Attempting to uplift remaining variables inzp ZP_BYTE:33 [ fire::$6 ] -Uplifting [fire] best 119670 combination reg byte a [ fire::$6 ] -Attempting to uplift remaining variables inzp ZP_BYTE:17 [ makecharset::c#2 makecharset::c#1 ] -Uplifting [makecharset] best 119670 combination zp ZP_BYTE:17 [ makecharset::c#2 makecharset::c#1 ] -Coalescing zero page register [ zp ZP_WORD:2 [ fire::screen#0 ] ] with [ zp ZP_WORD:10 [ fire::screen#10 fire::screen#3 fire::screen#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:35 [ makecharset::$15 ] ] with [ zp ZP_WORD:37 [ makecharset::$16 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:39 [ makecharset::$17 ] ] with [ zp ZP_WORD:41 [ makecharset::$18 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:35 [ makecharset::$15 makecharset::$16 ] ] with [ zp ZP_WORD:39 [ makecharset::$17 makecharset::$18 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:13 [ makecharset::font#2 makecharset::font#1 ] ] with [ zp ZP_WORD:2 [ fire::screen#0 fire::screen#10 fire::screen#3 fire::screen#1 ] ] -Coalescing zero page register [ zp ZP_WORD:15 [ makecharset::font1#2 makecharset::font1#1 ] ] with [ zp ZP_WORD:4 [ fire::buffer#4 fire::buffer#2 ] ] -Coalescing zero page register [ zp ZP_WORD:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] ] with [ zp ZP_WORD:6 [ fire::screen#4 fire::screen#11 fire::screen#2 ] ] -Coalescing zero page register [ zp ZP_WORD:25 [ fillscreen::i#2 fillscreen::i#1 ] ] with [ zp ZP_WORD:8 [ fire::buffer#10 fire::buffer#3 ] ] -Coalescing zero page register [ zp ZP_WORD:35 [ makecharset::$15 makecharset::$16 makecharset::$17 makecharset::$18 ] ] with [ zp ZP_WORD:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 fire::screen#4 fire::screen#11 fire::screen#2 ] ] -Allocated (was zp ZP_WORD:13) zp ZP_WORD:2 [ makecharset::font#2 makecharset::font#1 fire::screen#0 fire::screen#10 fire::screen#3 fire::screen#1 ] -Allocated (was zp ZP_WORD:15) zp ZP_WORD:4 [ makecharset::font1#2 makecharset::font1#1 fire::buffer#4 fire::buffer#2 ] -Allocated (was zp ZP_BYTE:17) zp ZP_BYTE:6 [ makecharset::c#2 makecharset::c#1 ] -Allocated (was zp ZP_BYTE:18) zp ZP_BYTE:7 [ makecharset::i#2 makecharset::i#1 ] -Allocated (was zp ZP_BYTE:20) zp ZP_BYTE:8 [ makecharset::ii#2 makecharset::ii#1 ] -Allocated (was zp ZP_WORD:25) zp ZP_WORD:9 [ fillscreen::i#2 fillscreen::i#1 fire::buffer#10 fire::buffer#3 ] -Allocated (was zp ZP_WORD:35) zp ZP_WORD:11 [ makecharset::$15 makecharset::$16 makecharset::$17 makecharset::$18 fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 fire::screen#4 fire::screen#11 fire::screen#2 ] -Allocated (was zp ZP_BYTE:45) zp ZP_BYTE:13 [ makecharset::$13 ] +Uplifting [sid_rnd] best 125012 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] +Uplifting [fillscreen] best 124990 combination zp ZP_WORD:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] zp ZP_WORD:25 [ fillscreen::i#2 fillscreen::i#1 ] reg byte x [ fillscreen::fill#5 ] +Uplifting [sid_rnd_init] best 124990 combination +Uplifting [main] best 124990 combination +Uplifting [] best 124990 combination +Attempting to uplift remaining variables inzp ZP_BYTE:37 [ makecharset::$13 ] +Uplifting [makecharset] best 124990 combination zp ZP_BYTE:37 [ makecharset::$13 ] +Attempting to uplift remaining variables inzp ZP_BYTE:19 [ makecharset::ii#6 makecharset::ii#1 ] +Uplifting [makecharset] best 124990 combination zp ZP_BYTE:19 [ makecharset::ii#6 makecharset::ii#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:18 [ makecharset::i#13 makecharset::i#1 ] +Uplifting [makecharset] best 124990 combination zp ZP_BYTE:18 [ makecharset::i#13 makecharset::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:31 [ fire::$12 ] +Uplifting [fire] best 124390 combination reg byte a [ fire::$12 ] +Attempting to uplift remaining variables inzp ZP_BYTE:32 [ fire::$13 ] +Uplifting [fire] best 123990 combination reg byte a [ fire::$13 ] +Attempting to uplift remaining variables inzp ZP_BYTE:33 [ fire::$14 ] +Uplifting [fire] best 123390 combination reg byte a [ fire::$14 ] +Attempting to uplift remaining variables inzp ZP_BYTE:17 [ makecharset::c#17 makecharset::c#1 ] +Uplifting [makecharset] best 123390 combination zp ZP_BYTE:17 [ makecharset::c#17 makecharset::c#1 ] +Coalescing zero page register [ zp ZP_WORD:2 [ fire::screen#0 ] ] with [ zp ZP_WORD:11 [ fire::screen#15 fire::screen#10 fire::screen#1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:38 [ makecharset::$15 ] ] with [ zp ZP_WORD:40 [ makecharset::$16 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:42 [ makecharset::$17 ] ] with [ zp ZP_WORD:44 [ makecharset::$18 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:38 [ makecharset::$15 makecharset::$16 ] ] with [ zp ZP_WORD:42 [ makecharset::$17 makecharset::$18 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:13 [ makecharset::font#4 makecharset::font#1 ] ] with [ zp ZP_WORD:2 [ fire::screen#0 fire::screen#15 fire::screen#10 fire::screen#1 ] ] +Coalescing zero page register [ zp ZP_WORD:15 [ makecharset::font1#4 makecharset::font1#1 ] ] with [ zp ZP_WORD:4 [ fire::buffer#11 fire::buffer#2 ] ] +Coalescing zero page register [ zp ZP_WORD:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] ] with [ zp ZP_WORD:6 [ fire::screen#11 fire::screen#2 fire::screen#19 ] ] +Coalescing zero page register [ zp ZP_WORD:25 [ fillscreen::i#2 fillscreen::i#1 ] ] with [ zp ZP_WORD:9 [ fire::buffer#15 fire::buffer#10 ] ] +Coalescing zero page register [ zp ZP_WORD:38 [ makecharset::$15 makecharset::$16 makecharset::$17 makecharset::$18 ] ] with [ zp ZP_WORD:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 fire::screen#11 fire::screen#2 fire::screen#19 ] ] +Allocated (was zp ZP_WORD:13) zp ZP_WORD:2 [ makecharset::font#4 makecharset::font#1 fire::screen#0 fire::screen#15 fire::screen#10 fire::screen#1 ] +Allocated (was zp ZP_WORD:15) zp ZP_WORD:4 [ makecharset::font1#4 makecharset::font1#1 fire::buffer#11 fire::buffer#2 ] +Allocated (was zp ZP_BYTE:17) zp ZP_BYTE:6 [ makecharset::c#17 makecharset::c#1 ] +Allocated (was zp ZP_BYTE:18) zp ZP_BYTE:7 [ makecharset::i#13 makecharset::i#1 ] +Allocated (was zp ZP_BYTE:19) zp ZP_BYTE:8 [ makecharset::ii#6 makecharset::ii#1 ] +Allocated (was zp ZP_WORD:25) zp ZP_WORD:9 [ fillscreen::i#2 fillscreen::i#1 fire::buffer#15 fire::buffer#10 ] +Allocated (was zp ZP_BYTE:37) zp ZP_BYTE:11 [ makecharset::$13 ] +Allocated (was zp ZP_WORD:38) zp ZP_WORD:12 [ makecharset::$15 makecharset::$16 makecharset::$17 makecharset::$18 fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 fire::screen#11 fire::screen#2 fire::screen#19 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -2675,14 +2828,14 @@ main: { lda #BLACK sta BGCOL // [7] call fillscreen - // [91] phi from main to fillscreen [phi:main->fillscreen] + // [90] phi from main to fillscreen [phi:main->fillscreen] fillscreen_from_main: - // [91] phi (byte*) fillscreen::screen#6 = (const byte*) BUFFER#0 [phi:main->fillscreen#0] -- pbuz1=pbuc1 + // [90] phi (byte*) fillscreen::screen#6 = (const byte*) BUFFER#0 [phi:main->fillscreen#0] -- pbuz1=pbuc1 lda #BUFFER sta fillscreen.screen+1 - // [91] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main->fillscreen#1] -- vbuxx=vbuc1 + // [90] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [8] phi from main to main::@4 [phi:main->main::@4] @@ -2691,14 +2844,14 @@ main: { // main::@4 b4: // [9] call fillscreen - // [91] phi from main::@4 to fillscreen [phi:main::@4->fillscreen] + // [90] phi from main::@4 to fillscreen [phi:main::@4->fillscreen] fillscreen_from_b4: - // [91] phi (byte*) fillscreen::screen#6 = (const byte*) SCREEN1#0 [phi:main::@4->fillscreen#0] -- pbuz1=pbuc1 + // [90] phi (byte*) fillscreen::screen#6 = (const byte*) SCREEN1#0 [phi:main::@4->fillscreen#0] -- pbuz1=pbuc1 lda #SCREEN1 sta fillscreen.screen+1 - // [91] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main::@4->fillscreen#1] -- vbuxx=vbuc1 + // [90] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main::@4->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2707,14 +2860,14 @@ main: { // main::@5 b5: // [11] call fillscreen - // [91] phi from main::@5 to fillscreen [phi:main::@5->fillscreen] + // [90] phi from main::@5 to fillscreen [phi:main::@5->fillscreen] fillscreen_from_b5: - // [91] phi (byte*) fillscreen::screen#6 = (const byte*) SCREEN2#0 [phi:main::@5->fillscreen#0] -- pbuz1=pbuc1 + // [90] phi (byte*) fillscreen::screen#6 = (const byte*) SCREEN2#0 [phi:main::@5->fillscreen#0] -- pbuz1=pbuc1 lda #SCREEN2 sta fillscreen.screen+1 - // [91] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main::@5->fillscreen#1] -- vbuxx=vbuc1 + // [90] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main::@5->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2723,14 +2876,14 @@ main: { // main::@6 b6: // [13] call fillscreen - // [91] phi from main::@6 to fillscreen [phi:main::@6->fillscreen] + // [90] phi from main::@6 to fillscreen [phi:main::@6->fillscreen] fillscreen_from_b6: - // [91] phi (byte*) fillscreen::screen#6 = (const byte*) COLS#0 [phi:main::@6->fillscreen#0] -- pbuz1=pbuc1 + // [90] phi (byte*) fillscreen::screen#6 = (const byte*) COLS#0 [phi:main::@6->fillscreen#0] -- pbuz1=pbuc1 lda #COLS sta fillscreen.screen+1 - // [91] phi (byte) fillscreen::fill#5 = (const byte) YELLOW#0 [phi:main::@6->fillscreen#1] -- vbuxx=vbuc1 + // [90] phi (byte) fillscreen::fill#5 = (const byte) YELLOW#0 [phi:main::@6->fillscreen#1] -- vbuxx=vbuc1 ldx #YELLOW jsr fillscreen // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2746,7 +2899,7 @@ main: { // main::@8 b8: // [17] call makecharset - // [56] phi from main::@8 to makecharset [phi:main::@8->makecharset] + // [55] phi from main::@8 to makecharset [phi:main::@8->makecharset] makecharset_from_b8: jsr makecharset // [18] phi from main::@3 main::@8 to main::@1 [phi:main::@3/main::@8->main::@1] @@ -2801,39 +2954,101 @@ main: { // Animate the fire on the passed screen. Uses BUFFER to store the current values. fire: { .label screen = 2 - .label screen_2 = $b + .label screen_2 = $c .label buffer = 4 - .label buffer_3 = 9 - .label screen_4 = $b .label buffer_10 = 9 - .label screen_11 = $b - // [26] (byte*~) fire::screen#11 ← (byte*) fire::screen#0 -- pbuz1=pbuz2 + .label screen_11 = $c + .label buffer_15 = 9 + .label screen_19 = $c + jmp b1_1 + // fire::@1_1 + b1_1: + // [26] (byte*~) fire::screen#19 ← (byte*) fire::screen#0 -- pbuz1=pbuz2 lda screen - sta screen_11 + sta screen_19 lda screen+1 - sta screen_11+1 - // [27] phi from fire to fire::@1 [phi:fire->fire::@1] - b1_from_fire: - // [27] phi (byte*) fire::screen#4 = (byte*~) fire::screen#11 [phi:fire->fire::@1#0] -- register_copy - // [27] phi (byte*) fire::buffer#4 = (const byte*) BUFFER#0 [phi:fire->fire::@1#1] -- pbuz1=pbuc1 + sta screen_19+1 + // [27] phi from fire::@1_1 to fire::@2 [phi:fire::@1_1->fire::@2] + b2_from_b1_1: + // [27] phi (byte*) fire::screen#11 = (byte*~) fire::screen#19 [phi:fire::@1_1->fire::@2#0] -- register_copy + // [27] phi (byte*) fire::buffer#11 = (const byte*) BUFFER#0 [phi:fire::@1_1->fire::@2#1] -- pbuz1=pbuc1 lda #BUFFER sta buffer+1 + jmp b2 + // [27] phi from fire::@1 to fire::@2 [phi:fire::@1->fire::@2] + b2_from_b1: + // [27] phi (byte*) fire::screen#11 = (byte*) fire::screen#2 [phi:fire::@1->fire::@2#0] -- register_copy + // [27] phi (byte*) fire::buffer#11 = (byte*) fire::buffer#2 [phi:fire::@1->fire::@2#1] -- register_copy + jmp b2 + // fire::@2 + b2: + // [28] (byte~) fire::$4 ← *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) -- vbuaa=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc2 + ldy #$28-1 + clc + lda (buffer),y + ldy #$28-1 + adc (buffer),y + // [29] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#11 + (byte) $28) -- vbuaa=vbuaa_plus_pbuz1_derefidx_vbuc1 + ldy #$28 + clc + adc (buffer),y + // [30] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#11 + (byte) $29) -- vbuaa=vbuaa_plus_pbuz1_derefidx_vbuc1 + ldy #$29 + clc + adc (buffer),y + // [31] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 -- vbuaa=vbuaa_ror_2 + lsr + lsr + // [32] if((byte) fire::c#0<(byte) 2+(byte) 1) goto fire::@4 -- vbuaa_lt_vbuc1_then_la1 + cmp #2+1 + bcc b4_from_b2 + jmp b5 + // fire::@5 + b5: + // [33] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 -- vbuaa=vbuaa_minus_vbuc1 + sec + sbc #3 + // [34] phi from fire::@2 fire::@5 to fire::@4 [phi:fire::@2/fire::@5->fire::@4] + b4_from_b2: + b4_from_b5: + // [34] phi (byte) fire::c#2 = (byte) fire::c#0 [phi:fire::@2/fire::@5->fire::@4#0] -- register_copy + jmp b4 + // fire::@4 + b4: + // [35] *((byte*) fire::buffer#11) ← (byte) fire::c#2 -- _deref_pbuz1=vbuaa + ldy #0 + sta (buffer),y + // [36] *((byte*) fire::screen#11) ← *((byte*) fire::buffer#11) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (buffer),y + ldy #0 + sta (screen_11),y + // [37] (byte*) fire::screen#2 ← ++ (byte*) fire::screen#11 -- pbuz1=_inc_pbuz1 + inc screen_2 + bne !+ + inc screen_2+1 + !: + // [38] (byte*) fire::buffer#2 ← ++ (byte*) fire::buffer#11 -- pbuz1=_inc_pbuz1 + inc buffer + bne !+ + inc buffer+1 + !: jmp b1 // fire::@1 b1: - // [28] if((byte*) fire::buffer#4!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 -- pbuz1_neq_pbuc1_then_la1 + // [39] if((byte*) fire::buffer#2!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 -- pbuz1_neq_pbuc1_then_la1 lda buffer+1 cmp #>BUFFER+$18*$28 - bne b2 + bne b2_from_b1 lda buffer cmp #$18*$28 sta screen+1 - // [30] phi from fire::@3 to fire::@6 [phi:fire::@3->fire::@6] - b6_from_b3: - // [30] phi (byte*) fire::screen#10 = (byte*) fire::screen#1 [phi:fire::@3->fire::@6#0] -- register_copy - // [30] phi (byte*) fire::buffer#10 = (const byte*) BUFFER#0+(word)(number) $18*(number) $28 [phi:fire::@3->fire::@6#1] -- pbuz1=pbuc1 + // [41] phi from fire::@3 to fire::@7 [phi:fire::@3->fire::@7] + b7_from_b3: + // [41] phi (byte*) fire::screen#15 = (byte*) fire::screen#1 [phi:fire::@3->fire::@7#0] -- register_copy + // [41] phi (byte*) fire::buffer#15 = (const byte*) BUFFER#0+(word)(number) $18*(number) $28 [phi:fire::@3->fire::@7#1] -- pbuz1=pbuc1 lda #BUFFER+$18*$28 - sta buffer_10+1 + sta buffer_15+1 + jmp b7 + // [41] phi from fire::@6 to fire::@7 [phi:fire::@6->fire::@7] + b7_from_b6: + // [41] phi (byte*) fire::screen#15 = (byte*) fire::screen#10 [phi:fire::@6->fire::@7#0] -- register_copy + // [41] phi (byte*) fire::buffer#15 = (byte*) fire::buffer#10 [phi:fire::@6->fire::@7#1] -- register_copy + jmp b7 + // fire::@7 + b7: + // [42] call sid_rnd + jsr sid_rnd + // [43] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + jmp b8 + // fire::@8 + b8: + // [44] (byte~) fire::$12 ← (byte) sid_rnd::return#2 + // [45] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 -- vbuaa=vbuaa_ror_4 + lsr + lsr + lsr + lsr + // [46] (byte~) fire::$14 ← (byte) $30 + (byte~) fire::$13 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #$30 + // [47] *((byte*) fire::buffer#15) ← (byte~) fire::$14 -- _deref_pbuz1=vbuaa + ldy #0 + sta (buffer_15),y + // [48] *((byte*) fire::screen#15) ← *((byte*) fire::buffer#15) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (buffer_15),y + ldy #0 + sta (screen),y + // [49] (byte*) fire::screen#10 ← ++ (byte*) fire::screen#15 -- pbuz1=_inc_pbuz1 + inc screen + bne !+ + inc screen+1 + !: + // [50] (byte*) fire::buffer#10 ← ++ (byte*) fire::buffer#15 -- pbuz1=_inc_pbuz1 + inc buffer_10 + bne !+ + inc buffer_10+1 + !: jmp b6 // fire::@6 b6: - // [31] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 -- pbuz1_neq_pbuc1_then_la1 + // [51] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 -- pbuz1_neq_pbuc1_then_la1 lda buffer_10+1 cmp #>BUFFER+$19*$28 bne b7_from_b6 @@ -2862,240 +3118,206 @@ fire: { jmp breturn // fire::@return breturn: - // [32] return + // [52] return rts - // [33] phi from fire::@6 to fire::@7 [phi:fire::@6->fire::@7] - b7_from_b6: - jmp b7 - // fire::@7 - b7: - // [34] call sid_rnd - jsr sid_rnd - // [35] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - jmp b8 - // fire::@8 - b8: - // [36] (byte~) fire::$12 ← (byte) sid_rnd::return#2 - // [37] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 -- vbuaa=vbuaa_ror_4 - lsr - lsr - lsr - lsr - // [38] (byte~) fire::$14 ← (byte) $30 + (byte~) fire::$13 -- vbuaa=vbuc1_plus_vbuaa - clc - adc #$30 - // [39] *((byte*) fire::buffer#10) ← (byte~) fire::$14 -- _deref_pbuz1=vbuaa - ldy #0 - sta (buffer_10),y - // [40] *((byte*) fire::screen#10) ← *((byte*) fire::buffer#10) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (buffer_10),y - ldy #0 - sta (screen),y - // [41] (byte*) fire::screen#3 ← ++ (byte*) fire::screen#10 -- pbuz1=_inc_pbuz1 - inc screen - bne !+ - inc screen+1 - !: - // [42] (byte*) fire::buffer#3 ← ++ (byte*) fire::buffer#10 -- pbuz1=_inc_pbuz1 - inc buffer_3 - bne !+ - inc buffer_3+1 - !: - // [30] phi from fire::@8 to fire::@6 [phi:fire::@8->fire::@6] - b6_from_b8: - // [30] phi (byte*) fire::screen#10 = (byte*) fire::screen#3 [phi:fire::@8->fire::@6#0] -- register_copy - // [30] phi (byte*) fire::buffer#10 = (byte*) fire::buffer#3 [phi:fire::@8->fire::@6#1] -- register_copy - jmp b6 - // fire::@2 - b2: - // [43] (byte~) fire::$4 ← *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) -- vbuaa=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc2 - ldy #$28-1 - clc - lda (buffer),y - ldy #$28-1 - adc (buffer),y - // [44] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#4 + (byte) $28) -- vbuaa=vbuaa_plus_pbuz1_derefidx_vbuc1 - ldy #$28 - clc - adc (buffer),y - // [45] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#4 + (byte) $29) -- vbuaa=vbuaa_plus_pbuz1_derefidx_vbuc1 - ldy #$29 - clc - adc (buffer),y - // [46] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 -- vbuaa=vbuaa_ror_2 - lsr - lsr - // [47] if((byte) fire::c#0<(byte) 2+(byte) 1) goto fire::@4 -- vbuaa_lt_vbuc1_then_la1 - cmp #2+1 - bcc b4_from_b2 - jmp b5 - // fire::@5 - b5: - // [48] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 -- vbuaa=vbuaa_minus_vbuc1 - sec - sbc #3 - // [49] phi from fire::@2 fire::@5 to fire::@4 [phi:fire::@2/fire::@5->fire::@4] - b4_from_b2: - b4_from_b5: - // [49] phi (byte) fire::c#2 = (byte) fire::c#0 [phi:fire::@2/fire::@5->fire::@4#0] -- register_copy - jmp b4 - // fire::@4 - b4: - // [50] *((byte*) fire::buffer#4) ← (byte) fire::c#2 -- _deref_pbuz1=vbuaa - ldy #0 - sta (buffer),y - // [51] *((byte*) fire::screen#4) ← *((byte*) fire::buffer#4) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (buffer),y - ldy #0 - sta (screen_4),y - // [52] (byte*) fire::screen#2 ← ++ (byte*) fire::screen#4 -- pbuz1=_inc_pbuz1 - inc screen_2 - bne !+ - inc screen_2+1 - !: - // [53] (byte*) fire::buffer#2 ← ++ (byte*) fire::buffer#4 -- pbuz1=_inc_pbuz1 - inc buffer - bne !+ - inc buffer+1 - !: - // [27] phi from fire::@4 to fire::@1 [phi:fire::@4->fire::@1] - b1_from_b4: - // [27] phi (byte*) fire::screen#4 = (byte*) fire::screen#2 [phi:fire::@4->fire::@1#0] -- register_copy - // [27] phi (byte*) fire::buffer#4 = (byte*) fire::buffer#2 [phi:fire::@4->fire::@1#1] -- register_copy - jmp b1 } // sid_rnd // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { - // [54] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 + // [53] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 lda SID_VOICE3_OSC jmp breturn // sid_rnd::@return breturn: - // [55] return + // [54] return rts } // makecharset // Make a fire-friendly charset in chars $00-$3f of the passed charset makecharset: { - .label _13 = $d - .label _15 = $b - .label _16 = $b - .label _17 = $b + .label _13 = $b + .label _15 = $c + .label _16 = $c + .label _17 = $c .label font = 2 .label font1 = 4 .label c = 6 .label i = 7 .label ii = 8 - .label _18 = $b - // [57] phi from makecharset to makecharset::@1 [phi:makecharset->makecharset::@1] - b1_from_makecharset: - // [57] phi (byte*) makecharset::font#2 = (const byte*) CHARSET#0 [phi:makecharset->makecharset::@1#0] -- pbuz1=pbuc1 + .label _18 = $c + // [56] phi from makecharset to makecharset::@2 [phi:makecharset->makecharset::@2] + b2_from_makecharset: + // [56] phi (byte*) makecharset::font#4 = (const byte*) CHARSET#0 [phi:makecharset->makecharset::@2#0] -- pbuz1=pbuc1 lda #CHARSET sta font+1 + jmp b2 + // [56] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2] + b2_from_b1: + // [56] phi (byte*) makecharset::font#4 = (byte*) makecharset::font#1 [phi:makecharset::@1->makecharset::@2#0] -- register_copy + jmp b2 + // makecharset::@2 + b2: + // [57] *((byte*) makecharset::font#4) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (font),y + // [58] (byte*) makecharset::font#1 ← ++ (byte*) makecharset::font#4 -- pbuz1=_inc_pbuz1 + inc font + bne !+ + inc font+1 + !: jmp b1 // makecharset::@1 b1: - // [58] if((byte*) makecharset::font#2!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [59] if((byte*) makecharset::font#1!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 -- pbuz1_neq_pbuc1_then_la1 lda font+1 cmp #>CHARSET+1*8 - bne b2 + bne b2_from_b1 lda font cmp #makecharset::@3] - b3_from_b1: - // [59] phi (byte*) makecharset::font1#2 = (const byte*) CHARSET#0+(word)(number) $40*(number) 8 [phi:makecharset::@1->makecharset::@3#0] -- pbuz1=pbuc1 + bne b2_from_b1 + // [60] phi from makecharset::@1 to makecharset::@4 [phi:makecharset::@1->makecharset::@4] + b4_from_b1: + // [60] phi (byte*) makecharset::font1#4 = (const byte*) CHARSET#0+(word)(number) $40*(number) 8 [phi:makecharset::@1->makecharset::@4#0] -- pbuz1=pbuc1 lda #CHARSET+$40*8 sta font1+1 + jmp b4 + // [60] phi from makecharset::@3 to makecharset::@4 [phi:makecharset::@3->makecharset::@4] + b4_from_b3: + // [60] phi (byte*) makecharset::font1#4 = (byte*) makecharset::font1#1 [phi:makecharset::@3->makecharset::@4#0] -- register_copy + jmp b4 + // makecharset::@4 + b4: + // [61] *((byte*) makecharset::font1#4) ← (byte) $ff -- _deref_pbuz1=vbuc1 + lda #$ff + ldy #0 + sta (font1),y + // [62] (byte*) makecharset::font1#1 ← ++ (byte*) makecharset::font1#4 -- pbuz1=_inc_pbuz1 + inc font1 + bne !+ + inc font1+1 + !: jmp b3 // makecharset::@3 b3: - // [60] if((byte*) makecharset::font1#2!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 -- pbuz1_neq_pbuc1_then_la1 + // [63] if((byte*) makecharset::font1#1!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 -- pbuz1_neq_pbuc1_then_la1 lda font1+1 cmp #>CHARSET+$100*8 - bne b4 + bne b4_from_b3 lda font1 cmp #makecharset::@5] - b5_from_b3: - // [61] phi (byte) makecharset::c#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#0] -- vbuz1=vbuc1 + bne b4_from_b3 + // [64] phi from makecharset::@3 to makecharset::@6 [phi:makecharset::@3->makecharset::@6] + b6_from_b3: + // [64] phi (byte) makecharset::c#17 = (byte) 0 [phi:makecharset::@3->makecharset::@6#0] -- vbuz1=vbuc1 lda #0 sta c - jmp b5 - // makecharset::@5 - b5: - // [62] if((byte) makecharset::c#2<(byte) $40) goto makecharset::@6 -- vbuz1_lt_vbuc1_then_la1 - lda c - cmp #$40 - bcc b6_from_b5 - jmp breturn - // makecharset::@return - breturn: - // [63] return - rts + jmp b6 // [64] phi from makecharset::@5 to makecharset::@6 [phi:makecharset::@5->makecharset::@6] b6_from_b5: - // [64] phi (byte) makecharset::bc#6 = (byte) 0 [phi:makecharset::@5->makecharset::@6#0] -- vbuxx=vbuc1 - ldx #0 - // [64] phi (byte) makecharset::i#2 = (byte) 0 [phi:makecharset::@5->makecharset::@6#1] -- vbuz1=vbuc1 - lda #0 - sta i + // [64] phi (byte) makecharset::c#17 = (byte) makecharset::c#1 [phi:makecharset::@5->makecharset::@6#0] -- register_copy jmp b6 // makecharset::@6 b6: - // [65] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@8 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #8 - bcc b8_from_b6 - jmp b7 - // makecharset::@7 - b7: - // [66] (byte) makecharset::c#1 ← ++ (byte) makecharset::c#2 -- vbuz1=_inc_vbuz1 - inc c - // [61] phi from makecharset::@7 to makecharset::@5 [phi:makecharset::@7->makecharset::@5] - b5_from_b7: - // [61] phi (byte) makecharset::c#2 = (byte) makecharset::c#1 [phi:makecharset::@7->makecharset::@5#0] -- register_copy - jmp b5 - // [67] phi from makecharset::@6 to makecharset::@8 [phi:makecharset::@6->makecharset::@8] + // [65] phi from makecharset::@6 to makecharset::@8 [phi:makecharset::@6->makecharset::@8] b8_from_b6: - // [67] phi (byte) makecharset::b#2 = (byte) 0 [phi:makecharset::@6->makecharset::@8#0] -- vbuyy=vbuc1 - ldy #0 - // [67] phi (byte) makecharset::bc#3 = (byte) makecharset::bc#6 [phi:makecharset::@6->makecharset::@8#1] -- register_copy - // [67] phi (byte) makecharset::ii#2 = (byte) 0 [phi:makecharset::@6->makecharset::@8#2] -- vbuz1=vbuc1 + // [65] phi (byte) makecharset::bc#10 = (byte) 0 [phi:makecharset::@6->makecharset::@8#0] -- vbuxx=vbuc1 + ldx #0 + // [65] phi (byte) makecharset::i#13 = (byte) 0 [phi:makecharset::@6->makecharset::@8#1] -- vbuz1=vbuc1 lda #0 - sta ii + sta i + jmp b8 + // [65] phi from makecharset::@7 to makecharset::@8 [phi:makecharset::@7->makecharset::@8] + b8_from_b7: + // [65] phi (byte) makecharset::bc#10 = (byte) makecharset::bc#12 [phi:makecharset::@7->makecharset::@8#0] -- register_copy + // [65] phi (byte) makecharset::i#13 = (byte) makecharset::i#1 [phi:makecharset::@7->makecharset::@8#1] -- register_copy jmp b8 // makecharset::@8 b8: - // [68] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@9 -- vbuz1_lt_vbuc1_then_la1 - lda ii - cmp #8 - bcc b9 + // [66] phi from makecharset::@8 to makecharset::@11 [phi:makecharset::@8->makecharset::@11] + b11_from_b8: + // [66] phi (byte) makecharset::b#8 = (byte) 0 [phi:makecharset::@8->makecharset::@11#0] -- vbuyy=vbuc1 + ldy #0 + // [66] phi (byte) makecharset::bc#13 = (byte) makecharset::bc#10 [phi:makecharset::@8->makecharset::@11#1] -- register_copy + // [66] phi (byte) makecharset::ii#6 = (byte) 0 [phi:makecharset::@8->makecharset::@11#2] -- vbuz1=vbuc1 + lda #0 + sta ii + jmp b11 + // [66] phi from makecharset::@10 to makecharset::@11 [phi:makecharset::@10->makecharset::@11] + b11_from_b10: + // [66] phi (byte) makecharset::b#8 = (byte) makecharset::b#2 [phi:makecharset::@10->makecharset::@11#0] -- register_copy + // [66] phi (byte) makecharset::bc#13 = (byte) makecharset::bc#12 [phi:makecharset::@10->makecharset::@11#1] -- register_copy + // [66] phi (byte) makecharset::ii#6 = (byte) makecharset::ii#1 [phi:makecharset::@10->makecharset::@11#2] -- register_copy + jmp b11 + // makecharset::@11 + b11: + // [67] (byte) makecharset::bc#1 ← (byte) makecharset::bc#13 + (byte) makecharset::c#17 -- vbuxx=vbuxx_plus_vbuz1 + txa + clc + adc c + tax + // [68] if((byte) makecharset::bc#1<(byte) $3f+(byte) 1) goto makecharset::@13 -- vbuxx_lt_vbuc1_then_la1 + cpx #$3f+1 + bcc b13_from_b11 + jmp b14 + // makecharset::@14 + b14: + // [69] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 -- vbuxx=vbuxx_minus_vbuc1 + txa + axs #$40 + // [70] (byte~) makecharset::$11 ← (byte) makecharset::i#13 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 + lda #1 + and i + // [71] (byte~) makecharset::$12 ← (byte) makecharset::ii#6 + (byte~) makecharset::$11 -- vbuaa=vbuz1_plus_vbuaa + clc + adc ii + // [72] (byte~) makecharset::$13 ← (byte~) makecharset::$12 & (byte) 7 -- vbuz1=vbuaa_band_vbuc1 + and #7 + sta _13 + // [73] (byte) makecharset::b#1 ← (byte) makecharset::b#8 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) -- vbuyy=vbuyy_plus_pbuc1_derefidx_vbuz1 + tya + ldy _13 + clc + adc bittab,y + tay + // [74] phi from makecharset::@11 makecharset::@14 to makecharset::@13 [phi:makecharset::@11/makecharset::@14->makecharset::@13] + b13_from_b11: + b13_from_b14: + // [74] phi (byte) makecharset::b#2 = (byte) makecharset::b#8 [phi:makecharset::@11/makecharset::@14->makecharset::@13#0] -- register_copy + // [74] phi (byte) makecharset::bc#12 = (byte) makecharset::bc#1 [phi:makecharset::@11/makecharset::@14->makecharset::@13#1] -- register_copy + jmp b13 + // makecharset::@13 + b13: + // [75] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#6 -- vbuz1=_inc_vbuz1 + inc ii jmp b10 // makecharset::@10 b10: - // [69] (word~) makecharset::$15 ← (word)(byte) makecharset::c#2 -- vwuz1=_word_vbuz2 + // [76] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@11 -- vbuz1_lt_vbuc1_then_la1 + lda ii + cmp #8 + bcc b11_from_b10 + jmp b12 + // makecharset::@12 + b12: + // [77] (word~) makecharset::$15 ← (word)(byte) makecharset::c#17 -- vwuz1=_word_vbuz2 lda c sta _15 lda #0 sta _15+1 - // [70] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [78] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl _16 rol _16+1 asl _16 rol _16+1 asl _16 rol _16+1 - // [71] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#2 -- vwuz1=vwuz1_plus_vbuz2 + // [79] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#13 -- vwuz1=vwuz1_plus_vbuz2 lda i clc adc _17 @@ -3103,7 +3325,7 @@ makecharset: { bcc !+ inc _17+1 !: - // [72] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 -- pbuz1=pbuc1_plus_vwuz1 + // [80] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 -- pbuz1=pbuc1_plus_vwuz1 clc lda _18 adc #CHARSET+1*8 sta _18+1 - // [73] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy + // [81] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy tya ldy #0 sta (_18),y - // [74] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 -- vbuz1=_inc_vbuz1 + // [82] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 -- vbuz1=_inc_vbuz1 inc i - // [64] phi from makecharset::@10 to makecharset::@6 [phi:makecharset::@10->makecharset::@6] - b6_from_b10: - // [64] phi (byte) makecharset::bc#6 = (byte) makecharset::bc#3 [phi:makecharset::@10->makecharset::@6#0] -- register_copy - // [64] phi (byte) makecharset::i#2 = (byte) makecharset::i#1 [phi:makecharset::@10->makecharset::@6#1] -- register_copy - jmp b6 + jmp b7 + // makecharset::@7 + b7: + // [83] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@8 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #8 + bcc b8_from_b7 + jmp b9 // makecharset::@9 b9: - // [75] (byte) makecharset::bc#1 ← (byte) makecharset::bc#3 + (byte) makecharset::c#2 -- vbuxx=vbuxx_plus_vbuz1 - txa - clc - adc c - tax - // [76] if((byte) makecharset::bc#1<(byte) $3f+(byte) 1) goto makecharset::@11 -- vbuxx_lt_vbuc1_then_la1 - cpx #$3f+1 - bcc b11_from_b9 - jmp b12 - // makecharset::@12 - b12: - // [77] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 -- vbuxx=vbuxx_minus_vbuc1 - txa - axs #$40 - // [78] (byte~) makecharset::$11 ← (byte) makecharset::i#2 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 - lda #1 - and i - // [79] (byte~) makecharset::$12 ← (byte) makecharset::ii#2 + (byte~) makecharset::$11 -- vbuaa=vbuz1_plus_vbuaa - clc - adc ii - // [80] (byte~) makecharset::$13 ← (byte~) makecharset::$12 & (byte) 7 -- vbuz1=vbuaa_band_vbuc1 - and #7 - sta _13 - // [81] (byte) makecharset::b#1 ← (byte) makecharset::b#2 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) -- vbuyy=vbuyy_plus_pbuc1_derefidx_vbuz1 - tya - ldy _13 - clc - adc bittab,y - tay - // [82] phi from makecharset::@12 makecharset::@9 to makecharset::@11 [phi:makecharset::@12/makecharset::@9->makecharset::@11] - b11_from_b12: - b11_from_b9: - // [82] phi (byte) makecharset::b#6 = (byte) makecharset::b#1 [phi:makecharset::@12/makecharset::@9->makecharset::@11#0] -- register_copy - // [82] phi (byte) makecharset::bc#7 = (byte) makecharset::bc#2 [phi:makecharset::@12/makecharset::@9->makecharset::@11#1] -- register_copy - jmp b11 - // makecharset::@11 - b11: - // [83] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuz1=_inc_vbuz1 - inc ii - // [67] phi from makecharset::@11 to makecharset::@8 [phi:makecharset::@11->makecharset::@8] - b8_from_b11: - // [67] phi (byte) makecharset::b#2 = (byte) makecharset::b#6 [phi:makecharset::@11->makecharset::@8#0] -- register_copy - // [67] phi (byte) makecharset::bc#3 = (byte) makecharset::bc#7 [phi:makecharset::@11->makecharset::@8#1] -- register_copy - // [67] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@11->makecharset::@8#2] -- register_copy - jmp b8 - // makecharset::@4 - b4: - // [84] *((byte*) makecharset::font1#2) ← (byte) $ff -- _deref_pbuz1=vbuc1 - lda #$ff - ldy #0 - sta (font1),y - // [85] (byte*) makecharset::font1#1 ← ++ (byte*) makecharset::font1#2 -- pbuz1=_inc_pbuz1 - inc font1 - bne !+ - inc font1+1 - !: - // [59] phi from makecharset::@4 to makecharset::@3 [phi:makecharset::@4->makecharset::@3] - b3_from_b4: - // [59] phi (byte*) makecharset::font1#2 = (byte*) makecharset::font1#1 [phi:makecharset::@4->makecharset::@3#0] -- register_copy - jmp b3 - // makecharset::@2 - b2: - // [86] *((byte*) makecharset::font#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 - lda #0 - ldy #0 - sta (font),y - // [87] (byte*) makecharset::font#1 ← ++ (byte*) makecharset::font#2 -- pbuz1=_inc_pbuz1 - inc font - bne !+ - inc font+1 - !: - // [57] phi from makecharset::@2 to makecharset::@1 [phi:makecharset::@2->makecharset::@1] - b1_from_b2: - // [57] phi (byte*) makecharset::font#2 = (byte*) makecharset::font#1 [phi:makecharset::@2->makecharset::@1#0] -- register_copy - jmp b1 + // [84] (byte) makecharset::c#1 ← ++ (byte) makecharset::c#17 -- vbuz1=_inc_vbuz1 + inc c + jmp b5 + // makecharset::@5 + b5: + // [85] if((byte) makecharset::c#1<(byte) $40) goto makecharset::@6 -- vbuz1_lt_vbuc1_then_la1 + lda c + cmp #$40 + bcc b6_from_b5 + jmp breturn + // makecharset::@return + breturn: + // [86] return + rts bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [88] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [87] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff sta SID_VOICE3_FREQ lda #>$ffff sta SID_VOICE3_FREQ+1 - // [89] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [88] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL jmp breturn // sid_rnd_init::@return breturn: - // [90] return + // [89] return rts } // fillscreen // Fill a screen (1000 bytes) with a specific byte -// fillscreen(byte* zeropage($b) screen, byte register(X) fill) +// fillscreen(byte* zeropage($c) screen, byte register(X) fill) fillscreen: { - .label screen = $b + .label screen = $c .label i = 9 - // [92] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] + // [91] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] b1_from_fillscreen: - // [92] phi (word) fillscreen::i#2 = (word) 0 [phi:fillscreen->fillscreen::@1#0] -- vwuz1=vwuc1 + // [91] phi (word) fillscreen::i#2 = (word) 0 [phi:fillscreen->fillscreen::@1#0] -- vwuz1=vwuc1 lda #<0 sta i lda #>0 sta i+1 - // [92] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#6 [phi:fillscreen->fillscreen::@1#1] -- register_copy + // [91] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#6 [phi:fillscreen->fillscreen::@1#1] -- register_copy jmp b1 - // [92] phi from fillscreen::@1 to fillscreen::@1 [phi:fillscreen::@1->fillscreen::@1] + // [91] phi from fillscreen::@1 to fillscreen::@1 [phi:fillscreen::@1->fillscreen::@1] b1_from_b1: - // [92] phi (word) fillscreen::i#2 = (word) fillscreen::i#1 [phi:fillscreen::@1->fillscreen::@1#0] -- register_copy - // [92] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#4 [phi:fillscreen::@1->fillscreen::@1#1] -- register_copy + // [91] phi (word) fillscreen::i#2 = (word) fillscreen::i#1 [phi:fillscreen::@1->fillscreen::@1#0] -- register_copy + // [91] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#4 [phi:fillscreen::@1->fillscreen::@1#1] -- register_copy jmp b1 // fillscreen::@1 b1: - // [93] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 -- _deref_pbuz1=vbuxx + // [92] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 -- _deref_pbuz1=vbuxx txa ldy #0 sta (screen),y - // [94] (byte*) fillscreen::screen#4 ← ++ (byte*) fillscreen::screen#5 -- pbuz1=_inc_pbuz1 + // [93] (byte*) fillscreen::screen#4 ← ++ (byte*) fillscreen::screen#5 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [95] (word) fillscreen::i#1 ← ++ (word) fillscreen::i#2 -- vwuz1=_inc_vwuz1 + // [94] (word) fillscreen::i#1 ← ++ (word) fillscreen::i#2 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [96] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 -- vwuz1_neq_vwuc1_then_la1 + // [95] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 -- vwuz1_neq_vwuc1_then_la1 lda i+1 cmp #>$3e8 bne b1_from_b1 @@ -3264,7 +3428,7 @@ fillscreen: { jmp breturn // fillscreen::@return breturn: - // [97] return + // [96] return rts } // File Data @@ -3282,45 +3446,61 @@ Removing instruction jmp toD0181 Removing instruction jmp b2 Removing instruction jmp toD0182 Removing instruction jmp b3 -Removing instruction jmp b1 -Removing instruction jmp b3 -Removing instruction jmp b6 -Removing instruction jmp breturn -Removing instruction jmp b7 -Removing instruction jmp b8 +Removing instruction jmp b1_1 +Removing instruction jmp b2 Removing instruction jmp b5 Removing instruction jmp b4 -Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp b3 -Removing instruction jmp b5 -Removing instruction jmp breturn -Removing instruction jmp b6 Removing instruction jmp b7 Removing instruction jmp b8 +Removing instruction jmp b6 +Removing instruction jmp breturn +Removing instruction jmp breturn +Removing instruction jmp b2 +Removing instruction jmp b1 +Removing instruction jmp b4 +Removing instruction jmp b3 +Removing instruction jmp b6 +Removing instruction jmp b8 +Removing instruction jmp b11 +Removing instruction jmp b14 +Removing instruction jmp b13 Removing instruction jmp b10 Removing instruction jmp b12 -Removing instruction jmp b11 +Removing instruction jmp b7 +Removing instruction jmp b9 +Removing instruction jmp b5 +Removing instruction jmp breturn Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #BLACK -Removing instruction ldy #0 -Removing instruction ldy #0 Removing instruction ldy #$28-1 Removing instruction ldy #0 Removing instruction ldy #0 +Removing instruction ldy #0 +Removing instruction ldy #0 +Replacing instruction ldy #0 with TAY Replacing instruction lda #0 with TXA Replacing instruction lda #0 with TYA -Replacing instruction ldy #0 with TAY Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b3 with b1 -Replacing label b7_from_b6 with b7 -Replacing label b7_from_b6 with b7 Replacing label b4_from_b2 with b4 -Replacing label b11_from_b9 with b11 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b7_from_b6 with b7 +Replacing label b7_from_b6 with b7 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b4_from_b3 with b4 +Replacing label b4_from_b3 with b4 +Replacing label b13_from_b11 with b13 +Replacing label b11_from_b10 with b11 +Replacing label b8_from_b7 with b8 +Replacing label b6_from_b5 with b6 Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 Removing instruction b1_from_bbegin: @@ -3342,11 +3522,19 @@ Removing instruction toD0181_from_b1: Removing instruction toD0181: Removing instruction toD0182_from_b2: Removing instruction toD0182: -Removing instruction b7_from_b6: +Removing instruction b2_from_b1: Removing instruction b4_from_b2: Removing instruction b4_from_b5: -Removing instruction b11_from_b12: -Removing instruction b11_from_b9: +Removing instruction b7_from_b6: +Removing instruction b2_from_b1: +Removing instruction b4_from_b3: +Removing instruction b6_from_b5: +Removing instruction b8_from_b6: +Removing instruction b8_from_b7: +Removing instruction b11_from_b8: +Removing instruction b11_from_b10: +Removing instruction b13_from_b11: +Removing instruction b13_from_b14: Removing instruction b1_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: @@ -3359,27 +3547,28 @@ Removing instruction b8: Removing instruction b2: Removing instruction fire_from_b2: Removing instruction b3: -Removing instruction b1_from_fire: +Removing instruction b1_1: +Removing instruction b2_from_b1_1: +Removing instruction b5: +Removing instruction b1: +Removing instruction b3: +Removing instruction b7_from_b3: +Removing instruction b8: +Removing instruction b6: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction b2_from_makecharset: +Removing instruction b1: +Removing instruction b4_from_b1: Removing instruction b3: Removing instruction b6_from_b3: -Removing instruction breturn: -Removing instruction b8: -Removing instruction b6_from_b8: -Removing instruction b5: -Removing instruction b1_from_b4: -Removing instruction breturn: -Removing instruction b1_from_makecharset: -Removing instruction b3_from_b1: -Removing instruction b5_from_b3: -Removing instruction breturn: -Removing instruction b7: -Removing instruction b5_from_b7: +Removing instruction b14: Removing instruction b10: -Removing instruction b6_from_b10: Removing instruction b12: -Removing instruction b8_from_b11: -Removing instruction b3_from_b4: -Removing instruction b1_from_b2: +Removing instruction b7: +Removing instruction b9: +Removing instruction b5: +Removing instruction breturn: Removing instruction breturn: Removing instruction b1_from_fillscreen: Removing instruction breturn: @@ -3387,17 +3576,17 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Relabelling long label b6_from_b5 to b7 -Relabelling long label b8_from_b6 to b10 -Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b2 +Removing instruction jmp b7 +Removing instruction jmp b2 +Removing instruction jmp b4 +Removing instruction jmp b6 +Removing instruction jmp b8 +Removing instruction jmp b11 Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [196] bne b2 to beq -Fixing long branch [201] bne b2 to beq -Fixing long branch [211] bne b4 to beq -Fixing long branch [216] bne b4 to beq FINAL SYMBOL TABLE (label) @1 @@ -3440,9 +3629,9 @@ FINAL SYMBOL TABLE (word) fillscreen::i#1 i zp ZP_WORD:9 16.5 (word) fillscreen::i#2 i zp ZP_WORD:9 7.333333333333333 (byte*) fillscreen::screen -(byte*) fillscreen::screen#4 screen zp ZP_WORD:11 7.333333333333333 -(byte*) fillscreen::screen#5 screen zp ZP_WORD:11 17.5 -(byte*) fillscreen::screen#6 screen zp ZP_WORD:11 2.0 +(byte*) fillscreen::screen#4 screen zp ZP_WORD:12 7.333333333333333 +(byte*) fillscreen::screen#5 screen zp ZP_WORD:12 17.5 +(byte*) fillscreen::screen#6 screen zp ZP_WORD:12 2.0 (void()) fire((byte*) fire::screenbase) (byte~) fire::$12 reg byte a 202.0 (byte~) fire::$13 reg byte a 202.0 @@ -3451,6 +3640,7 @@ FINAL SYMBOL TABLE (byte~) fire::$5 reg byte a 202.0 (byte~) fire::$6 reg byte a 202.0 (label) fire::@1 +(label) fire::@1_1 (label) fire::@2 (label) fire::@3 (label) fire::@4 @@ -3460,10 +3650,10 @@ FINAL SYMBOL TABLE (label) fire::@8 (label) fire::@return (byte*) fire::buffer -(byte*) fire::buffer#10 buffer#10 zp ZP_WORD:9 45.90909090909091 -(byte*) fire::buffer#2 buffer zp ZP_WORD:4 202.0 -(byte*) fire::buffer#3 buffer#3 zp ZP_WORD:9 202.0 -(byte*) fire::buffer#4 buffer zp ZP_WORD:4 75.75 +(byte*) fire::buffer#10 buffer#10 zp ZP_WORD:9 151.5 +(byte*) fire::buffer#11 buffer zp ZP_WORD:4 73.45454545454545 +(byte*) fire::buffer#15 buffer#15 zp ZP_WORD:9 44.888888888888886 +(byte*) fire::buffer#2 buffer zp ZP_WORD:4 151.5 (byte) fire::c (byte) fire::c#0 reg byte a 202.0 (byte) fire::c#1 reg byte a 202.0 @@ -3471,11 +3661,11 @@ FINAL SYMBOL TABLE (byte*) fire::screen (byte*) fire::screen#0 screen zp ZP_WORD:2 0.26666666666666666 (byte*) fire::screen#1 screen zp ZP_WORD:2 4.0 -(byte*) fire::screen#10 screen zp ZP_WORD:2 30.5 -(byte*~) fire::screen#11 screen#11 zp ZP_WORD:11 4.0 -(byte*) fire::screen#2 screen#2 zp ZP_WORD:11 101.0 -(byte*) fire::screen#3 screen zp ZP_WORD:2 101.0 -(byte*) fire::screen#4 screen#4 zp ZP_WORD:11 27.727272727272727 +(byte*) fire::screen#10 screen zp ZP_WORD:2 67.33333333333333 +(byte*) fire::screen#11 screen#11 zp ZP_WORD:12 30.5 +(byte*) fire::screen#15 screen zp ZP_WORD:2 38.125 +(byte*~) fire::screen#19 screen#19 zp ZP_WORD:12 4.0 +(byte*) fire::screen#2 screen#2 zp ZP_WORD:12 67.33333333333333 (byte*) fire::screenbase (void()) main() (label) main::@1 @@ -3517,15 +3707,17 @@ FINAL SYMBOL TABLE (void()) makecharset((byte*) makecharset::charset) (byte~) makecharset::$11 reg byte a 2002.0 (byte~) makecharset::$12 reg byte a 2002.0 -(byte~) makecharset::$13 $13 zp ZP_BYTE:13 2002.0 -(word~) makecharset::$15 $15 zp ZP_WORD:11 202.0 -(word~) makecharset::$16 $16 zp ZP_WORD:11 202.0 -(word~) makecharset::$17 $17 zp ZP_WORD:11 202.0 -(byte*~) makecharset::$18 $18 zp ZP_WORD:11 202.0 +(byte~) makecharset::$13 $13 zp ZP_BYTE:11 2002.0 +(word~) makecharset::$15 $15 zp ZP_WORD:12 202.0 +(word~) makecharset::$16 $16 zp ZP_WORD:12 202.0 +(word~) makecharset::$17 $17 zp ZP_WORD:12 202.0 +(byte*~) makecharset::$18 $18 zp ZP_WORD:12 202.0 (label) makecharset::@1 (label) makecharset::@10 (label) makecharset::@11 (label) makecharset::@12 +(label) makecharset::@13 +(label) makecharset::@14 (label) makecharset::@2 (label) makecharset::@3 (label) makecharset::@4 @@ -3537,32 +3729,32 @@ FINAL SYMBOL TABLE (label) makecharset::@return (byte) makecharset::b (byte) makecharset::b#1 reg byte y 2002.0 -(byte) makecharset::b#2 reg byte y 258.6666666666667 -(byte) makecharset::b#6 reg byte y 1501.5 +(byte) makecharset::b#2 reg byte y 443.42857142857144 +(byte) makecharset::b#8 reg byte y 429.0 (byte) makecharset::bc (byte) makecharset::bc#1 reg byte x 2002.0 +(byte) makecharset::bc#10 reg byte x 202.0 +(byte) makecharset::bc#12 reg byte x 310.4 +(byte) makecharset::bc#13 reg byte x 2103.0 (byte) makecharset::bc#2 reg byte x 400.4 -(byte) makecharset::bc#3 reg byte x 275.5 -(byte) makecharset::bc#6 reg byte x 101.0 -(byte) makecharset::bc#7 reg byte x 1501.5 (byte[8]) makecharset::bittab (const byte[8]) makecharset::bittab#0 bittab = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (byte) makecharset::c -(byte) makecharset::c#1 c zp ZP_BYTE:6 22.0 -(byte) makecharset::c#2 c zp ZP_BYTE:6 49.238095238095234 +(byte) makecharset::c#1 c zp ZP_BYTE:6 16.5 +(byte) makecharset::c#17 c zp ZP_BYTE:6 51.14999999999999 (byte*) makecharset::charset (byte*) makecharset::font -(byte*) makecharset::font#1 font zp ZP_WORD:2 22.0 -(byte*) makecharset::font#2 font zp ZP_WORD:2 14.666666666666666 +(byte*) makecharset::font#1 font zp ZP_WORD:2 16.5 +(byte*) makecharset::font#4 font zp ZP_WORD:2 16.5 (byte*) makecharset::font1 -(byte*) makecharset::font1#1 font1 zp ZP_WORD:4 22.0 -(byte*) makecharset::font1#2 font1 zp ZP_WORD:4 14.666666666666666 +(byte*) makecharset::font1#1 font1 zp ZP_WORD:4 16.5 +(byte*) makecharset::font1#4 font1 zp ZP_WORD:4 16.5 (byte) makecharset::i -(byte) makecharset::i#1 i zp ZP_BYTE:7 202.0 -(byte) makecharset::i#2 i zp ZP_BYTE:7 78.05555555555556 +(byte) makecharset::i#1 i zp ZP_BYTE:7 151.5 +(byte) makecharset::i#13 i zp ZP_BYTE:7 76.70588235294117 (byte) makecharset::ii -(byte) makecharset::ii#1 ii zp ZP_BYTE:8 2002.0 -(byte) makecharset::ii#2 ii zp ZP_BYTE:8 400.4 +(byte) makecharset::ii#1 ii zp ZP_BYTE:8 1501.5 +(byte) makecharset::ii#6 ii zp ZP_BYTE:8 333.6666666666667 (byte()) sid_rnd() (label) sid_rnd::@return (byte) sid_rnd::return @@ -3572,31 +3764,31 @@ FINAL SYMBOL TABLE (label) sid_rnd_init::@return reg byte a [ fire::c#2 fire::c#0 fire::c#1 ] -zp ZP_WORD:2 [ makecharset::font#2 makecharset::font#1 fire::screen#0 fire::screen#10 fire::screen#3 fire::screen#1 ] -zp ZP_WORD:4 [ makecharset::font1#2 makecharset::font1#1 fire::buffer#4 fire::buffer#2 ] -zp ZP_BYTE:6 [ makecharset::c#2 makecharset::c#1 ] -zp ZP_BYTE:7 [ makecharset::i#2 makecharset::i#1 ] -reg byte x [ makecharset::bc#6 makecharset::bc#3 makecharset::bc#7 makecharset::bc#1 makecharset::bc#2 ] -zp ZP_BYTE:8 [ makecharset::ii#2 makecharset::ii#1 ] -reg byte y [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] +zp ZP_WORD:2 [ makecharset::font#4 makecharset::font#1 fire::screen#0 fire::screen#15 fire::screen#10 fire::screen#1 ] +zp ZP_WORD:4 [ makecharset::font1#4 makecharset::font1#1 fire::buffer#11 fire::buffer#2 ] +zp ZP_BYTE:6 [ makecharset::c#17 makecharset::c#1 ] +zp ZP_BYTE:7 [ makecharset::i#13 makecharset::i#1 ] +zp ZP_BYTE:8 [ makecharset::ii#6 makecharset::ii#1 ] +reg byte x [ makecharset::bc#13 makecharset::bc#10 makecharset::bc#12 makecharset::bc#1 makecharset::bc#2 ] +reg byte y [ makecharset::b#8 makecharset::b#2 makecharset::b#1 ] reg byte x [ fillscreen::fill#5 ] -zp ZP_WORD:9 [ fillscreen::i#2 fillscreen::i#1 fire::buffer#10 fire::buffer#3 ] +zp ZP_WORD:9 [ fillscreen::i#2 fillscreen::i#1 fire::buffer#15 fire::buffer#10 ] +reg byte a [ fire::$4 ] +reg byte a [ fire::$5 ] +reg byte a [ fire::$6 ] reg byte a [ sid_rnd::return#2 ] reg byte a [ fire::$12 ] reg byte a [ fire::$13 ] reg byte a [ fire::$14 ] -reg byte a [ fire::$4 ] -reg byte a [ fire::$5 ] -reg byte a [ fire::$6 ] reg byte a [ sid_rnd::return#0 ] -zp ZP_WORD:11 [ makecharset::$15 makecharset::$16 makecharset::$17 makecharset::$18 fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 fire::screen#4 fire::screen#11 fire::screen#2 ] reg byte a [ makecharset::$11 ] reg byte a [ makecharset::$12 ] -zp ZP_BYTE:13 [ makecharset::$13 ] +zp ZP_BYTE:11 [ makecharset::$13 ] +zp ZP_WORD:12 [ makecharset::$15 makecharset::$16 makecharset::$17 makecharset::$18 fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 fire::screen#11 fire::screen#2 fire::screen#19 ] FINAL ASSEMBLER -Score: 102725 +Score: 98615 // File Comments // A KickC version of the fire routine from the CC65 samples @@ -3648,52 +3840,52 @@ main: { sta BGCOL // fillscreen(BUFFER, 00) // [7] call fillscreen - // [91] phi from main to fillscreen [phi:main->fillscreen] - // [91] phi (byte*) fillscreen::screen#6 = (const byte*) BUFFER#0 [phi:main->fillscreen#0] -- pbuz1=pbuc1 + // [90] phi from main to fillscreen [phi:main->fillscreen] + // [90] phi (byte*) fillscreen::screen#6 = (const byte*) BUFFER#0 [phi:main->fillscreen#0] -- pbuz1=pbuc1 lda #BUFFER sta fillscreen.screen+1 - // [91] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main->fillscreen#1] -- vbuxx=vbuc1 + // [90] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [8] phi from main to main::@4 [phi:main->main::@4] // main::@4 // fillscreen(SCREEN1, 00) // [9] call fillscreen - // [91] phi from main::@4 to fillscreen [phi:main::@4->fillscreen] - // [91] phi (byte*) fillscreen::screen#6 = (const byte*) SCREEN1#0 [phi:main::@4->fillscreen#0] -- pbuz1=pbuc1 + // [90] phi from main::@4 to fillscreen [phi:main::@4->fillscreen] + // [90] phi (byte*) fillscreen::screen#6 = (const byte*) SCREEN1#0 [phi:main::@4->fillscreen#0] -- pbuz1=pbuc1 lda #SCREEN1 sta fillscreen.screen+1 - // [91] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main::@4->fillscreen#1] -- vbuxx=vbuc1 + // [90] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main::@4->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // fillscreen(SCREEN2, 00) // [11] call fillscreen - // [91] phi from main::@5 to fillscreen [phi:main::@5->fillscreen] - // [91] phi (byte*) fillscreen::screen#6 = (const byte*) SCREEN2#0 [phi:main::@5->fillscreen#0] -- pbuz1=pbuc1 + // [90] phi from main::@5 to fillscreen [phi:main::@5->fillscreen] + // [90] phi (byte*) fillscreen::screen#6 = (const byte*) SCREEN2#0 [phi:main::@5->fillscreen#0] -- pbuz1=pbuc1 lda #SCREEN2 sta fillscreen.screen+1 - // [91] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main::@5->fillscreen#1] -- vbuxx=vbuc1 + // [90] phi (byte) fillscreen::fill#5 = (byte) 0 [phi:main::@5->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // fillscreen(COLS, YELLOW) // [13] call fillscreen - // [91] phi from main::@6 to fillscreen [phi:main::@6->fillscreen] - // [91] phi (byte*) fillscreen::screen#6 = (const byte*) COLS#0 [phi:main::@6->fillscreen#0] -- pbuz1=pbuc1 + // [90] phi from main::@6 to fillscreen [phi:main::@6->fillscreen] + // [90] phi (byte*) fillscreen::screen#6 = (const byte*) COLS#0 [phi:main::@6->fillscreen#0] -- pbuz1=pbuc1 lda #COLS sta fillscreen.screen+1 - // [91] phi (byte) fillscreen::fill#5 = (const byte) YELLOW#0 [phi:main::@6->fillscreen#1] -- vbuxx=vbuc1 + // [90] phi (byte) fillscreen::fill#5 = (const byte) YELLOW#0 [phi:main::@6->fillscreen#1] -- vbuxx=vbuc1 ldx #YELLOW jsr fillscreen // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -3705,7 +3897,7 @@ main: { // main::@8 // makecharset(CHARSET) // [17] call makecharset - // [56] phi from main::@8 to makecharset [phi:main::@8->makecharset] + // [55] phi from main::@8 to makecharset [phi:main::@8->makecharset] jsr makecharset // [18] phi from main::@3 main::@8 to main::@1 [phi:main::@3/main::@8->main::@1] // main::@1 @@ -3748,28 +3940,86 @@ main: { // Animate the fire on the passed screen. Uses BUFFER to store the current values. fire: { .label screen = 2 - .label screen_2 = $b + .label screen_2 = $c .label buffer = 4 - .label buffer_3 = 9 - .label screen_4 = $b .label buffer_10 = 9 - .label screen_11 = $b - // [26] (byte*~) fire::screen#11 ← (byte*) fire::screen#0 -- pbuz1=pbuz2 + .label screen_11 = $c + .label buffer_15 = 9 + .label screen_19 = $c + // fire::@1_1 + // [26] (byte*~) fire::screen#19 ← (byte*) fire::screen#0 -- pbuz1=pbuz2 lda screen - sta screen_11 + sta screen_19 lda screen+1 - sta screen_11+1 - // [27] phi from fire to fire::@1 [phi:fire->fire::@1] - // [27] phi (byte*) fire::screen#4 = (byte*~) fire::screen#11 [phi:fire->fire::@1#0] -- register_copy - // [27] phi (byte*) fire::buffer#4 = (const byte*) BUFFER#0 [phi:fire->fire::@1#1] -- pbuz1=pbuc1 + sta screen_19+1 + // [27] phi from fire::@1_1 to fire::@2 [phi:fire::@1_1->fire::@2] + // [27] phi (byte*) fire::screen#11 = (byte*~) fire::screen#19 [phi:fire::@1_1->fire::@2#0] -- register_copy + // [27] phi (byte*) fire::buffer#11 = (const byte*) BUFFER#0 [phi:fire::@1_1->fire::@2#1] -- pbuz1=pbuc1 lda #BUFFER sta buffer+1 + // [27] phi from fire::@1 to fire::@2 [phi:fire::@1->fire::@2] + // [27] phi (byte*) fire::screen#11 = (byte*) fire::screen#2 [phi:fire::@1->fire::@2#0] -- register_copy + // [27] phi (byte*) fire::buffer#11 = (byte*) fire::buffer#2 [phi:fire::@1->fire::@2#1] -- register_copy + // fire::@2 + b2: + // buffer[40-1] + buffer[40-1] + // [28] (byte~) fire::$4 ← *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#11 + (byte)(number) $28-(number) 1) -- vbuaa=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc2 + ldy #$28-1 + clc + lda (buffer),y + adc (buffer),y + // buffer[40-1] + buffer[40-1] + buffer[40] + // [29] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#11 + (byte) $28) -- vbuaa=vbuaa_plus_pbuz1_derefidx_vbuc1 + ldy #$28 + clc + adc (buffer),y + // buffer[40-1] + buffer[40-1] + buffer[40] + buffer[41] + // [30] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#11 + (byte) $29) -- vbuaa=vbuaa_plus_pbuz1_derefidx_vbuc1 + ldy #$29 + clc + adc (buffer),y + // c = ( buffer[40-1] + buffer[40-1] + buffer[40] + buffer[41] )/4 + // [31] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 -- vbuaa=vbuaa_ror_2 + lsr + lsr + // if (c > 2) + // [32] if((byte) fire::c#0<(byte) 2+(byte) 1) goto fire::@4 -- vbuaa_lt_vbuc1_then_la1 + cmp #2+1 + bcc b4 + // fire::@5 + // c -= 3 + // [33] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 -- vbuaa=vbuaa_minus_vbuc1 + sec + sbc #3 + // [34] phi from fire::@2 fire::@5 to fire::@4 [phi:fire::@2/fire::@5->fire::@4] + // [34] phi (byte) fire::c#2 = (byte) fire::c#0 [phi:fire::@2/fire::@5->fire::@4#0] -- register_copy + // fire::@4 + b4: + // *buffer = c + // [35] *((byte*) fire::buffer#11) ← (byte) fire::c#2 -- _deref_pbuz1=vbuaa + ldy #0 + sta (buffer),y + // *screen = *buffer = c + // [36] *((byte*) fire::screen#11) ← *((byte*) fire::buffer#11) -- _deref_pbuz1=_deref_pbuz2 + lda (buffer),y + sta (screen_11),y + // ++screen; + // [37] (byte*) fire::screen#2 ← ++ (byte*) fire::screen#11 -- pbuz1=_inc_pbuz1 + inc screen_2 + bne !+ + inc screen_2+1 + !: + // ++buffer; + // [38] (byte*) fire::buffer#2 ← ++ (byte*) fire::buffer#11 -- pbuz1=_inc_pbuz1 + inc buffer + bne !+ + inc buffer+1 + !: // fire::@1 - b1: // while (buffer != (BUFFER + (24 * 40))) - // [28] if((byte*) fire::buffer#4!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 -- pbuz1_neq_pbuc1_then_la1 + // [39] if((byte*) fire::buffer#2!=(const byte*) BUFFER#0+(word)(number) $18*(number) $28) goto fire::@2 -- pbuz1_neq_pbuc1_then_la1 lda buffer+1 cmp #>BUFFER+$18*$28 bne b2 @@ -3778,7 +4028,7 @@ fire: { bne b2 // fire::@3 // screen = (screenbase + (24 * 40)) - // [29] (byte*) fire::screen#1 ← (byte*) fire::screen#0 + (word)(number) $18*(number) $28 -- pbuz1=pbuz1_plus_vwuc1 + // [40] (byte*) fire::screen#1 ← (byte*) fire::screen#0 + (word)(number) $18*(number) $28 -- pbuz1=pbuz1_plus_vwuc1 clc lda screen adc #<$18*$28 @@ -3786,17 +4036,55 @@ fire: { lda screen+1 adc #>$18*$28 sta screen+1 - // [30] phi from fire::@3 to fire::@6 [phi:fire::@3->fire::@6] - // [30] phi (byte*) fire::screen#10 = (byte*) fire::screen#1 [phi:fire::@3->fire::@6#0] -- register_copy - // [30] phi (byte*) fire::buffer#10 = (const byte*) BUFFER#0+(word)(number) $18*(number) $28 [phi:fire::@3->fire::@6#1] -- pbuz1=pbuc1 + // [41] phi from fire::@3 to fire::@7 [phi:fire::@3->fire::@7] + // [41] phi (byte*) fire::screen#15 = (byte*) fire::screen#1 [phi:fire::@3->fire::@7#0] -- register_copy + // [41] phi (byte*) fire::buffer#15 = (const byte*) BUFFER#0+(word)(number) $18*(number) $28 [phi:fire::@3->fire::@7#1] -- pbuz1=pbuc1 lda #BUFFER+$18*$28 - sta buffer_10+1 - // fire::@6 - b6: + sta buffer_15+1 + // [41] phi from fire::@6 to fire::@7 [phi:fire::@6->fire::@7] + // [41] phi (byte*) fire::screen#15 = (byte*) fire::screen#10 [phi:fire::@6->fire::@7#0] -- register_copy + // [41] phi (byte*) fire::buffer#15 = (byte*) fire::buffer#10 [phi:fire::@6->fire::@7#1] -- register_copy + // fire::@7 + b7: + // sid_rnd() + // [42] call sid_rnd + jsr sid_rnd + // [43] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + // fire::@8 + // [44] (byte~) fire::$12 ← (byte) sid_rnd::return#2 + // (sid_rnd())/$10 + // [45] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 -- vbuaa=vbuaa_ror_4 + lsr + lsr + lsr + lsr + // 0x30 + (sid_rnd())/$10 + // [46] (byte~) fire::$14 ← (byte) $30 + (byte~) fire::$13 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #$30 + // *buffer = 0x30 + (sid_rnd())/$10 + // [47] *((byte*) fire::buffer#15) ← (byte~) fire::$14 -- _deref_pbuz1=vbuaa + ldy #0 + sta (buffer_15),y + // *screen = *buffer = 0x30 + (sid_rnd())/$10 + // [48] *((byte*) fire::screen#15) ← *((byte*) fire::buffer#15) -- _deref_pbuz1=_deref_pbuz2 + lda (buffer_15),y + sta (screen),y // for(; buffer != (BUFFER+(25*40)); ++screen, ++buffer) - // [31] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 -- pbuz1_neq_pbuc1_then_la1 + // [49] (byte*) fire::screen#10 ← ++ (byte*) fire::screen#15 -- pbuz1=_inc_pbuz1 + inc screen + bne !+ + inc screen+1 + !: + // [50] (byte*) fire::buffer#10 ← ++ (byte*) fire::buffer#15 -- pbuz1=_inc_pbuz1 + inc buffer_10 + bne !+ + inc buffer_10+1 + !: + // fire::@6 + // [51] if((byte*) fire::buffer#10!=(const byte*) BUFFER#0+(word)(number) $19*(number) $28) goto fire::@7 -- pbuz1_neq_pbuc1_then_la1 lda buffer_10+1 cmp #>BUFFER+$19*$28 bne b7 @@ -3805,235 +4093,180 @@ fire: { bne b7 // fire::@return // } - // [32] return + // [52] return rts - // [33] phi from fire::@6 to fire::@7 [phi:fire::@6->fire::@7] - // fire::@7 - b7: - // sid_rnd() - // [34] call sid_rnd - jsr sid_rnd - // [35] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - // fire::@8 - // [36] (byte~) fire::$12 ← (byte) sid_rnd::return#2 - // (sid_rnd())/$10 - // [37] (byte~) fire::$13 ← (byte~) fire::$12 >> (byte) 4 -- vbuaa=vbuaa_ror_4 - lsr - lsr - lsr - lsr - // 0x30 + (sid_rnd())/$10 - // [38] (byte~) fire::$14 ← (byte) $30 + (byte~) fire::$13 -- vbuaa=vbuc1_plus_vbuaa - clc - adc #$30 - // *buffer = 0x30 + (sid_rnd())/$10 - // [39] *((byte*) fire::buffer#10) ← (byte~) fire::$14 -- _deref_pbuz1=vbuaa - ldy #0 - sta (buffer_10),y - // *screen = *buffer = 0x30 + (sid_rnd())/$10 - // [40] *((byte*) fire::screen#10) ← *((byte*) fire::buffer#10) -- _deref_pbuz1=_deref_pbuz2 - lda (buffer_10),y - sta (screen),y - // for(; buffer != (BUFFER+(25*40)); ++screen, ++buffer) - // [41] (byte*) fire::screen#3 ← ++ (byte*) fire::screen#10 -- pbuz1=_inc_pbuz1 - inc screen - bne !+ - inc screen+1 - !: - // [42] (byte*) fire::buffer#3 ← ++ (byte*) fire::buffer#10 -- pbuz1=_inc_pbuz1 - inc buffer_3 - bne !+ - inc buffer_3+1 - !: - // [30] phi from fire::@8 to fire::@6 [phi:fire::@8->fire::@6] - // [30] phi (byte*) fire::screen#10 = (byte*) fire::screen#3 [phi:fire::@8->fire::@6#0] -- register_copy - // [30] phi (byte*) fire::buffer#10 = (byte*) fire::buffer#3 [phi:fire::@8->fire::@6#1] -- register_copy - jmp b6 - // fire::@2 - b2: - // buffer[40-1] + buffer[40-1] - // [43] (byte~) fire::$4 ← *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) + *((byte*) fire::buffer#4 + (byte)(number) $28-(number) 1) -- vbuaa=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc2 - ldy #$28-1 - clc - lda (buffer),y - adc (buffer),y - // buffer[40-1] + buffer[40-1] + buffer[40] - // [44] (byte~) fire::$5 ← (byte~) fire::$4 + *((byte*) fire::buffer#4 + (byte) $28) -- vbuaa=vbuaa_plus_pbuz1_derefidx_vbuc1 - ldy #$28 - clc - adc (buffer),y - // buffer[40-1] + buffer[40-1] + buffer[40] + buffer[41] - // [45] (byte~) fire::$6 ← (byte~) fire::$5 + *((byte*) fire::buffer#4 + (byte) $29) -- vbuaa=vbuaa_plus_pbuz1_derefidx_vbuc1 - ldy #$29 - clc - adc (buffer),y - // c = ( buffer[40-1] + buffer[40-1] + buffer[40] + buffer[41] )/4 - // [46] (byte) fire::c#0 ← (byte~) fire::$6 >> (byte) 2 -- vbuaa=vbuaa_ror_2 - lsr - lsr - // if (c > 2) - // [47] if((byte) fire::c#0<(byte) 2+(byte) 1) goto fire::@4 -- vbuaa_lt_vbuc1_then_la1 - cmp #2+1 - bcc b4 - // fire::@5 - // c -= 3 - // [48] (byte) fire::c#1 ← (byte) fire::c#0 - (byte) 3 -- vbuaa=vbuaa_minus_vbuc1 - sec - sbc #3 - // [49] phi from fire::@2 fire::@5 to fire::@4 [phi:fire::@2/fire::@5->fire::@4] - // [49] phi (byte) fire::c#2 = (byte) fire::c#0 [phi:fire::@2/fire::@5->fire::@4#0] -- register_copy - // fire::@4 - b4: - // *buffer = c - // [50] *((byte*) fire::buffer#4) ← (byte) fire::c#2 -- _deref_pbuz1=vbuaa - ldy #0 - sta (buffer),y - // *screen = *buffer = c - // [51] *((byte*) fire::screen#4) ← *((byte*) fire::buffer#4) -- _deref_pbuz1=_deref_pbuz2 - lda (buffer),y - sta (screen_4),y - // ++screen; - // [52] (byte*) fire::screen#2 ← ++ (byte*) fire::screen#4 -- pbuz1=_inc_pbuz1 - inc screen_2 - bne !+ - inc screen_2+1 - !: - // ++buffer; - // [53] (byte*) fire::buffer#2 ← ++ (byte*) fire::buffer#4 -- pbuz1=_inc_pbuz1 - inc buffer - bne !+ - inc buffer+1 - !: - // [27] phi from fire::@4 to fire::@1 [phi:fire::@4->fire::@1] - // [27] phi (byte*) fire::screen#4 = (byte*) fire::screen#2 [phi:fire::@4->fire::@1#0] -- register_copy - // [27] phi (byte*) fire::buffer#4 = (byte*) fire::buffer#2 [phi:fire::@4->fire::@1#1] -- register_copy - jmp b1 } // sid_rnd // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { // return *SID_VOICE3_OSC; - // [54] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 + // [53] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 lda SID_VOICE3_OSC // sid_rnd::@return // } - // [55] return + // [54] return rts } // makecharset // Make a fire-friendly charset in chars $00-$3f of the passed charset makecharset: { - .label _13 = $d - .label _15 = $b - .label _16 = $b - .label _17 = $b + .label _13 = $b + .label _15 = $c + .label _16 = $c + .label _17 = $c .label font = 2 .label font1 = 4 .label c = 6 .label i = 7 .label ii = 8 - .label _18 = $b - // [57] phi from makecharset to makecharset::@1 [phi:makecharset->makecharset::@1] - // [57] phi (byte*) makecharset::font#2 = (const byte*) CHARSET#0 [phi:makecharset->makecharset::@1#0] -- pbuz1=pbuc1 + .label _18 = $c + // [56] phi from makecharset to makecharset::@2 [phi:makecharset->makecharset::@2] + // [56] phi (byte*) makecharset::font#4 = (const byte*) CHARSET#0 [phi:makecharset->makecharset::@2#0] -- pbuz1=pbuc1 lda #CHARSET sta font+1 - // makecharset::@1 - b1: + // [56] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2] + // [56] phi (byte*) makecharset::font#4 = (byte*) makecharset::font#1 [phi:makecharset::@1->makecharset::@2#0] -- register_copy + // makecharset::@2 + b2: + // *font = 0x00 + // [57] *((byte*) makecharset::font#4) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (font),y // for (unsigned char *font = charset; font != (charset+(1*8)); ++font) - // [58] if((byte*) makecharset::font#2!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [58] (byte*) makecharset::font#1 ← ++ (byte*) makecharset::font#4 -- pbuz1=_inc_pbuz1 + inc font + bne !+ + inc font+1 + !: + // makecharset::@1 + // [59] if((byte*) makecharset::font#1!=(const byte*) CHARSET#0+(byte)(number) 1*(number) 8) goto makecharset::@2 -- pbuz1_neq_pbuc1_then_la1 lda font+1 cmp #>CHARSET+1*8 - beq !b2+ - jmp b2 - !b2: + bne b2 lda font cmp #makecharset::@3] - // [59] phi (byte*) makecharset::font1#2 = (const byte*) CHARSET#0+(word)(number) $40*(number) 8 [phi:makecharset::@1->makecharset::@3#0] -- pbuz1=pbuc1 + bne b2 + // [60] phi from makecharset::@1 to makecharset::@4 [phi:makecharset::@1->makecharset::@4] + // [60] phi (byte*) makecharset::font1#4 = (const byte*) CHARSET#0+(word)(number) $40*(number) 8 [phi:makecharset::@1->makecharset::@4#0] -- pbuz1=pbuc1 lda #CHARSET+$40*8 sta font1+1 - // makecharset::@3 - b3: + // [60] phi from makecharset::@3 to makecharset::@4 [phi:makecharset::@3->makecharset::@4] + // [60] phi (byte*) makecharset::font1#4 = (byte*) makecharset::font1#1 [phi:makecharset::@3->makecharset::@4#0] -- register_copy + // makecharset::@4 + b4: + // *font = 0xff + // [61] *((byte*) makecharset::font1#4) ← (byte) $ff -- _deref_pbuz1=vbuc1 + lda #$ff + ldy #0 + sta (font1),y // for (unsigned char *font = (charset+(64*8)); font != (charset+(256*8)); ++font) - // [60] if((byte*) makecharset::font1#2!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 -- pbuz1_neq_pbuc1_then_la1 + // [62] (byte*) makecharset::font1#1 ← ++ (byte*) makecharset::font1#4 -- pbuz1=_inc_pbuz1 + inc font1 + bne !+ + inc font1+1 + !: + // makecharset::@3 + // [63] if((byte*) makecharset::font1#1!=(const byte*) CHARSET#0+(word)(number) $100*(number) 8) goto makecharset::@4 -- pbuz1_neq_pbuc1_then_la1 lda font1+1 cmp #>CHARSET+$100*8 - beq !b4+ - jmp b4 - !b4: + bne b4 lda font1 cmp #makecharset::@5] - // [61] phi (byte) makecharset::c#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#0] -- vbuz1=vbuc1 + bne b4 + // [64] phi from makecharset::@3 to makecharset::@6 [phi:makecharset::@3->makecharset::@6] + // [64] phi (byte) makecharset::c#17 = (byte) 0 [phi:makecharset::@3->makecharset::@6#0] -- vbuz1=vbuc1 lda #0 sta c - // makecharset::@5 - b5: - // for (unsigned char c = 0; c < 0x40; ++c) - // [62] if((byte) makecharset::c#2<(byte) $40) goto makecharset::@6 -- vbuz1_lt_vbuc1_then_la1 - lda c - cmp #$40 - bcc b7 - // makecharset::@return - // } - // [63] return - rts // [64] phi from makecharset::@5 to makecharset::@6 [phi:makecharset::@5->makecharset::@6] - b7: - // [64] phi (byte) makecharset::bc#6 = (byte) 0 [phi:makecharset::@5->makecharset::@6#0] -- vbuxx=vbuc1 - ldx #0 - // [64] phi (byte) makecharset::i#2 = (byte) 0 [phi:makecharset::@5->makecharset::@6#1] -- vbuz1=vbuc1 - txa - sta i + // [64] phi (byte) makecharset::c#17 = (byte) makecharset::c#1 [phi:makecharset::@5->makecharset::@6#0] -- register_copy // makecharset::@6 b6: - // for (unsigned char bc = 0, i = 0; i < 8; i++) - // [65] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@8 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #8 - bcc b10 - // makecharset::@7 - // for (unsigned char c = 0; c < 0x40; ++c) - // [66] (byte) makecharset::c#1 ← ++ (byte) makecharset::c#2 -- vbuz1=_inc_vbuz1 - inc c - // [61] phi from makecharset::@7 to makecharset::@5 [phi:makecharset::@7->makecharset::@5] - // [61] phi (byte) makecharset::c#2 = (byte) makecharset::c#1 [phi:makecharset::@7->makecharset::@5#0] -- register_copy - jmp b5 - // [67] phi from makecharset::@6 to makecharset::@8 [phi:makecharset::@6->makecharset::@8] - b10: - // [67] phi (byte) makecharset::b#2 = (byte) 0 [phi:makecharset::@6->makecharset::@8#0] -- vbuyy=vbuc1 - ldy #0 - // [67] phi (byte) makecharset::bc#3 = (byte) makecharset::bc#6 [phi:makecharset::@6->makecharset::@8#1] -- register_copy - // [67] phi (byte) makecharset::ii#2 = (byte) 0 [phi:makecharset::@6->makecharset::@8#2] -- vbuz1=vbuc1 - tya - sta ii + // [65] phi from makecharset::@6 to makecharset::@8 [phi:makecharset::@6->makecharset::@8] + // [65] phi (byte) makecharset::bc#10 = (byte) 0 [phi:makecharset::@6->makecharset::@8#0] -- vbuxx=vbuc1 + ldx #0 + // [65] phi (byte) makecharset::i#13 = (byte) 0 [phi:makecharset::@6->makecharset::@8#1] -- vbuz1=vbuc1 + txa + sta i + // [65] phi from makecharset::@7 to makecharset::@8 [phi:makecharset::@7->makecharset::@8] + // [65] phi (byte) makecharset::bc#10 = (byte) makecharset::bc#12 [phi:makecharset::@7->makecharset::@8#0] -- register_copy + // [65] phi (byte) makecharset::i#13 = (byte) makecharset::i#1 [phi:makecharset::@7->makecharset::@8#1] -- register_copy // makecharset::@8 b8: + // [66] phi from makecharset::@8 to makecharset::@11 [phi:makecharset::@8->makecharset::@11] + // [66] phi (byte) makecharset::b#8 = (byte) 0 [phi:makecharset::@8->makecharset::@11#0] -- vbuyy=vbuc1 + ldy #0 + // [66] phi (byte) makecharset::bc#13 = (byte) makecharset::bc#10 [phi:makecharset::@8->makecharset::@11#1] -- register_copy + // [66] phi (byte) makecharset::ii#6 = (byte) 0 [phi:makecharset::@8->makecharset::@11#2] -- vbuz1=vbuc1 + tya + sta ii + // [66] phi from makecharset::@10 to makecharset::@11 [phi:makecharset::@10->makecharset::@11] + // [66] phi (byte) makecharset::b#8 = (byte) makecharset::b#2 [phi:makecharset::@10->makecharset::@11#0] -- register_copy + // [66] phi (byte) makecharset::bc#13 = (byte) makecharset::bc#12 [phi:makecharset::@10->makecharset::@11#1] -- register_copy + // [66] phi (byte) makecharset::ii#6 = (byte) makecharset::ii#1 [phi:makecharset::@10->makecharset::@11#2] -- register_copy + // makecharset::@11 + b11: + // bc += c + // [67] (byte) makecharset::bc#1 ← (byte) makecharset::bc#13 + (byte) makecharset::c#17 -- vbuxx=vbuxx_plus_vbuz1 + txa + clc + adc c + tax + // if (bc > 0x3f) + // [68] if((byte) makecharset::bc#1<(byte) $3f+(byte) 1) goto makecharset::@13 -- vbuxx_lt_vbuc1_then_la1 + cpx #$3f+1 + bcc b13 + // makecharset::@14 + // bc = bc - 0x40 + // [69] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 -- vbuxx=vbuxx_minus_vbuc1 + txa + axs #$40 + // i & 1 + // [70] (byte~) makecharset::$11 ← (byte) makecharset::i#13 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 + lda #1 + and i + // ii + (i & 1) + // [71] (byte~) makecharset::$12 ← (byte) makecharset::ii#6 + (byte~) makecharset::$11 -- vbuaa=vbuz1_plus_vbuaa + clc + adc ii + // (ii + (i & 1)) & 0x7 + // [72] (byte~) makecharset::$13 ← (byte~) makecharset::$12 & (byte) 7 -- vbuz1=vbuaa_band_vbuc1 + and #7 + sta _13 + // b += bittab[(ii + (i & 1)) & 0x7] + // [73] (byte) makecharset::b#1 ← (byte) makecharset::b#8 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) -- vbuyy=vbuyy_plus_pbuc1_derefidx_vbuz1 + tya + ldy _13 + clc + adc bittab,y + tay + // [74] phi from makecharset::@11 makecharset::@14 to makecharset::@13 [phi:makecharset::@11/makecharset::@14->makecharset::@13] + // [74] phi (byte) makecharset::b#2 = (byte) makecharset::b#8 [phi:makecharset::@11/makecharset::@14->makecharset::@13#0] -- register_copy + // [74] phi (byte) makecharset::bc#12 = (byte) makecharset::bc#1 [phi:makecharset::@11/makecharset::@14->makecharset::@13#1] -- register_copy + // makecharset::@13 + b13: // for (unsigned char ii = 0; ii < 8; ii++) - // [68] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@9 -- vbuz1_lt_vbuc1_then_la1 + // [75] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#6 -- vbuz1=_inc_vbuz1 + inc ii + // makecharset::@10 + // [76] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@11 -- vbuz1_lt_vbuc1_then_la1 lda ii cmp #8 - bcc b9 - // makecharset::@10 + bcc b11 + // makecharset::@12 // (unsigned short)c - // [69] (word~) makecharset::$15 ← (word)(byte) makecharset::c#2 -- vwuz1=_word_vbuz2 + // [77] (word~) makecharset::$15 ← (word)(byte) makecharset::c#17 -- vwuz1=_word_vbuz2 lda c sta _15 lda #0 sta _15+1 // ((unsigned short)c) << 3 - // [70] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [78] (word~) makecharset::$16 ← (word~) makecharset::$15 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl _16 rol _16+1 asl _16 @@ -4041,7 +4274,7 @@ makecharset: { asl _16 rol _16+1 // (((unsigned short)c) << 3) + i - // [71] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#2 -- vwuz1=vwuz1_plus_vbuz2 + // [79] (word~) makecharset::$17 ← (word~) makecharset::$16 + (byte) makecharset::i#13 -- vwuz1=vwuz1_plus_vbuz2 lda i clc adc _17 @@ -4050,7 +4283,7 @@ makecharset: { inc _17+1 !: // (charset + (1 * 8)) [(((unsigned short)c) << 3) + i] = b - // [72] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 -- pbuz1=pbuc1_plus_vwuz1 + // [80] (byte*~) makecharset::$18 ← (const byte*) CHARSET#0+(byte)(number) 1*(number) 8 + (word~) makecharset::$17 -- pbuz1=pbuc1_plus_vwuz1 clc lda _18 adc #CHARSET+1*8 sta _18+1 - // [73] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy + // [81] *((byte*~) makecharset::$18) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy tya ldy #0 sta (_18),y // for (unsigned char bc = 0, i = 0; i < 8; i++) - // [74] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 -- vbuz1=_inc_vbuz1 + // [82] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 -- vbuz1=_inc_vbuz1 inc i - // [64] phi from makecharset::@10 to makecharset::@6 [phi:makecharset::@10->makecharset::@6] - // [64] phi (byte) makecharset::bc#6 = (byte) makecharset::bc#3 [phi:makecharset::@10->makecharset::@6#0] -- register_copy - // [64] phi (byte) makecharset::i#2 = (byte) makecharset::i#1 [phi:makecharset::@10->makecharset::@6#1] -- register_copy - jmp b6 + // makecharset::@7 + // [83] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@8 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #8 + bcc b8 // makecharset::@9 - b9: - // bc += c - // [75] (byte) makecharset::bc#1 ← (byte) makecharset::bc#3 + (byte) makecharset::c#2 -- vbuxx=vbuxx_plus_vbuz1 - txa - clc - adc c - tax - // if (bc > 0x3f) - // [76] if((byte) makecharset::bc#1<(byte) $3f+(byte) 1) goto makecharset::@11 -- vbuxx_lt_vbuc1_then_la1 - cpx #$3f+1 - bcc b11 - // makecharset::@12 - // bc = bc - 0x40 - // [77] (byte) makecharset::bc#2 ← (byte) makecharset::bc#1 - (byte) $40 -- vbuxx=vbuxx_minus_vbuc1 - txa - axs #$40 - // i & 1 - // [78] (byte~) makecharset::$11 ← (byte) makecharset::i#2 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 - lda #1 - and i - // ii + (i & 1) - // [79] (byte~) makecharset::$12 ← (byte) makecharset::ii#2 + (byte~) makecharset::$11 -- vbuaa=vbuz1_plus_vbuaa - clc - adc ii - // (ii + (i & 1)) & 0x7 - // [80] (byte~) makecharset::$13 ← (byte~) makecharset::$12 & (byte) 7 -- vbuz1=vbuaa_band_vbuc1 - and #7 - sta _13 - // b += bittab[(ii + (i & 1)) & 0x7] - // [81] (byte) makecharset::b#1 ← (byte) makecharset::b#2 + *((const byte[8]) makecharset::bittab#0 + (byte~) makecharset::$13) -- vbuyy=vbuyy_plus_pbuc1_derefidx_vbuz1 - tya - ldy _13 - clc - adc bittab,y - tay - // [82] phi from makecharset::@12 makecharset::@9 to makecharset::@11 [phi:makecharset::@12/makecharset::@9->makecharset::@11] - // [82] phi (byte) makecharset::b#6 = (byte) makecharset::b#1 [phi:makecharset::@12/makecharset::@9->makecharset::@11#0] -- register_copy - // [82] phi (byte) makecharset::bc#7 = (byte) makecharset::bc#2 [phi:makecharset::@12/makecharset::@9->makecharset::@11#1] -- register_copy - // makecharset::@11 - b11: - // for (unsigned char ii = 0; ii < 8; ii++) - // [83] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuz1=_inc_vbuz1 - inc ii - // [67] phi from makecharset::@11 to makecharset::@8 [phi:makecharset::@11->makecharset::@8] - // [67] phi (byte) makecharset::b#2 = (byte) makecharset::b#6 [phi:makecharset::@11->makecharset::@8#0] -- register_copy - // [67] phi (byte) makecharset::bc#3 = (byte) makecharset::bc#7 [phi:makecharset::@11->makecharset::@8#1] -- register_copy - // [67] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@11->makecharset::@8#2] -- register_copy - jmp b8 - // makecharset::@4 - b4: - // *font = 0xff - // [84] *((byte*) makecharset::font1#2) ← (byte) $ff -- _deref_pbuz1=vbuc1 - lda #$ff - ldy #0 - sta (font1),y - // for (unsigned char *font = (charset+(64*8)); font != (charset+(256*8)); ++font) - // [85] (byte*) makecharset::font1#1 ← ++ (byte*) makecharset::font1#2 -- pbuz1=_inc_pbuz1 - inc font1 - bne !+ - inc font1+1 - !: - // [59] phi from makecharset::@4 to makecharset::@3 [phi:makecharset::@4->makecharset::@3] - // [59] phi (byte*) makecharset::font1#2 = (byte*) makecharset::font1#1 [phi:makecharset::@4->makecharset::@3#0] -- register_copy - jmp b3 - // makecharset::@2 - b2: - // *font = 0x00 - // [86] *((byte*) makecharset::font#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 - lda #0 - tay - sta (font),y - // for (unsigned char *font = charset; font != (charset+(1*8)); ++font) - // [87] (byte*) makecharset::font#1 ← ++ (byte*) makecharset::font#2 -- pbuz1=_inc_pbuz1 - inc font - bne !+ - inc font+1 - !: - // [57] phi from makecharset::@2 to makecharset::@1 [phi:makecharset::@2->makecharset::@1] - // [57] phi (byte*) makecharset::font#2 = (byte*) makecharset::font#1 [phi:makecharset::@2->makecharset::@1#0] -- register_copy - jmp b1 + // for (unsigned char c = 0; c < 0x40; ++c) + // [84] (byte) makecharset::c#1 ← ++ (byte) makecharset::c#17 -- vbuz1=_inc_vbuz1 + inc c + // makecharset::@5 + // [85] if((byte) makecharset::c#1<(byte) $40) goto makecharset::@6 -- vbuz1_lt_vbuc1_then_la1 + lda c + cmp #$40 + bcc b6 + // makecharset::@return + // } + // [86] return + rts bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { // *SID_VOICE3_FREQ = $ffff - // [88] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [87] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff sta SID_VOICE3_FREQ lda #>$ffff sta SID_VOICE3_FREQ+1 // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE - // [89] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [88] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL // sid_rnd_init::@return // } - // [90] return + // [89] return rts } // fillscreen // Fill a screen (1000 bytes) with a specific byte -// fillscreen(byte* zeropage($b) screen, byte register(X) fill) +// fillscreen(byte* zeropage($c) screen, byte register(X) fill) fillscreen: { - .label screen = $b + .label screen = $c .label i = 9 - // [92] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] - // [92] phi (word) fillscreen::i#2 = (word) 0 [phi:fillscreen->fillscreen::@1#0] -- vwuz1=vwuc1 + // [91] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] + // [91] phi (word) fillscreen::i#2 = (word) 0 [phi:fillscreen->fillscreen::@1#0] -- vwuz1=vwuc1 lda #<0 sta i sta i+1 - // [92] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#6 [phi:fillscreen->fillscreen::@1#1] -- register_copy - // [92] phi from fillscreen::@1 to fillscreen::@1 [phi:fillscreen::@1->fillscreen::@1] - // [92] phi (word) fillscreen::i#2 = (word) fillscreen::i#1 [phi:fillscreen::@1->fillscreen::@1#0] -- register_copy - // [92] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#4 [phi:fillscreen::@1->fillscreen::@1#1] -- register_copy + // [91] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#6 [phi:fillscreen->fillscreen::@1#1] -- register_copy + // [91] phi from fillscreen::@1 to fillscreen::@1 [phi:fillscreen::@1->fillscreen::@1] + // [91] phi (word) fillscreen::i#2 = (word) fillscreen::i#1 [phi:fillscreen::@1->fillscreen::@1#0] -- register_copy + // [91] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#4 [phi:fillscreen::@1->fillscreen::@1#1] -- register_copy // fillscreen::@1 b1: // *screen++ = fill - // [93] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 -- _deref_pbuz1=vbuxx + // [92] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 -- _deref_pbuz1=vbuxx txa ldy #0 sta (screen),y // *screen++ = fill; - // [94] (byte*) fillscreen::screen#4 ← ++ (byte*) fillscreen::screen#5 -- pbuz1=_inc_pbuz1 + // [93] (byte*) fillscreen::screen#4 ← ++ (byte*) fillscreen::screen#5 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: // for( unsigned word i : 0..999) - // [95] (word) fillscreen::i#1 ← ++ (word) fillscreen::i#2 -- vwuz1=_inc_vwuz1 + // [94] (word) fillscreen::i#1 ← ++ (word) fillscreen::i#2 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [96] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 -- vwuz1_neq_vwuc1_then_la1 + // [95] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 -- vwuz1_neq_vwuc1_then_la1 lda i+1 cmp #>$3e8 bne b1 @@ -4213,7 +4379,7 @@ fillscreen: { bne b1 // fillscreen::@return // } - // [97] return + // [96] return rts } // File Data diff --git a/src/test/ref/examples/fire/fire.sym b/src/test/ref/examples/fire/fire.sym index e16a9b912..023f90924 100644 --- a/src/test/ref/examples/fire/fire.sym +++ b/src/test/ref/examples/fire/fire.sym @@ -38,9 +38,9 @@ (word) fillscreen::i#1 i zp ZP_WORD:9 16.5 (word) fillscreen::i#2 i zp ZP_WORD:9 7.333333333333333 (byte*) fillscreen::screen -(byte*) fillscreen::screen#4 screen zp ZP_WORD:11 7.333333333333333 -(byte*) fillscreen::screen#5 screen zp ZP_WORD:11 17.5 -(byte*) fillscreen::screen#6 screen zp ZP_WORD:11 2.0 +(byte*) fillscreen::screen#4 screen zp ZP_WORD:12 7.333333333333333 +(byte*) fillscreen::screen#5 screen zp ZP_WORD:12 17.5 +(byte*) fillscreen::screen#6 screen zp ZP_WORD:12 2.0 (void()) fire((byte*) fire::screenbase) (byte~) fire::$12 reg byte a 202.0 (byte~) fire::$13 reg byte a 202.0 @@ -49,6 +49,7 @@ (byte~) fire::$5 reg byte a 202.0 (byte~) fire::$6 reg byte a 202.0 (label) fire::@1 +(label) fire::@1_1 (label) fire::@2 (label) fire::@3 (label) fire::@4 @@ -58,10 +59,10 @@ (label) fire::@8 (label) fire::@return (byte*) fire::buffer -(byte*) fire::buffer#10 buffer#10 zp ZP_WORD:9 45.90909090909091 -(byte*) fire::buffer#2 buffer zp ZP_WORD:4 202.0 -(byte*) fire::buffer#3 buffer#3 zp ZP_WORD:9 202.0 -(byte*) fire::buffer#4 buffer zp ZP_WORD:4 75.75 +(byte*) fire::buffer#10 buffer#10 zp ZP_WORD:9 151.5 +(byte*) fire::buffer#11 buffer zp ZP_WORD:4 73.45454545454545 +(byte*) fire::buffer#15 buffer#15 zp ZP_WORD:9 44.888888888888886 +(byte*) fire::buffer#2 buffer zp ZP_WORD:4 151.5 (byte) fire::c (byte) fire::c#0 reg byte a 202.0 (byte) fire::c#1 reg byte a 202.0 @@ -69,11 +70,11 @@ (byte*) fire::screen (byte*) fire::screen#0 screen zp ZP_WORD:2 0.26666666666666666 (byte*) fire::screen#1 screen zp ZP_WORD:2 4.0 -(byte*) fire::screen#10 screen zp ZP_WORD:2 30.5 -(byte*~) fire::screen#11 screen#11 zp ZP_WORD:11 4.0 -(byte*) fire::screen#2 screen#2 zp ZP_WORD:11 101.0 -(byte*) fire::screen#3 screen zp ZP_WORD:2 101.0 -(byte*) fire::screen#4 screen#4 zp ZP_WORD:11 27.727272727272727 +(byte*) fire::screen#10 screen zp ZP_WORD:2 67.33333333333333 +(byte*) fire::screen#11 screen#11 zp ZP_WORD:12 30.5 +(byte*) fire::screen#15 screen zp ZP_WORD:2 38.125 +(byte*~) fire::screen#19 screen#19 zp ZP_WORD:12 4.0 +(byte*) fire::screen#2 screen#2 zp ZP_WORD:12 67.33333333333333 (byte*) fire::screenbase (void()) main() (label) main::@1 @@ -115,15 +116,17 @@ (void()) makecharset((byte*) makecharset::charset) (byte~) makecharset::$11 reg byte a 2002.0 (byte~) makecharset::$12 reg byte a 2002.0 -(byte~) makecharset::$13 $13 zp ZP_BYTE:13 2002.0 -(word~) makecharset::$15 $15 zp ZP_WORD:11 202.0 -(word~) makecharset::$16 $16 zp ZP_WORD:11 202.0 -(word~) makecharset::$17 $17 zp ZP_WORD:11 202.0 -(byte*~) makecharset::$18 $18 zp ZP_WORD:11 202.0 +(byte~) makecharset::$13 $13 zp ZP_BYTE:11 2002.0 +(word~) makecharset::$15 $15 zp ZP_WORD:12 202.0 +(word~) makecharset::$16 $16 zp ZP_WORD:12 202.0 +(word~) makecharset::$17 $17 zp ZP_WORD:12 202.0 +(byte*~) makecharset::$18 $18 zp ZP_WORD:12 202.0 (label) makecharset::@1 (label) makecharset::@10 (label) makecharset::@11 (label) makecharset::@12 +(label) makecharset::@13 +(label) makecharset::@14 (label) makecharset::@2 (label) makecharset::@3 (label) makecharset::@4 @@ -135,32 +138,32 @@ (label) makecharset::@return (byte) makecharset::b (byte) makecharset::b#1 reg byte y 2002.0 -(byte) makecharset::b#2 reg byte y 258.6666666666667 -(byte) makecharset::b#6 reg byte y 1501.5 +(byte) makecharset::b#2 reg byte y 443.42857142857144 +(byte) makecharset::b#8 reg byte y 429.0 (byte) makecharset::bc (byte) makecharset::bc#1 reg byte x 2002.0 +(byte) makecharset::bc#10 reg byte x 202.0 +(byte) makecharset::bc#12 reg byte x 310.4 +(byte) makecharset::bc#13 reg byte x 2103.0 (byte) makecharset::bc#2 reg byte x 400.4 -(byte) makecharset::bc#3 reg byte x 275.5 -(byte) makecharset::bc#6 reg byte x 101.0 -(byte) makecharset::bc#7 reg byte x 1501.5 (byte[8]) makecharset::bittab (const byte[8]) makecharset::bittab#0 bittab = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (byte) makecharset::c -(byte) makecharset::c#1 c zp ZP_BYTE:6 22.0 -(byte) makecharset::c#2 c zp ZP_BYTE:6 49.238095238095234 +(byte) makecharset::c#1 c zp ZP_BYTE:6 16.5 +(byte) makecharset::c#17 c zp ZP_BYTE:6 51.14999999999999 (byte*) makecharset::charset (byte*) makecharset::font -(byte*) makecharset::font#1 font zp ZP_WORD:2 22.0 -(byte*) makecharset::font#2 font zp ZP_WORD:2 14.666666666666666 +(byte*) makecharset::font#1 font zp ZP_WORD:2 16.5 +(byte*) makecharset::font#4 font zp ZP_WORD:2 16.5 (byte*) makecharset::font1 -(byte*) makecharset::font1#1 font1 zp ZP_WORD:4 22.0 -(byte*) makecharset::font1#2 font1 zp ZP_WORD:4 14.666666666666666 +(byte*) makecharset::font1#1 font1 zp ZP_WORD:4 16.5 +(byte*) makecharset::font1#4 font1 zp ZP_WORD:4 16.5 (byte) makecharset::i -(byte) makecharset::i#1 i zp ZP_BYTE:7 202.0 -(byte) makecharset::i#2 i zp ZP_BYTE:7 78.05555555555556 +(byte) makecharset::i#1 i zp ZP_BYTE:7 151.5 +(byte) makecharset::i#13 i zp ZP_BYTE:7 76.70588235294117 (byte) makecharset::ii -(byte) makecharset::ii#1 ii zp ZP_BYTE:8 2002.0 -(byte) makecharset::ii#2 ii zp ZP_BYTE:8 400.4 +(byte) makecharset::ii#1 ii zp ZP_BYTE:8 1501.5 +(byte) makecharset::ii#6 ii zp ZP_BYTE:8 333.6666666666667 (byte()) sid_rnd() (label) sid_rnd::@return (byte) sid_rnd::return @@ -170,24 +173,24 @@ (label) sid_rnd_init::@return reg byte a [ fire::c#2 fire::c#0 fire::c#1 ] -zp ZP_WORD:2 [ makecharset::font#2 makecharset::font#1 fire::screen#0 fire::screen#10 fire::screen#3 fire::screen#1 ] -zp ZP_WORD:4 [ makecharset::font1#2 makecharset::font1#1 fire::buffer#4 fire::buffer#2 ] -zp ZP_BYTE:6 [ makecharset::c#2 makecharset::c#1 ] -zp ZP_BYTE:7 [ makecharset::i#2 makecharset::i#1 ] -reg byte x [ makecharset::bc#6 makecharset::bc#3 makecharset::bc#7 makecharset::bc#1 makecharset::bc#2 ] -zp ZP_BYTE:8 [ makecharset::ii#2 makecharset::ii#1 ] -reg byte y [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] +zp ZP_WORD:2 [ makecharset::font#4 makecharset::font#1 fire::screen#0 fire::screen#15 fire::screen#10 fire::screen#1 ] +zp ZP_WORD:4 [ makecharset::font1#4 makecharset::font1#1 fire::buffer#11 fire::buffer#2 ] +zp ZP_BYTE:6 [ makecharset::c#17 makecharset::c#1 ] +zp ZP_BYTE:7 [ makecharset::i#13 makecharset::i#1 ] +zp ZP_BYTE:8 [ makecharset::ii#6 makecharset::ii#1 ] +reg byte x [ makecharset::bc#13 makecharset::bc#10 makecharset::bc#12 makecharset::bc#1 makecharset::bc#2 ] +reg byte y [ makecharset::b#8 makecharset::b#2 makecharset::b#1 ] reg byte x [ fillscreen::fill#5 ] -zp ZP_WORD:9 [ fillscreen::i#2 fillscreen::i#1 fire::buffer#10 fire::buffer#3 ] +zp ZP_WORD:9 [ fillscreen::i#2 fillscreen::i#1 fire::buffer#15 fire::buffer#10 ] +reg byte a [ fire::$4 ] +reg byte a [ fire::$5 ] +reg byte a [ fire::$6 ] reg byte a [ sid_rnd::return#2 ] reg byte a [ fire::$12 ] reg byte a [ fire::$13 ] reg byte a [ fire::$14 ] -reg byte a [ fire::$4 ] -reg byte a [ fire::$5 ] -reg byte a [ fire::$6 ] reg byte a [ sid_rnd::return#0 ] -zp ZP_WORD:11 [ makecharset::$15 makecharset::$16 makecharset::$17 makecharset::$18 fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 fire::screen#4 fire::screen#11 fire::screen#2 ] reg byte a [ makecharset::$11 ] reg byte a [ makecharset::$12 ] -zp ZP_BYTE:13 [ makecharset::$13 ] +zp ZP_BYTE:11 [ makecharset::$13 ] +zp ZP_WORD:12 [ makecharset::$15 makecharset::$16 makecharset::$17 makecharset::$18 fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 fire::screen#11 fire::screen#2 fire::screen#19 ] diff --git a/src/test/ref/examples/plasma/plasma-unroll.asm b/src/test/ref/examples/plasma/plasma-unroll.asm index c7bc3eeb0..5c50c5617 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.asm +++ b/src/test/ref/examples/plasma/plasma-unroll.asm @@ -27,7 +27,7 @@ .label print_char_cursor = $c .label c1A = $b .label c1B = $f - .label c2A = $12 + .label c2A = $10 .label c2B = 2 main: { .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f @@ -70,11 +70,11 @@ main: { doplasma: { .label c1a = 4 .label c1b = 5 - .label yval = $e .label i = 3 .label c2a = 7 .label c2b = 8 .label i1 = 6 + .label yprev = $e lda c1A sta c1a lda c1B @@ -82,13 +82,32 @@ doplasma: { ldx #0 txa sta i + b2: + ldy c1a + lda SINTABLE,y + ldy c1b + clc + adc SINTABLE,y + sta yprev + txa + eor #$ff + sec + adc yprev + ldy i + sta ybuf,y + lax c1a + axs #-[4] + stx c1a + lax c1b + axs #-[9] + stx c1b + inc i // Calculate ybuff as a bunch of differences - b1: lda i cmp #$19 - bcs !b2+ - jmp b2 - !b2: + bcs !b11+ + jmp b11 + !b11: lax c1A axs #-[3] stx c1A @@ -101,12 +120,24 @@ doplasma: { sta c2b lda #0 sta i1 - b4: + b5: + ldy c2a + lda SINTABLE,y + ldy c2b + clc + adc SINTABLE,y + ldy i1 + sta xbuf,y + lax c2a + axs #-[3] + stx c2a + lax c2b + axs #-[7] + stx c2b + inc i1 lda i1 cmp #$28 - bcs !b5+ - jmp b5 - !b5: + bcc b5 lda c2A clc adc #2 @@ -115,10 +146,6 @@ doplasma: { axs #3 stx c2B ldx #0 - b7: - cpx #$28 - bcc b8 - rts b8: // Find the first value on the row lda xbuf,x @@ -198,57 +225,26 @@ doplasma: { adc ybuf+$18 sta SCREEN1+$18*$28,x inx - jmp b7 - b5: - ldy c2a - lda SINTABLE,y - ldy c2b - clc - adc SINTABLE,y - ldy i1 - sta xbuf,y - lax c2a - axs #-[3] - stx c2a - lax c2b - axs #-[7] - stx c2b - inc i1 - jmp b4 - b2: - ldy c1a - lda SINTABLE,y - ldy c1b - clc - adc SINTABLE,y - sta yval - txa - eor #$ff - sec - adc yval - ldy i - sta ybuf,y - lax c1a - axs #-[4] - stx c1a - lax c1b - axs #-[9] - stx c1b - inc i - ldx yval - jmp b1 + cpx #$28 + bcs !b8+ + jmp b8 + !b8: + rts + b11: + ldx yprev + jmp b2 xbuf: .fill $28, 0 ybuf: .fill $19, 0 } // Make a plasma-friendly charset where the chars are randomly filled makecharset: { - .label _7 = $12 - .label _10 = $10 - .label _11 = $10 + .label _7 = $10 + .label _10 = $11 + .label _11 = $11 .label s = $f .label i = $b .label c = 9 - .label _16 = $10 + .label _16 = $11 jsr sid_rnd_init jsr print_cls lda #$100 - bcc b2 - bne !+ - lda c - cmp #<$100 - bcc b2 - !: - rts b2: lda c tay @@ -275,27 +261,23 @@ makecharset: { sta s lda #0 sta i - b3: - lda i - cmp #8 - bcc b4 - lda c - and #7 - cmp #0 - bne b11 - jsr print_char - b11: - inc c - bne !+ - inc c+1 - !: - jmp b1 b4: ldy #0 ldx #0 - b5: + b7: + jsr sid_rnd + and #$ff + sta _7 + lda s + cmp _7 + bcs b9 + tya + ora bittab,x + tay + b9: + inx cpx #8 - bcc b6 + bcc b7 lda c asl sta _10 @@ -324,27 +306,29 @@ makecharset: { ldy #0 sta (_16),y inc i - jmp b3 - b6: - jsr sid_rnd - and #$ff - sta _7 - lda s - cmp _7 - bcs b8 - tya - ora bittab,x - tay - b8: - inx - jmp b5 - bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 -} -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -sid_rnd: { - lda SID_VOICE3_OSC + lda i + cmp #8 + bcc b4 + lda c + and #7 + cmp #0 + bne b12 + jsr print_char + b12: + inc c + bne !+ + inc c+1 + !: + lda c+1 + cmp #>$100 + bcc b2 + bne !+ + lda c + cmp #<$100 + bcc b2 + !: rts + bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // Print a single char print_char: { @@ -358,6 +342,12 @@ print_char: { !: rts } +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + lda SID_VOICE3_OSC + rts +} // Clear the screen. Also resets current line/char cursor. print_cls: { jsr memset @@ -374,14 +364,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp # (const word) main::toD0181_$4#0 Successful SSA optimization Pass2ConstantRValueConsolidation @@ -1822,21 +1913,28 @@ Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Constant (const word) main::toD0181_$2#0 = main::toD0181_$1#0*4 Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0/4 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [23] (byte~) main::toD0181_$3#0 ← > (const word) main::toD0181_$2#0 -Constant right-side identified [24] (byte~) main::toD0181_$7#0 ← (const byte) main::toD0181_$6#0 & (byte) $f +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) memset::dst#1 = (byte*) memset::dst#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) memset::dst#5 (const byte*) memset::dst#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [25] (byte~) main::toD0181_$3#0 ← > (const word) main::toD0181_$2#0 +Constant right-side identified [26] (byte~) main::toD0181_$7#0 ← (const byte) main::toD0181_$6#0 & (byte) $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_$3#0 = >main::toD0181_$2#0 Constant (const byte) main::toD0181_$7#0 = main::toD0181_$6#0&$f Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [97] if((const byte*) memset::dst#0!=(const byte*) memset::end#0) goto memset::@5 +Successful SSA optimization Pass2ConstantIfs Constant right-side identified [23] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3#0 | (const byte) main::toD0181_$7#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16 tails: doplasma::@17 blocks: doplasma::@17 doplasma::@16 +Unrolling loop Loop head: doplasma::@17 tails: doplasma::@16 blocks: doplasma::@16 doplasma::@17 Successful SSA optimization Pass2LoopUnroll -Alias (byte) doplasma::val#0 = (byte) doplasma::val#2 +Alias (byte) doplasma::val#0 = (byte) doplasma::val#4 Successful SSA optimization Pass2AliasElimination -Identical Phi Values (byte) doplasma::ii#2 (const byte) doplasma::ii#0 +Identical Phi Values (byte) doplasma::ii#4 (const byte) doplasma::ii#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [55] (byte~) doplasma::$7 ← (const byte) doplasma::ii#0 * (byte) $28 Constant right-side identified [58] (byte) doplasma::ii#1 ← ++ (const byte) doplasma::ii#0 @@ -1844,7 +1942,7 @@ Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) doplasma::$7 = doplasma::ii#0*$28 Constant (const byte) doplasma::ii#1 = ++doplasma::ii#0 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [53] if((const byte) doplasma::ii#0<(byte) $19) goto doplasma::@17 +if() condition always true - replacing block destination [52] if((const byte) doplasma::ii#1<(byte) $19) goto doplasma::@17_1 Successful SSA optimization Pass2ConstantIfs Simplifying constant evaluating to zero (const byte) doplasma::ii#0*(byte) $28 in Successful SSA optimization PassNSimplifyConstantZero @@ -1855,472 +1953,452 @@ Eliminating unused constant (const byte) doplasma::$7 Successful SSA optimization PassNEliminateUnusedVars Constant (const byte*) doplasma::$8 = doplasma::screen#0 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_1 tails: doplasma::@17_1 blocks: doplasma::@17_1 doplasma::@16_1 +Unrolling loop Loop head: doplasma::@17_1 tails: doplasma::@16_2 blocks: doplasma::@16_2 doplasma::@17_1 Successful SSA optimization Pass2LoopUnroll -Alias (byte) doplasma::val#1 = (byte) doplasma::val#4 +Alias (byte) doplasma::val#1 = (byte) doplasma::val#6 Successful SSA optimization Pass2AliasElimination -Identical Phi Values (byte) doplasma::ii#4 (const byte) doplasma::ii#1 +Identical Phi Values (byte) doplasma::ii#6 (const byte) doplasma::ii#1 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [35] (byte~) doplasma::$9 ← (const byte) doplasma::ii#1 * (byte) $28 -Constant right-side identified [38] (byte) doplasma::ii#5 ← ++ (const byte) doplasma::ii#1 +Constant right-side identified [41] (byte~) doplasma::$9 ← (const byte) doplasma::ii#1 * (byte) $28 +Constant right-side identified [44] (byte) doplasma::ii#7 ← ++ (const byte) doplasma::ii#1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) doplasma::$9 = doplasma::ii#1*$28 -Constant (const byte) doplasma::ii#5 = ++doplasma::ii#1 +Constant (const byte) doplasma::ii#7 = ++doplasma::ii#1 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [31] if((const byte) doplasma::ii#1<(byte) $19) goto doplasma::@17_1 +if() condition always true - replacing block destination [45] if((const byte) doplasma::ii#7<(byte) $19) goto doplasma::@17_2 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [32] (byte*~) doplasma::$10 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$9 +Constant right-side identified [40] (byte*~) doplasma::$10 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$9 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) doplasma::$10 = doplasma::screen#0+doplasma::$9 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_2 tails: doplasma::@17_2 blocks: doplasma::@17_2 doplasma::@16_2 -Successful SSA optimization Pass2LoopUnroll -Alias (byte) doplasma::val#5 = (byte) doplasma::val#6 -Successful SSA optimization Pass2AliasElimination -Identical Phi Values (byte) doplasma::ii#6 (const byte) doplasma::ii#5 -Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [37] (byte~) doplasma::$11 ← (const byte) doplasma::ii#5 * (byte) $28 -Constant right-side identified [40] (byte) doplasma::ii#7 ← ++ (const byte) doplasma::ii#5 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$11 = doplasma::ii#5*$28 -Constant (const byte) doplasma::ii#7 = ++doplasma::ii#5 -Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [33] if((const byte) doplasma::ii#5<(byte) $19) goto doplasma::@17_2 -Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [34] (byte*~) doplasma::$12 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$11 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$12 = doplasma::screen#0+doplasma::$11 -Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_3 tails: doplasma::@17_3 blocks: doplasma::@17_3 doplasma::@16_3 +Unrolling loop Loop head: doplasma::@17_2 tails: doplasma::@16_3 blocks: doplasma::@16_3 doplasma::@17_2 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#7 = (byte) doplasma::val#8 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#8 (const byte) doplasma::ii#7 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [39] (byte~) doplasma::$13 ← (const byte) doplasma::ii#7 * (byte) $28 -Constant right-side identified [42] (byte) doplasma::ii#9 ← ++ (const byte) doplasma::ii#7 +Constant right-side identified [43] (byte~) doplasma::$11 ← (const byte) doplasma::ii#7 * (byte) $28 +Constant right-side identified [46] (byte) doplasma::ii#9 ← ++ (const byte) doplasma::ii#7 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$13 = doplasma::ii#7*$28 +Constant (const byte) doplasma::$11 = doplasma::ii#7*$28 Constant (const byte) doplasma::ii#9 = ++doplasma::ii#7 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [35] if((const byte) doplasma::ii#7<(byte) $19) goto doplasma::@17_3 +if() condition always true - replacing block destination [47] if((const byte) doplasma::ii#9<(byte) $19) goto doplasma::@17_3 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [36] (byte*~) doplasma::$14 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$13 +Constant right-side identified [42] (byte*~) doplasma::$12 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$11 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$14 = doplasma::screen#0+doplasma::$13 +Constant (const byte*) doplasma::$12 = doplasma::screen#0+doplasma::$11 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_4 tails: doplasma::@17_4 blocks: doplasma::@17_4 doplasma::@16_4 +Unrolling loop Loop head: doplasma::@17_3 tails: doplasma::@16_4 blocks: doplasma::@16_4 doplasma::@17_3 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#10 = (byte) doplasma::val#9 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#10 (const byte) doplasma::ii#9 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [41] (byte~) doplasma::$15 ← (const byte) doplasma::ii#9 * (byte) $28 -Constant right-side identified [44] (byte) doplasma::ii#11 ← ++ (const byte) doplasma::ii#9 +Constant right-side identified [45] (byte~) doplasma::$13 ← (const byte) doplasma::ii#9 * (byte) $28 +Constant right-side identified [48] (byte) doplasma::ii#11 ← ++ (const byte) doplasma::ii#9 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$15 = doplasma::ii#9*$28 +Constant (const byte) doplasma::$13 = doplasma::ii#9*$28 Constant (const byte) doplasma::ii#11 = ++doplasma::ii#9 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [37] if((const byte) doplasma::ii#9<(byte) $19) goto doplasma::@17_4 +if() condition always true - replacing block destination [49] if((const byte) doplasma::ii#11<(byte) $19) goto doplasma::@17_4 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [38] (byte*~) doplasma::$16 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$15 +Constant right-side identified [44] (byte*~) doplasma::$14 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$13 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$16 = doplasma::screen#0+doplasma::$15 +Constant (const byte*) doplasma::$14 = doplasma::screen#0+doplasma::$13 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_5 tails: doplasma::@17_5 blocks: doplasma::@17_5 doplasma::@16_5 +Unrolling loop Loop head: doplasma::@17_4 tails: doplasma::@16_5 blocks: doplasma::@16_5 doplasma::@17_4 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#11 = (byte) doplasma::val#12 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#12 (const byte) doplasma::ii#11 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [43] (byte~) doplasma::$17 ← (const byte) doplasma::ii#11 * (byte) $28 -Constant right-side identified [46] (byte) doplasma::ii#13 ← ++ (const byte) doplasma::ii#11 +Constant right-side identified [47] (byte~) doplasma::$15 ← (const byte) doplasma::ii#11 * (byte) $28 +Constant right-side identified [50] (byte) doplasma::ii#13 ← ++ (const byte) doplasma::ii#11 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$17 = doplasma::ii#11*$28 +Constant (const byte) doplasma::$15 = doplasma::ii#11*$28 Constant (const byte) doplasma::ii#13 = ++doplasma::ii#11 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [39] if((const byte) doplasma::ii#11<(byte) $19) goto doplasma::@17_5 +if() condition always true - replacing block destination [51] if((const byte) doplasma::ii#13<(byte) $19) goto doplasma::@17_5 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [40] (byte*~) doplasma::$18 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$17 +Constant right-side identified [46] (byte*~) doplasma::$16 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$15 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$18 = doplasma::screen#0+doplasma::$17 +Constant (const byte*) doplasma::$16 = doplasma::screen#0+doplasma::$15 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_6 tails: doplasma::@17_6 blocks: doplasma::@17_6 doplasma::@16_6 +Unrolling loop Loop head: doplasma::@17_5 tails: doplasma::@16_6 blocks: doplasma::@16_6 doplasma::@17_5 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#13 = (byte) doplasma::val#14 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#14 (const byte) doplasma::ii#13 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [45] (byte~) doplasma::$19 ← (const byte) doplasma::ii#13 * (byte) $28 -Constant right-side identified [48] (byte) doplasma::ii#15 ← ++ (const byte) doplasma::ii#13 +Constant right-side identified [49] (byte~) doplasma::$17 ← (const byte) doplasma::ii#13 * (byte) $28 +Constant right-side identified [52] (byte) doplasma::ii#15 ← ++ (const byte) doplasma::ii#13 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$19 = doplasma::ii#13*$28 +Constant (const byte) doplasma::$17 = doplasma::ii#13*$28 Constant (const byte) doplasma::ii#15 = ++doplasma::ii#13 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [41] if((const byte) doplasma::ii#13<(byte) $19) goto doplasma::@17_6 +if() condition always true - replacing block destination [53] if((const byte) doplasma::ii#15<(byte) $19) goto doplasma::@17_6 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [42] (byte*~) doplasma::$20 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$19 +Constant right-side identified [48] (byte*~) doplasma::$18 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$17 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$20 = doplasma::screen#0+doplasma::$19 +Constant (const byte*) doplasma::$18 = doplasma::screen#0+doplasma::$17 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_7 tails: doplasma::@17_7 blocks: doplasma::@17_7 doplasma::@16_7 +Unrolling loop Loop head: doplasma::@17_6 tails: doplasma::@16_7 blocks: doplasma::@16_7 doplasma::@17_6 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#15 = (byte) doplasma::val#16 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#16 (const byte) doplasma::ii#15 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [47] (byte~) doplasma::$21 ← (const byte) doplasma::ii#15 * (byte) $28 -Constant right-side identified [50] (byte) doplasma::ii#17 ← ++ (const byte) doplasma::ii#15 +Constant right-side identified [51] (byte~) doplasma::$19 ← (const byte) doplasma::ii#15 * (byte) $28 +Constant right-side identified [54] (byte) doplasma::ii#17 ← ++ (const byte) doplasma::ii#15 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$21 = doplasma::ii#15*$28 +Constant (const byte) doplasma::$19 = doplasma::ii#15*$28 Constant (const byte) doplasma::ii#17 = ++doplasma::ii#15 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [43] if((const byte) doplasma::ii#15<(byte) $19) goto doplasma::@17_7 +if() condition always true - replacing block destination [55] if((const byte) doplasma::ii#17<(byte) $19) goto doplasma::@17_7 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [44] (byte*~) doplasma::$22 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$21 +Constant right-side identified [50] (byte*~) doplasma::$20 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$19 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$22 = doplasma::screen#0+doplasma::$21 +Constant (const byte*) doplasma::$20 = doplasma::screen#0+doplasma::$19 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_8 tails: doplasma::@17_8 blocks: doplasma::@17_8 doplasma::@16_8 +Unrolling loop Loop head: doplasma::@17_7 tails: doplasma::@16_8 blocks: doplasma::@16_8 doplasma::@17_7 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#17 = (byte) doplasma::val#18 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#18 (const byte) doplasma::ii#17 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [49] (byte~) doplasma::$23 ← (const byte) doplasma::ii#17 * (byte) $28 -Constant right-side identified [52] (byte) doplasma::ii#19 ← ++ (const byte) doplasma::ii#17 +Constant right-side identified [53] (byte~) doplasma::$21 ← (const byte) doplasma::ii#17 * (byte) $28 +Constant right-side identified [56] (byte) doplasma::ii#19 ← ++ (const byte) doplasma::ii#17 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$23 = doplasma::ii#17*$28 +Constant (const byte) doplasma::$21 = doplasma::ii#17*$28 Constant (const byte) doplasma::ii#19 = ++doplasma::ii#17 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [45] if((const byte) doplasma::ii#17<(byte) $19) goto doplasma::@17_8 +if() condition always true - replacing block destination [57] if((const byte) doplasma::ii#19<(byte) $19) goto doplasma::@17_8 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [46] (byte*~) doplasma::$24 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$23 +Constant right-side identified [52] (byte*~) doplasma::$22 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$21 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$24 = doplasma::screen#0+doplasma::$23 +Constant (const byte*) doplasma::$22 = doplasma::screen#0+doplasma::$21 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_9 tails: doplasma::@17_9 blocks: doplasma::@17_9 doplasma::@16_9 +Unrolling loop Loop head: doplasma::@17_8 tails: doplasma::@16_9 blocks: doplasma::@16_9 doplasma::@17_8 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#19 = (byte) doplasma::val#20 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#20 (const byte) doplasma::ii#19 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [51] (byte~) doplasma::$25 ← (const byte) doplasma::ii#19 * (byte) $28 -Constant right-side identified [54] (byte) doplasma::ii#21 ← ++ (const byte) doplasma::ii#19 +Constant right-side identified [55] (byte~) doplasma::$23 ← (const byte) doplasma::ii#19 * (byte) $28 +Constant right-side identified [58] (byte) doplasma::ii#21 ← ++ (const byte) doplasma::ii#19 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$25 = doplasma::ii#19*$28 +Constant (const byte) doplasma::$23 = doplasma::ii#19*$28 Constant (const byte) doplasma::ii#21 = ++doplasma::ii#19 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [47] if((const byte) doplasma::ii#19<(byte) $19) goto doplasma::@17_9 +if() condition always true - replacing block destination [59] if((const byte) doplasma::ii#21<(byte) $19) goto doplasma::@17_9 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [48] (byte*~) doplasma::$26 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$25 +Constant right-side identified [54] (byte*~) doplasma::$24 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$23 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$26 = doplasma::screen#0+doplasma::$25 +Constant (const byte*) doplasma::$24 = doplasma::screen#0+doplasma::$23 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_10 tails: doplasma::@17_10 blocks: doplasma::@17_10 doplasma::@16_10 +Unrolling loop Loop head: doplasma::@17_9 tails: doplasma::@16_10 blocks: doplasma::@16_10 doplasma::@17_9 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#21 = (byte) doplasma::val#22 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#22 (const byte) doplasma::ii#21 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [53] (byte~) doplasma::$27 ← (const byte) doplasma::ii#21 * (byte) $28 -Constant right-side identified [56] (byte) doplasma::ii#23 ← ++ (const byte) doplasma::ii#21 +Constant right-side identified [57] (byte~) doplasma::$25 ← (const byte) doplasma::ii#21 * (byte) $28 +Constant right-side identified [60] (byte) doplasma::ii#23 ← ++ (const byte) doplasma::ii#21 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$27 = doplasma::ii#21*$28 +Constant (const byte) doplasma::$25 = doplasma::ii#21*$28 Constant (const byte) doplasma::ii#23 = ++doplasma::ii#21 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [49] if((const byte) doplasma::ii#21<(byte) $19) goto doplasma::@17_10 +if() condition always true - replacing block destination [61] if((const byte) doplasma::ii#23<(byte) $19) goto doplasma::@17_10 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [50] (byte*~) doplasma::$28 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$27 +Constant right-side identified [56] (byte*~) doplasma::$26 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$25 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$28 = doplasma::screen#0+doplasma::$27 +Constant (const byte*) doplasma::$26 = doplasma::screen#0+doplasma::$25 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_11 tails: doplasma::@17_11 blocks: doplasma::@17_11 doplasma::@16_11 +Unrolling loop Loop head: doplasma::@17_10 tails: doplasma::@16_11 blocks: doplasma::@16_11 doplasma::@17_10 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#23 = (byte) doplasma::val#24 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#24 (const byte) doplasma::ii#23 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [55] (byte~) doplasma::$29 ← (const byte) doplasma::ii#23 * (byte) $28 -Constant right-side identified [58] (byte) doplasma::ii#25 ← ++ (const byte) doplasma::ii#23 +Constant right-side identified [59] (byte~) doplasma::$27 ← (const byte) doplasma::ii#23 * (byte) $28 +Constant right-side identified [62] (byte) doplasma::ii#25 ← ++ (const byte) doplasma::ii#23 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$29 = doplasma::ii#23*$28 +Constant (const byte) doplasma::$27 = doplasma::ii#23*$28 Constant (const byte) doplasma::ii#25 = ++doplasma::ii#23 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [51] if((const byte) doplasma::ii#23<(byte) $19) goto doplasma::@17_11 +if() condition always true - replacing block destination [63] if((const byte) doplasma::ii#25<(byte) $19) goto doplasma::@17_11 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [52] (byte*~) doplasma::$30 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$29 +Constant right-side identified [58] (byte*~) doplasma::$28 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$27 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$30 = doplasma::screen#0+doplasma::$29 +Constant (const byte*) doplasma::$28 = doplasma::screen#0+doplasma::$27 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_12 tails: doplasma::@17_12 blocks: doplasma::@17_12 doplasma::@16_12 +Unrolling loop Loop head: doplasma::@17_11 tails: doplasma::@16_12 blocks: doplasma::@16_12 doplasma::@17_11 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#25 = (byte) doplasma::val#26 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#26 (const byte) doplasma::ii#25 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [57] (byte~) doplasma::$31 ← (const byte) doplasma::ii#25 * (byte) $28 -Constant right-side identified [60] (byte) doplasma::ii#27 ← ++ (const byte) doplasma::ii#25 +Constant right-side identified [61] (byte~) doplasma::$29 ← (const byte) doplasma::ii#25 * (byte) $28 +Constant right-side identified [64] (byte) doplasma::ii#27 ← ++ (const byte) doplasma::ii#25 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$31 = doplasma::ii#25*$28 +Constant (const byte) doplasma::$29 = doplasma::ii#25*$28 Constant (const byte) doplasma::ii#27 = ++doplasma::ii#25 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [53] if((const byte) doplasma::ii#25<(byte) $19) goto doplasma::@17_12 +if() condition always true - replacing block destination [65] if((const byte) doplasma::ii#27<(byte) $19) goto doplasma::@17_12 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [54] (byte*~) doplasma::$32 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$31 +Constant right-side identified [60] (byte*~) doplasma::$30 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$29 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$32 = doplasma::screen#0+doplasma::$31 +Constant (const byte*) doplasma::$30 = doplasma::screen#0+doplasma::$29 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_13 tails: doplasma::@17_13 blocks: doplasma::@17_13 doplasma::@16_13 +Unrolling loop Loop head: doplasma::@17_12 tails: doplasma::@16_13 blocks: doplasma::@16_13 doplasma::@17_12 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#27 = (byte) doplasma::val#28 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#28 (const byte) doplasma::ii#27 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [59] (byte~) doplasma::$33 ← (const byte) doplasma::ii#27 * (byte) $28 -Constant right-side identified [62] (byte) doplasma::ii#29 ← ++ (const byte) doplasma::ii#27 +Constant right-side identified [63] (byte~) doplasma::$31 ← (const byte) doplasma::ii#27 * (byte) $28 +Constant right-side identified [66] (byte) doplasma::ii#29 ← ++ (const byte) doplasma::ii#27 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$33 = doplasma::ii#27*$28 +Constant (const byte) doplasma::$31 = doplasma::ii#27*$28 Constant (const byte) doplasma::ii#29 = ++doplasma::ii#27 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [55] if((const byte) doplasma::ii#27<(byte) $19) goto doplasma::@17_13 +if() condition always true - replacing block destination [67] if((const byte) doplasma::ii#29<(byte) $19) goto doplasma::@17_13 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [56] (byte*~) doplasma::$34 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$33 +Constant right-side identified [62] (byte*~) doplasma::$32 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$31 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$34 = doplasma::screen#0+doplasma::$33 +Constant (const byte*) doplasma::$32 = doplasma::screen#0+doplasma::$31 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_14 tails: doplasma::@17_14 blocks: doplasma::@17_14 doplasma::@16_14 +Unrolling loop Loop head: doplasma::@17_13 tails: doplasma::@16_14 blocks: doplasma::@16_14 doplasma::@17_13 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#29 = (byte) doplasma::val#30 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#30 (const byte) doplasma::ii#29 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [61] (byte~) doplasma::$35 ← (const byte) doplasma::ii#29 * (byte) $28 -Constant right-side identified [64] (byte) doplasma::ii#31 ← ++ (const byte) doplasma::ii#29 +Constant right-side identified [65] (byte~) doplasma::$33 ← (const byte) doplasma::ii#29 * (byte) $28 +Constant right-side identified [68] (byte) doplasma::ii#31 ← ++ (const byte) doplasma::ii#29 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$35 = doplasma::ii#29*$28 +Constant (const byte) doplasma::$33 = doplasma::ii#29*$28 Constant (const byte) doplasma::ii#31 = ++doplasma::ii#29 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [57] if((const byte) doplasma::ii#29<(byte) $19) goto doplasma::@17_14 +if() condition always true - replacing block destination [69] if((const byte) doplasma::ii#31<(byte) $19) goto doplasma::@17_14 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [58] (byte*~) doplasma::$36 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$35 +Constant right-side identified [64] (byte*~) doplasma::$34 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$33 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$36 = doplasma::screen#0+doplasma::$35 +Constant (const byte*) doplasma::$34 = doplasma::screen#0+doplasma::$33 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_15 tails: doplasma::@17_15 blocks: doplasma::@17_15 doplasma::@16_15 +Unrolling loop Loop head: doplasma::@17_14 tails: doplasma::@16_15 blocks: doplasma::@16_15 doplasma::@17_14 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#31 = (byte) doplasma::val#32 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#32 (const byte) doplasma::ii#31 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [63] (byte~) doplasma::$37 ← (const byte) doplasma::ii#31 * (byte) $28 -Constant right-side identified [66] (byte) doplasma::ii#33 ← ++ (const byte) doplasma::ii#31 +Constant right-side identified [67] (byte~) doplasma::$35 ← (const byte) doplasma::ii#31 * (byte) $28 +Constant right-side identified [70] (byte) doplasma::ii#33 ← ++ (const byte) doplasma::ii#31 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$37 = doplasma::ii#31*$28 +Constant (const byte) doplasma::$35 = doplasma::ii#31*$28 Constant (const byte) doplasma::ii#33 = ++doplasma::ii#31 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [59] if((const byte) doplasma::ii#31<(byte) $19) goto doplasma::@17_15 +if() condition always true - replacing block destination [71] if((const byte) doplasma::ii#33<(byte) $19) goto doplasma::@17_15 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [60] (byte*~) doplasma::$38 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$37 +Constant right-side identified [66] (byte*~) doplasma::$36 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$35 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$38 = doplasma::screen#0+doplasma::$37 +Constant (const byte*) doplasma::$36 = doplasma::screen#0+doplasma::$35 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_16 tails: doplasma::@17_16 blocks: doplasma::@17_16 doplasma::@16_16 +Unrolling loop Loop head: doplasma::@17_15 tails: doplasma::@16_16 blocks: doplasma::@16_16 doplasma::@17_15 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#33 = (byte) doplasma::val#34 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#34 (const byte) doplasma::ii#33 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [65] (byte~) doplasma::$39 ← (const byte) doplasma::ii#33 * (byte) $28 -Constant right-side identified [68] (byte) doplasma::ii#35 ← ++ (const byte) doplasma::ii#33 +Constant right-side identified [69] (byte~) doplasma::$37 ← (const byte) doplasma::ii#33 * (byte) $28 +Constant right-side identified [72] (byte) doplasma::ii#35 ← ++ (const byte) doplasma::ii#33 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$39 = doplasma::ii#33*$28 +Constant (const byte) doplasma::$37 = doplasma::ii#33*$28 Constant (const byte) doplasma::ii#35 = ++doplasma::ii#33 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [61] if((const byte) doplasma::ii#33<(byte) $19) goto doplasma::@17_16 +if() condition always true - replacing block destination [73] if((const byte) doplasma::ii#35<(byte) $19) goto doplasma::@17_16 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [62] (byte*~) doplasma::$40 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$39 +Constant right-side identified [68] (byte*~) doplasma::$38 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$37 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$40 = doplasma::screen#0+doplasma::$39 +Constant (const byte*) doplasma::$38 = doplasma::screen#0+doplasma::$37 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_17 tails: doplasma::@17_17 blocks: doplasma::@17_17 doplasma::@16_17 +Unrolling loop Loop head: doplasma::@17_16 tails: doplasma::@16_17 blocks: doplasma::@16_17 doplasma::@17_16 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#35 = (byte) doplasma::val#36 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#36 (const byte) doplasma::ii#35 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [67] (byte~) doplasma::$41 ← (const byte) doplasma::ii#35 * (byte) $28 -Constant right-side identified [70] (byte) doplasma::ii#37 ← ++ (const byte) doplasma::ii#35 +Constant right-side identified [71] (byte~) doplasma::$39 ← (const byte) doplasma::ii#35 * (byte) $28 +Constant right-side identified [74] (byte) doplasma::ii#37 ← ++ (const byte) doplasma::ii#35 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$41 = doplasma::ii#35*$28 +Constant (const byte) doplasma::$39 = doplasma::ii#35*$28 Constant (const byte) doplasma::ii#37 = ++doplasma::ii#35 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [63] if((const byte) doplasma::ii#35<(byte) $19) goto doplasma::@17_17 +if() condition always true - replacing block destination [75] if((const byte) doplasma::ii#37<(byte) $19) goto doplasma::@17_17 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [64] (byte*~) doplasma::$42 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$41 +Constant right-side identified [70] (byte*~) doplasma::$40 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$39 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$42 = doplasma::screen#0+doplasma::$41 +Constant (const byte*) doplasma::$40 = doplasma::screen#0+doplasma::$39 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_18 tails: doplasma::@17_18 blocks: doplasma::@17_18 doplasma::@16_18 +Unrolling loop Loop head: doplasma::@17_17 tails: doplasma::@16_18 blocks: doplasma::@16_18 doplasma::@17_17 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#37 = (byte) doplasma::val#38 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#38 (const byte) doplasma::ii#37 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [69] (byte~) doplasma::$43 ← (const byte) doplasma::ii#37 * (byte) $28 -Constant right-side identified [72] (byte) doplasma::ii#39 ← ++ (const byte) doplasma::ii#37 +Constant right-side identified [73] (byte~) doplasma::$41 ← (const byte) doplasma::ii#37 * (byte) $28 +Constant right-side identified [76] (byte) doplasma::ii#39 ← ++ (const byte) doplasma::ii#37 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$43 = doplasma::ii#37*$28 +Constant (const byte) doplasma::$41 = doplasma::ii#37*$28 Constant (const byte) doplasma::ii#39 = ++doplasma::ii#37 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [65] if((const byte) doplasma::ii#37<(byte) $19) goto doplasma::@17_18 +if() condition always true - replacing block destination [77] if((const byte) doplasma::ii#39<(byte) $19) goto doplasma::@17_18 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [66] (byte*~) doplasma::$44 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$43 +Constant right-side identified [72] (byte*~) doplasma::$42 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$41 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$44 = doplasma::screen#0+doplasma::$43 +Constant (const byte*) doplasma::$42 = doplasma::screen#0+doplasma::$41 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_19 tails: doplasma::@17_19 blocks: doplasma::@17_19 doplasma::@16_19 +Unrolling loop Loop head: doplasma::@17_18 tails: doplasma::@16_19 blocks: doplasma::@16_19 doplasma::@17_18 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#39 = (byte) doplasma::val#40 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#40 (const byte) doplasma::ii#39 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [71] (byte~) doplasma::$45 ← (const byte) doplasma::ii#39 * (byte) $28 -Constant right-side identified [74] (byte) doplasma::ii#41 ← ++ (const byte) doplasma::ii#39 +Constant right-side identified [75] (byte~) doplasma::$43 ← (const byte) doplasma::ii#39 * (byte) $28 +Constant right-side identified [78] (byte) doplasma::ii#41 ← ++ (const byte) doplasma::ii#39 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$45 = doplasma::ii#39*$28 +Constant (const byte) doplasma::$43 = doplasma::ii#39*$28 Constant (const byte) doplasma::ii#41 = ++doplasma::ii#39 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [67] if((const byte) doplasma::ii#39<(byte) $19) goto doplasma::@17_19 +if() condition always true - replacing block destination [79] if((const byte) doplasma::ii#41<(byte) $19) goto doplasma::@17_19 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [68] (byte*~) doplasma::$46 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$45 +Constant right-side identified [74] (byte*~) doplasma::$44 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$43 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$46 = doplasma::screen#0+doplasma::$45 +Constant (const byte*) doplasma::$44 = doplasma::screen#0+doplasma::$43 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_20 tails: doplasma::@17_20 blocks: doplasma::@17_20 doplasma::@16_20 +Unrolling loop Loop head: doplasma::@17_19 tails: doplasma::@16_20 blocks: doplasma::@16_20 doplasma::@17_19 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#41 = (byte) doplasma::val#42 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#42 (const byte) doplasma::ii#41 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [73] (byte~) doplasma::$47 ← (const byte) doplasma::ii#41 * (byte) $28 -Constant right-side identified [76] (byte) doplasma::ii#43 ← ++ (const byte) doplasma::ii#41 +Constant right-side identified [77] (byte~) doplasma::$45 ← (const byte) doplasma::ii#41 * (byte) $28 +Constant right-side identified [80] (byte) doplasma::ii#43 ← ++ (const byte) doplasma::ii#41 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$47 = doplasma::ii#41*$28 +Constant (const byte) doplasma::$45 = doplasma::ii#41*$28 Constant (const byte) doplasma::ii#43 = ++doplasma::ii#41 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [69] if((const byte) doplasma::ii#41<(byte) $19) goto doplasma::@17_20 +if() condition always true - replacing block destination [81] if((const byte) doplasma::ii#43<(byte) $19) goto doplasma::@17_20 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [70] (byte*~) doplasma::$48 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$47 +Constant right-side identified [76] (byte*~) doplasma::$46 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$45 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$48 = doplasma::screen#0+doplasma::$47 +Constant (const byte*) doplasma::$46 = doplasma::screen#0+doplasma::$45 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_21 tails: doplasma::@17_21 blocks: doplasma::@17_21 doplasma::@16_21 +Unrolling loop Loop head: doplasma::@17_20 tails: doplasma::@16_21 blocks: doplasma::@16_21 doplasma::@17_20 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#43 = (byte) doplasma::val#44 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#44 (const byte) doplasma::ii#43 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [75] (byte~) doplasma::$49 ← (const byte) doplasma::ii#43 * (byte) $28 -Constant right-side identified [78] (byte) doplasma::ii#45 ← ++ (const byte) doplasma::ii#43 +Constant right-side identified [79] (byte~) doplasma::$47 ← (const byte) doplasma::ii#43 * (byte) $28 +Constant right-side identified [82] (byte) doplasma::ii#45 ← ++ (const byte) doplasma::ii#43 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$49 = doplasma::ii#43*$28 +Constant (const byte) doplasma::$47 = doplasma::ii#43*$28 Constant (const byte) doplasma::ii#45 = ++doplasma::ii#43 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [71] if((const byte) doplasma::ii#43<(byte) $19) goto doplasma::@17_21 +if() condition always true - replacing block destination [83] if((const byte) doplasma::ii#45<(byte) $19) goto doplasma::@17_21 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [72] (byte*~) doplasma::$50 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$49 +Constant right-side identified [78] (byte*~) doplasma::$48 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$47 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$50 = doplasma::screen#0+doplasma::$49 +Constant (const byte*) doplasma::$48 = doplasma::screen#0+doplasma::$47 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_22 tails: doplasma::@17_22 blocks: doplasma::@17_22 doplasma::@16_22 +Unrolling loop Loop head: doplasma::@17_21 tails: doplasma::@16_22 blocks: doplasma::@16_22 doplasma::@17_21 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#45 = (byte) doplasma::val#46 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#46 (const byte) doplasma::ii#45 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [77] (byte~) doplasma::$51 ← (const byte) doplasma::ii#45 * (byte) $28 -Constant right-side identified [80] (byte) doplasma::ii#47 ← ++ (const byte) doplasma::ii#45 +Constant right-side identified [81] (byte~) doplasma::$49 ← (const byte) doplasma::ii#45 * (byte) $28 +Constant right-side identified [84] (byte) doplasma::ii#47 ← ++ (const byte) doplasma::ii#45 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$51 = doplasma::ii#45*$28 +Constant (const byte) doplasma::$49 = doplasma::ii#45*$28 Constant (const byte) doplasma::ii#47 = ++doplasma::ii#45 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [73] if((const byte) doplasma::ii#45<(byte) $19) goto doplasma::@17_22 +if() condition always true - replacing block destination [85] if((const byte) doplasma::ii#47<(byte) $19) goto doplasma::@17_22 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [74] (byte*~) doplasma::$52 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$51 +Constant right-side identified [80] (byte*~) doplasma::$50 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$49 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$52 = doplasma::screen#0+doplasma::$51 +Constant (const byte*) doplasma::$50 = doplasma::screen#0+doplasma::$49 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_23 tails: doplasma::@17_23 blocks: doplasma::@17_23 doplasma::@16_23 +Unrolling loop Loop head: doplasma::@17_22 tails: doplasma::@16_23 blocks: doplasma::@16_23 doplasma::@17_22 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#47 = (byte) doplasma::val#48 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#48 (const byte) doplasma::ii#47 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [79] (byte~) doplasma::$53 ← (const byte) doplasma::ii#47 * (byte) $28 -Constant right-side identified [82] (byte) doplasma::ii#49 ← ++ (const byte) doplasma::ii#47 +Constant right-side identified [83] (byte~) doplasma::$51 ← (const byte) doplasma::ii#47 * (byte) $28 +Constant right-side identified [86] (byte) doplasma::ii#49 ← ++ (const byte) doplasma::ii#47 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$53 = doplasma::ii#47*$28 +Constant (const byte) doplasma::$51 = doplasma::ii#47*$28 Constant (const byte) doplasma::ii#49 = ++doplasma::ii#47 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [75] if((const byte) doplasma::ii#47<(byte) $19) goto doplasma::@17_23 +if() condition always true - replacing block destination [87] if((const byte) doplasma::ii#49<(byte) $19) goto doplasma::@17_23 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [76] (byte*~) doplasma::$54 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$53 +Constant right-side identified [82] (byte*~) doplasma::$52 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$51 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$54 = doplasma::screen#0+doplasma::$53 +Constant (const byte*) doplasma::$52 = doplasma::screen#0+doplasma::$51 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_24 tails: doplasma::@17_24 blocks: doplasma::@17_24 doplasma::@16_24 +Unrolling loop Loop head: doplasma::@17_23 tails: doplasma::@16_24 blocks: doplasma::@16_24 doplasma::@17_23 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#49 = (byte) doplasma::val#50 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#50 (const byte) doplasma::ii#49 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [81] (byte~) doplasma::$55 ← (const byte) doplasma::ii#49 * (byte) $28 -Constant right-side identified [84] (byte) doplasma::ii#51 ← ++ (const byte) doplasma::ii#49 +Constant right-side identified [85] (byte~) doplasma::$53 ← (const byte) doplasma::ii#49 * (byte) $28 +Constant right-side identified [88] (byte) doplasma::ii#51 ← ++ (const byte) doplasma::ii#49 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$55 = doplasma::ii#49*$28 +Constant (const byte) doplasma::$53 = doplasma::ii#49*$28 Constant (const byte) doplasma::ii#51 = ++doplasma::ii#49 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [77] if((const byte) doplasma::ii#49<(byte) $19) goto doplasma::@17_24 +if() condition always true - replacing block destination [89] if((const byte) doplasma::ii#51<(byte) $19) goto doplasma::@17_24 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [78] (byte*~) doplasma::$56 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$55 +Constant right-side identified [84] (byte*~) doplasma::$54 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$53 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) doplasma::$56 = doplasma::screen#0+doplasma::$55 +Constant (const byte*) doplasma::$54 = doplasma::screen#0+doplasma::$53 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: doplasma::@16_25 tails: doplasma::@17_25 blocks: doplasma::@17_25 doplasma::@16_25 +Unrolling loop Loop head: doplasma::@17_24 tails: doplasma::@16_25 blocks: doplasma::@16_25 doplasma::@17_24 Successful SSA optimization Pass2LoopUnroll Alias (byte) doplasma::val#51 = (byte) doplasma::val#52 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) doplasma::ii#52 (const byte) doplasma::ii#51 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [83] (byte~) doplasma::$57 ← (const byte) doplasma::ii#51 * (byte) $28 -Constant right-side identified [86] (byte) doplasma::ii#53 ← ++ (const byte) doplasma::ii#51 +Constant right-side identified [87] (byte~) doplasma::$55 ← (const byte) doplasma::ii#51 * (byte) $28 +Constant right-side identified [90] (byte) doplasma::ii#53 ← ++ (const byte) doplasma::ii#51 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) doplasma::$57 = doplasma::ii#51*$28 +Constant (const byte) doplasma::$55 = doplasma::ii#51*$28 Constant (const byte) doplasma::ii#53 = ++doplasma::ii#51 Successful SSA optimization Pass2ConstantIdentification -if() condition always false - eliminating [79] if((const byte) doplasma::ii#51<(byte) $19) goto doplasma::@17_25 +Removing PHI-reference to removed block (doplasma::@16_25) in block doplasma::@17_25 +Removing PHI-reference to removed block (doplasma::@16_25) in block doplasma::@17_25 +if() condition always false - eliminating [91] if((const byte) doplasma::ii#53<(byte) $19) goto doplasma::@17_25 Successful SSA optimization Pass2ConstantIfs -Eliminating variable (byte) doplasma::val#53 from unused block doplasma::@17_25 -Eliminating variable (byte*~) doplasma::$58 from unused block doplasma::@17_25 -Eliminating variable (byte) doplasma::ii#54 from unused block doplasma::@16_26 -Eliminating variable (byte) doplasma::val#54 from unused block doplasma::@16_26 -Eliminating variable (byte) doplasma::val#55 from unused block doplasma::@17_26 -Eliminating variable (byte~) doplasma::$59 from unused block doplasma::@17_26 -Eliminating variable (byte*~) doplasma::$60 from unused block doplasma::@17_26 -Eliminating variable (byte) doplasma::ii#55 from unused block doplasma::@17_26 -Removing PHI-reference to removed block (doplasma::@17_25) in block doplasma::@16_26 -Removing PHI-reference to removed block (doplasma::@17_25) in block doplasma::@16_26 -Removing unused block doplasma::@17_25 -Removing unused block doplasma::@16_26 -Removing unused block doplasma::@17_26 -Successful SSA optimization Pass2EliminateUnusedBlocks -Eliminating unused constant (const byte) doplasma::$57 Eliminating unused constant (const byte) doplasma::ii#53 Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused constant (const byte) doplasma::ii#51 -Successful SSA optimization PassNEliminateUnusedVars -Rewriting multiplication to use shift [106] (word~) makecharset::$10 ← (word) makecharset::c#2 * (byte) 8 +Eliminating variable (byte) doplasma::ii#54 from unused block doplasma::@17_25 +Eliminating variable (byte) doplasma::val#54 from unused block doplasma::@17_25 +Eliminating variable (byte) doplasma::val#55 from unused block doplasma::@17_25 +Eliminating variable (byte~) doplasma::$57 from unused block doplasma::@17_25 +Eliminating variable (byte*~) doplasma::$58 from unused block doplasma::@17_25 +Eliminating variable (byte) doplasma::ii#55 from unused block doplasma::@17_25 +Removing unused block doplasma::@17_25 +Removing unused block doplasma::@16_26 +Successful SSA optimization Pass2EliminateUnusedBlocks +Constant right-side identified [86] (byte*~) doplasma::$56 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$55 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte*) doplasma::$56 = doplasma::screen#0+doplasma::$55 +Successful SSA optimization Pass2ConstantIdentification +Rewriting multiplication to use shift [106] (word~) makecharset::$10 ← (word) makecharset::c#16 * (byte) 8 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte*) memset::dst#0 Inlining constant with var siblings (const byte*) main::col#0 @@ -2330,7 +2408,6 @@ Inlining constant with var siblings (const byte) doplasma::i1#0 Inlining constant with var siblings (const byte) doplasma::i2#0 Inlining constant with different constant siblings (const byte) doplasma::ii#0 Inlining constant with different constant siblings (const byte) doplasma::ii#1 -Inlining constant with different constant siblings (const byte) doplasma::ii#5 Inlining constant with different constant siblings (const byte) doplasma::ii#7 Inlining constant with different constant siblings (const byte) doplasma::ii#9 Inlining constant with different constant siblings (const byte) doplasma::ii#11 @@ -2353,6 +2430,7 @@ Inlining constant with different constant siblings (const byte) doplasma::ii#43 Inlining constant with different constant siblings (const byte) doplasma::ii#45 Inlining constant with different constant siblings (const byte) doplasma::ii#47 Inlining constant with different constant siblings (const byte) doplasma::ii#49 +Inlining constant with different constant siblings (const byte) doplasma::ii#51 Inlining constant with var siblings (const word) makecharset::c#0 Inlining constant with var siblings (const byte) makecharset::i#0 Inlining constant with var siblings (const byte) makecharset::b#0 @@ -2361,18 +2439,18 @@ Inlining constant with var siblings (const byte) c1A#16 Inlining constant with var siblings (const byte) c1B#16 Inlining constant with var siblings (const byte) c2A#17 Inlining constant with var siblings (const byte) c2B#17 -Constant inlined doplasma::ii#47 = ++++++++++++++++++++++++++++++++++++++++++++++(byte) 0 -Constant inlined doplasma::ii#49 = ++++++++++++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#47 = ++++++++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#49 = ++++++++++++++++++++++++++++++++++++++++++++++(byte) 0 Constant inlined main::col#0 = (const byte*) COLS#0 -Constant inlined doplasma::ii#41 = ++++++++++++++++++++++++++++++++++++++++(byte) 0 -Constant inlined doplasma::ii#43 = ++++++++++++++++++++++++++++++++++++++++++(byte) 0 -Constant inlined doplasma::ii#45 = ++++++++++++++++++++++++++++++++++++++++++++(byte) 0 -Constant inlined doplasma::ii#7 = ++++++(byte) 0 -Constant inlined doplasma::ii#9 = ++++++++(byte) 0 +Constant inlined doplasma::ii#41 = ++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#43 = ++++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#45 = ++++++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#7 = ++++(byte) 0 +Constant inlined doplasma::ii#9 = ++++++(byte) 0 Constant inlined c1A#16 = (byte) 0 Constant inlined doplasma::ii#0 = (byte) 0 Constant inlined doplasma::ii#1 = ++(byte) 0 -Constant inlined doplasma::ii#5 = ++++(byte) 0 +Constant inlined doplasma::ii#51 = ++++++++++++++++++++++++++++++++++++++++++++++++(byte) 0 Constant inlined main::toD0181_$7#0 = >(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f Constant inlined main::toD0181_$3#0 = >(word)(const byte*) SCREEN1#0&(word) $3fff*(byte) 4 Constant inlined doplasma::$56 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 @@ -2383,20 +2461,20 @@ Constant inlined makecharset::c#0 = (byte) 0 Constant inlined doplasma::$54 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined doplasma::$51 = ++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined doplasma::$50 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 -Constant inlined doplasma::ii#25 = ++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#25 = ++++++++++++++++++++++(byte) 0 Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN1#0 -Constant inlined doplasma::ii#27 = ++++++++++++++++++++++++++(byte) 0 -Constant inlined doplasma::ii#29 = ++++++++++++++++++++++++++++(byte) 0 -Constant inlined doplasma::ii#21 = ++++++++++++++++++++(byte) 0 -Constant inlined doplasma::ii#23 = ++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#27 = ++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#29 = ++++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#21 = ++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#23 = ++++++++++++++++++++(byte) 0 Constant inlined doplasma::$9 = ++(byte) 0*(byte) $28 Constant inlined doplasma::$8 = (const byte*) SCREEN1#0 -Constant inlined doplasma::ii#35 = ++++++++++++++++++++++++++++++++++(byte) 0 -Constant inlined doplasma::ii#37 = ++++++++++++++++++++++++++++++++++++(byte) 0 -Constant inlined doplasma::ii#39 = ++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#35 = ++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#37 = ++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#39 = ++++++++++++++++++++++++++++++++++++(byte) 0 Constant inlined main::toD0181_$0#0 = (word)(const byte*) SCREEN1#0 -Constant inlined doplasma::ii#31 = ++++++++++++++++++++++++++++++(byte) 0 -Constant inlined doplasma::ii#33 = ++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#31 = ++++++++++++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#33 = ++++++++++++++++++++++++++++++(byte) 0 Constant inlined main::$2 = (const byte*) COLS#0+(word) $3e8 Constant inlined main::toD0181_$4#0 = (word)(const byte*) CHARSET#0 Constant inlined c2B#17 = (byte) 0 @@ -2412,12 +2490,12 @@ Constant inlined doplasma::$20 = (const byte*) SCREEN1#0+++++++++++++(byte) 0*(b Constant inlined c2A#17 = (byte) 0 Constant inlined doplasma::$22 = (const byte*) SCREEN1#0+++++++++++++++(byte) 0*(byte) $28 Constant inlined doplasma::$21 = ++++++++++++++(byte) 0*(byte) $28 -Constant inlined doplasma::ii#13 = ++++++++++++(byte) 0 -Constant inlined doplasma::ii#15 = ++++++++++++++(byte) 0 -Constant inlined doplasma::ii#17 = ++++++++++++++++(byte) 0 -Constant inlined doplasma::ii#19 = ++++++++++++++++++(byte) 0 +Constant inlined doplasma::ii#13 = ++++++++++(byte) 0 +Constant inlined doplasma::ii#15 = ++++++++++++(byte) 0 +Constant inlined doplasma::ii#17 = ++++++++++++++(byte) 0 +Constant inlined doplasma::ii#19 = ++++++++++++++++(byte) 0 Constant inlined main::toD0181_$1#0 = (word)(const byte*) SCREEN1#0&(word) $3fff -Constant inlined doplasma::ii#11 = ++++++++++(byte) 0 +Constant inlined doplasma::ii#11 = ++++++++(byte) 0 Constant inlined makecharset::ii#0 = (byte) 0 Constant inlined doplasma::$17 = ++++++++++(byte) 0*(byte) $28 Constant inlined makecharset::i#0 = (byte) 0 @@ -2563,8 +2641,15 @@ Simplifying constant integer increment ++$16 Simplifying constant integer increment ++$17 Successful SSA optimization Pass2ConstantSimplification Added new block during phi lifting main::@12(between main::@1 and main::@1) -Added new block during phi lifting makecharset::@27(between makecharset::@6 and makecharset::@19) -Added new block during phi lifting makecharset::@28(between makecharset::@25 and makecharset::@10) +Added new block during phi lifting doplasma::@25(between doplasma::@1 and doplasma::@2) +Added new block during phi lifting doplasma::@26(between doplasma::@7 and doplasma::@8) +Added new block during phi lifting doplasma::@27(between doplasma::@13 and doplasma::@14) +Added new block during phi lifting makecharset::@27(between makecharset::@1 and makecharset::@2) +Added new block during phi lifting makecharset::@28(between makecharset::@4 and makecharset::@5) +Added new block during phi lifting makecharset::@29(between makecharset::@7 and makecharset::@8) +Added new block during phi lifting makecharset::@30(between makecharset::@25 and makecharset::@10) +Added new block during phi lifting makecharset::@31(between makecharset::@6 and makecharset::@19) +Added new block during phi lifting memset::@10(between memset::@4 and memset::@5) Adding NOP phi() at start of @begin Adding NOP phi() at start of @16 Adding NOP phi() at start of @40 @@ -2578,8 +2663,9 @@ Adding NOP phi() at start of main::@10 Adding NOP phi() at start of main::toD0181 Adding NOP phi() at start of main::toD0181_@return Adding NOP phi() at start of main::@4 -Adding NOP phi() at start of doplasma::@16 +Adding NOP phi() at start of doplasma::@13_1 Adding NOP phi() at start of doplasma::@16_1 +Adding NOP phi() at start of doplasma::@16 Adding NOP phi() at start of doplasma::@16_2 Adding NOP phi() at start of doplasma::@16_3 Adding NOP phi() at start of doplasma::@16_4 @@ -2607,19 +2693,21 @@ Adding NOP phi() at start of doplasma::@16_25 Adding NOP phi() at start of makecharset Adding NOP phi() at start of makecharset::@23 Adding NOP phi() at start of makecharset::@24 +Adding NOP phi() at start of makecharset::@1_1 +Adding NOP phi() at start of makecharset::@4_1 +Adding NOP phi() at start of makecharset::@7_1 Adding NOP phi() at start of makecharset::@18 -Adding NOP phi() at start of makecharset::@5 -Adding NOP phi() at start of makecharset::@8 Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@4_1 Adding NOP phi() at start of memset::@1 CALL GRAPH Calls in [] to main:6 Calls in [main] to makecharset:17 doplasma:24 -Calls in [makecharset] to sid_rnd_init:147 print_cls:149 print_char:161 sid_rnd:178 -Calls in [print_cls] to memset:196 +Calls in [makecharset] to sid_rnd_init:148 print_cls:150 sid_rnd:160 print_char:179 +Calls in [print_cls] to memset:198 Created 21 initial phi equivalence classes Coalesced [25] c1A#32 ← c1A#3 @@ -2627,28 +2715,28 @@ Coalesced [26] c1B#32 ← c1B#3 Coalesced [27] c2A#32 ← c2A#3 Coalesced [28] c2B#32 ← c2B#3 Coalesced [29] main::col#3 ← main::col#1 -Coalesced [32] doplasma::c1a#4 ← doplasma::c1a#0 -Coalesced [33] doplasma::c1b#4 ← doplasma::c1b#0 -Coalesced [40] doplasma::c2a#4 ← doplasma::c2a#0 -Coalesced [41] doplasma::c2b#4 ← doplasma::c2b#0 -Coalesced [127] doplasma::i2#7 ← doplasma::i2#1 -Coalesced [133] doplasma::i1#4 ← doplasma::i1#1 -Coalesced [134] doplasma::c2a#5 ← doplasma::c2a#1 -Coalesced [135] doplasma::c2b#5 ← doplasma::c2b#1 -Coalesced [142] doplasma::i#4 ← doplasma::i#1 -Coalesced [143] doplasma::c1a#5 ← doplasma::c1a#1 -Coalesced [144] doplasma::c1b#5 ← doplasma::c1b#1 -Not coalescing [145] doplasma::yprev#4 ← doplasma::yval#0 -Coalesced [162] print_char_cursor#49 ← print_char_cursor#1 -Coalesced [165] makecharset::c#16 ← makecharset::c#1 -Coalesced [166] print_char_cursor#48 ← print_char_cursor#30 -Coalesced (already) [167] print_char_cursor#50 ← print_char_cursor#18 -Coalesced [176] makecharset::i#10 ← makecharset::i#1 -Coalesced [184] makecharset::b#9 ← makecharset::b#1 -Coalesced [187] makecharset::ii#7 ← makecharset::ii#1 -Coalesced [188] makecharset::b#8 ← makecharset::b#6 -Coalesced (already) [189] makecharset::b#10 ← makecharset::b#2 -Coalesced [207] memset::dst#4 ← memset::dst#1 +Coalesced [32] doplasma::c1a#7 ← doplasma::c1a#0 +Coalesced [33] doplasma::c1b#7 ← doplasma::c1b#0 +Coalesced [46] doplasma::c2a#7 ← doplasma::c2a#0 +Coalesced [47] doplasma::c2b#7 ← doplasma::c2b#0 +Coalesced [139] doplasma::i2#13 ← doplasma::i2#1 +Coalesced [140] doplasma::i1#6 ← doplasma::i1#1 +Coalesced [141] doplasma::c2a#6 ← doplasma::c2a#1 +Coalesced [142] doplasma::c2b#6 ← doplasma::c2b#1 +Coalesced [143] doplasma::i#6 ← doplasma::i#1 +Coalesced [144] doplasma::c1a#6 ← doplasma::c1a#1 +Coalesced [145] doplasma::c1b#6 ← doplasma::c1b#1 +Not coalescing [146] doplasma::yprev#6 ← doplasma::yprev#2 +Coalesced [166] makecharset::b#14 ← makecharset::b#1 +Coalesced [180] print_char_cursor#64 ← print_char_cursor#1 +Coalesced [185] makecharset::c#32 ← makecharset::c#1 +Coalesced [186] print_char_cursor#63 ← print_char_cursor#18 +Coalesced (already) [187] print_char_cursor#65 ← print_char_cursor#52 +Coalesced [188] makecharset::i#19 ← makecharset::i#1 +Coalesced [189] makecharset::ii#12 ← makecharset::ii#1 +Coalesced [190] makecharset::b#13 ← makecharset::b#2 +Coalesced (already) [191] makecharset::b#15 ← makecharset::b#10 +Coalesced [210] memset::dst#6 ← memset::dst#1 Coalesced down to 20 phi equivalence classes Culled Empty Block (label) @16 Culled Empty Block (label) @40 @@ -2659,8 +2747,11 @@ Culled Empty Block (label) main::@10 Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@11 Culled Empty Block (label) main::@12 -Culled Empty Block (label) doplasma::@16 +Culled Empty Block (label) doplasma::@1_1 +Culled Empty Block (label) doplasma::@7_1 +Culled Empty Block (label) doplasma::@13_1 Culled Empty Block (label) doplasma::@16_1 +Culled Empty Block (label) doplasma::@16 Culled Empty Block (label) doplasma::@16_2 Culled Empty Block (label) doplasma::@16_3 Culled Empty Block (label) doplasma::@16_4 @@ -2685,14 +2776,23 @@ Culled Empty Block (label) doplasma::@16_22 Culled Empty Block (label) doplasma::@16_23 Culled Empty Block (label) doplasma::@16_24 Culled Empty Block (label) doplasma::@16_25 +Culled Empty Block (label) doplasma::@27 +Culled Empty Block (label) doplasma::@26 Culled Empty Block (label) makecharset::@24 +Culled Empty Block (label) makecharset::@1_1 +Culled Empty Block (label) makecharset::@4_1 +Culled Empty Block (label) makecharset::@7_1 Culled Empty Block (label) makecharset::@26 Culled Empty Block (label) makecharset::@27 -Culled Empty Block (label) makecharset::@5 +Culled Empty Block (label) makecharset::@31 Culled Empty Block (label) makecharset::@28 +Culled Empty Block (label) makecharset::@29 +Culled Empty Block (label) makecharset::@30 Culled Empty Block (label) print_cls::@1 Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@4_1 Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@10 Renumbering block @45 to @1 Renumbering block memset::@4 to memset::@1 Renumbering block memset::@5 to memset::@2 @@ -2704,17 +2804,19 @@ Renumbering block doplasma::@13 to doplasma::@7 Renumbering block doplasma::@14 to doplasma::@8 Renumbering block doplasma::@17 to doplasma::@9 Renumbering block doplasma::@18 to doplasma::@10 +Renumbering block doplasma::@25 to doplasma::@11 Renumbering block makecharset::@4 to makecharset::@3 -Renumbering block makecharset::@6 to makecharset::@4 -Renumbering block makecharset::@7 to makecharset::@5 -Renumbering block makecharset::@8 to makecharset::@6 -Renumbering block makecharset::@9 to makecharset::@7 -Renumbering block makecharset::@10 to makecharset::@8 -Renumbering block makecharset::@13 to makecharset::@9 -Renumbering block makecharset::@18 to makecharset::@10 -Renumbering block makecharset::@19 to makecharset::@11 -Renumbering block makecharset::@23 to makecharset::@12 -Renumbering block makecharset::@25 to makecharset::@13 +Renumbering block makecharset::@5 to makecharset::@4 +Renumbering block makecharset::@6 to makecharset::@5 +Renumbering block makecharset::@7 to makecharset::@6 +Renumbering block makecharset::@8 to makecharset::@7 +Renumbering block makecharset::@9 to makecharset::@8 +Renumbering block makecharset::@10 to makecharset::@9 +Renumbering block makecharset::@13 to makecharset::@10 +Renumbering block makecharset::@18 to makecharset::@11 +Renumbering block makecharset::@19 to makecharset::@12 +Renumbering block makecharset::@23 to makecharset::@13 +Renumbering block makecharset::@25 to makecharset::@14 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -2722,9 +2824,8 @@ Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::toD0181 Adding NOP phi() at start of main::@4 Adding NOP phi() at start of makecharset -Adding NOP phi() at start of makecharset::@12 -Adding NOP phi() at start of makecharset::@10 -Adding NOP phi() at start of makecharset::@6 +Adding NOP phi() at start of makecharset::@13 +Adding NOP phi() at start of makecharset::@11 Adding NOP phi() at start of print_cls Adding NOP phi() at start of memset @@ -2772,264 +2873,267 @@ main::@4: scope:[main] from main::@3 doplasma: scope:[doplasma] from main::@4 [18] (byte) doplasma::c1a#0 ← (byte) c1A#1 [19] (byte) doplasma::c1b#0 ← (byte) c1B#1 + to:doplasma::@2 +doplasma::@2: scope:[doplasma] from doplasma doplasma::@11 + [20] (byte) doplasma::yprev#4 ← phi( doplasma::@11/(byte~) doplasma::yprev#6 doplasma/(byte) 0 ) + [20] (byte) doplasma::c1b#4 ← phi( doplasma::@11/(byte) doplasma::c1b#1 doplasma/(byte) doplasma::c1b#0 ) + [20] (byte) doplasma::c1a#4 ← phi( doplasma::@11/(byte) doplasma::c1a#1 doplasma/(byte) doplasma::c1a#0 ) + [20] (byte) doplasma::i#4 ← phi( doplasma::@11/(byte) doplasma::i#1 doplasma/(byte) 0 ) + [21] (byte) doplasma::yprev#2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) + [22] (byte~) doplasma::$2 ← (byte) doplasma::yprev#2 - (byte) doplasma::yprev#4 + [23] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#4) ← (byte~) doplasma::$2 + [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 + [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 + [26] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#4 to:doplasma::@1 -doplasma::@1: scope:[doplasma] from doplasma doplasma::@2 - [20] (byte) doplasma::yprev#2 ← phi( doplasma/(byte) 0 doplasma::@2/(byte~) doplasma::yprev#4 ) - [20] (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@2/(byte) doplasma::c1b#1 ) - [20] (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@2/(byte) doplasma::c1a#1 ) - [20] (byte) doplasma::i#2 ← phi( doplasma/(byte) 0 doplasma::@2/(byte) doplasma::i#1 ) - [21] if((byte) doplasma::i#2<(byte) $19) goto doplasma::@2 +doplasma::@1: scope:[doplasma] from doplasma::@2 + [27] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@11 to:doplasma::@3 doplasma::@3: scope:[doplasma] from doplasma::@1 - [22] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 - [23] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 - [24] (byte) doplasma::c2a#0 ← (byte) c2A#1 - [25] (byte) doplasma::c2b#0 ← (byte) c2B#1 + [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 + [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 + [30] (byte) doplasma::c2a#0 ← (byte) c2A#1 + [31] (byte) doplasma::c2b#0 ← (byte) c2B#1 + to:doplasma::@5 +doplasma::@5: scope:[doplasma] from doplasma::@3 doplasma::@4 + [32] (byte) doplasma::c2b#4 ← phi( doplasma::@4/(byte) doplasma::c2b#1 doplasma::@3/(byte) doplasma::c2b#0 ) + [32] (byte) doplasma::c2a#4 ← phi( doplasma::@4/(byte) doplasma::c2a#1 doplasma::@3/(byte) doplasma::c2a#0 ) + [32] (byte) doplasma::i1#4 ← phi( doplasma::@4/(byte) doplasma::i1#1 doplasma::@3/(byte) 0 ) + [33] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) + [34] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#4) ← (byte~) doplasma::$4 + [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 + [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 + [37] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#4 to:doplasma::@4 -doplasma::@4: scope:[doplasma] from doplasma::@3 doplasma::@5 - [26] (byte) doplasma::c2b#2 ← phi( doplasma::@3/(byte) doplasma::c2b#0 doplasma::@5/(byte) doplasma::c2b#1 ) - [26] (byte) doplasma::c2a#2 ← phi( doplasma::@3/(byte) doplasma::c2a#0 doplasma::@5/(byte) doplasma::c2a#1 ) - [26] (byte) doplasma::i1#2 ← phi( doplasma::@3/(byte) 0 doplasma::@5/(byte) doplasma::i1#1 ) - [27] if((byte) doplasma::i1#2<(byte) $28) goto doplasma::@5 +doplasma::@4: scope:[doplasma] from doplasma::@5 + [38] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@5 to:doplasma::@6 doplasma::@6: scope:[doplasma] from doplasma::@4 - [28] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2 - [29] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 - to:doplasma::@7 -doplasma::@7: scope:[doplasma] from doplasma::@10 doplasma::@6 - [30] (byte) doplasma::i2#2 ← phi( doplasma::@10/(byte) doplasma::i2#1 doplasma::@6/(byte) 0 ) - [31] if((byte) doplasma::i2#2<(byte) $28) goto doplasma::@8 - to:doplasma::@return -doplasma::@return: scope:[doplasma] from doplasma::@7 - [32] return - to:@return -doplasma::@8: scope:[doplasma] from doplasma::@7 - [33] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + [39] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2 + [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 + to:doplasma::@8 +doplasma::@8: scope:[doplasma] from doplasma::@6 doplasma::@7 + [41] (byte) doplasma::i2#11 ← phi( doplasma::@7/(byte) doplasma::i2#1 doplasma::@6/(byte) 0 ) + [42] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#11) to:doplasma::@9 doplasma::@9: scope:[doplasma] from doplasma::@8 - [34] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) - [35] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1 + [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) + [44] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#11) ← (byte) doplasma::val#1 to:doplasma::@17_1 doplasma::@17_1: scope:[doplasma] from doplasma::@9 - [36] (byte) doplasma::val#5 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) - [37] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#5 + [45] (byte) doplasma::val#7 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) + [46] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#7 to:doplasma::@17_2 doplasma::@17_2: scope:[doplasma] from doplasma::@17_1 - [38] (byte) doplasma::val#7 ← (byte) doplasma::val#5 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) - [39] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#7 + [47] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) + [48] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#10 to:doplasma::@17_3 doplasma::@17_3: scope:[doplasma] from doplasma::@17_2 - [40] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) - [41] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10 + [49] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) + [50] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#11 to:doplasma::@17_4 doplasma::@17_4: scope:[doplasma] from doplasma::@17_3 - [42] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) - [43] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#11 + [51] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) + [52] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#13 to:doplasma::@17_5 doplasma::@17_5: scope:[doplasma] from doplasma::@17_4 - [44] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) - [45] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#13 + [53] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) + [54] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#15 to:doplasma::@17_6 doplasma::@17_6: scope:[doplasma] from doplasma::@17_5 - [46] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) - [47] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#15 + [55] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) + [56] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#17 to:doplasma::@17_7 doplasma::@17_7: scope:[doplasma] from doplasma::@17_6 - [48] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) - [49] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#17 + [57] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) + [58] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#19 to:doplasma::@17_8 doplasma::@17_8: scope:[doplasma] from doplasma::@17_7 - [50] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) - [51] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#19 + [59] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) + [60] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#21 to:doplasma::@17_9 doplasma::@17_9: scope:[doplasma] from doplasma::@17_8 - [52] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) - [53] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#21 + [61] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) + [62] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#23 to:doplasma::@17_10 doplasma::@17_10: scope:[doplasma] from doplasma::@17_9 - [54] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) - [55] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#23 + [63] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) + [64] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#25 to:doplasma::@17_11 doplasma::@17_11: scope:[doplasma] from doplasma::@17_10 - [56] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) - [57] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#25 + [65] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) + [66] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#27 to:doplasma::@17_12 doplasma::@17_12: scope:[doplasma] from doplasma::@17_11 - [58] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) - [59] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#27 + [67] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) + [68] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#29 to:doplasma::@17_13 doplasma::@17_13: scope:[doplasma] from doplasma::@17_12 - [60] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) - [61] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#29 + [69] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) + [70] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#31 to:doplasma::@17_14 doplasma::@17_14: scope:[doplasma] from doplasma::@17_13 - [62] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) - [63] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#31 + [71] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) + [72] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#33 to:doplasma::@17_15 doplasma::@17_15: scope:[doplasma] from doplasma::@17_14 - [64] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) - [65] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#33 + [73] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) + [74] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#35 to:doplasma::@17_16 doplasma::@17_16: scope:[doplasma] from doplasma::@17_15 - [66] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) - [67] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#35 + [75] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) + [76] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#37 to:doplasma::@17_17 doplasma::@17_17: scope:[doplasma] from doplasma::@17_16 - [68] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) - [69] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#37 + [77] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) + [78] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#39 to:doplasma::@17_18 doplasma::@17_18: scope:[doplasma] from doplasma::@17_17 - [70] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) - [71] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#39 + [79] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) + [80] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#41 to:doplasma::@17_19 doplasma::@17_19: scope:[doplasma] from doplasma::@17_18 - [72] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) - [73] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#41 + [81] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) + [82] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#43 to:doplasma::@17_20 doplasma::@17_20: scope:[doplasma] from doplasma::@17_19 - [74] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) - [75] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#43 + [83] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) + [84] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#45 to:doplasma::@17_21 doplasma::@17_21: scope:[doplasma] from doplasma::@17_20 - [76] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) - [77] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#45 + [85] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) + [86] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#47 to:doplasma::@17_22 doplasma::@17_22: scope:[doplasma] from doplasma::@17_21 - [78] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) - [79] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#47 + [87] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) + [88] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#49 to:doplasma::@17_23 doplasma::@17_23: scope:[doplasma] from doplasma::@17_22 - [80] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) - [81] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#49 + [89] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) + [90] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#51 to:doplasma::@17_24 doplasma::@17_24: scope:[doplasma] from doplasma::@17_23 - [82] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) - [83] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#51 + [91] (byte) doplasma::val#53 ← (byte) doplasma::val#51 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) + [92] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#53 to:doplasma::@10 doplasma::@10: scope:[doplasma] from doplasma::@17_24 - [84] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 + [93] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#11 to:doplasma::@7 -doplasma::@5: scope:[doplasma] from doplasma::@4 - [85] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) - [86] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$4 - [87] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 - [88] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 - [89] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 - to:doplasma::@4 -doplasma::@2: scope:[doplasma] from doplasma::@1 - [90] (byte) doplasma::yval#0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) - [91] (byte~) doplasma::$2 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2 - [92] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$2 - [93] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 - [94] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 - [95] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 - [96] (byte~) doplasma::yprev#4 ← (byte) doplasma::yval#0 - to:doplasma::@1 +doplasma::@7: scope:[doplasma] from doplasma::@10 + [94] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@8 + to:doplasma::@return +doplasma::@return: scope:[doplasma] from doplasma::@7 + [95] return + to:@return +doplasma::@11: scope:[doplasma] from doplasma::@1 + [96] (byte~) doplasma::yprev#6 ← (byte) doplasma::yprev#2 + to:doplasma::@2 makecharset: scope:[makecharset] from main::@2 [97] phi() [98] call sid_rnd_init - to:makecharset::@12 -makecharset::@12: scope:[makecharset] from makecharset + to:makecharset::@13 +makecharset::@13: scope:[makecharset] from makecharset [99] phi() [100] call print_cls + to:makecharset::@2 +makecharset::@2: scope:[makecharset] from makecharset::@1 makecharset::@13 + [101] (byte*) print_char_cursor#52 ← phi( makecharset::@1/(byte*) print_char_cursor#18 makecharset::@13/(const byte*) print_line_cursor#0 ) + [101] (word) makecharset::c#16 ← phi( makecharset::@1/(word) makecharset::c#1 makecharset::@13/(byte) 0 ) + [102] (byte~) makecharset::$3 ← < (word) makecharset::c#16 + [103] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) + to:makecharset::@4 +makecharset::@4: scope:[makecharset] from makecharset::@2 makecharset::@3 + [104] (byte) makecharset::i#13 ← phi( makecharset::@3/(byte) makecharset::i#1 makecharset::@2/(byte) 0 ) + to:makecharset::@7 +makecharset::@7: scope:[makecharset] from makecharset::@4 makecharset::@6 + [105] (byte) makecharset::b#10 ← phi( makecharset::@6/(byte) makecharset::b#2 makecharset::@4/(byte) 0 ) + [105] (byte) makecharset::ii#10 ← phi( makecharset::@6/(byte) makecharset::ii#1 makecharset::@4/(byte) 0 ) + [106] call sid_rnd + [107] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + to:makecharset::@14 +makecharset::@14: scope:[makecharset] from makecharset::@7 + [108] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 + [109] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff + [110] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@9 + to:makecharset::@10 +makecharset::@10: scope:[makecharset] from makecharset::@14 + [111] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) + to:makecharset::@9 +makecharset::@9: scope:[makecharset] from makecharset::@10 makecharset::@14 + [112] (byte) makecharset::b#2 ← phi( makecharset::@10/(byte) makecharset::b#1 makecharset::@14/(byte) makecharset::b#10 ) + [113] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#10 + to:makecharset::@6 +makecharset::@6: scope:[makecharset] from makecharset::@9 + [114] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@7 + to:makecharset::@8 +makecharset::@8: scope:[makecharset] from makecharset::@6 + [115] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 + [116] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 + [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 + [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 + [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 + to:makecharset::@3 +makecharset::@3: scope:[makecharset] from makecharset::@8 + [120] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@4 + to:makecharset::@5 +makecharset::@5: scope:[makecharset] from makecharset::@3 + [121] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 + [122] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@12 + to:makecharset::@11 +makecharset::@11: scope:[makecharset] from makecharset::@5 + [123] phi() + [124] call print_char + to:makecharset::@12 +makecharset::@12: scope:[makecharset] from makecharset::@11 makecharset::@5 + [125] (byte*) print_char_cursor#18 ← phi( makecharset::@11/(byte*) print_char_cursor#1 makecharset::@5/(byte*) print_char_cursor#52 ) + [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#16 to:makecharset::@1 -makecharset::@1: scope:[makecharset] from makecharset::@11 makecharset::@12 - [101] (byte*) print_char_cursor#18 ← phi( makecharset::@11/(byte*) print_char_cursor#30 makecharset::@12/(const byte*) print_line_cursor#0 ) - [101] (word) makecharset::c#2 ← phi( makecharset::@11/(word) makecharset::c#1 makecharset::@12/(byte) 0 ) - [102] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 +makecharset::@1: scope:[makecharset] from makecharset::@12 + [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 to:makecharset::@return makecharset::@return: scope:[makecharset] from makecharset::@1 - [103] return + [128] return to:@return -makecharset::@2: scope:[makecharset] from makecharset::@1 - [104] (byte~) makecharset::$3 ← < (word) makecharset::c#2 - [105] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) - to:makecharset::@3 -makecharset::@3: scope:[makecharset] from makecharset::@2 makecharset::@7 - [106] (byte) makecharset::i#2 ← phi( makecharset::@2/(byte) 0 makecharset::@7/(byte) makecharset::i#1 ) - [107] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@5 - to:makecharset::@4 -makecharset::@4: scope:[makecharset] from makecharset::@3 - [108] (byte~) makecharset::$12 ← (word) makecharset::c#2 & (byte) 7 - [109] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@11 - to:makecharset::@10 -makecharset::@10: scope:[makecharset] from makecharset::@4 - [110] phi() - [111] call print_char - to:makecharset::@11 -makecharset::@11: scope:[makecharset] from makecharset::@10 makecharset::@4 - [112] (byte*) print_char_cursor#30 ← phi( makecharset::@10/(byte*) print_char_cursor#1 makecharset::@4/(byte*) print_char_cursor#18 ) - [113] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 - to:makecharset::@1 -makecharset::@5: scope:[makecharset] from makecharset::@3 makecharset::@8 - [114] (byte) makecharset::b#2 ← phi( makecharset::@8/(byte) makecharset::b#6 makecharset::@3/(byte) 0 ) - [114] (byte) makecharset::ii#2 ← phi( makecharset::@8/(byte) makecharset::ii#1 makecharset::@3/(byte) 0 ) - [115] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@6 - to:makecharset::@7 -makecharset::@7: scope:[makecharset] from makecharset::@5 - [116] (word~) makecharset::$10 ← (word) makecharset::c#2 << (byte) 3 - [117] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#2 - [118] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 - [119] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 - [120] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 - to:makecharset::@3 -makecharset::@6: scope:[makecharset] from makecharset::@5 - [121] phi() - [122] call sid_rnd - [123] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - to:makecharset::@13 -makecharset::@13: scope:[makecharset] from makecharset::@6 - [124] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 - [125] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff - [126] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@8 - to:makecharset::@9 -makecharset::@9: scope:[makecharset] from makecharset::@13 - [127] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) - to:makecharset::@8 -makecharset::@8: scope:[makecharset] from makecharset::@13 makecharset::@9 - [128] (byte) makecharset::b#6 ← phi( makecharset::@9/(byte) makecharset::b#1 makecharset::@13/(byte) makecharset::b#2 ) - [129] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 - to:makecharset::@5 -sid_rnd: scope:[sid_rnd] from makecharset::@6 - [130] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) - to:sid_rnd::@return -sid_rnd::@return: scope:[sid_rnd] from sid_rnd - [131] return - to:@return -print_char: scope:[print_char] from makecharset::@10 - [132] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 - [133] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 +print_char: scope:[print_char] from makecharset::@11 + [129] *((byte*) print_char_cursor#52) ← (const byte) print_char::ch#0 + [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#52 to:print_char::@return print_char::@return: scope:[print_char] from print_char - [134] return + [131] return to:@return -print_cls: scope:[print_cls] from makecharset::@12 - [135] phi() - [136] call memset +sid_rnd: scope:[sid_rnd] from makecharset::@7 + [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) + to:sid_rnd::@return +sid_rnd::@return: scope:[sid_rnd] from sid_rnd + [133] return + to:@return +print_cls: scope:[print_cls] from makecharset::@13 + [134] phi() + [135] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [137] return + [136] return to:@return memset: scope:[memset] from print_cls - [138] phi() + [137] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [138] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [139] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [139] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [141] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [141] return + [142] return to:@return -memset::@2: scope:[memset] from memset::@1 - [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [143] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 sid_rnd_init: scope:[sid_rnd_init] from makecharset - [144] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff - [145] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 + [143] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff + [144] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - [146] return + [145] return to:@return @@ -3064,29 +3168,29 @@ VARIABLE REGISTER WEIGHTS (byte~) doplasma::$4 202.0 (byte) doplasma::c1a (byte) doplasma::c1a#0 2.0 -(byte) doplasma::c1a#1 50.5 -(byte) doplasma::c1a#2 61.0 +(byte) doplasma::c1a#1 40.4 +(byte) doplasma::c1a#4 76.25 (byte) doplasma::c1b (byte) doplasma::c1b#0 4.0 -(byte) doplasma::c1b#1 67.33333333333333 -(byte) doplasma::c1b#2 50.83333333333333 +(byte) doplasma::c1b#1 50.5 +(byte) doplasma::c1b#4 61.0 (byte) doplasma::c2a (byte) doplasma::c2a#0 2.0 -(byte) doplasma::c2a#1 67.33333333333333 -(byte) doplasma::c2a#2 76.25 +(byte) doplasma::c2a#1 50.5 +(byte) doplasma::c2a#4 101.66666666666666 (byte) doplasma::c2b (byte) doplasma::c2b#0 4.0 -(byte) doplasma::c2b#1 101.0 -(byte) doplasma::c2b#2 61.0 +(byte) doplasma::c2b#1 67.33333333333333 +(byte) doplasma::c2b#4 76.25 (byte) doplasma::i (byte) doplasma::i#1 101.0 -(byte) doplasma::i#2 57.714285714285715 +(byte) doplasma::i#4 50.5 (byte) doplasma::i1 -(byte) doplasma::i1#1 202.0 -(byte) doplasma::i1#2 67.33333333333333 +(byte) doplasma::i1#1 151.5 +(byte) doplasma::i1#4 60.599999999999994 (byte) doplasma::i2 -(byte) doplasma::i2#1 202.0 -(byte) doplasma::i2#2 55.26415094339627 +(byte) doplasma::i2#1 151.5 +(byte) doplasma::i2#11 54.3846153846154 (byte) doplasma::ii (byte*) doplasma::screen (byte) doplasma::val @@ -3113,16 +3217,16 @@ VARIABLE REGISTER WEIGHTS (byte) doplasma::val#45 151.5 (byte) doplasma::val#47 151.5 (byte) doplasma::val#49 151.5 -(byte) doplasma::val#5 151.5 -(byte) doplasma::val#51 202.0 +(byte) doplasma::val#51 151.5 +(byte) doplasma::val#53 202.0 (byte) doplasma::val#7 151.5 (byte[$28]) doplasma::xbuf (byte[$19]) doplasma::ybuf (byte) doplasma::yprev -(byte) doplasma::yprev#2 67.33333333333333 -(byte~) doplasma::yprev#4 202.0 +(byte) doplasma::yprev#2 43.285714285714285 +(byte) doplasma::yprev#4 101.0 +(byte~) doplasma::yprev#6 202.0 (byte) doplasma::yval -(byte) doplasma::yval#0 50.5 (void()) main() (byte*) main::col (byte*) main::col#1 16.5 @@ -3149,26 +3253,26 @@ VARIABLE REGISTER WEIGHTS (byte~) makecharset::$7 2002.0 (byte) makecharset::b (byte) makecharset::b#1 2002.0 -(byte) makecharset::b#2 282.1818181818182 -(byte) makecharset::b#6 1501.5 +(byte) makecharset::b#10 500.5 +(byte) makecharset::b#2 517.3333333333334 (byte[8]) makecharset::bittab (word) makecharset::c -(word) makecharset::c#1 22.0 -(word) makecharset::c#2 5.777777777777778 +(word) makecharset::c#1 16.5 +(word) makecharset::c#16 5.800000000000001 (byte*) makecharset::charset (byte) makecharset::i -(byte) makecharset::i#1 202.0 -(byte) makecharset::i#2 23.764705882352942 +(byte) makecharset::i#1 151.5 +(byte) makecharset::i#13 20.2 (byte) makecharset::ii -(byte) makecharset::ii#1 2002.0 -(byte) makecharset::ii#2 400.4 +(byte) makecharset::ii#1 1501.5 +(byte) makecharset::ii#10 375.375 (byte) makecharset::s -(byte) makecharset::s#0 53.26315789473684 +(byte) makecharset::s#0 56.22222222222223 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst -(byte*) memset::dst#1 22.0 -(byte*) memset::dst#2 14.666666666666666 +(byte*) memset::dst#1 16.5 +(byte*) memset::dst#4 16.5 (byte*) memset::end (word) memset::num (void*) memset::return @@ -3177,8 +3281,8 @@ VARIABLE REGISTER WEIGHTS (byte) print_char::ch (byte*) print_char_cursor (byte*) print_char_cursor#1 4.333333333333333 -(byte*) print_char_cursor#18 1.0 -(byte*) print_char_cursor#30 16.5 +(byte*) print_char_cursor#18 11.0 +(byte*) print_char_cursor#52 1.0833333333333333 (void()) print_cls() (byte*) print_line_cursor (byte*) print_screen @@ -3194,23 +3298,25 @@ Initial phi equivalence classes [ c1B#1 c1B#3 ] [ c2A#1 c2A#3 ] [ c2B#1 c2B#3 ] -[ doplasma::i#2 doplasma::i#1 ] -[ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -[ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -[ doplasma::yprev#2 doplasma::yprev#4 ] -[ doplasma::i1#2 doplasma::i1#1 ] -[ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -[ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -[ doplasma::i2#2 doplasma::i2#1 ] -[ makecharset::c#2 makecharset::c#1 ] -[ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] -[ makecharset::i#2 makecharset::i#1 ] -[ makecharset::ii#2 makecharset::ii#1 ] -[ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -[ memset::dst#2 memset::dst#1 ] +[ doplasma::i#4 doplasma::i#1 ] +[ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +[ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +[ doplasma::yprev#4 doplasma::yprev#6 ] +[ doplasma::i1#4 doplasma::i1#1 ] +[ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +[ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +[ doplasma::i2#11 doplasma::i2#1 ] +[ makecharset::c#16 makecharset::c#1 ] +[ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] +[ makecharset::i#13 makecharset::i#1 ] +[ makecharset::ii#10 makecharset::ii#1 ] +[ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] +[ memset::dst#4 memset::dst#1 ] +Added variable doplasma::yprev#2 to zero page equivalence class [ doplasma::yprev#2 ] +Added variable doplasma::$2 to zero page equivalence class [ doplasma::$2 ] +Added variable doplasma::$4 to zero page equivalence class [ doplasma::$4 ] Added variable doplasma::val#0 to zero page equivalence class [ doplasma::val#0 ] Added variable doplasma::val#1 to zero page equivalence class [ doplasma::val#1 ] -Added variable doplasma::val#5 to zero page equivalence class [ doplasma::val#5 ] Added variable doplasma::val#7 to zero page equivalence class [ doplasma::val#7 ] Added variable doplasma::val#10 to zero page equivalence class [ doplasma::val#10 ] Added variable doplasma::val#11 to zero page equivalence class [ doplasma::val#11 ] @@ -3234,18 +3340,16 @@ Added variable doplasma::val#45 to zero page equivalence class [ doplasma::val#4 Added variable doplasma::val#47 to zero page equivalence class [ doplasma::val#47 ] Added variable doplasma::val#49 to zero page equivalence class [ doplasma::val#49 ] Added variable doplasma::val#51 to zero page equivalence class [ doplasma::val#51 ] -Added variable doplasma::$4 to zero page equivalence class [ doplasma::$4 ] -Added variable doplasma::yval#0 to zero page equivalence class [ doplasma::yval#0 ] -Added variable doplasma::$2 to zero page equivalence class [ doplasma::$2 ] +Added variable doplasma::val#53 to zero page equivalence class [ doplasma::val#53 ] Added variable makecharset::$3 to zero page equivalence class [ makecharset::$3 ] Added variable makecharset::s#0 to zero page equivalence class [ makecharset::s#0 ] -Added variable makecharset::$12 to zero page equivalence class [ makecharset::$12 ] -Added variable makecharset::$10 to zero page equivalence class [ makecharset::$10 ] -Added variable makecharset::$11 to zero page equivalence class [ makecharset::$11 ] -Added variable makecharset::$16 to zero page equivalence class [ makecharset::$16 ] Added variable sid_rnd::return#2 to zero page equivalence class [ sid_rnd::return#2 ] Added variable makecharset::$6 to zero page equivalence class [ makecharset::$6 ] Added variable makecharset::$7 to zero page equivalence class [ makecharset::$7 ] +Added variable makecharset::$10 to zero page equivalence class [ makecharset::$10 ] +Added variable makecharset::$11 to zero page equivalence class [ makecharset::$11 ] +Added variable makecharset::$16 to zero page equivalence class [ makecharset::$16 ] +Added variable makecharset::$12 to zero page equivalence class [ makecharset::$12 ] Added variable sid_rnd::return#0 to zero page equivalence class [ sid_rnd::return#0 ] Complete equivalence classes [ main::col#2 main::col#1 ] @@ -3253,23 +3357,25 @@ Complete equivalence classes [ c1B#1 c1B#3 ] [ c2A#1 c2A#3 ] [ c2B#1 c2B#3 ] -[ doplasma::i#2 doplasma::i#1 ] -[ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -[ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -[ doplasma::yprev#2 doplasma::yprev#4 ] -[ doplasma::i1#2 doplasma::i1#1 ] -[ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -[ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -[ doplasma::i2#2 doplasma::i2#1 ] -[ makecharset::c#2 makecharset::c#1 ] -[ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] -[ makecharset::i#2 makecharset::i#1 ] -[ makecharset::ii#2 makecharset::ii#1 ] -[ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -[ memset::dst#2 memset::dst#1 ] +[ doplasma::i#4 doplasma::i#1 ] +[ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +[ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +[ doplasma::yprev#4 doplasma::yprev#6 ] +[ doplasma::i1#4 doplasma::i1#1 ] +[ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +[ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +[ doplasma::i2#11 doplasma::i2#1 ] +[ makecharset::c#16 makecharset::c#1 ] +[ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] +[ makecharset::i#13 makecharset::i#1 ] +[ makecharset::ii#10 makecharset::ii#1 ] +[ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] +[ memset::dst#4 memset::dst#1 ] +[ doplasma::yprev#2 ] +[ doplasma::$2 ] +[ doplasma::$4 ] [ doplasma::val#0 ] [ doplasma::val#1 ] -[ doplasma::val#5 ] [ doplasma::val#7 ] [ doplasma::val#10 ] [ doplasma::val#11 ] @@ -3293,76 +3399,74 @@ Complete equivalence classes [ doplasma::val#47 ] [ doplasma::val#49 ] [ doplasma::val#51 ] -[ doplasma::$4 ] -[ doplasma::yval#0 ] -[ doplasma::$2 ] +[ doplasma::val#53 ] [ makecharset::$3 ] [ makecharset::s#0 ] -[ makecharset::$12 ] -[ makecharset::$10 ] -[ makecharset::$11 ] -[ makecharset::$16 ] [ sid_rnd::return#2 ] [ makecharset::$6 ] [ makecharset::$7 ] +[ makecharset::$10 ] +[ makecharset::$11 ] +[ makecharset::$16 ] +[ makecharset::$12 ] [ sid_rnd::return#0 ] Allocated zp ZP_WORD:2 [ main::col#2 main::col#1 ] Allocated zp ZP_BYTE:4 [ c1A#1 c1A#3 ] Allocated zp ZP_BYTE:5 [ c1B#1 c1B#3 ] Allocated zp ZP_BYTE:6 [ c2A#1 c2A#3 ] Allocated zp ZP_BYTE:7 [ c2B#1 c2B#3 ] -Allocated zp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] -Allocated zp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -Allocated zp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -Allocated zp ZP_BYTE:11 [ doplasma::yprev#2 doplasma::yprev#4 ] -Allocated zp ZP_BYTE:12 [ doplasma::i1#2 doplasma::i1#1 ] -Allocated zp ZP_BYTE:13 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -Allocated zp ZP_BYTE:14 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -Allocated zp ZP_BYTE:15 [ doplasma::i2#2 doplasma::i2#1 ] -Allocated zp ZP_WORD:16 [ makecharset::c#2 makecharset::c#1 ] -Allocated zp ZP_WORD:18 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] -Allocated zp ZP_BYTE:20 [ makecharset::i#2 makecharset::i#1 ] -Allocated zp ZP_BYTE:21 [ makecharset::ii#2 makecharset::ii#1 ] -Allocated zp ZP_BYTE:22 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -Allocated zp ZP_WORD:23 [ memset::dst#2 memset::dst#1 ] -Allocated zp ZP_BYTE:25 [ doplasma::val#0 ] -Allocated zp ZP_BYTE:26 [ doplasma::val#1 ] -Allocated zp ZP_BYTE:27 [ doplasma::val#5 ] -Allocated zp ZP_BYTE:28 [ doplasma::val#7 ] -Allocated zp ZP_BYTE:29 [ doplasma::val#10 ] -Allocated zp ZP_BYTE:30 [ doplasma::val#11 ] -Allocated zp ZP_BYTE:31 [ doplasma::val#13 ] -Allocated zp ZP_BYTE:32 [ doplasma::val#15 ] -Allocated zp ZP_BYTE:33 [ doplasma::val#17 ] -Allocated zp ZP_BYTE:34 [ doplasma::val#19 ] -Allocated zp ZP_BYTE:35 [ doplasma::val#21 ] -Allocated zp ZP_BYTE:36 [ doplasma::val#23 ] -Allocated zp ZP_BYTE:37 [ doplasma::val#25 ] -Allocated zp ZP_BYTE:38 [ doplasma::val#27 ] -Allocated zp ZP_BYTE:39 [ doplasma::val#29 ] -Allocated zp ZP_BYTE:40 [ doplasma::val#31 ] -Allocated zp ZP_BYTE:41 [ doplasma::val#33 ] -Allocated zp ZP_BYTE:42 [ doplasma::val#35 ] -Allocated zp ZP_BYTE:43 [ doplasma::val#37 ] -Allocated zp ZP_BYTE:44 [ doplasma::val#39 ] -Allocated zp ZP_BYTE:45 [ doplasma::val#41 ] -Allocated zp ZP_BYTE:46 [ doplasma::val#43 ] -Allocated zp ZP_BYTE:47 [ doplasma::val#45 ] -Allocated zp ZP_BYTE:48 [ doplasma::val#47 ] -Allocated zp ZP_BYTE:49 [ doplasma::val#49 ] -Allocated zp ZP_BYTE:50 [ doplasma::val#51 ] -Allocated zp ZP_BYTE:51 [ doplasma::$4 ] -Allocated zp ZP_BYTE:52 [ doplasma::yval#0 ] -Allocated zp ZP_BYTE:53 [ doplasma::$2 ] +Allocated zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] +Allocated zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +Allocated zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +Allocated zp ZP_BYTE:11 [ doplasma::yprev#4 doplasma::yprev#6 ] +Allocated zp ZP_BYTE:12 [ doplasma::i1#4 doplasma::i1#1 ] +Allocated zp ZP_BYTE:13 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +Allocated zp ZP_BYTE:14 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +Allocated zp ZP_BYTE:15 [ doplasma::i2#11 doplasma::i2#1 ] +Allocated zp ZP_WORD:16 [ makecharset::c#16 makecharset::c#1 ] +Allocated zp ZP_WORD:18 [ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] +Allocated zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] +Allocated zp ZP_BYTE:21 [ makecharset::ii#10 makecharset::ii#1 ] +Allocated zp ZP_BYTE:22 [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] +Allocated zp ZP_WORD:23 [ memset::dst#4 memset::dst#1 ] +Allocated zp ZP_BYTE:25 [ doplasma::yprev#2 ] +Allocated zp ZP_BYTE:26 [ doplasma::$2 ] +Allocated zp ZP_BYTE:27 [ doplasma::$4 ] +Allocated zp ZP_BYTE:28 [ doplasma::val#0 ] +Allocated zp ZP_BYTE:29 [ doplasma::val#1 ] +Allocated zp ZP_BYTE:30 [ doplasma::val#7 ] +Allocated zp ZP_BYTE:31 [ doplasma::val#10 ] +Allocated zp ZP_BYTE:32 [ doplasma::val#11 ] +Allocated zp ZP_BYTE:33 [ doplasma::val#13 ] +Allocated zp ZP_BYTE:34 [ doplasma::val#15 ] +Allocated zp ZP_BYTE:35 [ doplasma::val#17 ] +Allocated zp ZP_BYTE:36 [ doplasma::val#19 ] +Allocated zp ZP_BYTE:37 [ doplasma::val#21 ] +Allocated zp ZP_BYTE:38 [ doplasma::val#23 ] +Allocated zp ZP_BYTE:39 [ doplasma::val#25 ] +Allocated zp ZP_BYTE:40 [ doplasma::val#27 ] +Allocated zp ZP_BYTE:41 [ doplasma::val#29 ] +Allocated zp ZP_BYTE:42 [ doplasma::val#31 ] +Allocated zp ZP_BYTE:43 [ doplasma::val#33 ] +Allocated zp ZP_BYTE:44 [ doplasma::val#35 ] +Allocated zp ZP_BYTE:45 [ doplasma::val#37 ] +Allocated zp ZP_BYTE:46 [ doplasma::val#39 ] +Allocated zp ZP_BYTE:47 [ doplasma::val#41 ] +Allocated zp ZP_BYTE:48 [ doplasma::val#43 ] +Allocated zp ZP_BYTE:49 [ doplasma::val#45 ] +Allocated zp ZP_BYTE:50 [ doplasma::val#47 ] +Allocated zp ZP_BYTE:51 [ doplasma::val#49 ] +Allocated zp ZP_BYTE:52 [ doplasma::val#51 ] +Allocated zp ZP_BYTE:53 [ doplasma::val#53 ] Allocated zp ZP_BYTE:54 [ makecharset::$3 ] Allocated zp ZP_BYTE:55 [ makecharset::s#0 ] -Allocated zp ZP_BYTE:56 [ makecharset::$12 ] -Allocated zp ZP_WORD:57 [ makecharset::$10 ] -Allocated zp ZP_WORD:59 [ makecharset::$11 ] -Allocated zp ZP_WORD:61 [ makecharset::$16 ] -Allocated zp ZP_BYTE:63 [ sid_rnd::return#2 ] -Allocated zp ZP_BYTE:64 [ makecharset::$6 ] -Allocated zp ZP_BYTE:65 [ makecharset::$7 ] +Allocated zp ZP_BYTE:56 [ sid_rnd::return#2 ] +Allocated zp ZP_BYTE:57 [ makecharset::$6 ] +Allocated zp ZP_BYTE:58 [ makecharset::$7 ] +Allocated zp ZP_WORD:59 [ makecharset::$10 ] +Allocated zp ZP_WORD:61 [ makecharset::$11 ] +Allocated zp ZP_WORD:63 [ makecharset::$16 ] +Allocated zp ZP_BYTE:65 [ makecharset::$12 ] Allocated zp ZP_BYTE:66 [ sid_rnd::return#0 ] INITIAL ASM @@ -3512,130 +3616,183 @@ main: { // doplasma // Render plasma to the passed screen doplasma: { - .label _2 = $35 - .label _4 = $33 + .label _2 = $1a + .label _4 = $1b .label c1a = 9 .label c1b = $a - .label yval = $34 .label i = 8 .label c2a = $d .label c2b = $e .label i1 = $c - .label val = $19 - .label val_1 = $1a + .label val = $1c + .label val_1 = $1d .label i2 = $f - .label yprev = $b - .label val_5 = $1b - .label val_7 = $1c - .label val_10 = $1d - .label val_11 = $1e - .label val_13 = $1f - .label val_15 = $20 - .label val_17 = $21 - .label val_19 = $22 - .label val_21 = $23 - .label val_23 = $24 - .label val_25 = $25 - .label val_27 = $26 - .label val_29 = $27 - .label val_31 = $28 - .label val_33 = $29 - .label val_35 = $2a - .label val_37 = $2b - .label val_39 = $2c - .label val_41 = $2d - .label val_43 = $2e - .label val_45 = $2f - .label val_47 = $30 - .label val_49 = $31 - .label val_51 = $32 + .label yprev = $19 + .label yprev_4 = $b + .label val_7 = $1e + .label val_10 = $1f + .label val_11 = $20 + .label val_13 = $21 + .label val_15 = $22 + .label val_17 = $23 + .label val_19 = $24 + .label val_21 = $25 + .label val_23 = $26 + .label val_25 = $27 + .label val_27 = $28 + .label val_29 = $29 + .label val_31 = $2a + .label val_33 = $2b + .label val_35 = $2c + .label val_37 = $2d + .label val_39 = $2e + .label val_41 = $2f + .label val_43 = $30 + .label val_45 = $31 + .label val_47 = $32 + .label val_49 = $33 + .label val_51 = $34 + .label val_53 = $35 + .label yprev_6 = $b // [18] (byte) doplasma::c1a#0 ← (byte) c1A#1 -- vbuz1=vbuz2 lda c1A sta c1a // [19] (byte) doplasma::c1b#0 ← (byte) c1B#1 -- vbuz1=vbuz2 lda c1B sta c1b - // [20] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1] - b1_from_doplasma: - // [20] phi (byte) doplasma::yprev#2 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 + // [20] phi from doplasma to doplasma::@2 [phi:doplasma->doplasma::@2] + b2_from_doplasma: + // [20] phi (byte) doplasma::yprev#4 = (byte) 0 [phi:doplasma->doplasma::@2#0] -- vbuz1=vbuc1 lda #0 - sta yprev - // [20] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#1] -- register_copy - // [20] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#2] -- register_copy - // [20] phi (byte) doplasma::i#2 = (byte) 0 [phi:doplasma->doplasma::@1#3] -- vbuz1=vbuc1 + sta yprev_4 + // [20] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@2#1] -- register_copy + // [20] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@2#2] -- register_copy + // [20] phi (byte) doplasma::i#4 = (byte) 0 [phi:doplasma->doplasma::@2#3] -- vbuz1=vbuc1 lda #0 sta i + jmp b2 + // doplasma::@2 + b2: + // [21] (byte) doplasma::yprev#2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 + ldy c1a + lda SINTABLE,y + ldy c1b + clc + adc SINTABLE,y + sta yprev + // [22] (byte~) doplasma::$2 ← (byte) doplasma::yprev#2 - (byte) doplasma::yprev#4 -- vbuz1=vbuz2_minus_vbuz3 + lda yprev + sec + sbc yprev_4 + sta _2 + // [23] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#4) ← (byte~) doplasma::$2 -- pbuc1_derefidx_vbuz1=vbuz2 + lda _2 + ldy i + sta ybuf,y + // [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 + lax c1a + axs #-[4] + stx c1a + // [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 + lax c1b + axs #-[9] + stx c1b + // [26] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#4 -- vbuz1=_inc_vbuz1 + inc i jmp b1 // Calculate ybuff as a bunch of differences // doplasma::@1 b1: - // [21] if((byte) doplasma::i#2<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 + // [27] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@11 -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$19 - bcc b2 + bcc b11 jmp b3 // doplasma::@3 b3: - // [22] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax c1A axs #-[3] stx c1A - // [23] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 + // [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 lax c1B axs #5 stx c1B - // [24] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 + // [30] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 lda c2A sta c2a - // [25] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 + // [31] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 lda c2B sta c2b - // [26] phi from doplasma::@3 to doplasma::@4 [phi:doplasma::@3->doplasma::@4] - b4_from_b3: - // [26] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@4#0] -- register_copy - // [26] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@4#1] -- register_copy - // [26] phi (byte) doplasma::i1#2 = (byte) 0 [phi:doplasma::@3->doplasma::@4#2] -- vbuz1=vbuc1 + // [32] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5] + b5_from_b3: + // [32] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@5#0] -- register_copy + // [32] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@5#1] -- register_copy + // [32] phi (byte) doplasma::i1#4 = (byte) 0 [phi:doplasma::@3->doplasma::@5#2] -- vbuz1=vbuc1 lda #0 sta i1 + jmp b5 + // [32] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5] + b5_from_b4: + // [32] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#1 [phi:doplasma::@4->doplasma::@5#0] -- register_copy + // [32] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#1 [phi:doplasma::@4->doplasma::@5#1] -- register_copy + // [32] phi (byte) doplasma::i1#4 = (byte) doplasma::i1#1 [phi:doplasma::@4->doplasma::@5#2] -- register_copy + jmp b5 + // doplasma::@5 + b5: + // [33] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 + ldy c2a + lda SINTABLE,y + ldy c2b + clc + adc SINTABLE,y + sta _4 + // [34] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#4) ← (byte~) doplasma::$4 -- pbuc1_derefidx_vbuz1=vbuz2 + lda _4 + ldy i1 + sta xbuf,y + // [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + lax c2a + axs #-[3] + stx c2a + // [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 + lax c2b + axs #-[7] + stx c2b + // [37] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#4 -- vbuz1=_inc_vbuz1 + inc i1 jmp b4 // doplasma::@4 b4: - // [27] if((byte) doplasma::i1#2<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 + // [38] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 lda i1 cmp #$28 - bcc b5 + bcc b5_from_b4 jmp b6 // doplasma::@6 b6: - // [28] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2 -- vbuz1=vbuz1_plus_2 + // [39] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2 -- vbuz1=vbuz1_plus_2 lda c2A clc adc #2 sta c2A - // [29] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 + // [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 lax c2B axs #3 stx c2B - // [30] phi from doplasma::@6 to doplasma::@7 [phi:doplasma::@6->doplasma::@7] - b7_from_b6: - // [30] phi (byte) doplasma::i2#2 = (byte) 0 [phi:doplasma::@6->doplasma::@7#0] -- vbuz1=vbuc1 + // [41] phi from doplasma::@6 to doplasma::@8 [phi:doplasma::@6->doplasma::@8] + b8_from_b6: + // [41] phi (byte) doplasma::i2#11 = (byte) 0 [phi:doplasma::@6->doplasma::@8#0] -- vbuz1=vbuc1 lda #0 sta i2 - jmp b7 - // doplasma::@7 - b7: - // [31] if((byte) doplasma::i2#2<(byte) $28) goto doplasma::@8 -- vbuz1_lt_vbuc1_then_la1 - lda i2 - cmp #$28 - bcc b8 - jmp breturn - // doplasma::@return - breturn: - // [32] return - rts + jmp b8 + // [41] phi from doplasma::@7 to doplasma::@8 [phi:doplasma::@7->doplasma::@8] + b8_from_b7: + // [41] phi (byte) doplasma::i2#11 = (byte) doplasma::i2#1 [phi:doplasma::@7->doplasma::@8#0] -- register_copy + jmp b8 // doplasma::@8 b8: - // [33] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [42] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#11) -- vbuz1=pbuc1_derefidx_vbuz2 // Find the first value on the row ldy i2 lda xbuf,y @@ -3643,379 +3800,332 @@ doplasma: { jmp b9 // doplasma::@9 b9: - // [34] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf clc adc val sta val_1 - // [35] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuz1=vbuz2 + // [44] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#11) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuz1=vbuz2 lda val_1 ldy i2 sta SCREEN1,y jmp b17_1 // doplasma::@17_1 b17_1: - // [36] (byte) doplasma::val#5 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [45] (byte) doplasma::val#7 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+1 clc adc val_1 - sta val_5 - // [37] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#5 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_5 + sta val_7 + // [46] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#7 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_7 ldy i2 sta SCREEN1+1*$28,y jmp b17_2 // doplasma::@17_2 b17_2: - // [38] (byte) doplasma::val#7 ← (byte) doplasma::val#5 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [47] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+2 clc - adc val_5 - sta val_7 - // [39] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#7 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_7 + adc val_7 + sta val_10 + // [48] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_10 ldy i2 sta SCREEN1+2*$28,y jmp b17_3 // doplasma::@17_3 b17_3: - // [40] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [49] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+3 clc - adc val_7 - sta val_10 - // [41] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_10 + adc val_10 + sta val_11 + // [50] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#11 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_11 ldy i2 sta SCREEN1+3*$28,y jmp b17_4 // doplasma::@17_4 b17_4: - // [42] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [51] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+4 clc - adc val_10 - sta val_11 - // [43] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#11 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_11 + adc val_11 + sta val_13 + // [52] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#13 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_13 ldy i2 sta SCREEN1+4*$28,y jmp b17_5 // doplasma::@17_5 b17_5: - // [44] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [53] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+5 clc - adc val_11 - sta val_13 - // [45] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#13 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_13 + adc val_13 + sta val_15 + // [54] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#15 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_15 ldy i2 sta SCREEN1+5*$28,y jmp b17_6 // doplasma::@17_6 b17_6: - // [46] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [55] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+6 clc - adc val_13 - sta val_15 - // [47] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#15 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_15 + adc val_15 + sta val_17 + // [56] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#17 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_17 ldy i2 sta SCREEN1+6*$28,y jmp b17_7 // doplasma::@17_7 b17_7: - // [48] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [57] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+7 clc - adc val_15 - sta val_17 - // [49] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#17 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_17 + adc val_17 + sta val_19 + // [58] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#19 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_19 ldy i2 sta SCREEN1+7*$28,y jmp b17_8 // doplasma::@17_8 b17_8: - // [50] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [59] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+8 clc - adc val_17 - sta val_19 - // [51] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#19 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_19 + adc val_19 + sta val_21 + // [60] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#21 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_21 ldy i2 sta SCREEN1+8*$28,y jmp b17_9 // doplasma::@17_9 b17_9: - // [52] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [61] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+9 clc - adc val_19 - sta val_21 - // [53] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#21 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_21 + adc val_21 + sta val_23 + // [62] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#23 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_23 ldy i2 sta SCREEN1+9*$28,y jmp b17_10 // doplasma::@17_10 b17_10: - // [54] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [63] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$a clc - adc val_21 - sta val_23 - // [55] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#23 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_23 + adc val_23 + sta val_25 + // [64] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#25 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_25 ldy i2 sta SCREEN1+$a*$28,y jmp b17_11 // doplasma::@17_11 b17_11: - // [56] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [65] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$b clc - adc val_23 - sta val_25 - // [57] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#25 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_25 + adc val_25 + sta val_27 + // [66] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#27 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_27 ldy i2 sta SCREEN1+$b*$28,y jmp b17_12 // doplasma::@17_12 b17_12: - // [58] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [67] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$c clc - adc val_25 - sta val_27 - // [59] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#27 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_27 + adc val_27 + sta val_29 + // [68] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#29 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_29 ldy i2 sta SCREEN1+$c*$28,y jmp b17_13 // doplasma::@17_13 b17_13: - // [60] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [69] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$d clc - adc val_27 - sta val_29 - // [61] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#29 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_29 + adc val_29 + sta val_31 + // [70] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#31 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_31 ldy i2 sta SCREEN1+$d*$28,y jmp b17_14 // doplasma::@17_14 b17_14: - // [62] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [71] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$e clc - adc val_29 - sta val_31 - // [63] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#31 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_31 + adc val_31 + sta val_33 + // [72] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#33 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_33 ldy i2 sta SCREEN1+$e*$28,y jmp b17_15 // doplasma::@17_15 b17_15: - // [64] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [73] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$f clc - adc val_31 - sta val_33 - // [65] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#33 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_33 + adc val_33 + sta val_35 + // [74] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#35 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_35 ldy i2 sta SCREEN1+$f*$28,y jmp b17_16 // doplasma::@17_16 b17_16: - // [66] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [75] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$10 clc - adc val_33 - sta val_35 - // [67] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#35 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_35 + adc val_35 + sta val_37 + // [76] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#37 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_37 ldy i2 sta SCREEN1+$10*$28,y jmp b17_17 // doplasma::@17_17 b17_17: - // [68] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [77] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$11 clc - adc val_35 - sta val_37 - // [69] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#37 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_37 + adc val_37 + sta val_39 + // [78] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#39 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_39 ldy i2 sta SCREEN1+$11*$28,y jmp b17_18 // doplasma::@17_18 b17_18: - // [70] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [79] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$12 clc - adc val_37 - sta val_39 - // [71] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#39 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_39 + adc val_39 + sta val_41 + // [80] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#41 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_41 ldy i2 sta SCREEN1+$12*$28,y jmp b17_19 // doplasma::@17_19 b17_19: - // [72] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [81] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$13 clc - adc val_39 - sta val_41 - // [73] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#41 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_41 + adc val_41 + sta val_43 + // [82] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#43 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_43 ldy i2 sta SCREEN1+$13*$28,y jmp b17_20 // doplasma::@17_20 b17_20: - // [74] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [83] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$14 clc - adc val_41 - sta val_43 - // [75] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#43 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_43 + adc val_43 + sta val_45 + // [84] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#45 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_45 ldy i2 sta SCREEN1+$14*$28,y jmp b17_21 // doplasma::@17_21 b17_21: - // [76] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [85] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$15 clc - adc val_43 - sta val_45 - // [77] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#45 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_45 + adc val_45 + sta val_47 + // [86] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#47 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_47 ldy i2 sta SCREEN1+$15*$28,y jmp b17_22 // doplasma::@17_22 b17_22: - // [78] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [87] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$16 clc - adc val_45 - sta val_47 - // [79] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#47 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_47 + adc val_47 + sta val_49 + // [88] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#49 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_49 ldy i2 sta SCREEN1+$16*$28,y jmp b17_23 // doplasma::@17_23 b17_23: - // [80] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [89] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$17 clc - adc val_47 - sta val_49 - // [81] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#49 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_49 + adc val_49 + sta val_51 + // [90] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#51 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_51 ldy i2 sta SCREEN1+$17*$28,y jmp b17_24 // doplasma::@17_24 b17_24: - // [82] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) -- vbuz1=vbuz2_plus__deref_pbuc1 + // [91] (byte) doplasma::val#53 ← (byte) doplasma::val#51 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) -- vbuz1=vbuz2_plus__deref_pbuc1 lda ybuf+$18 clc - adc val_49 - sta val_51 - // [83] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#51 -- pbuc1_derefidx_vbuz1=vbuz2 - lda val_51 + adc val_51 + sta val_53 + // [92] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#53 -- pbuc1_derefidx_vbuz1=vbuz2 + lda val_53 ldy i2 sta SCREEN1+$18*$28,y jmp b10 // doplasma::@10 b10: - // [84] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuz1=_inc_vbuz1 + // [93] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#11 -- vbuz1=_inc_vbuz1 inc i2 - // [30] phi from doplasma::@10 to doplasma::@7 [phi:doplasma::@10->doplasma::@7] - b7_from_b10: - // [30] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@10->doplasma::@7#0] -- register_copy jmp b7 - // doplasma::@5 - b5: - // [85] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 - ldy c2a - lda SINTABLE,y - ldy c2b - clc - adc SINTABLE,y - sta _4 - // [86] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$4 -- pbuc1_derefidx_vbuz1=vbuz2 - lda _4 - ldy i1 - sta xbuf,y - // [87] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 - lax c2a - axs #-[3] - stx c2a - // [88] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 - lax c2b - axs #-[7] - stx c2b - // [89] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 - inc i1 - // [26] phi from doplasma::@5 to doplasma::@4 [phi:doplasma::@5->doplasma::@4] - b4_from_b5: - // [26] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@5->doplasma::@4#0] -- register_copy - // [26] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@5->doplasma::@4#1] -- register_copy - // [26] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@5->doplasma::@4#2] -- register_copy - jmp b4 - // doplasma::@2 - b2: - // [90] (byte) doplasma::yval#0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 - ldy c1a - lda SINTABLE,y - ldy c1b - clc - adc SINTABLE,y - sta yval - // [91] (byte~) doplasma::$2 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2 -- vbuz1=vbuz2_minus_vbuz3 - lda yval - sec - sbc yprev - sta _2 - // [92] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$2 -- pbuc1_derefidx_vbuz1=vbuz2 - lda _2 - ldy i - sta ybuf,y - // [93] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 - lax c1a - axs #-[4] - stx c1a - // [94] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 - lax c1b - axs #-[9] - stx c1b - // [95] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [96] (byte~) doplasma::yprev#4 ← (byte) doplasma::yval#0 -- vbuz1=vbuz2 - lda yval - sta yprev - // [20] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1] - b1_from_b2: - // [20] phi (byte) doplasma::yprev#2 = (byte~) doplasma::yprev#4 [phi:doplasma::@2->doplasma::@1#0] -- register_copy - // [20] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@2->doplasma::@1#1] -- register_copy - // [20] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@2->doplasma::@1#2] -- register_copy - // [20] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@2->doplasma::@1#3] -- register_copy - jmp b1 + // doplasma::@7 + b7: + // [94] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@8 -- vbuz1_lt_vbuc1_then_la1 + lda i2 + cmp #$28 + bcc b8_from_b7 + jmp breturn + // doplasma::@return + breturn: + // [95] return + rts + // doplasma::@11 + b11: + // [96] (byte~) doplasma::yprev#6 ← (byte) doplasma::yprev#2 -- vbuz1=vbuz2 + lda yprev + sta yprev_6 + // [20] phi from doplasma::@11 to doplasma::@2 [phi:doplasma::@11->doplasma::@2] + b2_from_b11: + // [20] phi (byte) doplasma::yprev#4 = (byte~) doplasma::yprev#6 [phi:doplasma::@11->doplasma::@2#0] -- register_copy + // [20] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#1 [phi:doplasma::@11->doplasma::@2#1] -- register_copy + // [20] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#1 [phi:doplasma::@11->doplasma::@2#2] -- register_copy + // [20] phi (byte) doplasma::i#4 = (byte) doplasma::i#1 [phi:doplasma::@11->doplasma::@2#3] -- register_copy + jmp b2 xbuf: .fill $28, 0 ybuf: .fill $19, 0 } @@ -4023,132 +4133,130 @@ doplasma: { // Make a plasma-friendly charset where the chars are randomly filled makecharset: { .label _3 = $36 - .label _6 = $40 - .label _7 = $41 - .label _10 = $39 - .label _11 = $3b - .label _12 = $38 + .label _6 = $39 + .label _7 = $3a + .label _10 = $3b + .label _11 = $3d + .label _12 = $41 .label s = $37 .label i = $14 .label ii = $15 .label b = $16 .label c = $10 - .label _16 = $3d + .label _16 = $3f // [98] call sid_rnd_init jsr sid_rnd_init - // [99] phi from makecharset to makecharset::@12 [phi:makecharset->makecharset::@12] - b12_from_makecharset: - jmp b12 - // makecharset::@12 - b12: + // [99] phi from makecharset to makecharset::@13 [phi:makecharset->makecharset::@13] + b13_from_makecharset: + jmp b13 + // makecharset::@13 + b13: // [100] call print_cls - // [135] phi from makecharset::@12 to print_cls [phi:makecharset::@12->print_cls] - print_cls_from_b12: + // [134] phi from makecharset::@13 to print_cls [phi:makecharset::@13->print_cls] + print_cls_from_b13: jsr print_cls - // [101] phi from makecharset::@12 to makecharset::@1 [phi:makecharset::@12->makecharset::@1] - b1_from_b12: - // [101] phi (byte*) print_char_cursor#18 = (const byte*) print_line_cursor#0 [phi:makecharset::@12->makecharset::@1#0] -- pbuz1=pbuc1 + // [101] phi from makecharset::@13 to makecharset::@2 [phi:makecharset::@13->makecharset::@2] + b2_from_b13: + // [101] phi (byte*) print_char_cursor#52 = (const byte*) print_line_cursor#0 [phi:makecharset::@13->makecharset::@2#0] -- pbuz1=pbuc1 lda #print_line_cursor sta print_char_cursor+1 - // [101] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vbuc1 + // [101] phi (word) makecharset::c#16 = (byte) 0 [phi:makecharset::@13->makecharset::@2#1] -- vwuz1=vbuc1 lda #<0 sta c lda #>0 sta c+1 - jmp b1 - // makecharset::@1 - b1: - // [102] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 - lda c+1 - cmp #>$100 - bcc b2 - bne !+ - lda c - cmp #<$100 - bcc b2 - !: - jmp breturn - // makecharset::@return - breturn: - // [103] return - rts + jmp b2 + // [101] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2] + b2_from_b1: + // [101] phi (byte*) print_char_cursor#52 = (byte*) print_char_cursor#18 [phi:makecharset::@1->makecharset::@2#0] -- register_copy + // [101] phi (word) makecharset::c#16 = (word) makecharset::c#1 [phi:makecharset::@1->makecharset::@2#1] -- register_copy + jmp b2 // makecharset::@2 b2: - // [104] (byte~) makecharset::$3 ← < (word) makecharset::c#2 -- vbuz1=_lo_vwuz2 + // [102] (byte~) makecharset::$3 ← < (word) makecharset::c#16 -- vbuz1=_lo_vwuz2 lda c sta _3 - // [105] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) -- vbuz1=pbuc1_derefidx_vbuz2 + // [103] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) -- vbuz1=pbuc1_derefidx_vbuz2 ldy _3 lda SINTABLE,y sta s - // [106] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3] - b3_from_b2: - // [106] phi (byte) makecharset::i#2 = (byte) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuz1=vbuc1 + // [104] phi from makecharset::@2 to makecharset::@4 [phi:makecharset::@2->makecharset::@4] + b4_from_b2: + // [104] phi (byte) makecharset::i#13 = (byte) 0 [phi:makecharset::@2->makecharset::@4#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b3 - // makecharset::@3 - b3: - // [107] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@5 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #8 - bcc b5_from_b3 + jmp b4 + // [104] phi from makecharset::@3 to makecharset::@4 [phi:makecharset::@3->makecharset::@4] + b4_from_b3: + // [104] phi (byte) makecharset::i#13 = (byte) makecharset::i#1 [phi:makecharset::@3->makecharset::@4#0] -- register_copy jmp b4 // makecharset::@4 b4: - // [108] (byte~) makecharset::$12 ← (word) makecharset::c#2 & (byte) 7 -- vbuz1=vwuz2_band_vbuc1 - lda c - and #7 - sta _12 - // [109] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@11 -- vbuz1_neq_0_then_la1 - lda _12 - cmp #0 - bne b11_from_b4 - // [110] phi from makecharset::@4 to makecharset::@10 [phi:makecharset::@4->makecharset::@10] - b10_from_b4: - jmp b10 - // makecharset::@10 - b10: - // [111] call print_char - jsr print_char - // [112] phi from makecharset::@10 makecharset::@4 to makecharset::@11 [phi:makecharset::@10/makecharset::@4->makecharset::@11] - b11_from_b10: - b11_from_b4: - // [112] phi (byte*) print_char_cursor#30 = (byte*) print_char_cursor#1 [phi:makecharset::@10/makecharset::@4->makecharset::@11#0] -- register_copy - jmp b11 - // makecharset::@11 - b11: - // [113] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 - inc c - bne !+ - inc c+1 - !: - // [101] phi from makecharset::@11 to makecharset::@1 [phi:makecharset::@11->makecharset::@1] - b1_from_b11: - // [101] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#30 [phi:makecharset::@11->makecharset::@1#0] -- register_copy - // [101] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@11->makecharset::@1#1] -- register_copy - jmp b1 - // [114] phi from makecharset::@3 to makecharset::@5 [phi:makecharset::@3->makecharset::@5] - b5_from_b3: - // [114] phi (byte) makecharset::b#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#0] -- vbuz1=vbuc1 + // [105] phi from makecharset::@4 to makecharset::@7 [phi:makecharset::@4->makecharset::@7] + b7_from_b4: + // [105] phi (byte) makecharset::b#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#0] -- vbuz1=vbuc1 lda #0 sta b - // [114] phi (byte) makecharset::ii#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#1] -- vbuz1=vbuc1 + // [105] phi (byte) makecharset::ii#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#1] -- vbuz1=vbuc1 lda #0 sta ii - jmp b5 - // makecharset::@5 - b5: - // [115] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@6 -- vbuz1_lt_vbuc1_then_la1 - lda ii - cmp #8 - bcc b6_from_b5 + jmp b7 + // [105] phi from makecharset::@6 to makecharset::@7 [phi:makecharset::@6->makecharset::@7] + b7_from_b6: + // [105] phi (byte) makecharset::b#10 = (byte) makecharset::b#2 [phi:makecharset::@6->makecharset::@7#0] -- register_copy + // [105] phi (byte) makecharset::ii#10 = (byte) makecharset::ii#1 [phi:makecharset::@6->makecharset::@7#1] -- register_copy jmp b7 // makecharset::@7 b7: - // [116] (word~) makecharset::$10 ← (word) makecharset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [106] call sid_rnd + jsr sid_rnd + // [107] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 + lda sid_rnd.return + sta sid_rnd.return_2 + jmp b14 + // makecharset::@14 + b14: + // [108] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 + lda sid_rnd.return_2 + sta _6 + // [109] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuz2_band_vbuc1 + lda #$ff + and _6 + sta _7 + // [110] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@9 -- vbuz1_le_vbuz2_then_la1 + lda s + cmp _7 + bcs b9_from_b14 + jmp b10 + // makecharset::@10 + b10: + // [111] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 + lda b + ldy ii + ora bittab,y + sta b + // [112] phi from makecharset::@10 makecharset::@14 to makecharset::@9 [phi:makecharset::@10/makecharset::@14->makecharset::@9] + b9_from_b10: + b9_from_b14: + // [112] phi (byte) makecharset::b#2 = (byte) makecharset::b#1 [phi:makecharset::@10/makecharset::@14->makecharset::@9#0] -- register_copy + jmp b9 + // makecharset::@9 + b9: + // [113] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#10 -- vbuz1=_inc_vbuz1 + inc ii + jmp b6 + // makecharset::@6 + b6: + // [114] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@7 -- vbuz1_lt_vbuc1_then_la1 + lda ii + cmp #8 + bcc b7_from_b6 + jmp b8 + // makecharset::@8 + b8: + // [115] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda c asl sta _10 @@ -4159,7 +4267,7 @@ makecharset: { rol _10+1 asl _10 rol _10+1 - // [117] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#2 -- vwuz1=vwuz2_plus_vbuz3 + // [116] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 -- vwuz1=vwuz2_plus_vbuz3 lda i clc adc _10 @@ -4167,7 +4275,7 @@ makecharset: { lda #0 adc _10+1 sta _11+1 - // [118] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz2 + // [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz2 lda _11 clc adc #CHARSET sta _16+1 - // [119] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuz2 + // [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuz2 lda b ldy #0 sta (_16),y - // [120] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 -- vbuz1=_inc_vbuz1 + // [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 -- vbuz1=_inc_vbuz1 inc i - // [106] phi from makecharset::@7 to makecharset::@3 [phi:makecharset::@7->makecharset::@3] - b3_from_b7: - // [106] phi (byte) makecharset::i#2 = (byte) makecharset::i#1 [phi:makecharset::@7->makecharset::@3#0] -- register_copy jmp b3 - // [121] phi from makecharset::@5 to makecharset::@6 [phi:makecharset::@5->makecharset::@6] - b6_from_b5: - jmp b6 - // makecharset::@6 - b6: - // [122] call sid_rnd - jsr sid_rnd - // [123] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 - lda sid_rnd.return - sta sid_rnd.return_2 - jmp b13 - // makecharset::@13 - b13: - // [124] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 - lda sid_rnd.return_2 - sta _6 - // [125] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuz2_band_vbuc1 - lda #$ff - and _6 - sta _7 - // [126] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@8 -- vbuz1_le_vbuz2_then_la1 - lda s - cmp _7 - bcs b8_from_b13 - jmp b9 - // makecharset::@9 - b9: - // [127] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 - lda b - ldy ii - ora bittab,y - sta b - // [128] phi from makecharset::@13 makecharset::@9 to makecharset::@8 [phi:makecharset::@13/makecharset::@9->makecharset::@8] - b8_from_b13: - b8_from_b9: - // [128] phi (byte) makecharset::b#6 = (byte) makecharset::b#2 [phi:makecharset::@13/makecharset::@9->makecharset::@8#0] -- register_copy - jmp b8 - // makecharset::@8 - b8: - // [129] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuz1=_inc_vbuz1 - inc ii - // [114] phi from makecharset::@8 to makecharset::@5 [phi:makecharset::@8->makecharset::@5] - b5_from_b8: - // [114] phi (byte) makecharset::b#2 = (byte) makecharset::b#6 [phi:makecharset::@8->makecharset::@5#0] -- register_copy - // [114] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@8->makecharset::@5#1] -- register_copy + // makecharset::@3 + b3: + // [120] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@4 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #8 + bcc b4_from_b3 jmp b5 - bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 -} - // sid_rnd -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -sid_rnd: { - .label return = $42 - .label return_2 = $3f - // [130] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 - lda SID_VOICE3_OSC - sta return + // makecharset::@5 + b5: + // [121] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 -- vbuz1=vwuz2_band_vbuc1 + lda c + and #7 + sta _12 + // [122] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@12 -- vbuz1_neq_0_then_la1 + lda _12 + cmp #0 + bne b12_from_b5 + // [123] phi from makecharset::@5 to makecharset::@11 [phi:makecharset::@5->makecharset::@11] + b11_from_b5: + jmp b11 + // makecharset::@11 + b11: + // [124] call print_char + jsr print_char + // [125] phi from makecharset::@11 makecharset::@5 to makecharset::@12 [phi:makecharset::@11/makecharset::@5->makecharset::@12] + b12_from_b11: + b12_from_b5: + // [125] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#1 [phi:makecharset::@11/makecharset::@5->makecharset::@12#0] -- register_copy + jmp b12 + // makecharset::@12 + b12: + // [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#16 -- vwuz1=_inc_vwuz1 + inc c + bne !+ + inc c+1 + !: + jmp b1 + // makecharset::@1 + b1: + // [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 + lda c+1 + cmp #>$100 + bcc b2_from_b1 + bne !+ + lda c + cmp #<$100 + bcc b2_from_b1 + !: jmp breturn - // sid_rnd::@return + // makecharset::@return breturn: - // [131] return + // [128] return rts + bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // print_char // Print a single char print_char: { .const ch = '.' - // [132] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 + // [129] *((byte*) print_char_cursor#52) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (print_char_cursor),y - // [133] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 + // [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#52 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 @@ -4264,20 +4361,35 @@ print_char: { jmp breturn // print_char::@return breturn: - // [134] return + // [131] return + rts +} + // sid_rnd +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + .label return = $42 + .label return_2 = $38 + // [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 + lda SID_VOICE3_OSC + sta return + jmp breturn + // sid_rnd::@return + breturn: + // [133] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [136] call memset - // [138] phi from print_cls to memset [phi:print_cls->memset] + // [135] call memset + // [137] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp breturn // print_cls::@return breturn: - // [137] return + // [136] return rts } // memset @@ -4288,59 +4400,60 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = $17 - // [139] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [139] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [138] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [138] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [138] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [139] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [143] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [139] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [139] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [141] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #$ffff sta SID_VOICE3_FREQ+1 - // [145] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [144] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL jmp breturn // sid_rnd_init::@return breturn: - // [146] return + // [145] return rts } // File Data @@ -4356,320 +4469,320 @@ Statement [6] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 [ ] ( main:2 [ ] Statement [8] *((byte*) main::col#2) ← (const byte) BLACK#0 [ main::col#2 ] ( main:2 [ main::col#2 ] ) always clobbers reg byte a reg byte y Statement [10] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1 [ main::col#1 ] ( main:2 [ main::col#1 ] ) always clobbers reg byte a Statement [14] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [22] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ( main:2::doplasma:17 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ) always clobbers reg byte a +Statement [21] (byte) doplasma::yprev#2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#4 doplasma::yprev#2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#4 doplasma::yprev#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ c1A#1 c1A#3 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ c1B#1 c1B#3 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ c2A#1 c2A#3 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ c2B#1 c2B#3 ] -Statement [23] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ c1A#1 c1A#3 ] -Statement [29] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ) always clobbers reg byte a -Statement [34] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#1 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ doplasma::i2#2 doplasma::i2#1 ] -Statement [36] (byte) doplasma::val#5 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#5 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#5 ] ) always clobbers reg byte a -Statement [38] (byte) doplasma::val#7 ← (byte) doplasma::val#5 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#7 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#7 ] ) always clobbers reg byte a -Statement [40] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#10 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#10 ] ) always clobbers reg byte a -Statement [42] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#11 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#11 ] ) always clobbers reg byte a -Statement [44] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#13 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#13 ] ) always clobbers reg byte a -Statement [46] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#15 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#15 ] ) always clobbers reg byte a -Statement [48] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#17 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#17 ] ) always clobbers reg byte a -Statement [50] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#19 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#19 ] ) always clobbers reg byte a -Statement [52] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#21 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#21 ] ) always clobbers reg byte a -Statement [54] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#23 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#23 ] ) always clobbers reg byte a -Statement [56] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#25 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#25 ] ) always clobbers reg byte a -Statement [58] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#27 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#27 ] ) always clobbers reg byte a -Statement [60] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#29 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#29 ] ) always clobbers reg byte a -Statement [62] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#31 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#31 ] ) always clobbers reg byte a -Statement [64] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#33 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#33 ] ) always clobbers reg byte a -Statement [66] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#35 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#35 ] ) always clobbers reg byte a -Statement [68] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#37 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#37 ] ) always clobbers reg byte a -Statement [70] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#39 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#39 ] ) always clobbers reg byte a -Statement [72] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#41 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#41 ] ) always clobbers reg byte a -Statement [74] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#43 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#43 ] ) always clobbers reg byte a -Statement [76] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#45 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#45 ] ) always clobbers reg byte a -Statement [78] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#47 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#47 ] ) always clobbers reg byte a -Statement [80] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#49 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#49 ] ) always clobbers reg byte a -Statement [82] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#51 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#51 ] ) always clobbers reg byte a -Statement [85] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#2 doplasma::c2b#2 doplasma::$4 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#2 doplasma::c2b#2 doplasma::$4 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ doplasma::i1#2 doplasma::i1#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -Statement [87] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2b#2 doplasma::c2a#1 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2b#2 doplasma::c2a#1 ] ) always clobbers reg byte a -Statement [88] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a -Statement [90] (byte) doplasma::yval#0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::yprev#2 doplasma::yval#0 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::yprev#2 doplasma::yval#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ doplasma::yprev#2 doplasma::yprev#4 ] -Statement [91] (byte~) doplasma::$2 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::yval#0 doplasma::$2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::yval#0 doplasma::$2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ doplasma::yval#0 ] -Statement [93] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1b#2 doplasma::c1a#1 doplasma::yval#0 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1b#2 doplasma::c1a#1 doplasma::yval#0 ] ) always clobbers reg byte a -Statement [94] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::yval#0 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::yval#0 ] ) always clobbers reg byte a -Statement [102] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 [ makecharset::c#2 print_char_cursor#18 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a -Statement [104] (byte~) makecharset::$3 ← < (word) makecharset::c#2 [ makecharset::c#2 print_char_cursor#18 makecharset::$3 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::$3 ] ) always clobbers reg byte a -Statement [108] (byte~) makecharset::$12 ← (word) makecharset::c#2 & (byte) 7 [ makecharset::c#2 print_char_cursor#18 makecharset::$12 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::$12 ] ) always clobbers reg byte a -Statement [116] (word~) makecharset::$10 ← (word) makecharset::c#2 << (byte) 3 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$10 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$10 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ doplasma::yprev#4 doplasma::yprev#6 ] +Statement [22] (byte~) doplasma::$2 ← (byte) doplasma::yprev#2 - (byte) doplasma::yprev#4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#2 doplasma::$2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#2 doplasma::$2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ doplasma::yprev#2 ] +Statement [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 doplasma::yprev#2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 doplasma::yprev#2 ] ) always clobbers reg byte a +Statement [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 doplasma::yprev#2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 doplasma::yprev#2 ] ) always clobbers reg byte a +Statement [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ( main:2::doplasma:17 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ) always clobbers reg byte a +Statement [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ) always clobbers reg byte a +Statement [33] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$4 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ doplasma::i1#4 doplasma::i1#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +Statement [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] ) always clobbers reg byte a +Statement [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a +Statement [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ) always clobbers reg byte a +Statement [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#1 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ doplasma::i2#11 doplasma::i2#1 ] +Statement [45] (byte) doplasma::val#7 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#7 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#7 ] ) always clobbers reg byte a +Statement [47] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#10 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#10 ] ) always clobbers reg byte a +Statement [49] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#11 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#11 ] ) always clobbers reg byte a +Statement [51] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#13 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#13 ] ) always clobbers reg byte a +Statement [53] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#15 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#15 ] ) always clobbers reg byte a +Statement [55] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#17 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#17 ] ) always clobbers reg byte a +Statement [57] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#19 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#19 ] ) always clobbers reg byte a +Statement [59] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#21 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#21 ] ) always clobbers reg byte a +Statement [61] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#23 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#23 ] ) always clobbers reg byte a +Statement [63] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#25 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#25 ] ) always clobbers reg byte a +Statement [65] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#27 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#27 ] ) always clobbers reg byte a +Statement [67] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#29 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#29 ] ) always clobbers reg byte a +Statement [69] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#31 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#31 ] ) always clobbers reg byte a +Statement [71] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#33 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#33 ] ) always clobbers reg byte a +Statement [73] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#35 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#35 ] ) always clobbers reg byte a +Statement [75] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#37 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#37 ] ) always clobbers reg byte a +Statement [77] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#39 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#39 ] ) always clobbers reg byte a +Statement [79] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#41 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#41 ] ) always clobbers reg byte a +Statement [81] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#43 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#43 ] ) always clobbers reg byte a +Statement [83] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#45 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#45 ] ) always clobbers reg byte a +Statement [85] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#47 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#47 ] ) always clobbers reg byte a +Statement [87] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#49 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#49 ] ) always clobbers reg byte a +Statement [89] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#51 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#51 ] ) always clobbers reg byte a +Statement [91] (byte) doplasma::val#53 ← (byte) doplasma::val#51 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#53 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#53 ] ) always clobbers reg byte a +Statement [102] (byte~) makecharset::$3 ← < (word) makecharset::c#16 [ makecharset::c#16 print_char_cursor#52 makecharset::$3 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::$3 ] ) always clobbers reg byte a +Statement [111] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::ii#10 makecharset::b#1 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::ii#10 makecharset::b#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:55 [ makecharset::s#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ makecharset::i#2 makecharset::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -Statement [117] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#2 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$11 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$11 ] ) always clobbers reg byte a -Statement [118] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a -Statement [119] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ makecharset::ii#10 makecharset::ii#1 ] +Statement [115] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$10 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$10 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] +Statement [116] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$11 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$11 ] ) always clobbers reg byte a +Statement [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a +Statement [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:55 [ makecharset::s#0 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ makecharset::i#2 makecharset::i#1 ] -Statement [127] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::ii#2 makecharset::b#1 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::ii#2 makecharset::b#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ makecharset::ii#2 makecharset::ii#1 ] -Statement [132] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:2::makecharset:12::print_char:111 [ makecharset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a reg byte y -Statement [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:100::memset:136 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:100::memset:136 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [144] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] ) always clobbers reg byte a -Statement [145] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] ) always clobbers reg byte a +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] +Statement [121] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 [ makecharset::c#16 print_char_cursor#52 makecharset::$12 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::$12 ] ) always clobbers reg byte a +Statement [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 [ makecharset::c#1 print_char_cursor#18 ] ( main:2::makecharset:12 [ makecharset::c#1 print_char_cursor#18 ] ) always clobbers reg byte a +Statement [129] *((byte*) print_char_cursor#52) ← (const byte) print_char::ch#0 [ print_char_cursor#52 ] ( main:2::makecharset:12::print_char:124 [ makecharset::c#16 print_char_cursor#52 ] ) always clobbers reg byte a reg byte y +Statement [139] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::makecharset:12::print_cls:100::memset:135 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [141] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::makecharset:12::print_cls:100::memset:135 [ memset::dst#1 ] ) always clobbers reg byte a +Statement [143] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] ) always clobbers reg byte a +Statement [144] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] ) always clobbers reg byte a Statement [5] *((const byte*) BORDERCOL#0) ← (const byte) BLUE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [8] *((byte*) main::col#2) ← (const byte) BLACK#0 [ main::col#2 ] ( main:2 [ main::col#2 ] ) always clobbers reg byte a reg byte y Statement [10] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1 [ main::col#1 ] ( main:2 [ main::col#1 ] ) always clobbers reg byte a Statement [14] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [22] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ( main:2::doplasma:17 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ) always clobbers reg byte a -Statement [23] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ) always clobbers reg byte a -Statement [29] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ) always clobbers reg byte a -Statement [34] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#1 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#1 ] ) always clobbers reg byte a -Statement [36] (byte) doplasma::val#5 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#5 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#5 ] ) always clobbers reg byte a -Statement [38] (byte) doplasma::val#7 ← (byte) doplasma::val#5 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#7 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#7 ] ) always clobbers reg byte a -Statement [40] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#10 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#10 ] ) always clobbers reg byte a -Statement [42] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#11 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#11 ] ) always clobbers reg byte a -Statement [44] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#13 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#13 ] ) always clobbers reg byte a -Statement [46] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#15 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#15 ] ) always clobbers reg byte a -Statement [48] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#17 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#17 ] ) always clobbers reg byte a -Statement [50] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#19 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#19 ] ) always clobbers reg byte a -Statement [52] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#21 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#21 ] ) always clobbers reg byte a -Statement [54] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#23 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#23 ] ) always clobbers reg byte a -Statement [56] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#25 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#25 ] ) always clobbers reg byte a -Statement [58] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#27 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#27 ] ) always clobbers reg byte a -Statement [60] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#29 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#29 ] ) always clobbers reg byte a -Statement [62] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#31 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#31 ] ) always clobbers reg byte a -Statement [64] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#33 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#33 ] ) always clobbers reg byte a -Statement [66] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#35 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#35 ] ) always clobbers reg byte a -Statement [68] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#37 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#37 ] ) always clobbers reg byte a -Statement [70] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#39 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#39 ] ) always clobbers reg byte a -Statement [72] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#41 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#41 ] ) always clobbers reg byte a -Statement [74] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#43 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#43 ] ) always clobbers reg byte a -Statement [76] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#45 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#45 ] ) always clobbers reg byte a -Statement [78] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#47 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#47 ] ) always clobbers reg byte a -Statement [80] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#49 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#49 ] ) always clobbers reg byte a -Statement [82] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#51 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#51 ] ) always clobbers reg byte a -Statement [85] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#2 doplasma::c2b#2 doplasma::$4 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#2 doplasma::c2b#2 doplasma::$4 ] ) always clobbers reg byte a -Statement [87] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2b#2 doplasma::c2a#1 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2b#2 doplasma::c2a#1 ] ) always clobbers reg byte a -Statement [88] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a -Statement [90] (byte) doplasma::yval#0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::yprev#2 doplasma::yval#0 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::yprev#2 doplasma::yval#0 ] ) always clobbers reg byte a -Statement [91] (byte~) doplasma::$2 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::yval#0 doplasma::$2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::yval#0 doplasma::$2 ] ) always clobbers reg byte a -Statement [93] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1b#2 doplasma::c1a#1 doplasma::yval#0 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1b#2 doplasma::c1a#1 doplasma::yval#0 ] ) always clobbers reg byte a -Statement [94] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::yval#0 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::yval#0 ] ) always clobbers reg byte a -Statement [102] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 [ makecharset::c#2 print_char_cursor#18 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a -Statement [104] (byte~) makecharset::$3 ← < (word) makecharset::c#2 [ makecharset::c#2 print_char_cursor#18 makecharset::$3 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::$3 ] ) always clobbers reg byte a -Statement [108] (byte~) makecharset::$12 ← (word) makecharset::c#2 & (byte) 7 [ makecharset::c#2 print_char_cursor#18 makecharset::$12 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::$12 ] ) always clobbers reg byte a -Statement [116] (word~) makecharset::$10 ← (word) makecharset::c#2 << (byte) 3 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$10 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$10 ] ) always clobbers reg byte a -Statement [117] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#2 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$11 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$11 ] ) always clobbers reg byte a -Statement [118] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a -Statement [119] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 ] ) always clobbers reg byte a reg byte y -Statement [127] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::ii#2 makecharset::b#1 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::ii#2 makecharset::b#1 ] ) always clobbers reg byte a -Statement [132] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:2::makecharset:12::print_char:111 [ makecharset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a reg byte y -Statement [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:100::memset:136 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:100::memset:136 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [144] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] ) always clobbers reg byte a -Statement [145] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] ) always clobbers reg byte a +Statement [21] (byte) doplasma::yprev#2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#4 doplasma::yprev#2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#4 doplasma::yprev#2 ] ) always clobbers reg byte a +Statement [22] (byte~) doplasma::$2 ← (byte) doplasma::yprev#2 - (byte) doplasma::yprev#4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#2 doplasma::$2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#2 doplasma::$2 ] ) always clobbers reg byte a +Statement [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 doplasma::yprev#2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 doplasma::yprev#2 ] ) always clobbers reg byte a +Statement [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 doplasma::yprev#2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 doplasma::yprev#2 ] ) always clobbers reg byte a +Statement [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ( main:2::doplasma:17 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ) always clobbers reg byte a +Statement [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ) always clobbers reg byte a +Statement [33] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$4 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$4 ] ) always clobbers reg byte a +Statement [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] ) always clobbers reg byte a +Statement [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a +Statement [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ) always clobbers reg byte a +Statement [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#1 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#1 ] ) always clobbers reg byte a +Statement [45] (byte) doplasma::val#7 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#7 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#7 ] ) always clobbers reg byte a +Statement [47] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#10 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#10 ] ) always clobbers reg byte a +Statement [49] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#11 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#11 ] ) always clobbers reg byte a +Statement [51] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#13 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#13 ] ) always clobbers reg byte a +Statement [53] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#15 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#15 ] ) always clobbers reg byte a +Statement [55] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#17 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#17 ] ) always clobbers reg byte a +Statement [57] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#19 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#19 ] ) always clobbers reg byte a +Statement [59] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#21 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#21 ] ) always clobbers reg byte a +Statement [61] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#23 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#23 ] ) always clobbers reg byte a +Statement [63] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#25 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#25 ] ) always clobbers reg byte a +Statement [65] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#27 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#27 ] ) always clobbers reg byte a +Statement [67] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#29 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#29 ] ) always clobbers reg byte a +Statement [69] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#31 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#31 ] ) always clobbers reg byte a +Statement [71] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#33 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#33 ] ) always clobbers reg byte a +Statement [73] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#35 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#35 ] ) always clobbers reg byte a +Statement [75] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#37 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#37 ] ) always clobbers reg byte a +Statement [77] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#39 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#39 ] ) always clobbers reg byte a +Statement [79] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#41 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#41 ] ) always clobbers reg byte a +Statement [81] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#43 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#43 ] ) always clobbers reg byte a +Statement [83] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#45 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#45 ] ) always clobbers reg byte a +Statement [85] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#47 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#47 ] ) always clobbers reg byte a +Statement [87] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#49 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#49 ] ) always clobbers reg byte a +Statement [89] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#51 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#51 ] ) always clobbers reg byte a +Statement [91] (byte) doplasma::val#53 ← (byte) doplasma::val#51 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#53 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#53 ] ) always clobbers reg byte a +Statement [102] (byte~) makecharset::$3 ← < (word) makecharset::c#16 [ makecharset::c#16 print_char_cursor#52 makecharset::$3 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::$3 ] ) always clobbers reg byte a +Statement [111] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::ii#10 makecharset::b#1 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::ii#10 makecharset::b#1 ] ) always clobbers reg byte a +Statement [115] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$10 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$10 ] ) always clobbers reg byte a +Statement [116] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$11 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$11 ] ) always clobbers reg byte a +Statement [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a +Statement [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 ] ) always clobbers reg byte a reg byte y +Statement [121] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 [ makecharset::c#16 print_char_cursor#52 makecharset::$12 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::$12 ] ) always clobbers reg byte a +Statement [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 [ makecharset::c#1 print_char_cursor#18 ] ( main:2::makecharset:12 [ makecharset::c#1 print_char_cursor#18 ] ) always clobbers reg byte a +Statement [129] *((byte*) print_char_cursor#52) ← (const byte) print_char::ch#0 [ print_char_cursor#52 ] ( main:2::makecharset:12::print_char:124 [ makecharset::c#16 print_char_cursor#52 ] ) always clobbers reg byte a reg byte y +Statement [139] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::makecharset:12::print_cls:100::memset:135 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [141] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::makecharset:12::print_cls:100::memset:135 [ memset::dst#1 ] ) always clobbers reg byte a +Statement [143] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] ) always clobbers reg byte a +Statement [144] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ main::col#2 main::col#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_BYTE:4 [ c1A#1 c1A#3 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:5 [ c1B#1 c1B#3 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:6 [ c2A#1 c2A#3 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:7 [ c2B#1 c2B#3 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:11 [ doplasma::yprev#2 doplasma::yprev#4 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:12 [ doplasma::i1#2 doplasma::i1#1 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:13 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] : zp ZP_BYTE:13 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:14 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:15 [ doplasma::i2#2 doplasma::i2#1 ] : zp ZP_BYTE:15 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:16 [ makecharset::c#2 makecharset::c#1 ] : zp ZP_WORD:16 , -Potential registers zp ZP_WORD:18 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] : zp ZP_WORD:18 , -Potential registers zp ZP_BYTE:20 [ makecharset::i#2 makecharset::i#1 ] : zp ZP_BYTE:20 , reg byte x , -Potential registers zp ZP_BYTE:21 [ makecharset::ii#2 makecharset::ii#1 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:22 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:23 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:23 , -Potential registers zp ZP_BYTE:25 [ doplasma::val#0 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:26 [ doplasma::val#1 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:27 [ doplasma::val#5 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:28 [ doplasma::val#7 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:29 [ doplasma::val#10 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:30 [ doplasma::val#11 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:31 [ doplasma::val#13 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:32 [ doplasma::val#15 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:33 [ doplasma::val#17 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:34 [ doplasma::val#19 ] : zp ZP_BYTE:34 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:35 [ doplasma::val#21 ] : zp ZP_BYTE:35 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:36 [ doplasma::val#23 ] : zp ZP_BYTE:36 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:37 [ doplasma::val#25 ] : zp ZP_BYTE:37 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:38 [ doplasma::val#27 ] : zp ZP_BYTE:38 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:39 [ doplasma::val#29 ] : zp ZP_BYTE:39 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:40 [ doplasma::val#31 ] : zp ZP_BYTE:40 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:41 [ doplasma::val#33 ] : zp ZP_BYTE:41 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:42 [ doplasma::val#35 ] : zp ZP_BYTE:42 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:43 [ doplasma::val#37 ] : zp ZP_BYTE:43 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:44 [ doplasma::val#39 ] : zp ZP_BYTE:44 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:45 [ doplasma::val#41 ] : zp ZP_BYTE:45 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:46 [ doplasma::val#43 ] : zp ZP_BYTE:46 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:47 [ doplasma::val#45 ] : zp ZP_BYTE:47 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:48 [ doplasma::val#47 ] : zp ZP_BYTE:48 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:49 [ doplasma::val#49 ] : zp ZP_BYTE:49 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:50 [ doplasma::val#51 ] : zp ZP_BYTE:50 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:51 [ doplasma::$4 ] : zp ZP_BYTE:51 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:52 [ doplasma::yval#0 ] : zp ZP_BYTE:52 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:53 [ doplasma::$2 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:11 [ doplasma::yprev#4 doplasma::yprev#6 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:12 [ doplasma::i1#4 doplasma::i1#1 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:13 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] : zp ZP_BYTE:13 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:14 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:15 [ doplasma::i2#11 doplasma::i2#1 ] : zp ZP_BYTE:15 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:16 [ makecharset::c#16 makecharset::c#1 ] : zp ZP_WORD:16 , +Potential registers zp ZP_WORD:18 [ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] : zp ZP_WORD:18 , +Potential registers zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] : zp ZP_BYTE:20 , reg byte x , +Potential registers zp ZP_BYTE:21 [ makecharset::ii#10 makecharset::ii#1 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:22 [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:23 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:23 , +Potential registers zp ZP_BYTE:25 [ doplasma::yprev#2 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:26 [ doplasma::$2 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:27 [ doplasma::$4 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:28 [ doplasma::val#0 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:29 [ doplasma::val#1 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:30 [ doplasma::val#7 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:31 [ doplasma::val#10 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:32 [ doplasma::val#11 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:33 [ doplasma::val#13 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:34 [ doplasma::val#15 ] : zp ZP_BYTE:34 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:35 [ doplasma::val#17 ] : zp ZP_BYTE:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:36 [ doplasma::val#19 ] : zp ZP_BYTE:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:37 [ doplasma::val#21 ] : zp ZP_BYTE:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:38 [ doplasma::val#23 ] : zp ZP_BYTE:38 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:39 [ doplasma::val#25 ] : zp ZP_BYTE:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:40 [ doplasma::val#27 ] : zp ZP_BYTE:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:41 [ doplasma::val#29 ] : zp ZP_BYTE:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:42 [ doplasma::val#31 ] : zp ZP_BYTE:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:43 [ doplasma::val#33 ] : zp ZP_BYTE:43 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:44 [ doplasma::val#35 ] : zp ZP_BYTE:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:45 [ doplasma::val#37 ] : zp ZP_BYTE:45 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:46 [ doplasma::val#39 ] : zp ZP_BYTE:46 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:47 [ doplasma::val#41 ] : zp ZP_BYTE:47 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:48 [ doplasma::val#43 ] : zp ZP_BYTE:48 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:49 [ doplasma::val#45 ] : zp ZP_BYTE:49 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:50 [ doplasma::val#47 ] : zp ZP_BYTE:50 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:51 [ doplasma::val#49 ] : zp ZP_BYTE:51 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:52 [ doplasma::val#51 ] : zp ZP_BYTE:52 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:53 [ doplasma::val#53 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:54 [ makecharset::$3 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:55 [ makecharset::s#0 ] : zp ZP_BYTE:55 , reg byte x , -Potential registers zp ZP_BYTE:56 [ makecharset::$12 ] : zp ZP_BYTE:56 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:57 [ makecharset::$10 ] : zp ZP_WORD:57 , -Potential registers zp ZP_WORD:59 [ makecharset::$11 ] : zp ZP_WORD:59 , -Potential registers zp ZP_WORD:61 [ makecharset::$16 ] : zp ZP_WORD:61 , -Potential registers zp ZP_BYTE:63 [ sid_rnd::return#2 ] : zp ZP_BYTE:63 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:64 [ makecharset::$6 ] : zp ZP_BYTE:64 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:65 [ makecharset::$7 ] : zp ZP_BYTE:65 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:56 [ sid_rnd::return#2 ] : zp ZP_BYTE:56 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:57 [ makecharset::$6 ] : zp ZP_BYTE:57 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:58 [ makecharset::$7 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:59 [ makecharset::$10 ] : zp ZP_WORD:59 , +Potential registers zp ZP_WORD:61 [ makecharset::$11 ] : zp ZP_WORD:61 , +Potential registers zp ZP_WORD:63 [ makecharset::$16 ] : zp ZP_WORD:63 , +Potential registers zp ZP_BYTE:65 [ makecharset::$12 ] : zp ZP_BYTE:65 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:66 [ sid_rnd::return#0 ] : zp ZP_BYTE:66 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [makecharset] 3,785.68: zp ZP_BYTE:22 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] 2,402.4: zp ZP_BYTE:21 [ makecharset::ii#2 makecharset::ii#1 ] 2,002: zp ZP_BYTE:64 [ makecharset::$6 ] 2,002: zp ZP_BYTE:65 [ makecharset::$7 ] 225.76: zp ZP_BYTE:20 [ makecharset::i#2 makecharset::i#1 ] 202: zp ZP_WORD:57 [ makecharset::$10 ] 202: zp ZP_WORD:59 [ makecharset::$11 ] 202: zp ZP_WORD:61 [ makecharset::$16 ] 53.26: zp ZP_BYTE:55 [ makecharset::s#0 ] 27.78: zp ZP_WORD:16 [ makecharset::c#2 makecharset::c#1 ] 22: zp ZP_BYTE:54 [ makecharset::$3 ] 22: zp ZP_BYTE:56 [ makecharset::$12 ] -Uplift Scope [doplasma] 269.33: zp ZP_BYTE:11 [ doplasma::yprev#2 doplasma::yprev#4 ] 269.33: zp ZP_BYTE:12 [ doplasma::i1#2 doplasma::i1#1 ] 257.26: zp ZP_BYTE:15 [ doplasma::i2#2 doplasma::i2#1 ] 202: zp ZP_BYTE:25 [ doplasma::val#0 ] 202: zp ZP_BYTE:50 [ doplasma::val#51 ] 202: zp ZP_BYTE:51 [ doplasma::$4 ] 202: zp ZP_BYTE:53 [ doplasma::$2 ] 166: zp ZP_BYTE:14 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] 158.71: zp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] 151.5: zp ZP_BYTE:26 [ doplasma::val#1 ] 151.5: zp ZP_BYTE:27 [ doplasma::val#5 ] 151.5: zp ZP_BYTE:28 [ doplasma::val#7 ] 151.5: zp ZP_BYTE:29 [ doplasma::val#10 ] 151.5: zp ZP_BYTE:30 [ doplasma::val#11 ] 151.5: zp ZP_BYTE:31 [ doplasma::val#13 ] 151.5: zp ZP_BYTE:32 [ doplasma::val#15 ] 151.5: zp ZP_BYTE:33 [ doplasma::val#17 ] 151.5: zp ZP_BYTE:34 [ doplasma::val#19 ] 151.5: zp ZP_BYTE:35 [ doplasma::val#21 ] 151.5: zp ZP_BYTE:36 [ doplasma::val#23 ] 151.5: zp ZP_BYTE:37 [ doplasma::val#25 ] 151.5: zp ZP_BYTE:38 [ doplasma::val#27 ] 151.5: zp ZP_BYTE:39 [ doplasma::val#29 ] 151.5: zp ZP_BYTE:40 [ doplasma::val#31 ] 151.5: zp ZP_BYTE:41 [ doplasma::val#33 ] 151.5: zp ZP_BYTE:42 [ doplasma::val#35 ] 151.5: zp ZP_BYTE:43 [ doplasma::val#37 ] 151.5: zp ZP_BYTE:44 [ doplasma::val#39 ] 151.5: zp ZP_BYTE:45 [ doplasma::val#41 ] 151.5: zp ZP_BYTE:46 [ doplasma::val#43 ] 151.5: zp ZP_BYTE:47 [ doplasma::val#45 ] 151.5: zp ZP_BYTE:48 [ doplasma::val#47 ] 151.5: zp ZP_BYTE:49 [ doplasma::val#49 ] 145.58: zp ZP_BYTE:13 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] 122.17: zp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] 113.5: zp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] 50.5: zp ZP_BYTE:52 [ doplasma::yval#0 ] -Uplift Scope [sid_rnd] 2,002: zp ZP_BYTE:63 [ sid_rnd::return#2 ] 334.33: zp ZP_BYTE:66 [ sid_rnd::return#0 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:23 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [makecharset] 3,019.83: zp ZP_BYTE:22 [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] 2,002: zp ZP_BYTE:57 [ makecharset::$6 ] 2,002: zp ZP_BYTE:58 [ makecharset::$7 ] 1,876.88: zp ZP_BYTE:21 [ makecharset::ii#10 makecharset::ii#1 ] 202: zp ZP_WORD:59 [ makecharset::$10 ] 202: zp ZP_WORD:61 [ makecharset::$11 ] 202: zp ZP_WORD:63 [ makecharset::$16 ] 171.7: zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] 56.22: zp ZP_BYTE:55 [ makecharset::s#0 ] 22.3: zp ZP_WORD:16 [ makecharset::c#16 makecharset::c#1 ] 22: zp ZP_BYTE:54 [ makecharset::$3 ] 22: zp ZP_BYTE:65 [ makecharset::$12 ] +Uplift Scope [doplasma] 303: zp ZP_BYTE:11 [ doplasma::yprev#4 doplasma::yprev#6 ] 212.1: zp ZP_BYTE:12 [ doplasma::i1#4 doplasma::i1#1 ] 205.88: zp ZP_BYTE:15 [ doplasma::i2#11 doplasma::i2#1 ] 202: zp ZP_BYTE:26 [ doplasma::$2 ] 202: zp ZP_BYTE:27 [ doplasma::$4 ] 202: zp ZP_BYTE:28 [ doplasma::val#0 ] 202: zp ZP_BYTE:53 [ doplasma::val#53 ] 154.17: zp ZP_BYTE:13 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] 151.5: zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] 151.5: zp ZP_BYTE:29 [ doplasma::val#1 ] 151.5: zp ZP_BYTE:30 [ doplasma::val#7 ] 151.5: zp ZP_BYTE:31 [ doplasma::val#10 ] 151.5: zp ZP_BYTE:32 [ doplasma::val#11 ] 151.5: zp ZP_BYTE:33 [ doplasma::val#13 ] 151.5: zp ZP_BYTE:34 [ doplasma::val#15 ] 151.5: zp ZP_BYTE:35 [ doplasma::val#17 ] 151.5: zp ZP_BYTE:36 [ doplasma::val#19 ] 151.5: zp ZP_BYTE:37 [ doplasma::val#21 ] 151.5: zp ZP_BYTE:38 [ doplasma::val#23 ] 151.5: zp ZP_BYTE:39 [ doplasma::val#25 ] 151.5: zp ZP_BYTE:40 [ doplasma::val#27 ] 151.5: zp ZP_BYTE:41 [ doplasma::val#29 ] 151.5: zp ZP_BYTE:42 [ doplasma::val#31 ] 151.5: zp ZP_BYTE:43 [ doplasma::val#33 ] 151.5: zp ZP_BYTE:44 [ doplasma::val#35 ] 151.5: zp ZP_BYTE:45 [ doplasma::val#37 ] 151.5: zp ZP_BYTE:46 [ doplasma::val#39 ] 151.5: zp ZP_BYTE:47 [ doplasma::val#41 ] 151.5: zp ZP_BYTE:48 [ doplasma::val#43 ] 151.5: zp ZP_BYTE:49 [ doplasma::val#45 ] 151.5: zp ZP_BYTE:50 [ doplasma::val#47 ] 151.5: zp ZP_BYTE:51 [ doplasma::val#49 ] 151.5: zp ZP_BYTE:52 [ doplasma::val#51 ] 147.58: zp ZP_BYTE:14 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] 118.65: zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] 115.5: zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] 43.29: zp ZP_BYTE:25 [ doplasma::yprev#2 ] +Uplift Scope [sid_rnd] 2,002: zp ZP_BYTE:56 [ sid_rnd::return#2 ] 334.33: zp ZP_BYTE:66 [ sid_rnd::return#0 ] +Uplift Scope [memset] 33: zp ZP_WORD:23 [ memset::dst#4 memset::dst#1 ] Uplift Scope [main] 33: zp ZP_WORD:2 [ main::col#2 main::col#1 ] -Uplift Scope [] 21.83: zp ZP_WORD:18 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] 1.34: zp ZP_BYTE:4 [ c1A#1 c1A#3 ] 1.26: zp ZP_BYTE:5 [ c1B#1 c1B#3 ] 0.85: zp ZP_BYTE:6 [ c2A#1 c2A#3 ] 0.83: zp ZP_BYTE:7 [ c2B#1 c2B#3 ] +Uplift Scope [] 16.42: zp ZP_WORD:18 [ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] 1.34: zp ZP_BYTE:4 [ c1A#1 c1A#3 ] 1.26: zp ZP_BYTE:5 [ c1B#1 c1B#3 ] 0.85: zp ZP_BYTE:6 [ c2A#1 c2A#3 ] 0.83: zp ZP_BYTE:7 [ c2B#1 c2B#3 ] Uplift Scope [RADIX] Uplift Scope [print_char] Uplift Scope [print_cls] Uplift Scope [sid_rnd_init] -Uplifting [makecharset] best 168084 combination reg byte y [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] reg byte x [ makecharset::ii#2 makecharset::ii#1 ] reg byte a [ makecharset::$6 ] zp ZP_BYTE:65 [ makecharset::$7 ] zp ZP_BYTE:20 [ makecharset::i#2 makecharset::i#1 ] zp ZP_WORD:57 [ makecharset::$10 ] zp ZP_WORD:59 [ makecharset::$11 ] zp ZP_WORD:61 [ makecharset::$16 ] zp ZP_BYTE:55 [ makecharset::s#0 ] zp ZP_WORD:16 [ makecharset::c#2 makecharset::c#1 ] zp ZP_BYTE:54 [ makecharset::$3 ] zp ZP_BYTE:56 [ makecharset::$12 ] +Uplifting [makecharset] best 169344 combination reg byte y [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] reg byte a [ makecharset::$6 ] zp ZP_BYTE:58 [ makecharset::$7 ] reg byte x [ makecharset::ii#10 makecharset::ii#1 ] zp ZP_WORD:59 [ makecharset::$10 ] zp ZP_WORD:61 [ makecharset::$11 ] zp ZP_WORD:63 [ makecharset::$16 ] zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] zp ZP_BYTE:55 [ makecharset::s#0 ] zp ZP_WORD:16 [ makecharset::c#16 makecharset::c#1 ] zp ZP_BYTE:54 [ makecharset::$3 ] zp ZP_BYTE:65 [ makecharset::$12 ] Limited combination testing to 100 combinations of 9216 possible. -Uplifting [sid_rnd] best 159081 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] -Uplifting [memset] best 159081 combination zp ZP_WORD:23 [ memset::dst#2 memset::dst#1 ] -Uplifting [main] best 159081 combination zp ZP_WORD:2 [ main::col#2 main::col#1 ] -Uplifting [] best 159081 combination zp ZP_WORD:18 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] zp ZP_BYTE:4 [ c1A#1 c1A#3 ] zp ZP_BYTE:5 [ c1B#1 c1B#3 ] zp ZP_BYTE:6 [ c2A#1 c2A#3 ] zp ZP_BYTE:7 [ c2B#1 c2B#3 ] -Uplifting [RADIX] best 159081 combination -Uplifting [print_char] best 159081 combination -Uplifting [print_cls] best 159081 combination -Uplifting [sid_rnd_init] best 159081 combination -Attempting to uplift remaining variables inzp ZP_BYTE:65 [ makecharset::$7 ] -Uplifting [makecharset] best 159081 combination zp ZP_BYTE:65 [ makecharset::$7 ] -Attempting to uplift remaining variables inzp ZP_BYTE:11 [ doplasma::yprev#2 doplasma::yprev#4 ] -Uplifting [doplasma] best 158581 combination reg byte x [ doplasma::yprev#2 doplasma::yprev#4 ] -Attempting to uplift remaining variables inzp ZP_BYTE:12 [ doplasma::i1#2 doplasma::i1#1 ] -Uplifting [doplasma] best 158581 combination zp ZP_BYTE:12 [ doplasma::i1#2 doplasma::i1#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:15 [ doplasma::i2#2 doplasma::i2#1 ] -Uplifting [doplasma] best 149881 combination reg byte x [ doplasma::i2#2 doplasma::i2#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:20 [ makecharset::i#2 makecharset::i#1 ] -Uplifting [makecharset] best 149881 combination zp ZP_BYTE:20 [ makecharset::i#2 makecharset::i#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:25 [ doplasma::val#0 ] -Uplifting [doplasma] best 149281 combination reg byte a [ doplasma::val#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:50 [ doplasma::val#51 ] -Uplifting [doplasma] best 148681 combination reg byte a [ doplasma::val#51 ] -Attempting to uplift remaining variables inzp ZP_BYTE:51 [ doplasma::$4 ] -Uplifting [doplasma] best 148081 combination reg byte a [ doplasma::$4 ] -Attempting to uplift remaining variables inzp ZP_BYTE:53 [ doplasma::$2 ] -Uplifting [doplasma] best 147481 combination reg byte a [ doplasma::$2 ] -Attempting to uplift remaining variables inzp ZP_BYTE:14 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -Uplifting [doplasma] best 147481 combination zp ZP_BYTE:14 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] -Uplifting [doplasma] best 147481 combination zp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:26 [ doplasma::val#1 ] -Uplifting [doplasma] best 146581 combination reg byte a [ doplasma::val#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:27 [ doplasma::val#5 ] -Uplifting [doplasma] best 145681 combination reg byte a [ doplasma::val#5 ] -Attempting to uplift remaining variables inzp ZP_BYTE:28 [ doplasma::val#7 ] -Uplifting [doplasma] best 144781 combination reg byte a [ doplasma::val#7 ] -Attempting to uplift remaining variables inzp ZP_BYTE:29 [ doplasma::val#10 ] -Uplifting [doplasma] best 143881 combination reg byte a [ doplasma::val#10 ] -Attempting to uplift remaining variables inzp ZP_BYTE:30 [ doplasma::val#11 ] -Uplifting [doplasma] best 142981 combination reg byte a [ doplasma::val#11 ] -Attempting to uplift remaining variables inzp ZP_BYTE:31 [ doplasma::val#13 ] -Uplifting [doplasma] best 142081 combination reg byte a [ doplasma::val#13 ] -Attempting to uplift remaining variables inzp ZP_BYTE:32 [ doplasma::val#15 ] -Uplifting [doplasma] best 141181 combination reg byte a [ doplasma::val#15 ] -Attempting to uplift remaining variables inzp ZP_BYTE:33 [ doplasma::val#17 ] -Uplifting [doplasma] best 140281 combination reg byte a [ doplasma::val#17 ] -Attempting to uplift remaining variables inzp ZP_BYTE:34 [ doplasma::val#19 ] -Uplifting [doplasma] best 139381 combination reg byte a [ doplasma::val#19 ] -Attempting to uplift remaining variables inzp ZP_BYTE:35 [ doplasma::val#21 ] -Uplifting [doplasma] best 138481 combination reg byte a [ doplasma::val#21 ] -Attempting to uplift remaining variables inzp ZP_BYTE:36 [ doplasma::val#23 ] -Uplifting [doplasma] best 137581 combination reg byte a [ doplasma::val#23 ] -Attempting to uplift remaining variables inzp ZP_BYTE:37 [ doplasma::val#25 ] -Uplifting [doplasma] best 136681 combination reg byte a [ doplasma::val#25 ] -Attempting to uplift remaining variables inzp ZP_BYTE:38 [ doplasma::val#27 ] -Uplifting [doplasma] best 135781 combination reg byte a [ doplasma::val#27 ] -Attempting to uplift remaining variables inzp ZP_BYTE:39 [ doplasma::val#29 ] -Uplifting [doplasma] best 134881 combination reg byte a [ doplasma::val#29 ] -Attempting to uplift remaining variables inzp ZP_BYTE:40 [ doplasma::val#31 ] -Uplifting [doplasma] best 133981 combination reg byte a [ doplasma::val#31 ] -Attempting to uplift remaining variables inzp ZP_BYTE:41 [ doplasma::val#33 ] -Uplifting [doplasma] best 133081 combination reg byte a [ doplasma::val#33 ] -Attempting to uplift remaining variables inzp ZP_BYTE:42 [ doplasma::val#35 ] -Uplifting [doplasma] best 132181 combination reg byte a [ doplasma::val#35 ] -Attempting to uplift remaining variables inzp ZP_BYTE:43 [ doplasma::val#37 ] -Uplifting [doplasma] best 131281 combination reg byte a [ doplasma::val#37 ] -Attempting to uplift remaining variables inzp ZP_BYTE:44 [ doplasma::val#39 ] -Uplifting [doplasma] best 130381 combination reg byte a [ doplasma::val#39 ] -Attempting to uplift remaining variables inzp ZP_BYTE:45 [ doplasma::val#41 ] -Uplifting [doplasma] best 129481 combination reg byte a [ doplasma::val#41 ] -Attempting to uplift remaining variables inzp ZP_BYTE:46 [ doplasma::val#43 ] -Uplifting [doplasma] best 128581 combination reg byte a [ doplasma::val#43 ] -Attempting to uplift remaining variables inzp ZP_BYTE:47 [ doplasma::val#45 ] -Uplifting [doplasma] best 127681 combination reg byte a [ doplasma::val#45 ] -Attempting to uplift remaining variables inzp ZP_BYTE:48 [ doplasma::val#47 ] -Uplifting [doplasma] best 126781 combination reg byte a [ doplasma::val#47 ] -Attempting to uplift remaining variables inzp ZP_BYTE:49 [ doplasma::val#49 ] -Uplifting [doplasma] best 125881 combination reg byte a [ doplasma::val#49 ] -Attempting to uplift remaining variables inzp ZP_BYTE:13 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -Uplifting [doplasma] best 125881 combination zp ZP_BYTE:13 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -Uplifting [doplasma] best 125881 combination zp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -Uplifting [doplasma] best 125881 combination zp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] +Uplifting [sid_rnd] best 160341 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] +Uplifting [memset] best 160341 combination zp ZP_WORD:23 [ memset::dst#4 memset::dst#1 ] +Uplifting [main] best 160341 combination zp ZP_WORD:2 [ main::col#2 main::col#1 ] +Uplifting [] best 160341 combination zp ZP_WORD:18 [ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] zp ZP_BYTE:4 [ c1A#1 c1A#3 ] zp ZP_BYTE:5 [ c1B#1 c1B#3 ] zp ZP_BYTE:6 [ c2A#1 c2A#3 ] zp ZP_BYTE:7 [ c2B#1 c2B#3 ] +Uplifting [RADIX] best 160341 combination +Uplifting [print_char] best 160341 combination +Uplifting [print_cls] best 160341 combination +Uplifting [sid_rnd_init] best 160341 combination +Attempting to uplift remaining variables inzp ZP_BYTE:58 [ makecharset::$7 ] +Uplifting [makecharset] best 160341 combination zp ZP_BYTE:58 [ makecharset::$7 ] +Attempting to uplift remaining variables inzp ZP_BYTE:11 [ doplasma::yprev#4 doplasma::yprev#6 ] +Uplifting [doplasma] best 159841 combination reg byte x [ doplasma::yprev#4 doplasma::yprev#6 ] +Attempting to uplift remaining variables inzp ZP_BYTE:12 [ doplasma::i1#4 doplasma::i1#1 ] +Uplifting [doplasma] best 159841 combination zp ZP_BYTE:12 [ doplasma::i1#4 doplasma::i1#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:15 [ doplasma::i2#11 doplasma::i2#1 ] +Uplifting [doplasma] best 151141 combination reg byte x [ doplasma::i2#11 doplasma::i2#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:26 [ doplasma::$2 ] +Uplifting [doplasma] best 150541 combination reg byte a [ doplasma::$2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:27 [ doplasma::$4 ] +Uplifting [doplasma] best 149941 combination reg byte a [ doplasma::$4 ] +Attempting to uplift remaining variables inzp ZP_BYTE:28 [ doplasma::val#0 ] +Uplifting [doplasma] best 149341 combination reg byte a [ doplasma::val#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:53 [ doplasma::val#53 ] +Uplifting [doplasma] best 148741 combination reg byte a [ doplasma::val#53 ] +Attempting to uplift remaining variables inzp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] +Uplifting [makecharset] best 148741 combination zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:13 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +Uplifting [doplasma] best 148741 combination zp ZP_BYTE:13 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] +Uplifting [doplasma] best 148741 combination zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:29 [ doplasma::val#1 ] +Uplifting [doplasma] best 147841 combination reg byte a [ doplasma::val#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:30 [ doplasma::val#7 ] +Uplifting [doplasma] best 146941 combination reg byte a [ doplasma::val#7 ] +Attempting to uplift remaining variables inzp ZP_BYTE:31 [ doplasma::val#10 ] +Uplifting [doplasma] best 146041 combination reg byte a [ doplasma::val#10 ] +Attempting to uplift remaining variables inzp ZP_BYTE:32 [ doplasma::val#11 ] +Uplifting [doplasma] best 145141 combination reg byte a [ doplasma::val#11 ] +Attempting to uplift remaining variables inzp ZP_BYTE:33 [ doplasma::val#13 ] +Uplifting [doplasma] best 144241 combination reg byte a [ doplasma::val#13 ] +Attempting to uplift remaining variables inzp ZP_BYTE:34 [ doplasma::val#15 ] +Uplifting [doplasma] best 143341 combination reg byte a [ doplasma::val#15 ] +Attempting to uplift remaining variables inzp ZP_BYTE:35 [ doplasma::val#17 ] +Uplifting [doplasma] best 142441 combination reg byte a [ doplasma::val#17 ] +Attempting to uplift remaining variables inzp ZP_BYTE:36 [ doplasma::val#19 ] +Uplifting [doplasma] best 141541 combination reg byte a [ doplasma::val#19 ] +Attempting to uplift remaining variables inzp ZP_BYTE:37 [ doplasma::val#21 ] +Uplifting [doplasma] best 140641 combination reg byte a [ doplasma::val#21 ] +Attempting to uplift remaining variables inzp ZP_BYTE:38 [ doplasma::val#23 ] +Uplifting [doplasma] best 139741 combination reg byte a [ doplasma::val#23 ] +Attempting to uplift remaining variables inzp ZP_BYTE:39 [ doplasma::val#25 ] +Uplifting [doplasma] best 138841 combination reg byte a [ doplasma::val#25 ] +Attempting to uplift remaining variables inzp ZP_BYTE:40 [ doplasma::val#27 ] +Uplifting [doplasma] best 137941 combination reg byte a [ doplasma::val#27 ] +Attempting to uplift remaining variables inzp ZP_BYTE:41 [ doplasma::val#29 ] +Uplifting [doplasma] best 137041 combination reg byte a [ doplasma::val#29 ] +Attempting to uplift remaining variables inzp ZP_BYTE:42 [ doplasma::val#31 ] +Uplifting [doplasma] best 136141 combination reg byte a [ doplasma::val#31 ] +Attempting to uplift remaining variables inzp ZP_BYTE:43 [ doplasma::val#33 ] +Uplifting [doplasma] best 135241 combination reg byte a [ doplasma::val#33 ] +Attempting to uplift remaining variables inzp ZP_BYTE:44 [ doplasma::val#35 ] +Uplifting [doplasma] best 134341 combination reg byte a [ doplasma::val#35 ] +Attempting to uplift remaining variables inzp ZP_BYTE:45 [ doplasma::val#37 ] +Uplifting [doplasma] best 133441 combination reg byte a [ doplasma::val#37 ] +Attempting to uplift remaining variables inzp ZP_BYTE:46 [ doplasma::val#39 ] +Uplifting [doplasma] best 132541 combination reg byte a [ doplasma::val#39 ] +Attempting to uplift remaining variables inzp ZP_BYTE:47 [ doplasma::val#41 ] +Uplifting [doplasma] best 131641 combination reg byte a [ doplasma::val#41 ] +Attempting to uplift remaining variables inzp ZP_BYTE:48 [ doplasma::val#43 ] +Uplifting [doplasma] best 130741 combination reg byte a [ doplasma::val#43 ] +Attempting to uplift remaining variables inzp ZP_BYTE:49 [ doplasma::val#45 ] +Uplifting [doplasma] best 129841 combination reg byte a [ doplasma::val#45 ] +Attempting to uplift remaining variables inzp ZP_BYTE:50 [ doplasma::val#47 ] +Uplifting [doplasma] best 128941 combination reg byte a [ doplasma::val#47 ] +Attempting to uplift remaining variables inzp ZP_BYTE:51 [ doplasma::val#49 ] +Uplifting [doplasma] best 128041 combination reg byte a [ doplasma::val#49 ] +Attempting to uplift remaining variables inzp ZP_BYTE:52 [ doplasma::val#51 ] +Uplifting [doplasma] best 127141 combination reg byte a [ doplasma::val#51 ] +Attempting to uplift remaining variables inzp ZP_BYTE:14 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +Uplifting [doplasma] best 127141 combination zp ZP_BYTE:14 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +Uplifting [doplasma] best 127141 combination zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +Uplifting [doplasma] best 127141 combination zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:55 [ makecharset::s#0 ] -Uplifting [makecharset] best 125881 combination zp ZP_BYTE:55 [ makecharset::s#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:52 [ doplasma::yval#0 ] -Uplifting [doplasma] best 125881 combination zp ZP_BYTE:52 [ doplasma::yval#0 ] +Uplifting [makecharset] best 127141 combination zp ZP_BYTE:55 [ makecharset::s#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:25 [ doplasma::yprev#2 ] +Uplifting [doplasma] best 127141 combination zp ZP_BYTE:25 [ doplasma::yprev#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:54 [ makecharset::$3 ] -Uplifting [makecharset] best 125841 combination reg byte a [ makecharset::$3 ] -Attempting to uplift remaining variables inzp ZP_BYTE:56 [ makecharset::$12 ] -Uplifting [makecharset] best 125781 combination reg byte a [ makecharset::$12 ] +Uplifting [makecharset] best 127101 combination reg byte a [ makecharset::$3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:65 [ makecharset::$12 ] +Uplifting [makecharset] best 127041 combination reg byte a [ makecharset::$12 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ c1A#1 c1A#3 ] -Uplifting [] best 125781 combination zp ZP_BYTE:4 [ c1A#1 c1A#3 ] +Uplifting [] best 127041 combination zp ZP_BYTE:4 [ c1A#1 c1A#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ c1B#1 c1B#3 ] -Uplifting [] best 125781 combination zp ZP_BYTE:5 [ c1B#1 c1B#3 ] +Uplifting [] best 127041 combination zp ZP_BYTE:5 [ c1B#1 c1B#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ c2A#1 c2A#3 ] -Uplifting [] best 125781 combination zp ZP_BYTE:6 [ c2A#1 c2A#3 ] +Uplifting [] best 127041 combination zp ZP_BYTE:6 [ c2A#1 c2A#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:7 [ c2B#1 c2B#3 ] -Uplifting [] best 125781 combination zp ZP_BYTE:7 [ c2B#1 c2B#3 ] -Coalescing zero page register [ zp ZP_WORD:57 [ makecharset::$10 ] ] with [ zp ZP_WORD:59 [ makecharset::$11 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:57 [ makecharset::$10 makecharset::$11 ] ] with [ zp ZP_WORD:61 [ makecharset::$16 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:16 [ makecharset::c#2 makecharset::c#1 ] ] with [ zp ZP_WORD:2 [ main::col#2 main::col#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:20 [ makecharset::i#2 makecharset::i#1 ] ] with [ zp ZP_BYTE:4 [ c1A#1 c1A#3 ] ] -Coalescing zero page register [ zp ZP_WORD:23 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:18 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] ] +Uplifting [] best 127041 combination zp ZP_BYTE:7 [ c2B#1 c2B#3 ] +Coalescing zero page register [ zp ZP_WORD:59 [ makecharset::$10 ] ] with [ zp ZP_WORD:61 [ makecharset::$11 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:59 [ makecharset::$10 makecharset::$11 ] ] with [ zp ZP_WORD:63 [ makecharset::$16 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:16 [ makecharset::c#16 makecharset::c#1 ] ] with [ zp ZP_WORD:2 [ main::col#2 main::col#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] ] with [ zp ZP_BYTE:4 [ c1A#1 c1A#3 ] ] +Coalescing zero page register [ zp ZP_WORD:23 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:18 [ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] ] Coalescing zero page register [ zp ZP_BYTE:55 [ makecharset::s#0 ] ] with [ zp ZP_BYTE:5 [ c1B#1 c1B#3 ] ] -Coalescing zero page register [ zp ZP_BYTE:65 [ makecharset::$7 ] ] with [ zp ZP_BYTE:6 [ c2A#1 c2A#3 ] ] +Coalescing zero page register [ zp ZP_BYTE:58 [ makecharset::$7 ] ] with [ zp ZP_BYTE:6 [ c2A#1 c2A#3 ] ] Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:2 [ c2B#1 c2B#3 ] -Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:3 [ doplasma::i#2 doplasma::i#1 ] -Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:4 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -Allocated (was zp ZP_BYTE:10) zp ZP_BYTE:5 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -Allocated (was zp ZP_BYTE:12) zp ZP_BYTE:6 [ doplasma::i1#2 doplasma::i1#1 ] -Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:7 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:8 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -Allocated (was zp ZP_WORD:16) zp ZP_WORD:9 [ makecharset::c#2 makecharset::c#1 main::col#2 main::col#1 ] -Allocated (was zp ZP_BYTE:20) zp ZP_BYTE:11 [ makecharset::i#2 makecharset::i#1 c1A#1 c1A#3 ] -Allocated (was zp ZP_WORD:23) zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] -Allocated (was zp ZP_BYTE:52) zp ZP_BYTE:14 [ doplasma::yval#0 ] +Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:3 [ doplasma::i#4 doplasma::i#1 ] +Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:4 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +Allocated (was zp ZP_BYTE:10) zp ZP_BYTE:5 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +Allocated (was zp ZP_BYTE:12) zp ZP_BYTE:6 [ doplasma::i1#4 doplasma::i1#1 ] +Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:7 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:8 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +Allocated (was zp ZP_WORD:16) zp ZP_WORD:9 [ makecharset::c#16 makecharset::c#1 main::col#2 main::col#1 ] +Allocated (was zp ZP_BYTE:20) zp ZP_BYTE:11 [ makecharset::i#13 makecharset::i#1 c1A#1 c1A#3 ] +Allocated (was zp ZP_WORD:23) zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] +Allocated (was zp ZP_BYTE:25) zp ZP_BYTE:14 [ doplasma::yprev#2 ] Allocated (was zp ZP_BYTE:55) zp ZP_BYTE:15 [ makecharset::s#0 c1B#1 c1B#3 ] -Allocated (was zp ZP_WORD:57) zp ZP_WORD:16 [ makecharset::$10 makecharset::$11 makecharset::$16 ] -Allocated (was zp ZP_BYTE:65) zp ZP_BYTE:18 [ makecharset::$7 c2A#1 c2A#3 ] +Allocated (was zp ZP_BYTE:58) zp ZP_BYTE:16 [ makecharset::$7 c2A#1 c2A#3 ] +Allocated (was zp ZP_WORD:59) zp ZP_WORD:17 [ makecharset::$10 makecharset::$11 makecharset::$16 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -4704,7 +4817,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_char_cursor = $c .label c1A = $b .label c1B = $f - .label c2A = $12 + .label c2A = $10 .label c2B = 2 // @begin bbegin: @@ -4819,491 +4932,490 @@ main: { doplasma: { .label c1a = 4 .label c1b = 5 - .label yval = $e .label i = 3 .label c2a = 7 .label c2b = 8 .label i1 = 6 + .label yprev = $e // [18] (byte) doplasma::c1a#0 ← (byte) c1A#1 -- vbuz1=vbuz2 lda c1A sta c1a // [19] (byte) doplasma::c1b#0 ← (byte) c1B#1 -- vbuz1=vbuz2 lda c1B sta c1b - // [20] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1] - b1_from_doplasma: - // [20] phi (byte) doplasma::yprev#2 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuxx=vbuc1 + // [20] phi from doplasma to doplasma::@2 [phi:doplasma->doplasma::@2] + b2_from_doplasma: + // [20] phi (byte) doplasma::yprev#4 = (byte) 0 [phi:doplasma->doplasma::@2#0] -- vbuxx=vbuc1 ldx #0 - // [20] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#1] -- register_copy - // [20] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#2] -- register_copy - // [20] phi (byte) doplasma::i#2 = (byte) 0 [phi:doplasma->doplasma::@1#3] -- vbuz1=vbuc1 + // [20] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@2#1] -- register_copy + // [20] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@2#2] -- register_copy + // [20] phi (byte) doplasma::i#4 = (byte) 0 [phi:doplasma->doplasma::@2#3] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // Calculate ybuff as a bunch of differences - // doplasma::@1 - b1: - // [21] if((byte) doplasma::i#2<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$19 - bcc b2 - jmp b3 - // doplasma::@3 - b3: - // [22] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 - lax c1A - axs #-[3] - stx c1A - // [23] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 - lax c1B - axs #5 - stx c1B - // [24] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 - lda c2A - sta c2a - // [25] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 - lda c2B - sta c2b - // [26] phi from doplasma::@3 to doplasma::@4 [phi:doplasma::@3->doplasma::@4] - b4_from_b3: - // [26] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@4#0] -- register_copy - // [26] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@4#1] -- register_copy - // [26] phi (byte) doplasma::i1#2 = (byte) 0 [phi:doplasma::@3->doplasma::@4#2] -- vbuz1=vbuc1 - lda #0 - sta i1 - jmp b4 - // doplasma::@4 - b4: - // [27] if((byte) doplasma::i1#2<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 - lda i1 - cmp #$28 - bcc b5 - jmp b6 - // doplasma::@6 - b6: - // [28] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2 -- vbuz1=vbuz1_plus_2 - lda c2A - clc - adc #2 - sta c2A - // [29] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 - lax c2B - axs #3 - stx c2B - // [30] phi from doplasma::@6 to doplasma::@7 [phi:doplasma::@6->doplasma::@7] - b7_from_b6: - // [30] phi (byte) doplasma::i2#2 = (byte) 0 [phi:doplasma::@6->doplasma::@7#0] -- vbuxx=vbuc1 - ldx #0 - jmp b7 - // doplasma::@7 - b7: - // [31] if((byte) doplasma::i2#2<(byte) $28) goto doplasma::@8 -- vbuxx_lt_vbuc1_then_la1 - cpx #$28 - bcc b8 - jmp breturn - // doplasma::@return - breturn: - // [32] return - rts - // doplasma::@8 - b8: - // [33] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) -- vbuaa=pbuc1_derefidx_vbuxx - // Find the first value on the row - lda xbuf,x - jmp b9 - // doplasma::@9 - b9: - // [34] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf - // [35] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1,x - jmp b17_1 - // doplasma::@17_1 - b17_1: - // [36] (byte) doplasma::val#5 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+1 - // [37] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#5 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+1*$28,x - jmp b17_2 - // doplasma::@17_2 - b17_2: - // [38] (byte) doplasma::val#7 ← (byte) doplasma::val#5 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+2 - // [39] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#7 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+2*$28,x - jmp b17_3 - // doplasma::@17_3 - b17_3: - // [40] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+3 - // [41] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+3*$28,x - jmp b17_4 - // doplasma::@17_4 - b17_4: - // [42] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+4 - // [43] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#11 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+4*$28,x - jmp b17_5 - // doplasma::@17_5 - b17_5: - // [44] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+5 - // [45] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#13 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+5*$28,x - jmp b17_6 - // doplasma::@17_6 - b17_6: - // [46] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+6 - // [47] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#15 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+6*$28,x - jmp b17_7 - // doplasma::@17_7 - b17_7: - // [48] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+7 - // [49] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#17 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+7*$28,x - jmp b17_8 - // doplasma::@17_8 - b17_8: - // [50] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+8 - // [51] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#19 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+8*$28,x - jmp b17_9 - // doplasma::@17_9 - b17_9: - // [52] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+9 - // [53] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#21 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+9*$28,x - jmp b17_10 - // doplasma::@17_10 - b17_10: - // [54] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$a - // [55] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#23 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$a*$28,x - jmp b17_11 - // doplasma::@17_11 - b17_11: - // [56] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$b - // [57] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#25 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$b*$28,x - jmp b17_12 - // doplasma::@17_12 - b17_12: - // [58] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$c - // [59] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#27 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$c*$28,x - jmp b17_13 - // doplasma::@17_13 - b17_13: - // [60] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$d - // [61] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#29 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$d*$28,x - jmp b17_14 - // doplasma::@17_14 - b17_14: - // [62] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$e - // [63] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#31 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$e*$28,x - jmp b17_15 - // doplasma::@17_15 - b17_15: - // [64] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$f - // [65] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#33 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$f*$28,x - jmp b17_16 - // doplasma::@17_16 - b17_16: - // [66] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$10 - // [67] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#35 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$10*$28,x - jmp b17_17 - // doplasma::@17_17 - b17_17: - // [68] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$11 - // [69] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#37 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$11*$28,x - jmp b17_18 - // doplasma::@17_18 - b17_18: - // [70] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$12 - // [71] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#39 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$12*$28,x - jmp b17_19 - // doplasma::@17_19 - b17_19: - // [72] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$13 - // [73] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#41 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$13*$28,x - jmp b17_20 - // doplasma::@17_20 - b17_20: - // [74] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$14 - // [75] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#43 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$14*$28,x - jmp b17_21 - // doplasma::@17_21 - b17_21: - // [76] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$15 - // [77] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#45 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$15*$28,x - jmp b17_22 - // doplasma::@17_22 - b17_22: - // [78] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$16 - // [79] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#47 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$16*$28,x - jmp b17_23 - // doplasma::@17_23 - b17_23: - // [80] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$17 - // [81] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#49 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$17*$28,x - jmp b17_24 - // doplasma::@17_24 - b17_24: - // [82] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$18 - // [83] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#51 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$18*$28,x - jmp b10 - // doplasma::@10 - b10: - // [84] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuxx=_inc_vbuxx - inx - // [30] phi from doplasma::@10 to doplasma::@7 [phi:doplasma::@10->doplasma::@7] - b7_from_b10: - // [30] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@10->doplasma::@7#0] -- register_copy - jmp b7 - // doplasma::@5 - b5: - // [85] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 - ldy c2a - lda SINTABLE,y - ldy c2b - clc - adc SINTABLE,y - // [86] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$4 -- pbuc1_derefidx_vbuz1=vbuaa - ldy i1 - sta xbuf,y - // [87] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 - lax c2a - axs #-[3] - stx c2a - // [88] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 - lax c2b - axs #-[7] - stx c2b - // [89] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 - inc i1 - // [26] phi from doplasma::@5 to doplasma::@4 [phi:doplasma::@5->doplasma::@4] - b4_from_b5: - // [26] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@5->doplasma::@4#0] -- register_copy - // [26] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@5->doplasma::@4#1] -- register_copy - // [26] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@5->doplasma::@4#2] -- register_copy - jmp b4 + jmp b2 // doplasma::@2 b2: - // [90] (byte) doplasma::yval#0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 + // [21] (byte) doplasma::yprev#2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 ldy c1a lda SINTABLE,y ldy c1b clc adc SINTABLE,y - sta yval - // [91] (byte~) doplasma::$2 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2 -- vbuaa=vbuz1_minus_vbuxx + sta yprev + // [22] (byte~) doplasma::$2 ← (byte) doplasma::yprev#2 - (byte) doplasma::yprev#4 -- vbuaa=vbuz1_minus_vbuxx txa eor #$ff sec - adc yval - // [92] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$2 -- pbuc1_derefidx_vbuz1=vbuaa + adc yprev + // [23] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#4) ← (byte~) doplasma::$2 -- pbuc1_derefidx_vbuz1=vbuaa ldy i sta ybuf,y - // [93] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 + // [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 lax c1a axs #-[4] stx c1a - // [94] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 + // [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 lax c1b axs #-[9] stx c1b - // [95] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 + // [26] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#4 -- vbuz1=_inc_vbuz1 inc i - // [96] (byte~) doplasma::yprev#4 ← (byte) doplasma::yval#0 -- vbuxx=vbuz1 - ldx yval - // [20] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1] - b1_from_b2: - // [20] phi (byte) doplasma::yprev#2 = (byte~) doplasma::yprev#4 [phi:doplasma::@2->doplasma::@1#0] -- register_copy - // [20] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@2->doplasma::@1#1] -- register_copy - // [20] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@2->doplasma::@1#2] -- register_copy - // [20] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@2->doplasma::@1#3] -- register_copy jmp b1 + // Calculate ybuff as a bunch of differences + // doplasma::@1 + b1: + // [27] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@11 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$19 + bcc b11 + jmp b3 + // doplasma::@3 + b3: + // [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + lax c1A + axs #-[3] + stx c1A + // [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 + lax c1B + axs #5 + stx c1B + // [30] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 + lda c2A + sta c2a + // [31] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 + lda c2B + sta c2b + // [32] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5] + b5_from_b3: + // [32] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@5#0] -- register_copy + // [32] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@5#1] -- register_copy + // [32] phi (byte) doplasma::i1#4 = (byte) 0 [phi:doplasma::@3->doplasma::@5#2] -- vbuz1=vbuc1 + lda #0 + sta i1 + jmp b5 + // [32] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5] + b5_from_b4: + // [32] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#1 [phi:doplasma::@4->doplasma::@5#0] -- register_copy + // [32] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#1 [phi:doplasma::@4->doplasma::@5#1] -- register_copy + // [32] phi (byte) doplasma::i1#4 = (byte) doplasma::i1#1 [phi:doplasma::@4->doplasma::@5#2] -- register_copy + jmp b5 + // doplasma::@5 + b5: + // [33] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 + ldy c2a + lda SINTABLE,y + ldy c2b + clc + adc SINTABLE,y + // [34] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#4) ← (byte~) doplasma::$4 -- pbuc1_derefidx_vbuz1=vbuaa + ldy i1 + sta xbuf,y + // [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + lax c2a + axs #-[3] + stx c2a + // [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 + lax c2b + axs #-[7] + stx c2b + // [37] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#4 -- vbuz1=_inc_vbuz1 + inc i1 + jmp b4 + // doplasma::@4 + b4: + // [38] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 + lda i1 + cmp #$28 + bcc b5_from_b4 + jmp b6 + // doplasma::@6 + b6: + // [39] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2 -- vbuz1=vbuz1_plus_2 + lda c2A + clc + adc #2 + sta c2A + // [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 + lax c2B + axs #3 + stx c2B + // [41] phi from doplasma::@6 to doplasma::@8 [phi:doplasma::@6->doplasma::@8] + b8_from_b6: + // [41] phi (byte) doplasma::i2#11 = (byte) 0 [phi:doplasma::@6->doplasma::@8#0] -- vbuxx=vbuc1 + ldx #0 + jmp b8 + // [41] phi from doplasma::@7 to doplasma::@8 [phi:doplasma::@7->doplasma::@8] + b8_from_b7: + // [41] phi (byte) doplasma::i2#11 = (byte) doplasma::i2#1 [phi:doplasma::@7->doplasma::@8#0] -- register_copy + jmp b8 + // doplasma::@8 + b8: + // [42] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#11) -- vbuaa=pbuc1_derefidx_vbuxx + // Find the first value on the row + lda xbuf,x + jmp b9 + // doplasma::@9 + b9: + // [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf + // [44] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#11) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1,x + jmp b17_1 + // doplasma::@17_1 + b17_1: + // [45] (byte) doplasma::val#7 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+1 + // [46] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#7 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+1*$28,x + jmp b17_2 + // doplasma::@17_2 + b17_2: + // [47] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+2 + // [48] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+2*$28,x + jmp b17_3 + // doplasma::@17_3 + b17_3: + // [49] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+3 + // [50] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#11 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+3*$28,x + jmp b17_4 + // doplasma::@17_4 + b17_4: + // [51] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+4 + // [52] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#13 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+4*$28,x + jmp b17_5 + // doplasma::@17_5 + b17_5: + // [53] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+5 + // [54] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#15 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+5*$28,x + jmp b17_6 + // doplasma::@17_6 + b17_6: + // [55] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+6 + // [56] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#17 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+6*$28,x + jmp b17_7 + // doplasma::@17_7 + b17_7: + // [57] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+7 + // [58] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#19 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+7*$28,x + jmp b17_8 + // doplasma::@17_8 + b17_8: + // [59] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+8 + // [60] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#21 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+8*$28,x + jmp b17_9 + // doplasma::@17_9 + b17_9: + // [61] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+9 + // [62] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#23 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+9*$28,x + jmp b17_10 + // doplasma::@17_10 + b17_10: + // [63] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$a + // [64] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#25 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$a*$28,x + jmp b17_11 + // doplasma::@17_11 + b17_11: + // [65] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$b + // [66] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#27 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$b*$28,x + jmp b17_12 + // doplasma::@17_12 + b17_12: + // [67] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$c + // [68] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#29 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$c*$28,x + jmp b17_13 + // doplasma::@17_13 + b17_13: + // [69] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$d + // [70] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#31 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$d*$28,x + jmp b17_14 + // doplasma::@17_14 + b17_14: + // [71] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$e + // [72] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#33 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$e*$28,x + jmp b17_15 + // doplasma::@17_15 + b17_15: + // [73] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$f + // [74] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#35 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$f*$28,x + jmp b17_16 + // doplasma::@17_16 + b17_16: + // [75] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$10 + // [76] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#37 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$10*$28,x + jmp b17_17 + // doplasma::@17_17 + b17_17: + // [77] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$11 + // [78] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#39 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$11*$28,x + jmp b17_18 + // doplasma::@17_18 + b17_18: + // [79] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$12 + // [80] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#41 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$12*$28,x + jmp b17_19 + // doplasma::@17_19 + b17_19: + // [81] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$13 + // [82] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#43 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$13*$28,x + jmp b17_20 + // doplasma::@17_20 + b17_20: + // [83] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$14 + // [84] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#45 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$14*$28,x + jmp b17_21 + // doplasma::@17_21 + b17_21: + // [85] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$15 + // [86] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#47 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$15*$28,x + jmp b17_22 + // doplasma::@17_22 + b17_22: + // [87] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$16 + // [88] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#49 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$16*$28,x + jmp b17_23 + // doplasma::@17_23 + b17_23: + // [89] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$17 + // [90] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#51 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$17*$28,x + jmp b17_24 + // doplasma::@17_24 + b17_24: + // [91] (byte) doplasma::val#53 ← (byte) doplasma::val#51 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$18 + // [92] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#53 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$18*$28,x + jmp b10 + // doplasma::@10 + b10: + // [93] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#11 -- vbuxx=_inc_vbuxx + inx + jmp b7 + // doplasma::@7 + b7: + // [94] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@8 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc b8_from_b7 + jmp breturn + // doplasma::@return + breturn: + // [95] return + rts + // doplasma::@11 + b11: + // [96] (byte~) doplasma::yprev#6 ← (byte) doplasma::yprev#2 -- vbuxx=vbuz1 + ldx yprev + // [20] phi from doplasma::@11 to doplasma::@2 [phi:doplasma::@11->doplasma::@2] + b2_from_b11: + // [20] phi (byte) doplasma::yprev#4 = (byte~) doplasma::yprev#6 [phi:doplasma::@11->doplasma::@2#0] -- register_copy + // [20] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#1 [phi:doplasma::@11->doplasma::@2#1] -- register_copy + // [20] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#1 [phi:doplasma::@11->doplasma::@2#2] -- register_copy + // [20] phi (byte) doplasma::i#4 = (byte) doplasma::i#1 [phi:doplasma::@11->doplasma::@2#3] -- register_copy + jmp b2 xbuf: .fill $28, 0 ybuf: .fill $19, 0 } // makecharset // Make a plasma-friendly charset where the chars are randomly filled makecharset: { - .label _7 = $12 - .label _10 = $10 - .label _11 = $10 + .label _7 = $10 + .label _10 = $11 + .label _11 = $11 .label s = $f .label i = $b .label c = 9 - .label _16 = $10 + .label _16 = $11 // [98] call sid_rnd_init jsr sid_rnd_init - // [99] phi from makecharset to makecharset::@12 [phi:makecharset->makecharset::@12] - b12_from_makecharset: - jmp b12 - // makecharset::@12 - b12: + // [99] phi from makecharset to makecharset::@13 [phi:makecharset->makecharset::@13] + b13_from_makecharset: + jmp b13 + // makecharset::@13 + b13: // [100] call print_cls - // [135] phi from makecharset::@12 to print_cls [phi:makecharset::@12->print_cls] - print_cls_from_b12: + // [134] phi from makecharset::@13 to print_cls [phi:makecharset::@13->print_cls] + print_cls_from_b13: jsr print_cls - // [101] phi from makecharset::@12 to makecharset::@1 [phi:makecharset::@12->makecharset::@1] - b1_from_b12: - // [101] phi (byte*) print_char_cursor#18 = (const byte*) print_line_cursor#0 [phi:makecharset::@12->makecharset::@1#0] -- pbuz1=pbuc1 + // [101] phi from makecharset::@13 to makecharset::@2 [phi:makecharset::@13->makecharset::@2] + b2_from_b13: + // [101] phi (byte*) print_char_cursor#52 = (const byte*) print_line_cursor#0 [phi:makecharset::@13->makecharset::@2#0] -- pbuz1=pbuc1 lda #print_line_cursor sta print_char_cursor+1 - // [101] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vbuc1 + // [101] phi (word) makecharset::c#16 = (byte) 0 [phi:makecharset::@13->makecharset::@2#1] -- vwuz1=vbuc1 lda #<0 sta c lda #>0 sta c+1 - jmp b1 - // makecharset::@1 - b1: - // [102] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 - lda c+1 - cmp #>$100 - bcc b2 - bne !+ - lda c - cmp #<$100 - bcc b2 - !: - jmp breturn - // makecharset::@return - breturn: - // [103] return - rts + jmp b2 + // [101] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2] + b2_from_b1: + // [101] phi (byte*) print_char_cursor#52 = (byte*) print_char_cursor#18 [phi:makecharset::@1->makecharset::@2#0] -- register_copy + // [101] phi (word) makecharset::c#16 = (word) makecharset::c#1 [phi:makecharset::@1->makecharset::@2#1] -- register_copy + jmp b2 // makecharset::@2 b2: - // [104] (byte~) makecharset::$3 ← < (word) makecharset::c#2 -- vbuaa=_lo_vwuz1 + // [102] (byte~) makecharset::$3 ← < (word) makecharset::c#16 -- vbuaa=_lo_vwuz1 lda c - // [105] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) -- vbuz1=pbuc1_derefidx_vbuaa + // [103] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) -- vbuz1=pbuc1_derefidx_vbuaa tay lda SINTABLE,y sta s - // [106] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3] - b3_from_b2: - // [106] phi (byte) makecharset::i#2 = (byte) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuz1=vbuc1 + // [104] phi from makecharset::@2 to makecharset::@4 [phi:makecharset::@2->makecharset::@4] + b4_from_b2: + // [104] phi (byte) makecharset::i#13 = (byte) 0 [phi:makecharset::@2->makecharset::@4#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b3 - // makecharset::@3 - b3: - // [107] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@5 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #8 - bcc b5_from_b3 + jmp b4 + // [104] phi from makecharset::@3 to makecharset::@4 [phi:makecharset::@3->makecharset::@4] + b4_from_b3: + // [104] phi (byte) makecharset::i#13 = (byte) makecharset::i#1 [phi:makecharset::@3->makecharset::@4#0] -- register_copy jmp b4 // makecharset::@4 b4: - // [108] (byte~) makecharset::$12 ← (word) makecharset::c#2 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 - lda c - and #7 - // [109] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@11 -- vbuaa_neq_0_then_la1 - cmp #0 - bne b11_from_b4 - // [110] phi from makecharset::@4 to makecharset::@10 [phi:makecharset::@4->makecharset::@10] - b10_from_b4: - jmp b10 - // makecharset::@10 - b10: - // [111] call print_char - jsr print_char - // [112] phi from makecharset::@10 makecharset::@4 to makecharset::@11 [phi:makecharset::@10/makecharset::@4->makecharset::@11] - b11_from_b10: - b11_from_b4: - // [112] phi (byte*) print_char_cursor#30 = (byte*) print_char_cursor#1 [phi:makecharset::@10/makecharset::@4->makecharset::@11#0] -- register_copy - jmp b11 - // makecharset::@11 - b11: - // [113] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 - inc c - bne !+ - inc c+1 - !: - // [101] phi from makecharset::@11 to makecharset::@1 [phi:makecharset::@11->makecharset::@1] - b1_from_b11: - // [101] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#30 [phi:makecharset::@11->makecharset::@1#0] -- register_copy - // [101] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@11->makecharset::@1#1] -- register_copy - jmp b1 - // [114] phi from makecharset::@3 to makecharset::@5 [phi:makecharset::@3->makecharset::@5] - b5_from_b3: - // [114] phi (byte) makecharset::b#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#0] -- vbuyy=vbuc1 + // [105] phi from makecharset::@4 to makecharset::@7 [phi:makecharset::@4->makecharset::@7] + b7_from_b4: + // [105] phi (byte) makecharset::b#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#0] -- vbuyy=vbuc1 ldy #0 - // [114] phi (byte) makecharset::ii#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#1] -- vbuxx=vbuc1 + // [105] phi (byte) makecharset::ii#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#1] -- vbuxx=vbuc1 ldx #0 - jmp b5 - // makecharset::@5 - b5: - // [115] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@6 -- vbuxx_lt_vbuc1_then_la1 - cpx #8 - bcc b6_from_b5 + jmp b7 + // [105] phi from makecharset::@6 to makecharset::@7 [phi:makecharset::@6->makecharset::@7] + b7_from_b6: + // [105] phi (byte) makecharset::b#10 = (byte) makecharset::b#2 [phi:makecharset::@6->makecharset::@7#0] -- register_copy + // [105] phi (byte) makecharset::ii#10 = (byte) makecharset::ii#1 [phi:makecharset::@6->makecharset::@7#1] -- register_copy jmp b7 // makecharset::@7 b7: - // [116] (word~) makecharset::$10 ← (word) makecharset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [106] call sid_rnd + jsr sid_rnd + // [107] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + jmp b14 + // makecharset::@14 + b14: + // [108] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 + // [109] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 + and #$ff + sta _7 + // [110] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@9 -- vbuz1_le_vbuz2_then_la1 + lda s + cmp _7 + bcs b9_from_b14 + jmp b10 + // makecharset::@10 + b10: + // [111] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx + tya + ora bittab,x + tay + // [112] phi from makecharset::@10 makecharset::@14 to makecharset::@9 [phi:makecharset::@10/makecharset::@14->makecharset::@9] + b9_from_b10: + b9_from_b14: + // [112] phi (byte) makecharset::b#2 = (byte) makecharset::b#1 [phi:makecharset::@10/makecharset::@14->makecharset::@9#0] -- register_copy + jmp b9 + // makecharset::@9 + b9: + // [113] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#10 -- vbuxx=_inc_vbuxx + inx + jmp b6 + // makecharset::@6 + b6: + // [114] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@7 -- vbuxx_lt_vbuc1_then_la1 + cpx #8 + bcc b7_from_b6 + jmp b8 + // makecharset::@8 + b8: + // [115] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda c asl sta _10 @@ -5314,7 +5426,7 @@ makecharset: { rol _10+1 asl _10 rol _10+1 - // [117] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#2 -- vwuz1=vwuz1_plus_vbuz2 + // [116] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 -- vwuz1=vwuz1_plus_vbuz2 lda i clc adc _11 @@ -5322,7 +5434,7 @@ makecharset: { bcc !+ inc _11+1 !: - // [118] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz1 + // [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz1 clc lda _16 adc #CHARSET sta _16+1 - // [119] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy + // [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy tya ldy #0 sta (_16),y - // [120] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 -- vbuz1=_inc_vbuz1 + // [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 -- vbuz1=_inc_vbuz1 inc i - // [106] phi from makecharset::@7 to makecharset::@3 [phi:makecharset::@7->makecharset::@3] - b3_from_b7: - // [106] phi (byte) makecharset::i#2 = (byte) makecharset::i#1 [phi:makecharset::@7->makecharset::@3#0] -- register_copy jmp b3 - // [121] phi from makecharset::@5 to makecharset::@6 [phi:makecharset::@5->makecharset::@6] - b6_from_b5: - jmp b6 - // makecharset::@6 - b6: - // [122] call sid_rnd - jsr sid_rnd - // [123] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - jmp b13 - // makecharset::@13 - b13: - // [124] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 - // [125] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 - and #$ff - sta _7 - // [126] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@8 -- vbuz1_le_vbuz2_then_la1 - lda s - cmp _7 - bcs b8_from_b13 - jmp b9 - // makecharset::@9 - b9: - // [127] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx - tya - ora bittab,x - tay - // [128] phi from makecharset::@13 makecharset::@9 to makecharset::@8 [phi:makecharset::@13/makecharset::@9->makecharset::@8] - b8_from_b13: - b8_from_b9: - // [128] phi (byte) makecharset::b#6 = (byte) makecharset::b#2 [phi:makecharset::@13/makecharset::@9->makecharset::@8#0] -- register_copy - jmp b8 - // makecharset::@8 - b8: - // [129] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuxx=_inc_vbuxx - inx - // [114] phi from makecharset::@8 to makecharset::@5 [phi:makecharset::@8->makecharset::@5] - b5_from_b8: - // [114] phi (byte) makecharset::b#2 = (byte) makecharset::b#6 [phi:makecharset::@8->makecharset::@5#0] -- register_copy - // [114] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@8->makecharset::@5#1] -- register_copy + // makecharset::@3 + b3: + // [120] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@4 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #8 + bcc b4_from_b3 jmp b5 - bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 -} - // sid_rnd -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -sid_rnd: { - // [130] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // makecharset::@5 + b5: + // [121] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 + lda c + and #7 + // [122] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@12 -- vbuaa_neq_0_then_la1 + cmp #0 + bne b12_from_b5 + // [123] phi from makecharset::@5 to makecharset::@11 [phi:makecharset::@5->makecharset::@11] + b11_from_b5: + jmp b11 + // makecharset::@11 + b11: + // [124] call print_char + jsr print_char + // [125] phi from makecharset::@11 makecharset::@5 to makecharset::@12 [phi:makecharset::@11/makecharset::@5->makecharset::@12] + b12_from_b11: + b12_from_b5: + // [125] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#1 [phi:makecharset::@11/makecharset::@5->makecharset::@12#0] -- register_copy + jmp b12 + // makecharset::@12 + b12: + // [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#16 -- vwuz1=_inc_vwuz1 + inc c + bne !+ + inc c+1 + !: + jmp b1 + // makecharset::@1 + b1: + // [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 + lda c+1 + cmp #>$100 + bcc b2_from_b1 + bne !+ + lda c + cmp #<$100 + bcc b2_from_b1 + !: jmp breturn - // sid_rnd::@return + // makecharset::@return breturn: - // [131] return + // [128] return rts + bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // print_char // Print a single char print_char: { .const ch = '.' - // [132] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 + // [129] *((byte*) print_char_cursor#52) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (print_char_cursor),y - // [133] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 + // [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#52 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 @@ -5410,20 +5518,32 @@ print_char: { jmp breturn // print_char::@return breturn: - // [134] return + // [131] return + rts +} + // sid_rnd +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + // [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 + lda SID_VOICE3_OSC + jmp breturn + // sid_rnd::@return + breturn: + // [133] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [136] call memset - // [138] phi from print_cls to memset [phi:print_cls->memset] + // [135] call memset + // [137] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp breturn // print_cls::@return breturn: - // [137] return + // [136] return rts } // memset @@ -5434,59 +5554,60 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = $c - // [139] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [139] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [138] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [138] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [138] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [139] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [143] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [139] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [139] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [141] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #$ffff sta SID_VOICE3_FREQ+1 - // [145] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [144] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL jmp breturn // sid_rnd_init::@return breturn: - // [146] return + // [145] return rts } // File Data @@ -5505,12 +5626,13 @@ Removing instruction jmp toD0181 Removing instruction jmp b5 Removing instruction jmp b3 Removing instruction jmp b4 +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 +Removing instruction jmp b5 Removing instruction jmp b4 Removing instruction jmp b6 -Removing instruction jmp b7 -Removing instruction jmp breturn +Removing instruction jmp b8 Removing instruction jmp b9 Removing instruction jmp b17_1 Removing instruction jmp b17_2 @@ -5537,22 +5659,27 @@ Removing instruction jmp b17_22 Removing instruction jmp b17_23 Removing instruction jmp b17_24 Removing instruction jmp b10 +Removing instruction jmp b7 +Removing instruction jmp breturn +Removing instruction jmp b13 +Removing instruction jmp b2 +Removing instruction jmp b4 +Removing instruction jmp b7 +Removing instruction jmp b14 +Removing instruction jmp b10 +Removing instruction jmp b9 +Removing instruction jmp b6 +Removing instruction jmp b8 +Removing instruction jmp b3 +Removing instruction jmp b5 +Removing instruction jmp b11 Removing instruction jmp b12 Removing instruction jmp b1 Removing instruction jmp breturn -Removing instruction jmp b3 -Removing instruction jmp b4 -Removing instruction jmp b10 -Removing instruction jmp b11 -Removing instruction jmp b5 -Removing instruction jmp b7 -Removing instruction jmp b6 -Removing instruction jmp b13 -Removing instruction jmp b9 -Removing instruction jmp b8 Removing instruction jmp breturn Removing instruction jmp breturn Removing instruction jmp breturn +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp breturn @@ -5567,9 +5694,16 @@ Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 Replacing label b3 with b4 -Replacing label b11_from_b4 with b11 -Replacing label b6_from_b5 with b6 -Replacing label b8_from_b13 with b8 +Replacing label b5_from_b4 with b5 +Replacing label b8_from_b7 with b8 +Replacing label b9_from_b14 with b9 +Replacing label b7_from_b6 with b7 +Replacing label b4_from_b3 with b4 +Replacing label b12_from_b5 with b12 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction bend_from_b1: @@ -5580,14 +5714,20 @@ Removing instruction toD0181_from_b2: Removing instruction toD0181: Removing instruction b3: Removing instruction b4_from_b3: -Removing instruction b12_from_makecharset: -Removing instruction print_cls_from_b12: -Removing instruction b10_from_b4: -Removing instruction b11_from_b10: -Removing instruction b11_from_b4: -Removing instruction b6_from_b5: -Removing instruction b8_from_b13: -Removing instruction b8_from_b9: +Removing instruction b5_from_b4: +Removing instruction b8_from_b7: +Removing instruction b13_from_makecharset: +Removing instruction print_cls_from_b13: +Removing instruction b2_from_b1: +Removing instruction b4_from_b3: +Removing instruction b7_from_b4: +Removing instruction b7_from_b6: +Removing instruction b9_from_b10: +Removing instruction b9_from_b14: +Removing instruction b11_from_b5: +Removing instruction b12_from_b11: +Removing instruction b12_from_b5: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction b1_from_main: @@ -5595,12 +5735,13 @@ Removing instruction b2: Removing instruction b5: Removing instruction b3_from_b5: Removing instruction b3_from_b4: -Removing instruction b1_from_doplasma: +Removing instruction b2_from_doplasma: +Removing instruction b1: Removing instruction b3: -Removing instruction b4_from_b3: +Removing instruction b5_from_b3: +Removing instruction b4: Removing instruction b6: -Removing instruction b7_from_b6: -Removing instruction breturn: +Removing instruction b8_from_b6: Removing instruction b9: Removing instruction b17_1: Removing instruction b17_2: @@ -5627,41 +5768,45 @@ Removing instruction b17_22: Removing instruction b17_23: Removing instruction b17_24: Removing instruction b10: -Removing instruction b7_from_b10: -Removing instruction b4_from_b5: -Removing instruction b1_from_b2: -Removing instruction b12: -Removing instruction b1_from_b12: -Removing instruction breturn: -Removing instruction b3_from_b2: -Removing instruction b4: -Removing instruction b10: -Removing instruction b1_from_b11: Removing instruction b7: -Removing instruction b3_from_b7: +Removing instruction breturn: +Removing instruction b2_from_b11: Removing instruction b13: -Removing instruction b9: -Removing instruction b5_from_b8: +Removing instruction b2_from_b13: +Removing instruction b4_from_b2: +Removing instruction b14: +Removing instruction b10: +Removing instruction b6: +Removing instruction b8: +Removing instruction b3: +Removing instruction b5: +Removing instruction b11: +Removing instruction b1: +Removing instruction breturn: Removing instruction breturn: Removing instruction breturn: Removing instruction memset_from_print_cls: Removing instruction breturn: -Removing instruction b1_from_memset: +Removing instruction b2_from_memset: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Relabelling long label b5_from_b3 to b4 -Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp b1 +Removing instruction jmp b5 +Removing instruction jmp b8 +Removing instruction jmp b2 +Removing instruction jmp b4 +Removing instruction jmp b7 +Removing instruction jmp b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [88] bcc b2 to bcs -Fixing long branch [106] bcc b5 to bcs +Fixing long branch [226] bcc b8 to bcs +Fixing long branch [107] bcc b11 to bcs FINAL SYMBOL TABLE (label) @1 @@ -5706,8 +5851,8 @@ FINAL SYMBOL TABLE (byte) c1B#1 c1B zp ZP_BYTE:15 1.0714285714285714 (byte) c1B#3 c1B zp ZP_BYTE:15 0.1911764705882353 (byte) c2A -(byte) c2A#1 c2A zp ZP_BYTE:18 0.625 -(byte) c2A#3 c2A zp ZP_BYTE:18 0.22413793103448276 +(byte) c2A#1 c2A zp ZP_BYTE:16 0.625 +(byte) c2A#3 c2A zp ZP_BYTE:16 0.22413793103448276 (byte) c2B (byte) c2B#1 c2B zp ZP_BYTE:2 0.6 (byte) c2B#3 c2B zp ZP_BYTE:2 0.22807017543859648 @@ -5716,6 +5861,7 @@ FINAL SYMBOL TABLE (byte~) doplasma::$4 reg byte a 202.0 (label) doplasma::@1 (label) doplasma::@10 +(label) doplasma::@11 (label) doplasma::@17_1 (label) doplasma::@17_10 (label) doplasma::@17_11 @@ -5751,29 +5897,29 @@ FINAL SYMBOL TABLE (label) doplasma::@return (byte) doplasma::c1a (byte) doplasma::c1a#0 c1a zp ZP_BYTE:4 2.0 -(byte) doplasma::c1a#1 c1a zp ZP_BYTE:4 50.5 -(byte) doplasma::c1a#2 c1a zp ZP_BYTE:4 61.0 +(byte) doplasma::c1a#1 c1a zp ZP_BYTE:4 40.4 +(byte) doplasma::c1a#4 c1a zp ZP_BYTE:4 76.25 (byte) doplasma::c1b (byte) doplasma::c1b#0 c1b zp ZP_BYTE:5 4.0 -(byte) doplasma::c1b#1 c1b zp ZP_BYTE:5 67.33333333333333 -(byte) doplasma::c1b#2 c1b zp ZP_BYTE:5 50.83333333333333 +(byte) doplasma::c1b#1 c1b zp ZP_BYTE:5 50.5 +(byte) doplasma::c1b#4 c1b zp ZP_BYTE:5 61.0 (byte) doplasma::c2a (byte) doplasma::c2a#0 c2a zp ZP_BYTE:7 2.0 -(byte) doplasma::c2a#1 c2a zp ZP_BYTE:7 67.33333333333333 -(byte) doplasma::c2a#2 c2a zp ZP_BYTE:7 76.25 +(byte) doplasma::c2a#1 c2a zp ZP_BYTE:7 50.5 +(byte) doplasma::c2a#4 c2a zp ZP_BYTE:7 101.66666666666666 (byte) doplasma::c2b (byte) doplasma::c2b#0 c2b zp ZP_BYTE:8 4.0 -(byte) doplasma::c2b#1 c2b zp ZP_BYTE:8 101.0 -(byte) doplasma::c2b#2 c2b zp ZP_BYTE:8 61.0 +(byte) doplasma::c2b#1 c2b zp ZP_BYTE:8 67.33333333333333 +(byte) doplasma::c2b#4 c2b zp ZP_BYTE:8 76.25 (byte) doplasma::i (byte) doplasma::i#1 i zp ZP_BYTE:3 101.0 -(byte) doplasma::i#2 i zp ZP_BYTE:3 57.714285714285715 +(byte) doplasma::i#4 i zp ZP_BYTE:3 50.5 (byte) doplasma::i1 -(byte) doplasma::i1#1 i1 zp ZP_BYTE:6 202.0 -(byte) doplasma::i1#2 i1 zp ZP_BYTE:6 67.33333333333333 +(byte) doplasma::i1#1 i1 zp ZP_BYTE:6 151.5 +(byte) doplasma::i1#4 i1 zp ZP_BYTE:6 60.599999999999994 (byte) doplasma::i2 -(byte) doplasma::i2#1 reg byte x 202.0 -(byte) doplasma::i2#2 reg byte x 55.26415094339627 +(byte) doplasma::i2#1 reg byte x 151.5 +(byte) doplasma::i2#11 reg byte x 54.3846153846154 (byte) doplasma::ii (byte*) doplasma::screen (byte) doplasma::val @@ -5800,18 +5946,18 @@ FINAL SYMBOL TABLE (byte) doplasma::val#45 reg byte a 151.5 (byte) doplasma::val#47 reg byte a 151.5 (byte) doplasma::val#49 reg byte a 151.5 -(byte) doplasma::val#5 reg byte a 151.5 -(byte) doplasma::val#51 reg byte a 202.0 +(byte) doplasma::val#51 reg byte a 151.5 +(byte) doplasma::val#53 reg byte a 202.0 (byte) doplasma::val#7 reg byte a 151.5 (byte[$28]) doplasma::xbuf (const byte[$28]) doplasma::xbuf#0 xbuf = { fill( $28, 0) } (byte[$19]) doplasma::ybuf (const byte[$19]) doplasma::ybuf#0 ybuf = { fill( $19, 0) } (byte) doplasma::yprev -(byte) doplasma::yprev#2 reg byte x 67.33333333333333 -(byte~) doplasma::yprev#4 reg byte x 202.0 +(byte) doplasma::yprev#2 yprev zp ZP_BYTE:14 43.285714285714285 +(byte) doplasma::yprev#4 reg byte x 101.0 +(byte~) doplasma::yprev#6 reg byte x 202.0 (byte) doplasma::yval -(byte) doplasma::yval#0 yval zp ZP_BYTE:14 50.5 (void()) main() (label) main::@1 (label) main::@2 @@ -5836,18 +5982,19 @@ FINAL SYMBOL TABLE (const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN1#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f (byte*) main::toD0181_screen (void()) makecharset((byte*) makecharset::charset) -(word~) makecharset::$10 $10 zp ZP_WORD:16 202.0 -(word~) makecharset::$11 $11 zp ZP_WORD:16 202.0 +(word~) makecharset::$10 $10 zp ZP_WORD:17 202.0 +(word~) makecharset::$11 $11 zp ZP_WORD:17 202.0 (byte~) makecharset::$12 reg byte a 22.0 -(byte*~) makecharset::$16 $16 zp ZP_WORD:16 202.0 +(byte*~) makecharset::$16 $16 zp ZP_WORD:17 202.0 (byte~) makecharset::$3 reg byte a 22.0 (byte~) makecharset::$6 reg byte a 2002.0 -(byte~) makecharset::$7 $7 zp ZP_BYTE:18 2002.0 +(byte~) makecharset::$7 $7 zp ZP_BYTE:16 2002.0 (label) makecharset::@1 (label) makecharset::@10 (label) makecharset::@11 (label) makecharset::@12 (label) makecharset::@13 +(label) makecharset::@14 (label) makecharset::@2 (label) makecharset::@3 (label) makecharset::@4 @@ -5859,22 +6006,22 @@ FINAL SYMBOL TABLE (label) makecharset::@return (byte) makecharset::b (byte) makecharset::b#1 reg byte y 2002.0 -(byte) makecharset::b#2 reg byte y 282.1818181818182 -(byte) makecharset::b#6 reg byte y 1501.5 +(byte) makecharset::b#10 reg byte y 500.5 +(byte) makecharset::b#2 reg byte y 517.3333333333334 (byte[8]) makecharset::bittab (const byte[8]) makecharset::bittab#0 bittab = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (word) makecharset::c -(word) makecharset::c#1 c zp ZP_WORD:9 22.0 -(word) makecharset::c#2 c zp ZP_WORD:9 5.777777777777778 +(word) makecharset::c#1 c zp ZP_WORD:9 16.5 +(word) makecharset::c#16 c zp ZP_WORD:9 5.800000000000001 (byte*) makecharset::charset (byte) makecharset::i -(byte) makecharset::i#1 i zp ZP_BYTE:11 202.0 -(byte) makecharset::i#2 i zp ZP_BYTE:11 23.764705882352942 +(byte) makecharset::i#1 i zp ZP_BYTE:11 151.5 +(byte) makecharset::i#13 i zp ZP_BYTE:11 20.2 (byte) makecharset::ii -(byte) makecharset::ii#1 reg byte x 2002.0 -(byte) makecharset::ii#2 reg byte x 400.4 +(byte) makecharset::ii#1 reg byte x 1501.5 +(byte) makecharset::ii#10 reg byte x 375.375 (byte) makecharset::s -(byte) makecharset::s#0 s zp ZP_BYTE:15 53.26315789473684 +(byte) makecharset::s#0 s zp ZP_BYTE:15 56.22222222222223 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -5882,8 +6029,8 @@ FINAL SYMBOL TABLE (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:12 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:12 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:12 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:12 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -5897,8 +6044,8 @@ FINAL SYMBOL TABLE (const byte) print_char::ch#0 ch = (byte) '.' (byte*) print_char_cursor (byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:12 4.333333333333333 -(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:12 1.0 -(byte*) print_char_cursor#30 print_char_cursor zp ZP_WORD:12 16.5 +(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:12 11.0 +(byte*) print_char_cursor#52 print_char_cursor zp ZP_WORD:12 1.0833333333333333 (void()) print_cls() (label) print_cls::@return (byte*) print_line_cursor @@ -5913,22 +6060,24 @@ FINAL SYMBOL TABLE (label) sid_rnd_init::@return zp ZP_BYTE:2 [ c2B#1 c2B#3 ] -zp ZP_BYTE:3 [ doplasma::i#2 doplasma::i#1 ] -zp ZP_BYTE:4 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -zp ZP_BYTE:5 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -reg byte x [ doplasma::yprev#2 doplasma::yprev#4 ] -zp ZP_BYTE:6 [ doplasma::i1#2 doplasma::i1#1 ] -zp ZP_BYTE:7 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -zp ZP_BYTE:8 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -reg byte x [ doplasma::i2#2 doplasma::i2#1 ] -zp ZP_WORD:9 [ makecharset::c#2 makecharset::c#1 main::col#2 main::col#1 ] -zp ZP_BYTE:11 [ makecharset::i#2 makecharset::i#1 c1A#1 c1A#3 ] -reg byte x [ makecharset::ii#2 makecharset::ii#1 ] -reg byte y [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] +zp ZP_BYTE:3 [ doplasma::i#4 doplasma::i#1 ] +zp ZP_BYTE:4 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +zp ZP_BYTE:5 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +reg byte x [ doplasma::yprev#4 doplasma::yprev#6 ] +zp ZP_BYTE:6 [ doplasma::i1#4 doplasma::i1#1 ] +zp ZP_BYTE:7 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +zp ZP_BYTE:8 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +reg byte x [ doplasma::i2#11 doplasma::i2#1 ] +zp ZP_WORD:9 [ makecharset::c#16 makecharset::c#1 main::col#2 main::col#1 ] +zp ZP_BYTE:11 [ makecharset::i#13 makecharset::i#1 c1A#1 c1A#3 ] +reg byte x [ makecharset::ii#10 makecharset::ii#1 ] +reg byte y [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] +zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] +zp ZP_BYTE:14 [ doplasma::yprev#2 ] +reg byte a [ doplasma::$2 ] +reg byte a [ doplasma::$4 ] reg byte a [ doplasma::val#0 ] reg byte a [ doplasma::val#1 ] -reg byte a [ doplasma::val#5 ] reg byte a [ doplasma::val#7 ] reg byte a [ doplasma::val#10 ] reg byte a [ doplasma::val#11 ] @@ -5952,21 +6101,19 @@ reg byte a [ doplasma::val#45 ] reg byte a [ doplasma::val#47 ] reg byte a [ doplasma::val#49 ] reg byte a [ doplasma::val#51 ] -reg byte a [ doplasma::$4 ] -zp ZP_BYTE:14 [ doplasma::yval#0 ] -reg byte a [ doplasma::$2 ] +reg byte a [ doplasma::val#53 ] reg byte a [ makecharset::$3 ] zp ZP_BYTE:15 [ makecharset::s#0 c1B#1 c1B#3 ] -reg byte a [ makecharset::$12 ] -zp ZP_WORD:16 [ makecharset::$10 makecharset::$11 makecharset::$16 ] reg byte a [ sid_rnd::return#2 ] reg byte a [ makecharset::$6 ] -zp ZP_BYTE:18 [ makecharset::$7 c2A#1 c2A#3 ] +zp ZP_BYTE:16 [ makecharset::$7 c2A#1 c2A#3 ] +zp ZP_WORD:17 [ makecharset::$10 makecharset::$11 makecharset::$16 ] +reg byte a [ makecharset::$12 ] reg byte a [ sid_rnd::return#0 ] FINAL ASSEMBLER -Score: 97686 +Score: 93726 // File Comments // A KickC version of the plasma routine from the CC65 samples @@ -6000,7 +6147,7 @@ Score: 97686 .label print_char_cursor = $c .label c1A = $b .label c1B = $f - .label c2A = $12 + .label c2A = $10 .label c2B = 2 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] @@ -6092,11 +6239,11 @@ main: { doplasma: { .label c1a = 4 .label c1b = 5 - .label yval = $e .label i = 3 .label c2a = 7 .label c2b = 8 .label i1 = 6 + .label yprev = $e // c1a = c1A // [18] (byte) doplasma::c1a#0 ← (byte) c1A#1 -- vbuz1=vbuz2 lda c1A @@ -6105,480 +6252,460 @@ doplasma: { // [19] (byte) doplasma::c1b#0 ← (byte) c1B#1 -- vbuz1=vbuz2 lda c1B sta c1b - // [20] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1] - // [20] phi (byte) doplasma::yprev#2 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuxx=vbuc1 + // [20] phi from doplasma to doplasma::@2 [phi:doplasma->doplasma::@2] + // [20] phi (byte) doplasma::yprev#4 = (byte) 0 [phi:doplasma->doplasma::@2#0] -- vbuxx=vbuc1 ldx #0 - // [20] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#1] -- register_copy - // [20] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#2] -- register_copy - // [20] phi (byte) doplasma::i#2 = (byte) 0 [phi:doplasma->doplasma::@1#3] -- vbuz1=vbuc1 + // [20] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@2#1] -- register_copy + // [20] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@2#2] -- register_copy + // [20] phi (byte) doplasma::i#4 = (byte) 0 [phi:doplasma->doplasma::@2#3] -- vbuz1=vbuc1 txa sta i + // doplasma::@2 + b2: + // SINTABLE[c1a] + SINTABLE[c1b] + // [21] (byte) doplasma::yprev#2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 + ldy c1a + lda SINTABLE,y + ldy c1b + clc + adc SINTABLE,y + sta yprev + // yval - yprev + // [22] (byte~) doplasma::$2 ← (byte) doplasma::yprev#2 - (byte) doplasma::yprev#4 -- vbuaa=vbuz1_minus_vbuxx + txa + eor #$ff + sec + adc yprev + // ybuf[i] = yval - yprev + // [23] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#4) ← (byte~) doplasma::$2 -- pbuc1_derefidx_vbuz1=vbuaa + ldy i + sta ybuf,y + // c1a += 4 + // [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 + lax c1a + axs #-[4] + stx c1a + // c1b += 9 + // [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 + lax c1b + axs #-[9] + stx c1b + // for (unsigned char i = 0; i < 25; ++i) + // [26] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#4 -- vbuz1=_inc_vbuz1 + inc i // Calculate ybuff as a bunch of differences // doplasma::@1 - b1: - // for (unsigned char i = 0; i < 25; ++i) - // [21] if((byte) doplasma::i#2<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 + // [27] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@11 -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$19 - bcs !b2+ - jmp b2 - !b2: + bcs !b11+ + jmp b11 + !b11: // doplasma::@3 // c1A += 3 - // [22] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax c1A axs #-[3] stx c1A // c1B -= 5 - // [23] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 + // [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 lax c1B axs #5 stx c1B // c2a = c2A - // [24] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 + // [30] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 lda c2A sta c2a // c2b = c2B - // [25] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 + // [31] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 lda c2B sta c2b - // [26] phi from doplasma::@3 to doplasma::@4 [phi:doplasma::@3->doplasma::@4] - // [26] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@4#0] -- register_copy - // [26] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@4#1] -- register_copy - // [26] phi (byte) doplasma::i1#2 = (byte) 0 [phi:doplasma::@3->doplasma::@4#2] -- vbuz1=vbuc1 + // [32] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5] + // [32] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@5#0] -- register_copy + // [32] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@5#1] -- register_copy + // [32] phi (byte) doplasma::i1#4 = (byte) 0 [phi:doplasma::@3->doplasma::@5#2] -- vbuz1=vbuc1 lda #0 sta i1 - // doplasma::@4 - b4: - // for (unsigned char i = 0; i < 40; ++i) - // [27] if((byte) doplasma::i1#2<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 - lda i1 - cmp #$28 - bcs !b5+ - jmp b5 - !b5: - // doplasma::@6 - // c2A += 2 - // [28] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2 -- vbuz1=vbuz1_plus_2 - lda c2A - clc - adc #2 - sta c2A - // c2B -= 3 - // [29] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 - lax c2B - axs #3 - stx c2B - // [30] phi from doplasma::@6 to doplasma::@7 [phi:doplasma::@6->doplasma::@7] - // [30] phi (byte) doplasma::i2#2 = (byte) 0 [phi:doplasma::@6->doplasma::@7#0] -- vbuxx=vbuc1 - ldx #0 - // doplasma::@7 - b7: - // for (unsigned char i = 0; i < 40; ++i) - // [31] if((byte) doplasma::i2#2<(byte) $28) goto doplasma::@8 -- vbuxx_lt_vbuc1_then_la1 - cpx #$28 - bcc b8 - // doplasma::@return - // } - // [32] return - rts - // doplasma::@8 - b8: - // val = xbuf[i] - // [33] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) -- vbuaa=pbuc1_derefidx_vbuxx - // Find the first value on the row - lda xbuf,x - // doplasma::@9 - // val += ybuf[ii] - // [34] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf - // (screen+ii*40)[i] = val - // [35] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1,x - // doplasma::@17_1 - // val += ybuf[ii] - // [36] (byte) doplasma::val#5 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+1 - // (screen+ii*40)[i] = val - // [37] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#5 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+1*$28,x - // doplasma::@17_2 - // val += ybuf[ii] - // [38] (byte) doplasma::val#7 ← (byte) doplasma::val#5 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+2 - // (screen+ii*40)[i] = val - // [39] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#7 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+2*$28,x - // doplasma::@17_3 - // val += ybuf[ii] - // [40] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+3 - // (screen+ii*40)[i] = val - // [41] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+3*$28,x - // doplasma::@17_4 - // val += ybuf[ii] - // [42] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+4 - // (screen+ii*40)[i] = val - // [43] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#11 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+4*$28,x - // doplasma::@17_5 - // val += ybuf[ii] - // [44] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+5 - // (screen+ii*40)[i] = val - // [45] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#13 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+5*$28,x - // doplasma::@17_6 - // val += ybuf[ii] - // [46] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+6 - // (screen+ii*40)[i] = val - // [47] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#15 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+6*$28,x - // doplasma::@17_7 - // val += ybuf[ii] - // [48] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+7 - // (screen+ii*40)[i] = val - // [49] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#17 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+7*$28,x - // doplasma::@17_8 - // val += ybuf[ii] - // [50] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+8 - // (screen+ii*40)[i] = val - // [51] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#19 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+8*$28,x - // doplasma::@17_9 - // val += ybuf[ii] - // [52] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+9 - // (screen+ii*40)[i] = val - // [53] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#21 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+9*$28,x - // doplasma::@17_10 - // val += ybuf[ii] - // [54] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$a - // (screen+ii*40)[i] = val - // [55] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#23 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$a*$28,x - // doplasma::@17_11 - // val += ybuf[ii] - // [56] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$b - // (screen+ii*40)[i] = val - // [57] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#25 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$b*$28,x - // doplasma::@17_12 - // val += ybuf[ii] - // [58] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$c - // (screen+ii*40)[i] = val - // [59] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#27 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$c*$28,x - // doplasma::@17_13 - // val += ybuf[ii] - // [60] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$d - // (screen+ii*40)[i] = val - // [61] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#29 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$d*$28,x - // doplasma::@17_14 - // val += ybuf[ii] - // [62] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$e - // (screen+ii*40)[i] = val - // [63] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#31 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$e*$28,x - // doplasma::@17_15 - // val += ybuf[ii] - // [64] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$f - // (screen+ii*40)[i] = val - // [65] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#33 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$f*$28,x - // doplasma::@17_16 - // val += ybuf[ii] - // [66] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$10 - // (screen+ii*40)[i] = val - // [67] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#35 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$10*$28,x - // doplasma::@17_17 - // val += ybuf[ii] - // [68] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$11 - // (screen+ii*40)[i] = val - // [69] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#37 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$11*$28,x - // doplasma::@17_18 - // val += ybuf[ii] - // [70] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$12 - // (screen+ii*40)[i] = val - // [71] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#39 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$12*$28,x - // doplasma::@17_19 - // val += ybuf[ii] - // [72] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$13 - // (screen+ii*40)[i] = val - // [73] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#41 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$13*$28,x - // doplasma::@17_20 - // val += ybuf[ii] - // [74] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$14 - // (screen+ii*40)[i] = val - // [75] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#43 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$14*$28,x - // doplasma::@17_21 - // val += ybuf[ii] - // [76] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$15 - // (screen+ii*40)[i] = val - // [77] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#45 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$15*$28,x - // doplasma::@17_22 - // val += ybuf[ii] - // [78] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$16 - // (screen+ii*40)[i] = val - // [79] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#47 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$16*$28,x - // doplasma::@17_23 - // val += ybuf[ii] - // [80] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$17 - // (screen+ii*40)[i] = val - // [81] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#49 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$17*$28,x - // doplasma::@17_24 - // val += ybuf[ii] - // [82] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) -- vbuaa=vbuaa_plus__deref_pbuc1 - clc - adc ybuf+$18 - // (screen+ii*40)[i] = val - // [83] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#51 -- pbuc1_derefidx_vbuxx=vbuaa - sta SCREEN1+$18*$28,x - // doplasma::@10 - // for (unsigned char i = 0; i < 40; ++i) - // [84] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuxx=_inc_vbuxx - inx - // [30] phi from doplasma::@10 to doplasma::@7 [phi:doplasma::@10->doplasma::@7] - // [30] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@10->doplasma::@7#0] -- register_copy - jmp b7 + // [32] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5] + // [32] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#1 [phi:doplasma::@4->doplasma::@5#0] -- register_copy + // [32] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#1 [phi:doplasma::@4->doplasma::@5#1] -- register_copy + // [32] phi (byte) doplasma::i1#4 = (byte) doplasma::i1#1 [phi:doplasma::@4->doplasma::@5#2] -- register_copy // doplasma::@5 b5: // SINTABLE[c2a] + SINTABLE[c2b] - // [85] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 + // [33] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 ldy c2a lda SINTABLE,y ldy c2b clc adc SINTABLE,y // xbuf[i] = (SINTABLE[c2a] + SINTABLE[c2b]) - // [86] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$4 -- pbuc1_derefidx_vbuz1=vbuaa + // [34] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#4) ← (byte~) doplasma::$4 -- pbuc1_derefidx_vbuz1=vbuaa ldy i1 sta xbuf,y // c2a += 3 - // [87] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax c2a axs #-[3] stx c2a // c2b += 7 - // [88] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 + // [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 lax c2b axs #-[7] stx c2b // for (unsigned char i = 0; i < 40; ++i) - // [89] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 + // [37] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#4 -- vbuz1=_inc_vbuz1 inc i1 - // [26] phi from doplasma::@5 to doplasma::@4 [phi:doplasma::@5->doplasma::@4] - // [26] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@5->doplasma::@4#0] -- register_copy - // [26] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@5->doplasma::@4#1] -- register_copy - // [26] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@5->doplasma::@4#2] -- register_copy - jmp b4 - // doplasma::@2 - b2: - // SINTABLE[c1a] + SINTABLE[c1b] - // [90] (byte) doplasma::yval#0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 - ldy c1a - lda SINTABLE,y - ldy c1b + // doplasma::@4 + // [38] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 + lda i1 + cmp #$28 + bcc b5 + // doplasma::@6 + // c2A += 2 + // [39] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2 -- vbuz1=vbuz1_plus_2 + lda c2A clc - adc SINTABLE,y - sta yval - // yval - yprev - // [91] (byte~) doplasma::$2 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2 -- vbuaa=vbuz1_minus_vbuxx - txa - eor #$ff - sec - adc yval - // ybuf[i] = yval - yprev - // [92] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy i - sta ybuf,y - // c1a += 4 - // [93] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 - lax c1a - axs #-[4] - stx c1a - // c1b += 9 - // [94] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 - lax c1b - axs #-[9] - stx c1b - // for (unsigned char i = 0; i < 25; ++i) - // [95] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [96] (byte~) doplasma::yprev#4 ← (byte) doplasma::yval#0 -- vbuxx=vbuz1 - ldx yval - // [20] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1] - // [20] phi (byte) doplasma::yprev#2 = (byte~) doplasma::yprev#4 [phi:doplasma::@2->doplasma::@1#0] -- register_copy - // [20] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@2->doplasma::@1#1] -- register_copy - // [20] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@2->doplasma::@1#2] -- register_copy - // [20] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@2->doplasma::@1#3] -- register_copy - jmp b1 + adc #2 + sta c2A + // c2B -= 3 + // [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 + lax c2B + axs #3 + stx c2B + // [41] phi from doplasma::@6 to doplasma::@8 [phi:doplasma::@6->doplasma::@8] + // [41] phi (byte) doplasma::i2#11 = (byte) 0 [phi:doplasma::@6->doplasma::@8#0] -- vbuxx=vbuc1 + ldx #0 + // [41] phi from doplasma::@7 to doplasma::@8 [phi:doplasma::@7->doplasma::@8] + // [41] phi (byte) doplasma::i2#11 = (byte) doplasma::i2#1 [phi:doplasma::@7->doplasma::@8#0] -- register_copy + // doplasma::@8 + b8: + // val = xbuf[i] + // [42] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#11) -- vbuaa=pbuc1_derefidx_vbuxx + // Find the first value on the row + lda xbuf,x + // doplasma::@9 + // val += ybuf[ii] + // [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf + // (screen+ii*40)[i] = val + // [44] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#11) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1,x + // doplasma::@17_1 + // val += ybuf[ii] + // [45] (byte) doplasma::val#7 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+1 + // (screen+ii*40)[i] = val + // [46] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#7 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+1*$28,x + // doplasma::@17_2 + // val += ybuf[ii] + // [47] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+2 + // (screen+ii*40)[i] = val + // [48] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+2*$28,x + // doplasma::@17_3 + // val += ybuf[ii] + // [49] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+3 + // (screen+ii*40)[i] = val + // [50] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#11 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+3*$28,x + // doplasma::@17_4 + // val += ybuf[ii] + // [51] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+4 + // (screen+ii*40)[i] = val + // [52] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#13 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+4*$28,x + // doplasma::@17_5 + // val += ybuf[ii] + // [53] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+5 + // (screen+ii*40)[i] = val + // [54] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#15 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+5*$28,x + // doplasma::@17_6 + // val += ybuf[ii] + // [55] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+6 + // (screen+ii*40)[i] = val + // [56] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#17 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+6*$28,x + // doplasma::@17_7 + // val += ybuf[ii] + // [57] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+7 + // (screen+ii*40)[i] = val + // [58] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#19 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+7*$28,x + // doplasma::@17_8 + // val += ybuf[ii] + // [59] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+8 + // (screen+ii*40)[i] = val + // [60] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#21 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+8*$28,x + // doplasma::@17_9 + // val += ybuf[ii] + // [61] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+9 + // (screen+ii*40)[i] = val + // [62] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#23 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+9*$28,x + // doplasma::@17_10 + // val += ybuf[ii] + // [63] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$a + // (screen+ii*40)[i] = val + // [64] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#25 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$a*$28,x + // doplasma::@17_11 + // val += ybuf[ii] + // [65] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$b + // (screen+ii*40)[i] = val + // [66] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#27 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$b*$28,x + // doplasma::@17_12 + // val += ybuf[ii] + // [67] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$c + // (screen+ii*40)[i] = val + // [68] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#29 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$c*$28,x + // doplasma::@17_13 + // val += ybuf[ii] + // [69] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$d + // (screen+ii*40)[i] = val + // [70] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#31 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$d*$28,x + // doplasma::@17_14 + // val += ybuf[ii] + // [71] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$e + // (screen+ii*40)[i] = val + // [72] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#33 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$e*$28,x + // doplasma::@17_15 + // val += ybuf[ii] + // [73] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$f + // (screen+ii*40)[i] = val + // [74] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#35 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$f*$28,x + // doplasma::@17_16 + // val += ybuf[ii] + // [75] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$10 + // (screen+ii*40)[i] = val + // [76] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#37 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$10*$28,x + // doplasma::@17_17 + // val += ybuf[ii] + // [77] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$11 + // (screen+ii*40)[i] = val + // [78] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#39 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$11*$28,x + // doplasma::@17_18 + // val += ybuf[ii] + // [79] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$12 + // (screen+ii*40)[i] = val + // [80] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#41 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$12*$28,x + // doplasma::@17_19 + // val += ybuf[ii] + // [81] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$13 + // (screen+ii*40)[i] = val + // [82] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#43 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$13*$28,x + // doplasma::@17_20 + // val += ybuf[ii] + // [83] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$14 + // (screen+ii*40)[i] = val + // [84] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#45 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$14*$28,x + // doplasma::@17_21 + // val += ybuf[ii] + // [85] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$15 + // (screen+ii*40)[i] = val + // [86] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#47 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$15*$28,x + // doplasma::@17_22 + // val += ybuf[ii] + // [87] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$16 + // (screen+ii*40)[i] = val + // [88] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#49 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$16*$28,x + // doplasma::@17_23 + // val += ybuf[ii] + // [89] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$17 + // (screen+ii*40)[i] = val + // [90] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#51 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$17*$28,x + // doplasma::@17_24 + // val += ybuf[ii] + // [91] (byte) doplasma::val#53 ← (byte) doplasma::val#51 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) -- vbuaa=vbuaa_plus__deref_pbuc1 + clc + adc ybuf+$18 + // (screen+ii*40)[i] = val + // [92] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#53 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN1+$18*$28,x + // doplasma::@10 + // for (unsigned char i = 0; i < 40; ++i) + // [93] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#11 -- vbuxx=_inc_vbuxx + inx + // doplasma::@7 + // [94] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@8 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcs !b8+ + jmp b8 + !b8: + // doplasma::@return + // } + // [95] return + rts + // doplasma::@11 + b11: + // [96] (byte~) doplasma::yprev#6 ← (byte) doplasma::yprev#2 -- vbuxx=vbuz1 + ldx yprev + // [20] phi from doplasma::@11 to doplasma::@2 [phi:doplasma::@11->doplasma::@2] + // [20] phi (byte) doplasma::yprev#4 = (byte~) doplasma::yprev#6 [phi:doplasma::@11->doplasma::@2#0] -- register_copy + // [20] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#1 [phi:doplasma::@11->doplasma::@2#1] -- register_copy + // [20] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#1 [phi:doplasma::@11->doplasma::@2#2] -- register_copy + // [20] phi (byte) doplasma::i#4 = (byte) doplasma::i#1 [phi:doplasma::@11->doplasma::@2#3] -- register_copy + jmp b2 xbuf: .fill $28, 0 ybuf: .fill $19, 0 } // makecharset // Make a plasma-friendly charset where the chars are randomly filled makecharset: { - .label _7 = $12 - .label _10 = $10 - .label _11 = $10 + .label _7 = $10 + .label _10 = $11 + .label _11 = $11 .label s = $f .label i = $b .label c = 9 - .label _16 = $10 + .label _16 = $11 // sid_rnd_init() // [98] call sid_rnd_init jsr sid_rnd_init - // [99] phi from makecharset to makecharset::@12 [phi:makecharset->makecharset::@12] - // makecharset::@12 + // [99] phi from makecharset to makecharset::@13 [phi:makecharset->makecharset::@13] + // makecharset::@13 // print_cls() // [100] call print_cls - // [135] phi from makecharset::@12 to print_cls [phi:makecharset::@12->print_cls] + // [134] phi from makecharset::@13 to print_cls [phi:makecharset::@13->print_cls] jsr print_cls - // [101] phi from makecharset::@12 to makecharset::@1 [phi:makecharset::@12->makecharset::@1] - // [101] phi (byte*) print_char_cursor#18 = (const byte*) print_line_cursor#0 [phi:makecharset::@12->makecharset::@1#0] -- pbuz1=pbuc1 + // [101] phi from makecharset::@13 to makecharset::@2 [phi:makecharset::@13->makecharset::@2] + // [101] phi (byte*) print_char_cursor#52 = (const byte*) print_line_cursor#0 [phi:makecharset::@13->makecharset::@2#0] -- pbuz1=pbuc1 lda #print_line_cursor sta print_char_cursor+1 - // [101] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vbuc1 + // [101] phi (word) makecharset::c#16 = (byte) 0 [phi:makecharset::@13->makecharset::@2#1] -- vwuz1=vbuc1 lda #<0 sta c sta c+1 - // makecharset::@1 - b1: - // for (unsigned int c = 0; c < 0x100; ++c) - // [102] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 - lda c+1 - cmp #>$100 - bcc b2 - bne !+ - lda c - cmp #<$100 - bcc b2 - !: - // makecharset::@return - // } - // [103] return - rts + // [101] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2] + // [101] phi (byte*) print_char_cursor#52 = (byte*) print_char_cursor#18 [phi:makecharset::@1->makecharset::@2#0] -- register_copy + // [101] phi (word) makecharset::c#16 = (word) makecharset::c#1 [phi:makecharset::@1->makecharset::@2#1] -- register_copy // makecharset::@2 b2: // makecharset::@3] - // [106] phi (byte) makecharset::i#2 = (byte) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuz1=vbuc1 + // [104] phi from makecharset::@2 to makecharset::@4 [phi:makecharset::@2->makecharset::@4] + // [104] phi (byte) makecharset::i#13 = (byte) 0 [phi:makecharset::@2->makecharset::@4#0] -- vbuz1=vbuc1 lda #0 sta i - // makecharset::@3 - b3: - // for ( unsigned char i = 0; i < 8; ++i) - // [107] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@5 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #8 - bcc b4 + // [104] phi from makecharset::@3 to makecharset::@4 [phi:makecharset::@3->makecharset::@4] + // [104] phi (byte) makecharset::i#13 = (byte) makecharset::i#1 [phi:makecharset::@3->makecharset::@4#0] -- register_copy // makecharset::@4 - // c & 0x07 - // [108] (byte~) makecharset::$12 ← (word) makecharset::c#2 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 - lda c - and #7 - // if ((c & 0x07) == 0) - // [109] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@11 -- vbuaa_neq_0_then_la1 - cmp #0 - bne b11 - // [110] phi from makecharset::@4 to makecharset::@10 [phi:makecharset::@4->makecharset::@10] - // makecharset::@10 - // print_char('.') - // [111] call print_char - jsr print_char - // [112] phi from makecharset::@10 makecharset::@4 to makecharset::@11 [phi:makecharset::@10/makecharset::@4->makecharset::@11] - // [112] phi (byte*) print_char_cursor#30 = (byte*) print_char_cursor#1 [phi:makecharset::@10/makecharset::@4->makecharset::@11#0] -- register_copy - // makecharset::@11 - b11: - // for (unsigned int c = 0; c < 0x100; ++c) - // [113] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 - inc c - bne !+ - inc c+1 - !: - // [101] phi from makecharset::@11 to makecharset::@1 [phi:makecharset::@11->makecharset::@1] - // [101] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#30 [phi:makecharset::@11->makecharset::@1#0] -- register_copy - // [101] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@11->makecharset::@1#1] -- register_copy - jmp b1 - // [114] phi from makecharset::@3 to makecharset::@5 [phi:makecharset::@3->makecharset::@5] b4: - // [114] phi (byte) makecharset::b#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#0] -- vbuyy=vbuc1 + // [105] phi from makecharset::@4 to makecharset::@7 [phi:makecharset::@4->makecharset::@7] + // [105] phi (byte) makecharset::b#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#0] -- vbuyy=vbuc1 ldy #0 - // [114] phi (byte) makecharset::ii#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#1] -- vbuxx=vbuc1 + // [105] phi (byte) makecharset::ii#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#1] -- vbuxx=vbuc1 ldx #0 - // makecharset::@5 - b5: - // for (unsigned char ii = 0; ii < 8; ++ii) - // [115] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@6 -- vbuxx_lt_vbuc1_then_la1 - cpx #8 - bcc b6 + // [105] phi from makecharset::@6 to makecharset::@7 [phi:makecharset::@6->makecharset::@7] + // [105] phi (byte) makecharset::b#10 = (byte) makecharset::b#2 [phi:makecharset::@6->makecharset::@7#0] -- register_copy + // [105] phi (byte) makecharset::ii#10 = (byte) makecharset::ii#1 [phi:makecharset::@6->makecharset::@7#1] -- register_copy // makecharset::@7 + b7: + // sid_rnd() + // [106] call sid_rnd + jsr sid_rnd + // [107] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + // makecharset::@14 + // [108] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 + // sid_rnd() & 0xFF + // [109] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 + and #$ff + sta _7 + // if ((sid_rnd() & 0xFF) > s) + // [110] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@9 -- vbuz1_le_vbuz2_then_la1 + lda s + cmp _7 + bcs b9 + // makecharset::@10 + // b |= bittab[ii] + // [111] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx + tya + ora bittab,x + tay + // [112] phi from makecharset::@10 makecharset::@14 to makecharset::@9 [phi:makecharset::@10/makecharset::@14->makecharset::@9] + // [112] phi (byte) makecharset::b#2 = (byte) makecharset::b#1 [phi:makecharset::@10/makecharset::@14->makecharset::@9#0] -- register_copy + // makecharset::@9 + b9: + // for (unsigned char ii = 0; ii < 8; ++ii) + // [113] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#10 -- vbuxx=_inc_vbuxx + inx + // makecharset::@6 + // [114] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@7 -- vbuxx_lt_vbuc1_then_la1 + cpx #8 + bcc b7 + // makecharset::@8 // c*8 - // [116] (word~) makecharset::$10 ← (word) makecharset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [115] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda c asl sta _10 @@ -6590,7 +6717,7 @@ makecharset: { asl _10 rol _10+1 // (c*8) + i - // [117] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#2 -- vwuz1=vwuz1_plus_vbuz2 + // [116] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 -- vwuz1=vwuz1_plus_vbuz2 lda i clc adc _11 @@ -6599,7 +6726,7 @@ makecharset: { inc _11+1 !: // charset[(c*8) + i] = b - // [118] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz1 + // [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz1 clc lda _16 adc #CHARSET sta _16+1 - // [119] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy + // [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy tya ldy #0 sta (_16),y // for ( unsigned char i = 0; i < 8; ++i) - // [120] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 -- vbuz1=_inc_vbuz1 + // [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 -- vbuz1=_inc_vbuz1 inc i - // [106] phi from makecharset::@7 to makecharset::@3 [phi:makecharset::@7->makecharset::@3] - // [106] phi (byte) makecharset::i#2 = (byte) makecharset::i#1 [phi:makecharset::@7->makecharset::@3#0] -- register_copy - jmp b3 - // [121] phi from makecharset::@5 to makecharset::@6 [phi:makecharset::@5->makecharset::@6] - // makecharset::@6 - b6: - // sid_rnd() - // [122] call sid_rnd - jsr sid_rnd - // [123] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - // makecharset::@13 - // [124] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 - // sid_rnd() & 0xFF - // [125] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 - and #$ff - sta _7 - // if ((sid_rnd() & 0xFF) > s) - // [126] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@8 -- vbuz1_le_vbuz2_then_la1 - lda s - cmp _7 - bcs b8 - // makecharset::@9 - // b |= bittab[ii] - // [127] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx - tya - ora bittab,x - tay - // [128] phi from makecharset::@13 makecharset::@9 to makecharset::@8 [phi:makecharset::@13/makecharset::@9->makecharset::@8] - // [128] phi (byte) makecharset::b#6 = (byte) makecharset::b#2 [phi:makecharset::@13/makecharset::@9->makecharset::@8#0] -- register_copy - // makecharset::@8 - b8: - // for (unsigned char ii = 0; ii < 8; ++ii) - // [129] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuxx=_inc_vbuxx - inx - // [114] phi from makecharset::@8 to makecharset::@5 [phi:makecharset::@8->makecharset::@5] - // [114] phi (byte) makecharset::b#2 = (byte) makecharset::b#6 [phi:makecharset::@8->makecharset::@5#0] -- register_copy - // [114] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@8->makecharset::@5#1] -- register_copy - jmp b5 - bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 -} - // sid_rnd -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -sid_rnd: { - // return *SID_VOICE3_OSC; - // [130] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC - // sid_rnd::@return + // makecharset::@3 + // [120] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@4 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #8 + bcc b4 + // makecharset::@5 + // c & 0x07 + // [121] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 + lda c + and #7 + // if ((c & 0x07) == 0) + // [122] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@12 -- vbuaa_neq_0_then_la1 + cmp #0 + bne b12 + // [123] phi from makecharset::@5 to makecharset::@11 [phi:makecharset::@5->makecharset::@11] + // makecharset::@11 + // print_char('.') + // [124] call print_char + jsr print_char + // [125] phi from makecharset::@11 makecharset::@5 to makecharset::@12 [phi:makecharset::@11/makecharset::@5->makecharset::@12] + // [125] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#1 [phi:makecharset::@11/makecharset::@5->makecharset::@12#0] -- register_copy + // makecharset::@12 + b12: + // for (unsigned int c = 0; c < 0x100; ++c) + // [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#16 -- vwuz1=_inc_vwuz1 + inc c + bne !+ + inc c+1 + !: + // makecharset::@1 + // [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 + lda c+1 + cmp #>$100 + bcc b2 + bne !+ + lda c + cmp #<$100 + bcc b2 + !: + // makecharset::@return // } - // [131] return + // [128] return rts + bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // print_char // Print a single char print_char: { .const ch = '.' // *(print_char_cursor++) = ch - // [132] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 + // [129] *((byte*) print_char_cursor#52) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (print_char_cursor),y // *(print_char_cursor++) = ch; - // [133] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 + // [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#52 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 !: // print_char::@return // } - // [134] return + // [131] return + rts +} + // sid_rnd +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + // return *SID_VOICE3_OSC; + // [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 + lda SID_VOICE3_OSC + // sid_rnd::@return + // } + // [133] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) - // [136] call memset - // [138] phi from print_cls to memset [phi:print_cls->memset] + // [135] call memset + // [137] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } - // [137] return + // [136] return rts } // memset @@ -6706,16 +6838,29 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = $c - // [139] phi from memset to memset::@1 [phi:memset->memset::@1] - // [139] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [138] phi from memset to memset::@2 [phi:memset->memset::@2] + // [138] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [138] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [138] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [139] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [141] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -6724,41 +6869,25 @@ memset: { bne b2 // memset::@return // } - // [141] return + // [142] return rts - // memset::@2 - b2: - // *dst = c - // [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [143] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [139] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [139] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { // *SID_VOICE3_FREQ = $ffff - // [144] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [143] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff sta SID_VOICE3_FREQ lda #>$ffff sta SID_VOICE3_FREQ+1 // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE - // [145] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [144] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL // sid_rnd_init::@return // } - // [146] return + // [145] return rts } // File Data diff --git a/src/test/ref/examples/plasma/plasma-unroll.sym b/src/test/ref/examples/plasma/plasma-unroll.sym index f8e805ae2..eaf131fbb 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.sym +++ b/src/test/ref/examples/plasma/plasma-unroll.sym @@ -40,8 +40,8 @@ (byte) c1B#1 c1B zp ZP_BYTE:15 1.0714285714285714 (byte) c1B#3 c1B zp ZP_BYTE:15 0.1911764705882353 (byte) c2A -(byte) c2A#1 c2A zp ZP_BYTE:18 0.625 -(byte) c2A#3 c2A zp ZP_BYTE:18 0.22413793103448276 +(byte) c2A#1 c2A zp ZP_BYTE:16 0.625 +(byte) c2A#3 c2A zp ZP_BYTE:16 0.22413793103448276 (byte) c2B (byte) c2B#1 c2B zp ZP_BYTE:2 0.6 (byte) c2B#3 c2B zp ZP_BYTE:2 0.22807017543859648 @@ -50,6 +50,7 @@ (byte~) doplasma::$4 reg byte a 202.0 (label) doplasma::@1 (label) doplasma::@10 +(label) doplasma::@11 (label) doplasma::@17_1 (label) doplasma::@17_10 (label) doplasma::@17_11 @@ -85,29 +86,29 @@ (label) doplasma::@return (byte) doplasma::c1a (byte) doplasma::c1a#0 c1a zp ZP_BYTE:4 2.0 -(byte) doplasma::c1a#1 c1a zp ZP_BYTE:4 50.5 -(byte) doplasma::c1a#2 c1a zp ZP_BYTE:4 61.0 +(byte) doplasma::c1a#1 c1a zp ZP_BYTE:4 40.4 +(byte) doplasma::c1a#4 c1a zp ZP_BYTE:4 76.25 (byte) doplasma::c1b (byte) doplasma::c1b#0 c1b zp ZP_BYTE:5 4.0 -(byte) doplasma::c1b#1 c1b zp ZP_BYTE:5 67.33333333333333 -(byte) doplasma::c1b#2 c1b zp ZP_BYTE:5 50.83333333333333 +(byte) doplasma::c1b#1 c1b zp ZP_BYTE:5 50.5 +(byte) doplasma::c1b#4 c1b zp ZP_BYTE:5 61.0 (byte) doplasma::c2a (byte) doplasma::c2a#0 c2a zp ZP_BYTE:7 2.0 -(byte) doplasma::c2a#1 c2a zp ZP_BYTE:7 67.33333333333333 -(byte) doplasma::c2a#2 c2a zp ZP_BYTE:7 76.25 +(byte) doplasma::c2a#1 c2a zp ZP_BYTE:7 50.5 +(byte) doplasma::c2a#4 c2a zp ZP_BYTE:7 101.66666666666666 (byte) doplasma::c2b (byte) doplasma::c2b#0 c2b zp ZP_BYTE:8 4.0 -(byte) doplasma::c2b#1 c2b zp ZP_BYTE:8 101.0 -(byte) doplasma::c2b#2 c2b zp ZP_BYTE:8 61.0 +(byte) doplasma::c2b#1 c2b zp ZP_BYTE:8 67.33333333333333 +(byte) doplasma::c2b#4 c2b zp ZP_BYTE:8 76.25 (byte) doplasma::i (byte) doplasma::i#1 i zp ZP_BYTE:3 101.0 -(byte) doplasma::i#2 i zp ZP_BYTE:3 57.714285714285715 +(byte) doplasma::i#4 i zp ZP_BYTE:3 50.5 (byte) doplasma::i1 -(byte) doplasma::i1#1 i1 zp ZP_BYTE:6 202.0 -(byte) doplasma::i1#2 i1 zp ZP_BYTE:6 67.33333333333333 +(byte) doplasma::i1#1 i1 zp ZP_BYTE:6 151.5 +(byte) doplasma::i1#4 i1 zp ZP_BYTE:6 60.599999999999994 (byte) doplasma::i2 -(byte) doplasma::i2#1 reg byte x 202.0 -(byte) doplasma::i2#2 reg byte x 55.26415094339627 +(byte) doplasma::i2#1 reg byte x 151.5 +(byte) doplasma::i2#11 reg byte x 54.3846153846154 (byte) doplasma::ii (byte*) doplasma::screen (byte) doplasma::val @@ -134,18 +135,18 @@ (byte) doplasma::val#45 reg byte a 151.5 (byte) doplasma::val#47 reg byte a 151.5 (byte) doplasma::val#49 reg byte a 151.5 -(byte) doplasma::val#5 reg byte a 151.5 -(byte) doplasma::val#51 reg byte a 202.0 +(byte) doplasma::val#51 reg byte a 151.5 +(byte) doplasma::val#53 reg byte a 202.0 (byte) doplasma::val#7 reg byte a 151.5 (byte[$28]) doplasma::xbuf (const byte[$28]) doplasma::xbuf#0 xbuf = { fill( $28, 0) } (byte[$19]) doplasma::ybuf (const byte[$19]) doplasma::ybuf#0 ybuf = { fill( $19, 0) } (byte) doplasma::yprev -(byte) doplasma::yprev#2 reg byte x 67.33333333333333 -(byte~) doplasma::yprev#4 reg byte x 202.0 +(byte) doplasma::yprev#2 yprev zp ZP_BYTE:14 43.285714285714285 +(byte) doplasma::yprev#4 reg byte x 101.0 +(byte~) doplasma::yprev#6 reg byte x 202.0 (byte) doplasma::yval -(byte) doplasma::yval#0 yval zp ZP_BYTE:14 50.5 (void()) main() (label) main::@1 (label) main::@2 @@ -170,18 +171,19 @@ (const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN1#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f (byte*) main::toD0181_screen (void()) makecharset((byte*) makecharset::charset) -(word~) makecharset::$10 $10 zp ZP_WORD:16 202.0 -(word~) makecharset::$11 $11 zp ZP_WORD:16 202.0 +(word~) makecharset::$10 $10 zp ZP_WORD:17 202.0 +(word~) makecharset::$11 $11 zp ZP_WORD:17 202.0 (byte~) makecharset::$12 reg byte a 22.0 -(byte*~) makecharset::$16 $16 zp ZP_WORD:16 202.0 +(byte*~) makecharset::$16 $16 zp ZP_WORD:17 202.0 (byte~) makecharset::$3 reg byte a 22.0 (byte~) makecharset::$6 reg byte a 2002.0 -(byte~) makecharset::$7 $7 zp ZP_BYTE:18 2002.0 +(byte~) makecharset::$7 $7 zp ZP_BYTE:16 2002.0 (label) makecharset::@1 (label) makecharset::@10 (label) makecharset::@11 (label) makecharset::@12 (label) makecharset::@13 +(label) makecharset::@14 (label) makecharset::@2 (label) makecharset::@3 (label) makecharset::@4 @@ -193,22 +195,22 @@ (label) makecharset::@return (byte) makecharset::b (byte) makecharset::b#1 reg byte y 2002.0 -(byte) makecharset::b#2 reg byte y 282.1818181818182 -(byte) makecharset::b#6 reg byte y 1501.5 +(byte) makecharset::b#10 reg byte y 500.5 +(byte) makecharset::b#2 reg byte y 517.3333333333334 (byte[8]) makecharset::bittab (const byte[8]) makecharset::bittab#0 bittab = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (word) makecharset::c -(word) makecharset::c#1 c zp ZP_WORD:9 22.0 -(word) makecharset::c#2 c zp ZP_WORD:9 5.777777777777778 +(word) makecharset::c#1 c zp ZP_WORD:9 16.5 +(word) makecharset::c#16 c zp ZP_WORD:9 5.800000000000001 (byte*) makecharset::charset (byte) makecharset::i -(byte) makecharset::i#1 i zp ZP_BYTE:11 202.0 -(byte) makecharset::i#2 i zp ZP_BYTE:11 23.764705882352942 +(byte) makecharset::i#1 i zp ZP_BYTE:11 151.5 +(byte) makecharset::i#13 i zp ZP_BYTE:11 20.2 (byte) makecharset::ii -(byte) makecharset::ii#1 reg byte x 2002.0 -(byte) makecharset::ii#2 reg byte x 400.4 +(byte) makecharset::ii#1 reg byte x 1501.5 +(byte) makecharset::ii#10 reg byte x 375.375 (byte) makecharset::s -(byte) makecharset::s#0 s zp ZP_BYTE:15 53.26315789473684 +(byte) makecharset::s#0 s zp ZP_BYTE:15 56.22222222222223 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -216,8 +218,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:12 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:12 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:12 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:12 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -231,8 +233,8 @@ (const byte) print_char::ch#0 ch = (byte) '.' (byte*) print_char_cursor (byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:12 4.333333333333333 -(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:12 1.0 -(byte*) print_char_cursor#30 print_char_cursor zp ZP_WORD:12 16.5 +(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:12 11.0 +(byte*) print_char_cursor#52 print_char_cursor zp ZP_WORD:12 1.0833333333333333 (void()) print_cls() (label) print_cls::@return (byte*) print_line_cursor @@ -247,22 +249,24 @@ (label) sid_rnd_init::@return zp ZP_BYTE:2 [ c2B#1 c2B#3 ] -zp ZP_BYTE:3 [ doplasma::i#2 doplasma::i#1 ] -zp ZP_BYTE:4 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -zp ZP_BYTE:5 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -reg byte x [ doplasma::yprev#2 doplasma::yprev#4 ] -zp ZP_BYTE:6 [ doplasma::i1#2 doplasma::i1#1 ] -zp ZP_BYTE:7 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -zp ZP_BYTE:8 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -reg byte x [ doplasma::i2#2 doplasma::i2#1 ] -zp ZP_WORD:9 [ makecharset::c#2 makecharset::c#1 main::col#2 main::col#1 ] -zp ZP_BYTE:11 [ makecharset::i#2 makecharset::i#1 c1A#1 c1A#3 ] -reg byte x [ makecharset::ii#2 makecharset::ii#1 ] -reg byte y [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] +zp ZP_BYTE:3 [ doplasma::i#4 doplasma::i#1 ] +zp ZP_BYTE:4 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +zp ZP_BYTE:5 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +reg byte x [ doplasma::yprev#4 doplasma::yprev#6 ] +zp ZP_BYTE:6 [ doplasma::i1#4 doplasma::i1#1 ] +zp ZP_BYTE:7 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +zp ZP_BYTE:8 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +reg byte x [ doplasma::i2#11 doplasma::i2#1 ] +zp ZP_WORD:9 [ makecharset::c#16 makecharset::c#1 main::col#2 main::col#1 ] +zp ZP_BYTE:11 [ makecharset::i#13 makecharset::i#1 c1A#1 c1A#3 ] +reg byte x [ makecharset::ii#10 makecharset::ii#1 ] +reg byte y [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] +zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] +zp ZP_BYTE:14 [ doplasma::yprev#2 ] +reg byte a [ doplasma::$2 ] +reg byte a [ doplasma::$4 ] reg byte a [ doplasma::val#0 ] reg byte a [ doplasma::val#1 ] -reg byte a [ doplasma::val#5 ] reg byte a [ doplasma::val#7 ] reg byte a [ doplasma::val#10 ] reg byte a [ doplasma::val#11 ] @@ -286,14 +290,12 @@ reg byte a [ doplasma::val#45 ] reg byte a [ doplasma::val#47 ] reg byte a [ doplasma::val#49 ] reg byte a [ doplasma::val#51 ] -reg byte a [ doplasma::$4 ] -zp ZP_BYTE:14 [ doplasma::yval#0 ] -reg byte a [ doplasma::$2 ] +reg byte a [ doplasma::val#53 ] reg byte a [ makecharset::$3 ] zp ZP_BYTE:15 [ makecharset::s#0 c1B#1 c1B#3 ] -reg byte a [ makecharset::$12 ] -zp ZP_WORD:16 [ makecharset::$10 makecharset::$11 makecharset::$16 ] reg byte a [ sid_rnd::return#2 ] reg byte a [ makecharset::$6 ] -zp ZP_BYTE:18 [ makecharset::$7 c2A#1 c2A#3 ] +zp ZP_BYTE:16 [ makecharset::$7 c2A#1 c2A#3 ] +zp ZP_WORD:17 [ makecharset::$10 makecharset::$11 makecharset::$16 ] +reg byte a [ makecharset::$12 ] reg byte a [ sid_rnd::return#0 ] diff --git a/src/test/ref/examples/plasma/plasma.asm b/src/test/ref/examples/plasma/plasma.asm index fad1655da..f6ee10e31 100644 --- a/src/test/ref/examples/plasma/plasma.asm +++ b/src/test/ref/examples/plasma/plasma.asm @@ -26,7 +26,7 @@ .label print_char_cursor = 9 .label c1A = $b .label c1B = $e - .label c2A = $11 + .label c2A = $f .label c2B = 2 main: { .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f @@ -94,75 +94,6 @@ doplasma: { sta c1b lda #0 sta i - b1: - lda i - cmp #$19 - bcc b2 - lax c1A - axs #-[3] - stx c1A - lax c1B - axs #5 - stx c1B - lda c2A - sta c2a - lda c2B - sta c2b - lda #0 - sta i1 - b4: - lda i1 - cmp #$28 - bcc b5 - lda c2A - clc - adc #2 - sta c2A - lax c2B - axs #3 - stx c2B - ldx #0 - b7: - cpx #$19 - bcc b3 - rts - b3: - ldy #0 - b8: - cpy #$28 - bcc b9 - lda #$28 - clc - adc screen - sta screen - bcc !+ - inc screen+1 - !: - inx - jmp b7 - b9: - lda xbuf,y - clc - adc ybuf,x - sta (screen),y - iny - jmp b8 - b5: - ldy c2a - lda SINTABLE,y - ldy c2b - clc - adc SINTABLE,y - ldy i1 - sta xbuf,y - lax c2a - axs #-[3] - stx c2a - lax c2b - axs #-[7] - stx c2b - inc i1 - jmp b4 b2: ldy c1a lda SINTABLE,y @@ -178,19 +109,80 @@ doplasma: { axs #-[9] stx c1b inc i - jmp b1 + lda i + cmp #$19 + bcc b2 + lax c1A + axs #-[3] + stx c1A + lax c1B + axs #5 + stx c1B + lda c2A + sta c2a + lda c2B + sta c2b + lda #0 + sta i1 + b5: + ldy c2a + lda SINTABLE,y + ldy c2b + clc + adc SINTABLE,y + ldy i1 + sta xbuf,y + lax c2a + axs #-[3] + stx c2a + lax c2b + axs #-[7] + stx c2b + inc i1 + lda i1 + cmp #$28 + bcc b5 + lda c2A + clc + adc #2 + sta c2A + lax c2B + axs #3 + stx c2B + ldx #0 + b8: + ldy #0 + b10: + lda xbuf,y + clc + adc ybuf,x + sta (screen),y + iny + cpy #$28 + bcc b10 + lda #$28 + clc + adc screen + sta screen + bcc !+ + inc screen+1 + !: + inx + cpx #$19 + bcc b8 + rts xbuf: .fill $28, 0 ybuf: .fill $19, 0 } // Make a plasma-friendly charset where the chars are randomly filled makecharset: { - .label _7 = $11 - .label _10 = $f - .label _11 = $f + .label _7 = $f + .label _10 = $10 + .label _11 = $10 .label s = $e .label i = $b .label c = $c - .label _16 = $f + .label _16 = $10 jsr sid_rnd_init jsr print_cls lda #$100 - bcc b2 - bne !+ - lda c - cmp #<$100 - bcc b2 - !: - rts b2: lda c tay @@ -217,27 +199,23 @@ makecharset: { sta s lda #0 sta i - b3: - lda i - cmp #8 - bcc b4 - lda c - and #7 - cmp #0 - bne b11 - jsr print_char - b11: - inc c - bne !+ - inc c+1 - !: - jmp b1 b4: ldy #0 ldx #0 - b5: + b7: + jsr sid_rnd + and #$ff + sta _7 + lda s + cmp _7 + bcs b9 + tya + ora bittab,x + tay + b9: + inx cpx #8 - bcc b6 + bcc b7 lda c asl sta _10 @@ -266,27 +244,29 @@ makecharset: { ldy #0 sta (_16),y inc i - jmp b3 - b6: - jsr sid_rnd - and #$ff - sta _7 - lda s - cmp _7 - bcs b8 - tya - ora bittab,x - tay - b8: - inx - jmp b5 - bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 -} -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -sid_rnd: { - lda SID_VOICE3_OSC + lda i + cmp #8 + bcc b4 + lda c + and #7 + cmp #0 + bne b12 + jsr print_char + b12: + inc c + bne !+ + inc c+1 + !: + lda c+1 + cmp #>$100 + bcc b2 + bne !+ + lda c + cmp #<$100 + bcc b2 + !: rts + bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // Print a single char print_char: { @@ -300,6 +280,12 @@ print_char: { !: rts } +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + lda SID_VOICE3_OSC + rts +} // Clear the screen. Also resets current line/char cursor. print_cls: { jsr memset @@ -316,14 +302,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp # (const word) main::toD0181_$4#0 Constant right-side identified [37] (word~) main::toD0182_$1#0 ← (const word) main::toD0182_$0#0 & (word) $3fff @@ -1963,23 +2056,30 @@ Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0/4 Constant (const word) main::toD0182_$2#0 = main::toD0182_$1#0*4 Constant (const byte) main::toD0182_$6#0 = main::toD0182_$5#0/4 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [25] (byte~) main::toD0181_$3#0 ← > (const word) main::toD0181_$2#0 -Constant right-side identified [26] (byte~) main::toD0181_$7#0 ← (const byte) main::toD0181_$6#0 & (byte) $f -Constant right-side identified [30] (byte~) main::toD0182_$3#0 ← > (const word) main::toD0182_$2#0 -Constant right-side identified [31] (byte~) main::toD0182_$7#0 ← (const byte) main::toD0182_$6#0 & (byte) $f +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) memset::dst#1 = (byte*) memset::dst#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) memset::dst#5 (const byte*) memset::dst#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [27] (byte~) main::toD0181_$3#0 ← > (const word) main::toD0181_$2#0 +Constant right-side identified [28] (byte~) main::toD0181_$7#0 ← (const byte) main::toD0181_$6#0 & (byte) $f +Constant right-side identified [32] (byte~) main::toD0182_$3#0 ← > (const word) main::toD0182_$2#0 +Constant right-side identified [33] (byte~) main::toD0182_$7#0 ← (const byte) main::toD0182_$6#0 & (byte) $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_$3#0 = >main::toD0181_$2#0 Constant (const byte) main::toD0181_$7#0 = main::toD0181_$6#0&$f Constant (const byte) main::toD0182_$3#0 = >main::toD0182_$2#0 Constant (const byte) main::toD0182_$7#0 = main::toD0182_$6#0&$f Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [100] if((const byte*) memset::dst#0!=(const byte*) memset::end#0) goto memset::@5 +Successful SSA optimization Pass2ConstantIfs Constant right-side identified [25] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3#0 | (const byte) main::toD0181_$7#0 Constant right-side identified [28] (byte) main::toD0182_return#0 ← (const byte) main::toD0182_$3#0 | (const byte) main::toD0182_$7#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0 Constant (const byte) main::toD0182_return#0 = main::toD0182_$3#0|main::toD0182_$7#0 Successful SSA optimization Pass2ConstantIdentification -Rewriting multiplication to use shift [78] (word~) makecharset::$10 ← (word) makecharset::c#2 * (byte) 8 +Rewriting multiplication to use shift [78] (word~) makecharset::$10 ← (word) makecharset::c#16 * (byte) 8 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte*) memset::dst#0 Inlining constant with var siblings (const byte*) main::col#0 @@ -2037,9 +2137,17 @@ Constant inlined makecharset::b#0 = (byte) 0 Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 Constant inlined makecharset::c#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting memset::@10(between memset::@4 and memset::@5) Added new block during phi lifting main::@14(between main::@1 and main::@1) -Added new block during phi lifting makecharset::@27(between makecharset::@25 and makecharset::@10) -Added new block during phi lifting makecharset::@28(between makecharset::@6 and makecharset::@19) +Added new block during phi lifting doplasma::@25(between doplasma::@1 and doplasma::@2) +Added new block during phi lifting doplasma::@26(between doplasma::@7 and doplasma::@8) +Added new block during phi lifting doplasma::@27(between doplasma::@13 and doplasma::@14) +Added new block during phi lifting doplasma::@28(between doplasma::@16 and doplasma::@17) +Added new block during phi lifting makecharset::@27(between makecharset::@1 and makecharset::@2) +Added new block during phi lifting makecharset::@28(between makecharset::@4 and makecharset::@5) +Added new block during phi lifting makecharset::@29(between makecharset::@7 and makecharset::@8) +Added new block during phi lifting makecharset::@30(between makecharset::@25 and makecharset::@10) +Added new block during phi lifting makecharset::@31(between makecharset::@6 and makecharset::@19) Adding NOP phi() at start of @begin Adding NOP phi() at start of @16 Adding NOP phi() at start of @40 @@ -2056,23 +2164,25 @@ Adding NOP phi() at start of main::toD0181_@return Adding NOP phi() at start of main::@13 Adding NOP phi() at start of main::toD0182 Adding NOP phi() at start of main::toD0182_@return -Adding NOP phi() at start of doplasma::@14 +Adding NOP phi() at start of doplasma::@16_1 Adding NOP phi() at start of makecharset Adding NOP phi() at start of makecharset::@23 Adding NOP phi() at start of makecharset::@24 +Adding NOP phi() at start of makecharset::@1_1 +Adding NOP phi() at start of makecharset::@4_1 +Adding NOP phi() at start of makecharset::@7_1 Adding NOP phi() at start of makecharset::@18 -Adding NOP phi() at start of makecharset::@5 -Adding NOP phi() at start of makecharset::@8 Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@4_1 Adding NOP phi() at start of memset::@1 CALL GRAPH Calls in [] to main:6 Calls in [main] to makecharset:17 doplasma:24 doplasma:33 -Calls in [makecharset] to sid_rnd_init:92 print_cls:94 print_char:106 sid_rnd:123 -Calls in [print_cls] to memset:141 +Calls in [makecharset] to sid_rnd_init:92 print_cls:94 sid_rnd:104 print_char:123 +Calls in [print_cls] to memset:142 Created 27 initial phi equivalence classes Coalesced [20] c1A#38 ← c1A#14 @@ -2088,30 +2198,30 @@ Coalesced (already) [39] c1B#37 ← c1B#4 Coalesced (already) [40] c2A#37 ← c2A#4 Coalesced (already) [41] c2B#37 ← c2B#4 Coalesced [42] main::col#3 ← main::col#1 -Coalesced [46] doplasma::c1a#4 ← doplasma::c1a#0 -Coalesced [47] doplasma::c1b#4 ← doplasma::c1b#0 -Coalesced [54] doplasma::c2a#4 ← doplasma::c2a#0 -Coalesced [55] doplasma::c2b#4 ← doplasma::c2b#0 -Coalesced [60] doplasma::screen#16 ← doplasma::screen#13 -Coalesced [69] doplasma::ii#7 ← doplasma::ii#1 -Coalesced [70] doplasma::screen#15 ← doplasma::screen#2 -Coalesced [74] doplasma::i2#4 ← doplasma::i2#1 -Coalesced [80] doplasma::i1#4 ← doplasma::i1#1 -Coalesced [81] doplasma::c2a#5 ← doplasma::c2a#1 -Coalesced [82] doplasma::c2b#5 ← doplasma::c2b#1 -Coalesced [88] doplasma::i#4 ← doplasma::i#1 -Coalesced [89] doplasma::c1a#5 ← doplasma::c1a#1 -Coalesced [90] doplasma::c1b#5 ← doplasma::c1b#1 -Coalesced [107] print_char_cursor#53 ← print_char_cursor#1 -Coalesced [110] makecharset::c#16 ← makecharset::c#1 -Coalesced [111] print_char_cursor#52 ← print_char_cursor#29 -Coalesced (already) [112] print_char_cursor#54 ← print_char_cursor#18 -Coalesced [121] makecharset::i#10 ← makecharset::i#1 -Coalesced [129] makecharset::b#9 ← makecharset::b#1 -Coalesced [132] makecharset::ii#7 ← makecharset::ii#1 -Coalesced [133] makecharset::b#8 ← makecharset::b#6 -Coalesced (already) [134] makecharset::b#10 ← makecharset::b#2 -Coalesced [152] memset::dst#4 ← memset::dst#1 +Coalesced [46] doplasma::c1a#7 ← doplasma::c1a#0 +Coalesced [47] doplasma::c1b#7 ← doplasma::c1b#0 +Coalesced [59] doplasma::c2a#7 ← doplasma::c2a#0 +Coalesced [60] doplasma::c2b#7 ← doplasma::c2b#0 +Coalesced [70] doplasma::screen#22 ← doplasma::screen#13 +Coalesced [82] doplasma::ii#13 ← doplasma::ii#1 +Coalesced [83] doplasma::screen#21 ← doplasma::screen#2 +Coalesced [84] doplasma::i2#6 ← doplasma::i2#1 +Coalesced [85] doplasma::i1#6 ← doplasma::i1#1 +Coalesced [86] doplasma::c2a#6 ← doplasma::c2a#1 +Coalesced [87] doplasma::c2b#6 ← doplasma::c2b#1 +Coalesced [88] doplasma::i#6 ← doplasma::i#1 +Coalesced [89] doplasma::c1a#6 ← doplasma::c1a#1 +Coalesced [90] doplasma::c1b#6 ← doplasma::c1b#1 +Coalesced [110] makecharset::b#14 ← makecharset::b#1 +Coalesced [124] print_char_cursor#68 ← print_char_cursor#1 +Coalesced [129] makecharset::c#32 ← makecharset::c#1 +Coalesced [130] print_char_cursor#67 ← print_char_cursor#18 +Coalesced (already) [131] print_char_cursor#69 ← print_char_cursor#56 +Coalesced [132] makecharset::i#19 ← makecharset::i#1 +Coalesced [133] makecharset::ii#12 ← makecharset::ii#1 +Coalesced [134] makecharset::b#13 ← makecharset::b#2 +Coalesced (already) [135] makecharset::b#15 ← makecharset::b#10 +Coalesced [154] memset::dst#6 ← memset::dst#1 Coalesced down to 20 phi equivalence classes Culled Empty Block (label) @16 Culled Empty Block (label) @40 @@ -2124,15 +2234,29 @@ Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@13 Culled Empty Block (label) main::toD0182_@return Culled Empty Block (label) main::@14 -Culled Empty Block (label) doplasma::@14 +Culled Empty Block (label) doplasma::@1_1 +Culled Empty Block (label) doplasma::@7_1 +Culled Empty Block (label) doplasma::@13_1 +Culled Empty Block (label) doplasma::@16_1 +Culled Empty Block (label) doplasma::@27 +Culled Empty Block (label) doplasma::@28 +Culled Empty Block (label) doplasma::@26 +Culled Empty Block (label) doplasma::@25 Culled Empty Block (label) makecharset::@24 +Culled Empty Block (label) makecharset::@1_1 +Culled Empty Block (label) makecharset::@4_1 +Culled Empty Block (label) makecharset::@7_1 Culled Empty Block (label) makecharset::@26 -Culled Empty Block (label) makecharset::@28 -Culled Empty Block (label) makecharset::@5 Culled Empty Block (label) makecharset::@27 +Culled Empty Block (label) makecharset::@31 +Culled Empty Block (label) makecharset::@28 +Culled Empty Block (label) makecharset::@29 +Culled Empty Block (label) makecharset::@30 Culled Empty Block (label) print_cls::@1 Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@4_1 Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@10 Renumbering block @45 to @1 Renumbering block memset::@4 to memset::@1 Renumbering block memset::@5 to memset::@2 @@ -2142,20 +2266,22 @@ Renumbering block doplasma::@7 to doplasma::@4 Renumbering block doplasma::@8 to doplasma::@5 Renumbering block doplasma::@9 to doplasma::@6 Renumbering block doplasma::@13 to doplasma::@7 -Renumbering block doplasma::@16 to doplasma::@8 -Renumbering block doplasma::@17 to doplasma::@9 -Renumbering block doplasma::@18 to doplasma::@10 +Renumbering block doplasma::@14 to doplasma::@8 +Renumbering block doplasma::@16 to doplasma::@9 +Renumbering block doplasma::@17 to doplasma::@10 +Renumbering block doplasma::@18 to doplasma::@11 Renumbering block makecharset::@4 to makecharset::@3 -Renumbering block makecharset::@6 to makecharset::@4 -Renumbering block makecharset::@7 to makecharset::@5 -Renumbering block makecharset::@8 to makecharset::@6 -Renumbering block makecharset::@9 to makecharset::@7 -Renumbering block makecharset::@10 to makecharset::@8 -Renumbering block makecharset::@13 to makecharset::@9 -Renumbering block makecharset::@18 to makecharset::@10 -Renumbering block makecharset::@19 to makecharset::@11 -Renumbering block makecharset::@23 to makecharset::@12 -Renumbering block makecharset::@25 to makecharset::@13 +Renumbering block makecharset::@5 to makecharset::@4 +Renumbering block makecharset::@6 to makecharset::@5 +Renumbering block makecharset::@7 to makecharset::@6 +Renumbering block makecharset::@8 to makecharset::@7 +Renumbering block makecharset::@9 to makecharset::@8 +Renumbering block makecharset::@10 to makecharset::@9 +Renumbering block makecharset::@13 to makecharset::@10 +Renumbering block makecharset::@18 to makecharset::@11 +Renumbering block makecharset::@19 to makecharset::@12 +Renumbering block makecharset::@23 to makecharset::@13 +Renumbering block makecharset::@25 to makecharset::@14 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -2164,9 +2290,8 @@ Adding NOP phi() at start of main::@4 Adding NOP phi() at start of main::toD0181 Adding NOP phi() at start of main::toD0182 Adding NOP phi() at start of makecharset -Adding NOP phi() at start of makecharset::@12 -Adding NOP phi() at start of makecharset::@10 -Adding NOP phi() at start of makecharset::@6 +Adding NOP phi() at start of makecharset::@13 +Adding NOP phi() at start of makecharset::@11 Adding NOP phi() at start of print_cls Adding NOP phi() at start of memset @@ -2226,169 +2351,172 @@ doplasma: scope:[doplasma] from main::@4 main::@5 [21] (byte) c1A#10 ← phi( main::@4/(byte) c1A#14 main::@5/(byte) c1A#4 ) [22] (byte) doplasma::c1a#0 ← (byte) c1A#10 [23] (byte) doplasma::c1b#0 ← (byte) c1B#10 + to:doplasma::@2 +doplasma::@2: scope:[doplasma] from doplasma doplasma::@1 + [24] (byte) doplasma::c1b#4 ← phi( doplasma::@1/(byte) doplasma::c1b#1 doplasma/(byte) doplasma::c1b#0 ) + [24] (byte) doplasma::c1a#4 ← phi( doplasma::@1/(byte) doplasma::c1a#1 doplasma/(byte) doplasma::c1a#0 ) + [24] (byte) doplasma::i#4 ← phi( doplasma::@1/(byte) doplasma::i#1 doplasma/(byte) 0 ) + [25] (byte~) doplasma::$1 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) + [26] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#4) ← (byte~) doplasma::$1 + [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 + [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 + [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#4 to:doplasma::@1 -doplasma::@1: scope:[doplasma] from doplasma doplasma::@2 - [24] (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@2/(byte) doplasma::c1b#1 ) - [24] (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@2/(byte) doplasma::c1a#1 ) - [24] (byte) doplasma::i#2 ← phi( doplasma/(byte) 0 doplasma::@2/(byte) doplasma::i#1 ) - [25] if((byte) doplasma::i#2<(byte) $19) goto doplasma::@2 +doplasma::@1: scope:[doplasma] from doplasma::@2 + [30] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@2 to:doplasma::@3 doplasma::@3: scope:[doplasma] from doplasma::@1 - [26] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 - [27] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 - [28] (byte) doplasma::c2a#0 ← (byte) c2A#24 - [29] (byte) doplasma::c2b#0 ← (byte) c2B#24 + [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 + [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 + [33] (byte) doplasma::c2a#0 ← (byte) c2A#24 + [34] (byte) doplasma::c2b#0 ← (byte) c2B#24 + to:doplasma::@5 +doplasma::@5: scope:[doplasma] from doplasma::@3 doplasma::@4 + [35] (byte) doplasma::c2b#4 ← phi( doplasma::@4/(byte) doplasma::c2b#1 doplasma::@3/(byte) doplasma::c2b#0 ) + [35] (byte) doplasma::c2a#4 ← phi( doplasma::@4/(byte) doplasma::c2a#1 doplasma::@3/(byte) doplasma::c2a#0 ) + [35] (byte) doplasma::i1#4 ← phi( doplasma::@4/(byte) doplasma::i1#1 doplasma::@3/(byte) 0 ) + [36] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) + [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#4) ← (byte~) doplasma::$3 + [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 + [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 + [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#4 to:doplasma::@4 -doplasma::@4: scope:[doplasma] from doplasma::@3 doplasma::@5 - [30] (byte) doplasma::c2b#2 ← phi( doplasma::@3/(byte) doplasma::c2b#0 doplasma::@5/(byte) doplasma::c2b#1 ) - [30] (byte) doplasma::c2a#2 ← phi( doplasma::@3/(byte) doplasma::c2a#0 doplasma::@5/(byte) doplasma::c2a#1 ) - [30] (byte) doplasma::i1#2 ← phi( doplasma::@3/(byte) 0 doplasma::@5/(byte) doplasma::i1#1 ) - [31] if((byte) doplasma::i1#2<(byte) $28) goto doplasma::@5 +doplasma::@4: scope:[doplasma] from doplasma::@5 + [41] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@5 to:doplasma::@6 doplasma::@6: scope:[doplasma] from doplasma::@4 - [32] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2 - [33] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 + [42] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2 + [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 + to:doplasma::@8 +doplasma::@8: scope:[doplasma] from doplasma::@6 doplasma::@7 + [44] (byte*) doplasma::screen#18 ← phi( doplasma::@7/(byte*) doplasma::screen#2 doplasma::@6/(byte*) doplasma::screen#13 ) + [44] (byte) doplasma::ii#10 ← phi( doplasma::@7/(byte) doplasma::ii#1 doplasma::@6/(byte) 0 ) + to:doplasma::@10 +doplasma::@10: scope:[doplasma] from doplasma::@8 doplasma::@9 + [45] (byte) doplasma::i2#4 ← phi( doplasma::@9/(byte) doplasma::i2#1 doplasma::@8/(byte) 0 ) + [46] (byte~) doplasma::$6 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#4) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#10) + [47] *((byte*) doplasma::screen#18 + (byte) doplasma::i2#4) ← (byte~) doplasma::$6 + [48] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#4 + to:doplasma::@9 +doplasma::@9: scope:[doplasma] from doplasma::@10 + [49] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@10 + to:doplasma::@11 +doplasma::@11: scope:[doplasma] from doplasma::@9 + [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#18 + (byte) $28 + [51] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#10 to:doplasma::@7 -doplasma::@7: scope:[doplasma] from doplasma::@10 doplasma::@6 - [34] (byte*) doplasma::screen#6 ← phi( doplasma::@10/(byte*) doplasma::screen#2 doplasma::@6/(byte*) doplasma::screen#13 ) - [34] (byte) doplasma::ii#2 ← phi( doplasma::@10/(byte) doplasma::ii#1 doplasma::@6/(byte) 0 ) - [35] if((byte) doplasma::ii#2<(byte) $19) goto doplasma::@8 +doplasma::@7: scope:[doplasma] from doplasma::@11 + [52] if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@8 to:doplasma::@return doplasma::@return: scope:[doplasma] from doplasma::@7 - [36] return + [53] return to:@return -doplasma::@8: scope:[doplasma] from doplasma::@7 doplasma::@9 - [37] (byte) doplasma::i2#2 ← phi( doplasma::@7/(byte) 0 doplasma::@9/(byte) doplasma::i2#1 ) - [38] if((byte) doplasma::i2#2<(byte) $28) goto doplasma::@9 - to:doplasma::@10 -doplasma::@10: scope:[doplasma] from doplasma::@8 - [39] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#6 + (byte) $28 - [40] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#2 - to:doplasma::@7 -doplasma::@9: scope:[doplasma] from doplasma::@8 - [41] (byte~) doplasma::$6 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#2) - [42] *((byte*) doplasma::screen#6 + (byte) doplasma::i2#2) ← (byte~) doplasma::$6 - [43] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 - to:doplasma::@8 -doplasma::@5: scope:[doplasma] from doplasma::@4 - [44] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) - [45] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$3 - [46] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 - [47] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 - [48] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 - to:doplasma::@4 -doplasma::@2: scope:[doplasma] from doplasma::@1 - [49] (byte~) doplasma::$1 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) - [50] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$1 - [51] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 - [52] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 - [53] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 - to:doplasma::@1 makecharset: scope:[makecharset] from main::@2 [54] phi() [55] call sid_rnd_init - to:makecharset::@12 -makecharset::@12: scope:[makecharset] from makecharset + to:makecharset::@13 +makecharset::@13: scope:[makecharset] from makecharset [56] phi() [57] call print_cls + to:makecharset::@2 +makecharset::@2: scope:[makecharset] from makecharset::@1 makecharset::@13 + [58] (byte*) print_char_cursor#56 ← phi( makecharset::@1/(byte*) print_char_cursor#18 makecharset::@13/(const byte*) print_line_cursor#0 ) + [58] (word) makecharset::c#16 ← phi( makecharset::@1/(word) makecharset::c#1 makecharset::@13/(byte) 0 ) + [59] (byte~) makecharset::$3 ← < (word) makecharset::c#16 + [60] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) + to:makecharset::@4 +makecharset::@4: scope:[makecharset] from makecharset::@2 makecharset::@3 + [61] (byte) makecharset::i#13 ← phi( makecharset::@3/(byte) makecharset::i#1 makecharset::@2/(byte) 0 ) + to:makecharset::@7 +makecharset::@7: scope:[makecharset] from makecharset::@4 makecharset::@6 + [62] (byte) makecharset::b#10 ← phi( makecharset::@6/(byte) makecharset::b#2 makecharset::@4/(byte) 0 ) + [62] (byte) makecharset::ii#10 ← phi( makecharset::@6/(byte) makecharset::ii#1 makecharset::@4/(byte) 0 ) + [63] call sid_rnd + [64] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + to:makecharset::@14 +makecharset::@14: scope:[makecharset] from makecharset::@7 + [65] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 + [66] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff + [67] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@9 + to:makecharset::@10 +makecharset::@10: scope:[makecharset] from makecharset::@14 + [68] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) + to:makecharset::@9 +makecharset::@9: scope:[makecharset] from makecharset::@10 makecharset::@14 + [69] (byte) makecharset::b#2 ← phi( makecharset::@10/(byte) makecharset::b#1 makecharset::@14/(byte) makecharset::b#10 ) + [70] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#10 + to:makecharset::@6 +makecharset::@6: scope:[makecharset] from makecharset::@9 + [71] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@7 + to:makecharset::@8 +makecharset::@8: scope:[makecharset] from makecharset::@6 + [72] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 + [73] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 + [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 + [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 + [76] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 + to:makecharset::@3 +makecharset::@3: scope:[makecharset] from makecharset::@8 + [77] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@4 + to:makecharset::@5 +makecharset::@5: scope:[makecharset] from makecharset::@3 + [78] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 + [79] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@12 + to:makecharset::@11 +makecharset::@11: scope:[makecharset] from makecharset::@5 + [80] phi() + [81] call print_char + to:makecharset::@12 +makecharset::@12: scope:[makecharset] from makecharset::@11 makecharset::@5 + [82] (byte*) print_char_cursor#18 ← phi( makecharset::@11/(byte*) print_char_cursor#1 makecharset::@5/(byte*) print_char_cursor#56 ) + [83] (word) makecharset::c#1 ← ++ (word) makecharset::c#16 to:makecharset::@1 -makecharset::@1: scope:[makecharset] from makecharset::@11 makecharset::@12 - [58] (byte*) print_char_cursor#18 ← phi( makecharset::@11/(byte*) print_char_cursor#29 makecharset::@12/(const byte*) print_line_cursor#0 ) - [58] (word) makecharset::c#2 ← phi( makecharset::@11/(word) makecharset::c#1 makecharset::@12/(byte) 0 ) - [59] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 +makecharset::@1: scope:[makecharset] from makecharset::@12 + [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 to:makecharset::@return makecharset::@return: scope:[makecharset] from makecharset::@1 - [60] return + [85] return to:@return -makecharset::@2: scope:[makecharset] from makecharset::@1 - [61] (byte~) makecharset::$3 ← < (word) makecharset::c#2 - [62] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) - to:makecharset::@3 -makecharset::@3: scope:[makecharset] from makecharset::@2 makecharset::@7 - [63] (byte) makecharset::i#2 ← phi( makecharset::@2/(byte) 0 makecharset::@7/(byte) makecharset::i#1 ) - [64] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@5 - to:makecharset::@4 -makecharset::@4: scope:[makecharset] from makecharset::@3 - [65] (byte~) makecharset::$12 ← (word) makecharset::c#2 & (byte) 7 - [66] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@11 - to:makecharset::@10 -makecharset::@10: scope:[makecharset] from makecharset::@4 - [67] phi() - [68] call print_char - to:makecharset::@11 -makecharset::@11: scope:[makecharset] from makecharset::@10 makecharset::@4 - [69] (byte*) print_char_cursor#29 ← phi( makecharset::@10/(byte*) print_char_cursor#1 makecharset::@4/(byte*) print_char_cursor#18 ) - [70] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 - to:makecharset::@1 -makecharset::@5: scope:[makecharset] from makecharset::@3 makecharset::@8 - [71] (byte) makecharset::b#2 ← phi( makecharset::@8/(byte) makecharset::b#6 makecharset::@3/(byte) 0 ) - [71] (byte) makecharset::ii#2 ← phi( makecharset::@8/(byte) makecharset::ii#1 makecharset::@3/(byte) 0 ) - [72] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@6 - to:makecharset::@7 -makecharset::@7: scope:[makecharset] from makecharset::@5 - [73] (word~) makecharset::$10 ← (word) makecharset::c#2 << (byte) 3 - [74] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#2 - [75] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 - [76] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 - [77] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 - to:makecharset::@3 -makecharset::@6: scope:[makecharset] from makecharset::@5 - [78] phi() - [79] call sid_rnd - [80] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - to:makecharset::@13 -makecharset::@13: scope:[makecharset] from makecharset::@6 - [81] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 - [82] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff - [83] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@8 - to:makecharset::@9 -makecharset::@9: scope:[makecharset] from makecharset::@13 - [84] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) - to:makecharset::@8 -makecharset::@8: scope:[makecharset] from makecharset::@13 makecharset::@9 - [85] (byte) makecharset::b#6 ← phi( makecharset::@9/(byte) makecharset::b#1 makecharset::@13/(byte) makecharset::b#2 ) - [86] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 - to:makecharset::@5 -sid_rnd: scope:[sid_rnd] from makecharset::@6 - [87] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) - to:sid_rnd::@return -sid_rnd::@return: scope:[sid_rnd] from sid_rnd - [88] return - to:@return -print_char: scope:[print_char] from makecharset::@10 - [89] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 - [90] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 +print_char: scope:[print_char] from makecharset::@11 + [86] *((byte*) print_char_cursor#56) ← (const byte) print_char::ch#0 + [87] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#56 to:print_char::@return print_char::@return: scope:[print_char] from print_char - [91] return + [88] return to:@return -print_cls: scope:[print_cls] from makecharset::@12 - [92] phi() - [93] call memset +sid_rnd: scope:[sid_rnd] from makecharset::@7 + [89] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) + to:sid_rnd::@return +sid_rnd::@return: scope:[sid_rnd] from sid_rnd + [90] return + to:@return +print_cls: scope:[print_cls] from makecharset::@13 + [91] phi() + [92] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [94] return + [93] return to:@return memset: scope:[memset] from print_cls - [95] phi() + [94] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [95] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [96] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [97] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [96] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [97] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [98] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [98] return + [99] return to:@return -memset::@2: scope:[memset] from memset::@1 - [99] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [100] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 sid_rnd_init: scope:[sid_rnd_init] from makecharset - [101] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff - [102] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 + [100] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff + [101] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - [103] return + [102] return to:@return @@ -2429,36 +2557,36 @@ VARIABLE REGISTER WEIGHTS (byte~) doplasma::$6 2002.0 (byte) doplasma::c1a (byte) doplasma::c1a#0 2.0 -(byte) doplasma::c1a#1 67.33333333333333 -(byte) doplasma::c1a#2 76.25 +(byte) doplasma::c1a#1 50.5 +(byte) doplasma::c1a#4 101.66666666666666 (byte) doplasma::c1b (byte) doplasma::c1b#0 4.0 -(byte) doplasma::c1b#1 101.0 -(byte) doplasma::c1b#2 61.0 +(byte) doplasma::c1b#1 67.33333333333333 +(byte) doplasma::c1b#4 76.25 (byte) doplasma::c2a (byte) doplasma::c2a#0 2.0 -(byte) doplasma::c2a#1 67.33333333333333 -(byte) doplasma::c2a#2 76.25 +(byte) doplasma::c2a#1 50.5 +(byte) doplasma::c2a#4 101.66666666666666 (byte) doplasma::c2b (byte) doplasma::c2b#0 4.0 -(byte) doplasma::c2b#1 101.0 -(byte) doplasma::c2b#2 61.0 +(byte) doplasma::c2b#1 67.33333333333333 +(byte) doplasma::c2b#4 76.25 (byte) doplasma::i -(byte) doplasma::i#1 202.0 -(byte) doplasma::i#2 67.33333333333333 +(byte) doplasma::i#1 151.5 +(byte) doplasma::i#4 60.599999999999994 (byte) doplasma::i1 -(byte) doplasma::i1#1 202.0 -(byte) doplasma::i1#2 67.33333333333333 +(byte) doplasma::i1#1 151.5 +(byte) doplasma::i1#4 60.599999999999994 (byte) doplasma::i2 -(byte) doplasma::i2#1 2002.0 -(byte) doplasma::i2#2 1251.25 +(byte) doplasma::i2#1 1501.5 +(byte) doplasma::i2#4 1334.6666666666667 (byte) doplasma::ii -(byte) doplasma::ii#1 202.0 -(byte) doplasma::ii#2 163.0 +(byte) doplasma::ii#1 151.5 +(byte) doplasma::ii#10 171.85714285714283 (byte*) doplasma::screen (byte*) doplasma::screen#13 0.08695652173913043 -(byte*) doplasma::screen#2 101.0 -(byte*) doplasma::screen#6 172.14285714285714 +(byte*) doplasma::screen#18 200.83333333333334 +(byte*) doplasma::screen#2 67.33333333333333 (byte[$28]) doplasma::xbuf (byte[$19]) doplasma::ybuf (void()) main() @@ -2499,26 +2627,26 @@ VARIABLE REGISTER WEIGHTS (byte~) makecharset::$7 2002.0 (byte) makecharset::b (byte) makecharset::b#1 2002.0 -(byte) makecharset::b#2 282.1818181818182 -(byte) makecharset::b#6 1501.5 +(byte) makecharset::b#10 500.5 +(byte) makecharset::b#2 517.3333333333334 (byte[8]) makecharset::bittab (word) makecharset::c -(word) makecharset::c#1 22.0 -(word) makecharset::c#2 5.777777777777778 +(word) makecharset::c#1 16.5 +(word) makecharset::c#16 5.800000000000001 (byte*) makecharset::charset (byte) makecharset::i -(byte) makecharset::i#1 202.0 -(byte) makecharset::i#2 23.764705882352942 +(byte) makecharset::i#1 151.5 +(byte) makecharset::i#13 20.2 (byte) makecharset::ii -(byte) makecharset::ii#1 2002.0 -(byte) makecharset::ii#2 400.4 +(byte) makecharset::ii#1 1501.5 +(byte) makecharset::ii#10 375.375 (byte) makecharset::s -(byte) makecharset::s#0 53.26315789473684 +(byte) makecharset::s#0 56.22222222222223 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst -(byte*) memset::dst#1 22.0 -(byte*) memset::dst#2 14.666666666666666 +(byte*) memset::dst#1 16.5 +(byte*) memset::dst#4 16.5 (byte*) memset::end (word) memset::num (void*) memset::return @@ -2527,8 +2655,8 @@ VARIABLE REGISTER WEIGHTS (byte) print_char::ch (byte*) print_char_cursor (byte*) print_char_cursor#1 4.333333333333333 -(byte*) print_char_cursor#18 1.0 -(byte*) print_char_cursor#29 16.5 +(byte*) print_char_cursor#18 11.0 +(byte*) print_char_cursor#56 1.0833333333333333 (void()) print_cls() (byte*) print_line_cursor (byte*) print_screen @@ -2544,33 +2672,33 @@ Initial phi equivalence classes [ c1B#10 c1B#14 c1B#4 ] [ c2A#24 c2A#14 c2A#4 ] [ c2B#24 c2B#14 c2B#4 ] -[ doplasma::i#2 doplasma::i#1 ] -[ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -[ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -[ doplasma::i1#2 doplasma::i1#1 ] -[ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -[ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -[ doplasma::ii#2 doplasma::ii#1 ] -[ doplasma::screen#6 doplasma::screen#2 doplasma::screen#13 ] -[ doplasma::i2#2 doplasma::i2#1 ] -[ makecharset::c#2 makecharset::c#1 ] -[ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 ] -[ makecharset::i#2 makecharset::i#1 ] -[ makecharset::ii#2 makecharset::ii#1 ] -[ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -[ memset::dst#2 memset::dst#1 ] -Added variable doplasma::$6 to zero page equivalence class [ doplasma::$6 ] -Added variable doplasma::$3 to zero page equivalence class [ doplasma::$3 ] +[ doplasma::i#4 doplasma::i#1 ] +[ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +[ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +[ doplasma::i1#4 doplasma::i1#1 ] +[ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +[ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +[ doplasma::ii#10 doplasma::ii#1 ] +[ doplasma::screen#18 doplasma::screen#2 doplasma::screen#13 ] +[ doplasma::i2#4 doplasma::i2#1 ] +[ makecharset::c#16 makecharset::c#1 ] +[ print_char_cursor#56 print_char_cursor#18 print_char_cursor#1 ] +[ makecharset::i#13 makecharset::i#1 ] +[ makecharset::ii#10 makecharset::ii#1 ] +[ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] +[ memset::dst#4 memset::dst#1 ] Added variable doplasma::$1 to zero page equivalence class [ doplasma::$1 ] +Added variable doplasma::$3 to zero page equivalence class [ doplasma::$3 ] +Added variable doplasma::$6 to zero page equivalence class [ doplasma::$6 ] Added variable makecharset::$3 to zero page equivalence class [ makecharset::$3 ] Added variable makecharset::s#0 to zero page equivalence class [ makecharset::s#0 ] -Added variable makecharset::$12 to zero page equivalence class [ makecharset::$12 ] -Added variable makecharset::$10 to zero page equivalence class [ makecharset::$10 ] -Added variable makecharset::$11 to zero page equivalence class [ makecharset::$11 ] -Added variable makecharset::$16 to zero page equivalence class [ makecharset::$16 ] Added variable sid_rnd::return#2 to zero page equivalence class [ sid_rnd::return#2 ] Added variable makecharset::$6 to zero page equivalence class [ makecharset::$6 ] Added variable makecharset::$7 to zero page equivalence class [ makecharset::$7 ] +Added variable makecharset::$10 to zero page equivalence class [ makecharset::$10 ] +Added variable makecharset::$11 to zero page equivalence class [ makecharset::$11 ] +Added variable makecharset::$16 to zero page equivalence class [ makecharset::$16 ] +Added variable makecharset::$12 to zero page equivalence class [ makecharset::$12 ] Added variable sid_rnd::return#0 to zero page equivalence class [ sid_rnd::return#0 ] Complete equivalence classes [ main::col#2 main::col#1 ] @@ -2578,66 +2706,66 @@ Complete equivalence classes [ c1B#10 c1B#14 c1B#4 ] [ c2A#24 c2A#14 c2A#4 ] [ c2B#24 c2B#14 c2B#4 ] -[ doplasma::i#2 doplasma::i#1 ] -[ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -[ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -[ doplasma::i1#2 doplasma::i1#1 ] -[ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -[ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -[ doplasma::ii#2 doplasma::ii#1 ] -[ doplasma::screen#6 doplasma::screen#2 doplasma::screen#13 ] -[ doplasma::i2#2 doplasma::i2#1 ] -[ makecharset::c#2 makecharset::c#1 ] -[ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 ] -[ makecharset::i#2 makecharset::i#1 ] -[ makecharset::ii#2 makecharset::ii#1 ] -[ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -[ memset::dst#2 memset::dst#1 ] -[ doplasma::$6 ] -[ doplasma::$3 ] +[ doplasma::i#4 doplasma::i#1 ] +[ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +[ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +[ doplasma::i1#4 doplasma::i1#1 ] +[ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +[ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +[ doplasma::ii#10 doplasma::ii#1 ] +[ doplasma::screen#18 doplasma::screen#2 doplasma::screen#13 ] +[ doplasma::i2#4 doplasma::i2#1 ] +[ makecharset::c#16 makecharset::c#1 ] +[ print_char_cursor#56 print_char_cursor#18 print_char_cursor#1 ] +[ makecharset::i#13 makecharset::i#1 ] +[ makecharset::ii#10 makecharset::ii#1 ] +[ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] +[ memset::dst#4 memset::dst#1 ] [ doplasma::$1 ] +[ doplasma::$3 ] +[ doplasma::$6 ] [ makecharset::$3 ] [ makecharset::s#0 ] -[ makecharset::$12 ] -[ makecharset::$10 ] -[ makecharset::$11 ] -[ makecharset::$16 ] [ sid_rnd::return#2 ] [ makecharset::$6 ] [ makecharset::$7 ] +[ makecharset::$10 ] +[ makecharset::$11 ] +[ makecharset::$16 ] +[ makecharset::$12 ] [ sid_rnd::return#0 ] Allocated zp ZP_WORD:2 [ main::col#2 main::col#1 ] Allocated zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] Allocated zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] Allocated zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] Allocated zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] -Allocated zp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] -Allocated zp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -Allocated zp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -Allocated zp ZP_BYTE:11 [ doplasma::i1#2 doplasma::i1#1 ] -Allocated zp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -Allocated zp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -Allocated zp ZP_BYTE:14 [ doplasma::ii#2 doplasma::ii#1 ] -Allocated zp ZP_WORD:15 [ doplasma::screen#6 doplasma::screen#2 doplasma::screen#13 ] -Allocated zp ZP_BYTE:17 [ doplasma::i2#2 doplasma::i2#1 ] -Allocated zp ZP_WORD:18 [ makecharset::c#2 makecharset::c#1 ] -Allocated zp ZP_WORD:20 [ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 ] -Allocated zp ZP_BYTE:22 [ makecharset::i#2 makecharset::i#1 ] -Allocated zp ZP_BYTE:23 [ makecharset::ii#2 makecharset::ii#1 ] -Allocated zp ZP_BYTE:24 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -Allocated zp ZP_WORD:25 [ memset::dst#2 memset::dst#1 ] -Allocated zp ZP_BYTE:27 [ doplasma::$6 ] +Allocated zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] +Allocated zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +Allocated zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +Allocated zp ZP_BYTE:11 [ doplasma::i1#4 doplasma::i1#1 ] +Allocated zp ZP_BYTE:12 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +Allocated zp ZP_BYTE:13 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +Allocated zp ZP_BYTE:14 [ doplasma::ii#10 doplasma::ii#1 ] +Allocated zp ZP_WORD:15 [ doplasma::screen#18 doplasma::screen#2 doplasma::screen#13 ] +Allocated zp ZP_BYTE:17 [ doplasma::i2#4 doplasma::i2#1 ] +Allocated zp ZP_WORD:18 [ makecharset::c#16 makecharset::c#1 ] +Allocated zp ZP_WORD:20 [ print_char_cursor#56 print_char_cursor#18 print_char_cursor#1 ] +Allocated zp ZP_BYTE:22 [ makecharset::i#13 makecharset::i#1 ] +Allocated zp ZP_BYTE:23 [ makecharset::ii#10 makecharset::ii#1 ] +Allocated zp ZP_BYTE:24 [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] +Allocated zp ZP_WORD:25 [ memset::dst#4 memset::dst#1 ] +Allocated zp ZP_BYTE:27 [ doplasma::$1 ] Allocated zp ZP_BYTE:28 [ doplasma::$3 ] -Allocated zp ZP_BYTE:29 [ doplasma::$1 ] +Allocated zp ZP_BYTE:29 [ doplasma::$6 ] Allocated zp ZP_BYTE:30 [ makecharset::$3 ] Allocated zp ZP_BYTE:31 [ makecharset::s#0 ] -Allocated zp ZP_BYTE:32 [ makecharset::$12 ] -Allocated zp ZP_WORD:33 [ makecharset::$10 ] -Allocated zp ZP_WORD:35 [ makecharset::$11 ] -Allocated zp ZP_WORD:37 [ makecharset::$16 ] -Allocated zp ZP_BYTE:39 [ sid_rnd::return#2 ] -Allocated zp ZP_BYTE:40 [ makecharset::$6 ] -Allocated zp ZP_BYTE:41 [ makecharset::$7 ] +Allocated zp ZP_BYTE:32 [ sid_rnd::return#2 ] +Allocated zp ZP_BYTE:33 [ makecharset::$6 ] +Allocated zp ZP_BYTE:34 [ makecharset::$7 ] +Allocated zp ZP_WORD:35 [ makecharset::$10 ] +Allocated zp ZP_WORD:37 [ makecharset::$11 ] +Allocated zp ZP_WORD:39 [ makecharset::$16 ] +Allocated zp ZP_BYTE:41 [ makecharset::$12 ] Allocated zp ZP_BYTE:42 [ sid_rnd::return#0 ] INITIAL ASM @@ -2824,9 +2952,9 @@ main: { // Render plasma to the passed screen // doplasma(byte* zeropage($f) screen) doplasma: { - .label _1 = $1d + .label _1 = $1b .label _3 = $1c - .label _6 = $1b + .label _6 = $1d .label c1a = 9 .label c1b = $a .label i = 8 @@ -2842,97 +2970,173 @@ doplasma: { // [23] (byte) doplasma::c1b#0 ← (byte) c1B#10 -- vbuz1=vbuz2 lda c1B sta c1b - // [24] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1] - b1_from_doplasma: - // [24] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#0] -- register_copy - // [24] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#1] -- register_copy - // [24] phi (byte) doplasma::i#2 = (byte) 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1 + // [24] phi from doplasma to doplasma::@2 [phi:doplasma->doplasma::@2] + b2_from_doplasma: + // [24] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@2#0] -- register_copy + // [24] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@2#1] -- register_copy + // [24] phi (byte) doplasma::i#4 = (byte) 0 [phi:doplasma->doplasma::@2#2] -- vbuz1=vbuc1 lda #0 sta i + jmp b2 + // [24] phi from doplasma::@1 to doplasma::@2 [phi:doplasma::@1->doplasma::@2] + b2_from_b1: + // [24] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#1 [phi:doplasma::@1->doplasma::@2#0] -- register_copy + // [24] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#1 [phi:doplasma::@1->doplasma::@2#1] -- register_copy + // [24] phi (byte) doplasma::i#4 = (byte) doplasma::i#1 [phi:doplasma::@1->doplasma::@2#2] -- register_copy + jmp b2 + // doplasma::@2 + b2: + // [25] (byte~) doplasma::$1 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 + ldy c1a + lda SINTABLE,y + ldy c1b + clc + adc SINTABLE,y + sta _1 + // [26] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#4) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuz2 + lda _1 + ldy i + sta ybuf,y + // [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 + lax c1a + axs #-[4] + stx c1a + // [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 + lax c1b + axs #-[9] + stx c1b + // [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#4 -- vbuz1=_inc_vbuz1 + inc i jmp b1 // doplasma::@1 b1: - // [25] if((byte) doplasma::i#2<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 + // [30] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$19 - bcc b2 + bcc b2_from_b1 jmp b3 // doplasma::@3 b3: - // [26] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax c1A axs #-[3] stx c1A - // [27] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 + // [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 lax c1B axs #5 stx c1B - // [28] (byte) doplasma::c2a#0 ← (byte) c2A#24 -- vbuz1=vbuz2 + // [33] (byte) doplasma::c2a#0 ← (byte) c2A#24 -- vbuz1=vbuz2 lda c2A sta c2a - // [29] (byte) doplasma::c2b#0 ← (byte) c2B#24 -- vbuz1=vbuz2 + // [34] (byte) doplasma::c2b#0 ← (byte) c2B#24 -- vbuz1=vbuz2 lda c2B sta c2b - // [30] phi from doplasma::@3 to doplasma::@4 [phi:doplasma::@3->doplasma::@4] - b4_from_b3: - // [30] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@4#0] -- register_copy - // [30] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@4#1] -- register_copy - // [30] phi (byte) doplasma::i1#2 = (byte) 0 [phi:doplasma::@3->doplasma::@4#2] -- vbuz1=vbuc1 + // [35] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5] + b5_from_b3: + // [35] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@5#0] -- register_copy + // [35] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@5#1] -- register_copy + // [35] phi (byte) doplasma::i1#4 = (byte) 0 [phi:doplasma::@3->doplasma::@5#2] -- vbuz1=vbuc1 lda #0 sta i1 + jmp b5 + // [35] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5] + b5_from_b4: + // [35] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#1 [phi:doplasma::@4->doplasma::@5#0] -- register_copy + // [35] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#1 [phi:doplasma::@4->doplasma::@5#1] -- register_copy + // [35] phi (byte) doplasma::i1#4 = (byte) doplasma::i1#1 [phi:doplasma::@4->doplasma::@5#2] -- register_copy + jmp b5 + // doplasma::@5 + b5: + // [36] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 + ldy c2a + lda SINTABLE,y + ldy c2b + clc + adc SINTABLE,y + sta _3 + // [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#4) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuz2 + lda _3 + ldy i1 + sta xbuf,y + // [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + lax c2a + axs #-[3] + stx c2a + // [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 + lax c2b + axs #-[7] + stx c2b + // [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#4 -- vbuz1=_inc_vbuz1 + inc i1 jmp b4 // doplasma::@4 b4: - // [31] if((byte) doplasma::i1#2<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 + // [41] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 lda i1 cmp #$28 - bcc b5 + bcc b5_from_b4 jmp b6 // doplasma::@6 b6: - // [32] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2 -- vbuz1=vbuz1_plus_2 + // [42] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2 -- vbuz1=vbuz1_plus_2 lda c2A clc adc #2 sta c2A - // [33] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 + // [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 lax c2B axs #3 stx c2B - // [34] phi from doplasma::@6 to doplasma::@7 [phi:doplasma::@6->doplasma::@7] - b7_from_b6: - // [34] phi (byte*) doplasma::screen#6 = (byte*) doplasma::screen#13 [phi:doplasma::@6->doplasma::@7#0] -- register_copy - // [34] phi (byte) doplasma::ii#2 = (byte) 0 [phi:doplasma::@6->doplasma::@7#1] -- vbuz1=vbuc1 + // [44] phi from doplasma::@6 to doplasma::@8 [phi:doplasma::@6->doplasma::@8] + b8_from_b6: + // [44] phi (byte*) doplasma::screen#18 = (byte*) doplasma::screen#13 [phi:doplasma::@6->doplasma::@8#0] -- register_copy + // [44] phi (byte) doplasma::ii#10 = (byte) 0 [phi:doplasma::@6->doplasma::@8#1] -- vbuz1=vbuc1 lda #0 sta ii - jmp b7 - // doplasma::@7 - b7: - // [35] if((byte) doplasma::ii#2<(byte) $19) goto doplasma::@8 -- vbuz1_lt_vbuc1_then_la1 - lda ii - cmp #$19 - bcc b8_from_b7 - jmp breturn - // doplasma::@return - breturn: - // [36] return - rts - // [37] phi from doplasma::@7 to doplasma::@8 [phi:doplasma::@7->doplasma::@8] + jmp b8 + // [44] phi from doplasma::@7 to doplasma::@8 [phi:doplasma::@7->doplasma::@8] b8_from_b7: - // [37] phi (byte) doplasma::i2#2 = (byte) 0 [phi:doplasma::@7->doplasma::@8#0] -- vbuz1=vbuc1 - lda #0 - sta i2 + // [44] phi (byte*) doplasma::screen#18 = (byte*) doplasma::screen#2 [phi:doplasma::@7->doplasma::@8#0] -- register_copy + // [44] phi (byte) doplasma::ii#10 = (byte) doplasma::ii#1 [phi:doplasma::@7->doplasma::@8#1] -- register_copy jmp b8 // doplasma::@8 b8: - // [38] if((byte) doplasma::i2#2<(byte) $28) goto doplasma::@9 -- vbuz1_lt_vbuc1_then_la1 - lda i2 - cmp #$28 - bcc b9 + // [45] phi from doplasma::@8 to doplasma::@10 [phi:doplasma::@8->doplasma::@10] + b10_from_b8: + // [45] phi (byte) doplasma::i2#4 = (byte) 0 [phi:doplasma::@8->doplasma::@10#0] -- vbuz1=vbuc1 + lda #0 + sta i2 + jmp b10 + // [45] phi from doplasma::@9 to doplasma::@10 [phi:doplasma::@9->doplasma::@10] + b10_from_b9: + // [45] phi (byte) doplasma::i2#4 = (byte) doplasma::i2#1 [phi:doplasma::@9->doplasma::@10#0] -- register_copy jmp b10 // doplasma::@10 b10: - // [39] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [46] (byte~) doplasma::$6 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#4) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#10) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz3 + ldy i2 + lda xbuf,y + ldy ii + clc + adc ybuf,y + sta _6 + // [47] *((byte*) doplasma::screen#18 + (byte) doplasma::i2#4) ← (byte~) doplasma::$6 -- pbuz1_derefidx_vbuz2=vbuz3 + lda _6 + ldy i2 + sta (screen),y + // [48] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#4 -- vbuz1=_inc_vbuz1 + inc i2 + jmp b9 + // doplasma::@9 + b9: + // [49] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@10 -- vbuz1_lt_vbuc1_then_la1 + lda i2 + cmp #$28 + bcc b10_from_b9 + jmp b11 + // doplasma::@11 + b11: + // [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#18 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen @@ -2940,90 +3144,20 @@ doplasma: { bcc !+ inc screen+1 !: - // [40] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#2 -- vbuz1=_inc_vbuz1 + // [51] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#10 -- vbuz1=_inc_vbuz1 inc ii - // [34] phi from doplasma::@10 to doplasma::@7 [phi:doplasma::@10->doplasma::@7] - b7_from_b10: - // [34] phi (byte*) doplasma::screen#6 = (byte*) doplasma::screen#2 [phi:doplasma::@10->doplasma::@7#0] -- register_copy - // [34] phi (byte) doplasma::ii#2 = (byte) doplasma::ii#1 [phi:doplasma::@10->doplasma::@7#1] -- register_copy jmp b7 - // doplasma::@9 - b9: - // [41] (byte~) doplasma::$6 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz3 - ldy i2 - lda xbuf,y - ldy ii - clc - adc ybuf,y - sta _6 - // [42] *((byte*) doplasma::screen#6 + (byte) doplasma::i2#2) ← (byte~) doplasma::$6 -- pbuz1_derefidx_vbuz2=vbuz3 - lda _6 - ldy i2 - sta (screen),y - // [43] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuz1=_inc_vbuz1 - inc i2 - // [37] phi from doplasma::@9 to doplasma::@8 [phi:doplasma::@9->doplasma::@8] - b8_from_b9: - // [37] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@9->doplasma::@8#0] -- register_copy - jmp b8 - // doplasma::@5 - b5: - // [44] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 - ldy c2a - lda SINTABLE,y - ldy c2b - clc - adc SINTABLE,y - sta _3 - // [45] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuz2 - lda _3 - ldy i1 - sta xbuf,y - // [46] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 - lax c2a - axs #-[3] - stx c2a - // [47] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 - lax c2b - axs #-[7] - stx c2b - // [48] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 - inc i1 - // [30] phi from doplasma::@5 to doplasma::@4 [phi:doplasma::@5->doplasma::@4] - b4_from_b5: - // [30] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@5->doplasma::@4#0] -- register_copy - // [30] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@5->doplasma::@4#1] -- register_copy - // [30] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@5->doplasma::@4#2] -- register_copy - jmp b4 - // doplasma::@2 - b2: - // [49] (byte~) doplasma::$1 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 - ldy c1a - lda SINTABLE,y - ldy c1b - clc - adc SINTABLE,y - sta _1 - // [50] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuz2 - lda _1 - ldy i - sta ybuf,y - // [51] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 - lax c1a - axs #-[4] - stx c1a - // [52] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 - lax c1b - axs #-[9] - stx c1b - // [53] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [24] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1] - b1_from_b2: - // [24] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@2->doplasma::@1#0] -- register_copy - // [24] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@2->doplasma::@1#1] -- register_copy - // [24] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@2->doplasma::@1#2] -- register_copy - jmp b1 + // doplasma::@7 + b7: + // [52] if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@8 -- vbuz1_lt_vbuc1_then_la1 + lda ii + cmp #$19 + bcc b8_from_b7 + jmp breturn + // doplasma::@return + breturn: + // [53] return + rts xbuf: .fill $28, 0 ybuf: .fill $19, 0 } @@ -3031,132 +3165,130 @@ doplasma: { // Make a plasma-friendly charset where the chars are randomly filled makecharset: { .label _3 = $1e - .label _6 = $28 - .label _7 = $29 - .label _10 = $21 - .label _11 = $23 - .label _12 = $20 + .label _6 = $21 + .label _7 = $22 + .label _10 = $23 + .label _11 = $25 + .label _12 = $29 .label s = $1f .label i = $16 .label ii = $17 .label b = $18 .label c = $12 - .label _16 = $25 + .label _16 = $27 // [55] call sid_rnd_init jsr sid_rnd_init - // [56] phi from makecharset to makecharset::@12 [phi:makecharset->makecharset::@12] - b12_from_makecharset: - jmp b12 - // makecharset::@12 - b12: + // [56] phi from makecharset to makecharset::@13 [phi:makecharset->makecharset::@13] + b13_from_makecharset: + jmp b13 + // makecharset::@13 + b13: // [57] call print_cls - // [92] phi from makecharset::@12 to print_cls [phi:makecharset::@12->print_cls] - print_cls_from_b12: + // [91] phi from makecharset::@13 to print_cls [phi:makecharset::@13->print_cls] + print_cls_from_b13: jsr print_cls - // [58] phi from makecharset::@12 to makecharset::@1 [phi:makecharset::@12->makecharset::@1] - b1_from_b12: - // [58] phi (byte*) print_char_cursor#18 = (const byte*) print_line_cursor#0 [phi:makecharset::@12->makecharset::@1#0] -- pbuz1=pbuc1 + // [58] phi from makecharset::@13 to makecharset::@2 [phi:makecharset::@13->makecharset::@2] + b2_from_b13: + // [58] phi (byte*) print_char_cursor#56 = (const byte*) print_line_cursor#0 [phi:makecharset::@13->makecharset::@2#0] -- pbuz1=pbuc1 lda #print_line_cursor sta print_char_cursor+1 - // [58] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vbuc1 + // [58] phi (word) makecharset::c#16 = (byte) 0 [phi:makecharset::@13->makecharset::@2#1] -- vwuz1=vbuc1 lda #<0 sta c lda #>0 sta c+1 - jmp b1 - // makecharset::@1 - b1: - // [59] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 - lda c+1 - cmp #>$100 - bcc b2 - bne !+ - lda c - cmp #<$100 - bcc b2 - !: - jmp breturn - // makecharset::@return - breturn: - // [60] return - rts + jmp b2 + // [58] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2] + b2_from_b1: + // [58] phi (byte*) print_char_cursor#56 = (byte*) print_char_cursor#18 [phi:makecharset::@1->makecharset::@2#0] -- register_copy + // [58] phi (word) makecharset::c#16 = (word) makecharset::c#1 [phi:makecharset::@1->makecharset::@2#1] -- register_copy + jmp b2 // makecharset::@2 b2: - // [61] (byte~) makecharset::$3 ← < (word) makecharset::c#2 -- vbuz1=_lo_vwuz2 + // [59] (byte~) makecharset::$3 ← < (word) makecharset::c#16 -- vbuz1=_lo_vwuz2 lda c sta _3 - // [62] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) -- vbuz1=pbuc1_derefidx_vbuz2 + // [60] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) -- vbuz1=pbuc1_derefidx_vbuz2 ldy _3 lda SINTABLE,y sta s - // [63] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3] - b3_from_b2: - // [63] phi (byte) makecharset::i#2 = (byte) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuz1=vbuc1 + // [61] phi from makecharset::@2 to makecharset::@4 [phi:makecharset::@2->makecharset::@4] + b4_from_b2: + // [61] phi (byte) makecharset::i#13 = (byte) 0 [phi:makecharset::@2->makecharset::@4#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b3 - // makecharset::@3 - b3: - // [64] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@5 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #8 - bcc b5_from_b3 + jmp b4 + // [61] phi from makecharset::@3 to makecharset::@4 [phi:makecharset::@3->makecharset::@4] + b4_from_b3: + // [61] phi (byte) makecharset::i#13 = (byte) makecharset::i#1 [phi:makecharset::@3->makecharset::@4#0] -- register_copy jmp b4 // makecharset::@4 b4: - // [65] (byte~) makecharset::$12 ← (word) makecharset::c#2 & (byte) 7 -- vbuz1=vwuz2_band_vbuc1 - lda c - and #7 - sta _12 - // [66] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@11 -- vbuz1_neq_0_then_la1 - lda _12 - cmp #0 - bne b11_from_b4 - // [67] phi from makecharset::@4 to makecharset::@10 [phi:makecharset::@4->makecharset::@10] - b10_from_b4: - jmp b10 - // makecharset::@10 - b10: - // [68] call print_char - jsr print_char - // [69] phi from makecharset::@10 makecharset::@4 to makecharset::@11 [phi:makecharset::@10/makecharset::@4->makecharset::@11] - b11_from_b10: - b11_from_b4: - // [69] phi (byte*) print_char_cursor#29 = (byte*) print_char_cursor#1 [phi:makecharset::@10/makecharset::@4->makecharset::@11#0] -- register_copy - jmp b11 - // makecharset::@11 - b11: - // [70] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 - inc c - bne !+ - inc c+1 - !: - // [58] phi from makecharset::@11 to makecharset::@1 [phi:makecharset::@11->makecharset::@1] - b1_from_b11: - // [58] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#29 [phi:makecharset::@11->makecharset::@1#0] -- register_copy - // [58] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@11->makecharset::@1#1] -- register_copy - jmp b1 - // [71] phi from makecharset::@3 to makecharset::@5 [phi:makecharset::@3->makecharset::@5] - b5_from_b3: - // [71] phi (byte) makecharset::b#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#0] -- vbuz1=vbuc1 + // [62] phi from makecharset::@4 to makecharset::@7 [phi:makecharset::@4->makecharset::@7] + b7_from_b4: + // [62] phi (byte) makecharset::b#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#0] -- vbuz1=vbuc1 lda #0 sta b - // [71] phi (byte) makecharset::ii#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#1] -- vbuz1=vbuc1 + // [62] phi (byte) makecharset::ii#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#1] -- vbuz1=vbuc1 lda #0 sta ii - jmp b5 - // makecharset::@5 - b5: - // [72] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@6 -- vbuz1_lt_vbuc1_then_la1 - lda ii - cmp #8 - bcc b6_from_b5 + jmp b7 + // [62] phi from makecharset::@6 to makecharset::@7 [phi:makecharset::@6->makecharset::@7] + b7_from_b6: + // [62] phi (byte) makecharset::b#10 = (byte) makecharset::b#2 [phi:makecharset::@6->makecharset::@7#0] -- register_copy + // [62] phi (byte) makecharset::ii#10 = (byte) makecharset::ii#1 [phi:makecharset::@6->makecharset::@7#1] -- register_copy jmp b7 // makecharset::@7 b7: - // [73] (word~) makecharset::$10 ← (word) makecharset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [63] call sid_rnd + jsr sid_rnd + // [64] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 + lda sid_rnd.return + sta sid_rnd.return_2 + jmp b14 + // makecharset::@14 + b14: + // [65] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 + lda sid_rnd.return_2 + sta _6 + // [66] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuz2_band_vbuc1 + lda #$ff + and _6 + sta _7 + // [67] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@9 -- vbuz1_le_vbuz2_then_la1 + lda s + cmp _7 + bcs b9_from_b14 + jmp b10 + // makecharset::@10 + b10: + // [68] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 + lda b + ldy ii + ora bittab,y + sta b + // [69] phi from makecharset::@10 makecharset::@14 to makecharset::@9 [phi:makecharset::@10/makecharset::@14->makecharset::@9] + b9_from_b10: + b9_from_b14: + // [69] phi (byte) makecharset::b#2 = (byte) makecharset::b#1 [phi:makecharset::@10/makecharset::@14->makecharset::@9#0] -- register_copy + jmp b9 + // makecharset::@9 + b9: + // [70] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#10 -- vbuz1=_inc_vbuz1 + inc ii + jmp b6 + // makecharset::@6 + b6: + // [71] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@7 -- vbuz1_lt_vbuc1_then_la1 + lda ii + cmp #8 + bcc b7_from_b6 + jmp b8 + // makecharset::@8 + b8: + // [72] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda c asl sta _10 @@ -3167,7 +3299,7 @@ makecharset: { rol _10+1 asl _10 rol _10+1 - // [74] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#2 -- vwuz1=vwuz2_plus_vbuz3 + // [73] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 -- vwuz1=vwuz2_plus_vbuz3 lda i clc adc _10 @@ -3175,7 +3307,7 @@ makecharset: { lda #0 adc _10+1 sta _11+1 - // [75] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz2 + // [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz2 lda _11 clc adc #CHARSET sta _16+1 - // [76] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuz2 + // [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuz2 lda b ldy #0 sta (_16),y - // [77] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 -- vbuz1=_inc_vbuz1 + // [76] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 -- vbuz1=_inc_vbuz1 inc i - // [63] phi from makecharset::@7 to makecharset::@3 [phi:makecharset::@7->makecharset::@3] - b3_from_b7: - // [63] phi (byte) makecharset::i#2 = (byte) makecharset::i#1 [phi:makecharset::@7->makecharset::@3#0] -- register_copy jmp b3 - // [78] phi from makecharset::@5 to makecharset::@6 [phi:makecharset::@5->makecharset::@6] - b6_from_b5: - jmp b6 - // makecharset::@6 - b6: - // [79] call sid_rnd - jsr sid_rnd - // [80] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 - lda sid_rnd.return - sta sid_rnd.return_2 - jmp b13 - // makecharset::@13 - b13: - // [81] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 - lda sid_rnd.return_2 - sta _6 - // [82] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuz2_band_vbuc1 - lda #$ff - and _6 - sta _7 - // [83] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@8 -- vbuz1_le_vbuz2_then_la1 - lda s - cmp _7 - bcs b8_from_b13 - jmp b9 - // makecharset::@9 - b9: - // [84] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 - lda b - ldy ii - ora bittab,y - sta b - // [85] phi from makecharset::@13 makecharset::@9 to makecharset::@8 [phi:makecharset::@13/makecharset::@9->makecharset::@8] - b8_from_b13: - b8_from_b9: - // [85] phi (byte) makecharset::b#6 = (byte) makecharset::b#2 [phi:makecharset::@13/makecharset::@9->makecharset::@8#0] -- register_copy - jmp b8 - // makecharset::@8 - b8: - // [86] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuz1=_inc_vbuz1 - inc ii - // [71] phi from makecharset::@8 to makecharset::@5 [phi:makecharset::@8->makecharset::@5] - b5_from_b8: - // [71] phi (byte) makecharset::b#2 = (byte) makecharset::b#6 [phi:makecharset::@8->makecharset::@5#0] -- register_copy - // [71] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@8->makecharset::@5#1] -- register_copy + // makecharset::@3 + b3: + // [77] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@4 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #8 + bcc b4_from_b3 jmp b5 - bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 -} - // sid_rnd -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -sid_rnd: { - .label return = $2a - .label return_2 = $27 - // [87] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 - lda SID_VOICE3_OSC - sta return + // makecharset::@5 + b5: + // [78] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 -- vbuz1=vwuz2_band_vbuc1 + lda c + and #7 + sta _12 + // [79] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@12 -- vbuz1_neq_0_then_la1 + lda _12 + cmp #0 + bne b12_from_b5 + // [80] phi from makecharset::@5 to makecharset::@11 [phi:makecharset::@5->makecharset::@11] + b11_from_b5: + jmp b11 + // makecharset::@11 + b11: + // [81] call print_char + jsr print_char + // [82] phi from makecharset::@11 makecharset::@5 to makecharset::@12 [phi:makecharset::@11/makecharset::@5->makecharset::@12] + b12_from_b11: + b12_from_b5: + // [82] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#1 [phi:makecharset::@11/makecharset::@5->makecharset::@12#0] -- register_copy + jmp b12 + // makecharset::@12 + b12: + // [83] (word) makecharset::c#1 ← ++ (word) makecharset::c#16 -- vwuz1=_inc_vwuz1 + inc c + bne !+ + inc c+1 + !: + jmp b1 + // makecharset::@1 + b1: + // [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 + lda c+1 + cmp #>$100 + bcc b2_from_b1 + bne !+ + lda c + cmp #<$100 + bcc b2_from_b1 + !: jmp breturn - // sid_rnd::@return + // makecharset::@return breturn: - // [88] return + // [85] return rts + bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // print_char // Print a single char print_char: { .const ch = '.' - // [89] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 + // [86] *((byte*) print_char_cursor#56) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (print_char_cursor),y - // [90] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 + // [87] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#56 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 @@ -3272,20 +3393,35 @@ print_char: { jmp breturn // print_char::@return breturn: - // [91] return + // [88] return + rts +} + // sid_rnd +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + .label return = $2a + .label return_2 = $20 + // [89] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 + lda SID_VOICE3_OSC + sta return + jmp breturn + // sid_rnd::@return + breturn: + // [90] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [93] call memset - // [95] phi from print_cls to memset [phi:print_cls->memset] + // [92] call memset + // [94] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp breturn // print_cls::@return breturn: - // [94] return + // [93] return rts } // memset @@ -3296,59 +3432,60 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = $19 - // [96] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [96] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [95] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [95] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [97] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [95] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [99] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [96] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [100] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [97] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [96] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [96] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [98] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #$ffff sta SID_VOICE3_FREQ+1 - // [102] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [101] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL jmp breturn // sid_rnd_init::@return breturn: - // [103] return + // [102] return rts } // File Data @@ -3369,187 +3506,187 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ c1 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] Statement [20] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ( main:2 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ) always clobbers reg byte a -Statement [26] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#13 ] ( main:2::doplasma:15 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#13 ] main:2::doplasma:18 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#13 ] ) always clobbers reg byte a -Statement [27] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 ] ) always clobbers reg byte a -Statement [33] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#13 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#13 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#13 ] ) always clobbers reg byte a -Statement [39] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#6 + (byte) $28 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#2 doplasma::screen#2 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#2 doplasma::screen#2 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#2 doplasma::screen#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ doplasma::ii#2 doplasma::ii#1 ] -Statement [41] (byte~) doplasma::$6 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#2) [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#2 doplasma::screen#6 doplasma::i2#2 doplasma::$6 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#2 doplasma::screen#6 doplasma::i2#2 doplasma::$6 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#2 doplasma::screen#6 doplasma::i2#2 doplasma::$6 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ doplasma::i2#2 doplasma::i2#1 ] -Statement [44] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2a#2 doplasma::c2b#2 doplasma::$3 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2a#2 doplasma::c2b#2 doplasma::$3 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2a#2 doplasma::c2b#2 doplasma::$3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ doplasma::i1#2 doplasma::i1#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -Statement [46] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2b#2 doplasma::c2a#1 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2b#2 doplasma::c2a#1 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2b#2 doplasma::c2a#1 ] ) always clobbers reg byte a -Statement [47] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a -Statement [49] (byte~) doplasma::$1 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::$1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::$1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::$1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -Statement [51] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1b#2 doplasma::c1a#1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1b#2 doplasma::c1a#1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1b#2 doplasma::c1a#1 ] ) always clobbers reg byte a -Statement [52] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] ) always clobbers reg byte a -Statement [59] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 [ makecharset::c#2 print_char_cursor#18 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a -Statement [61] (byte~) makecharset::$3 ← < (word) makecharset::c#2 [ makecharset::c#2 print_char_cursor#18 makecharset::$3 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::$3 ] ) always clobbers reg byte a -Statement [65] (byte~) makecharset::$12 ← (word) makecharset::c#2 & (byte) 7 [ makecharset::c#2 print_char_cursor#18 makecharset::$12 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::$12 ] ) always clobbers reg byte a -Statement [73] (word~) makecharset::$10 ← (word) makecharset::c#2 << (byte) 3 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$10 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$10 ] ) always clobbers reg byte a +Statement [25] (byte~) doplasma::$1 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::$1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::$1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::$1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +Statement [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 ] ) always clobbers reg byte a +Statement [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 ] ) always clobbers reg byte a +Statement [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#13 ] ( main:2::doplasma:15 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#13 ] main:2::doplasma:18 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#13 ] ) always clobbers reg byte a +Statement [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 ] ) always clobbers reg byte a +Statement [36] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$3 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$3 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ doplasma::i1#4 doplasma::i1#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +Statement [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] ) always clobbers reg byte a +Statement [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a +Statement [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#13 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#13 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#13 ] ) always clobbers reg byte a +Statement [46] (byte~) doplasma::$6 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#4) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#10) [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#10 doplasma::screen#18 doplasma::i2#4 doplasma::$6 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#10 doplasma::screen#18 doplasma::i2#4 doplasma::$6 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#10 doplasma::screen#18 doplasma::i2#4 doplasma::$6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ doplasma::ii#10 doplasma::ii#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ doplasma::i2#4 doplasma::i2#1 ] +Statement [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#18 + (byte) $28 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#10 doplasma::screen#2 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#10 doplasma::screen#2 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#10 doplasma::screen#2 ] ) always clobbers reg byte a +Statement [59] (byte~) makecharset::$3 ← < (word) makecharset::c#16 [ makecharset::c#16 print_char_cursor#56 makecharset::$3 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::$3 ] ) always clobbers reg byte a +Statement [68] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::ii#10 makecharset::b#1 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::ii#10 makecharset::b#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ makecharset::s#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ makecharset::i#2 makecharset::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -Statement [74] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#2 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$11 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$11 ] ) always clobbers reg byte a -Statement [75] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a -Statement [76] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ makecharset::i#13 makecharset::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ makecharset::ii#10 makecharset::ii#1 ] +Statement [72] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$10 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$10 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] +Statement [73] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$11 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$11 ] ) always clobbers reg byte a +Statement [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a +Statement [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:31 [ makecharset::s#0 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:22 [ makecharset::i#2 makecharset::i#1 ] -Statement [84] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::ii#2 makecharset::b#1 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::ii#2 makecharset::b#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ makecharset::ii#2 makecharset::ii#1 ] -Statement [89] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:2::makecharset:12::print_char:68 [ makecharset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a reg byte y -Statement [97] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:57::memset:93 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [99] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:57::memset:93 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [101] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] ) always clobbers reg byte a -Statement [102] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] ) always clobbers reg byte a +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:22 [ makecharset::i#13 makecharset::i#1 ] +Statement [78] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 [ makecharset::c#16 print_char_cursor#56 makecharset::$12 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::$12 ] ) always clobbers reg byte a +Statement [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 [ makecharset::c#1 print_char_cursor#18 ] ( main:2::makecharset:12 [ makecharset::c#1 print_char_cursor#18 ] ) always clobbers reg byte a +Statement [86] *((byte*) print_char_cursor#56) ← (const byte) print_char::ch#0 [ print_char_cursor#56 ] ( main:2::makecharset:12::print_char:81 [ makecharset::c#16 print_char_cursor#56 ] ) always clobbers reg byte a reg byte y +Statement [96] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::makecharset:12::print_cls:57::memset:92 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [98] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::makecharset:12::print_cls:57::memset:92 [ memset::dst#1 ] ) always clobbers reg byte a +Statement [100] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] ) always clobbers reg byte a +Statement [101] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] ) always clobbers reg byte a Statement [5] *((const byte*) BORDERCOL#0) ← (const byte) BLUE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [8] *((byte*) main::col#2) ← (const byte) BLACK#0 [ main::col#2 ] ( main:2 [ main::col#2 ] ) always clobbers reg byte a reg byte y Statement [10] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1 [ main::col#1 ] ( main:2 [ main::col#1 ] ) always clobbers reg byte a Statement [17] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ( main:2 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ) always clobbers reg byte a Statement [20] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ( main:2 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ) always clobbers reg byte a -Statement [26] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#13 ] ( main:2::doplasma:15 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#13 ] main:2::doplasma:18 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#13 ] ) always clobbers reg byte a -Statement [27] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 ] ) always clobbers reg byte a -Statement [33] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#13 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#13 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#13 ] ) always clobbers reg byte a -Statement [39] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#6 + (byte) $28 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#2 doplasma::screen#2 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#2 doplasma::screen#2 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#2 doplasma::screen#2 ] ) always clobbers reg byte a -Statement [41] (byte~) doplasma::$6 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#2) [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#2 doplasma::screen#6 doplasma::i2#2 doplasma::$6 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#2 doplasma::screen#6 doplasma::i2#2 doplasma::$6 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#2 doplasma::screen#6 doplasma::i2#2 doplasma::$6 ] ) always clobbers reg byte a -Statement [44] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2a#2 doplasma::c2b#2 doplasma::$3 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2a#2 doplasma::c2b#2 doplasma::$3 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2a#2 doplasma::c2b#2 doplasma::$3 ] ) always clobbers reg byte a -Statement [46] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2b#2 doplasma::c2a#1 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2b#2 doplasma::c2a#1 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2b#2 doplasma::c2a#1 ] ) always clobbers reg byte a -Statement [47] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a -Statement [49] (byte~) doplasma::$1 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::$1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::$1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1a#2 doplasma::c1b#2 doplasma::$1 ] ) always clobbers reg byte a -Statement [51] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1b#2 doplasma::c1a#1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1b#2 doplasma::c1a#1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1b#2 doplasma::c1a#1 ] ) always clobbers reg byte a -Statement [52] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] ) always clobbers reg byte a -Statement [59] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 [ makecharset::c#2 print_char_cursor#18 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a -Statement [61] (byte~) makecharset::$3 ← < (word) makecharset::c#2 [ makecharset::c#2 print_char_cursor#18 makecharset::$3 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::$3 ] ) always clobbers reg byte a -Statement [65] (byte~) makecharset::$12 ← (word) makecharset::c#2 & (byte) 7 [ makecharset::c#2 print_char_cursor#18 makecharset::$12 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::$12 ] ) always clobbers reg byte a -Statement [73] (word~) makecharset::$10 ← (word) makecharset::c#2 << (byte) 3 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$10 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$10 ] ) always clobbers reg byte a -Statement [74] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#2 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$11 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$11 ] ) always clobbers reg byte a -Statement [75] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a -Statement [76] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 ] ) always clobbers reg byte a reg byte y -Statement [84] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::ii#2 makecharset::b#1 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#18 makecharset::s#0 makecharset::i#2 makecharset::ii#2 makecharset::b#1 ] ) always clobbers reg byte a -Statement [89] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:2::makecharset:12::print_char:68 [ makecharset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a reg byte y -Statement [97] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:57::memset:93 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [99] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:57::memset:93 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [101] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] ) always clobbers reg byte a -Statement [102] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] ) always clobbers reg byte a +Statement [25] (byte~) doplasma::$1 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::$1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::$1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::$1 ] ) always clobbers reg byte a +Statement [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 ] ) always clobbers reg byte a +Statement [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#13 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 ] ) always clobbers reg byte a +Statement [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#13 ] ( main:2::doplasma:15 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#13 ] main:2::doplasma:18 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#13 ] ) always clobbers reg byte a +Statement [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 ] ) always clobbers reg byte a +Statement [36] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$3 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$3 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$3 ] ) always clobbers reg byte a +Statement [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] ) always clobbers reg byte a +Statement [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#13 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a +Statement [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#13 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#13 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#13 ] ) always clobbers reg byte a +Statement [46] (byte~) doplasma::$6 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#4) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#10) [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#10 doplasma::screen#18 doplasma::i2#4 doplasma::$6 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#10 doplasma::screen#18 doplasma::i2#4 doplasma::$6 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#10 doplasma::screen#18 doplasma::i2#4 doplasma::$6 ] ) always clobbers reg byte a +Statement [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#18 + (byte) $28 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#10 doplasma::screen#2 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#10 doplasma::screen#2 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#10 doplasma::screen#2 ] ) always clobbers reg byte a +Statement [59] (byte~) makecharset::$3 ← < (word) makecharset::c#16 [ makecharset::c#16 print_char_cursor#56 makecharset::$3 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::$3 ] ) always clobbers reg byte a +Statement [68] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::ii#10 makecharset::b#1 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::ii#10 makecharset::b#1 ] ) always clobbers reg byte a +Statement [72] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$10 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$10 ] ) always clobbers reg byte a +Statement [73] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$11 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$11 ] ) always clobbers reg byte a +Statement [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a +Statement [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::s#0 makecharset::i#13 ] ) always clobbers reg byte a reg byte y +Statement [78] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 [ makecharset::c#16 print_char_cursor#56 makecharset::$12 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#56 makecharset::$12 ] ) always clobbers reg byte a +Statement [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 [ makecharset::c#1 print_char_cursor#18 ] ( main:2::makecharset:12 [ makecharset::c#1 print_char_cursor#18 ] ) always clobbers reg byte a +Statement [86] *((byte*) print_char_cursor#56) ← (const byte) print_char::ch#0 [ print_char_cursor#56 ] ( main:2::makecharset:12::print_char:81 [ makecharset::c#16 print_char_cursor#56 ] ) always clobbers reg byte a reg byte y +Statement [96] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::makecharset:12::print_cls:57::memset:92 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [98] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::makecharset:12::print_cls:57::memset:92 [ memset::dst#1 ] ) always clobbers reg byte a +Statement [100] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] ) always clobbers reg byte a +Statement [101] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ main::col#2 main::col#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:11 [ doplasma::i1#2 doplasma::i1#1 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] : zp ZP_BYTE:13 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:14 [ doplasma::ii#2 doplasma::ii#1 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:15 [ doplasma::screen#6 doplasma::screen#2 doplasma::screen#13 ] : zp ZP_WORD:15 , -Potential registers zp ZP_BYTE:17 [ doplasma::i2#2 doplasma::i2#1 ] : zp ZP_BYTE:17 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:18 [ makecharset::c#2 makecharset::c#1 ] : zp ZP_WORD:18 , -Potential registers zp ZP_WORD:20 [ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 ] : zp ZP_WORD:20 , -Potential registers zp ZP_BYTE:22 [ makecharset::i#2 makecharset::i#1 ] : zp ZP_BYTE:22 , reg byte x , -Potential registers zp ZP_BYTE:23 [ makecharset::ii#2 makecharset::ii#1 ] : zp ZP_BYTE:23 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:24 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] : zp ZP_BYTE:24 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:25 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:25 , -Potential registers zp ZP_BYTE:27 [ doplasma::$6 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:11 [ doplasma::i1#4 doplasma::i1#1 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:12 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:13 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] : zp ZP_BYTE:13 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:14 [ doplasma::ii#10 doplasma::ii#1 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:15 [ doplasma::screen#18 doplasma::screen#2 doplasma::screen#13 ] : zp ZP_WORD:15 , +Potential registers zp ZP_BYTE:17 [ doplasma::i2#4 doplasma::i2#1 ] : zp ZP_BYTE:17 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:18 [ makecharset::c#16 makecharset::c#1 ] : zp ZP_WORD:18 , +Potential registers zp ZP_WORD:20 [ print_char_cursor#56 print_char_cursor#18 print_char_cursor#1 ] : zp ZP_WORD:20 , +Potential registers zp ZP_BYTE:22 [ makecharset::i#13 makecharset::i#1 ] : zp ZP_BYTE:22 , reg byte x , +Potential registers zp ZP_BYTE:23 [ makecharset::ii#10 makecharset::ii#1 ] : zp ZP_BYTE:23 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:24 [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] : zp ZP_BYTE:24 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:25 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:25 , +Potential registers zp ZP_BYTE:27 [ doplasma::$1 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:28 [ doplasma::$3 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:29 [ doplasma::$1 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:29 [ doplasma::$6 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:30 [ makecharset::$3 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:31 [ makecharset::s#0 ] : zp ZP_BYTE:31 , reg byte x , -Potential registers zp ZP_BYTE:32 [ makecharset::$12 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:33 [ makecharset::$10 ] : zp ZP_WORD:33 , -Potential registers zp ZP_WORD:35 [ makecharset::$11 ] : zp ZP_WORD:35 , -Potential registers zp ZP_WORD:37 [ makecharset::$16 ] : zp ZP_WORD:37 , -Potential registers zp ZP_BYTE:39 [ sid_rnd::return#2 ] : zp ZP_BYTE:39 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:40 [ makecharset::$6 ] : zp ZP_BYTE:40 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:41 [ makecharset::$7 ] : zp ZP_BYTE:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:32 [ sid_rnd::return#2 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:33 [ makecharset::$6 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:34 [ makecharset::$7 ] : zp ZP_BYTE:34 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:35 [ makecharset::$10 ] : zp ZP_WORD:35 , +Potential registers zp ZP_WORD:37 [ makecharset::$11 ] : zp ZP_WORD:37 , +Potential registers zp ZP_WORD:39 [ makecharset::$16 ] : zp ZP_WORD:39 , +Potential registers zp ZP_BYTE:41 [ makecharset::$12 ] : zp ZP_BYTE:41 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:42 [ sid_rnd::return#0 ] : zp ZP_BYTE:42 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [makecharset] 3,785.68: zp ZP_BYTE:24 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] 2,402.4: zp ZP_BYTE:23 [ makecharset::ii#2 makecharset::ii#1 ] 2,002: zp ZP_BYTE:40 [ makecharset::$6 ] 2,002: zp ZP_BYTE:41 [ makecharset::$7 ] 225.76: zp ZP_BYTE:22 [ makecharset::i#2 makecharset::i#1 ] 202: zp ZP_WORD:33 [ makecharset::$10 ] 202: zp ZP_WORD:35 [ makecharset::$11 ] 202: zp ZP_WORD:37 [ makecharset::$16 ] 53.26: zp ZP_BYTE:31 [ makecharset::s#0 ] 27.78: zp ZP_WORD:18 [ makecharset::c#2 makecharset::c#1 ] 22: zp ZP_BYTE:30 [ makecharset::$3 ] 22: zp ZP_BYTE:32 [ makecharset::$12 ] -Uplift Scope [doplasma] 3,253.25: zp ZP_BYTE:17 [ doplasma::i2#2 doplasma::i2#1 ] 2,002: zp ZP_BYTE:27 [ doplasma::$6 ] 365: zp ZP_BYTE:14 [ doplasma::ii#2 doplasma::ii#1 ] 273.23: zp ZP_WORD:15 [ doplasma::screen#6 doplasma::screen#2 doplasma::screen#13 ] 269.33: zp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] 269.33: zp ZP_BYTE:11 [ doplasma::i1#2 doplasma::i1#1 ] 202: zp ZP_BYTE:28 [ doplasma::$3 ] 202: zp ZP_BYTE:29 [ doplasma::$1 ] 166: zp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] 166: zp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] 145.58: zp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] 145.58: zp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -Uplift Scope [sid_rnd] 2,002: zp ZP_BYTE:39 [ sid_rnd::return#2 ] 334.33: zp ZP_BYTE:42 [ sid_rnd::return#0 ] -Uplift Scope [] 21.83: zp ZP_WORD:20 [ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 ] 14.43: zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] 14.22: zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] 13.59: zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] 13.57: zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:25 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [makecharset] 3,019.83: zp ZP_BYTE:24 [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] 2,002: zp ZP_BYTE:33 [ makecharset::$6 ] 2,002: zp ZP_BYTE:34 [ makecharset::$7 ] 1,876.88: zp ZP_BYTE:23 [ makecharset::ii#10 makecharset::ii#1 ] 202: zp ZP_WORD:35 [ makecharset::$10 ] 202: zp ZP_WORD:37 [ makecharset::$11 ] 202: zp ZP_WORD:39 [ makecharset::$16 ] 171.7: zp ZP_BYTE:22 [ makecharset::i#13 makecharset::i#1 ] 56.22: zp ZP_BYTE:31 [ makecharset::s#0 ] 22.3: zp ZP_WORD:18 [ makecharset::c#16 makecharset::c#1 ] 22: zp ZP_BYTE:30 [ makecharset::$3 ] 22: zp ZP_BYTE:41 [ makecharset::$12 ] +Uplift Scope [doplasma] 2,836.17: zp ZP_BYTE:17 [ doplasma::i2#4 doplasma::i2#1 ] 2,002: zp ZP_BYTE:29 [ doplasma::$6 ] 323.36: zp ZP_BYTE:14 [ doplasma::ii#10 doplasma::ii#1 ] 268.25: zp ZP_WORD:15 [ doplasma::screen#18 doplasma::screen#2 doplasma::screen#13 ] 212.1: zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] 212.1: zp ZP_BYTE:11 [ doplasma::i1#4 doplasma::i1#1 ] 202: zp ZP_BYTE:27 [ doplasma::$1 ] 202: zp ZP_BYTE:28 [ doplasma::$3 ] 154.17: zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] 154.17: zp ZP_BYTE:12 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] 147.58: zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] 147.58: zp ZP_BYTE:13 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +Uplift Scope [sid_rnd] 2,002: zp ZP_BYTE:32 [ sid_rnd::return#2 ] 334.33: zp ZP_BYTE:42 [ sid_rnd::return#0 ] +Uplift Scope [] 16.42: zp ZP_WORD:20 [ print_char_cursor#56 print_char_cursor#18 print_char_cursor#1 ] 14.43: zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] 14.22: zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] 13.59: zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] 13.57: zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] +Uplift Scope [memset] 33: zp ZP_WORD:25 [ memset::dst#4 memset::dst#1 ] Uplift Scope [main] 33: zp ZP_WORD:2 [ main::col#2 main::col#1 ] Uplift Scope [RADIX] Uplift Scope [print_char] Uplift Scope [print_cls] Uplift Scope [sid_rnd_init] -Uplifting [makecharset] best 159957 combination reg byte y [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] reg byte x [ makecharset::ii#2 makecharset::ii#1 ] reg byte a [ makecharset::$6 ] zp ZP_BYTE:41 [ makecharset::$7 ] zp ZP_BYTE:22 [ makecharset::i#2 makecharset::i#1 ] zp ZP_WORD:33 [ makecharset::$10 ] zp ZP_WORD:35 [ makecharset::$11 ] zp ZP_WORD:37 [ makecharset::$16 ] zp ZP_BYTE:31 [ makecharset::s#0 ] zp ZP_WORD:18 [ makecharset::c#2 makecharset::c#1 ] zp ZP_BYTE:30 [ makecharset::$3 ] zp ZP_BYTE:32 [ makecharset::$12 ] +Uplifting [makecharset] best 164217 combination reg byte y [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] reg byte a [ makecharset::$6 ] zp ZP_BYTE:34 [ makecharset::$7 ] reg byte x [ makecharset::ii#10 makecharset::ii#1 ] zp ZP_WORD:35 [ makecharset::$10 ] zp ZP_WORD:37 [ makecharset::$11 ] zp ZP_WORD:39 [ makecharset::$16 ] zp ZP_BYTE:22 [ makecharset::i#13 makecharset::i#1 ] zp ZP_BYTE:31 [ makecharset::s#0 ] zp ZP_WORD:18 [ makecharset::c#16 makecharset::c#1 ] zp ZP_BYTE:30 [ makecharset::$3 ] zp ZP_BYTE:41 [ makecharset::$12 ] Limited combination testing to 100 combinations of 9216 possible. -Uplifting [doplasma] best 135057 combination reg byte y [ doplasma::i2#2 doplasma::i2#1 ] reg byte a [ doplasma::$6 ] reg byte x [ doplasma::ii#2 doplasma::ii#1 ] zp ZP_WORD:15 [ doplasma::screen#6 doplasma::screen#2 doplasma::screen#13 ] zp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] zp ZP_BYTE:11 [ doplasma::i1#2 doplasma::i1#1 ] zp ZP_BYTE:28 [ doplasma::$3 ] zp ZP_BYTE:29 [ doplasma::$1 ] zp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] zp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] zp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] zp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] +Uplifting [doplasma] best 139317 combination reg byte y [ doplasma::i2#4 doplasma::i2#1 ] reg byte a [ doplasma::$6 ] reg byte x [ doplasma::ii#10 doplasma::ii#1 ] zp ZP_WORD:15 [ doplasma::screen#18 doplasma::screen#2 doplasma::screen#13 ] zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] zp ZP_BYTE:11 [ doplasma::i1#4 doplasma::i1#1 ] zp ZP_BYTE:27 [ doplasma::$1 ] zp ZP_BYTE:28 [ doplasma::$3 ] zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] zp ZP_BYTE:12 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] zp ZP_BYTE:13 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] Limited combination testing to 100 combinations of 419904 possible. -Uplifting [sid_rnd] best 126054 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] -Uplifting [] best 126054 combination zp ZP_WORD:20 [ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 ] zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] -Uplifting [memset] best 126054 combination zp ZP_WORD:25 [ memset::dst#2 memset::dst#1 ] -Uplifting [main] best 126054 combination zp ZP_WORD:2 [ main::col#2 main::col#1 ] -Uplifting [RADIX] best 126054 combination -Uplifting [print_char] best 126054 combination -Uplifting [print_cls] best 126054 combination -Uplifting [sid_rnd_init] best 126054 combination -Attempting to uplift remaining variables inzp ZP_BYTE:41 [ makecharset::$7 ] -Uplifting [makecharset] best 126054 combination zp ZP_BYTE:41 [ makecharset::$7 ] -Attempting to uplift remaining variables inzp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] -Uplifting [doplasma] best 126054 combination zp ZP_BYTE:8 [ doplasma::i#2 doplasma::i#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:11 [ doplasma::i1#2 doplasma::i1#1 ] -Uplifting [doplasma] best 126054 combination zp ZP_BYTE:11 [ doplasma::i1#2 doplasma::i1#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:22 [ makecharset::i#2 makecharset::i#1 ] -Uplifting [makecharset] best 126054 combination zp ZP_BYTE:22 [ makecharset::i#2 makecharset::i#1 ] +Uplifting [sid_rnd] best 130314 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] +Uplifting [] best 130314 combination zp ZP_WORD:20 [ print_char_cursor#56 print_char_cursor#18 print_char_cursor#1 ] zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] +Uplifting [memset] best 130314 combination zp ZP_WORD:25 [ memset::dst#4 memset::dst#1 ] +Uplifting [main] best 130314 combination zp ZP_WORD:2 [ main::col#2 main::col#1 ] +Uplifting [RADIX] best 130314 combination +Uplifting [print_char] best 130314 combination +Uplifting [print_cls] best 130314 combination +Uplifting [sid_rnd_init] best 130314 combination +Attempting to uplift remaining variables inzp ZP_BYTE:34 [ makecharset::$7 ] +Uplifting [makecharset] best 130314 combination zp ZP_BYTE:34 [ makecharset::$7 ] +Attempting to uplift remaining variables inzp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] +Uplifting [doplasma] best 130314 combination zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:11 [ doplasma::i1#4 doplasma::i1#1 ] +Uplifting [doplasma] best 130314 combination zp ZP_BYTE:11 [ doplasma::i1#4 doplasma::i1#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:27 [ doplasma::$1 ] +Uplifting [doplasma] best 129714 combination reg byte a [ doplasma::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:28 [ doplasma::$3 ] -Uplifting [doplasma] best 125454 combination reg byte a [ doplasma::$3 ] -Attempting to uplift remaining variables inzp ZP_BYTE:29 [ doplasma::$1 ] -Uplifting [doplasma] best 124854 combination reg byte a [ doplasma::$1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -Uplifting [doplasma] best 124854 combination zp ZP_BYTE:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -Uplifting [doplasma] best 124854 combination zp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -Uplifting [doplasma] best 124854 combination zp ZP_BYTE:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -Uplifting [doplasma] best 124854 combination zp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] +Uplifting [doplasma] best 129114 combination reg byte a [ doplasma::$3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:22 [ makecharset::i#13 makecharset::i#1 ] +Uplifting [makecharset] best 129114 combination zp ZP_BYTE:22 [ makecharset::i#13 makecharset::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +Uplifting [doplasma] best 129114 combination zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:12 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +Uplifting [doplasma] best 129114 combination zp ZP_BYTE:12 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +Uplifting [doplasma] best 129114 combination zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:13 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +Uplifting [doplasma] best 129114 combination zp ZP_BYTE:13 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:31 [ makecharset::s#0 ] -Uplifting [makecharset] best 124854 combination zp ZP_BYTE:31 [ makecharset::s#0 ] +Uplifting [makecharset] best 129114 combination zp ZP_BYTE:31 [ makecharset::s#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:30 [ makecharset::$3 ] -Uplifting [makecharset] best 124814 combination reg byte a [ makecharset::$3 ] -Attempting to uplift remaining variables inzp ZP_BYTE:32 [ makecharset::$12 ] -Uplifting [makecharset] best 124754 combination reg byte a [ makecharset::$12 ] +Uplifting [makecharset] best 129074 combination reg byte a [ makecharset::$3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:41 [ makecharset::$12 ] +Uplifting [makecharset] best 129014 combination reg byte a [ makecharset::$12 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] -Uplifting [] best 124754 combination zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] +Uplifting [] best 129014 combination zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] -Uplifting [] best 124754 combination zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] +Uplifting [] best 129014 combination zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] -Uplifting [] best 124754 combination zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] +Uplifting [] best 129014 combination zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] -Uplifting [] best 124754 combination zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] -Coalescing zero page register [ zp ZP_WORD:33 [ makecharset::$10 ] ] with [ zp ZP_WORD:35 [ makecharset::$11 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:33 [ makecharset::$10 makecharset::$11 ] ] with [ zp ZP_WORD:37 [ makecharset::$16 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:15 [ doplasma::screen#6 doplasma::screen#2 doplasma::screen#13 ] ] with [ zp ZP_WORD:2 [ main::col#2 main::col#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:22 [ makecharset::i#2 makecharset::i#1 ] ] with [ zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] ] -Coalescing zero page register [ zp ZP_WORD:25 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:18 [ makecharset::c#2 makecharset::c#1 ] ] +Uplifting [] best 129014 combination zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] +Coalescing zero page register [ zp ZP_WORD:35 [ makecharset::$10 ] ] with [ zp ZP_WORD:37 [ makecharset::$11 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:35 [ makecharset::$10 makecharset::$11 ] ] with [ zp ZP_WORD:39 [ makecharset::$16 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:15 [ doplasma::screen#18 doplasma::screen#2 doplasma::screen#13 ] ] with [ zp ZP_WORD:2 [ main::col#2 main::col#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:22 [ makecharset::i#13 makecharset::i#1 ] ] with [ zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] ] +Coalescing zero page register [ zp ZP_WORD:25 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:18 [ makecharset::c#16 makecharset::c#1 ] ] Coalescing zero page register [ zp ZP_BYTE:31 [ makecharset::s#0 ] ] with [ zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] ] -Coalescing zero page register [ zp ZP_BYTE:41 [ makecharset::$7 ] ] with [ zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] ] -Coalescing zero page register [ zp ZP_WORD:20 [ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 ] ] with [ zp ZP_WORD:15 [ doplasma::screen#6 doplasma::screen#2 doplasma::screen#13 main::col#2 main::col#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:34 [ makecharset::$7 ] ] with [ zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] ] +Coalescing zero page register [ zp ZP_WORD:20 [ print_char_cursor#56 print_char_cursor#18 print_char_cursor#1 ] ] with [ zp ZP_WORD:15 [ doplasma::screen#18 doplasma::screen#2 doplasma::screen#13 main::col#2 main::col#1 ] ] Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:2 [ c2B#24 c2B#14 c2B#4 ] -Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:3 [ doplasma::i#2 doplasma::i#1 ] -Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:4 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -Allocated (was zp ZP_BYTE:10) zp ZP_BYTE:5 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -Allocated (was zp ZP_BYTE:11) zp ZP_BYTE:6 [ doplasma::i1#2 doplasma::i1#1 ] -Allocated (was zp ZP_BYTE:12) zp ZP_BYTE:7 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:8 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -Allocated (was zp ZP_WORD:20) zp ZP_WORD:9 [ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 doplasma::screen#6 doplasma::screen#2 doplasma::screen#13 main::col#2 main::col#1 ] -Allocated (was zp ZP_BYTE:22) zp ZP_BYTE:11 [ makecharset::i#2 makecharset::i#1 c1A#10 c1A#14 c1A#4 ] -Allocated (was zp ZP_WORD:25) zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 makecharset::c#2 makecharset::c#1 ] +Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:3 [ doplasma::i#4 doplasma::i#1 ] +Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:4 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +Allocated (was zp ZP_BYTE:10) zp ZP_BYTE:5 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +Allocated (was zp ZP_BYTE:11) zp ZP_BYTE:6 [ doplasma::i1#4 doplasma::i1#1 ] +Allocated (was zp ZP_BYTE:12) zp ZP_BYTE:7 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:8 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +Allocated (was zp ZP_WORD:20) zp ZP_WORD:9 [ print_char_cursor#56 print_char_cursor#18 print_char_cursor#1 doplasma::screen#18 doplasma::screen#2 doplasma::screen#13 main::col#2 main::col#1 ] +Allocated (was zp ZP_BYTE:22) zp ZP_BYTE:11 [ makecharset::i#13 makecharset::i#1 c1A#10 c1A#14 c1A#4 ] +Allocated (was zp ZP_WORD:25) zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 makecharset::c#16 makecharset::c#1 ] Allocated (was zp ZP_BYTE:31) zp ZP_BYTE:14 [ makecharset::s#0 c1B#10 c1B#14 c1B#4 ] -Allocated (was zp ZP_WORD:33) zp ZP_WORD:15 [ makecharset::$10 makecharset::$11 makecharset::$16 ] -Allocated (was zp ZP_BYTE:41) zp ZP_BYTE:17 [ makecharset::$7 c2A#24 c2A#14 c2A#4 ] +Allocated (was zp ZP_BYTE:34) zp ZP_BYTE:15 [ makecharset::$7 c2A#24 c2A#14 c2A#4 ] +Allocated (was zp ZP_WORD:35) zp ZP_WORD:16 [ makecharset::$10 makecharset::$11 makecharset::$16 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -3583,7 +3720,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_char_cursor = 9 .label c1A = $b .label c1B = $e - .label c2A = $11 + .label c2A = $f .label c2B = 2 // @begin bbegin: @@ -3747,93 +3884,161 @@ doplasma: { // [23] (byte) doplasma::c1b#0 ← (byte) c1B#10 -- vbuz1=vbuz2 lda c1B sta c1b - // [24] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1] - b1_from_doplasma: - // [24] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#0] -- register_copy - // [24] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#1] -- register_copy - // [24] phi (byte) doplasma::i#2 = (byte) 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1 + // [24] phi from doplasma to doplasma::@2 [phi:doplasma->doplasma::@2] + b2_from_doplasma: + // [24] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@2#0] -- register_copy + // [24] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@2#1] -- register_copy + // [24] phi (byte) doplasma::i#4 = (byte) 0 [phi:doplasma->doplasma::@2#2] -- vbuz1=vbuc1 lda #0 sta i + jmp b2 + // [24] phi from doplasma::@1 to doplasma::@2 [phi:doplasma::@1->doplasma::@2] + b2_from_b1: + // [24] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#1 [phi:doplasma::@1->doplasma::@2#0] -- register_copy + // [24] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#1 [phi:doplasma::@1->doplasma::@2#1] -- register_copy + // [24] phi (byte) doplasma::i#4 = (byte) doplasma::i#1 [phi:doplasma::@1->doplasma::@2#2] -- register_copy + jmp b2 + // doplasma::@2 + b2: + // [25] (byte~) doplasma::$1 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 + ldy c1a + lda SINTABLE,y + ldy c1b + clc + adc SINTABLE,y + // [26] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#4) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa + ldy i + sta ybuf,y + // [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 + lax c1a + axs #-[4] + stx c1a + // [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 + lax c1b + axs #-[9] + stx c1b + // [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#4 -- vbuz1=_inc_vbuz1 + inc i jmp b1 // doplasma::@1 b1: - // [25] if((byte) doplasma::i#2<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 + // [30] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$19 - bcc b2 + bcc b2_from_b1 jmp b3 // doplasma::@3 b3: - // [26] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax c1A axs #-[3] stx c1A - // [27] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 + // [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 lax c1B axs #5 stx c1B - // [28] (byte) doplasma::c2a#0 ← (byte) c2A#24 -- vbuz1=vbuz2 + // [33] (byte) doplasma::c2a#0 ← (byte) c2A#24 -- vbuz1=vbuz2 lda c2A sta c2a - // [29] (byte) doplasma::c2b#0 ← (byte) c2B#24 -- vbuz1=vbuz2 + // [34] (byte) doplasma::c2b#0 ← (byte) c2B#24 -- vbuz1=vbuz2 lda c2B sta c2b - // [30] phi from doplasma::@3 to doplasma::@4 [phi:doplasma::@3->doplasma::@4] - b4_from_b3: - // [30] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@4#0] -- register_copy - // [30] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@4#1] -- register_copy - // [30] phi (byte) doplasma::i1#2 = (byte) 0 [phi:doplasma::@3->doplasma::@4#2] -- vbuz1=vbuc1 + // [35] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5] + b5_from_b3: + // [35] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@5#0] -- register_copy + // [35] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@5#1] -- register_copy + // [35] phi (byte) doplasma::i1#4 = (byte) 0 [phi:doplasma::@3->doplasma::@5#2] -- vbuz1=vbuc1 lda #0 sta i1 + jmp b5 + // [35] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5] + b5_from_b4: + // [35] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#1 [phi:doplasma::@4->doplasma::@5#0] -- register_copy + // [35] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#1 [phi:doplasma::@4->doplasma::@5#1] -- register_copy + // [35] phi (byte) doplasma::i1#4 = (byte) doplasma::i1#1 [phi:doplasma::@4->doplasma::@5#2] -- register_copy + jmp b5 + // doplasma::@5 + b5: + // [36] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 + ldy c2a + lda SINTABLE,y + ldy c2b + clc + adc SINTABLE,y + // [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#4) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa + ldy i1 + sta xbuf,y + // [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + lax c2a + axs #-[3] + stx c2a + // [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 + lax c2b + axs #-[7] + stx c2b + // [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#4 -- vbuz1=_inc_vbuz1 + inc i1 jmp b4 // doplasma::@4 b4: - // [31] if((byte) doplasma::i1#2<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 + // [41] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 lda i1 cmp #$28 - bcc b5 + bcc b5_from_b4 jmp b6 // doplasma::@6 b6: - // [32] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2 -- vbuz1=vbuz1_plus_2 + // [42] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2 -- vbuz1=vbuz1_plus_2 lda c2A clc adc #2 sta c2A - // [33] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 + // [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 lax c2B axs #3 stx c2B - // [34] phi from doplasma::@6 to doplasma::@7 [phi:doplasma::@6->doplasma::@7] - b7_from_b6: - // [34] phi (byte*) doplasma::screen#6 = (byte*) doplasma::screen#13 [phi:doplasma::@6->doplasma::@7#0] -- register_copy - // [34] phi (byte) doplasma::ii#2 = (byte) 0 [phi:doplasma::@6->doplasma::@7#1] -- vbuxx=vbuc1 + // [44] phi from doplasma::@6 to doplasma::@8 [phi:doplasma::@6->doplasma::@8] + b8_from_b6: + // [44] phi (byte*) doplasma::screen#18 = (byte*) doplasma::screen#13 [phi:doplasma::@6->doplasma::@8#0] -- register_copy + // [44] phi (byte) doplasma::ii#10 = (byte) 0 [phi:doplasma::@6->doplasma::@8#1] -- vbuxx=vbuc1 ldx #0 - jmp b7 - // doplasma::@7 - b7: - // [35] if((byte) doplasma::ii#2<(byte) $19) goto doplasma::@8 -- vbuxx_lt_vbuc1_then_la1 - cpx #$19 - bcc b8_from_b7 - jmp breturn - // doplasma::@return - breturn: - // [36] return - rts - // [37] phi from doplasma::@7 to doplasma::@8 [phi:doplasma::@7->doplasma::@8] + jmp b8 + // [44] phi from doplasma::@7 to doplasma::@8 [phi:doplasma::@7->doplasma::@8] b8_from_b7: - // [37] phi (byte) doplasma::i2#2 = (byte) 0 [phi:doplasma::@7->doplasma::@8#0] -- vbuyy=vbuc1 - ldy #0 + // [44] phi (byte*) doplasma::screen#18 = (byte*) doplasma::screen#2 [phi:doplasma::@7->doplasma::@8#0] -- register_copy + // [44] phi (byte) doplasma::ii#10 = (byte) doplasma::ii#1 [phi:doplasma::@7->doplasma::@8#1] -- register_copy jmp b8 // doplasma::@8 b8: - // [38] if((byte) doplasma::i2#2<(byte) $28) goto doplasma::@9 -- vbuyy_lt_vbuc1_then_la1 - cpy #$28 - bcc b9 + // [45] phi from doplasma::@8 to doplasma::@10 [phi:doplasma::@8->doplasma::@10] + b10_from_b8: + // [45] phi (byte) doplasma::i2#4 = (byte) 0 [phi:doplasma::@8->doplasma::@10#0] -- vbuyy=vbuc1 + ldy #0 + jmp b10 + // [45] phi from doplasma::@9 to doplasma::@10 [phi:doplasma::@9->doplasma::@10] + b10_from_b9: + // [45] phi (byte) doplasma::i2#4 = (byte) doplasma::i2#1 [phi:doplasma::@9->doplasma::@10#0] -- register_copy jmp b10 // doplasma::@10 b10: - // [39] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [46] (byte~) doplasma::$6 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#4) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#10) -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx + lda xbuf,y + clc + adc ybuf,x + // [47] *((byte*) doplasma::screen#18 + (byte) doplasma::i2#4) ← (byte~) doplasma::$6 -- pbuz1_derefidx_vbuyy=vbuaa + sta (screen),y + // [48] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#4 -- vbuyy=_inc_vbuyy + iny + jmp b9 + // doplasma::@9 + b9: + // [49] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@10 -- vbuyy_lt_vbuc1_then_la1 + cpy #$28 + bcc b10_from_b9 + jmp b11 + // doplasma::@11 + b11: + // [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#18 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen @@ -3841,203 +4046,135 @@ doplasma: { bcc !+ inc screen+1 !: - // [40] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#2 -- vbuxx=_inc_vbuxx + // [51] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#10 -- vbuxx=_inc_vbuxx inx - // [34] phi from doplasma::@10 to doplasma::@7 [phi:doplasma::@10->doplasma::@7] - b7_from_b10: - // [34] phi (byte*) doplasma::screen#6 = (byte*) doplasma::screen#2 [phi:doplasma::@10->doplasma::@7#0] -- register_copy - // [34] phi (byte) doplasma::ii#2 = (byte) doplasma::ii#1 [phi:doplasma::@10->doplasma::@7#1] -- register_copy jmp b7 - // doplasma::@9 - b9: - // [41] (byte~) doplasma::$6 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#2) -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx - lda xbuf,y - clc - adc ybuf,x - // [42] *((byte*) doplasma::screen#6 + (byte) doplasma::i2#2) ← (byte~) doplasma::$6 -- pbuz1_derefidx_vbuyy=vbuaa - sta (screen),y - // [43] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuyy=_inc_vbuyy - iny - // [37] phi from doplasma::@9 to doplasma::@8 [phi:doplasma::@9->doplasma::@8] - b8_from_b9: - // [37] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@9->doplasma::@8#0] -- register_copy - jmp b8 - // doplasma::@5 - b5: - // [44] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 - ldy c2a - lda SINTABLE,y - ldy c2b - clc - adc SINTABLE,y - // [45] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa - ldy i1 - sta xbuf,y - // [46] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 - lax c2a - axs #-[3] - stx c2a - // [47] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 - lax c2b - axs #-[7] - stx c2b - // [48] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 - inc i1 - // [30] phi from doplasma::@5 to doplasma::@4 [phi:doplasma::@5->doplasma::@4] - b4_from_b5: - // [30] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@5->doplasma::@4#0] -- register_copy - // [30] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@5->doplasma::@4#1] -- register_copy - // [30] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@5->doplasma::@4#2] -- register_copy - jmp b4 - // doplasma::@2 - b2: - // [49] (byte~) doplasma::$1 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 - ldy c1a - lda SINTABLE,y - ldy c1b - clc - adc SINTABLE,y - // [50] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa - ldy i - sta ybuf,y - // [51] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 - lax c1a - axs #-[4] - stx c1a - // [52] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 - lax c1b - axs #-[9] - stx c1b - // [53] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [24] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1] - b1_from_b2: - // [24] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@2->doplasma::@1#0] -- register_copy - // [24] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@2->doplasma::@1#1] -- register_copy - // [24] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@2->doplasma::@1#2] -- register_copy - jmp b1 + // doplasma::@7 + b7: + // [52] if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@8 -- vbuxx_lt_vbuc1_then_la1 + cpx #$19 + bcc b8_from_b7 + jmp breturn + // doplasma::@return + breturn: + // [53] return + rts xbuf: .fill $28, 0 ybuf: .fill $19, 0 } // makecharset // Make a plasma-friendly charset where the chars are randomly filled makecharset: { - .label _7 = $11 - .label _10 = $f - .label _11 = $f + .label _7 = $f + .label _10 = $10 + .label _11 = $10 .label s = $e .label i = $b .label c = $c - .label _16 = $f + .label _16 = $10 // [55] call sid_rnd_init jsr sid_rnd_init - // [56] phi from makecharset to makecharset::@12 [phi:makecharset->makecharset::@12] - b12_from_makecharset: - jmp b12 - // makecharset::@12 - b12: + // [56] phi from makecharset to makecharset::@13 [phi:makecharset->makecharset::@13] + b13_from_makecharset: + jmp b13 + // makecharset::@13 + b13: // [57] call print_cls - // [92] phi from makecharset::@12 to print_cls [phi:makecharset::@12->print_cls] - print_cls_from_b12: + // [91] phi from makecharset::@13 to print_cls [phi:makecharset::@13->print_cls] + print_cls_from_b13: jsr print_cls - // [58] phi from makecharset::@12 to makecharset::@1 [phi:makecharset::@12->makecharset::@1] - b1_from_b12: - // [58] phi (byte*) print_char_cursor#18 = (const byte*) print_line_cursor#0 [phi:makecharset::@12->makecharset::@1#0] -- pbuz1=pbuc1 + // [58] phi from makecharset::@13 to makecharset::@2 [phi:makecharset::@13->makecharset::@2] + b2_from_b13: + // [58] phi (byte*) print_char_cursor#56 = (const byte*) print_line_cursor#0 [phi:makecharset::@13->makecharset::@2#0] -- pbuz1=pbuc1 lda #print_line_cursor sta print_char_cursor+1 - // [58] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vbuc1 + // [58] phi (word) makecharset::c#16 = (byte) 0 [phi:makecharset::@13->makecharset::@2#1] -- vwuz1=vbuc1 lda #<0 sta c lda #>0 sta c+1 - jmp b1 - // makecharset::@1 - b1: - // [59] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 - lda c+1 - cmp #>$100 - bcc b2 - bne !+ - lda c - cmp #<$100 - bcc b2 - !: - jmp breturn - // makecharset::@return - breturn: - // [60] return - rts + jmp b2 + // [58] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2] + b2_from_b1: + // [58] phi (byte*) print_char_cursor#56 = (byte*) print_char_cursor#18 [phi:makecharset::@1->makecharset::@2#0] -- register_copy + // [58] phi (word) makecharset::c#16 = (word) makecharset::c#1 [phi:makecharset::@1->makecharset::@2#1] -- register_copy + jmp b2 // makecharset::@2 b2: - // [61] (byte~) makecharset::$3 ← < (word) makecharset::c#2 -- vbuaa=_lo_vwuz1 + // [59] (byte~) makecharset::$3 ← < (word) makecharset::c#16 -- vbuaa=_lo_vwuz1 lda c - // [62] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) -- vbuz1=pbuc1_derefidx_vbuaa + // [60] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) -- vbuz1=pbuc1_derefidx_vbuaa tay lda SINTABLE,y sta s - // [63] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3] - b3_from_b2: - // [63] phi (byte) makecharset::i#2 = (byte) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuz1=vbuc1 + // [61] phi from makecharset::@2 to makecharset::@4 [phi:makecharset::@2->makecharset::@4] + b4_from_b2: + // [61] phi (byte) makecharset::i#13 = (byte) 0 [phi:makecharset::@2->makecharset::@4#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b3 - // makecharset::@3 - b3: - // [64] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@5 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #8 - bcc b5_from_b3 + jmp b4 + // [61] phi from makecharset::@3 to makecharset::@4 [phi:makecharset::@3->makecharset::@4] + b4_from_b3: + // [61] phi (byte) makecharset::i#13 = (byte) makecharset::i#1 [phi:makecharset::@3->makecharset::@4#0] -- register_copy jmp b4 // makecharset::@4 b4: - // [65] (byte~) makecharset::$12 ← (word) makecharset::c#2 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 - lda c - and #7 - // [66] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@11 -- vbuaa_neq_0_then_la1 - cmp #0 - bne b11_from_b4 - // [67] phi from makecharset::@4 to makecharset::@10 [phi:makecharset::@4->makecharset::@10] - b10_from_b4: - jmp b10 - // makecharset::@10 - b10: - // [68] call print_char - jsr print_char - // [69] phi from makecharset::@10 makecharset::@4 to makecharset::@11 [phi:makecharset::@10/makecharset::@4->makecharset::@11] - b11_from_b10: - b11_from_b4: - // [69] phi (byte*) print_char_cursor#29 = (byte*) print_char_cursor#1 [phi:makecharset::@10/makecharset::@4->makecharset::@11#0] -- register_copy - jmp b11 - // makecharset::@11 - b11: - // [70] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 - inc c - bne !+ - inc c+1 - !: - // [58] phi from makecharset::@11 to makecharset::@1 [phi:makecharset::@11->makecharset::@1] - b1_from_b11: - // [58] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#29 [phi:makecharset::@11->makecharset::@1#0] -- register_copy - // [58] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@11->makecharset::@1#1] -- register_copy - jmp b1 - // [71] phi from makecharset::@3 to makecharset::@5 [phi:makecharset::@3->makecharset::@5] - b5_from_b3: - // [71] phi (byte) makecharset::b#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#0] -- vbuyy=vbuc1 + // [62] phi from makecharset::@4 to makecharset::@7 [phi:makecharset::@4->makecharset::@7] + b7_from_b4: + // [62] phi (byte) makecharset::b#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#0] -- vbuyy=vbuc1 ldy #0 - // [71] phi (byte) makecharset::ii#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#1] -- vbuxx=vbuc1 + // [62] phi (byte) makecharset::ii#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#1] -- vbuxx=vbuc1 ldx #0 - jmp b5 - // makecharset::@5 - b5: - // [72] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@6 -- vbuxx_lt_vbuc1_then_la1 - cpx #8 - bcc b6_from_b5 + jmp b7 + // [62] phi from makecharset::@6 to makecharset::@7 [phi:makecharset::@6->makecharset::@7] + b7_from_b6: + // [62] phi (byte) makecharset::b#10 = (byte) makecharset::b#2 [phi:makecharset::@6->makecharset::@7#0] -- register_copy + // [62] phi (byte) makecharset::ii#10 = (byte) makecharset::ii#1 [phi:makecharset::@6->makecharset::@7#1] -- register_copy jmp b7 // makecharset::@7 b7: - // [73] (word~) makecharset::$10 ← (word) makecharset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [63] call sid_rnd + jsr sid_rnd + // [64] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + jmp b14 + // makecharset::@14 + b14: + // [65] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 + // [66] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 + and #$ff + sta _7 + // [67] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@9 -- vbuz1_le_vbuz2_then_la1 + lda s + cmp _7 + bcs b9_from_b14 + jmp b10 + // makecharset::@10 + b10: + // [68] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx + tya + ora bittab,x + tay + // [69] phi from makecharset::@10 makecharset::@14 to makecharset::@9 [phi:makecharset::@10/makecharset::@14->makecharset::@9] + b9_from_b10: + b9_from_b14: + // [69] phi (byte) makecharset::b#2 = (byte) makecharset::b#1 [phi:makecharset::@10/makecharset::@14->makecharset::@9#0] -- register_copy + jmp b9 + // makecharset::@9 + b9: + // [70] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#10 -- vbuxx=_inc_vbuxx + inx + jmp b6 + // makecharset::@6 + b6: + // [71] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@7 -- vbuxx_lt_vbuc1_then_la1 + cpx #8 + bcc b7_from_b6 + jmp b8 + // makecharset::@8 + b8: + // [72] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda c asl sta _10 @@ -4048,7 +4185,7 @@ makecharset: { rol _10+1 asl _10 rol _10+1 - // [74] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#2 -- vwuz1=vwuz1_plus_vbuz2 + // [73] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 -- vwuz1=vwuz1_plus_vbuz2 lda i clc adc _11 @@ -4056,7 +4193,7 @@ makecharset: { bcc !+ inc _11+1 !: - // [75] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz1 + // [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz1 clc lda _16 adc #CHARSET sta _16+1 - // [76] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy + // [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy tya ldy #0 sta (_16),y - // [77] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 -- vbuz1=_inc_vbuz1 + // [76] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 -- vbuz1=_inc_vbuz1 inc i - // [63] phi from makecharset::@7 to makecharset::@3 [phi:makecharset::@7->makecharset::@3] - b3_from_b7: - // [63] phi (byte) makecharset::i#2 = (byte) makecharset::i#1 [phi:makecharset::@7->makecharset::@3#0] -- register_copy jmp b3 - // [78] phi from makecharset::@5 to makecharset::@6 [phi:makecharset::@5->makecharset::@6] - b6_from_b5: - jmp b6 - // makecharset::@6 - b6: - // [79] call sid_rnd - jsr sid_rnd - // [80] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - jmp b13 - // makecharset::@13 - b13: - // [81] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 - // [82] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 - and #$ff - sta _7 - // [83] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@8 -- vbuz1_le_vbuz2_then_la1 - lda s - cmp _7 - bcs b8_from_b13 - jmp b9 - // makecharset::@9 - b9: - // [84] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx - tya - ora bittab,x - tay - // [85] phi from makecharset::@13 makecharset::@9 to makecharset::@8 [phi:makecharset::@13/makecharset::@9->makecharset::@8] - b8_from_b13: - b8_from_b9: - // [85] phi (byte) makecharset::b#6 = (byte) makecharset::b#2 [phi:makecharset::@13/makecharset::@9->makecharset::@8#0] -- register_copy - jmp b8 - // makecharset::@8 - b8: - // [86] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuxx=_inc_vbuxx - inx - // [71] phi from makecharset::@8 to makecharset::@5 [phi:makecharset::@8->makecharset::@5] - b5_from_b8: - // [71] phi (byte) makecharset::b#2 = (byte) makecharset::b#6 [phi:makecharset::@8->makecharset::@5#0] -- register_copy - // [71] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@8->makecharset::@5#1] -- register_copy + // makecharset::@3 + b3: + // [77] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@4 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #8 + bcc b4_from_b3 jmp b5 - bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 -} - // sid_rnd -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -sid_rnd: { - // [87] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // makecharset::@5 + b5: + // [78] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 + lda c + and #7 + // [79] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@12 -- vbuaa_neq_0_then_la1 + cmp #0 + bne b12_from_b5 + // [80] phi from makecharset::@5 to makecharset::@11 [phi:makecharset::@5->makecharset::@11] + b11_from_b5: + jmp b11 + // makecharset::@11 + b11: + // [81] call print_char + jsr print_char + // [82] phi from makecharset::@11 makecharset::@5 to makecharset::@12 [phi:makecharset::@11/makecharset::@5->makecharset::@12] + b12_from_b11: + b12_from_b5: + // [82] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#1 [phi:makecharset::@11/makecharset::@5->makecharset::@12#0] -- register_copy + jmp b12 + // makecharset::@12 + b12: + // [83] (word) makecharset::c#1 ← ++ (word) makecharset::c#16 -- vwuz1=_inc_vwuz1 + inc c + bne !+ + inc c+1 + !: + jmp b1 + // makecharset::@1 + b1: + // [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 + lda c+1 + cmp #>$100 + bcc b2_from_b1 + bne !+ + lda c + cmp #<$100 + bcc b2_from_b1 + !: jmp breturn - // sid_rnd::@return + // makecharset::@return breturn: - // [88] return + // [85] return rts + bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // print_char // Print a single char print_char: { .const ch = '.' - // [89] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 + // [86] *((byte*) print_char_cursor#56) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (print_char_cursor),y - // [90] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 + // [87] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#56 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 @@ -4144,20 +4277,32 @@ print_char: { jmp breturn // print_char::@return breturn: - // [91] return + // [88] return + rts +} + // sid_rnd +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + // [89] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 + lda SID_VOICE3_OSC + jmp breturn + // sid_rnd::@return + breturn: + // [90] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [93] call memset - // [95] phi from print_cls to memset [phi:print_cls->memset] + // [92] call memset + // [94] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp breturn // print_cls::@return breturn: - // [94] return + // [93] return rts } // memset @@ -4168,59 +4313,60 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = $c - // [96] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [96] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [95] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [95] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [97] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [95] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [99] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [96] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [100] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [97] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [96] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [96] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [98] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #$ffff sta SID_VOICE3_FREQ+1 - // [102] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [101] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL jmp breturn // sid_rnd_init::@return breturn: - // [103] return + // [102] return rts } // File Data @@ -4241,30 +4387,37 @@ Removing instruction jmp toD0181 Removing instruction jmp b5 Removing instruction jmp toD0182 Removing instruction jmp b6 +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 +Removing instruction jmp b5 Removing instruction jmp b4 Removing instruction jmp b6 -Removing instruction jmp b7 -Removing instruction jmp breturn Removing instruction jmp b8 Removing instruction jmp b10 +Removing instruction jmp b9 +Removing instruction jmp b11 +Removing instruction jmp b7 +Removing instruction jmp breturn +Removing instruction jmp b13 +Removing instruction jmp b2 +Removing instruction jmp b4 +Removing instruction jmp b7 +Removing instruction jmp b14 +Removing instruction jmp b10 +Removing instruction jmp b9 +Removing instruction jmp b6 +Removing instruction jmp b8 +Removing instruction jmp b3 +Removing instruction jmp b5 +Removing instruction jmp b11 Removing instruction jmp b12 Removing instruction jmp b1 Removing instruction jmp breturn -Removing instruction jmp b3 -Removing instruction jmp b4 -Removing instruction jmp b10 -Removing instruction jmp b11 -Removing instruction jmp b5 -Removing instruction jmp b7 -Removing instruction jmp b6 -Removing instruction jmp b13 -Removing instruction jmp b9 -Removing instruction jmp b8 Removing instruction jmp breturn Removing instruction jmp breturn Removing instruction jmp breturn +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp breturn @@ -4278,9 +4431,18 @@ Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 Replacing label b3 with b4 -Replacing label b11_from_b4 with b11 -Replacing label b6_from_b5 with b6 -Replacing label b8_from_b13 with b8 +Replacing label b2_from_b1 with b2 +Replacing label b5_from_b4 with b5 +Replacing label b10_from_b9 with b10 +Replacing label b8_from_b7 with b8 +Replacing label b9_from_b14 with b9 +Replacing label b7_from_b6 with b7 +Replacing label b4_from_b3 with b4 +Replacing label b12_from_b5 with b12 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction bend_from_b1: @@ -4294,14 +4456,23 @@ Removing instruction toD0181_from_b4: Removing instruction toD0181: Removing instruction toD0182_from_b5: Removing instruction toD0182: -Removing instruction b12_from_makecharset: -Removing instruction print_cls_from_b12: -Removing instruction b10_from_b4: -Removing instruction b11_from_b10: -Removing instruction b11_from_b4: -Removing instruction b6_from_b5: -Removing instruction b8_from_b13: -Removing instruction b8_from_b9: +Removing instruction b2_from_b1: +Removing instruction b5_from_b4: +Removing instruction b8_from_b7: +Removing instruction b10_from_b8: +Removing instruction b10_from_b9: +Removing instruction b13_from_makecharset: +Removing instruction print_cls_from_b13: +Removing instruction b2_from_b1: +Removing instruction b4_from_b3: +Removing instruction b7_from_b4: +Removing instruction b7_from_b6: +Removing instruction b9_from_b10: +Removing instruction b9_from_b14: +Removing instruction b11_from_b5: +Removing instruction b12_from_b11: +Removing instruction b12_from_b5: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction b1_from_main: @@ -4311,45 +4482,50 @@ Removing instruction b5: Removing instruction doplasma_from_b5: Removing instruction b6: Removing instruction b3_from_b6: -Removing instruction b1_from_doplasma: +Removing instruction b2_from_doplasma: +Removing instruction b1: Removing instruction b3: -Removing instruction b4_from_b3: -Removing instruction b6: -Removing instruction b7_from_b6: -Removing instruction breturn: -Removing instruction b10: -Removing instruction b7_from_b10: -Removing instruction b8_from_b9: -Removing instruction b4_from_b5: -Removing instruction b1_from_b2: -Removing instruction b12: -Removing instruction b1_from_b12: -Removing instruction breturn: -Removing instruction b3_from_b2: +Removing instruction b5_from_b3: Removing instruction b4: -Removing instruction b10: -Removing instruction b1_from_b11: -Removing instruction b7: -Removing instruction b3_from_b7: -Removing instruction b13: +Removing instruction b6: +Removing instruction b8_from_b6: Removing instruction b9: -Removing instruction b5_from_b8: +Removing instruction b11: +Removing instruction b7: +Removing instruction breturn: +Removing instruction b13: +Removing instruction b2_from_b13: +Removing instruction b4_from_b2: +Removing instruction b14: +Removing instruction b10: +Removing instruction b6: +Removing instruction b8: +Removing instruction b3: +Removing instruction b5: +Removing instruction b11: +Removing instruction b1: +Removing instruction breturn: Removing instruction breturn: Removing instruction breturn: Removing instruction memset_from_print_cls: Removing instruction breturn: -Removing instruction b1_from_memset: +Removing instruction b2_from_memset: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Relabelling long label b8_from_b7 to b3 -Relabelling long label b5_from_b3 to b4 -Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b5 +Removing instruction jmp b8 +Removing instruction jmp b10 +Removing instruction jmp b2 +Removing instruction jmp b4 +Removing instruction jmp b7 +Removing instruction jmp b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -4401,9 +4577,9 @@ FINAL SYMBOL TABLE (byte) c1B#14 c1B zp ZP_BYTE:14 11.0 (byte) c1B#4 c1B zp ZP_BYTE:14 0.8571428571428571 (byte) c2A -(byte) c2A#14 c2A zp ZP_BYTE:17 11.0 -(byte) c2A#24 c2A zp ZP_BYTE:17 1.2380952380952381 -(byte) c2A#4 c2A zp ZP_BYTE:17 1.3333333333333335 +(byte) c2A#14 c2A zp ZP_BYTE:15 11.0 +(byte) c2A#24 c2A zp ZP_BYTE:15 1.2380952380952381 +(byte) c2A#4 c2A zp ZP_BYTE:15 1.3333333333333335 (byte) c2B (byte) c2B#14 c2B zp ZP_BYTE:2 11.0 (byte) c2B#24 c2B zp ZP_BYTE:2 1.1818181818181817 @@ -4414,6 +4590,7 @@ FINAL SYMBOL TABLE (byte~) doplasma::$6 reg byte a 2002.0 (label) doplasma::@1 (label) doplasma::@10 +(label) doplasma::@11 (label) doplasma::@2 (label) doplasma::@3 (label) doplasma::@4 @@ -4425,36 +4602,36 @@ FINAL SYMBOL TABLE (label) doplasma::@return (byte) doplasma::c1a (byte) doplasma::c1a#0 c1a zp ZP_BYTE:4 2.0 -(byte) doplasma::c1a#1 c1a zp ZP_BYTE:4 67.33333333333333 -(byte) doplasma::c1a#2 c1a zp ZP_BYTE:4 76.25 +(byte) doplasma::c1a#1 c1a zp ZP_BYTE:4 50.5 +(byte) doplasma::c1a#4 c1a zp ZP_BYTE:4 101.66666666666666 (byte) doplasma::c1b (byte) doplasma::c1b#0 c1b zp ZP_BYTE:5 4.0 -(byte) doplasma::c1b#1 c1b zp ZP_BYTE:5 101.0 -(byte) doplasma::c1b#2 c1b zp ZP_BYTE:5 61.0 +(byte) doplasma::c1b#1 c1b zp ZP_BYTE:5 67.33333333333333 +(byte) doplasma::c1b#4 c1b zp ZP_BYTE:5 76.25 (byte) doplasma::c2a (byte) doplasma::c2a#0 c2a zp ZP_BYTE:7 2.0 -(byte) doplasma::c2a#1 c2a zp ZP_BYTE:7 67.33333333333333 -(byte) doplasma::c2a#2 c2a zp ZP_BYTE:7 76.25 +(byte) doplasma::c2a#1 c2a zp ZP_BYTE:7 50.5 +(byte) doplasma::c2a#4 c2a zp ZP_BYTE:7 101.66666666666666 (byte) doplasma::c2b (byte) doplasma::c2b#0 c2b zp ZP_BYTE:8 4.0 -(byte) doplasma::c2b#1 c2b zp ZP_BYTE:8 101.0 -(byte) doplasma::c2b#2 c2b zp ZP_BYTE:8 61.0 +(byte) doplasma::c2b#1 c2b zp ZP_BYTE:8 67.33333333333333 +(byte) doplasma::c2b#4 c2b zp ZP_BYTE:8 76.25 (byte) doplasma::i -(byte) doplasma::i#1 i zp ZP_BYTE:3 202.0 -(byte) doplasma::i#2 i zp ZP_BYTE:3 67.33333333333333 +(byte) doplasma::i#1 i zp ZP_BYTE:3 151.5 +(byte) doplasma::i#4 i zp ZP_BYTE:3 60.599999999999994 (byte) doplasma::i1 -(byte) doplasma::i1#1 i1 zp ZP_BYTE:6 202.0 -(byte) doplasma::i1#2 i1 zp ZP_BYTE:6 67.33333333333333 +(byte) doplasma::i1#1 i1 zp ZP_BYTE:6 151.5 +(byte) doplasma::i1#4 i1 zp ZP_BYTE:6 60.599999999999994 (byte) doplasma::i2 -(byte) doplasma::i2#1 reg byte y 2002.0 -(byte) doplasma::i2#2 reg byte y 1251.25 +(byte) doplasma::i2#1 reg byte y 1501.5 +(byte) doplasma::i2#4 reg byte y 1334.6666666666667 (byte) doplasma::ii -(byte) doplasma::ii#1 reg byte x 202.0 -(byte) doplasma::ii#2 reg byte x 163.0 +(byte) doplasma::ii#1 reg byte x 151.5 +(byte) doplasma::ii#10 reg byte x 171.85714285714283 (byte*) doplasma::screen (byte*) doplasma::screen#13 screen zp ZP_WORD:9 0.08695652173913043 -(byte*) doplasma::screen#2 screen zp ZP_WORD:9 101.0 -(byte*) doplasma::screen#6 screen zp ZP_WORD:9 172.14285714285714 +(byte*) doplasma::screen#18 screen zp ZP_WORD:9 200.83333333333334 +(byte*) doplasma::screen#2 screen zp ZP_WORD:9 67.33333333333333 (byte[$28]) doplasma::xbuf (const byte[$28]) doplasma::xbuf#0 xbuf = { fill( $28, 0) } (byte[$19]) doplasma::ybuf @@ -4498,18 +4675,19 @@ FINAL SYMBOL TABLE (const byte) main::toD0182_return#0 toD0182_return = >(word)(const byte*) SCREEN2#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f (byte*) main::toD0182_screen (void()) makecharset((byte*) makecharset::charset) -(word~) makecharset::$10 $10 zp ZP_WORD:15 202.0 -(word~) makecharset::$11 $11 zp ZP_WORD:15 202.0 +(word~) makecharset::$10 $10 zp ZP_WORD:16 202.0 +(word~) makecharset::$11 $11 zp ZP_WORD:16 202.0 (byte~) makecharset::$12 reg byte a 22.0 -(byte*~) makecharset::$16 $16 zp ZP_WORD:15 202.0 +(byte*~) makecharset::$16 $16 zp ZP_WORD:16 202.0 (byte~) makecharset::$3 reg byte a 22.0 (byte~) makecharset::$6 reg byte a 2002.0 -(byte~) makecharset::$7 $7 zp ZP_BYTE:17 2002.0 +(byte~) makecharset::$7 $7 zp ZP_BYTE:15 2002.0 (label) makecharset::@1 (label) makecharset::@10 (label) makecharset::@11 (label) makecharset::@12 (label) makecharset::@13 +(label) makecharset::@14 (label) makecharset::@2 (label) makecharset::@3 (label) makecharset::@4 @@ -4521,22 +4699,22 @@ FINAL SYMBOL TABLE (label) makecharset::@return (byte) makecharset::b (byte) makecharset::b#1 reg byte y 2002.0 -(byte) makecharset::b#2 reg byte y 282.1818181818182 -(byte) makecharset::b#6 reg byte y 1501.5 +(byte) makecharset::b#10 reg byte y 500.5 +(byte) makecharset::b#2 reg byte y 517.3333333333334 (byte[8]) makecharset::bittab (const byte[8]) makecharset::bittab#0 bittab = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (word) makecharset::c -(word) makecharset::c#1 c zp ZP_WORD:12 22.0 -(word) makecharset::c#2 c zp ZP_WORD:12 5.777777777777778 +(word) makecharset::c#1 c zp ZP_WORD:12 16.5 +(word) makecharset::c#16 c zp ZP_WORD:12 5.800000000000001 (byte*) makecharset::charset (byte) makecharset::i -(byte) makecharset::i#1 i zp ZP_BYTE:11 202.0 -(byte) makecharset::i#2 i zp ZP_BYTE:11 23.764705882352942 +(byte) makecharset::i#1 i zp ZP_BYTE:11 151.5 +(byte) makecharset::i#13 i zp ZP_BYTE:11 20.2 (byte) makecharset::ii -(byte) makecharset::ii#1 reg byte x 2002.0 -(byte) makecharset::ii#2 reg byte x 400.4 +(byte) makecharset::ii#1 reg byte x 1501.5 +(byte) makecharset::ii#10 reg byte x 375.375 (byte) makecharset::s -(byte) makecharset::s#0 s zp ZP_BYTE:14 53.26315789473684 +(byte) makecharset::s#0 s zp ZP_BYTE:14 56.22222222222223 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -4544,8 +4722,8 @@ FINAL SYMBOL TABLE (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:12 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:12 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:12 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:12 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -4559,8 +4737,8 @@ FINAL SYMBOL TABLE (const byte) print_char::ch#0 ch = (byte) '.' (byte*) print_char_cursor (byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:9 4.333333333333333 -(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:9 1.0 -(byte*) print_char_cursor#29 print_char_cursor zp ZP_WORD:9 16.5 +(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:9 11.0 +(byte*) print_char_cursor#56 print_char_cursor zp ZP_WORD:9 1.0833333333333333 (void()) print_cls() (label) print_cls::@return (byte*) print_line_cursor @@ -4575,34 +4753,34 @@ FINAL SYMBOL TABLE (label) sid_rnd_init::@return zp ZP_BYTE:2 [ c2B#24 c2B#14 c2B#4 ] -zp ZP_BYTE:3 [ doplasma::i#2 doplasma::i#1 ] -zp ZP_BYTE:4 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -zp ZP_BYTE:5 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -zp ZP_BYTE:6 [ doplasma::i1#2 doplasma::i1#1 ] -zp ZP_BYTE:7 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -zp ZP_BYTE:8 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -reg byte x [ doplasma::ii#2 doplasma::ii#1 ] -reg byte y [ doplasma::i2#2 doplasma::i2#1 ] -zp ZP_WORD:9 [ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 doplasma::screen#6 doplasma::screen#2 doplasma::screen#13 main::col#2 main::col#1 ] -zp ZP_BYTE:11 [ makecharset::i#2 makecharset::i#1 c1A#10 c1A#14 c1A#4 ] -reg byte x [ makecharset::ii#2 makecharset::ii#1 ] -reg byte y [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 makecharset::c#2 makecharset::c#1 ] -reg byte a [ doplasma::$6 ] -reg byte a [ doplasma::$3 ] +zp ZP_BYTE:3 [ doplasma::i#4 doplasma::i#1 ] +zp ZP_BYTE:4 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +zp ZP_BYTE:5 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +zp ZP_BYTE:6 [ doplasma::i1#4 doplasma::i1#1 ] +zp ZP_BYTE:7 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +zp ZP_BYTE:8 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +reg byte x [ doplasma::ii#10 doplasma::ii#1 ] +reg byte y [ doplasma::i2#4 doplasma::i2#1 ] +zp ZP_WORD:9 [ print_char_cursor#56 print_char_cursor#18 print_char_cursor#1 doplasma::screen#18 doplasma::screen#2 doplasma::screen#13 main::col#2 main::col#1 ] +zp ZP_BYTE:11 [ makecharset::i#13 makecharset::i#1 c1A#10 c1A#14 c1A#4 ] +reg byte x [ makecharset::ii#10 makecharset::ii#1 ] +reg byte y [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] +zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 makecharset::c#16 makecharset::c#1 ] reg byte a [ doplasma::$1 ] +reg byte a [ doplasma::$3 ] +reg byte a [ doplasma::$6 ] reg byte a [ makecharset::$3 ] zp ZP_BYTE:14 [ makecharset::s#0 c1B#10 c1B#14 c1B#4 ] -reg byte a [ makecharset::$12 ] -zp ZP_WORD:15 [ makecharset::$10 makecharset::$11 makecharset::$16 ] reg byte a [ sid_rnd::return#2 ] reg byte a [ makecharset::$6 ] -zp ZP_BYTE:17 [ makecharset::$7 c2A#24 c2A#14 c2A#4 ] +zp ZP_BYTE:15 [ makecharset::$7 c2A#24 c2A#14 c2A#4 ] +zp ZP_WORD:16 [ makecharset::$10 makecharset::$11 makecharset::$16 ] +reg byte a [ makecharset::$12 ] reg byte a [ sid_rnd::return#0 ] FINAL ASSEMBLER -Score: 97772 +Score: 90512 // File Comments // A KickC version of the plasma routine from the CC65 samples @@ -4635,7 +4813,7 @@ Score: 97772 .label print_char_cursor = 9 .label c1A = $b .label c1B = $e - .label c2A = $11 + .label c2A = $f .label c2B = 2 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] @@ -4773,90 +4951,153 @@ doplasma: { // [23] (byte) doplasma::c1b#0 ← (byte) c1B#10 -- vbuz1=vbuz2 lda c1B sta c1b - // [24] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1] - // [24] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#0] -- register_copy - // [24] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#1] -- register_copy - // [24] phi (byte) doplasma::i#2 = (byte) 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1 + // [24] phi from doplasma to doplasma::@2 [phi:doplasma->doplasma::@2] + // [24] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@2#0] -- register_copy + // [24] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@2#1] -- register_copy + // [24] phi (byte) doplasma::i#4 = (byte) 0 [phi:doplasma->doplasma::@2#2] -- vbuz1=vbuc1 lda #0 sta i - // doplasma::@1 - b1: + // [24] phi from doplasma::@1 to doplasma::@2 [phi:doplasma::@1->doplasma::@2] + // [24] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#1 [phi:doplasma::@1->doplasma::@2#0] -- register_copy + // [24] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#1 [phi:doplasma::@1->doplasma::@2#1] -- register_copy + // [24] phi (byte) doplasma::i#4 = (byte) doplasma::i#1 [phi:doplasma::@1->doplasma::@2#2] -- register_copy + // doplasma::@2 + b2: + // SINTABLE[c1a] + SINTABLE[c1b] + // [25] (byte~) doplasma::$1 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 + ldy c1a + lda SINTABLE,y + ldy c1b + clc + adc SINTABLE,y + // ybuf[i] = (SINTABLE[c1a] + SINTABLE[c1b]) + // [26] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#4) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa + ldy i + sta ybuf,y + // c1a += 4 + // [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 + lax c1a + axs #-[4] + stx c1a + // c1b += 9 + // [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 + lax c1b + axs #-[9] + stx c1b // for (char i = 0; i < 25; ++i) - // [25] if((byte) doplasma::i#2<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 + // [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#4 -- vbuz1=_inc_vbuz1 + inc i + // doplasma::@1 + // [30] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$19 bcc b2 // doplasma::@3 // c1A += 3 - // [26] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax c1A axs #-[3] stx c1A // c1B -= 5 - // [27] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 + // [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 lax c1B axs #5 stx c1B // c2a = c2A - // [28] (byte) doplasma::c2a#0 ← (byte) c2A#24 -- vbuz1=vbuz2 + // [33] (byte) doplasma::c2a#0 ← (byte) c2A#24 -- vbuz1=vbuz2 lda c2A sta c2a // c2b = c2B - // [29] (byte) doplasma::c2b#0 ← (byte) c2B#24 -- vbuz1=vbuz2 + // [34] (byte) doplasma::c2b#0 ← (byte) c2B#24 -- vbuz1=vbuz2 lda c2B sta c2b - // [30] phi from doplasma::@3 to doplasma::@4 [phi:doplasma::@3->doplasma::@4] - // [30] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@4#0] -- register_copy - // [30] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@4#1] -- register_copy - // [30] phi (byte) doplasma::i1#2 = (byte) 0 [phi:doplasma::@3->doplasma::@4#2] -- vbuz1=vbuc1 + // [35] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5] + // [35] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@5#0] -- register_copy + // [35] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@5#1] -- register_copy + // [35] phi (byte) doplasma::i1#4 = (byte) 0 [phi:doplasma::@3->doplasma::@5#2] -- vbuz1=vbuc1 lda #0 sta i1 - // doplasma::@4 - b4: + // [35] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5] + // [35] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#1 [phi:doplasma::@4->doplasma::@5#0] -- register_copy + // [35] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#1 [phi:doplasma::@4->doplasma::@5#1] -- register_copy + // [35] phi (byte) doplasma::i1#4 = (byte) doplasma::i1#1 [phi:doplasma::@4->doplasma::@5#2] -- register_copy + // doplasma::@5 + b5: + // SINTABLE[c2a] + SINTABLE[c2b] + // [36] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 + ldy c2a + lda SINTABLE,y + ldy c2b + clc + adc SINTABLE,y + // xbuf[i] = (SINTABLE[c2a] + SINTABLE[c2b]) + // [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#4) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa + ldy i1 + sta xbuf,y + // c2a += 3 + // [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + lax c2a + axs #-[3] + stx c2a + // c2b += 7 + // [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 + lax c2b + axs #-[7] + stx c2b // for (char i = 0; i < 40; ++i) - // [31] if((byte) doplasma::i1#2<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 + // [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#4 -- vbuz1=_inc_vbuz1 + inc i1 + // doplasma::@4 + // [41] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 lda i1 cmp #$28 bcc b5 // doplasma::@6 // c2A += 2 - // [32] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2 -- vbuz1=vbuz1_plus_2 + // [42] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2 -- vbuz1=vbuz1_plus_2 lda c2A clc adc #2 sta c2A // c2B -= 3 - // [33] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 + // [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 lax c2B axs #3 stx c2B - // [34] phi from doplasma::@6 to doplasma::@7 [phi:doplasma::@6->doplasma::@7] - // [34] phi (byte*) doplasma::screen#6 = (byte*) doplasma::screen#13 [phi:doplasma::@6->doplasma::@7#0] -- register_copy - // [34] phi (byte) doplasma::ii#2 = (byte) 0 [phi:doplasma::@6->doplasma::@7#1] -- vbuxx=vbuc1 + // [44] phi from doplasma::@6 to doplasma::@8 [phi:doplasma::@6->doplasma::@8] + // [44] phi (byte*) doplasma::screen#18 = (byte*) doplasma::screen#13 [phi:doplasma::@6->doplasma::@8#0] -- register_copy + // [44] phi (byte) doplasma::ii#10 = (byte) 0 [phi:doplasma::@6->doplasma::@8#1] -- vbuxx=vbuc1 ldx #0 - // doplasma::@7 - b7: - // for (char ii = 0; ii < 25; ++ii) - // [35] if((byte) doplasma::ii#2<(byte) $19) goto doplasma::@8 -- vbuxx_lt_vbuc1_then_la1 - cpx #$19 - bcc b3 - // doplasma::@return - // } - // [36] return - rts - // [37] phi from doplasma::@7 to doplasma::@8 [phi:doplasma::@7->doplasma::@8] - b3: - // [37] phi (byte) doplasma::i2#2 = (byte) 0 [phi:doplasma::@7->doplasma::@8#0] -- vbuyy=vbuc1 - ldy #0 + // [44] phi from doplasma::@7 to doplasma::@8 [phi:doplasma::@7->doplasma::@8] + // [44] phi (byte*) doplasma::screen#18 = (byte*) doplasma::screen#2 [phi:doplasma::@7->doplasma::@8#0] -- register_copy + // [44] phi (byte) doplasma::ii#10 = (byte) doplasma::ii#1 [phi:doplasma::@7->doplasma::@8#1] -- register_copy // doplasma::@8 b8: - // for (char i = 0; i < 40; ++i) - // [38] if((byte) doplasma::i2#2<(byte) $28) goto doplasma::@9 -- vbuyy_lt_vbuc1_then_la1 - cpy #$28 - bcc b9 + // [45] phi from doplasma::@8 to doplasma::@10 [phi:doplasma::@8->doplasma::@10] + // [45] phi (byte) doplasma::i2#4 = (byte) 0 [phi:doplasma::@8->doplasma::@10#0] -- vbuyy=vbuc1 + ldy #0 + // [45] phi from doplasma::@9 to doplasma::@10 [phi:doplasma::@9->doplasma::@10] + // [45] phi (byte) doplasma::i2#4 = (byte) doplasma::i2#1 [phi:doplasma::@9->doplasma::@10#0] -- register_copy // doplasma::@10 + b10: + // xbuf[i] + ybuf[ii] + // [46] (byte~) doplasma::$6 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#4) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#10) -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx + lda xbuf,y + clc + adc ybuf,x + // screen[i] = (xbuf[i] + ybuf[ii]) + // [47] *((byte*) doplasma::screen#18 + (byte) doplasma::i2#4) ← (byte~) doplasma::$6 -- pbuz1_derefidx_vbuyy=vbuaa + sta (screen),y + // for (char i = 0; i < 40; ++i) + // [48] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#4 -- vbuyy=_inc_vbuyy + iny + // doplasma::@9 + // [49] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@10 -- vbuyy_lt_vbuc1_then_la1 + cpy #$28 + bcc b10 + // doplasma::@11 // screen += 40 - // [39] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#18 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen @@ -4865,202 +5106,114 @@ doplasma: { inc screen+1 !: // for (char ii = 0; ii < 25; ++ii) - // [40] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#2 -- vbuxx=_inc_vbuxx + // [51] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#10 -- vbuxx=_inc_vbuxx inx - // [34] phi from doplasma::@10 to doplasma::@7 [phi:doplasma::@10->doplasma::@7] - // [34] phi (byte*) doplasma::screen#6 = (byte*) doplasma::screen#2 [phi:doplasma::@10->doplasma::@7#0] -- register_copy - // [34] phi (byte) doplasma::ii#2 = (byte) doplasma::ii#1 [phi:doplasma::@10->doplasma::@7#1] -- register_copy - jmp b7 - // doplasma::@9 - b9: - // xbuf[i] + ybuf[ii] - // [41] (byte~) doplasma::$6 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#2) -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx - lda xbuf,y - clc - adc ybuf,x - // screen[i] = (xbuf[i] + ybuf[ii]) - // [42] *((byte*) doplasma::screen#6 + (byte) doplasma::i2#2) ← (byte~) doplasma::$6 -- pbuz1_derefidx_vbuyy=vbuaa - sta (screen),y - // for (char i = 0; i < 40; ++i) - // [43] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuyy=_inc_vbuyy - iny - // [37] phi from doplasma::@9 to doplasma::@8 [phi:doplasma::@9->doplasma::@8] - // [37] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@9->doplasma::@8#0] -- register_copy - jmp b8 - // doplasma::@5 - b5: - // SINTABLE[c2a] + SINTABLE[c2b] - // [44] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 - ldy c2a - lda SINTABLE,y - ldy c2b - clc - adc SINTABLE,y - // xbuf[i] = (SINTABLE[c2a] + SINTABLE[c2b]) - // [45] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa - ldy i1 - sta xbuf,y - // c2a += 3 - // [46] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 - lax c2a - axs #-[3] - stx c2a - // c2b += 7 - // [47] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 - lax c2b - axs #-[7] - stx c2b - // for (char i = 0; i < 40; ++i) - // [48] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 - inc i1 - // [30] phi from doplasma::@5 to doplasma::@4 [phi:doplasma::@5->doplasma::@4] - // [30] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@5->doplasma::@4#0] -- register_copy - // [30] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@5->doplasma::@4#1] -- register_copy - // [30] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@5->doplasma::@4#2] -- register_copy - jmp b4 - // doplasma::@2 - b2: - // SINTABLE[c1a] + SINTABLE[c1b] - // [49] (byte~) doplasma::$1 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 - ldy c1a - lda SINTABLE,y - ldy c1b - clc - adc SINTABLE,y - // ybuf[i] = (SINTABLE[c1a] + SINTABLE[c1b]) - // [50] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa - ldy i - sta ybuf,y - // c1a += 4 - // [51] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 - lax c1a - axs #-[4] - stx c1a - // c1b += 9 - // [52] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 - lax c1b - axs #-[9] - stx c1b - // for (char i = 0; i < 25; ++i) - // [53] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [24] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1] - // [24] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@2->doplasma::@1#0] -- register_copy - // [24] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@2->doplasma::@1#1] -- register_copy - // [24] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@2->doplasma::@1#2] -- register_copy - jmp b1 + // doplasma::@7 + // [52] if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@8 -- vbuxx_lt_vbuc1_then_la1 + cpx #$19 + bcc b8 + // doplasma::@return + // } + // [53] return + rts xbuf: .fill $28, 0 ybuf: .fill $19, 0 } // makecharset // Make a plasma-friendly charset where the chars are randomly filled makecharset: { - .label _7 = $11 - .label _10 = $f - .label _11 = $f + .label _7 = $f + .label _10 = $10 + .label _11 = $10 .label s = $e .label i = $b .label c = $c - .label _16 = $f + .label _16 = $10 // sid_rnd_init() // [55] call sid_rnd_init jsr sid_rnd_init - // [56] phi from makecharset to makecharset::@12 [phi:makecharset->makecharset::@12] - // makecharset::@12 + // [56] phi from makecharset to makecharset::@13 [phi:makecharset->makecharset::@13] + // makecharset::@13 // print_cls() // [57] call print_cls - // [92] phi from makecharset::@12 to print_cls [phi:makecharset::@12->print_cls] + // [91] phi from makecharset::@13 to print_cls [phi:makecharset::@13->print_cls] jsr print_cls - // [58] phi from makecharset::@12 to makecharset::@1 [phi:makecharset::@12->makecharset::@1] - // [58] phi (byte*) print_char_cursor#18 = (const byte*) print_line_cursor#0 [phi:makecharset::@12->makecharset::@1#0] -- pbuz1=pbuc1 + // [58] phi from makecharset::@13 to makecharset::@2 [phi:makecharset::@13->makecharset::@2] + // [58] phi (byte*) print_char_cursor#56 = (const byte*) print_line_cursor#0 [phi:makecharset::@13->makecharset::@2#0] -- pbuz1=pbuc1 lda #print_line_cursor sta print_char_cursor+1 - // [58] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vbuc1 + // [58] phi (word) makecharset::c#16 = (byte) 0 [phi:makecharset::@13->makecharset::@2#1] -- vwuz1=vbuc1 lda #<0 sta c sta c+1 - // makecharset::@1 - b1: - // for (unsigned int c = 0; c < 0x100; ++c) - // [59] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 - lda c+1 - cmp #>$100 - bcc b2 - bne !+ - lda c - cmp #<$100 - bcc b2 - !: - // makecharset::@return - // } - // [60] return - rts + // [58] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2] + // [58] phi (byte*) print_char_cursor#56 = (byte*) print_char_cursor#18 [phi:makecharset::@1->makecharset::@2#0] -- register_copy + // [58] phi (word) makecharset::c#16 = (word) makecharset::c#1 [phi:makecharset::@1->makecharset::@2#1] -- register_copy // makecharset::@2 b2: // makecharset::@3] - // [63] phi (byte) makecharset::i#2 = (byte) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuz1=vbuc1 + // [61] phi from makecharset::@2 to makecharset::@4 [phi:makecharset::@2->makecharset::@4] + // [61] phi (byte) makecharset::i#13 = (byte) 0 [phi:makecharset::@2->makecharset::@4#0] -- vbuz1=vbuc1 lda #0 sta i - // makecharset::@3 - b3: - // for ( char i = 0; i < 8; ++i) - // [64] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@5 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #8 - bcc b4 + // [61] phi from makecharset::@3 to makecharset::@4 [phi:makecharset::@3->makecharset::@4] + // [61] phi (byte) makecharset::i#13 = (byte) makecharset::i#1 [phi:makecharset::@3->makecharset::@4#0] -- register_copy // makecharset::@4 - // c & 0x07 - // [65] (byte~) makecharset::$12 ← (word) makecharset::c#2 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 - lda c - and #7 - // if ((c & 0x07) == 0) - // [66] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@11 -- vbuaa_neq_0_then_la1 - cmp #0 - bne b11 - // [67] phi from makecharset::@4 to makecharset::@10 [phi:makecharset::@4->makecharset::@10] - // makecharset::@10 - // print_char('.') - // [68] call print_char - jsr print_char - // [69] phi from makecharset::@10 makecharset::@4 to makecharset::@11 [phi:makecharset::@10/makecharset::@4->makecharset::@11] - // [69] phi (byte*) print_char_cursor#29 = (byte*) print_char_cursor#1 [phi:makecharset::@10/makecharset::@4->makecharset::@11#0] -- register_copy - // makecharset::@11 - b11: - // for (unsigned int c = 0; c < 0x100; ++c) - // [70] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 - inc c - bne !+ - inc c+1 - !: - // [58] phi from makecharset::@11 to makecharset::@1 [phi:makecharset::@11->makecharset::@1] - // [58] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#29 [phi:makecharset::@11->makecharset::@1#0] -- register_copy - // [58] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@11->makecharset::@1#1] -- register_copy - jmp b1 - // [71] phi from makecharset::@3 to makecharset::@5 [phi:makecharset::@3->makecharset::@5] b4: - // [71] phi (byte) makecharset::b#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#0] -- vbuyy=vbuc1 + // [62] phi from makecharset::@4 to makecharset::@7 [phi:makecharset::@4->makecharset::@7] + // [62] phi (byte) makecharset::b#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#0] -- vbuyy=vbuc1 ldy #0 - // [71] phi (byte) makecharset::ii#2 = (byte) 0 [phi:makecharset::@3->makecharset::@5#1] -- vbuxx=vbuc1 + // [62] phi (byte) makecharset::ii#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#1] -- vbuxx=vbuc1 ldx #0 - // makecharset::@5 - b5: - // for (char ii = 0; ii < 8; ++ii) - // [72] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@6 -- vbuxx_lt_vbuc1_then_la1 - cpx #8 - bcc b6 + // [62] phi from makecharset::@6 to makecharset::@7 [phi:makecharset::@6->makecharset::@7] + // [62] phi (byte) makecharset::b#10 = (byte) makecharset::b#2 [phi:makecharset::@6->makecharset::@7#0] -- register_copy + // [62] phi (byte) makecharset::ii#10 = (byte) makecharset::ii#1 [phi:makecharset::@6->makecharset::@7#1] -- register_copy // makecharset::@7 + b7: + // sid_rnd() + // [63] call sid_rnd + jsr sid_rnd + // [64] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + // makecharset::@14 + // [65] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 + // sid_rnd() & 0xFF + // [66] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 + and #$ff + sta _7 + // if ((sid_rnd() & 0xFF) > s) + // [67] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@9 -- vbuz1_le_vbuz2_then_la1 + lda s + cmp _7 + bcs b9 + // makecharset::@10 + // b |= bittab[ii] + // [68] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx + tya + ora bittab,x + tay + // [69] phi from makecharset::@10 makecharset::@14 to makecharset::@9 [phi:makecharset::@10/makecharset::@14->makecharset::@9] + // [69] phi (byte) makecharset::b#2 = (byte) makecharset::b#1 [phi:makecharset::@10/makecharset::@14->makecharset::@9#0] -- register_copy + // makecharset::@9 + b9: + // for (char ii = 0; ii < 8; ++ii) + // [70] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#10 -- vbuxx=_inc_vbuxx + inx + // makecharset::@6 + // [71] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@7 -- vbuxx_lt_vbuc1_then_la1 + cpx #8 + bcc b7 + // makecharset::@8 // c*8 - // [73] (word~) makecharset::$10 ← (word) makecharset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [72] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda c asl sta _10 @@ -5072,7 +5225,7 @@ makecharset: { asl _10 rol _10+1 // (c*8) + i - // [74] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#2 -- vwuz1=vwuz1_plus_vbuz2 + // [73] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 -- vwuz1=vwuz1_plus_vbuz2 lda i clc adc _11 @@ -5081,7 +5234,7 @@ makecharset: { inc _11+1 !: // charset[(c*8) + i] = b - // [75] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz1 + // [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz1 clc lda _16 adc #CHARSET sta _16+1 - // [76] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy + // [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy tya ldy #0 sta (_16),y // for ( char i = 0; i < 8; ++i) - // [77] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2 -- vbuz1=_inc_vbuz1 + // [76] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 -- vbuz1=_inc_vbuz1 inc i - // [63] phi from makecharset::@7 to makecharset::@3 [phi:makecharset::@7->makecharset::@3] - // [63] phi (byte) makecharset::i#2 = (byte) makecharset::i#1 [phi:makecharset::@7->makecharset::@3#0] -- register_copy - jmp b3 - // [78] phi from makecharset::@5 to makecharset::@6 [phi:makecharset::@5->makecharset::@6] - // makecharset::@6 - b6: - // sid_rnd() - // [79] call sid_rnd - jsr sid_rnd - // [80] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - // makecharset::@13 - // [81] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 - // sid_rnd() & 0xFF - // [82] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 - and #$ff - sta _7 - // if ((sid_rnd() & 0xFF) > s) - // [83] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@8 -- vbuz1_le_vbuz2_then_la1 - lda s - cmp _7 - bcs b8 - // makecharset::@9 - // b |= bittab[ii] - // [84] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx - tya - ora bittab,x - tay - // [85] phi from makecharset::@13 makecharset::@9 to makecharset::@8 [phi:makecharset::@13/makecharset::@9->makecharset::@8] - // [85] phi (byte) makecharset::b#6 = (byte) makecharset::b#2 [phi:makecharset::@13/makecharset::@9->makecharset::@8#0] -- register_copy - // makecharset::@8 - b8: - // for (char ii = 0; ii < 8; ++ii) - // [86] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuxx=_inc_vbuxx - inx - // [71] phi from makecharset::@8 to makecharset::@5 [phi:makecharset::@8->makecharset::@5] - // [71] phi (byte) makecharset::b#2 = (byte) makecharset::b#6 [phi:makecharset::@8->makecharset::@5#0] -- register_copy - // [71] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@8->makecharset::@5#1] -- register_copy - jmp b5 - bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 -} - // sid_rnd -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -sid_rnd: { - // return *SID_VOICE3_OSC; - // [87] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC - // sid_rnd::@return + // makecharset::@3 + // [77] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@4 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #8 + bcc b4 + // makecharset::@5 + // c & 0x07 + // [78] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 + lda c + and #7 + // if ((c & 0x07) == 0) + // [79] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@12 -- vbuaa_neq_0_then_la1 + cmp #0 + bne b12 + // [80] phi from makecharset::@5 to makecharset::@11 [phi:makecharset::@5->makecharset::@11] + // makecharset::@11 + // print_char('.') + // [81] call print_char + jsr print_char + // [82] phi from makecharset::@11 makecharset::@5 to makecharset::@12 [phi:makecharset::@11/makecharset::@5->makecharset::@12] + // [82] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#1 [phi:makecharset::@11/makecharset::@5->makecharset::@12#0] -- register_copy + // makecharset::@12 + b12: + // for (unsigned int c = 0; c < 0x100; ++c) + // [83] (word) makecharset::c#1 ← ++ (word) makecharset::c#16 -- vwuz1=_inc_vwuz1 + inc c + bne !+ + inc c+1 + !: + // makecharset::@1 + // [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 + lda c+1 + cmp #>$100 + bcc b2 + bne !+ + lda c + cmp #<$100 + bcc b2 + !: + // makecharset::@return // } - // [88] return + // [85] return rts + bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // print_char // Print a single char print_char: { .const ch = '.' // *(print_char_cursor++) = ch - // [89] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 + // [86] *((byte*) print_char_cursor#56) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (print_char_cursor),y // *(print_char_cursor++) = ch; - // [90] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 + // [87] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#56 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 !: // print_char::@return // } - // [91] return + // [88] return + rts +} + // sid_rnd +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + // return *SID_VOICE3_OSC; + // [89] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 + lda SID_VOICE3_OSC + // sid_rnd::@return + // } + // [90] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) - // [93] call memset - // [95] phi from print_cls to memset [phi:print_cls->memset] + // [92] call memset + // [94] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } - // [94] return + // [93] return rts } // memset @@ -5188,16 +5346,29 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = $c - // [96] phi from memset to memset::@1 [phi:memset->memset::@1] - // [96] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [95] phi from memset to memset::@2 [phi:memset->memset::@2] + // [95] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [95] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [95] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [96] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [97] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [97] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [98] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -5206,41 +5377,25 @@ memset: { bne b2 // memset::@return // } - // [98] return + // [99] return rts - // memset::@2 - b2: - // *dst = c - // [99] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [100] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [96] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [96] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { // *SID_VOICE3_FREQ = $ffff - // [101] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [100] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff sta SID_VOICE3_FREQ lda #>$ffff sta SID_VOICE3_FREQ+1 // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE - // [102] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [101] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL // sid_rnd_init::@return // } - // [103] return + // [102] return rts } // File Data diff --git a/src/test/ref/examples/plasma/plasma.sym b/src/test/ref/examples/plasma/plasma.sym index 2ab7945e2..9e5f9320b 100644 --- a/src/test/ref/examples/plasma/plasma.sym +++ b/src/test/ref/examples/plasma/plasma.sym @@ -44,9 +44,9 @@ (byte) c1B#14 c1B zp ZP_BYTE:14 11.0 (byte) c1B#4 c1B zp ZP_BYTE:14 0.8571428571428571 (byte) c2A -(byte) c2A#14 c2A zp ZP_BYTE:17 11.0 -(byte) c2A#24 c2A zp ZP_BYTE:17 1.2380952380952381 -(byte) c2A#4 c2A zp ZP_BYTE:17 1.3333333333333335 +(byte) c2A#14 c2A zp ZP_BYTE:15 11.0 +(byte) c2A#24 c2A zp ZP_BYTE:15 1.2380952380952381 +(byte) c2A#4 c2A zp ZP_BYTE:15 1.3333333333333335 (byte) c2B (byte) c2B#14 c2B zp ZP_BYTE:2 11.0 (byte) c2B#24 c2B zp ZP_BYTE:2 1.1818181818181817 @@ -57,6 +57,7 @@ (byte~) doplasma::$6 reg byte a 2002.0 (label) doplasma::@1 (label) doplasma::@10 +(label) doplasma::@11 (label) doplasma::@2 (label) doplasma::@3 (label) doplasma::@4 @@ -68,36 +69,36 @@ (label) doplasma::@return (byte) doplasma::c1a (byte) doplasma::c1a#0 c1a zp ZP_BYTE:4 2.0 -(byte) doplasma::c1a#1 c1a zp ZP_BYTE:4 67.33333333333333 -(byte) doplasma::c1a#2 c1a zp ZP_BYTE:4 76.25 +(byte) doplasma::c1a#1 c1a zp ZP_BYTE:4 50.5 +(byte) doplasma::c1a#4 c1a zp ZP_BYTE:4 101.66666666666666 (byte) doplasma::c1b (byte) doplasma::c1b#0 c1b zp ZP_BYTE:5 4.0 -(byte) doplasma::c1b#1 c1b zp ZP_BYTE:5 101.0 -(byte) doplasma::c1b#2 c1b zp ZP_BYTE:5 61.0 +(byte) doplasma::c1b#1 c1b zp ZP_BYTE:5 67.33333333333333 +(byte) doplasma::c1b#4 c1b zp ZP_BYTE:5 76.25 (byte) doplasma::c2a (byte) doplasma::c2a#0 c2a zp ZP_BYTE:7 2.0 -(byte) doplasma::c2a#1 c2a zp ZP_BYTE:7 67.33333333333333 -(byte) doplasma::c2a#2 c2a zp ZP_BYTE:7 76.25 +(byte) doplasma::c2a#1 c2a zp ZP_BYTE:7 50.5 +(byte) doplasma::c2a#4 c2a zp ZP_BYTE:7 101.66666666666666 (byte) doplasma::c2b (byte) doplasma::c2b#0 c2b zp ZP_BYTE:8 4.0 -(byte) doplasma::c2b#1 c2b zp ZP_BYTE:8 101.0 -(byte) doplasma::c2b#2 c2b zp ZP_BYTE:8 61.0 +(byte) doplasma::c2b#1 c2b zp ZP_BYTE:8 67.33333333333333 +(byte) doplasma::c2b#4 c2b zp ZP_BYTE:8 76.25 (byte) doplasma::i -(byte) doplasma::i#1 i zp ZP_BYTE:3 202.0 -(byte) doplasma::i#2 i zp ZP_BYTE:3 67.33333333333333 +(byte) doplasma::i#1 i zp ZP_BYTE:3 151.5 +(byte) doplasma::i#4 i zp ZP_BYTE:3 60.599999999999994 (byte) doplasma::i1 -(byte) doplasma::i1#1 i1 zp ZP_BYTE:6 202.0 -(byte) doplasma::i1#2 i1 zp ZP_BYTE:6 67.33333333333333 +(byte) doplasma::i1#1 i1 zp ZP_BYTE:6 151.5 +(byte) doplasma::i1#4 i1 zp ZP_BYTE:6 60.599999999999994 (byte) doplasma::i2 -(byte) doplasma::i2#1 reg byte y 2002.0 -(byte) doplasma::i2#2 reg byte y 1251.25 +(byte) doplasma::i2#1 reg byte y 1501.5 +(byte) doplasma::i2#4 reg byte y 1334.6666666666667 (byte) doplasma::ii -(byte) doplasma::ii#1 reg byte x 202.0 -(byte) doplasma::ii#2 reg byte x 163.0 +(byte) doplasma::ii#1 reg byte x 151.5 +(byte) doplasma::ii#10 reg byte x 171.85714285714283 (byte*) doplasma::screen (byte*) doplasma::screen#13 screen zp ZP_WORD:9 0.08695652173913043 -(byte*) doplasma::screen#2 screen zp ZP_WORD:9 101.0 -(byte*) doplasma::screen#6 screen zp ZP_WORD:9 172.14285714285714 +(byte*) doplasma::screen#18 screen zp ZP_WORD:9 200.83333333333334 +(byte*) doplasma::screen#2 screen zp ZP_WORD:9 67.33333333333333 (byte[$28]) doplasma::xbuf (const byte[$28]) doplasma::xbuf#0 xbuf = { fill( $28, 0) } (byte[$19]) doplasma::ybuf @@ -141,18 +142,19 @@ (const byte) main::toD0182_return#0 toD0182_return = >(word)(const byte*) SCREEN2#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f (byte*) main::toD0182_screen (void()) makecharset((byte*) makecharset::charset) -(word~) makecharset::$10 $10 zp ZP_WORD:15 202.0 -(word~) makecharset::$11 $11 zp ZP_WORD:15 202.0 +(word~) makecharset::$10 $10 zp ZP_WORD:16 202.0 +(word~) makecharset::$11 $11 zp ZP_WORD:16 202.0 (byte~) makecharset::$12 reg byte a 22.0 -(byte*~) makecharset::$16 $16 zp ZP_WORD:15 202.0 +(byte*~) makecharset::$16 $16 zp ZP_WORD:16 202.0 (byte~) makecharset::$3 reg byte a 22.0 (byte~) makecharset::$6 reg byte a 2002.0 -(byte~) makecharset::$7 $7 zp ZP_BYTE:17 2002.0 +(byte~) makecharset::$7 $7 zp ZP_BYTE:15 2002.0 (label) makecharset::@1 (label) makecharset::@10 (label) makecharset::@11 (label) makecharset::@12 (label) makecharset::@13 +(label) makecharset::@14 (label) makecharset::@2 (label) makecharset::@3 (label) makecharset::@4 @@ -164,22 +166,22 @@ (label) makecharset::@return (byte) makecharset::b (byte) makecharset::b#1 reg byte y 2002.0 -(byte) makecharset::b#2 reg byte y 282.1818181818182 -(byte) makecharset::b#6 reg byte y 1501.5 +(byte) makecharset::b#10 reg byte y 500.5 +(byte) makecharset::b#2 reg byte y 517.3333333333334 (byte[8]) makecharset::bittab (const byte[8]) makecharset::bittab#0 bittab = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (word) makecharset::c -(word) makecharset::c#1 c zp ZP_WORD:12 22.0 -(word) makecharset::c#2 c zp ZP_WORD:12 5.777777777777778 +(word) makecharset::c#1 c zp ZP_WORD:12 16.5 +(word) makecharset::c#16 c zp ZP_WORD:12 5.800000000000001 (byte*) makecharset::charset (byte) makecharset::i -(byte) makecharset::i#1 i zp ZP_BYTE:11 202.0 -(byte) makecharset::i#2 i zp ZP_BYTE:11 23.764705882352942 +(byte) makecharset::i#1 i zp ZP_BYTE:11 151.5 +(byte) makecharset::i#13 i zp ZP_BYTE:11 20.2 (byte) makecharset::ii -(byte) makecharset::ii#1 reg byte x 2002.0 -(byte) makecharset::ii#2 reg byte x 400.4 +(byte) makecharset::ii#1 reg byte x 1501.5 +(byte) makecharset::ii#10 reg byte x 375.375 (byte) makecharset::s -(byte) makecharset::s#0 s zp ZP_BYTE:14 53.26315789473684 +(byte) makecharset::s#0 s zp ZP_BYTE:14 56.22222222222223 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -187,8 +189,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:12 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:12 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:12 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:12 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -202,8 +204,8 @@ (const byte) print_char::ch#0 ch = (byte) '.' (byte*) print_char_cursor (byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:9 4.333333333333333 -(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:9 1.0 -(byte*) print_char_cursor#29 print_char_cursor zp ZP_WORD:9 16.5 +(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:9 11.0 +(byte*) print_char_cursor#56 print_char_cursor zp ZP_WORD:9 1.0833333333333333 (void()) print_cls() (label) print_cls::@return (byte*) print_line_cursor @@ -218,27 +220,27 @@ (label) sid_rnd_init::@return zp ZP_BYTE:2 [ c2B#24 c2B#14 c2B#4 ] -zp ZP_BYTE:3 [ doplasma::i#2 doplasma::i#1 ] -zp ZP_BYTE:4 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] -zp ZP_BYTE:5 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] -zp ZP_BYTE:6 [ doplasma::i1#2 doplasma::i1#1 ] -zp ZP_BYTE:7 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] -zp ZP_BYTE:8 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] -reg byte x [ doplasma::ii#2 doplasma::ii#1 ] -reg byte y [ doplasma::i2#2 doplasma::i2#1 ] -zp ZP_WORD:9 [ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 doplasma::screen#6 doplasma::screen#2 doplasma::screen#13 main::col#2 main::col#1 ] -zp ZP_BYTE:11 [ makecharset::i#2 makecharset::i#1 c1A#10 c1A#14 c1A#4 ] -reg byte x [ makecharset::ii#2 makecharset::ii#1 ] -reg byte y [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] -zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 makecharset::c#2 makecharset::c#1 ] -reg byte a [ doplasma::$6 ] -reg byte a [ doplasma::$3 ] +zp ZP_BYTE:3 [ doplasma::i#4 doplasma::i#1 ] +zp ZP_BYTE:4 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] +zp ZP_BYTE:5 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] +zp ZP_BYTE:6 [ doplasma::i1#4 doplasma::i1#1 ] +zp ZP_BYTE:7 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] +zp ZP_BYTE:8 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] +reg byte x [ doplasma::ii#10 doplasma::ii#1 ] +reg byte y [ doplasma::i2#4 doplasma::i2#1 ] +zp ZP_WORD:9 [ print_char_cursor#56 print_char_cursor#18 print_char_cursor#1 doplasma::screen#18 doplasma::screen#2 doplasma::screen#13 main::col#2 main::col#1 ] +zp ZP_BYTE:11 [ makecharset::i#13 makecharset::i#1 c1A#10 c1A#14 c1A#4 ] +reg byte x [ makecharset::ii#10 makecharset::ii#1 ] +reg byte y [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] +zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 makecharset::c#16 makecharset::c#1 ] reg byte a [ doplasma::$1 ] +reg byte a [ doplasma::$3 ] +reg byte a [ doplasma::$6 ] reg byte a [ makecharset::$3 ] zp ZP_BYTE:14 [ makecharset::s#0 c1B#10 c1B#14 c1B#4 ] -reg byte a [ makecharset::$12 ] -zp ZP_WORD:15 [ makecharset::$10 makecharset::$11 makecharset::$16 ] reg byte a [ sid_rnd::return#2 ] reg byte a [ makecharset::$6 ] -zp ZP_BYTE:17 [ makecharset::$7 c2A#24 c2A#14 c2A#4 ] +zp ZP_BYTE:15 [ makecharset::$7 c2A#24 c2A#14 c2A#4 ] +zp ZP_WORD:16 [ makecharset::$10 makecharset::$11 makecharset::$16 ] +reg byte a [ makecharset::$12 ] reg byte a [ sid_rnd::return#0 ] diff --git a/src/test/ref/examples/scroll/scroll.asm b/src/test/ref/examples/scroll/scroll.asm index 361e2e258..eae4763e5 100644 --- a/src/test/ref/examples/scroll/scroll.asm +++ b/src/test/ref/examples/scroll/scroll.asm @@ -28,8 +28,11 @@ main: { cpx #$ff bne b4 ldx #0 + b6: + lda line+1,x + sta line,x + inx // Hard scroll - b5: cpx #$27 bne b6 // Render next char @@ -54,11 +57,6 @@ main: { stx SCROLL dec BGCOL jmp b1 - b6: - lda line+1,x - sta line,x - inx - jmp b5 } fillscreen: { .const fill = $20 @@ -67,7 +65,14 @@ fillscreen: { sta cursor lda #>SCREEN sta cursor+1 - b1: + b2: + lda #fill + ldy #0 + sta (cursor),y + inc cursor + bne !+ + inc cursor+1 + !: lda cursor+1 cmp #>SCREEN+$3e8 bcc b2 @@ -77,14 +82,5 @@ fillscreen: { bcc b2 !: rts - b2: - lda #fill - ldy #0 - sta (cursor),y - inc cursor - bne !+ - inc cursor+1 - !: - jmp b1 } TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @" diff --git a/src/test/ref/examples/scroll/scroll.cfg b/src/test/ref/examples/scroll/scroll.cfg index 4b02e938f..b6e15262a 100644 --- a/src/test/ref/examples/scroll/scroll.cfg +++ b/src/test/ref/examples/scroll/scroll.cfg @@ -23,45 +23,45 @@ main::@3: scope:[main] from main::@2 [9] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) [10] (byte) main::scroll#1 ← -- (byte) main::scroll#7 [11] if((byte) main::scroll#1!=(byte) $ff) goto main::@4 + to:main::@6 +main::@6: scope:[main] from main::@3 main::@5 + [12] (byte) main::i#4 ← phi( main::@5/(byte) main::i#1 main::@3/(byte) 0 ) + [13] *((const byte[]) main::line#0 + (byte) main::i#4) ← *((const byte[]) main::line#0+(byte) 1 + (byte) main::i#4) + [14] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@5 -main::@5: scope:[main] from main::@3 main::@6 - [12] (byte) main::i#2 ← phi( main::@3/(byte) 0 main::@6/(byte) main::i#1 ) - [13] if((byte) main::i#2!=(byte) $27) goto main::@6 +main::@5: scope:[main] from main::@6 + [15] if((byte) main::i#1!=(byte) $27) goto main::@6 to:main::@7 main::@7: scope:[main] from main::@5 - [14] (byte) main::c#0 ← *((byte*) main::nxt#10) - [15] if((byte) main::c#0!=(byte) '@') goto main::@9 + [16] (byte) main::c#0 ← *((byte*) main::nxt#10) + [17] if((byte) main::c#0!=(byte) '@') goto main::@9 to:main::@8 main::@8: scope:[main] from main::@7 - [16] (byte) main::c#1 ← *((const byte*) TEXT#0) + [18] (byte) main::c#1 ← *((const byte*) TEXT#0) to:main::@9 main::@9: scope:[main] from main::@7 main::@8 - [17] (byte*) main::nxt#4 ← phi( main::@7/(byte*) main::nxt#10 main::@8/(const byte*) TEXT#0 ) - [17] (byte) main::c#2 ← phi( main::@7/(byte) main::c#0 main::@8/(byte) main::c#1 ) - [18] *((const byte[]) main::line#0+(byte) $27) ← (byte) main::c#2 - [19] (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 + [19] (byte*) main::nxt#4 ← phi( main::@7/(byte*) main::nxt#10 main::@8/(const byte*) TEXT#0 ) + [19] (byte) main::c#2 ← phi( main::@7/(byte) main::c#0 main::@8/(byte) main::c#1 ) + [20] *((const byte[]) main::line#0+(byte) $27) ← (byte) main::c#2 + [21] (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@4: scope:[main] from main::@3 main::@9 - [20] (byte*) main::nxt#11 ← phi( main::@9/(byte*) main::nxt#1 main::@3/(byte*) main::nxt#10 ) - [20] (byte) main::scroll#4 ← phi( main::@9/(byte) 7 main::@3/(byte) main::scroll#1 ) - [21] *((const byte*) SCROLL#0) ← (byte) main::scroll#4 - [22] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) + [22] (byte*) main::nxt#11 ← phi( main::@9/(byte*) main::nxt#1 main::@3/(byte*) main::nxt#10 ) + [22] (byte) main::scroll#4 ← phi( main::@9/(byte) 7 main::@3/(byte) main::scroll#1 ) + [23] *((const byte*) SCROLL#0) ← (byte) main::scroll#4 + [24] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) to:main::@1 -main::@6: scope:[main] from main::@5 - [23] *((const byte[]) main::line#0 + (byte) main::i#2) ← *((const byte[]) main::line#0+(byte) 1 + (byte) main::i#2) - [24] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@5 fillscreen: scope:[fillscreen] from main [25] phi() + to:fillscreen::@2 +fillscreen::@2: scope:[fillscreen] from fillscreen fillscreen::@1 + [26] (byte*) fillscreen::cursor#4 ← phi( fillscreen::@1/(byte*) fillscreen::cursor#1 fillscreen/(const byte*) SCREEN#0 ) + [27] *((byte*) fillscreen::cursor#4) ← (const byte) fillscreen::fill#0 + [28] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#4 to:fillscreen::@1 -fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@2 - [26] (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) SCREEN#0 fillscreen::@2/(byte*) fillscreen::cursor#1 ) - [27] if((byte*) fillscreen::cursor#2<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 +fillscreen::@1: scope:[fillscreen] from fillscreen::@2 + [29] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 to:fillscreen::@return fillscreen::@return: scope:[fillscreen] from fillscreen::@1 - [28] return + [30] return to:@return -fillscreen::@2: scope:[fillscreen] from fillscreen::@1 - [29] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 - [30] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 - to:fillscreen::@1 diff --git a/src/test/ref/examples/scroll/scroll.log b/src/test/ref/examples/scroll/scroll.log index 98614f47e..35f2ff7ae 100644 --- a/src/test/ref/examples/scroll/scroll.log +++ b/src/test/ref/examples/scroll/scroll.log @@ -336,12 +336,26 @@ if() condition always true - replacing block destination [27] if(true) goto main Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [1] (byte[]) main::line#0 ← (const byte*) SCREEN#0 + (byte) $28 -Constant right-side identified [23] (byte*~) fillscreen::$0 ← (const byte*) fillscreen::screen#0 + (word) $3e8 +Constant right-side identified [25] (byte*~) fillscreen::$0 ← (const byte*) fillscreen::screen#0 + (word) $3e8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte[]) main::line#0 = SCREEN#0+$28 Constant (const byte*) fillscreen::$0 = fillscreen::screen#0+$3e8 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [32] if((const byte) main::i#0!=(byte) $27) goto main::@9 +Successful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) fillscreen::cursor#1 = (byte*) fillscreen::cursor#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) fillscreen::cursor#5 (const byte*) fillscreen::screen#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [30] if((const byte*) fillscreen::screen#0<(const byte*) fillscreen::$0) goto fillscreen::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::scroll#0 Inlining constant with var siblings (const byte) main::scroll#2 Inlining constant with var siblings (const byte) main::i#0 @@ -359,11 +373,13 @@ Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in assignment *(main::line#0+1 + main::$7) Consolidated array index constant in *(main::line#0+$27) Successful SSA optimization Pass2ConstantAdditionElimination -Alias (byte) main::i#2 = (byte~) main::$7 +Alias (byte) main::i#4 = (byte~) main::$7 Successful SSA optimization Pass2AliasElimination Added new block during phi lifting main::@18(between main::@2 and main::@2) Added new block during phi lifting main::@19(between main::@5 and main::@7) -Added new block during phi lifting main::@20(between main::@10 and main::@15) +Added new block during phi lifting main::@20(between main::@8 and main::@9) +Added new block during phi lifting main::@21(between main::@10 and main::@15) +Added new block during phi lifting fillscreen::@7(between fillscreen::@1 and fillscreen::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @3 @@ -371,31 +387,37 @@ Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@17 Adding NOP phi() at start of main::@6 +Adding NOP phi() at start of main::@8_1 Adding NOP phi() at start of fillscreen +Adding NOP phi() at start of fillscreen::@1_1 CALL GRAPH Calls in [] to main:2 Calls in [main] to fillscreen:6 Created 8 initial phi equivalence classes -Coalesced [20] main::c#4 ← main::c#1 -Coalesced [24] main::nxt#14 ← main::nxt#1 -Coalesced [28] main::scroll#13 ← main::scroll#4 -Coalesced [29] main::nxt#13 ← main::nxt#11 -Coalesced [30] main::c#3 ← main::c#0 -Coalesced [31] main::nxt#16 ← main::nxt#10 -Coalesced [34] main::i#4 ← main::i#1 -Coalesced [35] main::scroll#14 ← main::scroll#1 -Coalesced (already) [36] main::nxt#15 ← main::nxt#10 -Coalesced (already) [37] main::scroll#12 ← main::scroll#7 -Coalesced (already) [38] main::nxt#12 ← main::nxt#10 -Coalesced [45] fillscreen::cursor#4 ← fillscreen::cursor#1 +Coalesced [23] main::c#4 ← main::c#1 +Coalesced [27] main::nxt#14 ← main::nxt#1 +Coalesced [31] main::scroll#13 ← main::scroll#4 +Coalesced [32] main::nxt#13 ← main::nxt#11 +Coalesced [33] main::c#3 ← main::c#0 +Coalesced [34] main::nxt#16 ← main::nxt#10 +Coalesced [35] main::i#6 ← main::i#1 +Coalesced [36] main::scroll#14 ← main::scroll#1 +Coalesced (already) [37] main::nxt#15 ← main::nxt#10 +Coalesced (already) [38] main::scroll#12 ← main::scroll#7 +Coalesced (already) [39] main::nxt#12 ← main::nxt#10 +Coalesced [47] fillscreen::cursor#6 ← fillscreen::cursor#1 Coalesced down to 5 phi equivalence classes Culled Empty Block (label) @3 Culled Empty Block (label) main::@17 Culled Empty Block (label) main::@6 +Culled Empty Block (label) main::@8_1 +Culled Empty Block (label) main::@21 Culled Empty Block (label) main::@20 Culled Empty Block (label) main::@19 Culled Empty Block (label) main::@18 +Culled Empty Block (label) fillscreen::@1_1 +Culled Empty Block (label) fillscreen::@7 Renumbering block @2 to @1 Renumbering block main::@2 to main::@1 Renumbering block main::@4 to main::@2 @@ -438,48 +460,48 @@ main::@3: scope:[main] from main::@2 [9] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) [10] (byte) main::scroll#1 ← -- (byte) main::scroll#7 [11] if((byte) main::scroll#1!=(byte) $ff) goto main::@4 + to:main::@6 +main::@6: scope:[main] from main::@3 main::@5 + [12] (byte) main::i#4 ← phi( main::@5/(byte) main::i#1 main::@3/(byte) 0 ) + [13] *((const byte[]) main::line#0 + (byte) main::i#4) ← *((const byte[]) main::line#0+(byte) 1 + (byte) main::i#4) + [14] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@5 -main::@5: scope:[main] from main::@3 main::@6 - [12] (byte) main::i#2 ← phi( main::@3/(byte) 0 main::@6/(byte) main::i#1 ) - [13] if((byte) main::i#2!=(byte) $27) goto main::@6 +main::@5: scope:[main] from main::@6 + [15] if((byte) main::i#1!=(byte) $27) goto main::@6 to:main::@7 main::@7: scope:[main] from main::@5 - [14] (byte) main::c#0 ← *((byte*) main::nxt#10) - [15] if((byte) main::c#0!=(byte) '@') goto main::@9 + [16] (byte) main::c#0 ← *((byte*) main::nxt#10) + [17] if((byte) main::c#0!=(byte) '@') goto main::@9 to:main::@8 main::@8: scope:[main] from main::@7 - [16] (byte) main::c#1 ← *((const byte*) TEXT#0) + [18] (byte) main::c#1 ← *((const byte*) TEXT#0) to:main::@9 main::@9: scope:[main] from main::@7 main::@8 - [17] (byte*) main::nxt#4 ← phi( main::@7/(byte*) main::nxt#10 main::@8/(const byte*) TEXT#0 ) - [17] (byte) main::c#2 ← phi( main::@7/(byte) main::c#0 main::@8/(byte) main::c#1 ) - [18] *((const byte[]) main::line#0+(byte) $27) ← (byte) main::c#2 - [19] (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 + [19] (byte*) main::nxt#4 ← phi( main::@7/(byte*) main::nxt#10 main::@8/(const byte*) TEXT#0 ) + [19] (byte) main::c#2 ← phi( main::@7/(byte) main::c#0 main::@8/(byte) main::c#1 ) + [20] *((const byte[]) main::line#0+(byte) $27) ← (byte) main::c#2 + [21] (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@4: scope:[main] from main::@3 main::@9 - [20] (byte*) main::nxt#11 ← phi( main::@9/(byte*) main::nxt#1 main::@3/(byte*) main::nxt#10 ) - [20] (byte) main::scroll#4 ← phi( main::@9/(byte) 7 main::@3/(byte) main::scroll#1 ) - [21] *((const byte*) SCROLL#0) ← (byte) main::scroll#4 - [22] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) + [22] (byte*) main::nxt#11 ← phi( main::@9/(byte*) main::nxt#1 main::@3/(byte*) main::nxt#10 ) + [22] (byte) main::scroll#4 ← phi( main::@9/(byte) 7 main::@3/(byte) main::scroll#1 ) + [23] *((const byte*) SCROLL#0) ← (byte) main::scroll#4 + [24] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) to:main::@1 -main::@6: scope:[main] from main::@5 - [23] *((const byte[]) main::line#0 + (byte) main::i#2) ← *((const byte[]) main::line#0+(byte) 1 + (byte) main::i#2) - [24] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@5 fillscreen: scope:[fillscreen] from main [25] phi() + to:fillscreen::@2 +fillscreen::@2: scope:[fillscreen] from fillscreen fillscreen::@1 + [26] (byte*) fillscreen::cursor#4 ← phi( fillscreen::@1/(byte*) fillscreen::cursor#1 fillscreen/(const byte*) SCREEN#0 ) + [27] *((byte*) fillscreen::cursor#4) ← (const byte) fillscreen::fill#0 + [28] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#4 to:fillscreen::@1 -fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@2 - [26] (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) SCREEN#0 fillscreen::@2/(byte*) fillscreen::cursor#1 ) - [27] if((byte*) fillscreen::cursor#2<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 +fillscreen::@1: scope:[fillscreen] from fillscreen::@2 + [29] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 to:fillscreen::@return fillscreen::@return: scope:[fillscreen] from fillscreen::@1 - [28] return + [30] return to:@return -fillscreen::@2: scope:[fillscreen] from fillscreen::@1 - [29] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 - [30] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 - to:fillscreen::@1 VARIABLE REGISTER WEIGHTS @@ -490,8 +512,8 @@ VARIABLE REGISTER WEIGHTS (byte*) TEXT (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (byte*) fillscreen::cursor -(byte*) fillscreen::cursor#1 22.0 -(byte*) fillscreen::cursor#2 14.666666666666666 +(byte*) fillscreen::cursor#1 16.5 +(byte*) fillscreen::cursor#4 16.5 (byte) fillscreen::fill (byte*) fillscreen::screen (void()) main() @@ -500,8 +522,8 @@ VARIABLE REGISTER WEIGHTS (byte) main::c#1 22.0 (byte) main::c#2 33.0 (byte) main::i -(byte) main::i#1 202.0 -(byte) main::i#2 168.33333333333331 +(byte) main::i#1 151.5 +(byte) main::i#4 202.0 (byte[]) main::line (byte*) main::nxt (byte*) main::nxt#1 22.0 @@ -515,21 +537,21 @@ VARIABLE REGISTER WEIGHTS Initial phi equivalence classes [ main::scroll#7 main::scroll#4 main::scroll#1 ] -[ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] [ main::c#2 main::c#0 main::c#1 ] [ main::nxt#4 main::nxt#10 main::nxt#11 main::nxt#1 ] -[ fillscreen::cursor#2 fillscreen::cursor#1 ] +[ fillscreen::cursor#4 fillscreen::cursor#1 ] Complete equivalence classes [ main::scroll#7 main::scroll#4 main::scroll#1 ] -[ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] [ main::c#2 main::c#0 main::c#1 ] [ main::nxt#4 main::nxt#10 main::nxt#11 main::nxt#1 ] -[ fillscreen::cursor#2 fillscreen::cursor#1 ] +[ fillscreen::cursor#4 fillscreen::cursor#1 ] Allocated zp ZP_BYTE:2 [ main::scroll#7 main::scroll#4 main::scroll#1 ] -Allocated zp ZP_BYTE:3 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::i#4 main::i#1 ] Allocated zp ZP_BYTE:4 [ main::c#2 main::c#0 main::c#1 ] Allocated zp ZP_WORD:5 [ main::nxt#4 main::nxt#10 main::nxt#11 main::nxt#1 ] -Allocated zp ZP_WORD:7 [ fillscreen::cursor#2 fillscreen::cursor#1 ] +Allocated zp ZP_WORD:7 [ fillscreen::cursor#4 fillscreen::cursor#1 ] INITIAL ASM Target platform is c64basic @@ -612,137 +634,139 @@ main: { lda #$ff cmp scroll bne b4_from_b3 - // [12] phi from main::@3 to main::@5 [phi:main::@3->main::@5] - b5_from_b3: - // [12] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 + // [12] phi from main::@3 to main::@6 [phi:main::@3->main::@6] + b6_from_b3: + // [12] phi (byte) main::i#4 = (byte) 0 [phi:main::@3->main::@6#0] -- vbuz1=vbuc1 lda #0 sta i + jmp b6 + // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + b6_from_b5: + // [12] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@5->main::@6#0] -- register_copy + jmp b6 + // main::@6 + b6: + // [13] *((const byte[]) main::line#0 + (byte) main::i#4) ← *((const byte[]) main::line#0+(byte) 1 + (byte) main::i#4) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda line+1,y + sta line,y + // [14] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 + inc i jmp b5 // Hard scroll // main::@5 b5: - // [13] if((byte) main::i#2!=(byte) $27) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 + // [15] if((byte) main::i#1!=(byte) $27) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 lda #$27 cmp i - bne b6 + bne b6_from_b5 jmp b7 // main::@7 b7: - // [14] (byte) main::c#0 ← *((byte*) main::nxt#10) -- vbuz1=_deref_pbuz2 + // [16] (byte) main::c#0 ← *((byte*) main::nxt#10) -- vbuz1=_deref_pbuz2 // Render next char ldy #0 lda (nxt),y sta c - // [15] if((byte) main::c#0!=(byte) '@') goto main::@9 -- vbuz1_neq_vbuc1_then_la1 + // [17] if((byte) main::c#0!=(byte) '@') goto main::@9 -- vbuz1_neq_vbuc1_then_la1 lda #'@' cmp c bne b9_from_b7 jmp b8 // main::@8 b8: - // [16] (byte) main::c#1 ← *((const byte*) TEXT#0) -- vbuz1=_deref_pbuc1 + // [18] (byte) main::c#1 ← *((const byte*) TEXT#0) -- vbuz1=_deref_pbuc1 lda TEXT sta c - // [17] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] b9_from_b8: - // [17] phi (byte*) main::nxt#4 = (const byte*) TEXT#0 [phi:main::@8->main::@9#0] -- pbuz1=pbuc1 + // [19] phi (byte*) main::nxt#4 = (const byte*) TEXT#0 [phi:main::@8->main::@9#0] -- pbuz1=pbuc1 lda #TEXT sta nxt+1 - // [17] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@8->main::@9#1] -- register_copy + // [19] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@8->main::@9#1] -- register_copy jmp b9 - // [17] phi from main::@7 to main::@9 [phi:main::@7->main::@9] + // [19] phi from main::@7 to main::@9 [phi:main::@7->main::@9] b9_from_b7: - // [17] phi (byte*) main::nxt#4 = (byte*) main::nxt#10 [phi:main::@7->main::@9#0] -- register_copy - // [17] phi (byte) main::c#2 = (byte) main::c#0 [phi:main::@7->main::@9#1] -- register_copy + // [19] phi (byte*) main::nxt#4 = (byte*) main::nxt#10 [phi:main::@7->main::@9#0] -- register_copy + // [19] phi (byte) main::c#2 = (byte) main::c#0 [phi:main::@7->main::@9#1] -- register_copy jmp b9 // main::@9 b9: - // [18] *((const byte[]) main::line#0+(byte) $27) ← (byte) main::c#2 -- _deref_pbuc1=vbuz1 + // [20] *((const byte[]) main::line#0+(byte) $27) ← (byte) main::c#2 -- _deref_pbuc1=vbuz1 lda c sta line+$27 - // [19] (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 -- pbuz1=_inc_pbuz1 + // [21] (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 -- pbuz1=_inc_pbuz1 inc nxt bne !+ inc nxt+1 !: - // [20] phi from main::@9 to main::@4 [phi:main::@9->main::@4] + // [22] phi from main::@9 to main::@4 [phi:main::@9->main::@4] b4_from_b9: - // [20] phi (byte*) main::nxt#11 = (byte*) main::nxt#1 [phi:main::@9->main::@4#0] -- register_copy - // [20] phi (byte) main::scroll#4 = (byte) 7 [phi:main::@9->main::@4#1] -- vbuz1=vbuc1 + // [22] phi (byte*) main::nxt#11 = (byte*) main::nxt#1 [phi:main::@9->main::@4#0] -- register_copy + // [22] phi (byte) main::scroll#4 = (byte) 7 [phi:main::@9->main::@4#1] -- vbuz1=vbuc1 lda #7 sta scroll jmp b4 - // [20] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [22] phi from main::@3 to main::@4 [phi:main::@3->main::@4] b4_from_b3: - // [20] phi (byte*) main::nxt#11 = (byte*) main::nxt#10 [phi:main::@3->main::@4#0] -- register_copy - // [20] phi (byte) main::scroll#4 = (byte) main::scroll#1 [phi:main::@3->main::@4#1] -- register_copy + // [22] phi (byte*) main::nxt#11 = (byte*) main::nxt#10 [phi:main::@3->main::@4#0] -- register_copy + // [22] phi (byte) main::scroll#4 = (byte) main::scroll#1 [phi:main::@3->main::@4#1] -- register_copy jmp b4 // main::@4 b4: - // [21] *((const byte*) SCROLL#0) ← (byte) main::scroll#4 -- _deref_pbuc1=vbuz1 + // [23] *((const byte*) SCROLL#0) ← (byte) main::scroll#4 -- _deref_pbuc1=vbuz1 lda scroll sta SCROLL - // [22] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + // [24] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BGCOL jmp b1_from_b4 - // main::@6 - b6: - // [23] *((const byte[]) main::line#0 + (byte) main::i#2) ← *((const byte[]) main::line#0+(byte) 1 + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 - ldy i - lda line+1,y - sta line,y - // [24] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [12] phi from main::@6 to main::@5 [phi:main::@6->main::@5] - b5_from_b6: - // [12] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@5#0] -- register_copy - jmp b5 } // fillscreen fillscreen: { .const fill = $20 .label cursor = 7 - // [26] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] - b1_from_fillscreen: - // [26] phi (byte*) fillscreen::cursor#2 = (const byte*) SCREEN#0 [phi:fillscreen->fillscreen::@1#0] -- pbuz1=pbuc1 + // [26] phi from fillscreen to fillscreen::@2 [phi:fillscreen->fillscreen::@2] + b2_from_fillscreen: + // [26] phi (byte*) fillscreen::cursor#4 = (const byte*) SCREEN#0 [phi:fillscreen->fillscreen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta cursor+1 - jmp b1 - // fillscreen::@1 - b1: - // [27] if((byte*) fillscreen::cursor#2<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 -- pbuz1_lt_pbuc1_then_la1 - lda cursor+1 - cmp #>SCREEN+$3e8 - bcc b2 - bne !+ - lda cursor - cmp #fillscreen::@2] + b2_from_b1: + // [26] phi (byte*) fillscreen::cursor#4 = (byte*) fillscreen::cursor#1 [phi:fillscreen::@1->fillscreen::@2#0] -- register_copy + jmp b2 // fillscreen::@2 b2: - // [29] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 -- _deref_pbuz1=vbuc1 + // [27] *((byte*) fillscreen::cursor#4) ← (const byte) fillscreen::fill#0 -- _deref_pbuz1=vbuc1 lda #fill ldy #0 sta (cursor),y - // [30] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 -- pbuz1=_inc_pbuz1 + // [28] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#4 -- pbuz1=_inc_pbuz1 inc cursor bne !+ inc cursor+1 !: - // [26] phi from fillscreen::@2 to fillscreen::@1 [phi:fillscreen::@2->fillscreen::@1] - b1_from_b2: - // [26] phi (byte*) fillscreen::cursor#2 = (byte*) fillscreen::cursor#1 [phi:fillscreen::@2->fillscreen::@1#0] -- register_copy jmp b1 + // fillscreen::@1 + b1: + // [29] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 -- pbuz1_lt_pbuc1_then_la1 + lda cursor+1 + cmp #>SCREEN+$3e8 + bcc b2_from_b1 + bne !+ + lda cursor + cmp #main::@5] - b5_from_b3: - // [12] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#0] -- vbuxx=vbuc1 + // [12] phi from main::@3 to main::@6 [phi:main::@3->main::@6] + b6_from_b3: + // [12] phi (byte) main::i#4 = (byte) 0 [phi:main::@3->main::@6#0] -- vbuxx=vbuc1 ldx #0 + jmp b6 + // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + b6_from_b5: + // [12] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@5->main::@6#0] -- register_copy + jmp b6 + // main::@6 + b6: + // [13] *((const byte[]) main::line#0 + (byte) main::i#4) ← *((const byte[]) main::line#0+(byte) 1 + (byte) main::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda line+1,x + sta line,x + // [14] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx jmp b5 // Hard scroll // main::@5 b5: - // [13] if((byte) main::i#2!=(byte) $27) goto main::@6 -- vbuxx_neq_vbuc1_then_la1 + // [15] if((byte) main::i#1!=(byte) $27) goto main::@6 -- vbuxx_neq_vbuc1_then_la1 cpx #$27 - bne b6 + bne b6_from_b5 jmp b7 // main::@7 b7: - // [14] (byte) main::c#0 ← *((byte*) main::nxt#10) -- vbuxx=_deref_pbuz1 + // [16] (byte) main::c#0 ← *((byte*) main::nxt#10) -- vbuxx=_deref_pbuz1 // Render next char ldy #0 lda (nxt),y tax - // [15] if((byte) main::c#0!=(byte) '@') goto main::@9 -- vbuxx_neq_vbuc1_then_la1 + // [17] if((byte) main::c#0!=(byte) '@') goto main::@9 -- vbuxx_neq_vbuc1_then_la1 cpx #'@' bne b9_from_b7 jmp b8 // main::@8 b8: - // [16] (byte) main::c#1 ← *((const byte*) TEXT#0) -- vbuxx=_deref_pbuc1 + // [18] (byte) main::c#1 ← *((const byte*) TEXT#0) -- vbuxx=_deref_pbuc1 ldx TEXT - // [17] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] b9_from_b8: - // [17] phi (byte*) main::nxt#4 = (const byte*) TEXT#0 [phi:main::@8->main::@9#0] -- pbuz1=pbuc1 + // [19] phi (byte*) main::nxt#4 = (const byte*) TEXT#0 [phi:main::@8->main::@9#0] -- pbuz1=pbuc1 lda #TEXT sta nxt+1 - // [17] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@8->main::@9#1] -- register_copy + // [19] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@8->main::@9#1] -- register_copy jmp b9 - // [17] phi from main::@7 to main::@9 [phi:main::@7->main::@9] + // [19] phi from main::@7 to main::@9 [phi:main::@7->main::@9] b9_from_b7: - // [17] phi (byte*) main::nxt#4 = (byte*) main::nxt#10 [phi:main::@7->main::@9#0] -- register_copy - // [17] phi (byte) main::c#2 = (byte) main::c#0 [phi:main::@7->main::@9#1] -- register_copy + // [19] phi (byte*) main::nxt#4 = (byte*) main::nxt#10 [phi:main::@7->main::@9#0] -- register_copy + // [19] phi (byte) main::c#2 = (byte) main::c#0 [phi:main::@7->main::@9#1] -- register_copy jmp b9 // main::@9 b9: - // [18] *((const byte[]) main::line#0+(byte) $27) ← (byte) main::c#2 -- _deref_pbuc1=vbuxx + // [20] *((const byte[]) main::line#0+(byte) $27) ← (byte) main::c#2 -- _deref_pbuc1=vbuxx stx line+$27 - // [19] (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 -- pbuz1=_inc_pbuz1 + // [21] (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 -- pbuz1=_inc_pbuz1 inc nxt bne !+ inc nxt+1 !: - // [20] phi from main::@9 to main::@4 [phi:main::@9->main::@4] + // [22] phi from main::@9 to main::@4 [phi:main::@9->main::@4] b4_from_b9: - // [20] phi (byte*) main::nxt#11 = (byte*) main::nxt#1 [phi:main::@9->main::@4#0] -- register_copy - // [20] phi (byte) main::scroll#4 = (byte) 7 [phi:main::@9->main::@4#1] -- vbuxx=vbuc1 + // [22] phi (byte*) main::nxt#11 = (byte*) main::nxt#1 [phi:main::@9->main::@4#0] -- register_copy + // [22] phi (byte) main::scroll#4 = (byte) 7 [phi:main::@9->main::@4#1] -- vbuxx=vbuc1 ldx #7 jmp b4 - // [20] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [22] phi from main::@3 to main::@4 [phi:main::@3->main::@4] b4_from_b3: - // [20] phi (byte*) main::nxt#11 = (byte*) main::nxt#10 [phi:main::@3->main::@4#0] -- register_copy - // [20] phi (byte) main::scroll#4 = (byte) main::scroll#1 [phi:main::@3->main::@4#1] -- register_copy + // [22] phi (byte*) main::nxt#11 = (byte*) main::nxt#10 [phi:main::@3->main::@4#0] -- register_copy + // [22] phi (byte) main::scroll#4 = (byte) main::scroll#1 [phi:main::@3->main::@4#1] -- register_copy jmp b4 // main::@4 b4: - // [21] *((const byte*) SCROLL#0) ← (byte) main::scroll#4 -- _deref_pbuc1=vbuxx + // [23] *((const byte*) SCROLL#0) ← (byte) main::scroll#4 -- _deref_pbuc1=vbuxx stx SCROLL - // [22] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + // [24] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BGCOL jmp b1_from_b4 - // main::@6 - b6: - // [23] *((const byte[]) main::line#0 + (byte) main::i#2) ← *((const byte[]) main::line#0+(byte) 1 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda line+1,x - sta line,x - // [24] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [12] phi from main::@6 to main::@5 [phi:main::@6->main::@5] - b5_from_b6: - // [12] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@5#0] -- register_copy - jmp b5 } // fillscreen fillscreen: { .const fill = $20 .label cursor = 2 - // [26] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] - b1_from_fillscreen: - // [26] phi (byte*) fillscreen::cursor#2 = (const byte*) SCREEN#0 [phi:fillscreen->fillscreen::@1#0] -- pbuz1=pbuc1 + // [26] phi from fillscreen to fillscreen::@2 [phi:fillscreen->fillscreen::@2] + b2_from_fillscreen: + // [26] phi (byte*) fillscreen::cursor#4 = (const byte*) SCREEN#0 [phi:fillscreen->fillscreen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta cursor+1 - jmp b1 - // fillscreen::@1 - b1: - // [27] if((byte*) fillscreen::cursor#2<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 -- pbuz1_lt_pbuc1_then_la1 - lda cursor+1 - cmp #>SCREEN+$3e8 - bcc b2 - bne !+ - lda cursor - cmp #fillscreen::@2] + b2_from_b1: + // [26] phi (byte*) fillscreen::cursor#4 = (byte*) fillscreen::cursor#1 [phi:fillscreen::@1->fillscreen::@2#0] -- register_copy + jmp b2 // fillscreen::@2 b2: - // [29] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 -- _deref_pbuz1=vbuc1 + // [27] *((byte*) fillscreen::cursor#4) ← (const byte) fillscreen::fill#0 -- _deref_pbuz1=vbuc1 lda #fill ldy #0 sta (cursor),y - // [30] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 -- pbuz1=_inc_pbuz1 + // [28] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#4 -- pbuz1=_inc_pbuz1 inc cursor bne !+ inc cursor+1 !: - // [26] phi from fillscreen::@2 to fillscreen::@1 [phi:fillscreen::@2->fillscreen::@1] - b1_from_b2: - // [26] phi (byte*) fillscreen::cursor#2 = (byte*) fillscreen::cursor#1 [phi:fillscreen::@2->fillscreen::@1#0] -- register_copy jmp b1 + // fillscreen::@1 + b1: + // [29] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 -- pbuz1_lt_pbuc1_then_la1 + lda cursor+1 + cmp #>SCREEN+$3e8 + bcc b2_from_b1 + bne !+ + lda cursor + cmp #main::@5] - // [12] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#0] -- vbuxx=vbuc1 + // [12] phi from main::@3 to main::@6 [phi:main::@3->main::@6] + // [12] phi (byte) main::i#4 = (byte) 0 [phi:main::@3->main::@6#0] -- vbuxx=vbuc1 ldx #0 + // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + // [12] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@5->main::@6#0] -- register_copy + // main::@6 + b6: + // line[i]=line[i+1] + // [13] *((const byte[]) main::line#0 + (byte) main::i#4) ← *((const byte[]) main::line#0+(byte) 1 + (byte) main::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda line+1,x + sta line,x + // for(byte i=0;i!=39;i++) + // [14] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx // Hard scroll // main::@5 - b5: - // for(byte i=0;i!=39;i++) - // [13] if((byte) main::i#2!=(byte) $27) goto main::@6 -- vbuxx_neq_vbuc1_then_la1 + // [15] if((byte) main::i#1!=(byte) $27) goto main::@6 -- vbuxx_neq_vbuc1_then_la1 cpx #$27 bne b6 // main::@7 // c = *nxt - // [14] (byte) main::c#0 ← *((byte*) main::nxt#10) -- vbuxx=_deref_pbuz1 + // [16] (byte) main::c#0 ← *((byte*) main::nxt#10) -- vbuxx=_deref_pbuz1 // Render next char ldy #0 lda (nxt),y tax // if(c=='@') - // [15] if((byte) main::c#0!=(byte) '@') goto main::@9 -- vbuxx_neq_vbuc1_then_la1 + // [17] if((byte) main::c#0!=(byte) '@') goto main::@9 -- vbuxx_neq_vbuc1_then_la1 cpx #'@' bne b9 // main::@8 // c = *nxt - // [16] (byte) main::c#1 ← *((const byte*) TEXT#0) -- vbuxx=_deref_pbuc1 + // [18] (byte) main::c#1 ← *((const byte*) TEXT#0) -- vbuxx=_deref_pbuc1 ldx TEXT - // [17] phi from main::@8 to main::@9 [phi:main::@8->main::@9] - // [17] phi (byte*) main::nxt#4 = (const byte*) TEXT#0 [phi:main::@8->main::@9#0] -- pbuz1=pbuc1 + // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [19] phi (byte*) main::nxt#4 = (const byte*) TEXT#0 [phi:main::@8->main::@9#0] -- pbuz1=pbuc1 lda #TEXT sta nxt+1 - // [17] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@8->main::@9#1] -- register_copy - // [17] phi from main::@7 to main::@9 [phi:main::@7->main::@9] - // [17] phi (byte*) main::nxt#4 = (byte*) main::nxt#10 [phi:main::@7->main::@9#0] -- register_copy - // [17] phi (byte) main::c#2 = (byte) main::c#0 [phi:main::@7->main::@9#1] -- register_copy + // [19] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@8->main::@9#1] -- register_copy + // [19] phi from main::@7 to main::@9 [phi:main::@7->main::@9] + // [19] phi (byte*) main::nxt#4 = (byte*) main::nxt#10 [phi:main::@7->main::@9#0] -- register_copy + // [19] phi (byte) main::c#2 = (byte) main::c#0 [phi:main::@7->main::@9#1] -- register_copy // main::@9 b9: // line[39] = c - // [18] *((const byte[]) main::line#0+(byte) $27) ← (byte) main::c#2 -- _deref_pbuc1=vbuxx + // [20] *((const byte[]) main::line#0+(byte) $27) ← (byte) main::c#2 -- _deref_pbuc1=vbuxx stx line+$27 // nxt++; - // [19] (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 -- pbuz1=_inc_pbuz1 + // [21] (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 -- pbuz1=_inc_pbuz1 inc nxt bne !+ inc nxt+1 !: - // [20] phi from main::@9 to main::@4 [phi:main::@9->main::@4] - // [20] phi (byte*) main::nxt#11 = (byte*) main::nxt#1 [phi:main::@9->main::@4#0] -- register_copy - // [20] phi (byte) main::scroll#4 = (byte) 7 [phi:main::@9->main::@4#1] -- vbuxx=vbuc1 + // [22] phi from main::@9 to main::@4 [phi:main::@9->main::@4] + // [22] phi (byte*) main::nxt#11 = (byte*) main::nxt#1 [phi:main::@9->main::@4#0] -- register_copy + // [22] phi (byte) main::scroll#4 = (byte) 7 [phi:main::@9->main::@4#1] -- vbuxx=vbuc1 ldx #7 - // [20] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - // [20] phi (byte*) main::nxt#11 = (byte*) main::nxt#10 [phi:main::@3->main::@4#0] -- register_copy - // [20] phi (byte) main::scroll#4 = (byte) main::scroll#1 [phi:main::@3->main::@4#1] -- register_copy + // [22] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [22] phi (byte*) main::nxt#11 = (byte*) main::nxt#10 [phi:main::@3->main::@4#0] -- register_copy + // [22] phi (byte) main::scroll#4 = (byte) main::scroll#1 [phi:main::@3->main::@4#1] -- register_copy // main::@4 b4: // *SCROLL = scroll - // [21] *((const byte*) SCROLL#0) ← (byte) main::scroll#4 -- _deref_pbuc1=vbuxx + // [23] *((const byte*) SCROLL#0) ← (byte) main::scroll#4 -- _deref_pbuc1=vbuxx stx SCROLL // --*BGCOL; - // [22] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + // [24] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BGCOL jmp b1 - // main::@6 - b6: - // line[i]=line[i+1] - // [23] *((const byte[]) main::line#0 + (byte) main::i#2) ← *((const byte[]) main::line#0+(byte) 1 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda line+1,x - sta line,x - // for(byte i=0;i!=39;i++) - // [24] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [12] phi from main::@6 to main::@5 [phi:main::@6->main::@5] - // [12] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@5#0] -- register_copy - jmp b5 } // fillscreen fillscreen: { .const fill = $20 .label cursor = 2 - // [26] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] - // [26] phi (byte*) fillscreen::cursor#2 = (const byte*) SCREEN#0 [phi:fillscreen->fillscreen::@1#0] -- pbuz1=pbuc1 + // [26] phi from fillscreen to fillscreen::@2 [phi:fillscreen->fillscreen::@2] + // [26] phi (byte*) fillscreen::cursor#4 = (const byte*) SCREEN#0 [phi:fillscreen->fillscreen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta cursor+1 - // fillscreen::@1 - b1: + // [26] phi from fillscreen::@1 to fillscreen::@2 [phi:fillscreen::@1->fillscreen::@2] + // [26] phi (byte*) fillscreen::cursor#4 = (byte*) fillscreen::cursor#1 [phi:fillscreen::@1->fillscreen::@2#0] -- register_copy + // fillscreen::@2 + b2: + // *cursor = fill + // [27] *((byte*) fillscreen::cursor#4) ← (const byte) fillscreen::fill#0 -- _deref_pbuz1=vbuc1 + lda #fill + ldy #0 + sta (cursor),y // for( byte* cursor = screen; cursor < screen+1000; cursor++) - // [27] if((byte*) fillscreen::cursor#2<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 -- pbuz1_lt_pbuc1_then_la1 + // [28] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#4 -- pbuz1=_inc_pbuz1 + inc cursor + bne !+ + inc cursor+1 + !: + // fillscreen::@1 + // [29] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 -- pbuz1_lt_pbuc1_then_la1 lda cursor+1 cmp #>SCREEN+$3e8 bcc b2 @@ -1254,24 +1299,8 @@ fillscreen: { !: // fillscreen::@return // } - // [28] return + // [30] return rts - // fillscreen::@2 - b2: - // *cursor = fill - // [29] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 -- _deref_pbuz1=vbuc1 - lda #fill - ldy #0 - sta (cursor),y - // for( byte* cursor = screen; cursor < screen+1000; cursor++) - // [30] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 -- pbuz1=_inc_pbuz1 - inc cursor - bne !+ - inc cursor+1 - !: - // [26] phi from fillscreen::@2 to fillscreen::@1 [phi:fillscreen::@2->fillscreen::@1] - // [26] phi (byte*) fillscreen::cursor#2 = (byte*) fillscreen::cursor#1 [phi:fillscreen::@2->fillscreen::@1#0] -- register_copy - jmp b1 } // File Data TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @" diff --git a/src/test/ref/examples/scroll/scroll.sym b/src/test/ref/examples/scroll/scroll.sym index 7eb211636..9d8212ce2 100644 --- a/src/test/ref/examples/scroll/scroll.sym +++ b/src/test/ref/examples/scroll/scroll.sym @@ -16,8 +16,8 @@ (label) fillscreen::@2 (label) fillscreen::@return (byte*) fillscreen::cursor -(byte*) fillscreen::cursor#1 cursor zp ZP_WORD:2 22.0 -(byte*) fillscreen::cursor#2 cursor zp ZP_WORD:2 14.666666666666666 +(byte*) fillscreen::cursor#1 cursor zp ZP_WORD:2 16.5 +(byte*) fillscreen::cursor#4 cursor zp ZP_WORD:2 16.5 (byte) fillscreen::fill (const byte) fillscreen::fill#0 fill = (byte) $20 (byte*) fillscreen::screen @@ -36,8 +36,8 @@ (byte) main::c#1 reg byte x 22.0 (byte) main::c#2 reg byte x 33.0 (byte) main::i -(byte) main::i#1 reg byte x 202.0 -(byte) main::i#2 reg byte x 168.33333333333331 +(byte) main::i#1 reg byte x 151.5 +(byte) main::i#4 reg byte x 202.0 (byte[]) main::line (const byte[]) main::line#0 line = (const byte*) SCREEN#0+(byte) $28 (byte*) main::nxt @@ -51,6 +51,6 @@ (byte) main::scroll#7 reg byte x 56.0 reg byte x [ main::scroll#7 main::scroll#4 main::scroll#1 ] -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] reg byte x [ main::c#2 main::c#0 main::c#1 ] -zp ZP_WORD:2 [ fillscreen::cursor#2 fillscreen::cursor#1 main::nxt#4 main::nxt#10 main::nxt#11 main::nxt#1 ] +zp ZP_WORD:2 [ fillscreen::cursor#4 fillscreen::cursor#1 main::nxt#4 main::nxt#10 main::nxt#11 main::nxt#1 ] diff --git a/src/test/ref/examples/scrollbig/scrollbig.asm b/src/test/ref/examples/scrollbig/scrollbig.asm index de495612c..696aefaa5 100644 --- a/src/test/ref/examples/scrollbig/scrollbig.asm +++ b/src/test/ref/examples/scrollbig/scrollbig.asm @@ -117,11 +117,6 @@ scroll_bit: { } scroll_hard: { ldx #0 - // Hard scroll - b1: - cpx #$27 - bne b2 - rts b2: lda SCREEN+1,x sta SCREEN,x @@ -140,7 +135,10 @@ scroll_hard: { lda SCREEN+$28*7+1,x sta SCREEN+$28*7,x inx - jmp b1 + // Hard scroll + cpx #$27 + bne b2 + rts } // Find the next char of the scroll text next_char: { @@ -169,7 +167,14 @@ fillscreen: { sta cursor lda #>SCREEN sta cursor+1 - b1: + b2: + lda #fill + ldy #0 + sta (cursor),y + inc cursor + bne !+ + inc cursor+1 + !: lda cursor+1 cmp #>SCREEN+$3e8 bcc b2 @@ -179,14 +184,5 @@ fillscreen: { bcc b2 !: rts - b2: - lda #fill - ldy #0 - sta (cursor),y - inc cursor - bne !+ - inc cursor+1 - !: - jmp b1 } TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @" diff --git a/src/test/ref/examples/scrollbig/scrollbig.cfg b/src/test/ref/examples/scrollbig/scrollbig.cfg index 308e3ddee..94f1d005c 100644 --- a/src/test/ref/examples/scrollbig/scrollbig.cfg +++ b/src/test/ref/examples/scrollbig/scrollbig.cfg @@ -96,25 +96,25 @@ scroll_bit::@return: scope:[scroll_bit] from scroll_bit::@6 to:@return scroll_hard: scope:[scroll_hard] from scroll_bit::@1 [44] phi() + to:scroll_hard::@2 +scroll_hard::@2: scope:[scroll_hard] from scroll_hard scroll_hard::@1 + [45] (byte) scroll_hard::i#4 ← phi( scroll_hard::@1/(byte) scroll_hard::i#1 scroll_hard/(byte) 0 ) + [46] *((const byte*) SCREEN#0 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte) 1 + (byte) scroll_hard::i#4) + [47] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1+(byte) 1 + (byte) scroll_hard::i#4) + [48] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2+(byte) 1 + (byte) scroll_hard::i#4) + [49] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3+(byte) 1 + (byte) scroll_hard::i#4) + [50] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4+(byte) 1 + (byte) scroll_hard::i#4) + [51] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5+(byte) 1 + (byte) scroll_hard::i#4) + [52] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6+(byte) 1 + (byte) scroll_hard::i#4) + [53] *((const byte*) SCREEN#0+(word)(number) $28*(number) 7 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(word)(number) $28*(number) 7+(byte) 1 + (byte) scroll_hard::i#4) + [54] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#4 to:scroll_hard::@1 -scroll_hard::@1: scope:[scroll_hard] from scroll_hard scroll_hard::@2 - [45] (byte) scroll_hard::i#2 ← phi( scroll_hard/(byte) 0 scroll_hard::@2/(byte) scroll_hard::i#1 ) - [46] if((byte) scroll_hard::i#2!=(byte) $27) goto scroll_hard::@2 +scroll_hard::@1: scope:[scroll_hard] from scroll_hard::@2 + [55] if((byte) scroll_hard::i#1!=(byte) $27) goto scroll_hard::@2 to:scroll_hard::@return scroll_hard::@return: scope:[scroll_hard] from scroll_hard::@1 - [47] return + [56] return to:@return -scroll_hard::@2: scope:[scroll_hard] from scroll_hard::@1 - [48] *((const byte*) SCREEN#0 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte) 1 + (byte) scroll_hard::i#2) - [49] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1+(byte) 1 + (byte) scroll_hard::i#2) - [50] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2+(byte) 1 + (byte) scroll_hard::i#2) - [51] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3+(byte) 1 + (byte) scroll_hard::i#2) - [52] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4+(byte) 1 + (byte) scroll_hard::i#2) - [53] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5+(byte) 1 + (byte) scroll_hard::i#2) - [54] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6+(byte) 1 + (byte) scroll_hard::i#2) - [55] *((const byte*) SCREEN#0+(word)(number) $28*(number) 7 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(word)(number) $28*(number) 7+(byte) 1 + (byte) scroll_hard::i#2) - [56] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 - to:scroll_hard::@1 next_char: scope:[next_char] from scroll_bit::@2 [57] (byte) next_char::c#0 ← *((byte*) nxt#31) [58] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 @@ -132,15 +132,15 @@ next_char::@return: scope:[next_char] from next_char::@1 to:@return fillscreen: scope:[fillscreen] from main [63] phi() + to:fillscreen::@2 +fillscreen::@2: scope:[fillscreen] from fillscreen fillscreen::@1 + [64] (byte*) fillscreen::cursor#4 ← phi( fillscreen::@1/(byte*) fillscreen::cursor#1 fillscreen/(const byte*) SCREEN#0 ) + [65] *((byte*) fillscreen::cursor#4) ← (const byte) fillscreen::fill#0 + [66] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#4 to:fillscreen::@1 -fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@2 - [64] (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) SCREEN#0 fillscreen::@2/(byte*) fillscreen::cursor#1 ) - [65] if((byte*) fillscreen::cursor#2<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 +fillscreen::@1: scope:[fillscreen] from fillscreen::@2 + [67] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 to:fillscreen::@return fillscreen::@return: scope:[fillscreen] from fillscreen::@1 - [66] return + [68] return to:@return -fillscreen::@2: scope:[fillscreen] from fillscreen::@1 - [67] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 - [68] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 - to:fillscreen::@1 diff --git a/src/test/ref/examples/scrollbig/scrollbig.log b/src/test/ref/examples/scrollbig/scrollbig.log index 8f8801fcc..db3b1c5c3 100644 --- a/src/test/ref/examples/scrollbig/scrollbig.log +++ b/src/test/ref/examples/scrollbig/scrollbig.log @@ -935,28 +935,33 @@ Simplifying expression containing zero SCREEN#0 in [130] (byte*~) scroll_hard::$ Successful SSA optimization PassNSimplifyExpressionWithZero Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 8 in if((byte) scroll_bit::r#1!=(number) 8) goto scroll_bit::@3 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast 8 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 8 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) scroll_hard::i#1 = (byte) scroll_hard::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) scroll_hard::i#5 (const byte) scroll_hard::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [19] (byte*~) scroll_bit::$4 ← (const byte*) SCREEN#0 + (byte) $28 -Constant right-side identified [50] (byte*~) scroll_hard::$4 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 1 -Constant right-side identified [51] (byte*~) scroll_hard::$5 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 1 -Constant right-side identified [54] (byte*~) scroll_hard::$7 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 2 -Constant right-side identified [55] (byte*~) scroll_hard::$8 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 2 -Constant right-side identified [58] (byte*~) scroll_hard::$10 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 3 -Constant right-side identified [59] (byte*~) scroll_hard::$11 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 3 -Constant right-side identified [62] (byte*~) scroll_hard::$13 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 4 -Constant right-side identified [63] (byte*~) scroll_hard::$14 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 4 -Constant right-side identified [66] (byte*~) scroll_hard::$16 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 5 -Constant right-side identified [67] (byte*~) scroll_hard::$17 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 5 -Constant right-side identified [70] (byte*~) scroll_hard::$19 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 6 -Constant right-side identified [71] (byte*~) scroll_hard::$20 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 6 -Constant right-side identified [74] (byte*~) scroll_hard::$22 ← (const byte*) SCREEN#0 + (word)(number) $28*(number) 7 -Constant right-side identified [75] (byte*~) scroll_hard::$23 ← (const byte*) SCREEN#0 + (word)(number) $28*(number) 7 -Constant right-side identified [81] (byte*~) fillscreen::$0 ← (const byte*) fillscreen::screen#0 + (word) $3e8 +Constant right-side identified [51] (byte*~) scroll_hard::$4 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 1 +Constant right-side identified [52] (byte*~) scroll_hard::$5 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 1 +Constant right-side identified [55] (byte*~) scroll_hard::$7 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 2 +Constant right-side identified [56] (byte*~) scroll_hard::$8 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 2 +Constant right-side identified [59] (byte*~) scroll_hard::$10 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 3 +Constant right-side identified [60] (byte*~) scroll_hard::$11 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 3 +Constant right-side identified [63] (byte*~) scroll_hard::$13 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 4 +Constant right-side identified [64] (byte*~) scroll_hard::$14 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 4 +Constant right-side identified [67] (byte*~) scroll_hard::$16 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 5 +Constant right-side identified [68] (byte*~) scroll_hard::$17 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 5 +Constant right-side identified [71] (byte*~) scroll_hard::$19 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 6 +Constant right-side identified [72] (byte*~) scroll_hard::$20 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 6 +Constant right-side identified [75] (byte*~) scroll_hard::$22 ← (const byte*) SCREEN#0 + (word)(number) $28*(number) 7 +Constant right-side identified [76] (byte*~) scroll_hard::$23 ← (const byte*) SCREEN#0 + (word)(number) $28*(number) 7 +Constant right-side identified [83] (byte*~) fillscreen::$0 ← (const byte*) fillscreen::screen#0 + (word) $3e8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) scroll_bit::$4 = SCREEN#0+$28 Constant (const byte*) scroll_hard::$1 = SCREEN#0 @@ -977,10 +982,19 @@ Constant (const byte*) scroll_hard::$22 = SCREEN#0+(word)$28*7 Constant (const byte*) scroll_hard::$23 = SCREEN#0+(word)$28*7 Constant (const byte*) fillscreen::$0 = fillscreen::screen#0+$3e8 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [90] if((const byte) scroll_hard::i#0!=(byte) $27) goto scroll_hard::@2 +Successful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) fillscreen::cursor#1 = (byte*) fillscreen::cursor#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) fillscreen::cursor#5 (const byte*) fillscreen::screen#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [19] (byte*) scroll_bit::sc#0 ← (const byte*) scroll_bit::$4 + (byte) $27 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) scroll_bit::sc#0 = scroll_bit::$4+$27 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [72] if((const byte*) fillscreen::screen#0<(const byte*) fillscreen::$0) goto fillscreen::@2 +Successful SSA optimization Pass2ConstantIfs Rewriting division to use shift [13] (byte) current_bit#5 ← (byte) current_bit#29 / (byte) 2 Rewriting multiplication to use shift [22] (word~) scroll_bit::$7 ← (word) scroll_bit::c#0 * (byte) 8 Successful SSA optimization Pass2MultiplyToShiftRewriting @@ -1034,13 +1048,15 @@ Consolidated array index constant in assignment *(SCREEN#0+(byte)$28*5+1 + scrol Consolidated array index constant in assignment *(SCREEN#0+(byte)$28*6+1 + scroll_hard::$21) Consolidated array index constant in assignment *(SCREEN#0+(word)$28*7+1 + scroll_hard::$24) Successful SSA optimization Pass2ConstantAdditionElimination -Alias (byte) scroll_hard::i#2 = (byte~) scroll_hard::$3 (byte~) scroll_hard::$6 (byte~) scroll_hard::$9 (byte~) scroll_hard::$12 (byte~) scroll_hard::$15 (byte~) scroll_hard::$18 (byte~) scroll_hard::$21 (byte~) scroll_hard::$24 +Alias (byte) scroll_hard::i#4 = (byte~) scroll_hard::$3 (byte~) scroll_hard::$6 (byte~) scroll_hard::$9 (byte~) scroll_hard::$12 (byte~) scroll_hard::$15 (byte~) scroll_hard::$18 (byte~) scroll_hard::$21 (byte~) scroll_hard::$24 Successful SSA optimization Pass2AliasElimination Added new block during phi lifting main::@9(between main::@2 and main::@2) Added new block during phi lifting scroll_soft::@4(between scroll_soft and scroll_soft::@1) Added new block during phi lifting scroll_bit::@9(between scroll_bit and scroll_bit::@1) Added new block during phi lifting scroll_bit::@10(between scroll_bit::@4 and scroll_bit::@3) Added new block during phi lifting next_char::@4(between next_char and next_char::@1) +Added new block during phi lifting scroll_hard::@7(between scroll_hard::@1 and scroll_hard::@2) +Added new block during phi lifting fillscreen::@7(between fillscreen::@1 and fillscreen::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 @@ -1054,7 +1070,9 @@ Adding NOP phi() at start of scroll_soft::@2 Adding NOP phi() at start of scroll_bit::@2 Adding NOP phi() at start of scroll_bit::@5 Adding NOP phi() at start of scroll_hard +Adding NOP phi() at start of scroll_hard::@1_1 Adding NOP phi() at start of fillscreen +Adding NOP phi() at start of fillscreen::@1_1 CALL GRAPH Calls in [] to main:5 Calls in [main] to fillscreen:9 scroll_soft:15 @@ -1084,11 +1102,11 @@ Coalesced [67] scroll_bit::sc#5 ← scroll_bit::sc#1 Coalesced (already) [68] current_chargen#35 ← current_chargen#27 Coalesced [69] current_bit#36 ← current_bit#5 Coalesced (already) [70] nxt#42 ← nxt#31 -Coalesced [84] scroll_hard::i#4 ← scroll_hard::i#1 -Coalesced [88] next_char::return#6 ← next_char::c#1 -Coalesced [92] nxt#44 ← nxt#31 -Coalesced [93] next_char::return#5 ← next_char::c#0 -Coalesced [100] fillscreen::cursor#4 ← fillscreen::cursor#1 +Coalesced [85] scroll_hard::i#6 ← scroll_hard::i#1 +Coalesced [89] next_char::return#6 ← next_char::c#1 +Coalesced [93] nxt#44 ← nxt#31 +Coalesced [94] next_char::return#5 ← next_char::c#0 +Coalesced [102] fillscreen::cursor#6 ← fillscreen::cursor#1 Coalesced down to 10 phi equivalence classes Culled Empty Block (label) @1 Culled Empty Block (label) @2 @@ -1100,7 +1118,11 @@ Culled Empty Block (label) scroll_soft::@3 Culled Empty Block (label) scroll_soft::@4 Culled Empty Block (label) scroll_bit::@10 Culled Empty Block (label) scroll_bit::@9 +Culled Empty Block (label) scroll_hard::@1_1 +Culled Empty Block (label) scroll_hard::@7 Culled Empty Block (label) next_char::@4 +Culled Empty Block (label) fillscreen::@1_1 +Culled Empty Block (label) fillscreen::@7 Renumbering block @6 to @1 Renumbering block main::@2 to main::@1 Renumbering block main::@4 to main::@2 @@ -1215,25 +1237,25 @@ scroll_bit::@return: scope:[scroll_bit] from scroll_bit::@6 to:@return scroll_hard: scope:[scroll_hard] from scroll_bit::@1 [44] phi() + to:scroll_hard::@2 +scroll_hard::@2: scope:[scroll_hard] from scroll_hard scroll_hard::@1 + [45] (byte) scroll_hard::i#4 ← phi( scroll_hard::@1/(byte) scroll_hard::i#1 scroll_hard/(byte) 0 ) + [46] *((const byte*) SCREEN#0 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte) 1 + (byte) scroll_hard::i#4) + [47] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1+(byte) 1 + (byte) scroll_hard::i#4) + [48] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2+(byte) 1 + (byte) scroll_hard::i#4) + [49] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3+(byte) 1 + (byte) scroll_hard::i#4) + [50] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4+(byte) 1 + (byte) scroll_hard::i#4) + [51] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5+(byte) 1 + (byte) scroll_hard::i#4) + [52] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6+(byte) 1 + (byte) scroll_hard::i#4) + [53] *((const byte*) SCREEN#0+(word)(number) $28*(number) 7 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(word)(number) $28*(number) 7+(byte) 1 + (byte) scroll_hard::i#4) + [54] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#4 to:scroll_hard::@1 -scroll_hard::@1: scope:[scroll_hard] from scroll_hard scroll_hard::@2 - [45] (byte) scroll_hard::i#2 ← phi( scroll_hard/(byte) 0 scroll_hard::@2/(byte) scroll_hard::i#1 ) - [46] if((byte) scroll_hard::i#2!=(byte) $27) goto scroll_hard::@2 +scroll_hard::@1: scope:[scroll_hard] from scroll_hard::@2 + [55] if((byte) scroll_hard::i#1!=(byte) $27) goto scroll_hard::@2 to:scroll_hard::@return scroll_hard::@return: scope:[scroll_hard] from scroll_hard::@1 - [47] return + [56] return to:@return -scroll_hard::@2: scope:[scroll_hard] from scroll_hard::@1 - [48] *((const byte*) SCREEN#0 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte) 1 + (byte) scroll_hard::i#2) - [49] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1+(byte) 1 + (byte) scroll_hard::i#2) - [50] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2+(byte) 1 + (byte) scroll_hard::i#2) - [51] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3+(byte) 1 + (byte) scroll_hard::i#2) - [52] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4+(byte) 1 + (byte) scroll_hard::i#2) - [53] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5+(byte) 1 + (byte) scroll_hard::i#2) - [54] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6+(byte) 1 + (byte) scroll_hard::i#2) - [55] *((const byte*) SCREEN#0+(word)(number) $28*(number) 7 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(word)(number) $28*(number) 7+(byte) 1 + (byte) scroll_hard::i#2) - [56] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 - to:scroll_hard::@1 next_char: scope:[next_char] from scroll_bit::@2 [57] (byte) next_char::c#0 ← *((byte*) nxt#31) [58] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 @@ -1251,18 +1273,18 @@ next_char::@return: scope:[next_char] from next_char::@1 to:@return fillscreen: scope:[fillscreen] from main [63] phi() + to:fillscreen::@2 +fillscreen::@2: scope:[fillscreen] from fillscreen fillscreen::@1 + [64] (byte*) fillscreen::cursor#4 ← phi( fillscreen::@1/(byte*) fillscreen::cursor#1 fillscreen/(const byte*) SCREEN#0 ) + [65] *((byte*) fillscreen::cursor#4) ← (const byte) fillscreen::fill#0 + [66] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#4 to:fillscreen::@1 -fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@2 - [64] (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) SCREEN#0 fillscreen::@2/(byte*) fillscreen::cursor#1 ) - [65] if((byte*) fillscreen::cursor#2<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 +fillscreen::@1: scope:[fillscreen] from fillscreen::@2 + [67] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 to:fillscreen::@return fillscreen::@return: scope:[fillscreen] from fillscreen::@1 - [66] return + [68] return to:@return -fillscreen::@2: scope:[fillscreen] from fillscreen::@1 - [67] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 - [68] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 - to:fillscreen::@1 VARIABLE REGISTER WEIGHTS @@ -1285,8 +1307,8 @@ VARIABLE REGISTER WEIGHTS (byte*) current_chargen#5 4.0 (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (byte*) fillscreen::cursor -(byte*) fillscreen::cursor#1 22.0 -(byte*) fillscreen::cursor#2 14.666666666666666 +(byte*) fillscreen::cursor#1 16.5 +(byte*) fillscreen::cursor#4 16.5 (byte) fillscreen::fill (byte*) fillscreen::screen (void()) main() @@ -1324,8 +1346,8 @@ VARIABLE REGISTER WEIGHTS (byte*) scroll_bit::sc#2 43.285714285714285 (void()) scroll_hard() (byte) scroll_hard::i -(byte) scroll_hard::i#1 202.0 -(byte) scroll_hard::i#2 191.89999999999995 +(byte) scroll_hard::i#1 151.5 +(byte) scroll_hard::i#4 202.00000000000006 (void()) scroll_soft() Initial phi equivalence classes @@ -1335,10 +1357,10 @@ Initial phi equivalence classes [ scroll_bit::r#2 scroll_bit::r#1 ] [ scroll_bit::sc#2 scroll_bit::sc#1 ] [ scroll_bit::b#2 ] -[ scroll_hard::i#2 scroll_hard::i#1 ] +[ scroll_hard::i#4 scroll_hard::i#1 ] [ nxt#18 nxt#31 nxt#14 nxt#35 nxt#19 ] [ next_char::return#1 next_char::c#0 next_char::c#1 ] -[ fillscreen::cursor#2 fillscreen::cursor#1 ] +[ fillscreen::cursor#4 fillscreen::cursor#1 ] Added variable next_char::return#0 to zero page equivalence class [ next_char::return#0 ] Added variable scroll_bit::c#0 to zero page equivalence class [ scroll_bit::c#0 ] Added variable scroll_bit::$7 to zero page equivalence class [ scroll_bit::$7 ] @@ -1351,10 +1373,10 @@ Complete equivalence classes [ scroll_bit::r#2 scroll_bit::r#1 ] [ scroll_bit::sc#2 scroll_bit::sc#1 ] [ scroll_bit::b#2 ] -[ scroll_hard::i#2 scroll_hard::i#1 ] +[ scroll_hard::i#4 scroll_hard::i#1 ] [ nxt#18 nxt#31 nxt#14 nxt#35 nxt#19 ] [ next_char::return#1 next_char::c#0 next_char::c#1 ] -[ fillscreen::cursor#2 fillscreen::cursor#1 ] +[ fillscreen::cursor#4 fillscreen::cursor#1 ] [ next_char::return#0 ] [ scroll_bit::c#0 ] [ scroll_bit::$7 ] @@ -1366,10 +1388,10 @@ Allocated zp ZP_WORD:4 [ current_chargen#27 current_chargen#11 current_chargen#1 Allocated zp ZP_BYTE:6 [ scroll_bit::r#2 scroll_bit::r#1 ] Allocated zp ZP_WORD:7 [ scroll_bit::sc#2 scroll_bit::sc#1 ] Allocated zp ZP_BYTE:9 [ scroll_bit::b#2 ] -Allocated zp ZP_BYTE:10 [ scroll_hard::i#2 scroll_hard::i#1 ] +Allocated zp ZP_BYTE:10 [ scroll_hard::i#4 scroll_hard::i#1 ] Allocated zp ZP_WORD:11 [ nxt#18 nxt#31 nxt#14 nxt#35 nxt#19 ] Allocated zp ZP_BYTE:13 [ next_char::return#1 next_char::c#0 next_char::c#1 ] -Allocated zp ZP_WORD:14 [ fillscreen::cursor#2 fillscreen::cursor#1 ] +Allocated zp ZP_WORD:14 [ fillscreen::cursor#4 fillscreen::cursor#1 ] Allocated zp ZP_BYTE:16 [ next_char::return#0 ] Allocated zp ZP_WORD:17 [ scroll_bit::c#0 ] Allocated zp ZP_WORD:19 [ scroll_bit::$7 ] @@ -1678,64 +1700,65 @@ scroll_bit: { // scroll_hard scroll_hard: { .label i = $a - // [45] phi from scroll_hard to scroll_hard::@1 [phi:scroll_hard->scroll_hard::@1] - b1_from_scroll_hard: - // [45] phi (byte) scroll_hard::i#2 = (byte) 0 [phi:scroll_hard->scroll_hard::@1#0] -- vbuz1=vbuc1 + // [45] phi from scroll_hard to scroll_hard::@2 [phi:scroll_hard->scroll_hard::@2] + b2_from_scroll_hard: + // [45] phi (byte) scroll_hard::i#4 = (byte) 0 [phi:scroll_hard->scroll_hard::@2#0] -- vbuz1=vbuc1 lda #0 sta i + jmp b2 + // [45] phi from scroll_hard::@1 to scroll_hard::@2 [phi:scroll_hard::@1->scroll_hard::@2] + b2_from_b1: + // [45] phi (byte) scroll_hard::i#4 = (byte) scroll_hard::i#1 [phi:scroll_hard::@1->scroll_hard::@2#0] -- register_copy + jmp b2 + // scroll_hard::@2 + b2: + // [46] *((const byte*) SCREEN#0 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda SCREEN+1,y + sta SCREEN,y + // [47] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda SCREEN+$28*1+1,y + sta SCREEN+$28*1,y + // [48] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda SCREEN+$28*2+1,y + sta SCREEN+$28*2,y + // [49] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda SCREEN+$28*3+1,y + sta SCREEN+$28*3,y + // [50] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda SCREEN+$28*4+1,y + sta SCREEN+$28*4,y + // [51] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda SCREEN+$28*5+1,y + sta SCREEN+$28*5,y + // [52] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda SCREEN+$28*6+1,y + sta SCREEN+$28*6,y + // [53] *((const byte*) SCREEN#0+(word)(number) $28*(number) 7 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(word)(number) $28*(number) 7+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda SCREEN+$28*7+1,y + sta SCREEN+$28*7,y + // [54] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#4 -- vbuz1=_inc_vbuz1 + inc i jmp b1 // Hard scroll // scroll_hard::@1 b1: - // [46] if((byte) scroll_hard::i#2!=(byte) $27) goto scroll_hard::@2 -- vbuz1_neq_vbuc1_then_la1 + // [55] if((byte) scroll_hard::i#1!=(byte) $27) goto scroll_hard::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$27 cmp i - bne b2 + bne b2_from_b1 jmp breturn // scroll_hard::@return breturn: - // [47] return + // [56] return rts - // scroll_hard::@2 - b2: - // [48] *((const byte*) SCREEN#0 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 - ldy i - lda SCREEN+1,y - sta SCREEN,y - // [49] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 - ldy i - lda SCREEN+$28*1+1,y - sta SCREEN+$28*1,y - // [50] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 - ldy i - lda SCREEN+$28*2+1,y - sta SCREEN+$28*2,y - // [51] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 - ldy i - lda SCREEN+$28*3+1,y - sta SCREEN+$28*3,y - // [52] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 - ldy i - lda SCREEN+$28*4+1,y - sta SCREEN+$28*4,y - // [53] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 - ldy i - lda SCREEN+$28*5+1,y - sta SCREEN+$28*5,y - // [54] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 - ldy i - lda SCREEN+$28*6+1,y - sta SCREEN+$28*6,y - // [55] *((const byte*) SCREEN#0+(word)(number) $28*(number) 7 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(word)(number) $28*(number) 7+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 - ldy i - lda SCREEN+$28*7+1,y - sta SCREEN+$28*7,y - // [56] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [45] phi from scroll_hard::@2 to scroll_hard::@1 [phi:scroll_hard::@2->scroll_hard::@1] - b1_from_b2: - // [45] phi (byte) scroll_hard::i#2 = (byte) scroll_hard::i#1 [phi:scroll_hard::@2->scroll_hard::@1#0] -- register_copy - jmp b1 } // next_char // Find the next char of the scroll text @@ -1789,45 +1812,46 @@ next_char: { fillscreen: { .const fill = $20 .label cursor = $e - // [64] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] - b1_from_fillscreen: - // [64] phi (byte*) fillscreen::cursor#2 = (const byte*) SCREEN#0 [phi:fillscreen->fillscreen::@1#0] -- pbuz1=pbuc1 + // [64] phi from fillscreen to fillscreen::@2 [phi:fillscreen->fillscreen::@2] + b2_from_fillscreen: + // [64] phi (byte*) fillscreen::cursor#4 = (const byte*) SCREEN#0 [phi:fillscreen->fillscreen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta cursor+1 - jmp b1 - // fillscreen::@1 - b1: - // [65] if((byte*) fillscreen::cursor#2<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 -- pbuz1_lt_pbuc1_then_la1 - lda cursor+1 - cmp #>SCREEN+$3e8 - bcc b2 - bne !+ - lda cursor - cmp #fillscreen::@2] + b2_from_b1: + // [64] phi (byte*) fillscreen::cursor#4 = (byte*) fillscreen::cursor#1 [phi:fillscreen::@1->fillscreen::@2#0] -- register_copy + jmp b2 // fillscreen::@2 b2: - // [67] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 -- _deref_pbuz1=vbuc1 + // [65] *((byte*) fillscreen::cursor#4) ← (const byte) fillscreen::fill#0 -- _deref_pbuz1=vbuc1 lda #fill ldy #0 sta (cursor),y - // [68] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 -- pbuz1=_inc_pbuz1 + // [66] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#4 -- pbuz1=_inc_pbuz1 inc cursor bne !+ inc cursor+1 !: - // [64] phi from fillscreen::@2 to fillscreen::@1 [phi:fillscreen::@2->fillscreen::@1] - b1_from_b2: - // [64] phi (byte*) fillscreen::cursor#2 = (byte*) fillscreen::cursor#1 [phi:fillscreen::@2->fillscreen::@1#0] -- register_copy jmp b1 + // fillscreen::@1 + b1: + // [67] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 -- pbuz1_lt_pbuc1_then_la1 + lda cursor+1 + cmp #>SCREEN+$3e8 + bcc b2_from_b1 + bne !+ + lda cursor + cmp #scroll_hard::@1] - b1_from_scroll_hard: - // [45] phi (byte) scroll_hard::i#2 = (byte) 0 [phi:scroll_hard->scroll_hard::@1#0] -- vbuxx=vbuc1 + // [45] phi from scroll_hard to scroll_hard::@2 [phi:scroll_hard->scroll_hard::@2] + b2_from_scroll_hard: + // [45] phi (byte) scroll_hard::i#4 = (byte) 0 [phi:scroll_hard->scroll_hard::@2#0] -- vbuxx=vbuc1 ldx #0 + jmp b2 + // [45] phi from scroll_hard::@1 to scroll_hard::@2 [phi:scroll_hard::@1->scroll_hard::@2] + b2_from_b1: + // [45] phi (byte) scroll_hard::i#4 = (byte) scroll_hard::i#1 [phi:scroll_hard::@1->scroll_hard::@2#0] -- register_copy + jmp b2 + // scroll_hard::@2 + b2: + // [46] *((const byte*) SCREEN#0 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+1,x + sta SCREEN,x + // [47] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*1+1,x + sta SCREEN+$28*1,x + // [48] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*2+1,x + sta SCREEN+$28*2,x + // [49] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*3+1,x + sta SCREEN+$28*3,x + // [50] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*4+1,x + sta SCREEN+$28*4,x + // [51] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*5+1,x + sta SCREEN+$28*5,x + // [52] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*6+1,x + sta SCREEN+$28*6,x + // [53] *((const byte*) SCREEN#0+(word)(number) $28*(number) 7 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(word)(number) $28*(number) 7+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*7+1,x + sta SCREEN+$28*7,x + // [54] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#4 -- vbuxx=_inc_vbuxx + inx jmp b1 // Hard scroll // scroll_hard::@1 b1: - // [46] if((byte) scroll_hard::i#2!=(byte) $27) goto scroll_hard::@2 -- vbuxx_neq_vbuc1_then_la1 + // [55] if((byte) scroll_hard::i#1!=(byte) $27) goto scroll_hard::@2 -- vbuxx_neq_vbuc1_then_la1 cpx #$27 - bne b2 + bne b2_from_b1 jmp breturn // scroll_hard::@return breturn: - // [47] return + // [56] return rts - // scroll_hard::@2 - b2: - // [48] *((const byte*) SCREEN#0 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+1,x - sta SCREEN,x - // [49] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*1+1,x - sta SCREEN+$28*1,x - // [50] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*2+1,x - sta SCREEN+$28*2,x - // [51] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*3+1,x - sta SCREEN+$28*3,x - // [52] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*4+1,x - sta SCREEN+$28*4,x - // [53] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*5+1,x - sta SCREEN+$28*5,x - // [54] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*6+1,x - sta SCREEN+$28*6,x - // [55] *((const byte*) SCREEN#0+(word)(number) $28*(number) 7 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(word)(number) $28*(number) 7+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*7+1,x - sta SCREEN+$28*7,x - // [56] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 -- vbuxx=_inc_vbuxx - inx - // [45] phi from scroll_hard::@2 to scroll_hard::@1 [phi:scroll_hard::@2->scroll_hard::@1] - b1_from_b2: - // [45] phi (byte) scroll_hard::i#2 = (byte) scroll_hard::i#1 [phi:scroll_hard::@2->scroll_hard::@1#0] -- register_copy - jmp b1 } // next_char // Find the next char of the scroll text @@ -2297,45 +2322,46 @@ next_char: { fillscreen: { .const fill = $20 .label cursor = 7 - // [64] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] - b1_from_fillscreen: - // [64] phi (byte*) fillscreen::cursor#2 = (const byte*) SCREEN#0 [phi:fillscreen->fillscreen::@1#0] -- pbuz1=pbuc1 + // [64] phi from fillscreen to fillscreen::@2 [phi:fillscreen->fillscreen::@2] + b2_from_fillscreen: + // [64] phi (byte*) fillscreen::cursor#4 = (const byte*) SCREEN#0 [phi:fillscreen->fillscreen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta cursor+1 - jmp b1 - // fillscreen::@1 - b1: - // [65] if((byte*) fillscreen::cursor#2<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 -- pbuz1_lt_pbuc1_then_la1 - lda cursor+1 - cmp #>SCREEN+$3e8 - bcc b2 - bne !+ - lda cursor - cmp #fillscreen::@2] + b2_from_b1: + // [64] phi (byte*) fillscreen::cursor#4 = (byte*) fillscreen::cursor#1 [phi:fillscreen::@1->fillscreen::@2#0] -- register_copy + jmp b2 // fillscreen::@2 b2: - // [67] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 -- _deref_pbuz1=vbuc1 + // [65] *((byte*) fillscreen::cursor#4) ← (const byte) fillscreen::fill#0 -- _deref_pbuz1=vbuc1 lda #fill ldy #0 sta (cursor),y - // [68] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 -- pbuz1=_inc_pbuz1 + // [66] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#4 -- pbuz1=_inc_pbuz1 inc cursor bne !+ inc cursor+1 !: - // [64] phi from fillscreen::@2 to fillscreen::@1 [phi:fillscreen::@2->fillscreen::@1] - b1_from_b2: - // [64] phi (byte*) fillscreen::cursor#2 = (byte*) fillscreen::cursor#1 [phi:fillscreen::@2->fillscreen::@1#0] -- register_copy jmp b1 + // fillscreen::@1 + b1: + // [67] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 -- pbuz1_lt_pbuc1_then_la1 + lda cursor+1 + cmp #>SCREEN+$3e8 + bcc b2_from_b1 + bne !+ + lda cursor + cmp #scroll_hard::@1] - // [45] phi (byte) scroll_hard::i#2 = (byte) 0 [phi:scroll_hard->scroll_hard::@1#0] -- vbuxx=vbuc1 + // [45] phi from scroll_hard to scroll_hard::@2 [phi:scroll_hard->scroll_hard::@2] + // [45] phi (byte) scroll_hard::i#4 = (byte) 0 [phi:scroll_hard->scroll_hard::@2#0] -- vbuxx=vbuc1 ldx #0 + // [45] phi from scroll_hard::@1 to scroll_hard::@2 [phi:scroll_hard::@1->scroll_hard::@2] + // [45] phi (byte) scroll_hard::i#4 = (byte) scroll_hard::i#1 [phi:scroll_hard::@1->scroll_hard::@2#0] -- register_copy + // scroll_hard::@2 + b2: + // (SCREEN+40*0)[i]=(SCREEN+40*0)[i+1] + // [46] *((const byte*) SCREEN#0 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+1,x + sta SCREEN,x + // (SCREEN+40*1)[i]=(SCREEN+40*1)[i+1] + // [47] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*1+1,x + sta SCREEN+$28*1,x + // (SCREEN+40*2)[i]=(SCREEN+40*2)[i+1] + // [48] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*2+1,x + sta SCREEN+$28*2,x + // (SCREEN+40*3)[i]=(SCREEN+40*3)[i+1] + // [49] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*3+1,x + sta SCREEN+$28*3,x + // (SCREEN+40*4)[i]=(SCREEN+40*4)[i+1] + // [50] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*4+1,x + sta SCREEN+$28*4,x + // (SCREEN+40*5)[i]=(SCREEN+40*5)[i+1] + // [51] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*5+1,x + sta SCREEN+$28*5,x + // (SCREEN+40*6)[i]=(SCREEN+40*6)[i+1] + // [52] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*6+1,x + sta SCREEN+$28*6,x + // (SCREEN+40*7)[i]=(SCREEN+40*7)[i+1] + // [53] *((const byte*) SCREEN#0+(word)(number) $28*(number) 7 + (byte) scroll_hard::i#4) ← *((const byte*) SCREEN#0+(word)(number) $28*(number) 7+(byte) 1 + (byte) scroll_hard::i#4) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda SCREEN+$28*7+1,x + sta SCREEN+$28*7,x + // for(byte i=0;i!=39;i++) + // [54] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#4 -- vbuxx=_inc_vbuxx + inx // Hard scroll // scroll_hard::@1 - b1: - // for(byte i=0;i!=39;i++) - // [46] if((byte) scroll_hard::i#2!=(byte) $27) goto scroll_hard::@2 -- vbuxx_neq_vbuc1_then_la1 + // [55] if((byte) scroll_hard::i#1!=(byte) $27) goto scroll_hard::@2 -- vbuxx_neq_vbuc1_then_la1 cpx #$27 bne b2 // scroll_hard::@return // } - // [47] return + // [56] return rts - // scroll_hard::@2 - b2: - // (SCREEN+40*0)[i]=(SCREEN+40*0)[i+1] - // [48] *((const byte*) SCREEN#0 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+1,x - sta SCREEN,x - // (SCREEN+40*1)[i]=(SCREEN+40*1)[i+1] - // [49] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*1+1,x - sta SCREEN+$28*1,x - // (SCREEN+40*2)[i]=(SCREEN+40*2)[i+1] - // [50] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*2+1,x - sta SCREEN+$28*2,x - // (SCREEN+40*3)[i]=(SCREEN+40*3)[i+1] - // [51] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*3+1,x - sta SCREEN+$28*3,x - // (SCREEN+40*4)[i]=(SCREEN+40*4)[i+1] - // [52] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 4+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*4+1,x - sta SCREEN+$28*4,x - // (SCREEN+40*5)[i]=(SCREEN+40*5)[i+1] - // [53] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 5+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*5+1,x - sta SCREEN+$28*5,x - // (SCREEN+40*6)[i]=(SCREEN+40*6)[i+1] - // [54] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte)(number) $28*(number) 6+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*6+1,x - sta SCREEN+$28*6,x - // (SCREEN+40*7)[i]=(SCREEN+40*7)[i+1] - // [55] *((const byte*) SCREEN#0+(word)(number) $28*(number) 7 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(word)(number) $28*(number) 7+(byte) 1 + (byte) scroll_hard::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda SCREEN+$28*7+1,x - sta SCREEN+$28*7,x - // for(byte i=0;i!=39;i++) - // [56] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 -- vbuxx=_inc_vbuxx - inx - // [45] phi from scroll_hard::@2 to scroll_hard::@1 [phi:scroll_hard::@2->scroll_hard::@1] - // [45] phi (byte) scroll_hard::i#2 = (byte) scroll_hard::i#1 [phi:scroll_hard::@2->scroll_hard::@1#0] -- register_copy - jmp b1 } // next_char // Find the next char of the scroll text @@ -2894,16 +2926,29 @@ next_char: { fillscreen: { .const fill = $20 .label cursor = 7 - // [64] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] - // [64] phi (byte*) fillscreen::cursor#2 = (const byte*) SCREEN#0 [phi:fillscreen->fillscreen::@1#0] -- pbuz1=pbuc1 + // [64] phi from fillscreen to fillscreen::@2 [phi:fillscreen->fillscreen::@2] + // [64] phi (byte*) fillscreen::cursor#4 = (const byte*) SCREEN#0 [phi:fillscreen->fillscreen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta cursor+1 - // fillscreen::@1 - b1: + // [64] phi from fillscreen::@1 to fillscreen::@2 [phi:fillscreen::@1->fillscreen::@2] + // [64] phi (byte*) fillscreen::cursor#4 = (byte*) fillscreen::cursor#1 [phi:fillscreen::@1->fillscreen::@2#0] -- register_copy + // fillscreen::@2 + b2: + // *cursor = fill + // [65] *((byte*) fillscreen::cursor#4) ← (const byte) fillscreen::fill#0 -- _deref_pbuz1=vbuc1 + lda #fill + ldy #0 + sta (cursor),y // for( byte* cursor = screen; cursor < screen+1000; cursor++) - // [65] if((byte*) fillscreen::cursor#2<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 -- pbuz1_lt_pbuc1_then_la1 + // [66] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#4 -- pbuz1=_inc_pbuz1 + inc cursor + bne !+ + inc cursor+1 + !: + // fillscreen::@1 + // [67] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word) $3e8) goto fillscreen::@2 -- pbuz1_lt_pbuc1_then_la1 lda cursor+1 cmp #>SCREEN+$3e8 bcc b2 @@ -2914,24 +2959,8 @@ fillscreen: { !: // fillscreen::@return // } - // [66] return + // [68] return rts - // fillscreen::@2 - b2: - // *cursor = fill - // [67] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 -- _deref_pbuz1=vbuc1 - lda #fill - ldy #0 - sta (cursor),y - // for( byte* cursor = screen; cursor < screen+1000; cursor++) - // [68] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 -- pbuz1=_inc_pbuz1 - inc cursor - bne !+ - inc cursor+1 - !: - // [64] phi from fillscreen::@2 to fillscreen::@1 [phi:fillscreen::@2->fillscreen::@1] - // [64] phi (byte*) fillscreen::cursor#2 = (byte*) fillscreen::cursor#1 [phi:fillscreen::@2->fillscreen::@1#0] -- register_copy - jmp b1 } // File Data TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @" diff --git a/src/test/ref/examples/scrollbig/scrollbig.sym b/src/test/ref/examples/scrollbig/scrollbig.sym index bd1a6d6ce..0bb284108 100644 --- a/src/test/ref/examples/scrollbig/scrollbig.sym +++ b/src/test/ref/examples/scrollbig/scrollbig.sym @@ -30,8 +30,8 @@ (label) fillscreen::@2 (label) fillscreen::@return (byte*) fillscreen::cursor -(byte*) fillscreen::cursor#1 cursor zp ZP_WORD:7 22.0 -(byte*) fillscreen::cursor#2 cursor zp ZP_WORD:7 14.666666666666666 +(byte*) fillscreen::cursor#1 cursor zp ZP_WORD:7 16.5 +(byte*) fillscreen::cursor#4 cursor zp ZP_WORD:7 16.5 (byte) fillscreen::fill (const byte) fillscreen::fill#0 fill = (byte) $20 (byte*) fillscreen::screen @@ -89,8 +89,8 @@ (label) scroll_hard::@2 (label) scroll_hard::@return (byte) scroll_hard::i -(byte) scroll_hard::i#1 reg byte x 202.0 -(byte) scroll_hard::i#2 reg byte x 191.89999999999995 +(byte) scroll_hard::i#1 reg byte x 151.5 +(byte) scroll_hard::i#4 reg byte x 202.00000000000006 (void()) scroll_soft() (label) scroll_soft::@1 (label) scroll_soft::@2 @@ -101,10 +101,10 @@ zp ZP_BYTE:2 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ] reg byte x [ scroll_bit::r#2 scroll_bit::r#1 ] zp ZP_WORD:3 [ scroll_bit::sc#2 scroll_bit::sc#1 ] reg byte a [ scroll_bit::b#2 ] -reg byte x [ scroll_hard::i#2 scroll_hard::i#1 ] +reg byte x [ scroll_hard::i#4 scroll_hard::i#1 ] zp ZP_WORD:5 [ nxt#18 nxt#31 nxt#14 nxt#35 nxt#19 ] reg byte x [ next_char::return#1 next_char::c#0 next_char::c#1 ] -zp ZP_WORD:7 [ fillscreen::cursor#2 fillscreen::cursor#1 current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 scroll_bit::$7 scroll_bit::c#0 ] +zp ZP_WORD:7 [ fillscreen::cursor#4 fillscreen::cursor#1 current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 scroll_bit::$7 scroll_bit::c#0 ] reg byte a [ next_char::return#0 ] reg byte a [ scroll_bit::bits#0 ] reg byte a [ scroll_bit::$9 ] diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.asm b/src/test/ref/examples/scrolllogo/scrolllogo.asm index 038592eb9..24e6e451b 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.asm +++ b/src/test/ref/examples/scrolllogo/scrolllogo.asm @@ -272,17 +272,6 @@ sin16s_gen2: { sta x+3 sta i sta i+1 - // u[4.28] - b1: - lda i+1 - cmp #>XSIN_SIZE - bcc b2 - bne !+ - lda i - cmp #XSIN_SIZE + bcc b2 + bne !+ + lda i + cmp # (signed dword~) sin16s_gen2::$6 - [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 - [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 - [115] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 + [108] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + [109] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 + [110] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 + [111] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD + [112] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 + [113] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 to:sin16s_gen2::@1 +sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@5 + [114] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@2 + to:sin16s_gen2::@return +sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 + [115] return + to:@return mul16s: scope:[mul16s] from sin16s_gen2::@4 [116] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [117] call mul16u diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.log b/src/test/ref/examples/scrolllogo/scrolllogo.log index 978fb8f94..511bc0242 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.log +++ b/src/test/ref/examples/scrolllogo/scrolllogo.log @@ -2337,6 +2337,7 @@ Eliminating unused constant (const word) rem16u#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block loop::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $10 in if((byte) divr16u::i#1!=(number) $10) goto divr16u::@1 Adding number conversion cast (unumber) $f0 in if((byte) main::ch#1!=(number) $f0) goto main::@1 Adding number conversion cast (unumber) 6 in unroll if((byte) render_logo::line#2!=(number) 6) goto render_logo::@7 @@ -2358,13 +2359,23 @@ Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) 6 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (word) sin16s_gen2::i#1 = (word) sin16s_gen2::i#2 +Alias (dword) sin16s_gen2::x#1 = (dword) sin16s_gen2::x#2 +Alias (signed word*) sin16s_gen2::sintab#0 = (signed word*) sin16s_gen2::sintab#2 +Alias (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#7 (word) sin16s_gen2::i#8 +Alias (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#8 (dword) sin16s_gen2::x#7 +Alias (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#9 (signed word*) sin16s_gen2::sintab#8 Alias (byte~) render_logo::$14 = (byte~) render_logo::$12 Alias (byte~) render_logo::$22 = (byte~) render_logo::$20 Successful SSA optimization Pass2AliasElimination +Identical Phi Values (word) sin16s_gen2::i#9 (const word) sin16s_gen2::i#0 +Identical Phi Values (dword) sin16s_gen2::x#9 (const dword) sin16s_gen2::x#0 +Identical Phi Values (signed word*) sin16s_gen2::sintab#11 (signed word*) sin16s_gen2::sintab#1 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [18] (word) divr16u::dividend#1 ← > (const dword) div32u16u::dividend#0 Constant right-side identified [22] (word) divr16u::dividend#2 ← < (const dword) div32u16u::dividend#0 Constant right-side identified [58] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 -Constant right-side identified [162] (byte) memset::c#1 ← (const byte) WHITE#0 | (byte) 8 +Constant right-side identified [166] (byte) memset::c#1 ← (const byte) WHITE#0 | (byte) 8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = =(signed byte) 0) goto mul16s::@2 +if() condition always true - replacing block destination [244] if((const word) sin16s_gen2::i#0<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 Successful SSA optimization Pass2ConstantIfs Eliminating variable (word~) mul16s::$13 from unused block mul16s::@4 Eliminating variable (word~) mul16s::$14 from unused block mul16s::@4 @@ -2929,7 +2941,7 @@ Inlining Noop Cast [208] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 ke Inlining Noop Cast [210] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 Successful SSA optimization Pass2NopCastInlining Inlining Noop Cast [64] (byte) render_logo::logo_idx#1 ← (byte)(signed byte~) render_logo::$17 keeping render_logo::logo_idx#1 -Inlining Noop Cast [103] (signed word~) sin16s_gen2::$9 ← (signed word)(word~) sin16s_gen2::$7 keeping sin16s_gen2::$9 +Inlining Noop Cast [101] (signed word~) sin16s_gen2::$9 ← (signed word)(word~) sin16s_gen2::$7 keeping sin16s_gen2::$9 Successful SSA optimization Pass2NopCastInlining Rewriting multiplication to use shift [21] (word~) loop::$5 ← (word) xsin_idx#11 * (const byte) SIZEOF_SIGNED_WORD Rewriting division to use shift [34] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 / (signed byte) 8 @@ -3152,6 +3164,7 @@ Successful SSA optimization Pass2ConstantIfs Added new block during phi lifting main::@8(between main::@1 and main::@1) Added new block during phi lifting loop::@16(between loop::@15 and loop::@11) Added new block during phi lifting render_logo::@37(between render_logo::@21 and render_logo::@29) +Added new block during phi lifting sin16s_gen2::@10(between sin16s_gen2::@1 and sin16s_gen2::@2) Added new block during phi lifting mul16s::@7(between mul16s::@6 and mul16s::@1) Added new block during phi lifting mul16u::@10(between mul16u::@2 and mul16u::@4) Added new block during phi lifting sin16s::@13(between sin16s and sin16s::@1) @@ -3183,6 +3196,7 @@ Adding NOP phi() at start of render_logo::@5 Adding NOP phi() at start of render_logo::@30 Adding NOP phi() at start of render_logo::@22 Adding NOP phi() at start of sin16s_gen2 +Adding NOP phi() at start of sin16s_gen2::@1_1 Adding NOP phi() at start of mul16u::@3 Adding NOP phi() at start of div32u16u Adding NOP phi() at start of memset::@1 @@ -3190,11 +3204,11 @@ CALL GRAPH Calls in [] to main:6 Calls in [main] to memset:18 memset:20 sin16s_gen2:27 loop:29 Calls in [loop] to render_logo:41 -Calls in [sin16s_gen2] to div32u16u:121 sin16s:128 mul16s:131 -Calls in [mul16s] to mul16u:144 -Calls in [sin16s] to mulu16_sel:188 mulu16_sel:195 mulu16_sel:200 mulu16_sel:208 mulu16_sel:215 -Calls in [mulu16_sel] to mul16u:233 -Calls in [div32u16u] to divr16u:240 divr16u:245 +Calls in [sin16s_gen2] to div32u16u:121 sin16s:127 mul16s:130 +Calls in [mul16s] to mul16u:145 +Calls in [sin16s] to mulu16_sel:189 mulu16_sel:196 mulu16_sel:201 mulu16_sel:209 mulu16_sel:216 +Calls in [mulu16_sel] to mul16u:234 +Calls in [div32u16u] to divr16u:241 divr16u:246 Created 38 initial phi equivalence classes Coalesced [32] main::ch#3 ← main::ch#1 @@ -3208,49 +3222,49 @@ Coalesced [92] render_logo::screen_idx#28 ← render_logo::screen_idx#21 Coalesced [103] render_logo::screen_idx#29 ← render_logo::screen_idx#6 Coalesced [118] render_logo::logo_idx#15 ← render_logo::logo_idx#4 Coalesced [119] render_logo::screen_idx#27 ← render_logo::screen_idx#5 -Coalesced [139] sin16s_gen2::i#6 ← sin16s_gen2::i#1 -Coalesced [140] sin16s_gen2::x#6 ← sin16s_gen2::x#1 -Coalesced [141] sin16s_gen2::sintab#8 ← sin16s_gen2::sintab#0 -Coalesced [143] mul16u::a#8 ← mul16u::a#1 -Coalesced [151] mul16s::m#7 ← mul16s::m#1 -Coalesced [155] mul16s::m#8 ← mul16s::m#0 -Coalesced [157] mul16u::a#10 ← mul16u::a#6 -Coalesced [158] mul16u::mb#7 ← mul16u::mb#0 -Coalesced [166] mul16u::res#9 ← mul16u::res#1 -Coalesced [170] mul16u::a#11 ← mul16u::a#0 -Coalesced [171] mul16u::res#7 ← mul16u::res#6 -Coalesced [172] mul16u::mb#8 ← mul16u::mb#1 -Coalesced (already) [173] mul16u::res#8 ← mul16u::res#2 -Coalesced [176] sin16s::x#9 ← sin16s::x#1 -Coalesced [180] sin16s::x#11 ← sin16s::x#2 -Coalesced [186] mulu16_sel::v1#8 ← mulu16_sel::v1#0 -Coalesced [187] mulu16_sel::v2#8 ← mulu16_sel::v2#0 -Coalesced [193] mulu16_sel::v1#9 ← mulu16_sel::v1#1 -Coalesced [194] mulu16_sel::v2#9 ← mulu16_sel::v2#1 -Coalesced [199] mulu16_sel::v1#10 ← mulu16_sel::v1#2 -Coalesced [206] mulu16_sel::v1#6 ← mulu16_sel::v1#3 -Coalesced [207] mulu16_sel::v2#6 ← mulu16_sel::v2#3 -Coalesced [213] mulu16_sel::v1#7 ← mulu16_sel::v1#4 -Coalesced [214] mulu16_sel::v2#7 ← mulu16_sel::v2#4 -Coalesced [222] sin16s::return#6 ← sin16s::sinx#1 -Coalesced [226] sin16s::x#10 ← sin16s::x#4 -Coalesced [227] sin16s::x#8 ← sin16s::x#0 -Coalesced [231] mul16u::mb#6 ← mul16u::b#1 -Coalesced [232] mul16u::a#9 ← mul16u::a#2 -Coalesced [244] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [251] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [252] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [259] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [266] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [267] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [273] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [274] divr16u::dividend#10 ← divr16u::dividend#0 -Coalesced [275] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [276] divr16u::i#7 ← divr16u::i#1 -Coalesced [277] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [278] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [279] divr16u::rem#15 ← divr16u::rem#0 -Coalesced [289] memset::dst#5 ← memset::dst#1 +Coalesced [140] sin16s_gen2::i#10 ← sin16s_gen2::i#1 +Coalesced [141] sin16s_gen2::x#10 ← sin16s_gen2::x#1 +Coalesced [142] sin16s_gen2::sintab#12 ← sin16s_gen2::sintab#0 +Coalesced [144] mul16u::a#8 ← mul16u::a#1 +Coalesced [152] mul16s::m#7 ← mul16s::m#1 +Coalesced [156] mul16s::m#8 ← mul16s::m#0 +Coalesced [158] mul16u::a#10 ← mul16u::a#6 +Coalesced [159] mul16u::mb#7 ← mul16u::mb#0 +Coalesced [167] mul16u::res#9 ← mul16u::res#1 +Coalesced [171] mul16u::a#11 ← mul16u::a#0 +Coalesced [172] mul16u::res#7 ← mul16u::res#6 +Coalesced [173] mul16u::mb#8 ← mul16u::mb#1 +Coalesced (already) [174] mul16u::res#8 ← mul16u::res#2 +Coalesced [177] sin16s::x#9 ← sin16s::x#1 +Coalesced [181] sin16s::x#11 ← sin16s::x#2 +Coalesced [187] mulu16_sel::v1#8 ← mulu16_sel::v1#0 +Coalesced [188] mulu16_sel::v2#8 ← mulu16_sel::v2#0 +Coalesced [194] mulu16_sel::v1#9 ← mulu16_sel::v1#1 +Coalesced [195] mulu16_sel::v2#9 ← mulu16_sel::v2#1 +Coalesced [200] mulu16_sel::v1#10 ← mulu16_sel::v1#2 +Coalesced [207] mulu16_sel::v1#6 ← mulu16_sel::v1#3 +Coalesced [208] mulu16_sel::v2#6 ← mulu16_sel::v2#3 +Coalesced [214] mulu16_sel::v1#7 ← mulu16_sel::v1#4 +Coalesced [215] mulu16_sel::v2#7 ← mulu16_sel::v2#4 +Coalesced [223] sin16s::return#6 ← sin16s::sinx#1 +Coalesced [227] sin16s::x#10 ← sin16s::x#4 +Coalesced [228] sin16s::x#8 ← sin16s::x#0 +Coalesced [232] mul16u::mb#6 ← mul16u::b#1 +Coalesced [233] mul16u::a#9 ← mul16u::a#2 +Coalesced [245] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [252] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [253] divr16u::dividend#9 ← divr16u::dividend#5 +Coalesced [260] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [267] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [268] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [274] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [275] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [276] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [277] divr16u::i#7 ← divr16u::i#1 +Coalesced [278] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [279] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [280] divr16u::rem#15 ← divr16u::rem#0 +Coalesced [290] memset::dst#5 ← memset::dst#1 Coalesced down to 26 phi equivalence classes Culled Empty Block (label) @6 Culled Empty Block (label) @17 @@ -3268,6 +3282,8 @@ Culled Empty Block (label) render_logo::@5 Culled Empty Block (label) render_logo::@37 Culled Empty Block (label) render_logo::@30 Culled Empty Block (label) render_logo::@22 +Culled Empty Block (label) sin16s_gen2::@1_1 +Culled Empty Block (label) sin16s_gen2::@10 Culled Empty Block (label) mul16s::@7 Culled Empty Block (label) mul16u::@3 Culled Empty Block (label) mul16u::@10 @@ -3546,34 +3562,34 @@ sin16s_gen2: scope:[sin16s_gen2] from main::@2 to:sin16s_gen2::@3 sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2 [100] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 - to:sin16s_gen2::@1 -sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5 - [101] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word[XSIN_SIZE#0]) xsin#0 sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) - [101] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) - [101] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) - [102] if((word) sin16s_gen2::i#2<(const word) XSIN_SIZE#0) goto sin16s_gen2::@2 - to:sin16s_gen2::@return -sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 - [103] return - to:@return -sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 - [104] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 - [105] call sin16s - [106] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + to:sin16s_gen2::@2 +sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 sin16s_gen2::@3 + [101] (signed word*) sin16s_gen2::sintab#10 ← phi( sin16s_gen2::@1/(signed word*) sin16s_gen2::sintab#0 sin16s_gen2::@3/(const signed word[XSIN_SIZE#0]) xsin#0 ) + [101] (dword) sin16s_gen2::x#6 ← phi( sin16s_gen2::@1/(dword) sin16s_gen2::x#1 sin16s_gen2::@3/(byte) 0 ) + [101] (word) sin16s_gen2::i#6 ← phi( sin16s_gen2::@1/(word) sin16s_gen2::i#1 sin16s_gen2::@3/(byte) 0 ) + [102] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 + [103] call sin16s + [104] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen2::@4 sin16s_gen2::@4: scope:[sin16s_gen2] from sin16s_gen2::@2 - [107] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - [108] call mul16s - [109] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + [105] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + [106] call mul16s + [107] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 to:sin16s_gen2::@5 sin16s_gen2::@5: scope:[sin16s_gen2] from sin16s_gen2::@4 - [110] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - [111] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 - [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 - [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 - [115] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 + [108] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + [109] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 + [110] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 + [111] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD + [112] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 + [113] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 to:sin16s_gen2::@1 +sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@5 + [114] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@2 + to:sin16s_gen2::@return +sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 + [115] return + to:@return mul16s: scope:[mul16s] from sin16s_gen2::@4 [116] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [117] call mul16u @@ -4014,20 +4030,20 @@ VARIABLE REGISTER WEIGHTS (word~) sin16s_gen2::$9 11.0 (signed word) sin16s_gen2::ampl (word) sin16s_gen2::i -(word) sin16s_gen2::i#1 22.0 -(word) sin16s_gen2::i#2 2.5384615384615383 +(word) sin16s_gen2::i#1 16.5 +(word) sin16s_gen2::i#6 1.8333333333333333 (signed word) sin16s_gen2::max (signed word) sin16s_gen2::min (signed word) sin16s_gen2::offs (signed word*) sin16s_gen2::sintab -(signed word*) sin16s_gen2::sintab#0 7.333333333333333 -(signed word*) sin16s_gen2::sintab#2 3.0 +(signed word*) sin16s_gen2::sintab#0 5.5 +(signed word*) sin16s_gen2::sintab#10 3.3000000000000003 (dword) sin16s_gen2::step (dword) sin16s_gen2::step#0 0.8666666666666666 (word) sin16s_gen2::wavelength (dword) sin16s_gen2::x -(dword) sin16s_gen2::x#1 11.0 -(dword) sin16s_gen2::x#2 2.75 +(dword) sin16s_gen2::x#1 7.333333333333333 +(dword) sin16s_gen2::x#6 3.0 (signed word[XSIN_SIZE#0]) xsin (word) xsin_idx (word) xsin_idx#11 4.125 @@ -4042,9 +4058,9 @@ Initial phi equivalence classes [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] -[ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -[ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -[ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +[ sin16s_gen2::i#6 sin16s_gen2::i#1 ] +[ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +[ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] [ mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] @@ -4130,9 +4146,9 @@ Complete equivalence classes [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] -[ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -[ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -[ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +[ sin16s_gen2::i#6 sin16s_gen2::i#1 ] +[ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +[ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] [ mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] @@ -4217,9 +4233,9 @@ Allocated zp ZP_BYTE:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 re Allocated zp ZP_BYTE:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] Allocated zp ZP_BYTE:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] Allocated zp ZP_BYTE:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] -Allocated zp ZP_WORD:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -Allocated zp ZP_DWORD:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -Allocated zp ZP_WORD:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +Allocated zp ZP_WORD:9 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] +Allocated zp ZP_DWORD:11 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +Allocated zp ZP_WORD:15 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] Allocated zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] Allocated zp ZP_WORD:21 [ mul16u::b#1 ] Allocated zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] @@ -4972,46 +4988,35 @@ sin16s_gen2: { sta step+2 lda div32u16u.return_2+3 sta step+3 - // [101] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] - b1_from_b3: - // [101] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[XSIN_SIZE#0]) xsin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [101] phi from sin16s_gen2::@3 to sin16s_gen2::@2 [phi:sin16s_gen2::@3->sin16s_gen2::@2] + b2_from_b3: + // [101] phi (signed word*) sin16s_gen2::sintab#10 = (const signed word[XSIN_SIZE#0]) xsin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#0] -- pwsz1=pwsc1 lda #xsin sta sintab+1 - // [101] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 + // [101] phi (dword) sin16s_gen2::x#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [101] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [101] phi (word) sin16s_gen2::i#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen2::@1 - b1: - // [102] if((word) sin16s_gen2::i#2<(const word) XSIN_SIZE#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>XSIN_SIZE - bcc b2 - bne !+ - lda i - cmp #sin16s_gen2::@2] + b2_from_b1: + // [101] phi (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@1->sin16s_gen2::@2#0] -- register_copy + // [101] phi (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#1] -- register_copy + // [101] phi (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#2] -- register_copy + jmp b2 // sin16s_gen2::@2 b2: - // [104] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [102] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -5020,9 +5025,9 @@ sin16s_gen2: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [105] call sin16s + // [103] call sin16s jsr sin16s - // [106] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 + // [104] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 lda sin16s.return_1 sta sin16s.return lda sin16s.return_1+1 @@ -5030,14 +5035,14 @@ sin16s_gen2: { jmp b4 // sin16s_gen2::@4 b4: - // [107] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 + // [105] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 lda sin16s.return sta mul16s.a lda sin16s.return+1 sta mul16s.a+1 - // [108] call mul16s + // [106] call mul16s jsr mul16s - // [109] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 + // [107] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 lda mul16s.return sta mul16s.return_2 lda mul16s.return+1 @@ -5049,7 +5054,7 @@ sin16s_gen2: { jmp b5 // sin16s_gen2::@5 b5: - // [110] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 + // [108] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 lda mul16s.return_2 sta _6 lda mul16s.return_2+1 @@ -5058,19 +5063,19 @@ sin16s_gen2: { sta _6+2 lda mul16s.return_2+3 sta _6+3 - // [111] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [109] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda _6+2 sta _9 lda _6+3 sta _9+1 - // [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [110] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda _9 sta (sintab),y iny lda _9+1 sta (sintab),y - // [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [111] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -5078,7 +5083,7 @@ sin16s_gen2: { bcc !+ inc sintab+1 !: - // [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [112] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -5092,17 +5097,29 @@ sin16s_gen2: { lda x+3 adc step+3 sta x+3 - // [115] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 + // [113] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [101] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] - b1_from_b5: - // [101] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [101] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [101] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen2::@1 + b1: + // [114] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>XSIN_SIZE + bcc b2_from_b1 + bne !+ + lda i + cmp # (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a -Statement [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [116] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#1 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#1 ] ) always clobbers reg byte a -Statement [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::return#2 ] ) always clobbers reg byte a -Statement [119] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16s::m#0 ] ) always clobbers reg byte a -Statement [120] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 [ mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 ] ) always clobbers reg byte a -Statement [121] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$9 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a -Statement [122] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a -Statement [123] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#1 ] ) always clobbers reg byte a -Statement [125] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [129] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [102] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [104] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ) always clobbers reg byte a +Statement [105] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 ] ) always clobbers reg byte a +Statement [107] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ) always clobbers reg byte a +Statement [108] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ) always clobbers reg byte a +Statement [109] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ) always clobbers reg byte a +Statement [110] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ) always clobbers reg byte a reg byte y +Statement [111] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [112] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [114] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [116] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#1 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::a#1 ] ) always clobbers reg byte a +Statement [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::return#2 ] ) always clobbers reg byte a +Statement [119] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16s::m#0 ] ) always clobbers reg byte a +Statement [120] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 [ mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#0 ] ) always clobbers reg byte a +Statement [121] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$9 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a +Statement [122] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a +Statement [123] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#1 ] ) always clobbers reg byte a +Statement [125] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#0 ] ) always clobbers reg byte a +Statement [129] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:106::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ sin16s::isUpper#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:44 [ mulu16_sel::select#5 ] -Statement [131] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [133] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [137] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [138] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [140] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [141] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [143] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [131] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::sin16s_gen2:21::mul16s:106::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [133] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::sin16s_gen2:21::mul16s:106::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [137] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [138] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#1 ] ) always clobbers reg byte a +Statement [140] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [141] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [143] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ sin16s::isUpper#2 ] -Statement [144] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [145] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [146] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [148] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [149] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [150] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [151] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [153] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [154] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [155] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [157] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [158] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [159] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [160] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [161] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [163] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [164] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [165] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [166] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [168] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [169] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [170] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [171] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [173] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [176] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [178] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [179] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [181] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [182] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [183] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [184] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [144] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [145] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [146] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [148] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [149] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [150] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [151] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [153] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [154] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [155] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [157] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [158] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [159] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [160] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [161] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [163] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [164] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [165] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [166] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [168] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [169] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [170] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [171] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [173] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [176] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#5 ] ) always clobbers reg byte a +Statement [178] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [179] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [181] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [182] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [183] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [184] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a Statement [188] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [189] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [190] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a @@ -6153,63 +6170,63 @@ Statement [81] *((const byte*) SCREEN#0+(byte) $28*(byte) 4 + (byte) render_logo Statement [82] *((const byte*) SCREEN#0+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a Statement [99] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:21 [ div32u16u::return#2 ] ) always clobbers reg byte a Statement [100] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 ] ) always clobbers reg byte a -Statement [102] if((word) sin16s_gen2::i#2<(const word) XSIN_SIZE#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [104] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [106] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [107] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 ] ) always clobbers reg byte a -Statement [109] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a -Statement [110] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a -Statement [111] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a -Statement [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [116] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#1 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#1 ] ) always clobbers reg byte a -Statement [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::return#2 ] ) always clobbers reg byte a -Statement [119] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16s::m#0 ] ) always clobbers reg byte a -Statement [120] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 [ mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 ] ) always clobbers reg byte a -Statement [121] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$9 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a -Statement [122] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a -Statement [123] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#1 ] ) always clobbers reg byte a -Statement [125] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [129] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [131] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [133] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [137] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [138] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [140] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [141] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [143] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y -Statement [144] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [145] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [146] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [148] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [149] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [150] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [151] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [153] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [154] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [155] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [157] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [158] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [159] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [160] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [161] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [163] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [164] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [165] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [166] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [168] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [169] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [170] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [171] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [173] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [176] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [178] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [179] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [181] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [182] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [183] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [184] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [102] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [104] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ) always clobbers reg byte a +Statement [105] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 ] ) always clobbers reg byte a +Statement [107] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ) always clobbers reg byte a +Statement [108] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ) always clobbers reg byte a +Statement [109] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ) always clobbers reg byte a +Statement [110] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ) always clobbers reg byte a reg byte y +Statement [111] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [112] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [114] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [116] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#1 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::a#1 ] ) always clobbers reg byte a +Statement [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::return#2 ] ) always clobbers reg byte a +Statement [119] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16s::m#0 ] ) always clobbers reg byte a +Statement [120] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 [ mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#0 ] ) always clobbers reg byte a +Statement [121] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$9 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a +Statement [122] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a +Statement [123] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#1 ] ) always clobbers reg byte a +Statement [125] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::sin16s_gen2:21::mul16s:106 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#0 ] ) always clobbers reg byte a +Statement [129] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:106::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [131] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::sin16s_gen2:21::mul16s:106::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [133] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::sin16s_gen2:21::mul16s:106::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [137] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [138] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#1 ] ) always clobbers reg byte a +Statement [140] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [141] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [143] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [144] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [145] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [146] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [148] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [149] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [150] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [151] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [153] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [154] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [155] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [157] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [158] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [159] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [160] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [161] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [163] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [164] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [165] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [166] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [168] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [169] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [170] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [171] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [173] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [176] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:103 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#5 ] ) always clobbers reg byte a +Statement [178] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [179] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [181] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [182] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [183] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [184] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:103::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a Statement [188] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [189] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [190] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a @@ -6231,9 +6248,9 @@ Potential registers zp ZP_BYTE:5 [ render_logo::screen_idx#10 render_logo::scree Potential registers zp ZP_BYTE:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] : zp ZP_WORD:9 , -Potential registers zp ZP_DWORD:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] : zp ZP_DWORD:11 , -Potential registers zp ZP_WORD:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] : zp ZP_WORD:15 , +Potential registers zp ZP_WORD:9 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] : zp ZP_WORD:9 , +Potential registers zp ZP_DWORD:11 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] : zp ZP_DWORD:11 , +Potential registers zp ZP_WORD:15 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] : zp ZP_WORD:15 , Potential registers zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] : zp ZP_DWORD:17 , Potential registers zp ZP_WORD:21 [ mul16u::b#1 ] : zp ZP_WORD:21 , Potential registers zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] : zp ZP_WORD:23 , @@ -6318,8 +6335,8 @@ Uplift Scope [render_logo] 506.94: zp ZP_BYTE:5 [ render_logo::screen_idx#10 ren Uplift Scope [mul16u] 346.86: zp ZP_DWORD:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp ZP_DWORD:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp ZP_BYTE:116 [ mul16u::$1 ] 180.67: zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 4: zp ZP_WORD:21 [ mul16u::b#1 ] 4: zp ZP_DWORD:104 [ mul16u::return#2 ] 4: zp ZP_DWORD:149 [ mul16u::return#3 ] Uplift Scope [divr16u] 106.92: zp ZP_WORD:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:175 [ divr16u::$1 ] 22: zp ZP_BYTE:176 [ divr16u::$2 ] 18.19: zp ZP_BYTE:51 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp ZP_WORD:163 [ divr16u::return#2 ] 4: zp ZP_WORD:167 [ divr16u::return#3 ] Uplift Scope [sin16s] 27.5: zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp ZP_WORD:90 [ sin16s::return#0 ] 13: zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp ZP_DWORD:117 [ sin16s::$4 ] 4: zp ZP_WORD:125 [ sin16s::x2#0 ] 4: zp ZP_WORD:133 [ sin16s::x3_6#0 ] 4: zp ZP_WORD:139 [ sin16s::x4#0 ] 4: zp ZP_WORD:143 [ sin16s::x5#0 ] 4: zp ZP_WORD:145 [ sin16s::x5_128#0 ] 1: zp ZP_WORD:129 [ sin16s::x3#0 ] 1: zp ZP_WORD:147 [ sin16s::usinx#1 ] 0.64: zp ZP_WORD:121 [ sin16s::x1#0 ] 0.33: zp ZP_WORD:135 [ sin16s::usinx#0 ] 0.06: zp ZP_BYTE:33 [ sin16s::isUpper#2 ] -Uplift Scope [sin16s_gen2] 24.54: zp ZP_WORD:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] 22: zp ZP_DWORD:98 [ sin16s_gen2::$6 ] 13.75: zp ZP_DWORD:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] 11: zp ZP_WORD:102 [ sin16s_gen2::$9 ] 10.33: zp ZP_WORD:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] 0.87: zp ZP_DWORD:86 [ sin16s_gen2::step#0 ] Uplift Scope [mulu16_sel] 24: zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp ZP_WORD:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp ZP_WORD:123 [ mulu16_sel::return#0 ] 4: zp ZP_WORD:127 [ mulu16_sel::return#1 ] 4: zp ZP_WORD:131 [ mulu16_sel::return#2 ] 4: zp ZP_WORD:137 [ mulu16_sel::return#10 ] 4: zp ZP_WORD:141 [ mulu16_sel::return#11 ] 4: zp ZP_DWORD:153 [ mulu16_sel::$0 ] 4: zp ZP_DWORD:157 [ mulu16_sel::$1 ] 1.71: zp ZP_WORD:161 [ mulu16_sel::return#12 ] 0.33: zp ZP_BYTE:44 [ mulu16_sel::select#5 ] +Uplift Scope [sin16s_gen2] 22: zp ZP_DWORD:98 [ sin16s_gen2::$6 ] 18.33: zp ZP_WORD:9 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] 11: zp ZP_WORD:102 [ sin16s_gen2::$9 ] 10.33: zp ZP_DWORD:11 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] 8.8: zp ZP_WORD:15 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] 0.87: zp ZP_DWORD:86 [ sin16s_gen2::step#0 ] Uplift Scope [loop] 22: zp ZP_WORD:57 [ loop::$5 ] 22: zp ZP_WORD:59 [ loop::$1 ] 22: zp ZP_WORD:61 [ loop::xpos#0 ] Uplift Scope [mul16s] 22: zp ZP_DWORD:94 [ mul16s::return#2 ] 10: zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] 4.33: zp ZP_DWORD:112 [ mul16s::return#0 ] 4: zp ZP_WORD:108 [ mul16s::$9 ] 4: zp ZP_WORD:110 [ mul16s::$16 ] 2.6: zp ZP_WORD:92 [ mul16s::a#0 ] Uplift Scope [memset] 41.33: zp ZP_WORD:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp ZP_WORD:179 [ memset::end#0 ] 1.57: zp ZP_BYTE:54 [ memset::c#4 ] 0: zp ZP_WORD:52 [ memset::str#3 ] @@ -6327,57 +6344,57 @@ Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::ch#2 main::ch#1 ] Uplift Scope [] 26.12: zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] 0.8: zp ZP_WORD:177 [ rem16u#1 ] Uplift Scope [div32u16u] 4: zp ZP_DWORD:82 [ div32u16u::return#2 ] 4: zp ZP_WORD:169 [ div32u16u::quotient_lo#0 ] 1.33: zp ZP_DWORD:171 [ div32u16u::return#0 ] 0.8: zp ZP_WORD:165 [ div32u16u::quotient_hi#0 ] -Uplifting [mul16u] best 75052 combination zp ZP_DWORD:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:21 [ mul16u::b#1 ] zp ZP_DWORD:104 [ mul16u::return#2 ] zp ZP_DWORD:149 [ mul16u::return#3 ] -Uplifting [divr16u] best 74842 combination zp ZP_WORD:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:163 [ divr16u::return#2 ] zp ZP_WORD:167 [ divr16u::return#3 ] -Uplifting [sin16s] best 74842 combination zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:90 [ sin16s::return#0 ] zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:117 [ sin16s::$4 ] zp ZP_WORD:125 [ sin16s::x2#0 ] zp ZP_WORD:133 [ sin16s::x3_6#0 ] zp ZP_WORD:139 [ sin16s::x4#0 ] zp ZP_WORD:143 [ sin16s::x5#0 ] zp ZP_WORD:145 [ sin16s::x5_128#0 ] zp ZP_WORD:129 [ sin16s::x3#0 ] zp ZP_WORD:147 [ sin16s::usinx#1 ] zp ZP_WORD:121 [ sin16s::x1#0 ] zp ZP_WORD:135 [ sin16s::usinx#0 ] zp ZP_BYTE:33 [ sin16s::isUpper#2 ] -Uplifting [sin16s_gen2] best 74842 combination zp ZP_WORD:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp ZP_DWORD:98 [ sin16s_gen2::$6 ] zp ZP_DWORD:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp ZP_WORD:102 [ sin16s_gen2::$9 ] zp ZP_WORD:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp ZP_DWORD:86 [ sin16s_gen2::step#0 ] -Uplifting [mulu16_sel] best 74826 combination zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:123 [ mulu16_sel::return#0 ] zp ZP_WORD:127 [ mulu16_sel::return#1 ] zp ZP_WORD:131 [ mulu16_sel::return#2 ] zp ZP_WORD:137 [ mulu16_sel::return#10 ] zp ZP_WORD:141 [ mulu16_sel::return#11 ] zp ZP_DWORD:153 [ mulu16_sel::$0 ] zp ZP_DWORD:157 [ mulu16_sel::$1 ] zp ZP_WORD:161 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [loop] best 74826 combination zp ZP_WORD:57 [ loop::$5 ] zp ZP_WORD:59 [ loop::$1 ] zp ZP_WORD:61 [ loop::xpos#0 ] -Uplifting [mul16s] best 74826 combination zp ZP_DWORD:94 [ mul16s::return#2 ] zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp ZP_DWORD:112 [ mul16s::return#0 ] zp ZP_WORD:108 [ mul16s::$9 ] zp ZP_WORD:110 [ mul16s::$16 ] zp ZP_WORD:92 [ mul16s::a#0 ] -Uplifting [memset] best 74810 combination zp ZP_WORD:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:179 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp ZP_WORD:52 [ memset::str#3 ] -Uplifting [main] best 74690 combination reg byte x [ main::ch#2 main::ch#1 ] -Uplifting [] best 74690 combination zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] zp ZP_WORD:177 [ rem16u#1 ] -Uplifting [div32u16u] best 74690 combination zp ZP_DWORD:82 [ div32u16u::return#2 ] zp ZP_WORD:169 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:171 [ div32u16u::return#0 ] zp ZP_WORD:165 [ div32u16u::quotient_hi#0 ] +Uplifting [mul16u] best 75082 combination zp ZP_DWORD:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:21 [ mul16u::b#1 ] zp ZP_DWORD:104 [ mul16u::return#2 ] zp ZP_DWORD:149 [ mul16u::return#3 ] +Uplifting [divr16u] best 74872 combination zp ZP_WORD:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:163 [ divr16u::return#2 ] zp ZP_WORD:167 [ divr16u::return#3 ] +Uplifting [sin16s] best 74872 combination zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:90 [ sin16s::return#0 ] zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:117 [ sin16s::$4 ] zp ZP_WORD:125 [ sin16s::x2#0 ] zp ZP_WORD:133 [ sin16s::x3_6#0 ] zp ZP_WORD:139 [ sin16s::x4#0 ] zp ZP_WORD:143 [ sin16s::x5#0 ] zp ZP_WORD:145 [ sin16s::x5_128#0 ] zp ZP_WORD:129 [ sin16s::x3#0 ] zp ZP_WORD:147 [ sin16s::usinx#1 ] zp ZP_WORD:121 [ sin16s::x1#0 ] zp ZP_WORD:135 [ sin16s::usinx#0 ] zp ZP_BYTE:33 [ sin16s::isUpper#2 ] +Uplifting [mulu16_sel] best 74856 combination zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:123 [ mulu16_sel::return#0 ] zp ZP_WORD:127 [ mulu16_sel::return#1 ] zp ZP_WORD:131 [ mulu16_sel::return#2 ] zp ZP_WORD:137 [ mulu16_sel::return#10 ] zp ZP_WORD:141 [ mulu16_sel::return#11 ] zp ZP_DWORD:153 [ mulu16_sel::$0 ] zp ZP_DWORD:157 [ mulu16_sel::$1 ] zp ZP_WORD:161 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [sin16s_gen2] best 74856 combination zp ZP_DWORD:98 [ sin16s_gen2::$6 ] zp ZP_WORD:9 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] zp ZP_WORD:102 [ sin16s_gen2::$9 ] zp ZP_DWORD:11 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] zp ZP_WORD:15 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] zp ZP_DWORD:86 [ sin16s_gen2::step#0 ] +Uplifting [loop] best 74856 combination zp ZP_WORD:57 [ loop::$5 ] zp ZP_WORD:59 [ loop::$1 ] zp ZP_WORD:61 [ loop::xpos#0 ] +Uplifting [mul16s] best 74856 combination zp ZP_DWORD:94 [ mul16s::return#2 ] zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp ZP_DWORD:112 [ mul16s::return#0 ] zp ZP_WORD:108 [ mul16s::$9 ] zp ZP_WORD:110 [ mul16s::$16 ] zp ZP_WORD:92 [ mul16s::a#0 ] +Uplifting [memset] best 74840 combination zp ZP_WORD:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:179 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp ZP_WORD:52 [ memset::str#3 ] +Uplifting [main] best 74720 combination reg byte x [ main::ch#2 main::ch#1 ] +Uplifting [] best 74720 combination zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] zp ZP_WORD:177 [ rem16u#1 ] +Uplifting [div32u16u] best 74720 combination zp ZP_DWORD:82 [ div32u16u::return#2 ] zp ZP_WORD:169 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:171 [ div32u16u::return#0 ] zp ZP_WORD:165 [ div32u16u::quotient_hi#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] -Uplifting [render_logo] best 69590 combination reg byte y [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] +Uplifting [render_logo] best 69620 combination reg byte y [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] -Uplifting [render_logo] best 64790 combination reg byte y [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] +Uplifting [render_logo] best 64820 combination reg byte y [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] Attempting to uplift remaining variables inzp ZP_BYTE:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] -Uplifting [render_logo] best 64790 combination zp ZP_BYTE:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] +Uplifting [render_logo] best 64820 combination zp ZP_BYTE:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] -Uplifting [render_logo] best 64790 combination zp ZP_BYTE:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] +Uplifting [render_logo] best 64820 combination zp ZP_BYTE:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:71 [ render_logo::$33 ] -Uplifting [render_logo] best 64390 combination reg byte a [ render_logo::$33 ] +Uplifting [render_logo] best 64420 combination reg byte a [ render_logo::$33 ] Attempting to uplift remaining variables inzp ZP_BYTE:72 [ render_logo::$36 ] -Uplifting [render_logo] best 63990 combination reg byte a [ render_logo::$36 ] +Uplifting [render_logo] best 64020 combination reg byte a [ render_logo::$36 ] Attempting to uplift remaining variables inzp ZP_BYTE:73 [ render_logo::$39 ] -Uplifting [render_logo] best 63590 combination reg byte a [ render_logo::$39 ] +Uplifting [render_logo] best 63620 combination reg byte a [ render_logo::$39 ] Attempting to uplift remaining variables inzp ZP_BYTE:74 [ render_logo::$42 ] -Uplifting [render_logo] best 63190 combination reg byte a [ render_logo::$42 ] +Uplifting [render_logo] best 63220 combination reg byte a [ render_logo::$42 ] Attempting to uplift remaining variables inzp ZP_BYTE:75 [ render_logo::$45 ] -Uplifting [render_logo] best 62790 combination reg byte a [ render_logo::$45 ] +Uplifting [render_logo] best 62820 combination reg byte a [ render_logo::$45 ] Attempting to uplift remaining variables inzp ZP_BYTE:77 [ render_logo::$73 ] -Uplifting [render_logo] best 62390 combination reg byte a [ render_logo::$73 ] +Uplifting [render_logo] best 62420 combination reg byte a [ render_logo::$73 ] Attempting to uplift remaining variables inzp ZP_BYTE:78 [ render_logo::$76 ] -Uplifting [render_logo] best 61990 combination reg byte a [ render_logo::$76 ] +Uplifting [render_logo] best 62020 combination reg byte a [ render_logo::$76 ] Attempting to uplift remaining variables inzp ZP_BYTE:79 [ render_logo::$79 ] -Uplifting [render_logo] best 61590 combination reg byte a [ render_logo::$79 ] +Uplifting [render_logo] best 61620 combination reg byte a [ render_logo::$79 ] Attempting to uplift remaining variables inzp ZP_BYTE:80 [ render_logo::$82 ] -Uplifting [render_logo] best 61190 combination reg byte a [ render_logo::$82 ] +Uplifting [render_logo] best 61220 combination reg byte a [ render_logo::$82 ] Attempting to uplift remaining variables inzp ZP_BYTE:81 [ render_logo::$85 ] -Uplifting [render_logo] best 60790 combination reg byte a [ render_logo::$85 ] +Uplifting [render_logo] best 60820 combination reg byte a [ render_logo::$85 ] Attempting to uplift remaining variables inzp ZP_BYTE:65 [ render_logo::$0 ] -Uplifting [render_logo] best 60784 combination reg byte a [ render_logo::$0 ] +Uplifting [render_logo] best 60814 combination reg byte a [ render_logo::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:66 [ render_logo::$1 ] -Uplifting [render_logo] best 60778 combination reg byte a [ render_logo::$1 ] +Uplifting [render_logo] best 60808 combination reg byte a [ render_logo::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:67 [ render_logo::$2 ] -Uplifting [render_logo] best 60772 combination reg byte a [ render_logo::$2 ] +Uplifting [render_logo] best 60802 combination reg byte a [ render_logo::$2 ] Attempting to uplift remaining variables inzp ZP_BYTE:76 [ render_logo::logo_idx#1 ] -Uplifting [render_logo] best 60766 combination reg byte a [ render_logo::logo_idx#1 ] +Uplifting [render_logo] best 60796 combination reg byte a [ render_logo::logo_idx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:70 [ render_logo::x_char#0 ] -Uplifting [render_logo] best 60766 combination zp ZP_BYTE:70 [ render_logo::x_char#0 ] +Uplifting [render_logo] best 60796 combination zp ZP_BYTE:70 [ render_logo::x_char#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:33 [ sin16s::isUpper#2 ] -Uplifting [sin16s] best 60766 combination zp ZP_BYTE:33 [ sin16s::isUpper#2 ] +Uplifting [sin16s] best 60796 combination zp ZP_BYTE:33 [ sin16s::isUpper#2 ] Coalescing zero page register [ zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:147 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:129 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:177 [ rem16u#1 ] ] - score: 2 @@ -6414,10 +6431,10 @@ Coalescing zero page register [ zp ZP_WORD:123 [ mulu16_sel::return#0 mulu16_sel Coalescing zero page register [ zp ZP_WORD:123 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp ZP_WORD:141 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_DWORD:17 [ 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::$6 ] ] with [ zp ZP_DWORD:153 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:123 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp ZP_WORD:145 [ sin16s::x5_128#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] with [ zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] ] +Coalescing zero page register [ zp ZP_WORD:9 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] ] with [ zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] ] Coalescing zero page register [ zp ZP_BYTE:33 [ sin16s::isUpper#2 ] ] with [ zp ZP_BYTE:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] ] Coalescing zero page register [ zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] ] with [ zp ZP_DWORD:17 [ 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::$6 mulu16_sel::$0 mulu16_sel::$1 ] ] -Coalescing zero page register [ zp ZP_WORD:45 [ 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 ] ] with [ zp ZP_WORD:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ] +Coalescing zero page register [ zp ZP_WORD:45 [ 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 ] ] with [ zp ZP_WORD:15 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] ] Coalescing zero page register [ zp ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp ZP_WORD:21 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] Coalescing zero page register [ zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] Coalescing zero page register [ zp ZP_WORD:52 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ] ] @@ -6426,13 +6443,13 @@ Coalescing zero page register [ zp ZP_WORD:102 [ sin16s_gen2::$9 ] ] with [ zp Z Coalescing zero page register [ zp ZP_WORD:121 [ sin16s::x1#0 ] ] with [ zp ZP_WORD:108 [ mul16s::$9 mul16s::$16 ] ] Coalescing zero page register [ zp ZP_WORD:165 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:123 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] Coalescing zero page register [ zp ZP_WORD:102 [ sin16s_gen2::$9 render_logo::$3 ] ] with [ zp ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] -Coalescing zero page register [ zp ZP_WORD:179 [ memset::end#0 ] ] with [ zp ZP_WORD:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 xsin_idx#11 xsin_idx#19 xsin_idx#3 ] ] +Coalescing zero page register [ zp ZP_WORD:179 [ memset::end#0 ] ] with [ zp ZP_WORD:9 [ sin16s_gen2::i#6 sin16s_gen2::i#1 xsin_idx#11 xsin_idx#19 xsin_idx#3 ] ] Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:2 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] -Allocated (was zp ZP_DWORD:11) zp ZP_DWORD:3 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] +Allocated (was zp ZP_DWORD:11) zp ZP_DWORD:3 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] Allocated (was zp ZP_DWORD:29) zp ZP_DWORD:7 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] Allocated (was zp ZP_BYTE:33) zp ZP_BYTE:11 [ sin16s::isUpper#2 render_logo::logo_idx#10 render_logo::logo_idx#3 ] Allocated (was zp ZP_DWORD:34) zp ZP_DWORD:12 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 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::$6 mulu16_sel::$0 mulu16_sel::$1 ] -Allocated (was zp ZP_WORD:45) zp ZP_WORD:16 [ 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 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +Allocated (was zp ZP_WORD:45) zp ZP_WORD:16 [ 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 sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] Allocated (was zp ZP_WORD:49) zp ZP_WORD:18 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] Allocated (was zp ZP_WORD:52) zp ZP_WORD:20 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ] Allocated (was zp ZP_WORD:57) zp ZP_WORD:22 [ loop::$5 loop::$1 loop::xpos#0 render_logo::xpos#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] @@ -6441,7 +6458,7 @@ Allocated (was zp ZP_DWORD:82) zp ZP_DWORD:25 [ div32u16u::return#2 sin16s_gen2: Allocated (was zp ZP_WORD:102) zp ZP_WORD:29 [ sin16s_gen2::$9 render_logo::$3 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] Allocated (was zp ZP_WORD:121) zp ZP_WORD:31 [ sin16s::x1#0 mul16s::$9 mul16s::$16 ] Allocated (was zp ZP_WORD:165) zp ZP_WORD:33 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] -Allocated (was zp ZP_WORD:179) zp ZP_WORD:35 [ memset::end#0 sin16s_gen2::i#2 sin16s_gen2::i#1 xsin_idx#11 xsin_idx#19 xsin_idx#3 ] +Allocated (was zp ZP_WORD:179) zp ZP_WORD:35 [ memset::end#0 sin16s_gen2::i#6 sin16s_gen2::i#1 xsin_idx#11 xsin_idx#19 xsin_idx#3 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -7023,46 +7040,35 @@ sin16s_gen2: { // sin16s_gen2::@3 b3: // [100] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 - // [101] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] - b1_from_b3: - // [101] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[XSIN_SIZE#0]) xsin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [101] phi from sin16s_gen2::@3 to sin16s_gen2::@2 [phi:sin16s_gen2::@3->sin16s_gen2::@2] + b2_from_b3: + // [101] phi (signed word*) sin16s_gen2::sintab#10 = (const signed word[XSIN_SIZE#0]) xsin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#0] -- pwsz1=pwsc1 lda #xsin sta sintab+1 - // [101] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 + // [101] phi (dword) sin16s_gen2::x#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [101] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [101] phi (word) sin16s_gen2::i#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen2::@1 - b1: - // [102] if((word) sin16s_gen2::i#2<(const word) XSIN_SIZE#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>XSIN_SIZE - bcc b2 - bne !+ - lda i - cmp #sin16s_gen2::@2] + b2_from_b1: + // [101] phi (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@1->sin16s_gen2::@2#0] -- register_copy + // [101] phi (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#1] -- register_copy + // [101] phi (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#2] -- register_copy + jmp b2 // sin16s_gen2::@2 b2: - // [104] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [102] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -7071,33 +7077,33 @@ sin16s_gen2: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [105] call sin16s + // [103] call sin16s jsr sin16s - // [106] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [104] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 jmp b4 // sin16s_gen2::@4 b4: - // [107] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - // [108] call mul16s + // [105] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + // [106] call mul16s jsr mul16s - // [109] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + // [107] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 jmp b5 // sin16s_gen2::@5 b5: - // [110] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - // [111] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [108] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + // [109] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda _6+2 sta _9 lda _6+3 sta _9+1 - // [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [110] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda _9 sta (sintab),y iny lda _9+1 sta (sintab),y - // [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [111] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -7105,7 +7111,7 @@ sin16s_gen2: { bcc !+ inc sintab+1 !: - // [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [112] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -7119,17 +7125,29 @@ sin16s_gen2: { lda x+3 adc step+3 sta x+3 - // [115] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 + // [113] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [101] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] - b1_from_b5: - // [101] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [101] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [101] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen2::@1 + b1: + // [114] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>XSIN_SIZE + bcc b2_from_b1 + bne !+ + lda i + cmp #sin16s_gen2::@1] - // [101] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[XSIN_SIZE#0]) xsin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [101] phi from sin16s_gen2::@3 to sin16s_gen2::@2 [phi:sin16s_gen2::@3->sin16s_gen2::@2] + // [101] phi (signed word*) sin16s_gen2::sintab#10 = (const signed word[XSIN_SIZE#0]) xsin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#0] -- pwsz1=pwsc1 lda #xsin sta sintab+1 - // [101] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 + // [101] phi (dword) sin16s_gen2::x#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#1] -- vduz1=vbuc1 lda #0 sta x sta x+1 sta x+2 sta x+3 - // [101] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [101] phi (word) sin16s_gen2::i#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#2] -- vwuz1=vbuc1 sta i sta i+1 - // u[4.28] - // sin16s_gen2::@1 - b1: - // for( word i=0; iXSIN_SIZE - bcc b2 - bne !+ - lda i - cmp #sin16s_gen2::@2] + // [101] phi (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@1->sin16s_gen2::@2#0] -- register_copy + // [101] phi (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#1] -- register_copy + // [101] phi (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#2] -- register_copy // sin16s_gen2::@2 b2: // sin16s(x) - // [104] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [102] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -9113,25 +9123,25 @@ sin16s_gen2: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [105] call sin16s + // [103] call sin16s jsr sin16s - // [106] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [104] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 // sin16s_gen2::@4 // mul16s(sin16s(x), ampl) - // [107] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - // [108] call mul16s + // [105] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + // [106] call mul16s jsr mul16s - // [109] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + // [107] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 // sin16s_gen2::@5 - // [110] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + // [108] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 // >mul16s(sin16s(x), ampl) - // [111] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [109] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda _6+2 sta _9 lda _6+3 sta _9+1 // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl) - // [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [110] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda _9 sta (sintab),y @@ -9139,7 +9149,7 @@ sin16s_gen2: { lda _9+1 sta (sintab),y // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl); - // [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [111] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -9148,7 +9158,7 @@ sin16s_gen2: { inc sintab+1 !: // x = x + step - // [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [112] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -9163,16 +9173,26 @@ sin16s_gen2: { adc step+3 sta x+3 // for( word i=0; isin16s_gen2::@1] - // [101] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [101] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [101] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy - jmp b1 + // u[4.28] + // sin16s_gen2::@1 + // [114] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>XSIN_SIZE + bcc b2 + bne !+ + lda i + cmp #SIN_SIZE - bcc b2 - bne !+ - lda sin_idx - cmp #SIN_SIZE + bcs !b2+ + jmp b2 + !b2: + bne !+ + lda sin_idx + cmp #SIN_SIZE - bcc b2 - bne !+ - lda i - cmp #SIN_SIZE + bcc b2 + bne !+ + lda i + cmp # (signed dword~) sin16s_gen2::$6 - [82] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 - [83] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [84] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 - [85] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 + [78] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + [79] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 + [80] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 + [81] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD + [82] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 + [83] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 to:sin16s_gen2::@1 +sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@5 + [84] if((word) sin16s_gen2::i#1<(const word) SIN_SIZE#0) goto sin16s_gen2::@2 + to:sin16s_gen2::@return +sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 + [85] return + to:@return mul16s: scope:[mul16s] from sin16s_gen2::@4 [86] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [87] call mul16u diff --git a/src/test/ref/examples/sinplotter/sine-plotter.log b/src/test/ref/examples/sinplotter/sine-plotter.log index 6b5b95e87..99eb46a9d 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.log +++ b/src/test/ref/examples/sinplotter/sine-plotter.log @@ -2593,6 +2593,8 @@ Eliminating unused constant (const byte) BLACK#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $10 in if((byte) divr16u::i#1!=(number) $10) goto divr16u::@1 Adding number conversion cast (unumber) 0 in if((byte) bitmap_init::x#1!=(number) 0) goto bitmap_init::@1 Adding number conversion cast (unumber) 0 in if((byte) bitmap_init::y#1!=(number) 0) goto bitmap_init::@5 @@ -2607,14 +2609,32 @@ Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (word) sin16s_gen2::i#1 = (word) sin16s_gen2::i#2 +Alias (dword) sin16s_gen2::x#1 = (dword) sin16s_gen2::x#2 +Alias (signed word*) sin16s_gen2::sintab#0 = (signed word*) sin16s_gen2::sintab#2 +Alias (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#7 (word) sin16s_gen2::i#8 +Alias (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#8 (dword) sin16s_gen2::x#7 +Alias (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#9 (signed word*) sin16s_gen2::sintab#8 Alias (byte~) bitmap_init::$7 = (byte~) bitmap_init::$3 Alias (byte) bitmap_clear::col#0 = (byte~) bitmap_clear::$0 +Alias (word) render_sine::sin_idx#1 = (word) render_sine::sin_idx#2 +Alias (word) render_sine::xpos#3 = (word) render_sine::xpos#9 +Alias (word) render_sine::sin_idx#10 = (word) render_sine::sin_idx#13 (word) render_sine::sin_idx#11 (word) render_sine::sin_idx#16 (word) render_sine::sin_idx#14 (word) render_sine::sin_idx#15 +Alias (word) render_sine::xpos#10 = (word) render_sine::xpos#13 (word) render_sine::xpos#14 (word) render_sine::xpos#11 (word) render_sine::xpos#12 Successful SSA optimization Pass2AliasElimination +Alias (word) render_sine::sin_idx#10 = (word) render_sine::sin_idx#12 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (word) sin16s_gen2::i#9 (const word) sin16s_gen2::i#0 +Identical Phi Values (dword) sin16s_gen2::x#9 (const dword) sin16s_gen2::x#0 +Identical Phi Values (signed word*) sin16s_gen2::sintab#11 (const signed word*) sin16s_gen2::sintab#1 +Identical Phi Values (word) render_sine::sin_idx#17 (const word) render_sine::sin_idx#0 +Identical Phi Values (word) render_sine::xpos#15 (const word) render_sine::xpos#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [18] (word) divr16u::dividend#1 ← > (const dword) div32u16u::dividend#0 Constant right-side identified [22] (word) divr16u::dividend#2 ← < (const dword) div32u16u::dividend#0 Constant right-side identified [58] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 -Constant right-side identified [163] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10 -Constant right-side identified [182] (byte~) main::$0 ← (const byte) VIC_BMM#0 | (const byte) VIC_DEN#0 +Constant right-side identified [167] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10 +Constant right-side identified [186] (byte~) main::$0 ← (const byte) VIC_BMM#0 | (const byte) VIC_DEN#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = =(signed byte) 0) goto mul16s::@2 +if() condition always true - replacing block destination [257] if((const word) sin16s_gen2::i#0<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 +if() condition always true - replacing block destination [259] if((const word) render_sine::sin_idx#0<(const word) SIN_SIZE#0) goto render_sine::@2 Successful SSA optimization Pass2ConstantIfs Eliminating variable (word~) mul16s::$13 from unused block mul16s::@4 Eliminating variable (word~) mul16s::$14 from unused block mul16s::@4 @@ -2706,8 +2728,8 @@ Inlining Noop Cast [105] (signed word~) sin16s::$19 ← (signed word)(word) sin1 Inlining Noop Cast [119] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3 Inlining Noop Cast [121] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 Successful SSA optimization Pass2NopCastInlining -Rewriting multiplication to use shift [173] (word~) render_sine::$10 ← (word) render_sine::sin_idx#2 * (const byte) SIZEOF_SIGNED_WORD -Rewriting multiplication to use shift [183] (word~) render_sine::$11 ← (word) render_sine::sin_idx#2 * (const byte) SIZEOF_SIGNED_WORD +Rewriting multiplication to use shift [173] (word~) render_sine::$10 ← (word) render_sine::sin_idx#10 * (const byte) SIZEOF_SIGNED_WORD +Rewriting multiplication to use shift [183] (word~) render_sine::$11 ← (word) render_sine::sin_idx#10 * (const byte) SIZEOF_SIGNED_WORD Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -2806,6 +2828,7 @@ Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u:: Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3) Added new block during phi lifting mul16u::@10(between mul16u::@2 and mul16u::@4) Added new block during phi lifting mul16s::@7(between mul16s::@6 and mul16s::@1) +Added new block during phi lifting sin16s_gen2::@10(between sin16s_gen2::@1 and sin16s_gen2::@2) Added new block during phi lifting sin16s::@13(between sin16s and sin16s::@1) Fixing phi predecessor for sin16s::isUpper#2 to new block ( sin16s -> sin16s::@13 ) during phi lifting. Added new block during phi lifting sin16s::@14(between sin16s::@1 and sin16s::@2) @@ -2814,7 +2837,8 @@ Added new block during phi lifting bitmap_init::@9(between bitmap_init::@2 and b Added new block during phi lifting bitmap_init::@10(between bitmap_init::@1 and bitmap_init::@2) Added new block during phi lifting bitmap_init::@11(between bitmap_init::@6 and bitmap_init::@5) Added new block during phi lifting bitmap_init::@12(between bitmap_init::@5 and bitmap_init::@6) -Added new block during phi lifting render_sine::@13(between render_sine::@12 and render_sine::@4) +Added new block during phi lifting render_sine::@13(between render_sine::@1 and render_sine::@2) +Added new block during phi lifting render_sine::@14(between render_sine::@12 and render_sine::@4) Added new block during phi lifting wrap_y::@14(between wrap_y::@1 and wrap_y::@7) Adding NOP phi() at start of @begin Adding NOP phi() at start of @6 @@ -2834,8 +2858,10 @@ Adding NOP phi() at start of main::@11 Adding NOP phi() at start of main::@12 Adding NOP phi() at start of main::@1 Adding NOP phi() at start of render_sine +Adding NOP phi() at start of render_sine::@1_1 Adding NOP phi() at start of render_sine::@7 Adding NOP phi() at start of sin16s_gen2 +Adding NOP phi() at start of sin16s_gen2::@1_1 Adding NOP phi() at start of mul16u::@3 Adding NOP phi() at start of div32u16u Adding NOP phi() at start of bitmap_clear @@ -2848,78 +2874,78 @@ Adding NOP phi() at start of bitmap_init::@4 CALL GRAPH Calls in [] to main:6 Calls in [main] to bitmap_init:21 bitmap_clear:23 sin16s_gen2:25 render_sine:27 -Calls in [render_sine] to wrap_y:40 bitmap_plot:47 wrap_y:53 bitmap_plot:60 -Calls in [sin16s_gen2] to div32u16u:90 sin16s:97 mul16s:100 -Calls in [mul16s] to mul16u:113 -Calls in [sin16s] to mulu16_sel:157 mulu16_sel:164 mulu16_sel:169 mulu16_sel:177 mulu16_sel:184 -Calls in [mulu16_sel] to mul16u:202 -Calls in [div32u16u] to divr16u:209 divr16u:214 -Calls in [bitmap_clear] to memset:250 memset:252 +Calls in [render_sine] to wrap_y:39 bitmap_plot:46 wrap_y:52 bitmap_plot:59 +Calls in [sin16s_gen2] to div32u16u:91 sin16s:97 mul16s:100 +Calls in [mul16s] to mul16u:115 +Calls in [sin16s] to mulu16_sel:159 mulu16_sel:166 mulu16_sel:171 mulu16_sel:179 mulu16_sel:186 +Calls in [mulu16_sel] to mul16u:204 +Calls in [div32u16u] to divr16u:211 divr16u:216 +Calls in [bitmap_clear] to memset:252 memset:254 Created 44 initial phi equivalence classes -Coalesced [39] wrap_y::y#11 ← wrap_y::y#0 -Coalesced [45] bitmap_plot::y#4 ← bitmap_plot::y#0 -Coalesced [46] bitmap_plot::x#4 ← bitmap_plot::x#0 -Coalesced [52] wrap_y::y#10 ← wrap_y::y#1 -Coalesced [58] bitmap_plot::y#3 ← bitmap_plot::y#1 -Coalesced [59] bitmap_plot::x#3 ← bitmap_plot::x#1 -Coalesced [66] render_sine::sin_idx#10 ← render_sine::sin_idx#1 -Coalesced [67] render_sine::xpos#10 ← render_sine::xpos#9 -Coalesced [68] render_sine::xpos#11 ← render_sine::xpos#1 -Coalesced [77] wrap_y::y#12 ← wrap_y::y#9 -Coalesced [80] wrap_y::y#14 ← wrap_y::y#4 -Coalesced [86] wrap_y::y#15 ← wrap_y::y#3 -Coalesced [88] wrap_y::y#13 ← wrap_y::y#2 -Coalesced [108] sin16s_gen2::i#6 ← sin16s_gen2::i#1 -Coalesced [109] sin16s_gen2::x#6 ← sin16s_gen2::x#1 -Coalesced [110] sin16s_gen2::sintab#8 ← sin16s_gen2::sintab#0 -Coalesced [112] mul16u::a#8 ← mul16u::a#1 -Coalesced [120] mul16s::m#7 ← mul16s::m#1 -Coalesced [124] mul16s::m#8 ← mul16s::m#0 -Coalesced [126] mul16u::a#10 ← mul16u::a#6 -Coalesced [127] mul16u::mb#7 ← mul16u::mb#0 -Coalesced [135] mul16u::res#9 ← mul16u::res#1 -Coalesced [139] mul16u::a#11 ← mul16u::a#0 -Coalesced [140] mul16u::res#7 ← mul16u::res#6 -Coalesced [141] mul16u::mb#8 ← mul16u::mb#1 -Coalesced (already) [142] mul16u::res#8 ← mul16u::res#2 -Coalesced [145] sin16s::x#9 ← sin16s::x#1 -Coalesced [149] sin16s::x#11 ← sin16s::x#2 -Coalesced [155] mulu16_sel::v1#8 ← mulu16_sel::v1#0 -Coalesced [156] mulu16_sel::v2#8 ← mulu16_sel::v2#0 -Coalesced [162] mulu16_sel::v1#9 ← mulu16_sel::v1#1 -Coalesced [163] mulu16_sel::v2#9 ← mulu16_sel::v2#1 -Coalesced [168] mulu16_sel::v1#10 ← mulu16_sel::v1#2 -Coalesced [175] mulu16_sel::v1#6 ← mulu16_sel::v1#3 -Coalesced [176] mulu16_sel::v2#6 ← mulu16_sel::v2#3 -Coalesced [182] mulu16_sel::v1#7 ← mulu16_sel::v1#4 -Coalesced [183] mulu16_sel::v2#7 ← mulu16_sel::v2#4 -Coalesced [191] sin16s::return#6 ← sin16s::sinx#1 -Coalesced [195] sin16s::x#10 ← sin16s::x#4 -Coalesced [196] sin16s::x#8 ← sin16s::x#0 -Coalesced [200] mul16u::mb#6 ← mul16u::b#1 -Coalesced [201] mul16u::a#9 ← mul16u::a#2 -Coalesced [213] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [220] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [221] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [228] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [235] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [236] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [242] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [243] divr16u::dividend#10 ← divr16u::dividend#0 -Coalesced [244] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [245] divr16u::i#7 ← divr16u::i#1 -Coalesced [246] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [247] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [248] divr16u::rem#15 ← divr16u::rem#0 -Coalesced [265] memset::dst#5 ← memset::dst#1 -Coalesced [285] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 -Coalesced [290] bitmap_init::y#5 ← bitmap_init::y#1 -Coalesced [291] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 -Coalesced (already) [292] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 -Coalesced [293] bitmap_init::bits#5 ← bitmap_init::bits#4 -Coalesced [294] bitmap_init::x#5 ← bitmap_init::x#1 -Coalesced [295] bitmap_init::bits#6 ← bitmap_init::bits#1 +Coalesced [38] wrap_y::y#11 ← wrap_y::y#0 +Coalesced [44] bitmap_plot::y#4 ← bitmap_plot::y#0 +Coalesced [45] bitmap_plot::x#4 ← bitmap_plot::x#0 +Coalesced [51] wrap_y::y#10 ← wrap_y::y#1 +Coalesced [57] bitmap_plot::y#3 ← bitmap_plot::y#1 +Coalesced [58] bitmap_plot::x#3 ← bitmap_plot::x#1 +Coalesced [67] render_sine::sin_idx#18 ← render_sine::sin_idx#1 +Coalesced [68] render_sine::xpos#16 ← render_sine::xpos#3 +Coalesced [69] render_sine::xpos#17 ← render_sine::xpos#1 +Coalesced [78] wrap_y::y#12 ← wrap_y::y#9 +Coalesced [81] wrap_y::y#14 ← wrap_y::y#4 +Coalesced [87] wrap_y::y#15 ← wrap_y::y#3 +Coalesced [89] wrap_y::y#13 ← wrap_y::y#2 +Coalesced [110] sin16s_gen2::i#10 ← sin16s_gen2::i#1 +Coalesced [111] sin16s_gen2::x#10 ← sin16s_gen2::x#1 +Coalesced [112] sin16s_gen2::sintab#12 ← sin16s_gen2::sintab#0 +Coalesced [114] mul16u::a#8 ← mul16u::a#1 +Coalesced [122] mul16s::m#7 ← mul16s::m#1 +Coalesced [126] mul16s::m#8 ← mul16s::m#0 +Coalesced [128] mul16u::a#10 ← mul16u::a#6 +Coalesced [129] mul16u::mb#7 ← mul16u::mb#0 +Coalesced [137] mul16u::res#9 ← mul16u::res#1 +Coalesced [141] mul16u::a#11 ← mul16u::a#0 +Coalesced [142] mul16u::res#7 ← mul16u::res#6 +Coalesced [143] mul16u::mb#8 ← mul16u::mb#1 +Coalesced (already) [144] mul16u::res#8 ← mul16u::res#2 +Coalesced [147] sin16s::x#9 ← sin16s::x#1 +Coalesced [151] sin16s::x#11 ← sin16s::x#2 +Coalesced [157] mulu16_sel::v1#8 ← mulu16_sel::v1#0 +Coalesced [158] mulu16_sel::v2#8 ← mulu16_sel::v2#0 +Coalesced [164] mulu16_sel::v1#9 ← mulu16_sel::v1#1 +Coalesced [165] mulu16_sel::v2#9 ← mulu16_sel::v2#1 +Coalesced [170] mulu16_sel::v1#10 ← mulu16_sel::v1#2 +Coalesced [177] mulu16_sel::v1#6 ← mulu16_sel::v1#3 +Coalesced [178] mulu16_sel::v2#6 ← mulu16_sel::v2#3 +Coalesced [184] mulu16_sel::v1#7 ← mulu16_sel::v1#4 +Coalesced [185] mulu16_sel::v2#7 ← mulu16_sel::v2#4 +Coalesced [193] sin16s::return#6 ← sin16s::sinx#1 +Coalesced [197] sin16s::x#10 ← sin16s::x#4 +Coalesced [198] sin16s::x#8 ← sin16s::x#0 +Coalesced [202] mul16u::mb#6 ← mul16u::b#1 +Coalesced [203] mul16u::a#9 ← mul16u::a#2 +Coalesced [215] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [222] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [223] divr16u::dividend#9 ← divr16u::dividend#5 +Coalesced [230] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [237] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [238] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [244] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [245] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [246] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [247] divr16u::i#7 ← divr16u::i#1 +Coalesced [248] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [249] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [250] divr16u::rem#15 ← divr16u::rem#0 +Coalesced [267] memset::dst#5 ← memset::dst#1 +Coalesced [287] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 +Coalesced [292] bitmap_init::y#5 ← bitmap_init::y#1 +Coalesced [293] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 +Coalesced (already) [294] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 +Coalesced [295] bitmap_init::bits#5 ← bitmap_init::bits#4 +Coalesced [296] bitmap_init::x#5 ← bitmap_init::x#1 +Coalesced [297] bitmap_init::bits#6 ← bitmap_init::bits#1 Coalesced down to 30 phi equivalence classes Culled Empty Block (label) @6 Culled Empty Block (label) @17 @@ -2930,8 +2956,12 @@ Culled Empty Block (label) main::vicSelectGfxBank1_toDd001_@return Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@12 Culled Empty Block (label) main::@1 +Culled Empty Block (label) render_sine::@1_1 Culled Empty Block (label) render_sine::@7 +Culled Empty Block (label) render_sine::@13 Culled Empty Block (label) wrap_y::@14 +Culled Empty Block (label) sin16s_gen2::@1_1 +Culled Empty Block (label) sin16s_gen2::@10 Culled Empty Block (label) mul16s::@7 Culled Empty Block (label) mul16u::@3 Culled Empty Block (label) mul16u::@10 @@ -2981,7 +3011,7 @@ Renumbering block render_sine::@9 to render_sine::@4 Renumbering block render_sine::@10 to render_sine::@5 Renumbering block render_sine::@11 to render_sine::@6 Renumbering block render_sine::@12 to render_sine::@7 -Renumbering block render_sine::@13 to render_sine::@8 +Renumbering block render_sine::@14 to render_sine::@8 Renumbering block wrap_y::@7 to wrap_y::@3 Renumbering block wrap_y::@8 to wrap_y::@4 Renumbering block wrap_y::@9 to wrap_y::@5 @@ -3054,54 +3084,54 @@ main::@1: scope:[main] from main::@1 main::@6 to:main::@1 render_sine: scope:[render_sine] from main::@6 [22] phi() - to:render_sine::@1 -render_sine::@1: scope:[render_sine] from render_sine render_sine::@3 - [23] (word) render_sine::xpos#3 ← phi( render_sine/(byte) 0 render_sine::@3/(word) render_sine::xpos#9 ) - [23] (word) render_sine::sin_idx#2 ← phi( render_sine/(byte) 0 render_sine::@3/(word) render_sine::sin_idx#1 ) - [24] if((word) render_sine::sin_idx#2<(const word) SIN_SIZE#0) goto render_sine::@2 - to:render_sine::@return -render_sine::@return: scope:[render_sine] from render_sine::@1 - [25] return - to:@return -render_sine::@2: scope:[render_sine] from render_sine::@1 - [26] (word~) render_sine::$10 ← (word) render_sine::sin_idx#2 << (byte) 1 - [27] (signed word*~) render_sine::$1 ← (const signed word[$200]) sin#0 + (word~) render_sine::$10 - [28] (signed word) render_sine::sin_val#0 ← *((signed word*~) render_sine::$1) - [29] (signed word) wrap_y::y#0 ← (signed word) render_sine::sin_val#0 - [30] call wrap_y - [31] (byte) wrap_y::return#0 ← (byte) wrap_y::return#2 + to:render_sine::@2 +render_sine::@2: scope:[render_sine] from render_sine render_sine::@1 + [23] (word) render_sine::xpos#10 ← phi( render_sine::@1/(word) render_sine::xpos#3 render_sine/(byte) 0 ) + [23] (word) render_sine::sin_idx#10 ← phi( render_sine::@1/(word) render_sine::sin_idx#1 render_sine/(byte) 0 ) + [24] (word~) render_sine::$10 ← (word) render_sine::sin_idx#10 << (byte) 1 + [25] (signed word*~) render_sine::$1 ← (const signed word[$200]) sin#0 + (word~) render_sine::$10 + [26] (signed word) render_sine::sin_val#0 ← *((signed word*~) render_sine::$1) + [27] (signed word) wrap_y::y#0 ← (signed word) render_sine::sin_val#0 + [28] call wrap_y + [29] (byte) wrap_y::return#0 ← (byte) wrap_y::return#2 to:render_sine::@4 render_sine::@4: scope:[render_sine] from render_sine::@2 - [32] (byte) render_sine::ypos#0 ← (byte) wrap_y::return#0 - [33] (word) bitmap_plot::x#0 ← (word) render_sine::xpos#3 - [34] (byte) bitmap_plot::y#0 ← (byte) render_sine::ypos#0 - [35] call bitmap_plot + [30] (byte) render_sine::ypos#0 ← (byte) wrap_y::return#0 + [31] (word) bitmap_plot::x#0 ← (word) render_sine::xpos#10 + [32] (byte) bitmap_plot::y#0 ← (byte) render_sine::ypos#0 + [33] call bitmap_plot to:render_sine::@5 render_sine::@5: scope:[render_sine] from render_sine::@4 - [36] (word~) render_sine::$11 ← (word) render_sine::sin_idx#2 << (byte) 1 - [37] (signed word*~) render_sine::$4 ← (const signed word[$200]) sin2#0 + (word~) render_sine::$11 - [38] (signed word) render_sine::sin2_val#0 ← *((signed word*~) render_sine::$4) - [39] (signed word) wrap_y::y#1 ← (signed word) render_sine::sin2_val#0 + (signed byte) $a - [40] call wrap_y - [41] (byte) wrap_y::return#1 ← (byte) wrap_y::return#2 + [34] (word~) render_sine::$11 ← (word) render_sine::sin_idx#10 << (byte) 1 + [35] (signed word*~) render_sine::$4 ← (const signed word[$200]) sin2#0 + (word~) render_sine::$11 + [36] (signed word) render_sine::sin2_val#0 ← *((signed word*~) render_sine::$4) + [37] (signed word) wrap_y::y#1 ← (signed word) render_sine::sin2_val#0 + (signed byte) $a + [38] call wrap_y + [39] (byte) wrap_y::return#1 ← (byte) wrap_y::return#2 to:render_sine::@6 render_sine::@6: scope:[render_sine] from render_sine::@5 - [42] (byte) render_sine::ypos2#0 ← (byte) wrap_y::return#1 - [43] (word) bitmap_plot::x#1 ← (word) render_sine::xpos#3 - [44] (byte) bitmap_plot::y#1 ← (byte) render_sine::ypos2#0 - [45] call bitmap_plot + [40] (byte) render_sine::ypos2#0 ← (byte) wrap_y::return#1 + [41] (word) bitmap_plot::x#1 ← (word) render_sine::xpos#10 + [42] (byte) bitmap_plot::y#1 ← (byte) render_sine::ypos2#0 + [43] call bitmap_plot to:render_sine::@7 render_sine::@7: scope:[render_sine] from render_sine::@6 - [46] (word) render_sine::xpos#1 ← ++ (word) render_sine::xpos#3 - [47] if((word) render_sine::xpos#1!=(word) $140) goto render_sine::@8 + [44] (word) render_sine::xpos#1 ← ++ (word) render_sine::xpos#10 + [45] if((word) render_sine::xpos#1!=(word) $140) goto render_sine::@8 to:render_sine::@3 render_sine::@8: scope:[render_sine] from render_sine::@7 - [48] phi() + [46] phi() to:render_sine::@3 render_sine::@3: scope:[render_sine] from render_sine::@7 render_sine::@8 - [49] (word) render_sine::xpos#9 ← phi( render_sine::@8/(word) render_sine::xpos#1 render_sine::@7/(byte) 0 ) - [50] (word) render_sine::sin_idx#1 ← ++ (word) render_sine::sin_idx#2 + [47] (word) render_sine::xpos#3 ← phi( render_sine::@8/(word) render_sine::xpos#1 render_sine::@7/(byte) 0 ) + [48] (word) render_sine::sin_idx#1 ← ++ (word) render_sine::sin_idx#10 to:render_sine::@1 +render_sine::@1: scope:[render_sine] from render_sine::@3 + [49] if((word) render_sine::sin_idx#1<(const word) SIN_SIZE#0) goto render_sine::@2 + to:render_sine::@return +render_sine::@return: scope:[render_sine] from render_sine::@1 + [50] return + to:@return bitmap_plot: scope:[bitmap_plot] from render_sine::@4 render_sine::@6 [51] (word) bitmap_plot::x#2 ← phi( render_sine::@6/(word) bitmap_plot::x#1 render_sine::@4/(word) bitmap_plot::x#0 ) [51] (byte) bitmap_plot::y#2 ← phi( render_sine::@6/(byte) bitmap_plot::y#1 render_sine::@4/(byte) bitmap_plot::y#0 ) @@ -3144,34 +3174,34 @@ sin16s_gen2: scope:[sin16s_gen2] from main::@5 to:sin16s_gen2::@3 sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2 [70] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 - to:sin16s_gen2::@1 -sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5 - [71] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word[$200]) sin#0 sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) - [71] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) - [71] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) - [72] if((word) sin16s_gen2::i#2<(const word) SIN_SIZE#0) goto sin16s_gen2::@2 - to:sin16s_gen2::@return -sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 - [73] return - to:@return -sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 - [74] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 - [75] call sin16s - [76] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + to:sin16s_gen2::@2 +sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 sin16s_gen2::@3 + [71] (signed word*) sin16s_gen2::sintab#10 ← phi( sin16s_gen2::@1/(signed word*) sin16s_gen2::sintab#0 sin16s_gen2::@3/(const signed word[$200]) sin#0 ) + [71] (dword) sin16s_gen2::x#6 ← phi( sin16s_gen2::@1/(dword) sin16s_gen2::x#1 sin16s_gen2::@3/(byte) 0 ) + [71] (word) sin16s_gen2::i#6 ← phi( sin16s_gen2::@1/(word) sin16s_gen2::i#1 sin16s_gen2::@3/(byte) 0 ) + [72] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 + [73] call sin16s + [74] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen2::@4 sin16s_gen2::@4: scope:[sin16s_gen2] from sin16s_gen2::@2 - [77] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - [78] call mul16s - [79] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + [75] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + [76] call mul16s + [77] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 to:sin16s_gen2::@5 sin16s_gen2::@5: scope:[sin16s_gen2] from sin16s_gen2::@4 - [80] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - [81] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 - [82] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 - [83] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [84] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 - [85] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 + [78] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + [79] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 + [80] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 + [81] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD + [82] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 + [83] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 to:sin16s_gen2::@1 +sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@5 + [84] if((word) sin16s_gen2::i#1<(const word) SIN_SIZE#0) goto sin16s_gen2::@2 + to:sin16s_gen2::@return +sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 + [85] return + to:@return mul16s: scope:[mul16s] from sin16s_gen2::@4 [86] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [87] call mul16u @@ -3647,14 +3677,14 @@ VARIABLE REGISTER WEIGHTS (signed word) render_sine::sin2_val (signed word) render_sine::sin2_val#0 22.0 (word) render_sine::sin_idx -(word) render_sine::sin_idx#1 22.0 -(word) render_sine::sin_idx#2 2.1153846153846154 +(word) render_sine::sin_idx#1 16.5 +(word) render_sine::sin_idx#10 1.76 (signed word) render_sine::sin_val (signed word) render_sine::sin_val#0 22.0 (word) render_sine::xpos (word) render_sine::xpos#1 11.0 -(word) render_sine::xpos#3 2.0 -(word) render_sine::xpos#9 11.0 +(word) render_sine::xpos#10 2.0952380952380953 +(word) render_sine::xpos#3 7.333333333333333 (byte) render_sine::ypos (byte) render_sine::ypos#0 11.0 (byte) render_sine::ypos2 @@ -3698,20 +3728,20 @@ VARIABLE REGISTER WEIGHTS (word~) sin16s_gen2::$9 11.0 (signed word) sin16s_gen2::ampl (word) sin16s_gen2::i -(word) sin16s_gen2::i#1 22.0 -(word) sin16s_gen2::i#2 2.5384615384615383 +(word) sin16s_gen2::i#1 16.5 +(word) sin16s_gen2::i#6 1.8333333333333333 (signed word) sin16s_gen2::max (signed word) sin16s_gen2::min (signed word) sin16s_gen2::offs (signed word*) sin16s_gen2::sintab -(signed word*) sin16s_gen2::sintab#0 7.333333333333333 -(signed word*) sin16s_gen2::sintab#2 3.0 +(signed word*) sin16s_gen2::sintab#0 5.5 +(signed word*) sin16s_gen2::sintab#10 3.3000000000000003 (dword) sin16s_gen2::step (dword) sin16s_gen2::step#0 0.8666666666666666 (word) sin16s_gen2::wavelength (dword) sin16s_gen2::x -(dword) sin16s_gen2::x#1 11.0 -(dword) sin16s_gen2::x#2 2.75 +(dword) sin16s_gen2::x#1 7.333333333333333 +(dword) sin16s_gen2::x#6 3.0 (signed word[$200]) sin2 (byte()) wrap_y((signed word) wrap_y::y) (byte) wrap_y::return @@ -3729,14 +3759,14 @@ VARIABLE REGISTER WEIGHTS Not consolidating phi with different size mul16u::mb#0 mul16u::b#1 Initial phi equivalence classes -[ render_sine::sin_idx#2 render_sine::sin_idx#1 ] -[ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] +[ render_sine::sin_idx#10 render_sine::sin_idx#1 ] +[ render_sine::xpos#10 render_sine::xpos#3 render_sine::xpos#1 ] [ bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#0 ] [ bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 ] -[ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -[ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -[ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +[ sin16s_gen2::i#6 sin16s_gen2::i#1 ] +[ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +[ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] [ mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] @@ -3820,14 +3850,14 @@ Added variable bitmap_init::$4 to zero page equivalence class [ bitmap_init::$4 Added variable bitmap_init::$5 to zero page equivalence class [ bitmap_init::$5 ] Added variable bitmap_init::$6 to zero page equivalence class [ bitmap_init::$6 ] Complete equivalence classes -[ render_sine::sin_idx#2 render_sine::sin_idx#1 ] -[ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] +[ render_sine::sin_idx#10 render_sine::sin_idx#1 ] +[ render_sine::xpos#10 render_sine::xpos#3 render_sine::xpos#1 ] [ bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#0 ] [ bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 ] -[ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -[ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -[ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +[ sin16s_gen2::i#6 sin16s_gen2::i#1 ] +[ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +[ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] [ mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] @@ -3910,14 +3940,14 @@ Complete equivalence classes [ bitmap_init::$4 ] [ bitmap_init::$5 ] [ bitmap_init::$6 ] -Allocated zp ZP_WORD:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] -Allocated zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] +Allocated zp ZP_WORD:2 [ render_sine::sin_idx#10 render_sine::sin_idx#1 ] +Allocated zp ZP_WORD:4 [ render_sine::xpos#10 render_sine::xpos#3 render_sine::xpos#1 ] Allocated zp ZP_BYTE:6 [ bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#0 ] Allocated zp ZP_WORD:7 [ bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] Allocated zp ZP_WORD:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 ] -Allocated zp ZP_WORD:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -Allocated zp ZP_DWORD:13 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -Allocated zp ZP_WORD:17 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +Allocated zp ZP_WORD:11 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] +Allocated zp ZP_DWORD:13 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +Allocated zp ZP_WORD:17 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] Allocated zp ZP_DWORD:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] Allocated zp ZP_WORD:23 [ mul16u::b#1 ] Allocated zp ZP_WORD:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] @@ -4157,45 +4187,34 @@ render_sine: { .label ypos2 = $51 .label xpos = 4 .label sin_idx = 2 - // [23] phi from render_sine to render_sine::@1 [phi:render_sine->render_sine::@1] - b1_from_render_sine: - // [23] phi (word) render_sine::xpos#3 = (byte) 0 [phi:render_sine->render_sine::@1#0] -- vwuz1=vbuc1 + // [23] phi from render_sine to render_sine::@2 [phi:render_sine->render_sine::@2] + b2_from_render_sine: + // [23] phi (word) render_sine::xpos#10 = (byte) 0 [phi:render_sine->render_sine::@2#0] -- vwuz1=vbuc1 lda #<0 sta xpos lda #>0 sta xpos+1 - // [23] phi (word) render_sine::sin_idx#2 = (byte) 0 [phi:render_sine->render_sine::@1#1] -- vwuz1=vbuc1 + // [23] phi (word) render_sine::sin_idx#10 = (byte) 0 [phi:render_sine->render_sine::@2#1] -- vwuz1=vbuc1 lda #<0 sta sin_idx lda #>0 sta sin_idx+1 - jmp b1 - // render_sine::@1 - b1: - // [24] if((word) render_sine::sin_idx#2<(const word) SIN_SIZE#0) goto render_sine::@2 -- vwuz1_lt_vwuc1_then_la1 - lda sin_idx+1 - cmp #>SIN_SIZE - bcc b2 - bne !+ - lda sin_idx - cmp #render_sine::@2] + b2_from_b1: + // [23] phi (word) render_sine::xpos#10 = (word) render_sine::xpos#3 [phi:render_sine::@1->render_sine::@2#0] -- register_copy + // [23] phi (word) render_sine::sin_idx#10 = (word) render_sine::sin_idx#1 [phi:render_sine::@1->render_sine::@2#1] -- register_copy + jmp b2 // render_sine::@2 b2: - // [26] (word~) render_sine::$10 ← (word) render_sine::sin_idx#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [24] (word~) render_sine::$10 ← (word) render_sine::sin_idx#10 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda sin_idx asl sta _10 lda sin_idx+1 rol sta _10+1 - // [27] (signed word*~) render_sine::$1 ← (const signed word[$200]) sin#0 + (word~) render_sine::$10 -- pwsz1=pwsc1_plus_vwuz2 + // [25] (signed word*~) render_sine::$1 ← (const signed word[$200]) sin#0 + (word~) render_sine::$10 -- pwsz1=pwsc1_plus_vwuz2 lda _10 clc adc #sin sta _1+1 - // [28] (signed word) render_sine::sin_val#0 ← *((signed word*~) render_sine::$1) -- vwsz1=_deref_pwsz2 + // [26] (signed word) render_sine::sin_val#0 ← *((signed word*~) render_sine::$1) -- vwsz1=_deref_pwsz2 ldy #0 lda (_1),y sta sin_val iny lda (_1),y sta sin_val+1 - // [29] (signed word) wrap_y::y#0 ← (signed word) render_sine::sin_val#0 -- vwsz1=vwsz2 + // [27] (signed word) wrap_y::y#0 ← (signed word) render_sine::sin_val#0 -- vwsz1=vwsz2 lda sin_val sta wrap_y.y lda sin_val+1 sta wrap_y.y+1 - // [30] call wrap_y + // [28] call wrap_y // [58] phi from render_sine::@2 to wrap_y [phi:render_sine::@2->wrap_y] wrap_y_from_b2: // [58] phi (signed word) wrap_y::y#9 = (signed word) wrap_y::y#0 [phi:render_sine::@2->wrap_y#0] -- register_copy jsr wrap_y - // [31] (byte) wrap_y::return#0 ← (byte) wrap_y::return#2 -- vbuz1=vbuz2 + // [29] (byte) wrap_y::return#0 ← (byte) wrap_y::return#2 -- vbuz1=vbuz2 lda wrap_y.return_2 sta wrap_y.return jmp b4 // render_sine::@4 b4: - // [32] (byte) render_sine::ypos#0 ← (byte) wrap_y::return#0 -- vbuz1=vbuz2 + // [30] (byte) render_sine::ypos#0 ← (byte) wrap_y::return#0 -- vbuz1=vbuz2 lda wrap_y.return sta ypos - // [33] (word) bitmap_plot::x#0 ← (word) render_sine::xpos#3 -- vwuz1=vwuz2 + // [31] (word) bitmap_plot::x#0 ← (word) render_sine::xpos#10 -- vwuz1=vwuz2 lda xpos sta bitmap_plot.x lda xpos+1 sta bitmap_plot.x+1 - // [34] (byte) bitmap_plot::y#0 ← (byte) render_sine::ypos#0 -- vbuz1=vbuz2 + // [32] (byte) bitmap_plot::y#0 ← (byte) render_sine::ypos#0 -- vbuz1=vbuz2 lda ypos sta bitmap_plot.y - // [35] call bitmap_plot + // [33] call bitmap_plot // [51] phi from render_sine::@4 to bitmap_plot [phi:render_sine::@4->bitmap_plot] bitmap_plot_from_b4: // [51] phi (word) bitmap_plot::x#2 = (word) bitmap_plot::x#0 [phi:render_sine::@4->bitmap_plot#0] -- register_copy @@ -4246,14 +4265,14 @@ render_sine: { jmp b5 // render_sine::@5 b5: - // [36] (word~) render_sine::$11 ← (word) render_sine::sin_idx#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [34] (word~) render_sine::$11 ← (word) render_sine::sin_idx#10 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda sin_idx asl sta _11 lda sin_idx+1 rol sta _11+1 - // [37] (signed word*~) render_sine::$4 ← (const signed word[$200]) sin2#0 + (word~) render_sine::$11 -- pwsz1=pwsc1_plus_vwuz2 + // [35] (signed word*~) render_sine::$4 ← (const signed word[$200]) sin2#0 + (word~) render_sine::$11 -- pwsz1=pwsc1_plus_vwuz2 lda _11 clc adc #sin2 sta _4+1 - // [38] (signed word) render_sine::sin2_val#0 ← *((signed word*~) render_sine::$4) -- vwsz1=_deref_pwsz2 + // [36] (signed word) render_sine::sin2_val#0 ← *((signed word*~) render_sine::$4) -- vwsz1=_deref_pwsz2 ldy #0 lda (_4),y sta sin2_val iny lda (_4),y sta sin2_val+1 - // [39] (signed word) wrap_y::y#1 ← (signed word) render_sine::sin2_val#0 + (signed byte) $a -- vwsz1=vwsz2_plus_vbsc1 + // [37] (signed word) wrap_y::y#1 ← (signed word) render_sine::sin2_val#0 + (signed byte) $a -- vwsz1=vwsz2_plus_vbsc1 lda sin2_val clc adc #<$a @@ -4276,29 +4295,29 @@ render_sine: { lda sin2_val+1 adc #>$a sta wrap_y.y+1 - // [40] call wrap_y + // [38] call wrap_y // [58] phi from render_sine::@5 to wrap_y [phi:render_sine::@5->wrap_y] wrap_y_from_b5: // [58] phi (signed word) wrap_y::y#9 = (signed word) wrap_y::y#1 [phi:render_sine::@5->wrap_y#0] -- register_copy jsr wrap_y - // [41] (byte) wrap_y::return#1 ← (byte) wrap_y::return#2 -- vbuz1=vbuz2 + // [39] (byte) wrap_y::return#1 ← (byte) wrap_y::return#2 -- vbuz1=vbuz2 lda wrap_y.return_2 sta wrap_y.return_1 jmp b6 // render_sine::@6 b6: - // [42] (byte) render_sine::ypos2#0 ← (byte) wrap_y::return#1 -- vbuz1=vbuz2 + // [40] (byte) render_sine::ypos2#0 ← (byte) wrap_y::return#1 -- vbuz1=vbuz2 lda wrap_y.return_1 sta ypos2 - // [43] (word) bitmap_plot::x#1 ← (word) render_sine::xpos#3 -- vwuz1=vwuz2 + // [41] (word) bitmap_plot::x#1 ← (word) render_sine::xpos#10 -- vwuz1=vwuz2 lda xpos sta bitmap_plot.x lda xpos+1 sta bitmap_plot.x+1 - // [44] (byte) bitmap_plot::y#1 ← (byte) render_sine::ypos2#0 -- vbuz1=vbuz2 + // [42] (byte) bitmap_plot::y#1 ← (byte) render_sine::ypos2#0 -- vbuz1=vbuz2 lda ypos2 sta bitmap_plot.y - // [45] call bitmap_plot + // [43] call bitmap_plot // [51] phi from render_sine::@6 to bitmap_plot [phi:render_sine::@6->bitmap_plot] bitmap_plot_from_b6: // [51] phi (word) bitmap_plot::x#2 = (word) bitmap_plot::x#1 [phi:render_sine::@6->bitmap_plot#0] -- register_copy @@ -4307,47 +4326,59 @@ render_sine: { jmp b7 // render_sine::@7 b7: - // [46] (word) render_sine::xpos#1 ← ++ (word) render_sine::xpos#3 -- vwuz1=_inc_vwuz1 + // [44] (word) render_sine::xpos#1 ← ++ (word) render_sine::xpos#10 -- vwuz1=_inc_vwuz1 inc xpos bne !+ inc xpos+1 !: - // [47] if((word) render_sine::xpos#1!=(word) $140) goto render_sine::@8 -- vwuz1_neq_vwuc1_then_la1 + // [45] if((word) render_sine::xpos#1!=(word) $140) goto render_sine::@8 -- vwuz1_neq_vwuc1_then_la1 lda xpos+1 cmp #>$140 bne b8_from_b7 lda xpos cmp #<$140 bne b8_from_b7 - // [49] phi from render_sine::@7 to render_sine::@3 [phi:render_sine::@7->render_sine::@3] + // [47] phi from render_sine::@7 to render_sine::@3 [phi:render_sine::@7->render_sine::@3] b3_from_b7: - // [49] phi (word) render_sine::xpos#9 = (byte) 0 [phi:render_sine::@7->render_sine::@3#0] -- vwuz1=vbuc1 + // [47] phi (word) render_sine::xpos#3 = (byte) 0 [phi:render_sine::@7->render_sine::@3#0] -- vwuz1=vbuc1 lda #<0 sta xpos lda #>0 sta xpos+1 jmp b3 - // [48] phi from render_sine::@7 to render_sine::@8 [phi:render_sine::@7->render_sine::@8] + // [46] phi from render_sine::@7 to render_sine::@8 [phi:render_sine::@7->render_sine::@8] b8_from_b7: jmp b8 // render_sine::@8 b8: - // [49] phi from render_sine::@8 to render_sine::@3 [phi:render_sine::@8->render_sine::@3] + // [47] phi from render_sine::@8 to render_sine::@3 [phi:render_sine::@8->render_sine::@3] b3_from_b8: - // [49] phi (word) render_sine::xpos#9 = (word) render_sine::xpos#1 [phi:render_sine::@8->render_sine::@3#0] -- register_copy + // [47] phi (word) render_sine::xpos#3 = (word) render_sine::xpos#1 [phi:render_sine::@8->render_sine::@3#0] -- register_copy jmp b3 // render_sine::@3 b3: - // [50] (word) render_sine::sin_idx#1 ← ++ (word) render_sine::sin_idx#2 -- vwuz1=_inc_vwuz1 + // [48] (word) render_sine::sin_idx#1 ← ++ (word) render_sine::sin_idx#10 -- vwuz1=_inc_vwuz1 inc sin_idx bne !+ inc sin_idx+1 !: - // [23] phi from render_sine::@3 to render_sine::@1 [phi:render_sine::@3->render_sine::@1] - b1_from_b3: - // [23] phi (word) render_sine::xpos#3 = (word) render_sine::xpos#9 [phi:render_sine::@3->render_sine::@1#0] -- register_copy - // [23] phi (word) render_sine::sin_idx#2 = (word) render_sine::sin_idx#1 [phi:render_sine::@3->render_sine::@1#1] -- register_copy jmp b1 + // render_sine::@1 + b1: + // [49] if((word) render_sine::sin_idx#1<(const word) SIN_SIZE#0) goto render_sine::@2 -- vwuz1_lt_vwuc1_then_la1 + lda sin_idx+1 + cmp #>SIN_SIZE + bcc b2_from_b1 + bne !+ + lda sin_idx + cmp #sin16s_gen2::@1] - b1_from_b3: - // [71] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[$200]) sin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [71] phi from sin16s_gen2::@3 to sin16s_gen2::@2 [phi:sin16s_gen2::@3->sin16s_gen2::@2] + b2_from_b3: + // [71] phi (signed word*) sin16s_gen2::sintab#10 = (const signed word[$200]) sin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#0] -- pwsz1=pwsc1 lda #sin sta sintab+1 - // [71] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 + // [71] phi (dword) sin16s_gen2::x#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [71] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [71] phi (word) sin16s_gen2::i#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen2::@1 - b1: - // [72] if((word) sin16s_gen2::i#2<(const word) SIN_SIZE#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>SIN_SIZE - bcc b2 - bne !+ - lda i - cmp #sin16s_gen2::@2] + b2_from_b1: + // [71] phi (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@1->sin16s_gen2::@2#0] -- register_copy + // [71] phi (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#1] -- register_copy + // [71] phi (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#2] -- register_copy + jmp b2 // sin16s_gen2::@2 b2: - // [74] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [72] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -4551,9 +4571,9 @@ sin16s_gen2: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [75] call sin16s + // [73] call sin16s jsr sin16s - // [76] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 + // [74] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 lda sin16s.return_1 sta sin16s.return lda sin16s.return_1+1 @@ -4561,14 +4581,14 @@ sin16s_gen2: { jmp b4 // sin16s_gen2::@4 b4: - // [77] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 + // [75] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 lda sin16s.return sta mul16s.a lda sin16s.return+1 sta mul16s.a+1 - // [78] call mul16s + // [76] call mul16s jsr mul16s - // [79] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 + // [77] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 lda mul16s.return sta mul16s.return_2 lda mul16s.return+1 @@ -4580,7 +4600,7 @@ sin16s_gen2: { jmp b5 // sin16s_gen2::@5 b5: - // [80] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 + // [78] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 lda mul16s.return_2 sta _6 lda mul16s.return_2+1 @@ -4589,19 +4609,19 @@ sin16s_gen2: { sta _6+2 lda mul16s.return_2+3 sta _6+3 - // [81] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [79] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda _6+2 sta _9 lda _6+3 sta _9+1 - // [82] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [80] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda _9 sta (sintab),y iny lda _9+1 sta (sintab),y - // [83] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [81] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -4609,7 +4629,7 @@ sin16s_gen2: { bcc !+ inc sintab+1 !: - // [84] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [82] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -4623,17 +4643,29 @@ sin16s_gen2: { lda x+3 adc step+3 sta x+3 - // [85] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 + // [83] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [71] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] - b1_from_b5: - // [71] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [71] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [71] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen2::@1 + b1: + // [84] if((word) sin16s_gen2::i#1<(const word) SIN_SIZE#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>SIN_SIZE + bcc b2_from_b1 + bne !+ + lda i + cmp #=(signed word) $c8) goto wrap_y::@2 [ wrap_y::y#4 ] ( main:2::render_sine:20::wrap_y:30 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#4 ] main:2::render_sine:20::wrap_y:40 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#4 ] ) always clobbers reg byte a -Statement [62] if((signed word) wrap_y::y#6<(signed byte) 0) goto wrap_y::@4 [ wrap_y::y#6 ] ( main:2::render_sine:20::wrap_y:30 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#6 ] main:2::render_sine:20::wrap_y:40 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#6 ] ) always clobbers reg byte a -Statement [63] (byte) wrap_y::return#2 ← (byte)(signed word) wrap_y::y#6 [ wrap_y::return#2 ] ( main:2::render_sine:20::wrap_y:30 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#2 ] main:2::render_sine:20::wrap_y:40 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#2 ] ) always clobbers reg byte a -Statement [65] (signed word) wrap_y::y#3 ← (signed word) wrap_y::y#6 + (signed word) $c8 [ wrap_y::y#3 ] ( main:2::render_sine:20::wrap_y:30 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#3 ] main:2::render_sine:20::wrap_y:40 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#3 ] ) always clobbers reg byte a -Statement [66] (signed word) wrap_y::y#2 ← (signed word) wrap_y::y#4 - (signed word) $c8 [ wrap_y::y#2 ] ( main:2::render_sine:20::wrap_y:30 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#2 ] main:2::render_sine:20::wrap_y:40 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#2 ] ) always clobbers reg byte a +Statement [45] if((word) render_sine::xpos#1!=(word) $140) goto render_sine::@8 [ render_sine::sin_idx#10 render_sine::xpos#1 ] ( main:2::render_sine:20 [ render_sine::sin_idx#10 render_sine::xpos#1 ] ) always clobbers reg byte a +Statement [49] if((word) render_sine::sin_idx#1<(const word) SIN_SIZE#0) goto render_sine::@2 [ render_sine::sin_idx#1 render_sine::xpos#3 ] ( main:2::render_sine:20 [ render_sine::sin_idx#1 render_sine::xpos#3 ] ) always clobbers reg byte a +Statement [52] (word) bitmap_plot::plotter#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#2) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#2) [ bitmap_plot::x#2 bitmap_plot::plotter#0 ] ( main:2::render_sine:20::bitmap_plot:33 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::x#2 bitmap_plot::plotter#0 ] main:2::render_sine:20::bitmap_plot:43 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::x#2 bitmap_plot::plotter#0 ] ) always clobbers reg byte a +Statement [53] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#2 & (word) $fff8 [ bitmap_plot::x#2 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::render_sine:20::bitmap_plot:33 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::x#2 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::render_sine:20::bitmap_plot:43 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::x#2 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a +Statement [54] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#2 bitmap_plot::plotter#1 ] ( main:2::render_sine:20::bitmap_plot:33 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::x#2 bitmap_plot::plotter#1 ] main:2::render_sine:20::bitmap_plot:43 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::x#2 bitmap_plot::plotter#1 ] ) always clobbers reg byte a +Statement [55] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#2 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::render_sine:20::bitmap_plot:33 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::render_sine:20::bitmap_plot:43 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a +Statement [56] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::render_sine:20::bitmap_plot:33 [ render_sine::sin_idx#10 render_sine::xpos#10 ] main:2::render_sine:20::bitmap_plot:43 [ render_sine::sin_idx#10 render_sine::xpos#10 ] ) always clobbers reg byte a reg byte y +Statement [60] if((signed word) wrap_y::y#4>=(signed word) $c8) goto wrap_y::@2 [ wrap_y::y#4 ] ( main:2::render_sine:20::wrap_y:28 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#4 ] main:2::render_sine:20::wrap_y:38 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#4 ] ) always clobbers reg byte a +Statement [62] if((signed word) wrap_y::y#6<(signed byte) 0) goto wrap_y::@4 [ wrap_y::y#6 ] ( main:2::render_sine:20::wrap_y:28 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#6 ] main:2::render_sine:20::wrap_y:38 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#6 ] ) always clobbers reg byte a +Statement [63] (byte) wrap_y::return#2 ← (byte)(signed word) wrap_y::y#6 [ wrap_y::return#2 ] ( main:2::render_sine:20::wrap_y:28 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::return#2 ] main:2::render_sine:20::wrap_y:38 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::return#2 ] ) always clobbers reg byte a +Statement [65] (signed word) wrap_y::y#3 ← (signed word) wrap_y::y#6 + (signed word) $c8 [ wrap_y::y#3 ] ( main:2::render_sine:20::wrap_y:28 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#3 ] main:2::render_sine:20::wrap_y:38 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#3 ] ) always clobbers reg byte a +Statement [66] (signed word) wrap_y::y#2 ← (signed word) wrap_y::y#4 - (signed word) $c8 [ wrap_y::y#2 ] ( main:2::render_sine:20::wrap_y:28 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#2 ] main:2::render_sine:20::wrap_y:38 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#2 ] ) always clobbers reg byte a Statement [69] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:2::sin16s_gen2:18 [ div32u16u::return#2 ] ) always clobbers reg byte a Statement [70] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 ] ) always clobbers reg byte a -Statement [72] if((word) sin16s_gen2::i#2<(const word) SIN_SIZE#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [74] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [76] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [77] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 ] ) always clobbers reg byte a -Statement [79] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a -Statement [80] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a -Statement [81] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a -Statement [82] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [83] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [84] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [86] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#1 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#1 ] ) always clobbers reg byte a -Statement [88] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::return#2 ] ) always clobbers reg byte a -Statement [89] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16s::m#0 ] ) always clobbers reg byte a -Statement [90] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 [ mul16s::m#0 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 ] ) always clobbers reg byte a -Statement [91] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$9 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a -Statement [92] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a -Statement [93] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#1 ] ) always clobbers reg byte a -Statement [95] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [99] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [72] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [74] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ) always clobbers reg byte a +Statement [75] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 ] ) always clobbers reg byte a +Statement [77] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ) always clobbers reg byte a +Statement [78] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ) always clobbers reg byte a +Statement [79] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ) always clobbers reg byte a +Statement [80] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ) always clobbers reg byte a reg byte y +Statement [81] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [82] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [84] if((word) sin16s_gen2::i#1<(const word) SIN_SIZE#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [86] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#1 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::a#1 ] ) always clobbers reg byte a +Statement [88] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::return#2 ] ) always clobbers reg byte a +Statement [89] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16s::m#0 ] ) always clobbers reg byte a +Statement [90] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 [ mul16s::m#0 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#0 ] ) always clobbers reg byte a +Statement [91] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$9 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a +Statement [92] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a +Statement [93] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#1 ] ) always clobbers reg byte a +Statement [95] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#0 ] ) always clobbers reg byte a +Statement [99] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::sin16s_gen2:18::mul16s:76::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ sin16s::isUpper#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:46 [ mulu16_sel::select#5 ] -Statement [101] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [103] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [107] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [108] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [110] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [111] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [113] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [101] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen2:18::mul16s:76::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [103] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen2:18::mul16s:76::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [107] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [108] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#1 ] ) always clobbers reg byte a +Statement [110] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [111] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [113] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:35 [ sin16s::isUpper#2 ] -Statement [114] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [115] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [116] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [118] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [119] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [120] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [121] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [123] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [124] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [125] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [127] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [128] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [129] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [130] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [131] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [133] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [134] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [135] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [136] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [138] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [139] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [140] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [141] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [143] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [146] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [148] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [149] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [151] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [152] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [153] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [154] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [114] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [115] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [116] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [118] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [119] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [120] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [121] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [123] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [124] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [125] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [127] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [128] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [129] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [130] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [131] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [133] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [134] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [135] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [136] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [138] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [139] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [140] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [141] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [143] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [146] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#5 ] ) always clobbers reg byte a +Statement [148] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [149] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [151] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [152] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [153] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [154] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a Statement [158] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [160] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a @@ -5855,87 +5887,87 @@ Statement [8] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2 [ ] ) Statement [10] *((const byte*) CIA2_PORT_A#0) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [11] *((const byte*) D016#0) ← (const byte) VIC_CSEL#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [13] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [24] if((word) render_sine::sin_idx#2<(const word) SIN_SIZE#0) goto render_sine::@2 [ render_sine::sin_idx#2 render_sine::xpos#3 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 ] ) always clobbers reg byte a -Statement [26] (word~) render_sine::$10 ← (word) render_sine::sin_idx#2 << (byte) 1 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$10 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$10 ] ) always clobbers reg byte a -Statement [27] (signed word*~) render_sine::$1 ← (const signed word[$200]) sin#0 + (word~) render_sine::$10 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$1 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$1 ] ) always clobbers reg byte a -Statement [28] (signed word) render_sine::sin_val#0 ← *((signed word*~) render_sine::$1) [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::sin_val#0 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::sin_val#0 ] ) always clobbers reg byte a reg byte y -Statement [29] (signed word) wrap_y::y#0 ← (signed word) render_sine::sin_val#0 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#0 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#0 ] ) always clobbers reg byte a -Statement [33] (word) bitmap_plot::x#0 ← (word) render_sine::xpos#3 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::ypos#0 bitmap_plot::x#0 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::ypos#0 bitmap_plot::x#0 ] ) always clobbers reg byte a -Statement [36] (word~) render_sine::$11 ← (word) render_sine::sin_idx#2 << (byte) 1 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$11 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$11 ] ) always clobbers reg byte a -Statement [37] (signed word*~) render_sine::$4 ← (const signed word[$200]) sin2#0 + (word~) render_sine::$11 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$4 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$4 ] ) always clobbers reg byte a -Statement [38] (signed word) render_sine::sin2_val#0 ← *((signed word*~) render_sine::$4) [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::sin2_val#0 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::sin2_val#0 ] ) always clobbers reg byte a reg byte y -Statement [39] (signed word) wrap_y::y#1 ← (signed word) render_sine::sin2_val#0 + (signed byte) $a [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#1 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#1 ] ) always clobbers reg byte a -Statement [43] (word) bitmap_plot::x#1 ← (word) render_sine::xpos#3 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::ypos2#0 bitmap_plot::x#1 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::ypos2#0 bitmap_plot::x#1 ] ) always clobbers reg byte a -Statement [47] if((word) render_sine::xpos#1!=(word) $140) goto render_sine::@8 [ render_sine::sin_idx#2 render_sine::xpos#1 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#1 ] ) always clobbers reg byte a -Statement [52] (word) bitmap_plot::plotter#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#2) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#2) [ bitmap_plot::x#2 bitmap_plot::plotter#0 ] ( main:2::render_sine:20::bitmap_plot:35 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#2 bitmap_plot::plotter#0 ] main:2::render_sine:20::bitmap_plot:45 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#2 bitmap_plot::plotter#0 ] ) always clobbers reg byte a -Statement [53] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#2 & (word) $fff8 [ bitmap_plot::x#2 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::render_sine:20::bitmap_plot:35 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#2 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::render_sine:20::bitmap_plot:45 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#2 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a -Statement [54] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#2 bitmap_plot::plotter#1 ] ( main:2::render_sine:20::bitmap_plot:35 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#2 bitmap_plot::plotter#1 ] main:2::render_sine:20::bitmap_plot:45 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#2 bitmap_plot::plotter#1 ] ) always clobbers reg byte a -Statement [55] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#2 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::render_sine:20::bitmap_plot:35 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::render_sine:20::bitmap_plot:45 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a -Statement [56] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::render_sine:20::bitmap_plot:35 [ render_sine::sin_idx#2 render_sine::xpos#3 ] main:2::render_sine:20::bitmap_plot:45 [ render_sine::sin_idx#2 render_sine::xpos#3 ] ) always clobbers reg byte a reg byte y -Statement [60] if((signed word) wrap_y::y#4>=(signed word) $c8) goto wrap_y::@2 [ wrap_y::y#4 ] ( main:2::render_sine:20::wrap_y:30 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#4 ] main:2::render_sine:20::wrap_y:40 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#4 ] ) always clobbers reg byte a -Statement [62] if((signed word) wrap_y::y#6<(signed byte) 0) goto wrap_y::@4 [ wrap_y::y#6 ] ( main:2::render_sine:20::wrap_y:30 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#6 ] main:2::render_sine:20::wrap_y:40 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#6 ] ) always clobbers reg byte a -Statement [63] (byte) wrap_y::return#2 ← (byte)(signed word) wrap_y::y#6 [ wrap_y::return#2 ] ( main:2::render_sine:20::wrap_y:30 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#2 ] main:2::render_sine:20::wrap_y:40 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#2 ] ) always clobbers reg byte a -Statement [65] (signed word) wrap_y::y#3 ← (signed word) wrap_y::y#6 + (signed word) $c8 [ wrap_y::y#3 ] ( main:2::render_sine:20::wrap_y:30 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#3 ] main:2::render_sine:20::wrap_y:40 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#3 ] ) always clobbers reg byte a -Statement [66] (signed word) wrap_y::y#2 ← (signed word) wrap_y::y#4 - (signed word) $c8 [ wrap_y::y#2 ] ( main:2::render_sine:20::wrap_y:30 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#2 ] main:2::render_sine:20::wrap_y:40 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#2 ] ) always clobbers reg byte a +Statement [24] (word~) render_sine::$10 ← (word) render_sine::sin_idx#10 << (byte) 1 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::$10 ] ( main:2::render_sine:20 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::$10 ] ) always clobbers reg byte a +Statement [25] (signed word*~) render_sine::$1 ← (const signed word[$200]) sin#0 + (word~) render_sine::$10 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::$1 ] ( main:2::render_sine:20 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::$1 ] ) always clobbers reg byte a +Statement [26] (signed word) render_sine::sin_val#0 ← *((signed word*~) render_sine::$1) [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::sin_val#0 ] ( main:2::render_sine:20 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::sin_val#0 ] ) always clobbers reg byte a reg byte y +Statement [27] (signed word) wrap_y::y#0 ← (signed word) render_sine::sin_val#0 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#0 ] ( main:2::render_sine:20 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#0 ] ) always clobbers reg byte a +Statement [31] (word) bitmap_plot::x#0 ← (word) render_sine::xpos#10 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::ypos#0 bitmap_plot::x#0 ] ( main:2::render_sine:20 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::ypos#0 bitmap_plot::x#0 ] ) always clobbers reg byte a +Statement [34] (word~) render_sine::$11 ← (word) render_sine::sin_idx#10 << (byte) 1 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::$11 ] ( main:2::render_sine:20 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::$11 ] ) always clobbers reg byte a +Statement [35] (signed word*~) render_sine::$4 ← (const signed word[$200]) sin2#0 + (word~) render_sine::$11 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::$4 ] ( main:2::render_sine:20 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::$4 ] ) always clobbers reg byte a +Statement [36] (signed word) render_sine::sin2_val#0 ← *((signed word*~) render_sine::$4) [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::sin2_val#0 ] ( main:2::render_sine:20 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::sin2_val#0 ] ) always clobbers reg byte a reg byte y +Statement [37] (signed word) wrap_y::y#1 ← (signed word) render_sine::sin2_val#0 + (signed byte) $a [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#1 ] ( main:2::render_sine:20 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#1 ] ) always clobbers reg byte a +Statement [41] (word) bitmap_plot::x#1 ← (word) render_sine::xpos#10 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::ypos2#0 bitmap_plot::x#1 ] ( main:2::render_sine:20 [ render_sine::sin_idx#10 render_sine::xpos#10 render_sine::ypos2#0 bitmap_plot::x#1 ] ) always clobbers reg byte a +Statement [45] if((word) render_sine::xpos#1!=(word) $140) goto render_sine::@8 [ render_sine::sin_idx#10 render_sine::xpos#1 ] ( main:2::render_sine:20 [ render_sine::sin_idx#10 render_sine::xpos#1 ] ) always clobbers reg byte a +Statement [49] if((word) render_sine::sin_idx#1<(const word) SIN_SIZE#0) goto render_sine::@2 [ render_sine::sin_idx#1 render_sine::xpos#3 ] ( main:2::render_sine:20 [ render_sine::sin_idx#1 render_sine::xpos#3 ] ) always clobbers reg byte a +Statement [52] (word) bitmap_plot::plotter#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#2) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#2) [ bitmap_plot::x#2 bitmap_plot::plotter#0 ] ( main:2::render_sine:20::bitmap_plot:33 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::x#2 bitmap_plot::plotter#0 ] main:2::render_sine:20::bitmap_plot:43 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::x#2 bitmap_plot::plotter#0 ] ) always clobbers reg byte a +Statement [53] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#2 & (word) $fff8 [ bitmap_plot::x#2 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::render_sine:20::bitmap_plot:33 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::x#2 bitmap_plot::plotter#0 bitmap_plot::$1 ] main:2::render_sine:20::bitmap_plot:43 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::x#2 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a +Statement [54] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#2 bitmap_plot::plotter#1 ] ( main:2::render_sine:20::bitmap_plot:33 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::x#2 bitmap_plot::plotter#1 ] main:2::render_sine:20::bitmap_plot:43 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::x#2 bitmap_plot::plotter#1 ] ) always clobbers reg byte a +Statement [55] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#2 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::render_sine:20::bitmap_plot:33 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:2::render_sine:20::bitmap_plot:43 [ render_sine::sin_idx#10 render_sine::xpos#10 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a +Statement [56] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::render_sine:20::bitmap_plot:33 [ render_sine::sin_idx#10 render_sine::xpos#10 ] main:2::render_sine:20::bitmap_plot:43 [ render_sine::sin_idx#10 render_sine::xpos#10 ] ) always clobbers reg byte a reg byte y +Statement [60] if((signed word) wrap_y::y#4>=(signed word) $c8) goto wrap_y::@2 [ wrap_y::y#4 ] ( main:2::render_sine:20::wrap_y:28 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#4 ] main:2::render_sine:20::wrap_y:38 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#4 ] ) always clobbers reg byte a +Statement [62] if((signed word) wrap_y::y#6<(signed byte) 0) goto wrap_y::@4 [ wrap_y::y#6 ] ( main:2::render_sine:20::wrap_y:28 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#6 ] main:2::render_sine:20::wrap_y:38 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#6 ] ) always clobbers reg byte a +Statement [63] (byte) wrap_y::return#2 ← (byte)(signed word) wrap_y::y#6 [ wrap_y::return#2 ] ( main:2::render_sine:20::wrap_y:28 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::return#2 ] main:2::render_sine:20::wrap_y:38 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::return#2 ] ) always clobbers reg byte a +Statement [65] (signed word) wrap_y::y#3 ← (signed word) wrap_y::y#6 + (signed word) $c8 [ wrap_y::y#3 ] ( main:2::render_sine:20::wrap_y:28 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#3 ] main:2::render_sine:20::wrap_y:38 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#3 ] ) always clobbers reg byte a +Statement [66] (signed word) wrap_y::y#2 ← (signed word) wrap_y::y#4 - (signed word) $c8 [ wrap_y::y#2 ] ( main:2::render_sine:20::wrap_y:28 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#2 ] main:2::render_sine:20::wrap_y:38 [ render_sine::sin_idx#10 render_sine::xpos#10 wrap_y::y#2 ] ) always clobbers reg byte a Statement [69] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:2::sin16s_gen2:18 [ div32u16u::return#2 ] ) always clobbers reg byte a Statement [70] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 ] ) always clobbers reg byte a -Statement [72] if((word) sin16s_gen2::i#2<(const word) SIN_SIZE#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [74] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [76] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [77] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 ] ) always clobbers reg byte a -Statement [79] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a -Statement [80] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a -Statement [81] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a -Statement [82] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [83] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [84] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [86] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#1 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#1 ] ) always clobbers reg byte a -Statement [88] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::return#2 ] ) always clobbers reg byte a -Statement [89] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16s::m#0 ] ) always clobbers reg byte a -Statement [90] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 [ mul16s::m#0 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 ] ) always clobbers reg byte a -Statement [91] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$9 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a -Statement [92] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a -Statement [93] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#1 ] ) always clobbers reg byte a -Statement [95] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [99] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [101] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [103] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [107] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [108] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [110] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [111] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [113] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y -Statement [114] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [115] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [116] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [118] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [119] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [120] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [121] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [123] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [124] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [125] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [127] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [128] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [129] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [130] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [131] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [133] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [134] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [135] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [136] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [138] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [139] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [140] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [141] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [143] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [146] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [148] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [149] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [151] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [152] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [153] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [154] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [72] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [74] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#0 ] ) always clobbers reg byte a +Statement [75] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 ] ) always clobbers reg byte a +Statement [77] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#2 ] ) always clobbers reg byte a +Statement [78] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$6 ] ) always clobbers reg byte a +Statement [79] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s_gen2::$9 ] ) always clobbers reg byte a +Statement [80] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 ] ) always clobbers reg byte a reg byte y +Statement [81] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [82] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [84] if((word) sin16s_gen2::i#1<(const word) SIN_SIZE#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:2::sin16s_gen2:18 [ sin16s_gen2::step#0 sin16s_gen2::i#1 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [86] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#1 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::a#1 ] ) always clobbers reg byte a +Statement [88] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::return#2 ] ) always clobbers reg byte a +Statement [89] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16s::m#0 ] ) always clobbers reg byte a +Statement [90] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 [ mul16s::m#0 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#0 ] ) always clobbers reg byte a +Statement [91] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$9 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a +Statement [92] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a +Statement [93] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::m#1 ] ) always clobbers reg byte a +Statement [95] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:2::sin16s_gen2:18::mul16s:76 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::return#0 ] ) always clobbers reg byte a +Statement [99] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::sin16s_gen2:18::mul16s:76::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [101] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen2:18::mul16s:76::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [103] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen2:18::mul16s:76::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [107] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#0 ] ) always clobbers reg byte a +Statement [108] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#1 ] ) always clobbers reg byte a +Statement [110] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [111] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [113] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [114] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [115] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [116] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [118] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [119] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [120] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [121] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [123] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [124] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [125] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [127] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [128] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [129] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [130] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [131] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [133] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [134] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [135] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [136] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [138] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [139] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [140] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [141] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [143] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [146] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen2:18::sin16s:73 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::return#5 ] ) always clobbers reg byte a +Statement [148] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [149] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [151] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [152] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [153] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [154] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:73::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#6 sin16s_gen2::x#6 sin16s_gen2::sintab#10 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a Statement [158] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [160] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a @@ -5954,14 +5986,14 @@ Statement [194] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 Statement [196] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::bitmap_clear:16::memset:185 [ memset::c#4 memset::end#0 memset::dst#2 ] main:2::bitmap_clear:16::memset:187 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y Statement [208] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:14 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a Statement [215] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:14 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a -Potential registers zp ZP_WORD:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] : zp ZP_WORD:2 , -Potential registers zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] : zp ZP_WORD:4 , +Potential registers zp ZP_WORD:2 [ render_sine::sin_idx#10 render_sine::sin_idx#1 ] : zp ZP_WORD:2 , +Potential registers zp ZP_WORD:4 [ render_sine::xpos#10 render_sine::xpos#3 render_sine::xpos#1 ] : zp ZP_WORD:4 , Potential registers zp ZP_BYTE:6 [ bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#0 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:7 [ bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] : zp ZP_WORD:7 , Potential registers zp ZP_WORD:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 ] : zp ZP_WORD:9 , -Potential registers zp ZP_WORD:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] : zp ZP_WORD:11 , -Potential registers zp ZP_DWORD:13 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] : zp ZP_DWORD:13 , -Potential registers zp ZP_WORD:17 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] : zp ZP_WORD:17 , +Potential registers zp ZP_WORD:11 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] : zp ZP_WORD:11 , +Potential registers zp ZP_DWORD:13 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] : zp ZP_DWORD:13 , +Potential registers zp ZP_WORD:17 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] : zp ZP_WORD:17 , Potential registers zp ZP_DWORD:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] : zp ZP_DWORD:19 , Potential registers zp ZP_WORD:23 [ mul16u::b#1 ] : zp ZP_WORD:23 , Potential registers zp ZP_WORD:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] : zp ZP_WORD:25 , @@ -6049,12 +6081,12 @@ REGISTER UPLIFT SCOPES Uplift Scope [mul16u] 346.86: zp ZP_DWORD:27 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp ZP_DWORD:31 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp ZP_BYTE:124 [ mul16u::$1 ] 180.67: zp ZP_WORD:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 4: zp ZP_WORD:23 [ mul16u::b#1 ] 4: zp ZP_DWORD:112 [ mul16u::return#2 ] 4: zp ZP_DWORD:157 [ mul16u::return#3 ] Uplift Scope [wrap_y] 877: zp ZP_WORD:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 ] 22: zp ZP_BYTE:72 [ wrap_y::return#0 ] 22: zp ZP_BYTE:80 [ wrap_y::return#1 ] 6: zp ZP_BYTE:89 [ wrap_y::return#2 ] Uplift Scope [divr16u] 106.92: zp ZP_WORD:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:183 [ divr16u::$1 ] 22: zp ZP_BYTE:184 [ divr16u::$2 ] 18.19: zp ZP_BYTE:53 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp ZP_WORD:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp ZP_WORD:171 [ divr16u::return#2 ] 4: zp ZP_WORD:175 [ divr16u::return#3 ] -Uplift Scope [render_sine] 24.12: zp ZP_WORD:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] 24: zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] 22: zp ZP_WORD:66 [ render_sine::$10 ] 22: zp ZP_WORD:68 [ render_sine::$1 ] 22: zp ZP_WORD:70 [ render_sine::sin_val#0 ] 22: zp ZP_WORD:74 [ render_sine::$11 ] 22: zp ZP_WORD:76 [ render_sine::$4 ] 22: zp ZP_WORD:78 [ render_sine::sin2_val#0 ] 11: zp ZP_BYTE:73 [ render_sine::ypos#0 ] 11: zp ZP_BYTE:81 [ render_sine::ypos2#0 ] +Uplift Scope [render_sine] 22: zp ZP_WORD:66 [ render_sine::$10 ] 22: zp ZP_WORD:68 [ render_sine::$1 ] 22: zp ZP_WORD:70 [ render_sine::sin_val#0 ] 22: zp ZP_WORD:74 [ render_sine::$11 ] 22: zp ZP_WORD:76 [ render_sine::$4 ] 22: zp ZP_WORD:78 [ render_sine::sin2_val#0 ] 20.43: zp ZP_WORD:4 [ render_sine::xpos#10 render_sine::xpos#3 render_sine::xpos#1 ] 18.26: zp ZP_WORD:2 [ render_sine::sin_idx#10 render_sine::sin_idx#1 ] 11: zp ZP_BYTE:73 [ render_sine::ypos#0 ] 11: zp ZP_BYTE:81 [ render_sine::ypos2#0 ] Uplift Scope [bitmap_init] 39.88: zp ZP_WORD:64 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp ZP_BYTE:61 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22: zp ZP_BYTE:62 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp ZP_BYTE:63 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp ZP_BYTE:190 [ bitmap_init::$4 ] 22: zp ZP_BYTE:191 [ bitmap_init::$5 ] 22: zp ZP_BYTE:192 [ bitmap_init::$6 ] 5.5: zp ZP_BYTE:189 [ bitmap_init::$7 ] Uplift Scope [bitmap_plot] 70: zp ZP_BYTE:6 [ bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#0 ] 28.5: zp ZP_WORD:7 [ bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] 4: zp ZP_WORD:84 [ bitmap_plot::$1 ] 4: zp ZP_BYTE:88 [ bitmap_plot::$2 ] 3: zp ZP_WORD:86 [ bitmap_plot::plotter#1 ] 1: zp ZP_WORD:82 [ bitmap_plot::plotter#0 ] Uplift Scope [sin16s] 27.5: zp ZP_DWORD:36 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp ZP_WORD:98 [ sin16s::return#0 ] 13: zp ZP_WORD:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp ZP_DWORD:125 [ sin16s::$4 ] 4: zp ZP_WORD:133 [ sin16s::x2#0 ] 4: zp ZP_WORD:141 [ sin16s::x3_6#0 ] 4: zp ZP_WORD:147 [ sin16s::x4#0 ] 4: zp ZP_WORD:151 [ sin16s::x5#0 ] 4: zp ZP_WORD:153 [ sin16s::x5_128#0 ] 1: zp ZP_WORD:137 [ sin16s::x3#0 ] 1: zp ZP_WORD:155 [ sin16s::usinx#1 ] 0.64: zp ZP_WORD:129 [ sin16s::x1#0 ] 0.33: zp ZP_WORD:143 [ sin16s::usinx#0 ] 0.06: zp ZP_BYTE:35 [ sin16s::isUpper#2 ] -Uplift Scope [sin16s_gen2] 24.54: zp ZP_WORD:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] 22: zp ZP_DWORD:106 [ sin16s_gen2::$6 ] 13.75: zp ZP_DWORD:13 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] 11: zp ZP_WORD:110 [ sin16s_gen2::$9 ] 10.33: zp ZP_WORD:17 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] 0.87: zp ZP_DWORD:94 [ sin16s_gen2::step#0 ] Uplift Scope [mulu16_sel] 24: zp ZP_WORD:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp ZP_WORD:44 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp ZP_WORD:131 [ mulu16_sel::return#0 ] 4: zp ZP_WORD:135 [ mulu16_sel::return#1 ] 4: zp ZP_WORD:139 [ mulu16_sel::return#2 ] 4: zp ZP_WORD:145 [ mulu16_sel::return#10 ] 4: zp ZP_WORD:149 [ mulu16_sel::return#11 ] 4: zp ZP_DWORD:161 [ mulu16_sel::$0 ] 4: zp ZP_DWORD:165 [ mulu16_sel::$1 ] 1.71: zp ZP_WORD:169 [ mulu16_sel::return#12 ] 0.33: zp ZP_BYTE:46 [ mulu16_sel::select#5 ] +Uplift Scope [sin16s_gen2] 22: zp ZP_DWORD:106 [ sin16s_gen2::$6 ] 18.33: zp ZP_WORD:11 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] 11: zp ZP_WORD:110 [ sin16s_gen2::$9 ] 10.33: zp ZP_DWORD:13 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] 8.8: zp ZP_WORD:17 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] 0.87: zp ZP_DWORD:94 [ sin16s_gen2::step#0 ] Uplift Scope [mul16s] 22: zp ZP_DWORD:102 [ mul16s::return#2 ] 10: zp ZP_DWORD:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] 4.33: zp ZP_DWORD:120 [ mul16s::return#0 ] 4: zp ZP_WORD:116 [ mul16s::$9 ] 4: zp ZP_WORD:118 [ mul16s::$16 ] 2.6: zp ZP_WORD:100 [ mul16s::a#0 ] Uplift Scope [memset] 41.33: zp ZP_WORD:59 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp ZP_WORD:187 [ memset::end#0 ] 2: zp ZP_WORD:54 [ memset::num#2 ] 1.38: zp ZP_BYTE:58 [ memset::c#4 ] 0: zp ZP_WORD:56 [ memset::str#3 ] Uplift Scope [div32u16u] 4: zp ZP_DWORD:90 [ div32u16u::return#2 ] 4: zp ZP_WORD:177 [ div32u16u::quotient_lo#0 ] 1.33: zp ZP_DWORD:179 [ div32u16u::return#0 ] 0.8: zp ZP_WORD:173 [ div32u16u::quotient_hi#0 ] @@ -6062,31 +6094,31 @@ Uplift Scope [] 0.8: zp ZP_WORD:185 [ rem16u#1 ] Uplift Scope [bitmap_clear] Uplift Scope [main] -Uplifting [mul16u] best 30951 combination zp ZP_DWORD:27 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:31 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:23 [ mul16u::b#1 ] zp ZP_DWORD:112 [ mul16u::return#2 ] zp ZP_DWORD:157 [ mul16u::return#3 ] -Uplifting [wrap_y] best 30768 combination zp ZP_WORD:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 ] reg byte a [ wrap_y::return#0 ] reg byte a [ wrap_y::return#1 ] reg byte a [ wrap_y::return#2 ] -Uplifting [divr16u] best 30558 combination zp ZP_WORD:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:171 [ divr16u::return#2 ] zp ZP_WORD:175 [ divr16u::return#3 ] -Uplifting [render_sine] best 30478 combination zp ZP_WORD:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] zp ZP_WORD:66 [ render_sine::$10 ] zp ZP_WORD:68 [ render_sine::$1 ] zp ZP_WORD:70 [ render_sine::sin_val#0 ] zp ZP_WORD:74 [ render_sine::$11 ] zp ZP_WORD:76 [ render_sine::$4 ] zp ZP_WORD:78 [ render_sine::sin2_val#0 ] reg byte x [ render_sine::ypos#0 ] reg byte x [ render_sine::ypos2#0 ] -Uplifting [bitmap_init] best 29968 combination zp ZP_WORD:64 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:191 [ bitmap_init::$5 ] zp ZP_BYTE:192 [ bitmap_init::$6 ] zp ZP_BYTE:189 [ bitmap_init::$7 ] +Uplifting [mul16u] best 31011 combination zp ZP_DWORD:27 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:31 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:23 [ mul16u::b#1 ] zp ZP_DWORD:112 [ mul16u::return#2 ] zp ZP_DWORD:157 [ mul16u::return#3 ] +Uplifting [wrap_y] best 30828 combination zp ZP_WORD:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 ] reg byte a [ wrap_y::return#0 ] reg byte a [ wrap_y::return#1 ] reg byte a [ wrap_y::return#2 ] +Uplifting [divr16u] best 30618 combination zp ZP_WORD:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:171 [ divr16u::return#2 ] zp ZP_WORD:175 [ divr16u::return#3 ] +Uplifting [render_sine] best 30538 combination zp ZP_WORD:66 [ render_sine::$10 ] zp ZP_WORD:68 [ render_sine::$1 ] zp ZP_WORD:70 [ render_sine::sin_val#0 ] zp ZP_WORD:74 [ render_sine::$11 ] zp ZP_WORD:76 [ render_sine::$4 ] zp ZP_WORD:78 [ render_sine::sin2_val#0 ] zp ZP_WORD:4 [ render_sine::xpos#10 render_sine::xpos#3 render_sine::xpos#1 ] zp ZP_WORD:2 [ render_sine::sin_idx#10 render_sine::sin_idx#1 ] reg byte x [ render_sine::ypos#0 ] reg byte x [ render_sine::ypos2#0 ] +Uplifting [bitmap_init] best 30028 combination zp ZP_WORD:64 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:191 [ bitmap_init::$5 ] zp ZP_BYTE:192 [ bitmap_init::$6 ] zp ZP_BYTE:189 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. -Uplifting [bitmap_plot] best 29901 combination reg byte x [ bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#0 ] zp ZP_WORD:7 [ bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] zp ZP_WORD:84 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:86 [ bitmap_plot::plotter#1 ] zp ZP_WORD:82 [ bitmap_plot::plotter#0 ] -Uplifting [sin16s] best 29901 combination zp ZP_DWORD:36 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:98 [ sin16s::return#0 ] zp ZP_WORD:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:125 [ sin16s::$4 ] zp ZP_WORD:133 [ sin16s::x2#0 ] zp ZP_WORD:141 [ sin16s::x3_6#0 ] zp ZP_WORD:147 [ sin16s::x4#0 ] zp ZP_WORD:151 [ sin16s::x5#0 ] zp ZP_WORD:153 [ sin16s::x5_128#0 ] zp ZP_WORD:137 [ sin16s::x3#0 ] zp ZP_WORD:155 [ sin16s::usinx#1 ] zp ZP_WORD:129 [ sin16s::x1#0 ] zp ZP_WORD:143 [ sin16s::usinx#0 ] zp ZP_BYTE:35 [ sin16s::isUpper#2 ] -Uplifting [sin16s_gen2] best 29901 combination zp ZP_WORD:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp ZP_DWORD:106 [ sin16s_gen2::$6 ] zp ZP_DWORD:13 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp ZP_WORD:110 [ sin16s_gen2::$9 ] zp ZP_WORD:17 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp ZP_DWORD:94 [ sin16s_gen2::step#0 ] -Uplifting [mulu16_sel] best 29885 combination zp ZP_WORD:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:44 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:131 [ mulu16_sel::return#0 ] zp ZP_WORD:135 [ mulu16_sel::return#1 ] zp ZP_WORD:139 [ mulu16_sel::return#2 ] zp ZP_WORD:145 [ mulu16_sel::return#10 ] zp ZP_WORD:149 [ mulu16_sel::return#11 ] zp ZP_DWORD:161 [ mulu16_sel::$0 ] zp ZP_DWORD:165 [ mulu16_sel::$1 ] zp ZP_WORD:169 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [mul16s] best 29885 combination zp ZP_DWORD:102 [ mul16s::return#2 ] zp ZP_DWORD:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp ZP_DWORD:120 [ mul16s::return#0 ] zp ZP_WORD:116 [ mul16s::$9 ] zp ZP_WORD:118 [ mul16s::$16 ] zp ZP_WORD:100 [ mul16s::a#0 ] -Uplifting [memset] best 29869 combination zp ZP_WORD:59 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:187 [ memset::end#0 ] zp ZP_WORD:54 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp ZP_WORD:56 [ memset::str#3 ] -Uplifting [div32u16u] best 29869 combination zp ZP_DWORD:90 [ div32u16u::return#2 ] zp ZP_WORD:177 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:179 [ div32u16u::return#0 ] zp ZP_WORD:173 [ div32u16u::quotient_hi#0 ] -Uplifting [] best 29869 combination zp ZP_WORD:185 [ rem16u#1 ] -Uplifting [bitmap_clear] best 29869 combination -Uplifting [main] best 29869 combination +Uplifting [bitmap_plot] best 29961 combination reg byte x [ bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#0 ] zp ZP_WORD:7 [ bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] zp ZP_WORD:84 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:86 [ bitmap_plot::plotter#1 ] zp ZP_WORD:82 [ bitmap_plot::plotter#0 ] +Uplifting [sin16s] best 29961 combination zp ZP_DWORD:36 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:98 [ sin16s::return#0 ] zp ZP_WORD:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:125 [ sin16s::$4 ] zp ZP_WORD:133 [ sin16s::x2#0 ] zp ZP_WORD:141 [ sin16s::x3_6#0 ] zp ZP_WORD:147 [ sin16s::x4#0 ] zp ZP_WORD:151 [ sin16s::x5#0 ] zp ZP_WORD:153 [ sin16s::x5_128#0 ] zp ZP_WORD:137 [ sin16s::x3#0 ] zp ZP_WORD:155 [ sin16s::usinx#1 ] zp ZP_WORD:129 [ sin16s::x1#0 ] zp ZP_WORD:143 [ sin16s::usinx#0 ] zp ZP_BYTE:35 [ sin16s::isUpper#2 ] +Uplifting [mulu16_sel] best 29945 combination zp ZP_WORD:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:44 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:131 [ mulu16_sel::return#0 ] zp ZP_WORD:135 [ mulu16_sel::return#1 ] zp ZP_WORD:139 [ mulu16_sel::return#2 ] zp ZP_WORD:145 [ mulu16_sel::return#10 ] zp ZP_WORD:149 [ mulu16_sel::return#11 ] zp ZP_DWORD:161 [ mulu16_sel::$0 ] zp ZP_DWORD:165 [ mulu16_sel::$1 ] zp ZP_WORD:169 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [sin16s_gen2] best 29945 combination zp ZP_DWORD:106 [ sin16s_gen2::$6 ] zp ZP_WORD:11 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] zp ZP_WORD:110 [ sin16s_gen2::$9 ] zp ZP_DWORD:13 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] zp ZP_WORD:17 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] zp ZP_DWORD:94 [ sin16s_gen2::step#0 ] +Uplifting [mul16s] best 29945 combination zp ZP_DWORD:102 [ mul16s::return#2 ] zp ZP_DWORD:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp ZP_DWORD:120 [ mul16s::return#0 ] zp ZP_WORD:116 [ mul16s::$9 ] zp ZP_WORD:118 [ mul16s::$16 ] zp ZP_WORD:100 [ mul16s::a#0 ] +Uplifting [memset] best 29929 combination zp ZP_WORD:59 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:187 [ memset::end#0 ] zp ZP_WORD:54 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp ZP_WORD:56 [ memset::str#3 ] +Uplifting [div32u16u] best 29929 combination zp ZP_DWORD:90 [ div32u16u::return#2 ] zp ZP_WORD:177 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:179 [ div32u16u::return#0 ] zp ZP_WORD:173 [ div32u16u::quotient_hi#0 ] +Uplifting [] best 29929 combination zp ZP_WORD:185 [ rem16u#1 ] +Uplifting [bitmap_clear] best 29929 combination +Uplifting [main] best 29929 combination Attempting to uplift remaining variables inzp ZP_BYTE:191 [ bitmap_init::$5 ] -Uplifting [bitmap_init] best 29809 combination reg byte a [ bitmap_init::$5 ] +Uplifting [bitmap_init] best 29869 combination reg byte a [ bitmap_init::$5 ] Attempting to uplift remaining variables inzp ZP_BYTE:192 [ bitmap_init::$6 ] -Uplifting [bitmap_init] best 29749 combination reg byte a [ bitmap_init::$6 ] +Uplifting [bitmap_init] best 29809 combination reg byte a [ bitmap_init::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:189 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 29749 combination zp ZP_BYTE:189 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 29809 combination zp ZP_BYTE:189 [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:35 [ sin16s::isUpper#2 ] -Uplifting [sin16s] best 29749 combination zp ZP_BYTE:35 [ sin16s::isUpper#2 ] -Coalescing zero page register [ zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] ] with [ zp ZP_WORD:7 [ bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] ] - score: 2 +Uplifting [sin16s] best 29809 combination zp ZP_BYTE:35 [ sin16s::isUpper#2 ] +Coalescing zero page register [ zp ZP_WORD:4 [ render_sine::xpos#10 render_sine::xpos#3 render_sine::xpos#1 ] ] with [ zp ZP_WORD:7 [ bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:155 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:137 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:185 [ rem16u#1 ] ] - score: 2 @@ -6128,8 +6160,8 @@ Coalescing zero page register [ zp ZP_WORD:131 [ mulu16_sel::return#0 mulu16_sel Coalescing zero page register [ zp ZP_WORD:131 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp ZP_WORD:149 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_DWORD:19 [ 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::$6 ] ] with [ zp ZP_DWORD:161 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:131 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp ZP_WORD:153 [ sin16s::x5_128#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] with [ zp ZP_WORD:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] ] -Coalescing zero page register [ zp ZP_WORD:17 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ] with [ zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] ] +Coalescing zero page register [ zp ZP_WORD:11 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] ] with [ zp ZP_WORD:2 [ render_sine::sin_idx#10 render_sine::sin_idx#1 ] ] +Coalescing zero page register [ zp ZP_WORD:17 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] ] with [ zp ZP_WORD:4 [ render_sine::xpos#10 render_sine::xpos#3 render_sine::xpos#1 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] ] Coalescing zero page register [ zp ZP_WORD:23 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] with [ zp ZP_WORD:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] ] Coalescing zero page register [ zp ZP_DWORD:36 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] ] with [ zp ZP_DWORD:19 [ 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::$6 mulu16_sel::$0 mulu16_sel::$1 ] ] Coalescing zero page register [ zp ZP_WORD:47 [ 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 ] ] with [ zp ZP_WORD:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] @@ -6141,16 +6173,16 @@ Coalescing zero page register [ zp ZP_WORD:110 [ sin16s_gen2::$9 ] ] with [ zp Z Coalescing zero page register [ zp ZP_WORD:129 [ sin16s::x1#0 ] ] with [ zp ZP_WORD:116 [ mul16s::$9 mul16s::$16 ] ] Coalescing zero page register [ zp ZP_WORD:173 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:131 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] Coalescing zero page register [ zp ZP_BYTE:189 [ bitmap_init::$7 ] ] with [ zp ZP_BYTE:35 [ sin16s::isUpper#2 ] ] -Coalescing zero page register [ zp ZP_WORD:64 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 memset::num#2 memset::end#0 ] ] with [ zp ZP_WORD:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 render_sine::sin_idx#2 render_sine::sin_idx#1 ] ] +Coalescing zero page register [ zp ZP_WORD:64 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 memset::num#2 memset::end#0 ] ] with [ zp ZP_WORD:11 [ sin16s_gen2::i#6 sin16s_gen2::i#1 render_sine::sin_idx#10 render_sine::sin_idx#1 ] ] Coalescing zero page register [ zp ZP_WORD:82 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:23 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] ] Coalescing zero page register [ zp ZP_WORD:110 [ sin16s_gen2::$9 bitmap_plot::$1 ] ] with [ zp ZP_WORD:47 [ 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 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] -Allocated (was zp ZP_DWORD:13) zp ZP_DWORD:2 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -Allocated (was zp ZP_WORD:17) zp ZP_WORD:6 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] +Allocated (was zp ZP_DWORD:13) zp ZP_DWORD:2 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +Allocated (was zp ZP_WORD:17) zp ZP_WORD:6 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 render_sine::xpos#10 render_sine::xpos#3 render_sine::xpos#1 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] Allocated (was zp ZP_DWORD:31) zp ZP_DWORD:8 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] Allocated (was zp ZP_DWORD:36) zp ZP_DWORD:12 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 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::$6 mulu16_sel::$0 mulu16_sel::$1 ] Allocated (was zp ZP_WORD:49) zp ZP_WORD:16 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ] Allocated (was zp ZP_WORD:51) zp ZP_WORD:18 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] -Allocated (was zp ZP_WORD:64) zp ZP_WORD:20 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 memset::num#2 memset::end#0 sin16s_gen2::i#2 sin16s_gen2::i#1 render_sine::sin_idx#2 render_sine::sin_idx#1 ] +Allocated (was zp ZP_WORD:64) zp ZP_WORD:20 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 memset::num#2 memset::end#0 sin16s_gen2::i#6 sin16s_gen2::i#1 render_sine::sin_idx#10 render_sine::sin_idx#1 ] Allocated (was zp ZP_WORD:82) zp ZP_WORD:22 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] Allocated (was zp ZP_DWORD:90) zp ZP_DWORD:24 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] Allocated (was zp ZP_WORD:110) zp ZP_WORD:28 [ sin16s_gen2::$9 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] @@ -6311,45 +6343,34 @@ render_sine: { .label sin2_val = $16 .label xpos = 6 .label sin_idx = $14 - // [23] phi from render_sine to render_sine::@1 [phi:render_sine->render_sine::@1] - b1_from_render_sine: - // [23] phi (word) render_sine::xpos#3 = (byte) 0 [phi:render_sine->render_sine::@1#0] -- vwuz1=vbuc1 + // [23] phi from render_sine to render_sine::@2 [phi:render_sine->render_sine::@2] + b2_from_render_sine: + // [23] phi (word) render_sine::xpos#10 = (byte) 0 [phi:render_sine->render_sine::@2#0] -- vwuz1=vbuc1 lda #<0 sta xpos lda #>0 sta xpos+1 - // [23] phi (word) render_sine::sin_idx#2 = (byte) 0 [phi:render_sine->render_sine::@1#1] -- vwuz1=vbuc1 + // [23] phi (word) render_sine::sin_idx#10 = (byte) 0 [phi:render_sine->render_sine::@2#1] -- vwuz1=vbuc1 lda #<0 sta sin_idx lda #>0 sta sin_idx+1 - jmp b1 - // render_sine::@1 - b1: - // [24] if((word) render_sine::sin_idx#2<(const word) SIN_SIZE#0) goto render_sine::@2 -- vwuz1_lt_vwuc1_then_la1 - lda sin_idx+1 - cmp #>SIN_SIZE - bcc b2 - bne !+ - lda sin_idx - cmp #render_sine::@2] + b2_from_b1: + // [23] phi (word) render_sine::xpos#10 = (word) render_sine::xpos#3 [phi:render_sine::@1->render_sine::@2#0] -- register_copy + // [23] phi (word) render_sine::sin_idx#10 = (word) render_sine::sin_idx#1 [phi:render_sine::@1->render_sine::@2#1] -- register_copy + jmp b2 // render_sine::@2 b2: - // [26] (word~) render_sine::$10 ← (word) render_sine::sin_idx#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [24] (word~) render_sine::$10 ← (word) render_sine::sin_idx#10 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda sin_idx asl sta _10 lda sin_idx+1 rol sta _10+1 - // [27] (signed word*~) render_sine::$1 ← (const signed word[$200]) sin#0 + (word~) render_sine::$10 -- pwsz1=pwsc1_plus_vwuz1 + // [25] (signed word*~) render_sine::$1 ← (const signed word[$200]) sin#0 + (word~) render_sine::$10 -- pwsz1=pwsc1_plus_vwuz1 clc lda _1 adc #sin sta _1+1 - // [28] (signed word) render_sine::sin_val#0 ← *((signed word*~) render_sine::$1) -- vwsz1=_deref_pwsz1 + // [26] (signed word) render_sine::sin_val#0 ← *((signed word*~) render_sine::$1) -- vwsz1=_deref_pwsz1 ldy #0 lda (sin_val),y tax @@ -6365,21 +6386,21 @@ render_sine: { lda (sin_val),y stx sin_val sta sin_val+1 - // [29] (signed word) wrap_y::y#0 ← (signed word) render_sine::sin_val#0 - // [30] call wrap_y + // [27] (signed word) wrap_y::y#0 ← (signed word) render_sine::sin_val#0 + // [28] call wrap_y // [58] phi from render_sine::@2 to wrap_y [phi:render_sine::@2->wrap_y] wrap_y_from_b2: // [58] phi (signed word) wrap_y::y#9 = (signed word) wrap_y::y#0 [phi:render_sine::@2->wrap_y#0] -- register_copy jsr wrap_y - // [31] (byte) wrap_y::return#0 ← (byte) wrap_y::return#2 + // [29] (byte) wrap_y::return#0 ← (byte) wrap_y::return#2 jmp b4 // render_sine::@4 b4: - // [32] (byte) render_sine::ypos#0 ← (byte) wrap_y::return#0 -- vbuxx=vbuaa + // [30] (byte) render_sine::ypos#0 ← (byte) wrap_y::return#0 -- vbuxx=vbuaa tax - // [33] (word) bitmap_plot::x#0 ← (word) render_sine::xpos#3 - // [34] (byte) bitmap_plot::y#0 ← (byte) render_sine::ypos#0 - // [35] call bitmap_plot + // [31] (word) bitmap_plot::x#0 ← (word) render_sine::xpos#10 + // [32] (byte) bitmap_plot::y#0 ← (byte) render_sine::ypos#0 + // [33] call bitmap_plot // [51] phi from render_sine::@4 to bitmap_plot [phi:render_sine::@4->bitmap_plot] bitmap_plot_from_b4: // [51] phi (word) bitmap_plot::x#2 = (word) bitmap_plot::x#0 [phi:render_sine::@4->bitmap_plot#0] -- register_copy @@ -6388,14 +6409,14 @@ render_sine: { jmp b5 // render_sine::@5 b5: - // [36] (word~) render_sine::$11 ← (word) render_sine::sin_idx#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [34] (word~) render_sine::$11 ← (word) render_sine::sin_idx#10 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda sin_idx asl sta _11 lda sin_idx+1 rol sta _11+1 - // [37] (signed word*~) render_sine::$4 ← (const signed word[$200]) sin2#0 + (word~) render_sine::$11 -- pwsz1=pwsc1_plus_vwuz1 + // [35] (signed word*~) render_sine::$4 ← (const signed word[$200]) sin2#0 + (word~) render_sine::$11 -- pwsz1=pwsc1_plus_vwuz1 clc lda _4 adc #sin2 sta _4+1 - // [38] (signed word) render_sine::sin2_val#0 ← *((signed word*~) render_sine::$4) -- vwsz1=_deref_pwsz1 + // [36] (signed word) render_sine::sin2_val#0 ← *((signed word*~) render_sine::$4) -- vwsz1=_deref_pwsz1 ldy #0 lda (sin2_val),y tax @@ -6411,7 +6432,7 @@ render_sine: { lda (sin2_val),y stx sin2_val sta sin2_val+1 - // [39] (signed word) wrap_y::y#1 ← (signed word) render_sine::sin2_val#0 + (signed byte) $a -- vwsz1=vwsz1_plus_vbsc1 + // [37] (signed word) wrap_y::y#1 ← (signed word) render_sine::sin2_val#0 + (signed byte) $a -- vwsz1=vwsz1_plus_vbsc1 lda wrap_y.y clc adc #<$a @@ -6419,20 +6440,20 @@ render_sine: { lda wrap_y.y+1 adc #>$a sta wrap_y.y+1 - // [40] call wrap_y + // [38] call wrap_y // [58] phi from render_sine::@5 to wrap_y [phi:render_sine::@5->wrap_y] wrap_y_from_b5: // [58] phi (signed word) wrap_y::y#9 = (signed word) wrap_y::y#1 [phi:render_sine::@5->wrap_y#0] -- register_copy jsr wrap_y - // [41] (byte) wrap_y::return#1 ← (byte) wrap_y::return#2 + // [39] (byte) wrap_y::return#1 ← (byte) wrap_y::return#2 jmp b6 // render_sine::@6 b6: - // [42] (byte) render_sine::ypos2#0 ← (byte) wrap_y::return#1 -- vbuxx=vbuaa + // [40] (byte) render_sine::ypos2#0 ← (byte) wrap_y::return#1 -- vbuxx=vbuaa tax - // [43] (word) bitmap_plot::x#1 ← (word) render_sine::xpos#3 - // [44] (byte) bitmap_plot::y#1 ← (byte) render_sine::ypos2#0 - // [45] call bitmap_plot + // [41] (word) bitmap_plot::x#1 ← (word) render_sine::xpos#10 + // [42] (byte) bitmap_plot::y#1 ← (byte) render_sine::ypos2#0 + // [43] call bitmap_plot // [51] phi from render_sine::@6 to bitmap_plot [phi:render_sine::@6->bitmap_plot] bitmap_plot_from_b6: // [51] phi (word) bitmap_plot::x#2 = (word) bitmap_plot::x#1 [phi:render_sine::@6->bitmap_plot#0] -- register_copy @@ -6441,47 +6462,59 @@ render_sine: { jmp b7 // render_sine::@7 b7: - // [46] (word) render_sine::xpos#1 ← ++ (word) render_sine::xpos#3 -- vwuz1=_inc_vwuz1 + // [44] (word) render_sine::xpos#1 ← ++ (word) render_sine::xpos#10 -- vwuz1=_inc_vwuz1 inc xpos bne !+ inc xpos+1 !: - // [47] if((word) render_sine::xpos#1!=(word) $140) goto render_sine::@8 -- vwuz1_neq_vwuc1_then_la1 + // [45] if((word) render_sine::xpos#1!=(word) $140) goto render_sine::@8 -- vwuz1_neq_vwuc1_then_la1 lda xpos+1 cmp #>$140 bne b8_from_b7 lda xpos cmp #<$140 bne b8_from_b7 - // [49] phi from render_sine::@7 to render_sine::@3 [phi:render_sine::@7->render_sine::@3] + // [47] phi from render_sine::@7 to render_sine::@3 [phi:render_sine::@7->render_sine::@3] b3_from_b7: - // [49] phi (word) render_sine::xpos#9 = (byte) 0 [phi:render_sine::@7->render_sine::@3#0] -- vwuz1=vbuc1 + // [47] phi (word) render_sine::xpos#3 = (byte) 0 [phi:render_sine::@7->render_sine::@3#0] -- vwuz1=vbuc1 lda #<0 sta xpos lda #>0 sta xpos+1 jmp b3 - // [48] phi from render_sine::@7 to render_sine::@8 [phi:render_sine::@7->render_sine::@8] + // [46] phi from render_sine::@7 to render_sine::@8 [phi:render_sine::@7->render_sine::@8] b8_from_b7: jmp b8 // render_sine::@8 b8: - // [49] phi from render_sine::@8 to render_sine::@3 [phi:render_sine::@8->render_sine::@3] + // [47] phi from render_sine::@8 to render_sine::@3 [phi:render_sine::@8->render_sine::@3] b3_from_b8: - // [49] phi (word) render_sine::xpos#9 = (word) render_sine::xpos#1 [phi:render_sine::@8->render_sine::@3#0] -- register_copy + // [47] phi (word) render_sine::xpos#3 = (word) render_sine::xpos#1 [phi:render_sine::@8->render_sine::@3#0] -- register_copy jmp b3 // render_sine::@3 b3: - // [50] (word) render_sine::sin_idx#1 ← ++ (word) render_sine::sin_idx#2 -- vwuz1=_inc_vwuz1 + // [48] (word) render_sine::sin_idx#1 ← ++ (word) render_sine::sin_idx#10 -- vwuz1=_inc_vwuz1 inc sin_idx bne !+ inc sin_idx+1 !: - // [23] phi from render_sine::@3 to render_sine::@1 [phi:render_sine::@3->render_sine::@1] - b1_from_b3: - // [23] phi (word) render_sine::xpos#3 = (word) render_sine::xpos#9 [phi:render_sine::@3->render_sine::@1#0] -- register_copy - // [23] phi (word) render_sine::sin_idx#2 = (word) render_sine::sin_idx#1 [phi:render_sine::@3->render_sine::@1#1] -- register_copy jmp b1 + // render_sine::@1 + b1: + // [49] if((word) render_sine::sin_idx#1<(const word) SIN_SIZE#0) goto render_sine::@2 -- vwuz1_lt_vwuc1_then_la1 + lda sin_idx+1 + cmp #>SIN_SIZE + bcc b2_from_b1 + bne !+ + lda sin_idx + cmp #sin16s_gen2::@1] - b1_from_b3: - // [71] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[$200]) sin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [71] phi from sin16s_gen2::@3 to sin16s_gen2::@2 [phi:sin16s_gen2::@3->sin16s_gen2::@2] + b2_from_b3: + // [71] phi (signed word*) sin16s_gen2::sintab#10 = (const signed word[$200]) sin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#0] -- pwsz1=pwsc1 lda #sin sta sintab+1 - // [71] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 + // [71] phi (dword) sin16s_gen2::x#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [71] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [71] phi (word) sin16s_gen2::i#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen2::@1 - b1: - // [72] if((word) sin16s_gen2::i#2<(const word) SIN_SIZE#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>SIN_SIZE - bcc b2 - bne !+ - lda i - cmp #sin16s_gen2::@2] + b2_from_b1: + // [71] phi (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@1->sin16s_gen2::@2#0] -- register_copy + // [71] phi (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#1] -- register_copy + // [71] phi (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#2] -- register_copy + jmp b2 // sin16s_gen2::@2 b2: - // [74] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [72] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -6660,33 +6682,33 @@ sin16s_gen2: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [75] call sin16s + // [73] call sin16s jsr sin16s - // [76] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [74] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 jmp b4 // sin16s_gen2::@4 b4: - // [77] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - // [78] call mul16s + // [75] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + // [76] call mul16s jsr mul16s - // [79] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + // [77] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 jmp b5 // sin16s_gen2::@5 b5: - // [80] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - // [81] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [78] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + // [79] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda _6+2 sta _9 lda _6+3 sta _9+1 - // [82] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [80] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda _9 sta (sintab),y iny lda _9+1 sta (sintab),y - // [83] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [81] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -6694,7 +6716,7 @@ sin16s_gen2: { bcc !+ inc sintab+1 !: - // [84] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [82] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -6708,17 +6730,29 @@ sin16s_gen2: { lda x+3 adc step+3 sta x+3 - // [85] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 + // [83] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#6 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [71] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] - b1_from_b5: - // [71] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [71] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [71] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen2::@1 + b1: + // [84] if((word) sin16s_gen2::i#1<(const word) SIN_SIZE#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>SIN_SIZE + bcc b2_from_b1 + bne !+ + lda i + cmp #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b8_from_b7 with b3 Replacing label b8_from_b7 with b3 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Replacing label b3_from_b4 with b3 Replacing label b1_from_b2 with b1 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Replacing label b1_from_b4 with b2 Replacing label b3_from_b2 with b3 Replacing label b2_from_b1 with b2 @@ -7748,6 +7788,7 @@ Removing instruction b5_from_b4: Removing instruction sin16s_gen2_from_b5: Removing instruction b6_from_b5: Removing instruction render_sine_from_b6: +Removing instruction b2_from_b1: Removing instruction b8_from_b7: Removing instruction b8: Removing instruction b3_from_b8: @@ -7755,7 +7796,8 @@ Removing instruction b1_from_wrap_y: Removing instruction b1_from_b2: Removing instruction b3_from_b1: Removing instruction b3_from_b4: -Removing instruction b1_from_b3: +Removing instruction b2_from_b3: +Removing instruction b2_from_b1: Removing instruction b1_from_b3: Removing instruction b1_from_b4: Removing instruction b1: @@ -7795,8 +7837,7 @@ Removing instruction bitmap_init_from_b3: Removing instruction b4: Removing instruction b5: Removing instruction b6: -Removing instruction b1_from_render_sine: -Removing instruction breturn: +Removing instruction b2_from_render_sine: Removing instruction wrap_y_from_b2: Removing instruction b4: Removing instruction bitmap_plot_from_b4: @@ -7806,16 +7847,17 @@ Removing instruction b6: Removing instruction bitmap_plot_from_b6: Removing instruction b7: Removing instruction b3_from_b7: -Removing instruction b1_from_b3: +Removing instruction b1: +Removing instruction breturn: Removing instruction breturn: Removing instruction b5: Removing instruction breturn: Removing instruction div32u16u_from_sin16s_gen2: Removing instruction b3: -Removing instruction breturn: Removing instruction b4: Removing instruction b5: -Removing instruction b1_from_b5: +Removing instruction b1: +Removing instruction breturn: Removing instruction mul16u_from_mul16s: Removing instruction b4: Removing instruction b3: @@ -7866,7 +7908,9 @@ Replacing jump to rts with rts in jmp b3 Succesful ASM optimization Pass5DoubleJumpElimination Relabelling long label b1_from_sin16s to b4 Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b2 Removing instruction jmp b3 +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b1 Removing instruction jmp b2 @@ -7877,6 +7921,8 @@ Removing instruction b12: Succesful ASM optimization Pass5UnusedLabelElimination Removing unreachable instruction rts Succesful ASM optimization Pass5UnreachableCodeElimination +Fixing long branch [152] bcc b2 to bcs +Fixing long branch [158] bcc b2 to bcs FINAL SYMBOL TABLE (label) @1 @@ -8174,14 +8220,14 @@ FINAL SYMBOL TABLE (signed word) render_sine::sin2_val (signed word) render_sine::sin2_val#0 sin2_val zp ZP_WORD:22 22.0 (word) render_sine::sin_idx -(word) render_sine::sin_idx#1 sin_idx zp ZP_WORD:20 22.0 -(word) render_sine::sin_idx#2 sin_idx zp ZP_WORD:20 2.1153846153846154 +(word) render_sine::sin_idx#1 sin_idx zp ZP_WORD:20 16.5 +(word) render_sine::sin_idx#10 sin_idx zp ZP_WORD:20 1.76 (signed word) render_sine::sin_val (signed word) render_sine::sin_val#0 sin_val zp ZP_WORD:22 22.0 (word) render_sine::xpos (word) render_sine::xpos#1 xpos zp ZP_WORD:6 11.0 -(word) render_sine::xpos#3 xpos zp ZP_WORD:6 2.0 -(word) render_sine::xpos#9 xpos zp ZP_WORD:6 11.0 +(word) render_sine::xpos#10 xpos zp ZP_WORD:6 2.0952380952380953 +(word) render_sine::xpos#3 xpos zp ZP_WORD:6 7.333333333333333 (byte) render_sine::ypos (byte) render_sine::ypos#0 reg byte x 11.0 (byte) render_sine::ypos2 @@ -8246,22 +8292,22 @@ FINAL SYMBOL TABLE (signed word) sin16s_gen2::ampl (const signed word) sin16s_gen2::ampl#0 ampl = (const signed word) sin16s_gen2::max#0-(const signed word) sin16s_gen2::min#0 (word) sin16s_gen2::i -(word) sin16s_gen2::i#1 i zp ZP_WORD:20 22.0 -(word) sin16s_gen2::i#2 i zp ZP_WORD:20 2.5384615384615383 +(word) sin16s_gen2::i#1 i zp ZP_WORD:20 16.5 +(word) sin16s_gen2::i#6 i zp ZP_WORD:20 1.8333333333333333 (signed word) sin16s_gen2::max (const signed word) sin16s_gen2::max#0 max = (signed word) $140 (signed word) sin16s_gen2::min (const signed word) sin16s_gen2::min#0 min = (signed word) -$140 (signed word) sin16s_gen2::offs (signed word*) sin16s_gen2::sintab -(signed word*) sin16s_gen2::sintab#0 sintab zp ZP_WORD:6 7.333333333333333 -(signed word*) sin16s_gen2::sintab#2 sintab zp ZP_WORD:6 3.0 +(signed word*) sin16s_gen2::sintab#0 sintab zp ZP_WORD:6 5.5 +(signed word*) sin16s_gen2::sintab#10 sintab zp ZP_WORD:6 3.3000000000000003 (dword) sin16s_gen2::step (dword) sin16s_gen2::step#0 step zp ZP_DWORD:24 0.8666666666666666 (word) sin16s_gen2::wavelength (dword) sin16s_gen2::x -(dword) sin16s_gen2::x#1 x zp ZP_DWORD:2 11.0 -(dword) sin16s_gen2::x#2 x zp ZP_DWORD:2 2.75 +(dword) sin16s_gen2::x#1 x zp ZP_DWORD:2 7.333333333333333 +(dword) sin16s_gen2::x#6 x zp ZP_DWORD:2 3.0 (signed word[$200]) sin2 (const signed word[$200]) sin2#0 sin2 = kickasm {{ .for(var i=0; i<512; i++) { .word sin(toRadians([i*360]/512))*320 @@ -8288,8 +8334,8 @@ FINAL SYMBOL TABLE (signed word) wrap_y::y#9 y zp ZP_WORD:22 24.0 reg byte x [ bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#0 ] -zp ZP_DWORD:2 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -zp ZP_WORD:6 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] +zp ZP_DWORD:2 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] +zp ZP_WORD:6 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 render_sine::xpos#10 render_sine::xpos#3 render_sine::xpos#1 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] zp ZP_DWORD:8 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] zp ZP_DWORD:12 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 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::$6 mulu16_sel::$0 mulu16_sel::$1 ] reg byte x [ mulu16_sel::select#5 ] @@ -8300,7 +8346,7 @@ reg byte x [ memset::c#4 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] -zp ZP_WORD:20 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 memset::num#2 memset::end#0 sin16s_gen2::i#2 sin16s_gen2::i#1 render_sine::sin_idx#2 render_sine::sin_idx#1 ] +zp ZP_WORD:20 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 memset::num#2 memset::end#0 sin16s_gen2::i#6 sin16s_gen2::i#1 render_sine::sin_idx#10 render_sine::sin_idx#1 ] reg byte a [ wrap_y::return#0 ] reg byte x [ render_sine::ypos#0 ] reg byte a [ wrap_y::return#1 ] @@ -8453,41 +8499,28 @@ render_sine: { .label sin2_val = $16 .label xpos = 6 .label sin_idx = $14 - // [23] phi from render_sine to render_sine::@1 [phi:render_sine->render_sine::@1] - // [23] phi (word) render_sine::xpos#3 = (byte) 0 [phi:render_sine->render_sine::@1#0] -- vwuz1=vbuc1 + // [23] phi from render_sine to render_sine::@2 [phi:render_sine->render_sine::@2] + // [23] phi (word) render_sine::xpos#10 = (byte) 0 [phi:render_sine->render_sine::@2#0] -- vwuz1=vbuc1 lda #<0 sta xpos sta xpos+1 - // [23] phi (word) render_sine::sin_idx#2 = (byte) 0 [phi:render_sine->render_sine::@1#1] -- vwuz1=vbuc1 + // [23] phi (word) render_sine::sin_idx#10 = (byte) 0 [phi:render_sine->render_sine::@2#1] -- vwuz1=vbuc1 sta sin_idx sta sin_idx+1 - // render_sine::@1 - b1: - // for(word sin_idx=0; sin_idxSIN_SIZE - bcc b2 - bne !+ - lda sin_idx - cmp #render_sine::@2] + // [23] phi (word) render_sine::xpos#10 = (word) render_sine::xpos#3 [phi:render_sine::@1->render_sine::@2#0] -- register_copy + // [23] phi (word) render_sine::sin_idx#10 = (word) render_sine::sin_idx#1 [phi:render_sine::@1->render_sine::@2#1] -- register_copy // render_sine::@2 b2: // sin+sin_idx - // [26] (word~) render_sine::$10 ← (word) render_sine::sin_idx#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [24] (word~) render_sine::$10 ← (word) render_sine::sin_idx#10 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda sin_idx asl sta _10 lda sin_idx+1 rol sta _10+1 - // [27] (signed word*~) render_sine::$1 ← (const signed word[$200]) sin#0 + (word~) render_sine::$10 -- pwsz1=pwsc1_plus_vwuz1 + // [25] (signed word*~) render_sine::$1 ← (const signed word[$200]) sin#0 + (word~) render_sine::$10 -- pwsz1=pwsc1_plus_vwuz1 clc lda _1 adc #sin sta _1+1 // sin_val = *(sin+sin_idx) - // [28] (signed word) render_sine::sin_val#0 ← *((signed word*~) render_sine::$1) -- vwsz1=_deref_pwsz1 + // [26] (signed word) render_sine::sin_val#0 ← *((signed word*~) render_sine::$1) -- vwsz1=_deref_pwsz1 ldy #0 lda (sin_val),y tax @@ -8505,35 +8538,35 @@ render_sine: { stx sin_val sta sin_val+1 // wrap_y(sin_val) - // [29] (signed word) wrap_y::y#0 ← (signed word) render_sine::sin_val#0 - // [30] call wrap_y + // [27] (signed word) wrap_y::y#0 ← (signed word) render_sine::sin_val#0 + // [28] call wrap_y // [58] phi from render_sine::@2 to wrap_y [phi:render_sine::@2->wrap_y] // [58] phi (signed word) wrap_y::y#9 = (signed word) wrap_y::y#0 [phi:render_sine::@2->wrap_y#0] -- register_copy jsr wrap_y // wrap_y(sin_val) - // [31] (byte) wrap_y::return#0 ← (byte) wrap_y::return#2 + // [29] (byte) wrap_y::return#0 ← (byte) wrap_y::return#2 // render_sine::@4 // ypos = wrap_y(sin_val) - // [32] (byte) render_sine::ypos#0 ← (byte) wrap_y::return#0 -- vbuxx=vbuaa + // [30] (byte) render_sine::ypos#0 ← (byte) wrap_y::return#0 -- vbuxx=vbuaa tax // bitmap_plot(xpos,ypos) - // [33] (word) bitmap_plot::x#0 ← (word) render_sine::xpos#3 - // [34] (byte) bitmap_plot::y#0 ← (byte) render_sine::ypos#0 - // [35] call bitmap_plot + // [31] (word) bitmap_plot::x#0 ← (word) render_sine::xpos#10 + // [32] (byte) bitmap_plot::y#0 ← (byte) render_sine::ypos#0 + // [33] call bitmap_plot // [51] phi from render_sine::@4 to bitmap_plot [phi:render_sine::@4->bitmap_plot] // [51] phi (word) bitmap_plot::x#2 = (word) bitmap_plot::x#0 [phi:render_sine::@4->bitmap_plot#0] -- register_copy // [51] phi (byte) bitmap_plot::y#2 = (byte) bitmap_plot::y#0 [phi:render_sine::@4->bitmap_plot#1] -- register_copy jsr bitmap_plot // render_sine::@5 // sin2+sin_idx - // [36] (word~) render_sine::$11 ← (word) render_sine::sin_idx#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [34] (word~) render_sine::$11 ← (word) render_sine::sin_idx#10 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda sin_idx asl sta _11 lda sin_idx+1 rol sta _11+1 - // [37] (signed word*~) render_sine::$4 ← (const signed word[$200]) sin2#0 + (word~) render_sine::$11 -- pwsz1=pwsc1_plus_vwuz1 + // [35] (signed word*~) render_sine::$4 ← (const signed word[$200]) sin2#0 + (word~) render_sine::$11 -- pwsz1=pwsc1_plus_vwuz1 clc lda _4 adc #sin2 sta _4+1 // sin2_val = *(sin2+sin_idx) - // [38] (signed word) render_sine::sin2_val#0 ← *((signed word*~) render_sine::$4) -- vwsz1=_deref_pwsz1 + // [36] (signed word) render_sine::sin2_val#0 ← *((signed word*~) render_sine::$4) -- vwsz1=_deref_pwsz1 ldy #0 lda (sin2_val),y tax @@ -8551,7 +8584,7 @@ render_sine: { stx sin2_val sta sin2_val+1 // wrap_y(sin2_val+10) - // [39] (signed word) wrap_y::y#1 ← (signed word) render_sine::sin2_val#0 + (signed byte) $a -- vwsz1=vwsz1_plus_vbsc1 + // [37] (signed word) wrap_y::y#1 ← (signed word) render_sine::sin2_val#0 + (signed byte) $a -- vwsz1=vwsz1_plus_vbsc1 lda wrap_y.y clc adc #<$a @@ -8559,60 +8592,74 @@ render_sine: { lda wrap_y.y+1 adc #>$a sta wrap_y.y+1 - // [40] call wrap_y + // [38] call wrap_y // [58] phi from render_sine::@5 to wrap_y [phi:render_sine::@5->wrap_y] // [58] phi (signed word) wrap_y::y#9 = (signed word) wrap_y::y#1 [phi:render_sine::@5->wrap_y#0] -- register_copy jsr wrap_y // wrap_y(sin2_val+10) - // [41] (byte) wrap_y::return#1 ← (byte) wrap_y::return#2 + // [39] (byte) wrap_y::return#1 ← (byte) wrap_y::return#2 // render_sine::@6 // ypos2 = wrap_y(sin2_val+10) - // [42] (byte) render_sine::ypos2#0 ← (byte) wrap_y::return#1 -- vbuxx=vbuaa + // [40] (byte) render_sine::ypos2#0 ← (byte) wrap_y::return#1 -- vbuxx=vbuaa tax // bitmap_plot(xpos,ypos2) - // [43] (word) bitmap_plot::x#1 ← (word) render_sine::xpos#3 - // [44] (byte) bitmap_plot::y#1 ← (byte) render_sine::ypos2#0 - // [45] call bitmap_plot + // [41] (word) bitmap_plot::x#1 ← (word) render_sine::xpos#10 + // [42] (byte) bitmap_plot::y#1 ← (byte) render_sine::ypos2#0 + // [43] call bitmap_plot // [51] phi from render_sine::@6 to bitmap_plot [phi:render_sine::@6->bitmap_plot] // [51] phi (word) bitmap_plot::x#2 = (word) bitmap_plot::x#1 [phi:render_sine::@6->bitmap_plot#0] -- register_copy // [51] phi (byte) bitmap_plot::y#2 = (byte) bitmap_plot::y#1 [phi:render_sine::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot // render_sine::@7 // xpos++; - // [46] (word) render_sine::xpos#1 ← ++ (word) render_sine::xpos#3 -- vwuz1=_inc_vwuz1 + // [44] (word) render_sine::xpos#1 ← ++ (word) render_sine::xpos#10 -- vwuz1=_inc_vwuz1 inc xpos bne !+ inc xpos+1 !: // if(xpos==320) - // [47] if((word) render_sine::xpos#1!=(word) $140) goto render_sine::@8 -- vwuz1_neq_vwuc1_then_la1 + // [45] if((word) render_sine::xpos#1!=(word) $140) goto render_sine::@8 -- vwuz1_neq_vwuc1_then_la1 lda xpos+1 cmp #>$140 bne b3 lda xpos cmp #<$140 bne b3 - // [49] phi from render_sine::@7 to render_sine::@3 [phi:render_sine::@7->render_sine::@3] - // [49] phi (word) render_sine::xpos#9 = (byte) 0 [phi:render_sine::@7->render_sine::@3#0] -- vwuz1=vbuc1 + // [47] phi from render_sine::@7 to render_sine::@3 [phi:render_sine::@7->render_sine::@3] + // [47] phi (word) render_sine::xpos#3 = (byte) 0 [phi:render_sine::@7->render_sine::@3#0] -- vwuz1=vbuc1 lda #<0 sta xpos sta xpos+1 - // [48] phi from render_sine::@7 to render_sine::@8 [phi:render_sine::@7->render_sine::@8] + // [46] phi from render_sine::@7 to render_sine::@8 [phi:render_sine::@7->render_sine::@8] // render_sine::@8 - // [49] phi from render_sine::@8 to render_sine::@3 [phi:render_sine::@8->render_sine::@3] - // [49] phi (word) render_sine::xpos#9 = (word) render_sine::xpos#1 [phi:render_sine::@8->render_sine::@3#0] -- register_copy + // [47] phi from render_sine::@8 to render_sine::@3 [phi:render_sine::@8->render_sine::@3] + // [47] phi (word) render_sine::xpos#3 = (word) render_sine::xpos#1 [phi:render_sine::@8->render_sine::@3#0] -- register_copy // render_sine::@3 b3: // for(word sin_idx=0; sin_idxrender_sine::@1] - // [23] phi (word) render_sine::xpos#3 = (word) render_sine::xpos#9 [phi:render_sine::@3->render_sine::@1#0] -- register_copy - // [23] phi (word) render_sine::sin_idx#2 = (word) render_sine::sin_idx#1 [phi:render_sine::@3->render_sine::@1#1] -- register_copy - jmp b1 + // render_sine::@1 + // [49] if((word) render_sine::sin_idx#1<(const word) SIN_SIZE#0) goto render_sine::@2 -- vwuz1_lt_vwuc1_then_la1 + lda sin_idx+1 + cmp #>SIN_SIZE + bcs !b2+ + jmp b2 + !b2: + bne !+ + lda sin_idx + cmp #sin16s_gen2::@1] - // [71] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[$200]) sin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [71] phi from sin16s_gen2::@3 to sin16s_gen2::@2 [phi:sin16s_gen2::@3->sin16s_gen2::@2] + // [71] phi (signed word*) sin16s_gen2::sintab#10 = (const signed word[$200]) sin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#0] -- pwsz1=pwsc1 lda #sin sta sintab+1 - // [71] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 + // [71] phi (dword) sin16s_gen2::x#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#1] -- vduz1=vbuc1 lda #0 sta x sta x+1 sta x+2 sta x+3 - // [71] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [71] phi (word) sin16s_gen2::i#6 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@2#2] -- vwuz1=vbuc1 sta i sta i+1 - // u[4.28] - // sin16s_gen2::@1 - b1: - // for( word i=0; iSIN_SIZE - bcc b2 - bne !+ - lda i - cmp #sin16s_gen2::@2] + // [71] phi (signed word*) sin16s_gen2::sintab#10 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@1->sin16s_gen2::@2#0] -- register_copy + // [71] phi (dword) sin16s_gen2::x#6 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#1] -- register_copy + // [71] phi (word) sin16s_gen2::i#6 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@1->sin16s_gen2::@2#2] -- register_copy // sin16s_gen2::@2 b2: // sin16s(x) - // [74] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [72] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#6 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -8786,25 +8820,25 @@ sin16s_gen2: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [75] call sin16s + // [73] call sin16s jsr sin16s - // [76] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [74] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 // sin16s_gen2::@4 // mul16s(sin16s(x), ampl) - // [77] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - // [78] call mul16s + // [75] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + // [76] call mul16s jsr mul16s - // [79] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + // [77] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 // sin16s_gen2::@5 - // [80] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + // [78] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 // >mul16s(sin16s(x), ampl) - // [81] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [79] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda _6+2 sta _9 lda _6+3 sta _9+1 // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl) - // [82] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [80] *((signed word*) sin16s_gen2::sintab#10) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda _9 sta (sintab),y @@ -8812,7 +8846,7 @@ sin16s_gen2: { lda _9+1 sta (sintab),y // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl); - // [83] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [81] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#10 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -8821,7 +8855,7 @@ sin16s_gen2: { inc sintab+1 !: // x = x + step - // [84] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [82] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#6 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -8836,16 +8870,26 @@ sin16s_gen2: { adc step+3 sta x+3 // for( word i=0; isin16s_gen2::@1] - // [71] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [71] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [71] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy - jmp b1 + // u[4.28] + // sin16s_gen2::@1 + // [84] if((word) sin16s_gen2::i#1<(const word) SIN_SIZE#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>SIN_SIZE + bcc b2 + bne !+ + lda i + cmp #SCREEN sta sc+1 - b1: + b2: + lda #' ' + ldy #0 + sta (sc),y + inc sc + bne !+ + inc sc+1 + !: lda sc+1 cmp #>SCREEN+$3e8 bcc b2 @@ -184,15 +191,6 @@ clear_screen: { bcc b2 !: rts - b2: - lda #' ' - ldy #0 - sta (sc),y - inc sc - bne !+ - inc sc+1 - !: - jmp b1 } // Generate a sinus table using BASIC floats // - sintab is a pointer to the table to fill diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.cfg b/src/test/ref/examples/sinsprites/sinus-sprites.cfg index af32c2f78..a6d7f3b69 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.cfg +++ b/src/test/ref/examples/sinsprites/sinus-sprites.cfg @@ -125,18 +125,18 @@ init::@return: scope:[init] from init::@8 to:@return clear_screen: scope:[clear_screen] from init init::@8 [65] phi() + to:clear_screen::@2 +clear_screen::@2: scope:[clear_screen] from clear_screen clear_screen::@1 + [66] (byte*) clear_screen::sc#4 ← phi( clear_screen::@1/(byte*) clear_screen::sc#1 clear_screen/(const byte*) SCREEN#0 ) + [67] *((byte*) clear_screen::sc#4) ← (byte) ' ' + [68] (byte*) clear_screen::sc#1 ← ++ (byte*) clear_screen::sc#4 to:clear_screen::@1 -clear_screen::@1: scope:[clear_screen] from clear_screen clear_screen::@2 - [66] (byte*) clear_screen::sc#2 ← phi( clear_screen/(const byte*) SCREEN#0 clear_screen::@2/(byte*) clear_screen::sc#1 ) - [67] if((byte*) clear_screen::sc#2<(const byte*) SCREEN#0+(word) $3e8) goto clear_screen::@2 +clear_screen::@1: scope:[clear_screen] from clear_screen::@2 + [69] if((byte*) clear_screen::sc#1<(const byte*) SCREEN#0+(word) $3e8) goto clear_screen::@2 to:clear_screen::@return clear_screen::@return: scope:[clear_screen] from clear_screen::@1 - [68] return + [70] return to:@return -clear_screen::@2: scope:[clear_screen] from clear_screen::@1 - [69] *((byte*) clear_screen::sc#2) ← (byte) ' ' - [70] (byte*) clear_screen::sc#1 ← ++ (byte*) clear_screen::sc#2 - to:clear_screen::@1 gen_sintab: scope:[gen_sintab] from init::@5 init::@7 [71] (byte*) gen_sintab::sintab#13 ← phi( init::@5/(const byte[$dd]) sintab_x#0 init::@7/(const byte[$c5]) sintab_y#0 ) [71] (byte) gen_sintab::length#10 ← phi( init::@5/(const byte) sinlen_x#0 init::@7/(const byte) sinlen_y#0 ) diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.log b/src/test/ref/examples/sinsprites/sinus-sprites.log index 9863fa5bd..1f0fdf1a1 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.log +++ b/src/test/ref/examples/sinsprites/sinus-sprites.log @@ -2385,12 +2385,19 @@ Constant (const byte*) clear_screen::$0 = SCREEN#0+$3e8 Constant (const byte*) place_sprites::sprites_ptr#0 = SCREEN#0+$3f8 Constant (const word) place_sprites::$1 = (word)sprites#0 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [108] (word~) place_sprites::$2 ← (const word) place_sprites::$1 / (byte) $40 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) clear_screen::sc#1 = (byte*) clear_screen::sc#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) clear_screen::sc#5 (const byte*) clear_screen::sc#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [110] (word~) place_sprites::$2 ← (const word) place_sprites::$1 / (byte) $40 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) place_sprites::$2 = place_sprites::$1/$40 Successful SSA optimization Pass2ConstantIdentification -Constant value identified (byte)place_sprites::$2 in [109] (byte) place_sprites::spr_id#0 ← (byte)(const word) place_sprites::$2 +Constant value identified (byte)place_sprites::$2 in [111] (byte) place_sprites::spr_id#0 ← (byte)(const word) place_sprites::$2 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [201] if((const byte*) clear_screen::sc#0<(const byte*) clear_screen::$0) goto clear_screen::@2 +Successful SSA optimization Pass2ConstantIfs Constant (const byte) place_sprites::spr_id#0 = (byte)place_sprites::$2 Successful SSA optimization Pass2ConstantIdentification Rewriting multiplication to use shift [79] (byte~) anim::$6 ← (byte) anim::x_msb#2 * (byte) 2 @@ -2518,6 +2525,7 @@ Constant inlined prepareMEM::mem#2 = (const byte[]) gen_sintab::f_min#0 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@7(between main::@2 and main::@2) Added new block during phi lifting init::@11(between init::@1 and init::@1) +Added new block during phi lifting clear_screen::@7(between clear_screen::@1 and clear_screen::@2) Added new block during phi lifting progress_inc::@3(between progress_inc and progress_inc::@1) Added new block during phi lifting anim::@11(between anim::@6 and anim::@4) Added new block during phi lifting anim::@12(between anim::@4 and anim::@5) @@ -2554,6 +2562,7 @@ Adding NOP phi() at start of init::@8 Adding NOP phi() at start of init::@9 Adding NOP phi() at start of init::@10 Adding NOP phi() at start of clear_screen +Adding NOP phi() at start of clear_screen::@1_1 Adding NOP phi() at start of gen_sintab::@7 Adding NOP phi() at start of gen_sintab::@9 Adding NOP phi() at start of gen_sintab::@10 @@ -2577,13 +2586,13 @@ CALL GRAPH Calls in [] to main:6 Calls in [main] to init:10 anim:15 Calls in [init] to clear_screen:67 place_sprites:75 gen_sprites:77 progress_init:79 gen_sintab:81 progress_init:83 gen_sintab:85 clear_screen:87 -Calls in [gen_sintab] to setFAC:101 setARGtoFAC:103 setFAC:106 setMEMtoFAC:108 subFACfromARG:110 setMEMtoFAC:112 setFAC:114 divMEMbyFAC:116 setMEMtoFAC:118 addMEMtoFAC:120 setMEMtoFAC:122 setFAC:129 mulFACbyMEM:131 setMEMtoFAC:133 setFAC:136 divMEMbyFAC:138 sinFAC:140 mulFACbyMEM:142 addMEMtoFAC:144 getFAC:146 progress_inc:151 -Calls in [addMEMtoFAC] to prepareMEM:170 -Calls in [mulFACbyMEM] to prepareMEM:182 -Calls in [divMEMbyFAC] to prepareMEM:190 -Calls in [setFAC] to prepareMEM:196 -Calls in [setMEMtoFAC] to prepareMEM:202 -Calls in [gen_sprites] to gen_chargen_sprite:216 +Calls in [gen_sintab] to setFAC:102 setARGtoFAC:104 setFAC:107 setMEMtoFAC:109 subFACfromARG:111 setMEMtoFAC:113 setFAC:115 divMEMbyFAC:117 setMEMtoFAC:119 addMEMtoFAC:121 setMEMtoFAC:123 setFAC:130 mulFACbyMEM:132 setMEMtoFAC:134 setFAC:137 divMEMbyFAC:139 sinFAC:141 mulFACbyMEM:143 addMEMtoFAC:145 getFAC:147 progress_inc:152 +Calls in [addMEMtoFAC] to prepareMEM:171 +Calls in [mulFACbyMEM] to prepareMEM:183 +Calls in [divMEMbyFAC] to prepareMEM:191 +Calls in [setFAC] to prepareMEM:197 +Calls in [setMEMtoFAC] to prepareMEM:203 +Calls in [gen_sprites] to gen_chargen_sprite:217 Created 50 initial phi equivalence classes Coalesced [16] sin_idx_x#27 ← sin_idx_x#11 @@ -2604,51 +2613,51 @@ Coalesced [63] anim::j#7 ← anim::j#1 Coalesced [64] anim::yidx#10 ← anim::yidx#1 Coalesced [65] anim::xidx#10 ← anim::xidx#1 Coalesced [90] init::i#3 ← init::i#1 -Coalesced [97] clear_screen::sc#4 ← clear_screen::sc#1 -Coalesced [100] setFAC::w#6 ← setFAC::w#0 -Coalesced [105] setFAC::w#9 ← setFAC::w#1 -Coalesced [123] progress_cursor#68 ← progress_cursor#22 -Coalesced [128] setFAC::w#7 ← setFAC::w#3 -Coalesced [135] setFAC::w#8 ← setFAC::w#4 -Coalesced [153] gen_sintab::i#14 ← gen_sintab::i#1 -Coalesced [154] progress_idx#67 ← progress_idx#12 -Coalesced [155] progress_cursor#69 ← progress_cursor#11 -Coalesced [160] progress_cursor#67 ← progress_cursor#10 -Coalesced [164] progress_idx#66 ← progress_idx#10 -Coalesced (already) [165] progress_cursor#66 ← progress_cursor#13 -Coalesced [181] prepareMEM::mem#7 ← prepareMEM::mem#4 -Coalesced [189] prepareMEM::mem#6 ← prepareMEM::mem#3 -Coalesced [195] prepareMEM::mem#8 ← prepareMEM::mem#0 -Coalesced [201] prepareMEM::mem#9 ← prepareMEM::mem#1 -Coalesced [210] progress_cursor#22 ← progress_init::line#2 -Coalesced [221] gen_sprites::i#4 ← gen_sprites::i#1 -Coalesced [222] gen_sprites::spr#4 ← gen_sprites::spr#1 -Coalesced [228] gen_chargen_sprite::sprite#13 ← gen_chargen_sprite::sprite#0 -Coalesced [231] gen_chargen_sprite::bits#9 ← gen_chargen_sprite::bits#0 -Coalesced [232] gen_chargen_sprite::sprite#15 ← gen_chargen_sprite::sprite#11 -Coalesced [238] gen_chargen_sprite::s_gen#11 ← gen_chargen_sprite::s_gen#5 -Coalesced [239] gen_chargen_sprite::s_gen_cnt#10 ← gen_chargen_sprite::s_gen_cnt#4 -Coalesced [240] gen_chargen_sprite::sprite#17 ← gen_chargen_sprite::sprite#10 -Coalesced [250] gen_chargen_sprite::sprite#20 ← gen_chargen_sprite::sprite#1 -Coalesced [263] gen_chargen_sprite::y#11 ← gen_chargen_sprite::y#1 -Coalesced [264] gen_chargen_sprite::sprite#14 ← gen_chargen_sprite::sprite#2 -Coalesced [265] gen_chargen_sprite::bits#10 ← gen_chargen_sprite::bits#1 -Coalesced [266] gen_chargen_sprite::s_gen#10 ← gen_chargen_sprite::s_gen#6 -Coalesced [267] gen_chargen_sprite::s_gen_cnt#9 ← gen_chargen_sprite::s_gen_cnt#5 -Coalesced [268] gen_chargen_sprite::sprite#16 ← gen_chargen_sprite::sprite#4 -Coalesced [269] gen_chargen_sprite::x#9 ← gen_chargen_sprite::x#1 -Coalesced (already) [270] gen_chargen_sprite::s_gen#12 ← gen_chargen_sprite::s_gen#6 -Coalesced (already) [271] gen_chargen_sprite::s_gen_cnt#11 ← gen_chargen_sprite::s_gen_cnt#5 -Coalesced [272] gen_chargen_sprite::b#5 ← gen_chargen_sprite::b#1 -Coalesced (already) [273] gen_chargen_sprite::sprite#18 ← gen_chargen_sprite::sprite#4 -Coalesced [274] gen_chargen_sprite::s_gen#13 ← gen_chargen_sprite::s_gen#1 -Coalesced [275] gen_chargen_sprite::s_gen_cnt#12 ← gen_chargen_sprite::s_gen_cnt#1 -Coalesced (already) [276] gen_chargen_sprite::sprite#19 ← gen_chargen_sprite::sprite#3 -Coalesced [293] place_sprites::spr_id#3 ← place_sprites::spr_id#1 -Coalesced [294] place_sprites::j#3 ← place_sprites::j#1 -Coalesced [295] place_sprites::spr_x#3 ← place_sprites::spr_x#1 -Coalesced [296] place_sprites::j2#4 ← place_sprites::j2#2 -Coalesced [297] place_sprites::col#3 ← place_sprites::col#1 +Coalesced [98] clear_screen::sc#6 ← clear_screen::sc#1 +Coalesced [101] setFAC::w#6 ← setFAC::w#0 +Coalesced [106] setFAC::w#9 ← setFAC::w#1 +Coalesced [124] progress_cursor#68 ← progress_cursor#22 +Coalesced [129] setFAC::w#7 ← setFAC::w#3 +Coalesced [136] setFAC::w#8 ← setFAC::w#4 +Coalesced [154] gen_sintab::i#14 ← gen_sintab::i#1 +Coalesced [155] progress_idx#67 ← progress_idx#12 +Coalesced [156] progress_cursor#69 ← progress_cursor#11 +Coalesced [161] progress_cursor#67 ← progress_cursor#10 +Coalesced [165] progress_idx#66 ← progress_idx#10 +Coalesced (already) [166] progress_cursor#66 ← progress_cursor#13 +Coalesced [182] prepareMEM::mem#7 ← prepareMEM::mem#4 +Coalesced [190] prepareMEM::mem#6 ← prepareMEM::mem#3 +Coalesced [196] prepareMEM::mem#8 ← prepareMEM::mem#0 +Coalesced [202] prepareMEM::mem#9 ← prepareMEM::mem#1 +Coalesced [211] progress_cursor#22 ← progress_init::line#2 +Coalesced [222] gen_sprites::i#4 ← gen_sprites::i#1 +Coalesced [223] gen_sprites::spr#4 ← gen_sprites::spr#1 +Coalesced [229] gen_chargen_sprite::sprite#13 ← gen_chargen_sprite::sprite#0 +Coalesced [232] gen_chargen_sprite::bits#9 ← gen_chargen_sprite::bits#0 +Coalesced [233] gen_chargen_sprite::sprite#15 ← gen_chargen_sprite::sprite#11 +Coalesced [239] gen_chargen_sprite::s_gen#11 ← gen_chargen_sprite::s_gen#5 +Coalesced [240] gen_chargen_sprite::s_gen_cnt#10 ← gen_chargen_sprite::s_gen_cnt#4 +Coalesced [241] gen_chargen_sprite::sprite#17 ← gen_chargen_sprite::sprite#10 +Coalesced [251] gen_chargen_sprite::sprite#20 ← gen_chargen_sprite::sprite#1 +Coalesced [264] gen_chargen_sprite::y#11 ← gen_chargen_sprite::y#1 +Coalesced [265] gen_chargen_sprite::sprite#14 ← gen_chargen_sprite::sprite#2 +Coalesced [266] gen_chargen_sprite::bits#10 ← gen_chargen_sprite::bits#1 +Coalesced [267] gen_chargen_sprite::s_gen#10 ← gen_chargen_sprite::s_gen#6 +Coalesced [268] gen_chargen_sprite::s_gen_cnt#9 ← gen_chargen_sprite::s_gen_cnt#5 +Coalesced [269] gen_chargen_sprite::sprite#16 ← gen_chargen_sprite::sprite#4 +Coalesced [270] gen_chargen_sprite::x#9 ← gen_chargen_sprite::x#1 +Coalesced (already) [271] gen_chargen_sprite::s_gen#12 ← gen_chargen_sprite::s_gen#6 +Coalesced (already) [272] gen_chargen_sprite::s_gen_cnt#11 ← gen_chargen_sprite::s_gen_cnt#5 +Coalesced [273] gen_chargen_sprite::b#5 ← gen_chargen_sprite::b#1 +Coalesced (already) [274] gen_chargen_sprite::sprite#18 ← gen_chargen_sprite::sprite#4 +Coalesced [275] gen_chargen_sprite::s_gen#13 ← gen_chargen_sprite::s_gen#1 +Coalesced [276] gen_chargen_sprite::s_gen_cnt#12 ← gen_chargen_sprite::s_gen_cnt#1 +Coalesced (already) [277] gen_chargen_sprite::sprite#19 ← gen_chargen_sprite::sprite#3 +Coalesced [294] place_sprites::spr_id#3 ← place_sprites::spr_id#1 +Coalesced [295] place_sprites::j#3 ← place_sprites::j#1 +Coalesced [296] place_sprites::spr_x#3 ← place_sprites::spr_x#1 +Coalesced [297] place_sprites::j2#4 ← place_sprites::j2#2 +Coalesced [298] place_sprites::col#3 ← place_sprites::col#1 Coalesced down to 36 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @67 @@ -2666,6 +2675,8 @@ Culled Empty Block (label) anim::@12 Culled Empty Block (label) init::@3 Culled Empty Block (label) init::@10 Culled Empty Block (label) init::@11 +Culled Empty Block (label) clear_screen::@1_1 +Culled Empty Block (label) clear_screen::@7 Culled Empty Block (label) gen_sintab::@17 Culled Empty Block (label) progress_inc::@3 Culled Empty Block (label) gen_sprites::@4 @@ -2876,18 +2887,18 @@ init::@return: scope:[init] from init::@8 to:@return clear_screen: scope:[clear_screen] from init init::@8 [65] phi() + to:clear_screen::@2 +clear_screen::@2: scope:[clear_screen] from clear_screen clear_screen::@1 + [66] (byte*) clear_screen::sc#4 ← phi( clear_screen::@1/(byte*) clear_screen::sc#1 clear_screen/(const byte*) SCREEN#0 ) + [67] *((byte*) clear_screen::sc#4) ← (byte) ' ' + [68] (byte*) clear_screen::sc#1 ← ++ (byte*) clear_screen::sc#4 to:clear_screen::@1 -clear_screen::@1: scope:[clear_screen] from clear_screen clear_screen::@2 - [66] (byte*) clear_screen::sc#2 ← phi( clear_screen/(const byte*) SCREEN#0 clear_screen::@2/(byte*) clear_screen::sc#1 ) - [67] if((byte*) clear_screen::sc#2<(const byte*) SCREEN#0+(word) $3e8) goto clear_screen::@2 +clear_screen::@1: scope:[clear_screen] from clear_screen::@2 + [69] if((byte*) clear_screen::sc#1<(const byte*) SCREEN#0+(word) $3e8) goto clear_screen::@2 to:clear_screen::@return clear_screen::@return: scope:[clear_screen] from clear_screen::@1 - [68] return + [70] return to:@return -clear_screen::@2: scope:[clear_screen] from clear_screen::@1 - [69] *((byte*) clear_screen::sc#2) ← (byte) ' ' - [70] (byte*) clear_screen::sc#1 ← ++ (byte*) clear_screen::sc#2 - to:clear_screen::@1 gen_sintab: scope:[gen_sintab] from init::@5 init::@7 [71] (byte*) gen_sintab::sintab#13 ← phi( init::@5/(const byte[$dd]) sintab_x#0 init::@7/(const byte[$c5]) sintab_y#0 ) [71] (byte) gen_sintab::length#10 ← phi( init::@5/(const byte) sinlen_x#0 init::@7/(const byte) sinlen_y#0 ) @@ -3260,8 +3271,8 @@ VARIABLE REGISTER WEIGHTS (byte) anim::yidx#6 75.75 (void()) clear_screen() (byte*) clear_screen::sc -(byte*) clear_screen::sc#1 22.0 -(byte*) clear_screen::sc#2 14.666666666666666 +(byte*) clear_screen::sc#1 16.5 +(byte*) clear_screen::sc#4 16.5 (void()) divMEMbyFAC((byte*) divMEMbyFAC::mem) (byte*) divMEMbyFAC::mem (byte*) divMEMbyFAC::mem#2 2.0 @@ -3424,7 +3435,7 @@ Initial phi equivalence classes [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] [ anim::j#2 anim::j#1 ] [ init::i#2 init::i#1 ] -[ clear_screen::sc#2 clear_screen::sc#1 ] +[ clear_screen::sc#4 clear_screen::sc#1 ] [ gen_sintab::max#2 ] [ gen_sintab::min#2 ] [ gen_sintab::length#10 ] @@ -3478,7 +3489,7 @@ Complete equivalence classes [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] [ anim::j#2 anim::j#1 ] [ init::i#2 init::i#1 ] -[ clear_screen::sc#2 clear_screen::sc#1 ] +[ clear_screen::sc#4 clear_screen::sc#1 ] [ gen_sintab::max#2 ] [ gen_sintab::min#2 ] [ gen_sintab::length#10 ] @@ -3531,7 +3542,7 @@ Allocated zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] Allocated zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] Allocated zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] Allocated zp ZP_BYTE:10 [ init::i#2 init::i#1 ] -Allocated zp ZP_WORD:11 [ clear_screen::sc#2 clear_screen::sc#1 ] +Allocated zp ZP_WORD:11 [ clear_screen::sc#4 clear_screen::sc#1 ] Allocated zp ZP_BYTE:15 [ gen_sintab::max#2 ] Allocated zp ZP_BYTE:16 [ gen_sintab::min#2 ] Allocated zp ZP_BYTE:17 [ gen_sintab::length#10 ] @@ -3992,45 +4003,46 @@ init: { // clear_screen clear_screen: { .label sc = $b - // [66] phi from clear_screen to clear_screen::@1 [phi:clear_screen->clear_screen::@1] - b1_from_clear_screen: - // [66] phi (byte*) clear_screen::sc#2 = (const byte*) SCREEN#0 [phi:clear_screen->clear_screen::@1#0] -- pbuz1=pbuc1 + // [66] phi from clear_screen to clear_screen::@2 [phi:clear_screen->clear_screen::@2] + b2_from_clear_screen: + // [66] phi (byte*) clear_screen::sc#4 = (const byte*) SCREEN#0 [phi:clear_screen->clear_screen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta sc+1 - jmp b1 - // clear_screen::@1 - b1: - // [67] if((byte*) clear_screen::sc#2<(const byte*) SCREEN#0+(word) $3e8) goto clear_screen::@2 -- pbuz1_lt_pbuc1_then_la1 - lda sc+1 - cmp #>SCREEN+$3e8 - bcc b2 - bne !+ - lda sc - cmp #clear_screen::@2] + b2_from_b1: + // [66] phi (byte*) clear_screen::sc#4 = (byte*) clear_screen::sc#1 [phi:clear_screen::@1->clear_screen::@2#0] -- register_copy + jmp b2 // clear_screen::@2 b2: - // [69] *((byte*) clear_screen::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + // [67] *((byte*) clear_screen::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 lda #' ' ldy #0 sta (sc),y - // [70] (byte*) clear_screen::sc#1 ← ++ (byte*) clear_screen::sc#2 -- pbuz1=_inc_pbuz1 + // [68] (byte*) clear_screen::sc#1 ← ++ (byte*) clear_screen::sc#4 -- pbuz1=_inc_pbuz1 inc sc bne !+ inc sc+1 !: - // [66] phi from clear_screen::@2 to clear_screen::@1 [phi:clear_screen::@2->clear_screen::@1] - b1_from_b2: - // [66] phi (byte*) clear_screen::sc#2 = (byte*) clear_screen::sc#1 [phi:clear_screen::@2->clear_screen::@1#0] -- register_copy jmp b1 + // clear_screen::@1 + b1: + // [69] if((byte*) clear_screen::sc#1<(const byte*) SCREEN#0+(word) $3e8) goto clear_screen::@2 -- pbuz1_lt_pbuc1_then_la1 + lda sc+1 + cmp #>SCREEN+$3e8 + bcc b2_from_b1 + bne !+ + lda sc + cmp #clear_screen::@1] - b1_from_clear_screen: - // [66] phi (byte*) clear_screen::sc#2 = (const byte*) SCREEN#0 [phi:clear_screen->clear_screen::@1#0] -- pbuz1=pbuc1 + // [66] phi from clear_screen to clear_screen::@2 [phi:clear_screen->clear_screen::@2] + b2_from_clear_screen: + // [66] phi (byte*) clear_screen::sc#4 = (const byte*) SCREEN#0 [phi:clear_screen->clear_screen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta sc+1 - jmp b1 - // clear_screen::@1 - b1: - // [67] if((byte*) clear_screen::sc#2<(const byte*) SCREEN#0+(word) $3e8) goto clear_screen::@2 -- pbuz1_lt_pbuc1_then_la1 - lda sc+1 - cmp #>SCREEN+$3e8 - bcc b2 - bne !+ - lda sc - cmp #clear_screen::@2] + b2_from_b1: + // [66] phi (byte*) clear_screen::sc#4 = (byte*) clear_screen::sc#1 [phi:clear_screen::@1->clear_screen::@2#0] -- register_copy + jmp b2 // clear_screen::@2 b2: - // [69] *((byte*) clear_screen::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + // [67] *((byte*) clear_screen::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 lda #' ' ldy #0 sta (sc),y - // [70] (byte*) clear_screen::sc#1 ← ++ (byte*) clear_screen::sc#2 -- pbuz1=_inc_pbuz1 + // [68] (byte*) clear_screen::sc#1 ← ++ (byte*) clear_screen::sc#4 -- pbuz1=_inc_pbuz1 inc sc bne !+ inc sc+1 !: - // [66] phi from clear_screen::@2 to clear_screen::@1 [phi:clear_screen::@2->clear_screen::@1] - b1_from_b2: - // [66] phi (byte*) clear_screen::sc#2 = (byte*) clear_screen::sc#1 [phi:clear_screen::@2->clear_screen::@1#0] -- register_copy jmp b1 + // clear_screen::@1 + b1: + // [69] if((byte*) clear_screen::sc#1<(const byte*) SCREEN#0+(word) $3e8) goto clear_screen::@2 -- pbuz1_lt_pbuc1_then_la1 + lda sc+1 + cmp #>SCREEN+$3e8 + bcc b2_from_b1 + bne !+ + lda sc + cmp #clear_screen::@1] - // [66] phi (byte*) clear_screen::sc#2 = (const byte*) SCREEN#0 [phi:clear_screen->clear_screen::@1#0] -- pbuz1=pbuc1 + // [66] phi from clear_screen to clear_screen::@2 [phi:clear_screen->clear_screen::@2] + // [66] phi (byte*) clear_screen::sc#4 = (const byte*) SCREEN#0 [phi:clear_screen->clear_screen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta sc+1 - // clear_screen::@1 - b1: + // [66] phi from clear_screen::@1 to clear_screen::@2 [phi:clear_screen::@1->clear_screen::@2] + // [66] phi (byte*) clear_screen::sc#4 = (byte*) clear_screen::sc#1 [phi:clear_screen::@1->clear_screen::@2#0] -- register_copy + // clear_screen::@2 + b2: + // *sc = ' ' + // [67] *((byte*) clear_screen::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y // for(byte* sc = SCREEN; scSCREEN+$3e8 bcc b2 @@ -7837,24 +7868,8 @@ clear_screen: { !: // clear_screen::@return // } - // [68] return + // [70] return rts - // clear_screen::@2 - b2: - // *sc = ' ' - // [69] *((byte*) clear_screen::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // for(byte* sc = SCREEN; scclear_screen::@1] - // [66] phi (byte*) clear_screen::sc#2 = (byte*) clear_screen::sc#1 [phi:clear_screen::@2->clear_screen::@1#0] -- register_copy - jmp b1 } // gen_sintab // Generate a sinus table using BASIC floats diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.sym b/src/test/ref/examples/sinsprites/sinus-sprites.sym index 7138273f8..fbb59556f 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.sym +++ b/src/test/ref/examples/sinsprites/sinus-sprites.sym @@ -78,8 +78,8 @@ (label) clear_screen::@2 (label) clear_screen::@return (byte*) clear_screen::sc -(byte*) clear_screen::sc#1 sc zp ZP_WORD:19 22.0 -(byte*) clear_screen::sc#2 sc zp ZP_WORD:19 14.666666666666666 +(byte*) clear_screen::sc#1 sc zp ZP_WORD:19 16.5 +(byte*) clear_screen::sc#4 sc zp ZP_WORD:19 16.5 (void()) divMEMbyFAC((byte*) divMEMbyFAC::mem) (label) divMEMbyFAC::@1 (label) divMEMbyFAC::@return @@ -333,7 +333,7 @@ reg byte a [ gen_sintab::$25 ] reg byte a [ prepareMEM::$0 ] reg byte a [ prepareMEM::$1 ] reg byte x [ gen_chargen_sprite::ch#0 ] -zp ZP_WORD:19 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 gen_sintab::sintab#13 clear_screen::sc#2 clear_screen::sc#1 ] +zp ZP_WORD:19 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ] reg byte a [ gen_chargen_sprite::$3 ] reg byte a [ gen_chargen_sprite::$6 ] reg byte x [ place_sprites::j2#1 ] diff --git a/src/test/ref/fastmultiply-127.asm b/src/test/ref/fastmultiply-127.asm index b26b2873f..f93667b1d 100644 --- a/src/test/ref/fastmultiply-127.asm +++ b/src/test/ref/fastmultiply-127.asm @@ -398,14 +398,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [173] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [173] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [173] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [174] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [173] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [176] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [174] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [177] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [175] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [173] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [173] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [176] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [173] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [173] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [173] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [174] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [173] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [176] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [174] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [177] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [175] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [173] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [173] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [176] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [173] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [173] phi from memset to memset::@2 [phi:memset->memset::@2] + // [173] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [173] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [173] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [174] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [174] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [175] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [176] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -6683,24 +6715,8 @@ memset: { bne b2 // memset::@return // } - // [175] return + // [177] return rts - // memset::@2 - b2: - // *dst = c - // [176] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [177] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [173] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [173] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/fastmultiply-127.sym b/src/test/ref/fastmultiply-127.sym index 5011c9693..a86c0c80b 100644 --- a/src/test/ref/fastmultiply-127.sym +++ b/src/test/ref/fastmultiply-127.sym @@ -38,8 +38,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:5 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:5 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:5 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:5 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -226,7 +226,7 @@ reg byte x [ mulf8u127::b#2 mulf8u127::b#1 mulf8u127::b#0 ] zp ZP_WORD:2 [ print_str::str#3 print_str::str#5 print_str::str#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 print_word::w#2 print_word::w#1 print_word::w#0 print_mulf8s127::c#0 mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 mulf8s127::c#0 mulf8s127::return#0 mulf8u127::return#0 print_mulf8u127::c#0 mulf8u127::return#3 mulf8u127::return#1 ] reg byte y [ print_mulf8u127::a#8 ] zp ZP_BYTE:4 [ print_mulf8u127::b#10 print_mulf8s127::b#10 mulf8s127::b#0 ] -zp ZP_WORD:5 [ memset::dst#2 memset::dst#1 print_line_cursor#32 print_line_cursor#63 print_line_cursor#1 ] +zp ZP_WORD:5 [ memset::dst#4 memset::dst#1 print_line_cursor#32 print_line_cursor#63 print_line_cursor#1 ] reg byte y [ mulf8s127::a#0 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] diff --git a/src/test/ref/flipper-rex2.asm b/src/test/ref/flipper-rex2.asm index 448bd975b..4cacf5008 100644 --- a/src/test/ref/flipper-rex2.asm +++ b/src/test/ref/flipper-rex2.asm @@ -35,7 +35,11 @@ plot: { ldx #0 b1: ldy #0 - b2: + b3: + lda buffer1,x + sta (line),y + inx + iny cpy #$10 bcc b3 lda #$28 @@ -50,12 +54,6 @@ plot: { cmp #0 bne b1 rts - b3: - lda buffer1,x - sta (line),y - inx - iny - jmp b2 } // Flip buffer flip: { diff --git a/src/test/ref/flipper-rex2.cfg b/src/test/ref/flipper-rex2.cfg index a9bf9423f..7e38776a6 100644 --- a/src/test/ref/flipper-rex2.cfg +++ b/src/test/ref/flipper-rex2.cfg @@ -36,26 +36,26 @@ plot: scope:[plot] from main::@5 plot::@1: scope:[plot] from plot plot::@4 [16] (byte) plot::y#4 ← phi( plot/(byte) $10 plot::@4/(byte) plot::y#1 ) [16] (byte*) plot::line#5 ← phi( plot/(const byte*) SCREEN#0+(byte)(number) 5*(number) $28+(byte) $c plot::@4/(byte*) plot::line#1 ) - [16] (byte) plot::i#4 ← phi( plot/(byte) 0 plot::@4/(byte) plot::i#2 ) + [16] (byte) plot::i#4 ← phi( plot/(byte) 0 plot::@4/(byte) plot::i#1 ) + to:plot::@3 +plot::@3: scope:[plot] from plot::@1 plot::@2 + [17] (byte) plot::i#7 ← phi( plot::@2/(byte) plot::i#1 plot::@1/(byte) plot::i#4 ) + [17] (byte) plot::x#4 ← phi( plot::@2/(byte) plot::x#1 plot::@1/(byte) 0 ) + [18] *((byte*) plot::line#5 + (byte) plot::x#4) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#7) + [19] (byte) plot::i#1 ← ++ (byte) plot::i#7 + [20] (byte) plot::x#1 ← ++ (byte) plot::x#4 to:plot::@2 -plot::@2: scope:[plot] from plot::@1 plot::@3 - [17] (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#4 plot::@3/(byte) plot::i#1 ) - [17] (byte) plot::x#2 ← phi( plot::@1/(byte) 0 plot::@3/(byte) plot::x#1 ) - [18] if((byte) plot::x#2<(byte) $10) goto plot::@3 +plot::@2: scope:[plot] from plot::@3 + [21] if((byte) plot::x#1<(byte) $10) goto plot::@3 to:plot::@4 plot::@4: scope:[plot] from plot::@2 - [19] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 - [20] (byte) plot::y#1 ← -- (byte) plot::y#4 - [21] if((byte) plot::y#1!=(byte) 0) goto plot::@1 + [22] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 + [23] (byte) plot::y#1 ← -- (byte) plot::y#4 + [24] if((byte) plot::y#1!=(byte) 0) goto plot::@1 to:plot::@return plot::@return: scope:[plot] from plot::@4 - [22] return + [25] return to:@return -plot::@3: scope:[plot] from plot::@2 - [23] *((byte*) plot::line#5 + (byte) plot::x#2) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#2) - [24] (byte) plot::i#1 ← ++ (byte) plot::i#2 - [25] (byte) plot::x#1 ← ++ (byte) plot::x#2 - to:plot::@2 flip: scope:[flip] from main::@4 [26] phi() to:flip::@1 diff --git a/src/test/ref/flipper-rex2.log b/src/test/ref/flipper-rex2.log index c61be724b..b9a9d4186 100644 --- a/src/test/ref/flipper-rex2.log +++ b/src/test/ref/flipper-rex2.log @@ -386,6 +386,7 @@ Resolved ranged next value [69] plot::y#1 ← -- plot::y#4 to -- Resolved ranged comparison value [71] if(plot::y#1!=rangelast($10,1)) goto plot::@1 to (number) 0 Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 0 in if((byte) main::c#1!=(number) 0) goto main::@3 Adding number conversion cast (unumber) 0 in if((byte) prepare::i#1!=(number) 0) goto prepare::@1 Adding number conversion cast (unumber) 0 in if((byte) flip::c#1!=(number) 0) goto flip::@2 @@ -407,10 +408,21 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) plot::x#1 = (byte) plot::x#2 +Alias (byte) plot::i#1 = (byte) plot::i#2 +Alias (byte) plot::i#4 = (byte) plot::i#8 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) plot::x#5 (const byte) plot::x#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [28] (byte*~) plot::$0 ← (const byte*) SCREEN#0 + (byte)(number) 5*(number) $28 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) plot::$0 = SCREEN#0+(byte)5*$28 Successful SSA optimization Pass2ConstantIdentification +Removing PHI-reference to removed block (plot::@2_1) in block plot::@4 +if() condition always true - replacing block destination [44] if((const byte) plot::x#0<(byte) $10) goto plot::@3 +Successful SSA optimization Pass2ConstantIfs +Alias (byte) plot::i#1 = (byte) plot::i#6 +Successful SSA optimization Pass2AliasElimination Constant right-side identified [28] (byte*) plot::line#0 ← (const byte*) plot::$0 + (byte) $c Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) plot::line#0 = plot::$0+$c @@ -446,6 +458,7 @@ Added new block during phi lifting flip::@7(between flip::@3 and flip::@1) Added new block during phi lifting flip::@8(between flip::@2 and flip::@2) Added new block during phi lifting flip::@9(between flip::@5 and flip::@5) Added new block during phi lifting plot::@9(between plot::@4 and plot::@1) +Added new block during phi lifting plot::@10(between plot::@2 and plot::@3) Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @5 @@ -467,12 +480,12 @@ Calls in [main] to prepare:6 flip:15 plot:17 Created 14 initial phi equivalence classes Coalesced [19] main::c#6 ← main::c#1 Coalesced (already) [20] main::c#5 ← main::c#4 -Coalesced [23] plot::i#7 ← plot::i#4 -Coalesced (already) [30] plot::i#6 ← plot::i#2 -Coalesced [31] plot::line#6 ← plot::line#1 -Coalesced [32] plot::y#6 ← plot::y#1 -Coalesced [36] plot::x#4 ← plot::x#1 -Coalesced [37] plot::i#8 ← plot::i#1 +Coalesced [23] plot::i#11 ← plot::i#4 +Coalesced [33] plot::i#9 ← plot::i#1 +Coalesced [34] plot::line#6 ← plot::line#1 +Coalesced [35] plot::y#6 ← plot::y#1 +Coalesced [36] plot::x#6 ← plot::x#1 +Coalesced (already) [37] plot::i#10 ← plot::i#1 Coalesced [40] flip::srcIdx#6 ← flip::srcIdx#3 Coalesced [41] flip::dstIdx#7 ← flip::dstIdx#5 Coalesced [57] flip::i#3 ← flip::i#1 @@ -490,7 +503,9 @@ Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@11 Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@12 +Culled Empty Block (label) plot::@2_1 Culled Empty Block (label) plot::@9 +Culled Empty Block (label) plot::@10 Culled Empty Block (label) flip::@4 Culled Empty Block (label) flip::@9 Culled Empty Block (label) flip::@7 @@ -552,26 +567,26 @@ plot: scope:[plot] from main::@5 plot::@1: scope:[plot] from plot plot::@4 [16] (byte) plot::y#4 ← phi( plot/(byte) $10 plot::@4/(byte) plot::y#1 ) [16] (byte*) plot::line#5 ← phi( plot/(const byte*) SCREEN#0+(byte)(number) 5*(number) $28+(byte) $c plot::@4/(byte*) plot::line#1 ) - [16] (byte) plot::i#4 ← phi( plot/(byte) 0 plot::@4/(byte) plot::i#2 ) + [16] (byte) plot::i#4 ← phi( plot/(byte) 0 plot::@4/(byte) plot::i#1 ) + to:plot::@3 +plot::@3: scope:[plot] from plot::@1 plot::@2 + [17] (byte) plot::i#7 ← phi( plot::@2/(byte) plot::i#1 plot::@1/(byte) plot::i#4 ) + [17] (byte) plot::x#4 ← phi( plot::@2/(byte) plot::x#1 plot::@1/(byte) 0 ) + [18] *((byte*) plot::line#5 + (byte) plot::x#4) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#7) + [19] (byte) plot::i#1 ← ++ (byte) plot::i#7 + [20] (byte) plot::x#1 ← ++ (byte) plot::x#4 to:plot::@2 -plot::@2: scope:[plot] from plot::@1 plot::@3 - [17] (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#4 plot::@3/(byte) plot::i#1 ) - [17] (byte) plot::x#2 ← phi( plot::@1/(byte) 0 plot::@3/(byte) plot::x#1 ) - [18] if((byte) plot::x#2<(byte) $10) goto plot::@3 +plot::@2: scope:[plot] from plot::@3 + [21] if((byte) plot::x#1<(byte) $10) goto plot::@3 to:plot::@4 plot::@4: scope:[plot] from plot::@2 - [19] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 - [20] (byte) plot::y#1 ← -- (byte) plot::y#4 - [21] if((byte) plot::y#1!=(byte) 0) goto plot::@1 + [22] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 + [23] (byte) plot::y#1 ← -- (byte) plot::y#4 + [24] if((byte) plot::y#1!=(byte) 0) goto plot::@1 to:plot::@return plot::@return: scope:[plot] from plot::@4 - [22] return + [25] return to:@return -plot::@3: scope:[plot] from plot::@2 - [23] *((byte*) plot::line#5 + (byte) plot::x#2) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#2) - [24] (byte) plot::i#1 ← ++ (byte) plot::i#2 - [25] (byte) plot::x#1 ← ++ (byte) plot::x#2 - to:plot::@2 flip: scope:[flip] from main::@4 [26] phi() to:flip::@1 @@ -648,15 +663,15 @@ VARIABLE REGISTER WEIGHTS (byte) main::c#4 734.6666666666666 (void()) plot() (byte) plot::i -(byte) plot::i#1 1001.0 -(byte) plot::i#2 534.1666666666667 +(byte) plot::i#1 350.5 (byte) plot::i#4 202.0 +(byte) plot::i#7 1552.0 (byte*) plot::line (byte*) plot::line#1 67.33333333333333 -(byte*) plot::line#5 200.5 +(byte*) plot::line#5 200.50000000000003 (byte) plot::x -(byte) plot::x#1 2002.0 -(byte) plot::x#2 1001.0 +(byte) plot::x#1 1501.5 +(byte) plot::x#4 1001.0 (byte) plot::y (byte) plot::y#1 151.5 (byte) plot::y#4 28.857142857142858 @@ -667,10 +682,10 @@ VARIABLE REGISTER WEIGHTS Initial phi equivalence classes [ main::c#4 main::c#1 ] -[ plot::i#4 plot::i#2 plot::i#1 ] [ plot::line#5 plot::line#1 ] [ plot::y#4 plot::y#1 ] -[ plot::x#2 plot::x#1 ] +[ plot::x#4 plot::x#1 ] +[ plot::i#7 plot::i#4 plot::i#1 ] [ flip::r#4 flip::r#1 ] [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] @@ -679,10 +694,10 @@ Initial phi equivalence classes [ prepare::i#2 prepare::i#1 ] Complete equivalence classes [ main::c#4 main::c#1 ] -[ plot::i#4 plot::i#2 plot::i#1 ] [ plot::line#5 plot::line#1 ] [ plot::y#4 plot::y#1 ] -[ plot::x#2 plot::x#1 ] +[ plot::x#4 plot::x#1 ] +[ plot::i#7 plot::i#4 plot::i#1 ] [ flip::r#4 flip::r#1 ] [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] @@ -690,10 +705,10 @@ Complete equivalence classes [ flip::i#2 flip::i#1 ] [ prepare::i#2 prepare::i#1 ] Allocated zp ZP_BYTE:2 [ main::c#4 main::c#1 ] -Allocated zp ZP_BYTE:3 [ plot::i#4 plot::i#2 plot::i#1 ] -Allocated zp ZP_WORD:4 [ plot::line#5 plot::line#1 ] -Allocated zp ZP_BYTE:6 [ plot::y#4 plot::y#1 ] -Allocated zp ZP_BYTE:7 [ plot::x#2 plot::x#1 ] +Allocated zp ZP_WORD:3 [ plot::line#5 plot::line#1 ] +Allocated zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] +Allocated zp ZP_BYTE:6 [ plot::x#4 plot::x#1 ] +Allocated zp ZP_BYTE:7 [ plot::i#7 plot::i#4 plot::i#1 ] Allocated zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] Allocated zp ZP_BYTE:9 [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] Allocated zp ZP_BYTE:10 [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] @@ -791,10 +806,10 @@ main: { // plot // Plot buffer on screen plot: { - .label i = 3 - .label x = 7 - .label line = 4 - .label y = 6 + .label i = 7 + .label x = 6 + .label line = 3 + .label y = 5 // [16] phi from plot to plot::@1 [phi:plot->plot::@1] b1_from_plot: // [16] phi (byte) plot::y#4 = (byte) $10 [phi:plot->plot::@1#0] -- vbuz1=vbuc1 @@ -813,27 +828,44 @@ plot: { b1_from_b4: // [16] phi (byte) plot::y#4 = (byte) plot::y#1 [phi:plot::@4->plot::@1#0] -- register_copy // [16] phi (byte*) plot::line#5 = (byte*) plot::line#1 [phi:plot::@4->plot::@1#1] -- register_copy - // [16] phi (byte) plot::i#4 = (byte) plot::i#2 [phi:plot::@4->plot::@1#2] -- register_copy + // [16] phi (byte) plot::i#4 = (byte) plot::i#1 [phi:plot::@4->plot::@1#2] -- register_copy jmp b1 // plot::@1 b1: - // [17] phi from plot::@1 to plot::@2 [phi:plot::@1->plot::@2] - b2_from_b1: - // [17] phi (byte) plot::i#2 = (byte) plot::i#4 [phi:plot::@1->plot::@2#0] -- register_copy - // [17] phi (byte) plot::x#2 = (byte) 0 [phi:plot::@1->plot::@2#1] -- vbuz1=vbuc1 + // [17] phi from plot::@1 to plot::@3 [phi:plot::@1->plot::@3] + b3_from_b1: + // [17] phi (byte) plot::i#7 = (byte) plot::i#4 [phi:plot::@1->plot::@3#0] -- register_copy + // [17] phi (byte) plot::x#4 = (byte) 0 [phi:plot::@1->plot::@3#1] -- vbuz1=vbuc1 lda #0 sta x + jmp b3 + // [17] phi from plot::@2 to plot::@3 [phi:plot::@2->plot::@3] + b3_from_b2: + // [17] phi (byte) plot::i#7 = (byte) plot::i#1 [phi:plot::@2->plot::@3#0] -- register_copy + // [17] phi (byte) plot::x#4 = (byte) plot::x#1 [phi:plot::@2->plot::@3#1] -- register_copy + jmp b3 + // plot::@3 + b3: + // [18] *((byte*) plot::line#5 + (byte) plot::x#4) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#7) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuz3 + ldy i + lda buffer1,y + ldy x + sta (line),y + // [19] (byte) plot::i#1 ← ++ (byte) plot::i#7 -- vbuz1=_inc_vbuz1 + inc i + // [20] (byte) plot::x#1 ← ++ (byte) plot::x#4 -- vbuz1=_inc_vbuz1 + inc x jmp b2 // plot::@2 b2: - // [18] if((byte) plot::x#2<(byte) $10) goto plot::@3 -- vbuz1_lt_vbuc1_then_la1 + // [21] if((byte) plot::x#1<(byte) $10) goto plot::@3 -- vbuz1_lt_vbuc1_then_la1 lda x cmp #$10 - bcc b3 + bcc b3_from_b2 jmp b4 // plot::@4 b4: - // [19] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [22] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc line @@ -841,33 +873,17 @@ plot: { bcc !+ inc line+1 !: - // [20] (byte) plot::y#1 ← -- (byte) plot::y#4 -- vbuz1=_dec_vbuz1 + // [23] (byte) plot::y#1 ← -- (byte) plot::y#4 -- vbuz1=_dec_vbuz1 dec y - // [21] if((byte) plot::y#1!=(byte) 0) goto plot::@1 -- vbuz1_neq_0_then_la1 + // [24] if((byte) plot::y#1!=(byte) 0) goto plot::@1 -- vbuz1_neq_0_then_la1 lda y cmp #0 bne b1_from_b4 jmp breturn // plot::@return breturn: - // [22] return + // [25] return rts - // plot::@3 - b3: - // [23] *((byte*) plot::line#5 + (byte) plot::x#2) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#2) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuz3 - ldy i - lda buffer1,y - ldy x - sta (line),y - // [24] (byte) plot::i#1 ← ++ (byte) plot::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [25] (byte) plot::x#1 ← ++ (byte) plot::x#2 -- vbuz1=_inc_vbuz1 - inc x - // [17] phi from plot::@3 to plot::@2 [phi:plot::@3->plot::@2] - b2_from_b3: - // [17] phi (byte) plot::i#2 = (byte) plot::i#1 [phi:plot::@3->plot::@2#0] -- register_copy - // [17] phi (byte) plot::x#2 = (byte) plot::x#1 [phi:plot::@3->plot::@2#1] -- register_copy - jmp b2 } // flip // Flip buffer @@ -1009,11 +1025,11 @@ REGISTER UPLIFT POTENTIAL REGISTERS Statement [7] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@1 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::c#4 main::c#1 ] Statement [8] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a -Statement [19] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 [ plot::y#4 plot::i#2 plot::line#1 ] ( main:2::plot:14 [ plot::y#4 plot::i#2 plot::line#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ plot::y#4 plot::y#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ plot::i#4 plot::i#2 plot::i#1 ] -Statement [23] *((byte*) plot::line#5 + (byte) plot::x#2) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#2) [ plot::line#5 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#5 plot::y#4 plot::i#2 plot::x#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ plot::x#2 plot::x#1 ] +Statement [18] *((byte*) plot::line#5 + (byte) plot::x#4) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#7) [ plot::line#5 plot::y#4 plot::x#4 plot::i#7 ] ( main:2::plot:14 [ plot::line#5 plot::y#4 plot::x#4 plot::i#7 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ plot::x#4 plot::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ plot::i#7 plot::i#4 plot::i#1 ] +Statement [22] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 [ plot::y#4 plot::i#1 plot::line#1 ] ( main:2::plot:14 [ plot::y#4 plot::i#1 plot::line#1 ] ) always clobbers reg byte a Statement [29] *((const byte[$10*$10]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[$10*$10]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] @@ -1024,16 +1040,16 @@ Statement [38] *((const byte[$10*$10]) buffer1#0 + (byte) flip::i#2) ← *((cons Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ flip::i#2 flip::i#1 ] Statement [7] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@1 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a Statement [8] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a -Statement [19] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 [ plot::y#4 plot::i#2 plot::line#1 ] ( main:2::plot:14 [ plot::y#4 plot::i#2 plot::line#1 ] ) always clobbers reg byte a -Statement [23] *((byte*) plot::line#5 + (byte) plot::x#2) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#2) [ plot::line#5 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#5 plot::y#4 plot::i#2 plot::x#2 ] ) always clobbers reg byte a +Statement [18] *((byte*) plot::line#5 + (byte) plot::x#4) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#7) [ plot::line#5 plot::y#4 plot::x#4 plot::i#7 ] ( main:2::plot:14 [ plot::line#5 plot::y#4 plot::x#4 plot::i#7 ] ) always clobbers reg byte a +Statement [22] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 [ plot::y#4 plot::i#1 plot::line#1 ] ( main:2::plot:14 [ plot::y#4 plot::i#1 plot::line#1 ] ) always clobbers reg byte a Statement [29] *((const byte[$10*$10]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[$10*$10]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) always clobbers reg byte a Statement [31] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte) $10 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ) always clobbers reg byte a Statement [38] *((const byte[$10*$10]) buffer1#0 + (byte) flip::i#2) ← *((const byte[$10*$10]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::c#4 main::c#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ plot::i#4 plot::i#2 plot::i#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:4 [ plot::line#5 plot::line#1 ] : zp ZP_WORD:4 , -Potential registers zp ZP_BYTE:6 [ plot::y#4 plot::y#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:7 [ plot::x#2 plot::x#1 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:3 [ plot::line#5 plot::line#1 ] : zp ZP_WORD:3 , +Potential registers zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ plot::x#4 plot::x#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ plot::i#7 plot::i#4 plot::i#1 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:9 [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:10 [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , @@ -1043,25 +1059,25 @@ Potential registers zp ZP_BYTE:13 [ prepare::i#2 prepare::i#1 ] : zp ZP_BYTE:13 REGISTER UPLIFT SCOPES Uplift Scope [flip] 2,054.43: zp ZP_BYTE:9 [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] 2,005: zp ZP_BYTE:10 [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] 2,002: zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] 353.5: zp ZP_BYTE:12 [ flip::i#2 flip::i#1 ] 176.75: zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] -Uplift Scope [plot] 3,003: zp ZP_BYTE:7 [ plot::x#2 plot::x#1 ] 1,737.17: zp ZP_BYTE:3 [ plot::i#4 plot::i#2 plot::i#1 ] 267.83: zp ZP_WORD:4 [ plot::line#5 plot::line#1 ] 180.36: zp ZP_BYTE:6 [ plot::y#4 plot::y#1 ] +Uplift Scope [plot] 2,502.5: zp ZP_BYTE:6 [ plot::x#4 plot::x#1 ] 2,104.5: zp ZP_BYTE:7 [ plot::i#7 plot::i#4 plot::i#1 ] 267.83: zp ZP_WORD:3 [ plot::line#5 plot::line#1 ] 180.36: zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] Uplift Scope [main] 886.17: zp ZP_BYTE:2 [ main::c#4 main::c#1 ] Uplift Scope [prepare] 38.5: zp ZP_BYTE:13 [ prepare::i#2 prepare::i#1 ] Uplift Scope [] -Uplifting [flip] best 137276 combination reg byte y [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] reg byte x [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] reg byte x [ flip::i#2 flip::i#1 ] zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] +Uplifting [flip] best 140276 combination reg byte y [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] reg byte x [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] reg byte x [ flip::i#2 flip::i#1 ] zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] Limited combination testing to 100 combinations of 243 possible. -Uplifting [plot] best 118976 combination reg byte y [ plot::x#2 plot::x#1 ] reg byte x [ plot::i#4 plot::i#2 plot::i#1 ] zp ZP_WORD:4 [ plot::line#5 plot::line#1 ] zp ZP_BYTE:6 [ plot::y#4 plot::y#1 ] -Uplifting [main] best 115376 combination reg byte x [ main::c#4 main::c#1 ] -Uplifting [prepare] best 115256 combination reg byte x [ prepare::i#2 prepare::i#1 ] -Uplifting [] best 115256 combination +Uplifting [plot] best 121976 combination reg byte y [ plot::x#4 plot::x#1 ] reg byte x [ plot::i#7 plot::i#4 plot::i#1 ] zp ZP_WORD:3 [ plot::line#5 plot::line#1 ] zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] +Uplifting [main] best 118376 combination reg byte x [ main::c#4 main::c#1 ] +Uplifting [prepare] best 118256 combination reg byte x [ prepare::i#2 prepare::i#1 ] +Uplifting [] best 118256 combination Attempting to uplift remaining variables inzp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] -Uplifting [flip] best 115256 combination zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:6 [ plot::y#4 plot::y#1 ] -Uplifting [plot] best 115256 combination zp ZP_BYTE:6 [ plot::y#4 plot::y#1 ] +Uplifting [flip] best 118256 combination zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] +Uplifting [plot] best 118256 combination zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] -Uplifting [flip] best 115256 combination zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] -Coalescing zero page register [ zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] ] with [ zp ZP_BYTE:6 [ plot::y#4 plot::y#1 ] ] -Allocated (was zp ZP_WORD:4) zp ZP_WORD:2 [ plot::line#5 plot::line#1 ] +Uplifting [flip] best 118256 combination zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] +Coalescing zero page register [ zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] ] with [ zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] ] +Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ plot::line#5 plot::line#1 ] Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:4 [ flip::r#4 flip::r#1 plot::y#4 plot::y#1 ] Allocated (was zp ZP_BYTE:11) zp ZP_BYTE:5 [ flip::c#2 flip::c#1 ] @@ -1170,25 +1186,40 @@ plot: { b1_from_b4: // [16] phi (byte) plot::y#4 = (byte) plot::y#1 [phi:plot::@4->plot::@1#0] -- register_copy // [16] phi (byte*) plot::line#5 = (byte*) plot::line#1 [phi:plot::@4->plot::@1#1] -- register_copy - // [16] phi (byte) plot::i#4 = (byte) plot::i#2 [phi:plot::@4->plot::@1#2] -- register_copy + // [16] phi (byte) plot::i#4 = (byte) plot::i#1 [phi:plot::@4->plot::@1#2] -- register_copy jmp b1 // plot::@1 b1: - // [17] phi from plot::@1 to plot::@2 [phi:plot::@1->plot::@2] - b2_from_b1: - // [17] phi (byte) plot::i#2 = (byte) plot::i#4 [phi:plot::@1->plot::@2#0] -- register_copy - // [17] phi (byte) plot::x#2 = (byte) 0 [phi:plot::@1->plot::@2#1] -- vbuyy=vbuc1 + // [17] phi from plot::@1 to plot::@3 [phi:plot::@1->plot::@3] + b3_from_b1: + // [17] phi (byte) plot::i#7 = (byte) plot::i#4 [phi:plot::@1->plot::@3#0] -- register_copy + // [17] phi (byte) plot::x#4 = (byte) 0 [phi:plot::@1->plot::@3#1] -- vbuyy=vbuc1 ldy #0 + jmp b3 + // [17] phi from plot::@2 to plot::@3 [phi:plot::@2->plot::@3] + b3_from_b2: + // [17] phi (byte) plot::i#7 = (byte) plot::i#1 [phi:plot::@2->plot::@3#0] -- register_copy + // [17] phi (byte) plot::x#4 = (byte) plot::x#1 [phi:plot::@2->plot::@3#1] -- register_copy + jmp b3 + // plot::@3 + b3: + // [18] *((byte*) plot::line#5 + (byte) plot::x#4) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#7) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx + lda buffer1,x + sta (line),y + // [19] (byte) plot::i#1 ← ++ (byte) plot::i#7 -- vbuxx=_inc_vbuxx + inx + // [20] (byte) plot::x#1 ← ++ (byte) plot::x#4 -- vbuyy=_inc_vbuyy + iny jmp b2 // plot::@2 b2: - // [18] if((byte) plot::x#2<(byte) $10) goto plot::@3 -- vbuyy_lt_vbuc1_then_la1 + // [21] if((byte) plot::x#1<(byte) $10) goto plot::@3 -- vbuyy_lt_vbuc1_then_la1 cpy #$10 - bcc b3 + bcc b3_from_b2 jmp b4 // plot::@4 b4: - // [19] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [22] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc line @@ -1196,31 +1227,17 @@ plot: { bcc !+ inc line+1 !: - // [20] (byte) plot::y#1 ← -- (byte) plot::y#4 -- vbuz1=_dec_vbuz1 + // [23] (byte) plot::y#1 ← -- (byte) plot::y#4 -- vbuz1=_dec_vbuz1 dec y - // [21] if((byte) plot::y#1!=(byte) 0) goto plot::@1 -- vbuz1_neq_0_then_la1 + // [24] if((byte) plot::y#1!=(byte) 0) goto plot::@1 -- vbuz1_neq_0_then_la1 lda y cmp #0 bne b1_from_b4 jmp breturn // plot::@return breturn: - // [22] return + // [25] return rts - // plot::@3 - b3: - // [23] *((byte*) plot::line#5 + (byte) plot::x#2) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#2) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx - lda buffer1,x - sta (line),y - // [24] (byte) plot::i#1 ← ++ (byte) plot::i#2 -- vbuxx=_inc_vbuxx - inx - // [25] (byte) plot::x#1 ← ++ (byte) plot::x#2 -- vbuyy=_inc_vbuyy - iny - // [17] phi from plot::@3 to plot::@2 [phi:plot::@3->plot::@2] - b2_from_b3: - // [17] phi (byte) plot::i#2 = (byte) plot::i#1 [phi:plot::@3->plot::@2#0] -- register_copy - // [17] phi (byte) plot::x#2 = (byte) plot::x#1 [phi:plot::@3->plot::@2#1] -- register_copy - jmp b2 } // flip // Flip buffer @@ -1352,6 +1369,7 @@ Removing instruction jmp b3 Removing instruction jmp b4 Removing instruction jmp b5 Removing instruction jmp b1 +Removing instruction jmp b3 Removing instruction jmp b2 Removing instruction jmp b4 Removing instruction jmp breturn @@ -1365,6 +1383,7 @@ Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Replacing label b1_from_b1 with b1 Replacing label b1_from_b3 with b1 +Replacing label b3_from_b2 with b3 Replacing label b1_from_b4 with b1 Replacing label b2_from_b2 with b2 Replacing label b1_from_b3 with b1 @@ -1382,7 +1401,8 @@ Removing instruction flip_from_b4: Removing instruction b5_from_b4: Removing instruction plot_from_b5: Removing instruction b1_from_b4: -Removing instruction b2_from_b1: +Removing instruction b3_from_b1: +Removing instruction b3_from_b2: Removing instruction b1_from_b3: Removing instruction b2_from_b1: Removing instruction b2_from_b2: @@ -1395,9 +1415,9 @@ Removing instruction b3: Removing instruction b4: Removing instruction b5: Removing instruction b1_from_plot: +Removing instruction b2: Removing instruction b4: Removing instruction breturn: -Removing instruction b2_from_b3: Removing instruction b1_from_flip: Removing instruction b3: Removing instruction b4_from_b3: @@ -1412,6 +1432,7 @@ Relabelling long label b1_from_b5 to b3 Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp b1 Removing instruction jmp b1 +Removing instruction jmp b3 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b4 @@ -1472,15 +1493,15 @@ FINAL SYMBOL TABLE (label) plot::@4 (label) plot::@return (byte) plot::i -(byte) plot::i#1 reg byte x 1001.0 -(byte) plot::i#2 reg byte x 534.1666666666667 +(byte) plot::i#1 reg byte x 350.5 (byte) plot::i#4 reg byte x 202.0 +(byte) plot::i#7 reg byte x 1552.0 (byte*) plot::line (byte*) plot::line#1 line zp ZP_WORD:2 67.33333333333333 -(byte*) plot::line#5 line zp ZP_WORD:2 200.5 +(byte*) plot::line#5 line zp ZP_WORD:2 200.50000000000003 (byte) plot::x -(byte) plot::x#1 reg byte y 2002.0 -(byte) plot::x#2 reg byte y 1001.0 +(byte) plot::x#1 reg byte y 1501.5 +(byte) plot::x#4 reg byte y 1001.0 (byte) plot::y (byte) plot::y#1 y zp ZP_BYTE:4 151.5 (byte) plot::y#4 y zp ZP_BYTE:4 28.857142857142858 @@ -1492,9 +1513,9 @@ FINAL SYMBOL TABLE (byte) prepare::i#2 reg byte x 22.0 reg byte x [ main::c#4 main::c#1 ] -reg byte x [ plot::i#4 plot::i#2 plot::i#1 ] zp ZP_WORD:2 [ plot::line#5 plot::line#1 ] -reg byte y [ plot::x#2 plot::x#1 ] +reg byte y [ plot::x#4 plot::x#1 ] +reg byte x [ plot::i#7 plot::i#4 plot::i#1 ] zp ZP_BYTE:4 [ flip::r#4 flip::r#1 plot::y#4 plot::y#1 ] reg byte y [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] reg byte x [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] @@ -1504,7 +1525,7 @@ reg byte x [ prepare::i#2 prepare::i#1 ] FINAL ASSEMBLER -Score: 85694 +Score: 82694 // File Comments // Upstart @@ -1587,22 +1608,35 @@ plot: { // [16] phi from plot::@4 to plot::@1 [phi:plot::@4->plot::@1] // [16] phi (byte) plot::y#4 = (byte) plot::y#1 [phi:plot::@4->plot::@1#0] -- register_copy // [16] phi (byte*) plot::line#5 = (byte*) plot::line#1 [phi:plot::@4->plot::@1#1] -- register_copy - // [16] phi (byte) plot::i#4 = (byte) plot::i#2 [phi:plot::@4->plot::@1#2] -- register_copy + // [16] phi (byte) plot::i#4 = (byte) plot::i#1 [phi:plot::@4->plot::@1#2] -- register_copy // plot::@1 b1: - // [17] phi from plot::@1 to plot::@2 [phi:plot::@1->plot::@2] - // [17] phi (byte) plot::i#2 = (byte) plot::i#4 [phi:plot::@1->plot::@2#0] -- register_copy - // [17] phi (byte) plot::x#2 = (byte) 0 [phi:plot::@1->plot::@2#1] -- vbuyy=vbuc1 + // [17] phi from plot::@1 to plot::@3 [phi:plot::@1->plot::@3] + // [17] phi (byte) plot::i#7 = (byte) plot::i#4 [phi:plot::@1->plot::@3#0] -- register_copy + // [17] phi (byte) plot::x#4 = (byte) 0 [phi:plot::@1->plot::@3#1] -- vbuyy=vbuc1 ldy #0 - // plot::@2 - b2: + // [17] phi from plot::@2 to plot::@3 [phi:plot::@2->plot::@3] + // [17] phi (byte) plot::i#7 = (byte) plot::i#1 [phi:plot::@2->plot::@3#0] -- register_copy + // [17] phi (byte) plot::x#4 = (byte) plot::x#1 [phi:plot::@2->plot::@3#1] -- register_copy + // plot::@3 + b3: + // line[x] = buffer1[i++] + // [18] *((byte*) plot::line#5 + (byte) plot::x#4) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#7) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx + lda buffer1,x + sta (line),y + // line[x] = buffer1[i++]; + // [19] (byte) plot::i#1 ← ++ (byte) plot::i#7 -- vbuxx=_inc_vbuxx + inx // for(byte x=0; x<16; x++ ) - // [18] if((byte) plot::x#2<(byte) $10) goto plot::@3 -- vbuyy_lt_vbuc1_then_la1 + // [20] (byte) plot::x#1 ← ++ (byte) plot::x#4 -- vbuyy=_inc_vbuyy + iny + // plot::@2 + // [21] if((byte) plot::x#1<(byte) $10) goto plot::@3 -- vbuyy_lt_vbuc1_then_la1 cpy #$10 bcc b3 // plot::@4 // line = line+40 - // [19] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [22] (byte*) plot::line#1 ← (byte*) plot::line#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc line @@ -1611,32 +1645,16 @@ plot: { inc line+1 !: // for(byte y : 16..1) - // [20] (byte) plot::y#1 ← -- (byte) plot::y#4 -- vbuz1=_dec_vbuz1 + // [23] (byte) plot::y#1 ← -- (byte) plot::y#4 -- vbuz1=_dec_vbuz1 dec y - // [21] if((byte) plot::y#1!=(byte) 0) goto plot::@1 -- vbuz1_neq_0_then_la1 + // [24] if((byte) plot::y#1!=(byte) 0) goto plot::@1 -- vbuz1_neq_0_then_la1 lda y cmp #0 bne b1 // plot::@return // } - // [22] return + // [25] return rts - // plot::@3 - b3: - // line[x] = buffer1[i++] - // [23] *((byte*) plot::line#5 + (byte) plot::x#2) ← *((const byte[$10*$10]) buffer1#0 + (byte) plot::i#2) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx - lda buffer1,x - sta (line),y - // line[x] = buffer1[i++]; - // [24] (byte) plot::i#1 ← ++ (byte) plot::i#2 -- vbuxx=_inc_vbuxx - inx - // for(byte x=0; x<16; x++ ) - // [25] (byte) plot::x#1 ← ++ (byte) plot::x#2 -- vbuyy=_inc_vbuyy - iny - // [17] phi from plot::@3 to plot::@2 [phi:plot::@3->plot::@2] - // [17] phi (byte) plot::i#2 = (byte) plot::i#1 [phi:plot::@3->plot::@2#0] -- register_copy - // [17] phi (byte) plot::x#2 = (byte) plot::x#1 [phi:plot::@3->plot::@2#1] -- register_copy - jmp b2 } // flip // Flip buffer diff --git a/src/test/ref/flipper-rex2.sym b/src/test/ref/flipper-rex2.sym index 02d2eea60..ad40546cf 100644 --- a/src/test/ref/flipper-rex2.sym +++ b/src/test/ref/flipper-rex2.sym @@ -49,15 +49,15 @@ (label) plot::@4 (label) plot::@return (byte) plot::i -(byte) plot::i#1 reg byte x 1001.0 -(byte) plot::i#2 reg byte x 534.1666666666667 +(byte) plot::i#1 reg byte x 350.5 (byte) plot::i#4 reg byte x 202.0 +(byte) plot::i#7 reg byte x 1552.0 (byte*) plot::line (byte*) plot::line#1 line zp ZP_WORD:2 67.33333333333333 -(byte*) plot::line#5 line zp ZP_WORD:2 200.5 +(byte*) plot::line#5 line zp ZP_WORD:2 200.50000000000003 (byte) plot::x -(byte) plot::x#1 reg byte y 2002.0 -(byte) plot::x#2 reg byte y 1001.0 +(byte) plot::x#1 reg byte y 1501.5 +(byte) plot::x#4 reg byte y 1001.0 (byte) plot::y (byte) plot::y#1 y zp ZP_BYTE:4 151.5 (byte) plot::y#4 y zp ZP_BYTE:4 28.857142857142858 @@ -69,9 +69,9 @@ (byte) prepare::i#2 reg byte x 22.0 reg byte x [ main::c#4 main::c#1 ] -reg byte x [ plot::i#4 plot::i#2 plot::i#1 ] zp ZP_WORD:2 [ plot::line#5 plot::line#1 ] -reg byte y [ plot::x#2 plot::x#1 ] +reg byte y [ plot::x#4 plot::x#1 ] +reg byte x [ plot::i#7 plot::i#4 plot::i#1 ] zp ZP_BYTE:4 [ flip::r#4 flip::r#1 plot::y#4 plot::y#1 ] reg byte y [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] reg byte x [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] diff --git a/src/test/ref/for-empty-increment.asm b/src/test/ref/for-empty-increment.asm index 90f9034c5..29d5040f0 100644 --- a/src/test/ref/for-empty-increment.asm +++ b/src/test/ref/for-empty-increment.asm @@ -5,13 +5,11 @@ main: { .label SCREEN = $400 ldx #0 - b1: - cpx #$a - bcc b2 - rts b2: txa sta SCREEN,x inx - jmp b1 + cpx #$a + bcc b2 + rts } diff --git a/src/test/ref/for-empty-increment.cfg b/src/test/ref/for-empty-increment.cfg index 8e17ec99e..eb4574750 100644 --- a/src/test/ref/for-empty-increment.cfg +++ b/src/test/ref/for-empty-increment.cfg @@ -9,15 +9,15 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1<(byte) $a) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [9] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 diff --git a/src/test/ref/for-empty-increment.log b/src/test/ref/for-empty-increment.log index e5ddd9cbd..8eaf028b5 100644 --- a/src/test/ref/for-empty-increment.log +++ b/src/test/ref/for-empty-increment.log @@ -68,21 +68,32 @@ Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = (byte*) 1024 Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [9] if((const byte) main::i#0<(byte) $a) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 1 initial phi equivalence classes -Coalesced [11] main::i#4 ← main::i#1 +Coalesced [12] main::i#6 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -100,32 +111,32 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1<(byte) $a) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [9] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 VARIABLE REGISTER WEIGHTS (void()) main() (byte*) main::SCREEN (byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 18.333333333333332 +(byte) main::i#1 16.5 +(byte) main::i#4 22.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] INITIAL ASM Target platform is c64basic @@ -156,47 +167,48 @@ bend: main: { .label SCREEN = $400 .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$a - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 // main::@2 b2: - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz1 + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuz1=vbuz1 ldy i tya sta SCREEN,y - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 inc i - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp b1 + // main::@1 + b1: + // [8] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$a + bcc b2_from_b1 + jmp breturn + // main::@return + breturn: + // [9] return + rts } // File Data 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:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 40.33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] Uplift Scope [] -Uplifting [main] best 263 combination reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 263 combination +Uplifting [main] best 293 combination reg byte x [ main::i#4 main::i#1 ] +Uplifting [] best 293 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -225,54 +237,60 @@ bend: // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta SCREEN,x + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [8] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a - bcc b2 + bcc b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [9] return rts - // main::@2 - b2: - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta SCREEN,x - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -287,14 +305,14 @@ FINAL SYMBOL TABLE (byte*) main::SCREEN (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] FINAL ASSEMBLER -Score: 191 +Score: 161 // File Comments // Tests that for()-loops can have empty increments @@ -313,31 +331,29 @@ Score: 191 // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // SCREEN[i] = i++ + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta SCREEN,x + // SCREEN[i] = i++; + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx // main::@1 - b1: // for(unsigned char i=0;i<10;) - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [8] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 // main::@return // } - // [7] return + // [9] return rts - // main::@2 - b2: - // SCREEN[i] = i++ - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta SCREEN,x - // SCREEN[i] = i++; - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/for-empty-increment.sym b/src/test/ref/for-empty-increment.sym index e80172231..bdd6c585d 100644 --- a/src/test/ref/for-empty-increment.sym +++ b/src/test/ref/for-empty-increment.sym @@ -8,7 +8,7 @@ (byte*) main::SCREEN (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] diff --git a/src/test/ref/for-empty-init.asm b/src/test/ref/for-empty-init.asm index 4a5992141..42672a267 100644 --- a/src/test/ref/for-empty-init.asm +++ b/src/test/ref/for-empty-init.asm @@ -5,13 +5,11 @@ main: { .label SCREEN = $400 ldx #0 - b1: - cpx #$a - bcc b2 - rts b2: txa sta SCREEN,x inx - jmp b1 + cpx #$a + bcc b2 + rts } diff --git a/src/test/ref/for-empty-init.cfg b/src/test/ref/for-empty-init.cfg index 8e17ec99e..eb4574750 100644 --- a/src/test/ref/for-empty-init.cfg +++ b/src/test/ref/for-empty-init.cfg @@ -9,15 +9,15 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1<(byte) $a) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [9] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 diff --git a/src/test/ref/for-empty-init.log b/src/test/ref/for-empty-init.log index 12567c966..ea18e8452 100644 --- a/src/test/ref/for-empty-init.log +++ b/src/test/ref/for-empty-init.log @@ -68,21 +68,32 @@ Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = (byte*) 1024 Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [9] if((const byte) main::i#0<(byte) $a) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 1 initial phi equivalence classes -Coalesced [11] main::i#4 ← main::i#1 +Coalesced [12] main::i#6 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -100,32 +111,32 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1<(byte) $a) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [9] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 VARIABLE REGISTER WEIGHTS (void()) main() (byte*) main::SCREEN (byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 18.333333333333332 +(byte) main::i#1 16.5 +(byte) main::i#4 22.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] INITIAL ASM Target platform is c64basic @@ -156,47 +167,48 @@ bend: main: { .label SCREEN = $400 .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$a - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 // main::@2 b2: - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz1 + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuz1=vbuz1 ldy i tya sta SCREEN,y - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 inc i - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp b1 + // main::@1 + b1: + // [8] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$a + bcc b2_from_b1 + jmp breturn + // main::@return + breturn: + // [9] return + rts } // File Data 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:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 40.33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] Uplift Scope [] -Uplifting [main] best 263 combination reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 263 combination +Uplifting [main] best 293 combination reg byte x [ main::i#4 main::i#1 ] +Uplifting [] best 293 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -225,54 +237,60 @@ bend: // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta SCREEN,x + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [8] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a - bcc b2 + bcc b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [9] return rts - // main::@2 - b2: - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta SCREEN,x - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -287,14 +305,14 @@ FINAL SYMBOL TABLE (byte*) main::SCREEN (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] FINAL ASSEMBLER -Score: 191 +Score: 161 // File Comments // Tests that for()-loops can have empty inits @@ -313,31 +331,28 @@ Score: 191 // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // main::@1 - b1: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // SCREEN[i] = i + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta SCREEN,x // for(;i<10;i++) - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx + // main::@1 + // [8] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 // main::@return // } - // [7] return + // [9] return rts - // main::@2 - b2: - // SCREEN[i] = i - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta SCREEN,x - // for(;i<10;i++) - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/for-empty-init.sym b/src/test/ref/for-empty-init.sym index e80172231..bdd6c585d 100644 --- a/src/test/ref/for-empty-init.sym +++ b/src/test/ref/for-empty-init.sym @@ -8,7 +8,7 @@ (byte*) main::SCREEN (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] diff --git a/src/test/ref/for-two-vars.asm b/src/test/ref/for-two-vars.asm index cd13bc0f4..5641f71fe 100644 --- a/src/test/ref/for-two-vars.asm +++ b/src/test/ref/for-two-vars.asm @@ -11,10 +11,6 @@ main: { lda #>SCREEN+$27 sta sc+1 ldx #0 - b1: - cpx #$28 - bcc b2 - rts b2: txa ldy #0 @@ -25,5 +21,7 @@ main: { dec sc+1 !: dec sc - jmp b1 + cpx #$28 + bcc b2 + rts } diff --git a/src/test/ref/for-two-vars.cfg b/src/test/ref/for-two-vars.cfg index edd94d8c1..d12a204c8 100644 --- a/src/test/ref/for-two-vars.cfg +++ b/src/test/ref/for-two-vars.cfg @@ -9,17 +9,17 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::sc#4 ← phi( main::@1/(byte*) main::sc#1 main/(const byte*) main::SCREEN#0+(byte) $27 ) + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((byte*) main::sc#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 + [8] (byte*) main::sc#1 ← -- (byte*) main::sc#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::sc#2 ← phi( main/(const byte*) main::SCREEN#0+(byte) $27 main::@2/(byte*) main::sc#1 ) - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $28) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((byte) main::i#1<(byte) $28) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((byte*) main::sc#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - [10] (byte*) main::sc#1 ← -- (byte*) main::sc#2 - to:main::@1 diff --git a/src/test/ref/for-two-vars.log b/src/test/ref/for-two-vars.log index 01a24b471..ae350d32b 100644 --- a/src/test/ref/for-two-vars.log +++ b/src/test/ref/for-two-vars.log @@ -84,28 +84,41 @@ Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = (byte*) 1024 Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Alias (byte*) main::sc#1 = (byte*) main::sc#2 +Alias (byte*) main::sc#0 = (byte*) main::sc#5 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [0] (byte*) main::sc#0 ← (const byte*) main::SCREEN#0 + (byte) $27 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) main::sc#0 = main::SCREEN#0+$27 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [11] if((const byte) main::i#0<(byte) $28) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte*) main::sc#0 Constant inlined main::i#0 = (byte) 0 Constant inlined main::sc#0 = (const byte*) main::SCREEN#0+(byte) $27 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 2 initial phi equivalence classes -Coalesced [12] main::i#4 ← main::i#1 -Coalesced [13] main::sc#4 ← main::sc#1 +Coalesced [13] main::i#6 ← main::i#1 +Coalesced [14] main::sc#6 ← main::sc#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -123,20 +136,20 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::sc#4 ← phi( main::@1/(byte*) main::sc#1 main/(const byte*) main::SCREEN#0+(byte) $27 ) + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((byte*) main::sc#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 + [8] (byte*) main::sc#1 ← -- (byte*) main::sc#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::sc#2 ← phi( main/(const byte*) main::SCREEN#0+(byte) $27 main::@2/(byte*) main::sc#1 ) - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $28) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((byte) main::i#1<(byte) $28) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((byte*) main::sc#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - [10] (byte*) main::sc#1 ← -- (byte*) main::sc#2 - to:main::@1 VARIABLE REGISTER WEIGHTS @@ -144,19 +157,19 @@ VARIABLE REGISTER WEIGHTS (byte*) main::SCREEN (byte) main::i (byte) main::i#1 11.0 -(byte) main::i#2 14.666666666666666 +(byte) main::i#4 16.5 (byte*) main::sc -(byte*) main::sc#1 22.0 -(byte*) main::sc#2 8.25 +(byte*) main::sc#1 11.0 +(byte*) main::sc#4 11.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] -[ main::sc#2 main::sc#1 ] +[ main::i#4 main::i#1 ] +[ main::sc#4 main::sc#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ main::sc#2 main::sc#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_WORD:3 [ main::sc#2 main::sc#1 ] +[ main::i#4 main::i#1 ] +[ main::sc#4 main::sc#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] +Allocated zp ZP_WORD:3 [ main::sc#4 main::sc#1 ] INITIAL ASM Target platform is c64basic @@ -189,67 +202,68 @@ main: { .label SCREEN = $400 .label i = 2 .label sc = 3 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::sc#2 = (const byte*) main::SCREEN#0+(byte) $27 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::sc#4 = (const byte*) main::SCREEN#0+(byte) $27 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN+$27 sta sc+1 - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#1] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $28) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$28 - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 // main::@2 b2: - // [8] *((byte*) main::sc#2) ← (byte) main::i#2 -- _deref_pbuz1=vbuz2 + // [6] *((byte*) main::sc#4) ← (byte) main::i#4 -- _deref_pbuz1=vbuz2 lda i ldy #0 sta (sc),y - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 inc i - // [10] (byte*) main::sc#1 ← -- (byte*) main::sc#2 -- pbuz1=_dec_pbuz1 + // [8] (byte*) main::sc#1 ← -- (byte*) main::sc#4 -- pbuz1=_dec_pbuz1 lda sc bne !+ dec sc+1 !: dec sc - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy jmp b1 + // main::@1 + b1: + // [9] if((byte) main::i#1<(byte) $28) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$28 + bcc b2_from_b1 + jmp breturn + // main::@return + breturn: + // [10] return + rts } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [8] *((byte*) main::sc#2) ← (byte) main::i#2 [ main::i#2 main::sc#2 ] ( main:2 [ main::i#2 main::sc#2 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Statement [10] (byte*) main::sc#1 ← -- (byte*) main::sc#2 [ main::i#1 main::sc#1 ] ( main:2 [ main::i#1 main::sc#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Statement [8] *((byte*) main::sc#2) ← (byte) main::i#2 [ main::i#2 main::sc#2 ] ( main:2 [ main::i#2 main::sc#2 ] ) always clobbers reg byte a reg byte y -Statement [10] (byte*) main::sc#1 ← -- (byte*) main::sc#2 [ main::i#1 main::sc#1 ] ( main:2 [ main::i#1 main::sc#1 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , -Potential registers zp ZP_WORD:3 [ main::sc#2 main::sc#1 ] : zp ZP_WORD:3 , +Statement [6] *((byte*) main::sc#4) ← (byte) main::i#4 [ main::i#4 main::sc#4 ] ( main:2 [ main::i#4 main::sc#4 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#4 main::i#1 ] +Statement [8] (byte*) main::sc#1 ← -- (byte*) main::sc#4 [ main::i#1 main::sc#1 ] ( main:2 [ main::i#1 main::sc#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#4 main::i#1 ] +Statement [6] *((byte*) main::sc#4) ← (byte) main::i#4 [ main::i#4 main::sc#4 ] ( main:2 [ main::i#4 main::sc#4 ] ) always clobbers reg byte a reg byte y +Statement [8] (byte*) main::sc#1 ← -- (byte*) main::sc#4 [ main::i#1 main::sc#1 ] ( main:2 [ main::i#1 main::sc#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , +Potential registers zp ZP_WORD:3 [ main::sc#4 main::sc#1 ] : zp ZP_WORD:3 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 30.25: zp ZP_WORD:3 [ main::sc#2 main::sc#1 ] 25.67: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 27.5: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] 22: zp ZP_WORD:3 [ main::sc#4 main::sc#1 ] Uplift Scope [] -Uplifting [main] best 548 combination zp ZP_WORD:3 [ main::sc#2 main::sc#1 ] reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 548 combination -Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] +Uplifting [main] best 578 combination reg byte x [ main::i#4 main::i#1 ] zp ZP_WORD:3 [ main::sc#4 main::sc#1 ] +Uplifting [] best 578 combination +Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -280,67 +294,73 @@ bend: main: { .label SCREEN = $400 .label sc = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::sc#2 = (const byte*) main::SCREEN#0+(byte) $27 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::sc#4 = (const byte*) main::SCREEN#0+(byte) $27 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN+$27 sta sc+1 - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#1] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $28) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$28 - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 // main::@2 b2: - // [8] *((byte*) main::sc#2) ← (byte) main::i#2 -- _deref_pbuz1=vbuxx + // [6] *((byte*) main::sc#4) ← (byte) main::i#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (sc),y - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx inx - // [10] (byte*) main::sc#1 ← -- (byte*) main::sc#2 -- pbuz1=_dec_pbuz1 + // [8] (byte*) main::sc#1 ← -- (byte*) main::sc#4 -- pbuz1=_dec_pbuz1 lda sc bne !+ dec sc+1 !: dec sc - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy jmp b1 + // main::@1 + b1: + // [9] if((byte) main::i#1<(byte) $28) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc b2_from_b1 + jmp breturn + // main::@return + breturn: + // [10] return + rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -356,17 +376,17 @@ FINAL SYMBOL TABLE (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i (byte) main::i#1 reg byte x 11.0 -(byte) main::i#2 reg byte x 14.666666666666666 +(byte) main::i#4 reg byte x 16.5 (byte*) main::sc -(byte*) main::sc#1 sc zp ZP_WORD:2 22.0 -(byte*) main::sc#2 sc zp ZP_WORD:2 8.25 +(byte*) main::sc#1 sc zp ZP_WORD:2 11.0 +(byte*) main::sc#4 sc zp ZP_WORD:2 11.0 -reg byte x [ main::i#2 main::i#1 ] -zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] +reg byte x [ main::i#4 main::i#1 ] +zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] FINAL ASSEMBLER -Score: 476 +Score: 446 // File Comments // Test a for-loop with two iterating variables @@ -387,44 +407,41 @@ Score: 476 main: { .label SCREEN = $400 .label sc = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte*) main::sc#2 = (const byte*) main::SCREEN#0+(byte) $27 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte*) main::sc#4 = (const byte*) main::SCREEN#0+(byte) $27 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN+$27 sta sc+1 - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#1] -- vbuxx=vbuc1 ldx #0 - // main::@1 - b1: - // for( byte i=0; i<40; i++, sc--) - // [6] if((byte) main::i#2<(byte) $28) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$28 - bcc b2 - // main::@return - // } - // [7] return - rts + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy // main::@2 b2: // *sc = i - // [8] *((byte*) main::sc#2) ← (byte) main::i#2 -- _deref_pbuz1=vbuxx + // [6] *((byte*) main::sc#4) ← (byte) main::i#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (sc),y // for( byte i=0; i<40; i++, sc--) - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx inx - // [10] (byte*) main::sc#1 ← -- (byte*) main::sc#2 -- pbuz1=_dec_pbuz1 + // [8] (byte*) main::sc#1 ← -- (byte*) main::sc#4 -- pbuz1=_dec_pbuz1 lda sc bne !+ dec sc+1 !: dec sc - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 + // main::@1 + // [9] if((byte) main::i#1<(byte) $28) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc b2 + // main::@return + // } + // [10] return + rts } // File Data diff --git a/src/test/ref/for-two-vars.sym b/src/test/ref/for-two-vars.sym index 86f996e96..22e401d82 100644 --- a/src/test/ref/for-two-vars.sym +++ b/src/test/ref/for-two-vars.sym @@ -9,10 +9,10 @@ (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i (byte) main::i#1 reg byte x 11.0 -(byte) main::i#2 reg byte x 14.666666666666666 +(byte) main::i#4 reg byte x 16.5 (byte*) main::sc -(byte*) main::sc#1 sc zp ZP_WORD:2 22.0 -(byte*) main::sc#2 sc zp ZP_WORD:2 8.25 +(byte*) main::sc#1 sc zp ZP_WORD:2 11.0 +(byte*) main::sc#4 sc zp ZP_WORD:2 11.0 -reg byte x [ main::i#2 main::i#1 ] -zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] +reg byte x [ main::i#4 main::i#1 ] +zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] diff --git a/src/test/ref/forclassicmin.asm b/src/test/ref/forclassicmin.asm index a0564fa07..af0cf2bb5 100644 --- a/src/test/ref/forclassicmin.asm +++ b/src/test/ref/forclassicmin.asm @@ -5,13 +5,11 @@ .label SCREEN = $400 main: { ldx #0 - b1: - cpx #$64 - bne b2 - rts b2: txa sta SCREEN,x inx - jmp b1 + cpx #$64 + bne b2 + rts } diff --git a/src/test/ref/forclassicmin.cfg b/src/test/ref/forclassicmin.cfg index b93d67ece..5322325b6 100644 --- a/src/test/ref/forclassicmin.cfg +++ b/src/test/ref/forclassicmin.cfg @@ -9,15 +9,15 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2!=(byte) $64) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1!=(byte) $64) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [9] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 diff --git a/src/test/ref/forclassicmin.log b/src/test/ref/forclassicmin.log index 3fe3f71ab..cd9da5c7d 100644 --- a/src/test/ref/forclassicmin.log +++ b/src/test/ref/forclassicmin.log @@ -83,21 +83,32 @@ Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = (byte*) 1024 Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [9] if((const byte) main::i#0!=(byte) $64) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 1 initial phi equivalence classes -Coalesced [11] main::i#4 ← main::i#1 +Coalesced [12] main::i#6 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -115,32 +126,32 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2!=(byte) $64) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1!=(byte) $64) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [9] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 VARIABLE REGISTER WEIGHTS (byte*) SCREEN (void()) main() (byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 18.333333333333332 +(byte) main::i#1 16.5 +(byte) main::i#4 22.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] INITIAL ASM Target platform is c64basic @@ -171,47 +182,48 @@ bend: // main main: { .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2!=(byte) $64) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 - lda #$64 - cmp i - bne b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 // main::@2 b2: - // [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz1 + // [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuz1=vbuz1 ldy i tya sta SCREEN,y - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 inc i - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp b1 + // main::@1 + b1: + // [8] if((byte) main::i#1!=(byte) $64) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #$64 + cmp i + bne b2_from_b1 + jmp breturn + // main::@return + breturn: + // [9] return + rts } // File Data 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:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 40.33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] Uplift Scope [] -Uplifting [main] best 263 combination reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 263 combination +Uplifting [main] best 293 combination reg byte x [ main::i#4 main::i#1 ] +Uplifting [] best 293 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -240,54 +252,60 @@ bend_from_b1: bend: // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta SCREEN,x + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2!=(byte) $64) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 + // [8] if((byte) main::i#1!=(byte) $64) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 cpx #$64 - bne b2 + bne b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [9] return rts - // main::@2 - b2: - // [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta SCREEN,x - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -302,14 +320,14 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] FINAL ASSEMBLER -Score: 191 +Score: 161 // File Comments // Minimal classic for() loop @@ -328,31 +346,28 @@ Score: 191 // @end // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // main::@1 - b1: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // SCREEN[i] = i + // [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta SCREEN,x // for(byte i=0; i!=100; i++) - // [6] if((byte) main::i#2!=(byte) $64) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx + // main::@1 + // [8] if((byte) main::i#1!=(byte) $64) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 cpx #$64 bne b2 // main::@return // } - // [7] return + // [9] return rts - // main::@2 - b2: - // SCREEN[i] = i - // [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta SCREEN,x - // for(byte i=0; i!=100; i++) - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/forclassicmin.sym b/src/test/ref/forclassicmin.sym index 19dc59f31..882179ca9 100644 --- a/src/test/ref/forclassicmin.sym +++ b/src/test/ref/forclassicmin.sym @@ -8,7 +8,7 @@ (label) main::@2 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] diff --git a/src/test/ref/forincrementassign.asm b/src/test/ref/forincrementassign.asm index ae23c6055..7fa3b3350 100644 --- a/src/test/ref/forincrementassign.asm +++ b/src/test/ref/forincrementassign.asm @@ -6,14 +6,12 @@ .label SCREEN = $400 main: { lda #0 - b1: - cmp #$28 - bcc b2 - rts b2: tax sta SCREEN,x clc adc #2 - jmp b1 + cmp #$28 + bcc b2 + rts } diff --git a/src/test/ref/forincrementassign.cfg b/src/test/ref/forincrementassign.cfg index 8dd7f8af1..113f2aa13 100644 --- a/src/test/ref/forincrementassign.cfg +++ b/src/test/ref/forincrementassign.cfg @@ -9,15 +9,15 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← (byte) main::i#4 + (byte) 2 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $28) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1<(byte) $28) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [9] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← (byte) main::i#2 + (byte) 2 - to:main::@1 diff --git a/src/test/ref/forincrementassign.log b/src/test/ref/forincrementassign.log index 53431f4b2..9adccc413 100644 --- a/src/test/ref/forincrementassign.log +++ b/src/test/ref/forincrementassign.log @@ -77,21 +77,32 @@ Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = (byte*) 1024 Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [9] if((const byte) main::i#0<(byte) $28) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 1 initial phi equivalence classes -Coalesced [11] main::i#4 ← main::i#1 +Coalesced [12] main::i#6 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -109,32 +120,32 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← (byte) main::i#4 + (byte) 2 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $28) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1<(byte) $28) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [9] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← (byte) main::i#2 + (byte) 2 - to:main::@1 VARIABLE REGISTER WEIGHTS (byte*) SCREEN (void()) main() (byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 18.333333333333332 +(byte) main::i#1 16.5 +(byte) main::i#4 22.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] INITIAL ASM Target platform is c64basic @@ -166,50 +177,51 @@ bend: // main main: { .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $28) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$28 - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 // main::@2 b2: - // [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz1 + // [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuz1=vbuz1 ldy i tya sta SCREEN,y - // [9] (byte) main::i#1 ← (byte) main::i#2 + (byte) 2 -- vbuz1=vbuz1_plus_2 + // [7] (byte) main::i#1 ← (byte) main::i#4 + (byte) 2 -- vbuz1=vbuz1_plus_2 lda i clc adc #2 sta i - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp b1 + // main::@1 + b1: + // [8] if((byte) main::i#1<(byte) $28) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$28 + bcc b2_from_b1 + jmp breturn + // main::@return + breturn: + // [9] return + rts } // File Data 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:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 40.33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] Uplift Scope [] -Uplifting [main] best 283 combination reg byte a [ main::i#2 main::i#1 ] -Uplifting [] best 283 combination +Uplifting [main] best 313 combination reg byte a [ main::i#4 main::i#1 ] +Uplifting [] best 313 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -239,55 +251,61 @@ bend_from_b1: bend: // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuaa=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuaa=vbuc1 lda #0 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuaa=vbuaa + tax + sta SCREEN,x + // [7] (byte) main::i#1 ← (byte) main::i#4 + (byte) 2 -- vbuaa=vbuaa_plus_2 + clc + adc #2 jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2<(byte) $28) goto main::@2 -- vbuaa_lt_vbuc1_then_la1 + // [8] if((byte) main::i#1<(byte) $28) goto main::@2 -- vbuaa_lt_vbuc1_then_la1 cmp #$28 - bcc b2 + bcc b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [9] return rts - // main::@2 - b2: - // [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuaa=vbuaa - tax - sta SCREEN,x - // [9] (byte) main::i#1 ← (byte) main::i#2 + (byte) 2 -- vbuaa=vbuaa_plus_2 - clc - adc #2 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -302,14 +320,14 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte a 22.0 -(byte) main::i#2 reg byte a 18.333333333333332 +(byte) main::i#1 reg byte a 16.5 +(byte) main::i#4 reg byte a 22.0 -reg byte a [ main::i#2 main::i#1 ] +reg byte a [ main::i#4 main::i#1 ] FINAL ASSEMBLER -Score: 211 +Score: 181 // File Comments // Classic for() does not allow assignment as increment, eg. for(byte i=0;i<40;i=i+2) {} @@ -329,32 +347,30 @@ Score: 211 // @end // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuaa=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuaa=vbuc1 lda #0 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // SCREEN[i] = i + // [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuaa=vbuaa + tax + sta SCREEN,x + // i=i+2 + // [7] (byte) main::i#1 ← (byte) main::i#4 + (byte) 2 -- vbuaa=vbuaa_plus_2 + clc + adc #2 // main::@1 - b1: // for(byte i=0;i<40;i=i+2) - // [6] if((byte) main::i#2<(byte) $28) goto main::@2 -- vbuaa_lt_vbuc1_then_la1 + // [8] if((byte) main::i#1<(byte) $28) goto main::@2 -- vbuaa_lt_vbuc1_then_la1 cmp #$28 bcc b2 // main::@return // } - // [7] return + // [9] return rts - // main::@2 - b2: - // SCREEN[i] = i - // [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuaa=vbuaa - tax - sta SCREEN,x - // i=i+2 - // [9] (byte) main::i#1 ← (byte) main::i#2 + (byte) 2 -- vbuaa=vbuaa_plus_2 - clc - adc #2 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/forincrementassign.sym b/src/test/ref/forincrementassign.sym index 4021b615b..f4c49810e 100644 --- a/src/test/ref/forincrementassign.sym +++ b/src/test/ref/forincrementassign.sym @@ -8,7 +8,7 @@ (label) main::@2 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte a 22.0 -(byte) main::i#2 reg byte a 18.333333333333332 +(byte) main::i#1 reg byte a 16.5 +(byte) main::i#4 reg byte a 22.0 -reg byte a [ main::i#2 main::i#1 ] +reg byte a [ main::i#4 main::i#1 ] diff --git a/src/test/ref/function-pointer-noarg-call-6.asm b/src/test/ref/function-pointer-noarg-call-6.asm index f7ee1b7df..806426670 100644 --- a/src/test/ref/function-pointer-noarg-call-6.asm +++ b/src/test/ref/function-pointer-noarg-call-6.asm @@ -8,16 +8,6 @@ main: { sta cols lda #>$d800 sta cols+1 - b1: - lda cols+1 - cmp #>$d800+$3e8 - bcc b2 - bne !+ - lda cols - cmp #<$d800+$3e8 - bcc b2 - !: - rts b2: jsr fn1 ldy #0 @@ -29,7 +19,15 @@ main: { bne !+ inc cols+1 !: - jmp b1 + lda cols+1 + cmp #>$d800+$3e8 + bcc b2 + bne !+ + lda cols + cmp #<$d800+$3e8 + bcc b2 + !: + rts } fn1: { .label screen = 4 @@ -37,16 +35,6 @@ fn1: { sta screen lda #>$400 sta screen+1 - b1: - lda screen+1 - cmp #>$400+$3e8 - bcc b2 - bne !+ - lda screen - cmp #<$400+$3e8 - bcc b2 - !: - rts b2: ldy #0 lda (screen),y @@ -57,5 +45,13 @@ fn1: { bne !+ inc screen+1 !: - jmp b1 + lda screen+1 + cmp #>$400+$3e8 + bcc b2 + bne !+ + lda screen + cmp #<$400+$3e8 + bcc b2 + !: + rts } diff --git a/src/test/ref/function-pointer-noarg-call-6.cfg b/src/test/ref/function-pointer-noarg-call-6.cfg index da937356b..d2805f052 100644 --- a/src/test/ref/function-pointer-noarg-call-6.cfg +++ b/src/test/ref/function-pointer-noarg-call-6.cfg @@ -9,31 +9,30 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::cols#4 ← phi( main::@1/(byte*) main::cols#1 main/(byte*) 55296 ) + [6] call fn1 + [7] *((byte*) main::cols#4) ← ++ *((byte*) main::cols#4) + [8] (byte*) main::cols#1 ← ++ (byte*) main::cols#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::cols#2 ← phi( main/(byte*) 55296 main::@2/(byte*) main::cols#1 ) - [6] if((byte*) main::cols#2<(word)(number) $d800+(number) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((byte*) main::cols#1<(word)(number) $d800+(number) $3e8) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] phi() - [9] call fn1 - [10] *((byte*) main::cols#2) ← ++ *((byte*) main::cols#2) - [11] (byte*) main::cols#1 ← ++ (byte*) main::cols#2 - to:main::@1 fn1: scope:[fn1] from main::@2 - [12] phi() + [11] phi() + to:fn1::@2 +fn1::@2: scope:[fn1] from fn1 fn1::@1 + [12] (byte*) fn1::screen#4 ← phi( fn1::@1/(byte*) fn1::screen#1 fn1/(byte*) 1024 ) + [13] *((byte*) fn1::screen#4) ← ++ *((byte*) fn1::screen#4) + [14] (byte*) fn1::screen#1 ← ++ (byte*) fn1::screen#4 to:fn1::@1 -fn1::@1: scope:[fn1] from fn1 fn1::@2 - [13] (byte*) fn1::screen#2 ← phi( fn1/(byte*) 1024 fn1::@2/(byte*) fn1::screen#1 ) - [14] if((byte*) fn1::screen#2<(word)(number) $400+(number) $3e8) goto fn1::@2 +fn1::@1: scope:[fn1] from fn1::@2 + [15] if((byte*) fn1::screen#1<(word)(number) $400+(number) $3e8) goto fn1::@2 to:fn1::@return fn1::@return: scope:[fn1] from fn1::@1 - [15] return + [16] return to:@return -fn1::@2: scope:[fn1] from fn1::@1 - [16] *((byte*) fn1::screen#2) ← ++ *((byte*) fn1::screen#2) - [17] (byte*) fn1::screen#1 ← ++ (byte*) fn1::screen#2 - to:fn1::@1 diff --git a/src/test/ref/function-pointer-noarg-call-6.log b/src/test/ref/function-pointer-noarg-call-6.log index 89510b51c..4e2d5914e 100644 --- a/src/test/ref/function-pointer-noarg-call-6.log +++ b/src/test/ref/function-pointer-noarg-call-6.log @@ -116,33 +116,50 @@ Replacing constant pointer function [7] call fn1 Successful SSA optimization Pass2ConstantCallPointerIdentification Eliminating unused constant (const void()*) main::cls#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) main::cols#1 = (byte*) main::cols#2 +Alias (byte*) fn1::screen#1 = (byte*) fn1::screen#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) main::cols#5 (const byte*) main::cols#0 +Identical Phi Values (byte*) fn1::screen#5 (const byte*) fn1::screen#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [17] if((const byte*) main::cols#0<(word)(number) $d800+(number) $3e8) goto main::@2 +if() condition always true - replacing block destination [19] if((const byte*) fn1::screen#0<(word)(number) $400+(number) $3e8) goto fn1::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte*) main::cols#0 Inlining constant with var siblings (const byte*) fn1::screen#0 Constant inlined fn1::screen#0 = (byte*) 1024 Constant inlined main::cols#0 = (byte*) 55296 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) +Added new block during phi lifting fn1::@7(between fn1::@1 and fn1::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @3 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of fn1 +Adding NOP phi() at start of fn1::@1_1 CALL GRAPH Calls in [] to main:2 -Calls in [main] to fn1:10 +Calls in [main] to fn1:8 Created 2 initial phi equivalence classes -Coalesced [13] main::cols#4 ← main::cols#1 -Coalesced [20] fn1::screen#4 ← fn1::screen#1 +Coalesced [13] main::cols#6 ← main::cols#1 +Coalesced [21] fn1::screen#6 ← fn1::screen#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @3 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 +Culled Empty Block (label) fn1::@1_1 +Culled Empty Block (label) fn1::@7 Renumbering block @2 to @1 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@2 Adding NOP phi() at start of fn1 FINAL CONTROL FLOW GRAPH @@ -157,55 +174,54 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::cols#4 ← phi( main::@1/(byte*) main::cols#1 main/(byte*) 55296 ) + [6] call fn1 + [7] *((byte*) main::cols#4) ← ++ *((byte*) main::cols#4) + [8] (byte*) main::cols#1 ← ++ (byte*) main::cols#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::cols#2 ← phi( main/(byte*) 55296 main::@2/(byte*) main::cols#1 ) - [6] if((byte*) main::cols#2<(word)(number) $d800+(number) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((byte*) main::cols#1<(word)(number) $d800+(number) $3e8) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] phi() - [9] call fn1 - [10] *((byte*) main::cols#2) ← ++ *((byte*) main::cols#2) - [11] (byte*) main::cols#1 ← ++ (byte*) main::cols#2 - to:main::@1 fn1: scope:[fn1] from main::@2 - [12] phi() + [11] phi() + to:fn1::@2 +fn1::@2: scope:[fn1] from fn1 fn1::@1 + [12] (byte*) fn1::screen#4 ← phi( fn1::@1/(byte*) fn1::screen#1 fn1/(byte*) 1024 ) + [13] *((byte*) fn1::screen#4) ← ++ *((byte*) fn1::screen#4) + [14] (byte*) fn1::screen#1 ← ++ (byte*) fn1::screen#4 to:fn1::@1 -fn1::@1: scope:[fn1] from fn1 fn1::@2 - [13] (byte*) fn1::screen#2 ← phi( fn1/(byte*) 1024 fn1::@2/(byte*) fn1::screen#1 ) - [14] if((byte*) fn1::screen#2<(word)(number) $400+(number) $3e8) goto fn1::@2 +fn1::@1: scope:[fn1] from fn1::@2 + [15] if((byte*) fn1::screen#1<(word)(number) $400+(number) $3e8) goto fn1::@2 to:fn1::@return fn1::@return: scope:[fn1] from fn1::@1 - [15] return + [16] return to:@return -fn1::@2: scope:[fn1] from fn1::@1 - [16] *((byte*) fn1::screen#2) ← ++ *((byte*) fn1::screen#2) - [17] (byte*) fn1::screen#1 ← ++ (byte*) fn1::screen#2 - to:fn1::@1 VARIABLE REGISTER WEIGHTS (void()) fn1() (byte*) fn1::screen -(byte*) fn1::screen#1 202.0 -(byte*) fn1::screen#2 168.33333333333331 +(byte*) fn1::screen#1 151.5 +(byte*) fn1::screen#4 202.0 (void()) main() (void()*) main::cls (byte*) main::cols -(byte*) main::cols#1 22.0 -(byte*) main::cols#2 11.0 +(byte*) main::cols#1 16.5 +(byte*) main::cols#4 14.666666666666666 Initial phi equivalence classes -[ main::cols#2 main::cols#1 ] -[ fn1::screen#2 fn1::screen#1 ] +[ main::cols#4 main::cols#1 ] +[ fn1::screen#4 fn1::screen#1 ] Complete equivalence classes -[ main::cols#2 main::cols#1 ] -[ fn1::screen#2 fn1::screen#1 ] -Allocated zp ZP_WORD:2 [ main::cols#2 main::cols#1 ] -Allocated zp ZP_WORD:4 [ fn1::screen#2 fn1::screen#1 ] +[ main::cols#4 main::cols#1 ] +[ fn1::screen#4 fn1::screen#1 ] +Allocated zp ZP_WORD:2 [ main::cols#4 main::cols#1 ] +Allocated zp ZP_WORD:4 [ fn1::screen#4 fn1::screen#1 ] INITIAL ASM Target platform is c64basic @@ -235,17 +251,40 @@ bend: // main main: { .label cols = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::cols#2 = (byte*) 55296 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::cols#4 = (byte*) 55296 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$d800 sta cols lda #>$d800 sta cols+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::cols#4 = (byte*) main::cols#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] call fn1 + // [11] phi from main::@2 to fn1 [phi:main::@2->fn1] + fn1_from_b2: + jsr fn1 + // [7] *((byte*) main::cols#4) ← ++ *((byte*) main::cols#4) -- _deref_pbuz1=_inc__deref_pbuz1 + ldy #0 + lda (cols),y + clc + adc #1 + ldy #0 + sta (cols),y + // [8] (byte*) main::cols#1 ← ++ (byte*) main::cols#4 -- pbuz1=_inc_pbuz1 + inc cols + bne !+ + inc cols+1 + !: jmp b1 // main::@1 b1: - // [6] if((byte*) main::cols#2<(word)(number) $d800+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 + // [9] if((byte*) main::cols#1<(word)(number) $d800+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 lda cols+1 cmp #>$d800+$3e8 bcc b2_from_b1 @@ -257,98 +296,74 @@ main: { jmp breturn // main::@return breturn: - // [7] return + // [10] return rts - // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - b2_from_b1: - jmp b2 - // main::@2 - b2: - // [9] call fn1 - // [12] phi from main::@2 to fn1 [phi:main::@2->fn1] - fn1_from_b2: - jsr fn1 - // [10] *((byte*) main::cols#2) ← ++ *((byte*) main::cols#2) -- _deref_pbuz1=_inc__deref_pbuz1 - ldy #0 - lda (cols),y - clc - adc #1 - ldy #0 - sta (cols),y - // [11] (byte*) main::cols#1 ← ++ (byte*) main::cols#2 -- pbuz1=_inc_pbuz1 - inc cols - bne !+ - inc cols+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::cols#2 = (byte*) main::cols#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // fn1 fn1: { .label screen = 4 - // [13] phi from fn1 to fn1::@1 [phi:fn1->fn1::@1] - b1_from_fn1: - // [13] phi (byte*) fn1::screen#2 = (byte*) 1024 [phi:fn1->fn1::@1#0] -- pbuz1=pbuc1 + // [12] phi from fn1 to fn1::@2 [phi:fn1->fn1::@2] + b2_from_fn1: + // [12] phi (byte*) fn1::screen#4 = (byte*) 1024 [phi:fn1->fn1::@2#0] -- pbuz1=pbuc1 lda #<$400 sta screen lda #>$400 sta screen+1 - jmp b1 - // fn1::@1 - b1: - // [14] if((byte*) fn1::screen#2<(word)(number) $400+(number) $3e8) goto fn1::@2 -- pbuz1_lt_vwuc1_then_la1 - lda screen+1 - cmp #>$400+$3e8 - bcc b2 - bne !+ - lda screen - cmp #<$400+$3e8 - bcc b2 - !: - jmp breturn - // fn1::@return - breturn: - // [15] return - rts + jmp b2 + // [12] phi from fn1::@1 to fn1::@2 [phi:fn1::@1->fn1::@2] + b2_from_b1: + // [12] phi (byte*) fn1::screen#4 = (byte*) fn1::screen#1 [phi:fn1::@1->fn1::@2#0] -- register_copy + jmp b2 // fn1::@2 b2: - // [16] *((byte*) fn1::screen#2) ← ++ *((byte*) fn1::screen#2) -- _deref_pbuz1=_inc__deref_pbuz1 + // [13] *((byte*) fn1::screen#4) ← ++ *((byte*) fn1::screen#4) -- _deref_pbuz1=_inc__deref_pbuz1 ldy #0 lda (screen),y clc adc #1 ldy #0 sta (screen),y - // [17] (byte*) fn1::screen#1 ← ++ (byte*) fn1::screen#2 -- pbuz1=_inc_pbuz1 + // [14] (byte*) fn1::screen#1 ← ++ (byte*) fn1::screen#4 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [13] phi from fn1::@2 to fn1::@1 [phi:fn1::@2->fn1::@1] - b1_from_b2: - // [13] phi (byte*) fn1::screen#2 = (byte*) fn1::screen#1 [phi:fn1::@2->fn1::@1#0] -- register_copy jmp b1 + // fn1::@1 + b1: + // [15] if((byte*) fn1::screen#1<(word)(number) $400+(number) $3e8) goto fn1::@2 -- pbuz1_lt_vwuc1_then_la1 + lda screen+1 + cmp #>$400+$3e8 + bcc b2_from_b1 + bne !+ + lda screen + cmp #<$400+$3e8 + bcc b2_from_b1 + !: + jmp breturn + // fn1::@return + breturn: + // [16] return + rts } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if((byte*) main::cols#2<(word)(number) $d800+(number) $3e8) goto main::@2 [ main::cols#2 ] ( main:2 [ main::cols#2 ] ) always clobbers reg byte a -Statement [10] *((byte*) main::cols#2) ← ++ *((byte*) main::cols#2) [ main::cols#2 ] ( main:2 [ main::cols#2 ] ) always clobbers reg byte a reg byte y -Statement [14] if((byte*) fn1::screen#2<(word)(number) $400+(number) $3e8) goto fn1::@2 [ fn1::screen#2 ] ( main:2::fn1:9 [ main::cols#2 fn1::screen#2 ] ) always clobbers reg byte a -Statement [16] *((byte*) fn1::screen#2) ← ++ *((byte*) fn1::screen#2) [ fn1::screen#2 ] ( main:2::fn1:9 [ main::cols#2 fn1::screen#2 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_WORD:2 [ main::cols#2 main::cols#1 ] : zp ZP_WORD:2 , -Potential registers zp ZP_WORD:4 [ fn1::screen#2 fn1::screen#1 ] : zp ZP_WORD:4 , +Statement [7] *((byte*) main::cols#4) ← ++ *((byte*) main::cols#4) [ main::cols#4 ] ( main:2 [ main::cols#4 ] ) always clobbers reg byte a reg byte y +Statement [9] if((byte*) main::cols#1<(word)(number) $d800+(number) $3e8) goto main::@2 [ main::cols#1 ] ( main:2 [ main::cols#1 ] ) always clobbers reg byte a +Statement [13] *((byte*) fn1::screen#4) ← ++ *((byte*) fn1::screen#4) [ fn1::screen#4 ] ( main:2::fn1:6 [ main::cols#4 fn1::screen#4 ] ) always clobbers reg byte a reg byte y +Statement [15] if((byte*) fn1::screen#1<(word)(number) $400+(number) $3e8) goto fn1::@2 [ fn1::screen#1 ] ( main:2::fn1:6 [ main::cols#4 fn1::screen#1 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ main::cols#4 main::cols#1 ] : zp ZP_WORD:2 , +Potential registers zp ZP_WORD:4 [ fn1::screen#4 fn1::screen#1 ] : zp ZP_WORD:4 , REGISTER UPLIFT SCOPES -Uplift Scope [fn1] 370.33: zp ZP_WORD:4 [ fn1::screen#2 fn1::screen#1 ] -Uplift Scope [main] 33: zp ZP_WORD:2 [ main::cols#2 main::cols#1 ] +Uplift Scope [fn1] 353.5: zp ZP_WORD:4 [ fn1::screen#4 fn1::screen#1 ] +Uplift Scope [main] 31.17: zp ZP_WORD:2 [ main::cols#4 main::cols#1 ] Uplift Scope [] -Uplifting [fn1] best 7595 combination zp ZP_WORD:4 [ fn1::screen#2 fn1::screen#1 ] -Uplifting [main] best 7595 combination zp ZP_WORD:2 [ main::cols#2 main::cols#1 ] -Uplifting [] best 7595 combination +Uplifting [fn1] best 7895 combination zp ZP_WORD:4 [ fn1::screen#4 fn1::screen#1 ] +Uplifting [main] best 7895 combination zp ZP_WORD:2 [ main::cols#4 main::cols#1 ] +Uplifting [] best 7895 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -377,17 +392,40 @@ bend: // main main: { .label cols = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::cols#2 = (byte*) 55296 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::cols#4 = (byte*) 55296 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$d800 sta cols lda #>$d800 sta cols+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::cols#4 = (byte*) main::cols#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] call fn1 + // [11] phi from main::@2 to fn1 [phi:main::@2->fn1] + fn1_from_b2: + jsr fn1 + // [7] *((byte*) main::cols#4) ← ++ *((byte*) main::cols#4) -- _deref_pbuz1=_inc__deref_pbuz1 + ldy #0 + lda (cols),y + clc + adc #1 + ldy #0 + sta (cols),y + // [8] (byte*) main::cols#1 ← ++ (byte*) main::cols#4 -- pbuz1=_inc_pbuz1 + inc cols + bne !+ + inc cols+1 + !: jmp b1 // main::@1 b1: - // [6] if((byte*) main::cols#2<(word)(number) $d800+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 + // [9] if((byte*) main::cols#1<(word)(number) $d800+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 lda cols+1 cmp #>$d800+$3e8 bcc b2_from_b1 @@ -399,85 +437,62 @@ main: { jmp breturn // main::@return breturn: - // [7] return + // [10] return rts - // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - b2_from_b1: - jmp b2 - // main::@2 - b2: - // [9] call fn1 - // [12] phi from main::@2 to fn1 [phi:main::@2->fn1] - fn1_from_b2: - jsr fn1 - // [10] *((byte*) main::cols#2) ← ++ *((byte*) main::cols#2) -- _deref_pbuz1=_inc__deref_pbuz1 - ldy #0 - lda (cols),y - clc - adc #1 - ldy #0 - sta (cols),y - // [11] (byte*) main::cols#1 ← ++ (byte*) main::cols#2 -- pbuz1=_inc_pbuz1 - inc cols - bne !+ - inc cols+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::cols#2 = (byte*) main::cols#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // fn1 fn1: { .label screen = 4 - // [13] phi from fn1 to fn1::@1 [phi:fn1->fn1::@1] - b1_from_fn1: - // [13] phi (byte*) fn1::screen#2 = (byte*) 1024 [phi:fn1->fn1::@1#0] -- pbuz1=pbuc1 + // [12] phi from fn1 to fn1::@2 [phi:fn1->fn1::@2] + b2_from_fn1: + // [12] phi (byte*) fn1::screen#4 = (byte*) 1024 [phi:fn1->fn1::@2#0] -- pbuz1=pbuc1 lda #<$400 sta screen lda #>$400 sta screen+1 - jmp b1 - // fn1::@1 - b1: - // [14] if((byte*) fn1::screen#2<(word)(number) $400+(number) $3e8) goto fn1::@2 -- pbuz1_lt_vwuc1_then_la1 - lda screen+1 - cmp #>$400+$3e8 - bcc b2 - bne !+ - lda screen - cmp #<$400+$3e8 - bcc b2 - !: - jmp breturn - // fn1::@return - breturn: - // [15] return - rts + jmp b2 + // [12] phi from fn1::@1 to fn1::@2 [phi:fn1::@1->fn1::@2] + b2_from_b1: + // [12] phi (byte*) fn1::screen#4 = (byte*) fn1::screen#1 [phi:fn1::@1->fn1::@2#0] -- register_copy + jmp b2 // fn1::@2 b2: - // [16] *((byte*) fn1::screen#2) ← ++ *((byte*) fn1::screen#2) -- _deref_pbuz1=_inc__deref_pbuz1 + // [13] *((byte*) fn1::screen#4) ← ++ *((byte*) fn1::screen#4) -- _deref_pbuz1=_inc__deref_pbuz1 ldy #0 lda (screen),y clc adc #1 ldy #0 sta (screen),y - // [17] (byte*) fn1::screen#1 ← ++ (byte*) fn1::screen#2 -- pbuz1=_inc_pbuz1 + // [14] (byte*) fn1::screen#1 ← ++ (byte*) fn1::screen#4 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [13] phi from fn1::@2 to fn1::@1 [phi:fn1::@2->fn1::@1] - b1_from_b2: - // [13] phi (byte*) fn1::screen#2 = (byte*) fn1::screen#1 [phi:fn1::@2->fn1::@1#0] -- register_copy jmp b1 + // fn1::@1 + b1: + // [15] if((byte*) fn1::screen#1<(word)(number) $400+(number) $3e8) goto fn1::@2 -- pbuz1_lt_vwuc1_then_la1 + lda screen+1 + cmp #>$400+$3e8 + bcc b2_from_b1 + bne !+ + lda screen + cmp #<$400+$3e8 + bcc b2_from_b1 + !: + jmp breturn + // fn1::@return + breturn: + // [16] return + rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp b2 @@ -489,24 +504,30 @@ Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b2_from_b1 with b2 Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: Removing instruction b2_from_b1: Removing instruction fn1_from_b2: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: -Removing instruction b1_from_fn1: +Removing instruction b2_from_fn1: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -519,23 +540,23 @@ FINAL SYMBOL TABLE (label) fn1::@2 (label) fn1::@return (byte*) fn1::screen -(byte*) fn1::screen#1 screen zp ZP_WORD:4 202.0 -(byte*) fn1::screen#2 screen zp ZP_WORD:4 168.33333333333331 +(byte*) fn1::screen#1 screen zp ZP_WORD:4 151.5 +(byte*) fn1::screen#4 screen zp ZP_WORD:4 202.0 (void()) main() (label) main::@1 (label) main::@2 (label) main::@return (void()*) main::cls (byte*) main::cols -(byte*) main::cols#1 cols zp ZP_WORD:2 22.0 -(byte*) main::cols#2 cols zp ZP_WORD:2 11.0 +(byte*) main::cols#1 cols zp ZP_WORD:2 16.5 +(byte*) main::cols#4 cols zp ZP_WORD:2 14.666666666666666 -zp ZP_WORD:2 [ main::cols#2 main::cols#1 ] -zp ZP_WORD:4 [ fn1::screen#2 fn1::screen#1 ] +zp ZP_WORD:2 [ main::cols#4 main::cols#1 ] +zp ZP_WORD:4 [ fn1::screen#4 fn1::screen#1 ] FINAL ASSEMBLER -Score: 6673 +Score: 6343 // File Comments // Tests calling into a function pointer with local variables @@ -554,16 +575,35 @@ Score: 6673 // main main: { .label cols = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte*) main::cols#2 = (byte*) 55296 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte*) main::cols#4 = (byte*) 55296 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$d800 sta cols lda #>$d800 sta cols+1 - // main::@1 - b1: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte*) main::cols#4 = (byte*) main::cols#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // (*cls)() + // [6] call fn1 + // [11] phi from main::@2 to fn1 [phi:main::@2->fn1] + jsr fn1 + // (*cols)++; + // [7] *((byte*) main::cols#4) ← ++ *((byte*) main::cols#4) -- _deref_pbuz1=_inc__deref_pbuz1 + ldy #0 + lda (cols),y + clc + adc #1 + sta (cols),y // for(byte* cols = $d800; cols<$d800+1000;cols++) - // [6] if((byte*) main::cols#2<(word)(number) $d800+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 + // [8] (byte*) main::cols#1 ← ++ (byte*) main::cols#4 -- pbuz1=_inc_pbuz1 + inc cols + bne !+ + inc cols+1 + !: + // main::@1 + // [9] if((byte*) main::cols#1<(word)(number) $d800+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 lda cols+1 cmp #>$d800+$3e8 bcc b2 @@ -574,45 +614,37 @@ main: { !: // main::@return // } - // [7] return + // [10] return rts - // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - // main::@2 - b2: - // (*cls)() - // [9] call fn1 - // [12] phi from main::@2 to fn1 [phi:main::@2->fn1] - jsr fn1 - // (*cols)++; - // [10] *((byte*) main::cols#2) ← ++ *((byte*) main::cols#2) -- _deref_pbuz1=_inc__deref_pbuz1 - ldy #0 - lda (cols),y - clc - adc #1 - sta (cols),y - // for(byte* cols = $d800; cols<$d800+1000;cols++) - // [11] (byte*) main::cols#1 ← ++ (byte*) main::cols#2 -- pbuz1=_inc_pbuz1 - inc cols - bne !+ - inc cols+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte*) main::cols#2 = (byte*) main::cols#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // fn1 fn1: { .label screen = 4 - // [13] phi from fn1 to fn1::@1 [phi:fn1->fn1::@1] - // [13] phi (byte*) fn1::screen#2 = (byte*) 1024 [phi:fn1->fn1::@1#0] -- pbuz1=pbuc1 + // [12] phi from fn1 to fn1::@2 [phi:fn1->fn1::@2] + // [12] phi (byte*) fn1::screen#4 = (byte*) 1024 [phi:fn1->fn1::@2#0] -- pbuz1=pbuc1 lda #<$400 sta screen lda #>$400 sta screen+1 - // fn1::@1 - b1: + // [12] phi from fn1::@1 to fn1::@2 [phi:fn1::@1->fn1::@2] + // [12] phi (byte*) fn1::screen#4 = (byte*) fn1::screen#1 [phi:fn1::@1->fn1::@2#0] -- register_copy + // fn1::@2 + b2: + // (*screen)++; + // [13] *((byte*) fn1::screen#4) ← ++ *((byte*) fn1::screen#4) -- _deref_pbuz1=_inc__deref_pbuz1 + ldy #0 + lda (screen),y + clc + adc #1 + sta (screen),y // for(byte* screen=$400;screen<$400+1000;screen++) - // [14] if((byte*) fn1::screen#2<(word)(number) $400+(number) $3e8) goto fn1::@2 -- pbuz1_lt_vwuc1_then_la1 + // [14] (byte*) fn1::screen#1 ← ++ (byte*) fn1::screen#4 -- pbuz1=_inc_pbuz1 + inc screen + bne !+ + inc screen+1 + !: + // fn1::@1 + // [15] if((byte*) fn1::screen#1<(word)(number) $400+(number) $3e8) goto fn1::@2 -- pbuz1_lt_vwuc1_then_la1 lda screen+1 cmp #>$400+$3e8 bcc b2 @@ -623,26 +655,8 @@ fn1: { !: // fn1::@return // } - // [15] return + // [16] return rts - // fn1::@2 - b2: - // (*screen)++; - // [16] *((byte*) fn1::screen#2) ← ++ *((byte*) fn1::screen#2) -- _deref_pbuz1=_inc__deref_pbuz1 - ldy #0 - lda (screen),y - clc - adc #1 - sta (screen),y - // for(byte* screen=$400;screen<$400+1000;screen++) - // [17] (byte*) fn1::screen#1 ← ++ (byte*) fn1::screen#2 -- pbuz1=_inc_pbuz1 - inc screen - bne !+ - inc screen+1 - !: - // [13] phi from fn1::@2 to fn1::@1 [phi:fn1::@2->fn1::@1] - // [13] phi (byte*) fn1::screen#2 = (byte*) fn1::screen#1 [phi:fn1::@2->fn1::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/function-pointer-noarg-call-6.sym b/src/test/ref/function-pointer-noarg-call-6.sym index 6572fbee0..505770501 100644 --- a/src/test/ref/function-pointer-noarg-call-6.sym +++ b/src/test/ref/function-pointer-noarg-call-6.sym @@ -6,16 +6,16 @@ (label) fn1::@2 (label) fn1::@return (byte*) fn1::screen -(byte*) fn1::screen#1 screen zp ZP_WORD:4 202.0 -(byte*) fn1::screen#2 screen zp ZP_WORD:4 168.33333333333331 +(byte*) fn1::screen#1 screen zp ZP_WORD:4 151.5 +(byte*) fn1::screen#4 screen zp ZP_WORD:4 202.0 (void()) main() (label) main::@1 (label) main::@2 (label) main::@return (void()*) main::cls (byte*) main::cols -(byte*) main::cols#1 cols zp ZP_WORD:2 22.0 -(byte*) main::cols#2 cols zp ZP_WORD:2 11.0 +(byte*) main::cols#1 cols zp ZP_WORD:2 16.5 +(byte*) main::cols#4 cols zp ZP_WORD:2 14.666666666666666 -zp ZP_WORD:2 [ main::cols#2 main::cols#1 ] -zp ZP_WORD:4 [ fn1::screen#2 fn1::screen#1 ] +zp ZP_WORD:2 [ main::cols#4 main::cols#1 ] +zp ZP_WORD:4 [ fn1::screen#4 fn1::screen#1 ] diff --git a/src/test/ref/ifmin.asm b/src/test/ref/ifmin.asm index 615459398..1946ec914 100644 --- a/src/test/ref/ifmin.asm +++ b/src/test/ref/ifmin.asm @@ -5,13 +5,15 @@ .label SCREEN = $400 main: { ldx #0 - b1: - cpx #$32 - bcs b2 + b3: stx SCREEN b2: inx cpx #$64 bcc b1 rts + b1: + cpx #$32 + bcs b2 + jmp b3 } diff --git a/src/test/ref/ifmin.cfg b/src/test/ref/ifmin.cfg index ea4d6b6a5..0a74ca30d 100644 --- a/src/test/ref/ifmin.cfg +++ b/src/test/ref/ifmin.cfg @@ -9,18 +9,19 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2>=(byte) $32) goto main::@2 to:main::@3 -main::@3: scope:[main] from main::@1 - [7] *((const byte*) SCREEN#0) ← (byte) main::i#2 +main::@3: scope:[main] from main main::@1 + [5] (byte) main::i#6 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) SCREEN#0) ← (byte) main::i#6 to:main::@2 main::@2: scope:[main] from main::@1 main::@3 - [8] (byte) main::i#1 ← ++ (byte) main::i#2 + [7] (byte) main::i#5 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#6 ) + [8] (byte) main::i#1 ← ++ (byte) main::i#5 [9] if((byte) main::i#1<(byte) $64) goto main::@1 to:main::@return main::@return: scope:[main] from main::@2 [10] return to:@return +main::@1: scope:[main] from main::@2 + [11] if((byte) main::i#1>=(byte) $32) goto main::@2 + to:main::@3 diff --git a/src/test/ref/ifmin.log b/src/test/ref/ifmin.log index 7de50676d..05980333c 100644 --- a/src/test/ref/ifmin.log +++ b/src/test/ref/ifmin.log @@ -84,22 +84,36 @@ Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = (byte*) 1024 Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#7 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (main::@1_1) in block main::@2 +if() condition always false - eliminating [10] if((const byte) main::i#0>=(byte) $32) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@5(between main::@2 and main::@1) +Added new block during phi lifting main::@5(between main::@1 and main::@2) +Added new block during phi lifting main::@6(between main::@1 and main::@3) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 -Created 1 initial phi equivalence classes -Coalesced [12] main::i#5 ← main::i#1 +Created 2 initial phi equivalence classes +Coalesced [9] main::i#9 ← main::i#6 +Coalesced [15] main::i#10 ← main::i#1 +Coalesced (already) [16] main::i#8 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 @@ -118,35 +132,37 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2>=(byte) $32) goto main::@2 to:main::@3 -main::@3: scope:[main] from main::@1 - [7] *((const byte*) SCREEN#0) ← (byte) main::i#2 +main::@3: scope:[main] from main main::@1 + [5] (byte) main::i#6 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) SCREEN#0) ← (byte) main::i#6 to:main::@2 main::@2: scope:[main] from main::@1 main::@3 - [8] (byte) main::i#1 ← ++ (byte) main::i#2 + [7] (byte) main::i#5 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#6 ) + [8] (byte) main::i#1 ← ++ (byte) main::i#5 [9] if((byte) main::i#1<(byte) $64) goto main::@1 to:main::@return main::@return: scope:[main] from main::@2 [10] return to:@return +main::@1: scope:[main] from main::@2 + [11] if((byte) main::i#1>=(byte) $32) goto main::@2 + to:main::@3 VARIABLE REGISTER WEIGHTS (byte*) SCREEN (void()) main() (byte) main::i -(byte) main::i#1 16.5 -(byte) main::i#2 14.666666666666666 +(byte) main::i#1 168.33333333333331 +(byte) main::i#5 213.0 +(byte) main::i#6 61.5 Initial phi equivalence classes -[ main::i#2 main::i#1 ] +[ main::i#5 main::i#6 main::i#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +[ main::i#5 main::i#6 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#5 main::i#6 main::i#1 ] INITIAL ASM Target platform is c64basic @@ -177,54 +193,57 @@ bend: // main main: { .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@3 [phi:main->main::@3] + b3_from_main: + // [5] phi (byte) main::i#6 = (byte) 0 [phi:main->main::@3#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2>=(byte) $32) goto main::@2 -- vbuz1_ge_vbuc1_then_la1 - lda i - cmp #$32 - bcs b2 jmp b3 // main::@3 b3: - // [7] *((const byte*) SCREEN#0) ← (byte) main::i#2 -- _deref_pbuc1=vbuz1 + // [6] *((const byte*) SCREEN#0) ← (byte) main::i#6 -- _deref_pbuc1=vbuz1 lda i sta SCREEN + // [7] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] + b2_from_b1: + b2_from_b3: + // [7] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@1/main::@3->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [8] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [8] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuz1=_inc_vbuz1 inc i // [9] if((byte) main::i#1<(byte) $64) goto main::@1 -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$64 - bcc b1_from_b2 + bcc b1 jmp breturn // main::@return breturn: // [10] return rts + // main::@1 + b1: + // [11] if((byte) main::i#1>=(byte) $32) goto main::@2 -- vbuz1_ge_vbuc1_then_la1 + lda i + cmp #$32 + bcs b2_from_b1 + // [5] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + // [5] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@1->main::@3#0] -- register_copy + jmp b3 } // File Data 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:2 [ main::i#5 main::i#6 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 31.17: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 442.83: zp ZP_BYTE:2 [ main::i#5 main::i#6 main::i#1 ] Uplift Scope [] -Uplifting [main] best 338 combination reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 338 combination +Uplifting [main] best 1838 combination reg byte x [ main::i#5 main::i#6 main::i#1 ] +Uplifting [] best 1838 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -253,66 +272,67 @@ bend_from_b1: bend: // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@3 [phi:main->main::@3] + b3_from_main: + // [5] phi (byte) main::i#6 = (byte) 0 [phi:main->main::@3#0] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2>=(byte) $32) goto main::@2 -- vbuxx_ge_vbuc1_then_la1 - cpx #$32 - bcs b2 jmp b3 // main::@3 b3: - // [7] *((const byte*) SCREEN#0) ← (byte) main::i#2 -- _deref_pbuc1=vbuxx + // [6] *((const byte*) SCREEN#0) ← (byte) main::i#6 -- _deref_pbuc1=vbuxx stx SCREEN + // [7] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] + b2_from_b1: + b2_from_b3: + // [7] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@1/main::@3->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [8] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [8] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuxx=_inc_vbuxx inx // [9] if((byte) main::i#1<(byte) $64) goto main::@1 -- vbuxx_lt_vbuc1_then_la1 cpx #$64 - bcc b1_from_b2 + bcc b1 jmp breturn // main::@return breturn: // [10] return rts + // main::@1 + b1: + // [11] if((byte) main::i#1>=(byte) $32) goto main::@2 -- vbuxx_ge_vbuc1_then_la1 + cpx #$32 + bcs b2_from_b1 + // [5] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + // [5] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@1->main::@3#0] -- register_copy + jmp b3 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b2 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination -Replacing label b1_from_b2 with b1 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b1_from_b2: +Removing instruction b2_from_b1: +Removing instruction b2_from_b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b3: +Removing instruction b3_from_main: Removing instruction breturn: +Removing instruction b3_from_b1: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Removing instruction jmp b1 -Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -328,14 +348,15 @@ FINAL SYMBOL TABLE (label) main::@3 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 14.666666666666666 +(byte) main::i#1 reg byte x 168.33333333333331 +(byte) main::i#5 reg byte x 213.0 +(byte) main::i#6 reg byte x 61.5 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#5 main::i#6 main::i#1 ] FINAL ASSEMBLER -Score: 176 +Score: 1196 // File Comments // Minimal if() test @@ -354,25 +375,20 @@ Score: 176 // @end // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@3 [phi:main->main::@3] + // [5] phi (byte) main::i#6 = (byte) 0 [phi:main->main::@3#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - // main::@1 - b1: - // if(i<50) - // [6] if((byte) main::i#2>=(byte) $32) goto main::@2 -- vbuxx_ge_vbuc1_then_la1 - cpx #$32 - bcs b2 // main::@3 + b3: // *SCREEN = i - // [7] *((const byte*) SCREEN#0) ← (byte) main::i#2 -- _deref_pbuc1=vbuxx + // [6] *((const byte*) SCREEN#0) ← (byte) main::i#6 -- _deref_pbuc1=vbuxx stx SCREEN + // [7] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] + // [7] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@1/main::@3->main::@2#0] -- register_copy // main::@2 b2: // while(++i<100) - // [8] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [8] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuxx=_inc_vbuxx inx // [9] if((byte) main::i#1<(byte) $64) goto main::@1 -- vbuxx_lt_vbuc1_then_la1 cpx #$64 @@ -381,6 +397,15 @@ main: { // } // [10] return rts + // main::@1 + b1: + // if(i<50) + // [11] if((byte) main::i#1>=(byte) $32) goto main::@2 -- vbuxx_ge_vbuc1_then_la1 + cpx #$32 + bcs b2 + // [5] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [5] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@1->main::@3#0] -- register_copy + jmp b3 } // File Data diff --git a/src/test/ref/ifmin.sym b/src/test/ref/ifmin.sym index efcd1b0d0..23f0c3483 100644 --- a/src/test/ref/ifmin.sym +++ b/src/test/ref/ifmin.sym @@ -9,7 +9,8 @@ (label) main::@3 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 14.666666666666666 +(byte) main::i#1 reg byte x 168.33333333333331 +(byte) main::i#5 reg byte x 213.0 +(byte) main::i#6 reg byte x 61.5 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#5 main::i#6 main::i#1 ] diff --git a/src/test/ref/incrementinarray.asm b/src/test/ref/incrementinarray.asm index c92ff2cd6..45fb4b23c 100644 --- a/src/test/ref/incrementinarray.asm +++ b/src/test/ref/incrementinarray.asm @@ -96,14 +96,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [31] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [31] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [31] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [32] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [31] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [34] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [32] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [35] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [33] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [31] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [31] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [34] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [31] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [31] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [31] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [32] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [31] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [34] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [32] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [35] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [33] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [31] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [31] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [34] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [31] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [31] phi from memset to memset::@2 [phi:memset->memset::@2] + // [31] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [31] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [31] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [32] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [32] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [33] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [34] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -1538,24 +1570,8 @@ memset: { bne b2 // memset::@return // } - // [33] return + // [35] return rts - // memset::@2 - b2: - // *dst = c - // [34] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [35] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [31] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [31] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data txt: .text "camelot@" diff --git a/src/test/ref/incrementinarray.sym b/src/test/ref/incrementinarray.sym index c8c9e8bd7..0b5e2fc90 100644 --- a/src/test/ref/incrementinarray.sym +++ b/src/test/ref/incrementinarray.sym @@ -21,8 +21,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:6 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:6 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:6 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:6 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -58,4 +58,4 @@ reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:2 [ print_str::str#2 print_str::str#0 ] zp ZP_WORD:4 [ print_char_cursor#12 print_char_cursor#25 print_char_cursor#31 print_char_cursor#1 ] -zp ZP_WORD:6 [ memset::dst#2 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] +zp ZP_WORD:6 [ memset::dst#4 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] diff --git a/src/test/ref/inline-function-level2.asm b/src/test/ref/inline-function-level2.asm index af0d9ef46..4dd88b5b3 100644 --- a/src/test/ref/inline-function-level2.asm +++ b/src/test/ref/inline-function-level2.asm @@ -3,8 +3,8 @@ :BasicUpstart(main) .pc = $80d "Program" .label cur_line = 2 - .label cur_line_3 = 6 .label cur_line_10 = 6 + .label cur_line_22 = 6 main: { .const line1_xpos = 2 .const line1_xadd = $40 @@ -21,7 +21,14 @@ main: { sta sc lda #>$400 sta sc+1 - b1: + b2: + lda #' ' + ldy #0 + sta (sc),y + inc sc + bne !+ + inc sc+1 + !: lda sc+1 cmp #>$400+$3e8 bcc b2 @@ -39,43 +46,6 @@ main: { lda #>line1_xpos*$100 sta line1_pos+1 ldx #0 - line1_b1: - cpx #line1_ysize - bcc line1_b2 - lda #<$400 - sta cur_line_10 - lda #>$400 - sta cur_line_10+1 - lda #line2_xpos*$100 - sta line2_pos+1 - ldx #0 - line2_b1: - cpx #line2_ysize - bcc line2_b2 - rts - line2_b2: - lda line2_pos+1 - tay - lda #line2_ch - sta (cur_line_10),y - lda #line2_xadd - clc - adc line2_pos - sta line2_pos - bcc !+ - inc line2_pos+1 - !: - lda #$28 - clc - adc cur_line_3 - sta cur_line_3 - bcc !+ - inc cur_line_3+1 - !: - inx - jmp line2_b1 line1_b2: lda line1_pos+1 tay @@ -96,14 +66,38 @@ main: { inc cur_line+1 !: inx - jmp line1_b1 - b2: - lda #' ' - ldy #0 - sta (sc),y - inc sc - bne !+ - inc sc+1 + cpx #line1_ysize + bcc line1_b2 + lda #<$400 + sta cur_line_22 + lda #>$400 + sta cur_line_22+1 + lda #line2_xpos*$100 + sta line2_pos+1 + ldx #0 + line2_b2: + lda line2_pos+1 + tay + lda #line2_ch + sta (cur_line_22),y + lda #line2_xadd + clc + adc line2_pos + sta line2_pos + bcc !+ + inc line2_pos+1 !: - jmp b1 + lda #$28 + clc + adc cur_line_10 + sta cur_line_10 + bcc !+ + inc cur_line_10+1 + !: + inx + cpx #line2_ysize + bcc line2_b2 + rts } diff --git a/src/test/ref/inline-function-level2.cfg b/src/test/ref/inline-function-level2.cfg index d4964bd20..6b9584327 100644 --- a/src/test/ref/inline-function-level2.cfg +++ b/src/test/ref/inline-function-level2.cfg @@ -9,55 +9,61 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::sc#4 ← phi( main::@1/(byte*) main::sc#1 main/(byte*) 1024 ) + [6] *((byte*) main::sc#4) ← (byte) ' ' + [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::sc#2 ← phi( main/(byte*) 1024 main::@2/(byte*) main::sc#1 ) - [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 to:main::line1 main::line1: scope:[main] from main::@1 - [7] phi() - to:main::line1_@1 -main::line1_@1: scope:[main] from main::@3 main::line1 - [8] (byte*) cur_line#13 ← phi( main::@3/(byte*) cur_line#1 main::line1/(byte*) 1024 ) - [8] (word) main::line1_pos#2 ← phi( main::@3/(word) main::line1_pos#1 main::line1/(const byte) main::line1_xpos#0*(word) $100 ) - [8] (byte) main::line1_i#2 ← phi( main::@3/(byte) main::line1_i#1 main::line1/(byte) 0 ) - [9] if((byte) main::line1_i#2<(const byte) main::line1_ysize#0) goto main::line1_@2 - to:main::line2 -main::line2: scope:[main] from main::line1_@1 + [9] phi() + to:main::line1_1 +main::line1_1: scope:[main] from main::line1 [10] phi() - to:main::line2_@1 -main::line2_@1: scope:[main] from main::@4 main::line2 - [11] (byte*) cur_line#10 ← phi( main::@4/(byte*) cur_line#3 main::line2/(byte*) 1024 ) - [11] (word) main::line2_pos#2 ← phi( main::@4/(word) main::line2_pos#1 main::line2/(const byte) main::line2_xpos#0*(word) $100 ) - [11] (byte) main::line2_i#2 ← phi( main::@4/(byte) main::line2_i#1 main::line2/(byte) 0 ) - [12] if((byte) main::line2_i#2<(const byte) main::line2_ysize#0) goto main::line2_@2 - to:main::@return -main::@return: scope:[main] from main::line2_@1 - [13] return - to:@return -main::line2_@2: scope:[main] from main::line2_@1 - [14] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#2 - to:main::plot2 -main::plot2: scope:[main] from main::line2_@2 - [15] *((byte*) cur_line#10 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 - to:main::@4 -main::@4: scope:[main] from main::plot2 - [16] (word) main::line2_pos#1 ← (word) main::line2_pos#2 + (const byte) main::line2_xadd#0 - [17] (byte*) cur_line#3 ← (byte*) cur_line#10 + (byte) $28 - [18] (byte) main::line2_i#1 ← ++ (byte) main::line2_i#2 - to:main::line2_@1 -main::line1_@2: scope:[main] from main::line1_@1 - [19] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#2 + to:main::line1_@2 +main::line1_@2: scope:[main] from main::line1_1 main::line1_@1 + [11] (byte*) cur_line#18 ← phi( main::line1_@1/(byte*) cur_line#1 main::line1_1/(byte*) 1024 ) + [11] (word) main::line1_pos#6 ← phi( main::line1_@1/(word) main::line1_pos#1 main::line1_1/(const byte) main::line1_xpos#0*(word) $100 ) + [11] (byte) main::line1_i#6 ← phi( main::line1_@1/(byte) main::line1_i#1 main::line1_1/(byte) 0 ) + [12] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#6 to:main::plot1 main::plot1: scope:[main] from main::line1_@2 - [20] *((byte*) cur_line#13 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 + [13] *((byte*) cur_line#18 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 to:main::@3 main::@3: scope:[main] from main::plot1 - [21] (word) main::line1_pos#1 ← (word) main::line1_pos#2 + (const byte) main::line1_xadd#0 - [22] (byte*) cur_line#1 ← (byte*) cur_line#13 + (byte) $28 - [23] (byte) main::line1_i#1 ← ++ (byte) main::line1_i#2 + [14] (word) main::line1_pos#1 ← (word) main::line1_pos#6 + (const byte) main::line1_xadd#0 + [15] (byte*) cur_line#1 ← (byte*) cur_line#18 + (byte) $28 + [16] (byte) main::line1_i#1 ← ++ (byte) main::line1_i#6 to:main::line1_@1 -main::@2: scope:[main] from main::@1 - [24] *((byte*) main::sc#2) ← (byte) ' ' - [25] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 - to:main::@1 +main::line1_@1: scope:[main] from main::@3 + [17] if((byte) main::line1_i#1<(const byte) main::line1_ysize#0) goto main::line1_@2 + to:main::line2 +main::line2: scope:[main] from main::line1_@1 + [18] phi() + to:main::line2_1 +main::line2_1: scope:[main] from main::line2 + [19] phi() + to:main::line2_@2 +main::line2_@2: scope:[main] from main::line2_1 main::line2_@1 + [20] (byte*) cur_line#22 ← phi( main::line2_@1/(byte*) cur_line#10 main::line2_1/(byte*) 1024 ) + [20] (word) main::line2_pos#6 ← phi( main::line2_@1/(word) main::line2_pos#1 main::line2_1/(const byte) main::line2_xpos#0*(word) $100 ) + [20] (byte) main::line2_i#6 ← phi( main::line2_@1/(byte) main::line2_i#1 main::line2_1/(byte) 0 ) + [21] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#6 + to:main::plot2 +main::plot2: scope:[main] from main::line2_@2 + [22] *((byte*) cur_line#22 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 + to:main::@4 +main::@4: scope:[main] from main::plot2 + [23] (word) main::line2_pos#1 ← (word) main::line2_pos#6 + (const byte) main::line2_xadd#0 + [24] (byte*) cur_line#10 ← (byte*) cur_line#22 + (byte) $28 + [25] (byte) main::line2_i#1 ← ++ (byte) main::line2_i#6 + to:main::line2_@1 +main::line2_@1: scope:[main] from main::@4 + [26] if((byte) main::line2_i#1<(const byte) main::line2_ysize#0) goto main::line2_@2 + to:main::@return +main::@return: scope:[main] from main::line2_@1 + [27] return + to:@return diff --git a/src/test/ref/inline-function-level2.log b/src/test/ref/inline-function-level2.log index 3967162c9..23b993dd2 100644 --- a/src/test/ref/inline-function-level2.log +++ b/src/test/ref/inline-function-level2.log @@ -441,11 +441,40 @@ Eliminating unused variable (byte*~) main::plot1_$0#0 and assignment [8] (byte*~ Eliminating unused variable (byte*~) main::plot2_$0#0 and assignment [17] (byte*~) main::plot2_$0#0 ← (byte*) cur_line#10 + (byte) main::plot2_xpos#0 Eliminating unused constant (const byte*) cur_line#16 Successful SSA optimization PassNEliminateUnusedVars -Constant right-side identified [4] (word) main::line1_pos#0 ← (const byte) main::line1_xpos#0 w= (byte) 0 -Constant right-side identified [12] (word) main::line2_pos#0 ← (const byte) main::line2_xpos#0 w= (byte) 0 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) main::sc#1 = (byte*) main::sc#2 +Alias (byte) main::line1_i#1 = (byte) main::line1_i#2 +Alias (word) main::line1_pos#1 = (word) main::line1_pos#2 +Alias (byte*) cur_line#1 = (byte*) cur_line#13 +Alias (byte) main::line1_i#6 = (byte) main::line1_i#7 (byte) main::line1_i#8 +Alias (word) main::line1_pos#6 = (word) main::line1_pos#8 (word) main::line1_pos#7 +Alias (byte*) cur_line#18 = (byte*) cur_line#20 (byte*) cur_line#19 +Alias (byte) main::line2_i#1 = (byte) main::line2_i#2 +Alias (word) main::line2_pos#1 = (word) main::line2_pos#2 +Alias (byte*) cur_line#10 = (byte*) cur_line#3 +Alias (byte) main::line2_i#6 = (byte) main::line2_i#7 (byte) main::line2_i#8 +Alias (word) main::line2_pos#6 = (word) main::line2_pos#8 (word) main::line2_pos#7 +Alias (byte*) cur_line#22 = (byte*) cur_line#24 (byte*) cur_line#23 +Alias (word) main::line1_pos#0 = (word) main::line1_pos#9 +Alias (word) main::line2_pos#0 = (word) main::line2_pos#9 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) main::sc#5 (const byte*) main::sc#0 +Identical Phi Values (byte) main::line1_i#9 (const byte) main::line1_i#0 +Identical Phi Values (byte*) cur_line#21 (const byte*) cur_line#0 +Identical Phi Values (byte) main::line2_i#9 (const byte) main::line2_i#0 +Identical Phi Values (byte*) cur_line#25 (const byte*) cur_line#2 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [6] (word) main::line1_pos#0 ← (const byte) main::line1_xpos#0 w= (byte) 0 +Constant right-side identified [18] (word) main::line2_pos#0 ← (const byte) main::line2_xpos#0 w= (byte) 0 Successful SSA optimization Pass2ConstantRValueConsolidation -Simplifying expression containing zero main::line1_xpos#0*$100 in [4] (word) main::line1_pos#0 ← (const byte) main::line1_xpos#0*(number) $100+(byte) 0 -Simplifying expression containing zero main::line2_xpos#0*$100 in [12] (word) main::line2_pos#0 ← (const byte) main::line2_xpos#0*(number) $100+(byte) 0 +if() condition always true - replacing block destination [33] if((const byte*) main::sc#0<(word)(number) $400+(number) $3e8) goto main::@2 +if() condition always true - replacing block destination [35] if((const byte) main::line1_i#0<(const byte) main::line1_ysize#0) goto main::line1_@2 +if() condition always true - replacing block destination [37] if((const byte) main::line2_i#0<(const byte) main::line2_ysize#0) goto main::line2_@2 +Successful SSA optimization Pass2ConstantIfs +Simplifying expression containing zero main::line1_xpos#0*$100 in [6] (word) main::line1_pos#0 ← (const byte) main::line1_xpos#0*(number) $100+(byte) 0 +Simplifying expression containing zero main::line2_xpos#0*$100 in [18] (word) main::line2_pos#0 ← (const byte) main::line2_xpos#0*(number) $100+(byte) 0 Successful SSA optimization PassNSimplifyExpressionWithZero Adding number conversion cast (unumber) main::line1_xpos#0*$100 in (word) main::line1_pos#0 ← (const byte) main::line1_xpos#0*(number) $100 Adding number conversion cast (unumber) $100 in (word) main::line1_pos#0 ← ((unumber)) (const byte) main::line1_xpos#0*(number) $100 @@ -481,32 +510,42 @@ Constant inlined main::sc#0 = (byte*) 1024 Constant inlined cur_line#2 = (byte*) 1024 Constant inlined main::line1_pos#0 = (const byte) main::line1_xpos#0*(word) $100 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@11(between main::@1 and main::@2) +Added new block during phi lifting main::@12(between main::line1_@1 and main::line1_@2) +Added new block during phi lifting main::@13(between main::line2_@1 and main::line2_@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @3 Adding NOP phi() at start of @4 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::line1 +Adding NOP phi() at start of main::line1_1 Adding NOP phi() at start of main::@7 Adding NOP phi() at start of main::line2 +Adding NOP phi() at start of main::line2_1 CALL GRAPH Calls in [] to main:3 Created 7 initial phi equivalence classes -Coalesced [23] main::line2_i#6 ← main::line2_i#1 -Coalesced [24] main::line2_pos#6 ← main::line2_pos#1 -Coalesced [25] cur_line#19 ← cur_line#3 -Coalesced [31] main::line1_i#6 ← main::line1_i#1 -Coalesced [32] main::line1_pos#6 ← main::line1_pos#1 -Coalesced [33] cur_line#18 ← cur_line#1 -Coalesced [36] main::sc#4 ← main::sc#1 +Coalesced [33] main::line2_i#10 ← main::line2_i#1 +Coalesced [34] main::line2_pos#10 ← main::line2_pos#1 +Coalesced [35] cur_line#27 ← cur_line#10 +Coalesced [36] main::line1_i#10 ← main::line1_i#1 +Coalesced [37] main::line1_pos#10 ← main::line1_pos#1 +Coalesced [38] cur_line#26 ← cur_line#1 +Coalesced [39] main::sc#6 ← main::sc#1 Coalesced down to 7 phi equivalence classes Culled Empty Block (label) @1 Culled Empty Block (label) @4 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@7 +Culled Empty Block (label) main::@13 +Culled Empty Block (label) main::@12 +Culled Empty Block (label) main::@11 Renumbering block @3 to @1 Renumbering block main::@8 to main::@3 Renumbering block main::@10 to main::@4 @@ -515,7 +554,9 @@ Adding NOP phi() at start of @1 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::line1 +Adding NOP phi() at start of main::line1_1 Adding NOP phi() at start of main::line2 +Adding NOP phi() at start of main::line2_1 FINAL CONTROL FLOW GRAPH @begin: scope:[] from @@ -529,76 +570,82 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::sc#4 ← phi( main::@1/(byte*) main::sc#1 main/(byte*) 1024 ) + [6] *((byte*) main::sc#4) ← (byte) ' ' + [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::sc#2 ← phi( main/(byte*) 1024 main::@2/(byte*) main::sc#1 ) - [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 to:main::line1 main::line1: scope:[main] from main::@1 - [7] phi() - to:main::line1_@1 -main::line1_@1: scope:[main] from main::@3 main::line1 - [8] (byte*) cur_line#13 ← phi( main::@3/(byte*) cur_line#1 main::line1/(byte*) 1024 ) - [8] (word) main::line1_pos#2 ← phi( main::@3/(word) main::line1_pos#1 main::line1/(const byte) main::line1_xpos#0*(word) $100 ) - [8] (byte) main::line1_i#2 ← phi( main::@3/(byte) main::line1_i#1 main::line1/(byte) 0 ) - [9] if((byte) main::line1_i#2<(const byte) main::line1_ysize#0) goto main::line1_@2 - to:main::line2 -main::line2: scope:[main] from main::line1_@1 + [9] phi() + to:main::line1_1 +main::line1_1: scope:[main] from main::line1 [10] phi() - to:main::line2_@1 -main::line2_@1: scope:[main] from main::@4 main::line2 - [11] (byte*) cur_line#10 ← phi( main::@4/(byte*) cur_line#3 main::line2/(byte*) 1024 ) - [11] (word) main::line2_pos#2 ← phi( main::@4/(word) main::line2_pos#1 main::line2/(const byte) main::line2_xpos#0*(word) $100 ) - [11] (byte) main::line2_i#2 ← phi( main::@4/(byte) main::line2_i#1 main::line2/(byte) 0 ) - [12] if((byte) main::line2_i#2<(const byte) main::line2_ysize#0) goto main::line2_@2 - to:main::@return -main::@return: scope:[main] from main::line2_@1 - [13] return - to:@return -main::line2_@2: scope:[main] from main::line2_@1 - [14] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#2 - to:main::plot2 -main::plot2: scope:[main] from main::line2_@2 - [15] *((byte*) cur_line#10 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 - to:main::@4 -main::@4: scope:[main] from main::plot2 - [16] (word) main::line2_pos#1 ← (word) main::line2_pos#2 + (const byte) main::line2_xadd#0 - [17] (byte*) cur_line#3 ← (byte*) cur_line#10 + (byte) $28 - [18] (byte) main::line2_i#1 ← ++ (byte) main::line2_i#2 - to:main::line2_@1 -main::line1_@2: scope:[main] from main::line1_@1 - [19] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#2 + to:main::line1_@2 +main::line1_@2: scope:[main] from main::line1_1 main::line1_@1 + [11] (byte*) cur_line#18 ← phi( main::line1_@1/(byte*) cur_line#1 main::line1_1/(byte*) 1024 ) + [11] (word) main::line1_pos#6 ← phi( main::line1_@1/(word) main::line1_pos#1 main::line1_1/(const byte) main::line1_xpos#0*(word) $100 ) + [11] (byte) main::line1_i#6 ← phi( main::line1_@1/(byte) main::line1_i#1 main::line1_1/(byte) 0 ) + [12] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#6 to:main::plot1 main::plot1: scope:[main] from main::line1_@2 - [20] *((byte*) cur_line#13 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 + [13] *((byte*) cur_line#18 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 to:main::@3 main::@3: scope:[main] from main::plot1 - [21] (word) main::line1_pos#1 ← (word) main::line1_pos#2 + (const byte) main::line1_xadd#0 - [22] (byte*) cur_line#1 ← (byte*) cur_line#13 + (byte) $28 - [23] (byte) main::line1_i#1 ← ++ (byte) main::line1_i#2 + [14] (word) main::line1_pos#1 ← (word) main::line1_pos#6 + (const byte) main::line1_xadd#0 + [15] (byte*) cur_line#1 ← (byte*) cur_line#18 + (byte) $28 + [16] (byte) main::line1_i#1 ← ++ (byte) main::line1_i#6 to:main::line1_@1 -main::@2: scope:[main] from main::@1 - [24] *((byte*) main::sc#2) ← (byte) ' ' - [25] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 - to:main::@1 +main::line1_@1: scope:[main] from main::@3 + [17] if((byte) main::line1_i#1<(const byte) main::line1_ysize#0) goto main::line1_@2 + to:main::line2 +main::line2: scope:[main] from main::line1_@1 + [18] phi() + to:main::line2_1 +main::line2_1: scope:[main] from main::line2 + [19] phi() + to:main::line2_@2 +main::line2_@2: scope:[main] from main::line2_1 main::line2_@1 + [20] (byte*) cur_line#22 ← phi( main::line2_@1/(byte*) cur_line#10 main::line2_1/(byte*) 1024 ) + [20] (word) main::line2_pos#6 ← phi( main::line2_@1/(word) main::line2_pos#1 main::line2_1/(const byte) main::line2_xpos#0*(word) $100 ) + [20] (byte) main::line2_i#6 ← phi( main::line2_@1/(byte) main::line2_i#1 main::line2_1/(byte) 0 ) + [21] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#6 + to:main::plot2 +main::plot2: scope:[main] from main::line2_@2 + [22] *((byte*) cur_line#22 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 + to:main::@4 +main::@4: scope:[main] from main::plot2 + [23] (word) main::line2_pos#1 ← (word) main::line2_pos#6 + (const byte) main::line2_xadd#0 + [24] (byte*) cur_line#10 ← (byte*) cur_line#22 + (byte) $28 + [25] (byte) main::line2_i#1 ← ++ (byte) main::line2_i#6 + to:main::line2_@1 +main::line2_@1: scope:[main] from main::@4 + [26] if((byte) main::line2_i#1<(const byte) main::line2_ysize#0) goto main::line2_@2 + to:main::@return +main::@return: scope:[main] from main::line2_@1 + [27] return + to:@return VARIABLE REGISTER WEIGHTS (byte*) cur_line -(byte*) cur_line#1 11.0 -(byte*) cur_line#10 6.6000000000000005 -(byte*) cur_line#13 6.6000000000000005 -(byte*) cur_line#3 11.0 +(byte*) cur_line#1 7.333333333333333 +(byte*) cur_line#10 7.333333333333333 +(byte*) cur_line#18 8.25 +(byte*) cur_line#22 8.25 (void()) main() (bool~) main::line1_$0 (byte~) main::line1_$1 (byte) main::line1_ch (byte) main::line1_i -(byte) main::line1_i#1 22.0 -(byte) main::line1_i#2 5.5 +(byte) main::line1_i#1 16.5 +(byte) main::line1_i#6 4.4 (word) main::line1_pos -(word) main::line1_pos#1 7.333333333333333 -(word) main::line1_pos#2 8.25 +(word) main::line1_pos#1 5.5 +(word) main::line1_pos#6 11.0 (byte) main::line1_xadd (byte) main::line1_xpos (byte) main::line1_ysize @@ -606,11 +653,11 @@ VARIABLE REGISTER WEIGHTS (byte~) main::line2_$1 (byte) main::line2_ch (byte) main::line2_i -(byte) main::line2_i#1 22.0 -(byte) main::line2_i#2 5.5 +(byte) main::line2_i#1 16.5 +(byte) main::line2_i#6 4.4 (word) main::line2_pos -(word) main::line2_pos#1 7.333333333333333 -(word) main::line2_pos#2 8.25 +(word) main::line2_pos#1 5.5 +(word) main::line2_pos#6 11.0 (byte) main::line2_xadd (byte) main::line2_xpos (byte) main::line2_ysize @@ -623,38 +670,38 @@ VARIABLE REGISTER WEIGHTS (byte) main::plot2_xpos (byte) main::plot2_xpos#0 22.0 (byte*) main::sc -(byte*) main::sc#1 22.0 -(byte*) main::sc#2 14.666666666666666 +(byte*) main::sc#1 16.5 +(byte*) main::sc#4 16.5 Initial phi equivalence classes -[ main::sc#2 main::sc#1 ] -[ main::line1_i#2 main::line1_i#1 ] -[ main::line1_pos#2 main::line1_pos#1 ] -[ cur_line#13 cur_line#1 ] -[ main::line2_i#2 main::line2_i#1 ] -[ main::line2_pos#2 main::line2_pos#1 ] -[ cur_line#10 cur_line#3 ] -Added variable main::plot2_xpos#0 to zero page equivalence class [ main::plot2_xpos#0 ] +[ main::sc#4 main::sc#1 ] +[ main::line1_i#6 main::line1_i#1 ] +[ main::line1_pos#6 main::line1_pos#1 ] +[ cur_line#18 cur_line#1 ] +[ main::line2_i#6 main::line2_i#1 ] +[ main::line2_pos#6 main::line2_pos#1 ] +[ cur_line#22 cur_line#10 ] Added variable main::plot1_xpos#0 to zero page equivalence class [ main::plot1_xpos#0 ] +Added variable main::plot2_xpos#0 to zero page equivalence class [ main::plot2_xpos#0 ] Complete equivalence classes -[ main::sc#2 main::sc#1 ] -[ main::line1_i#2 main::line1_i#1 ] -[ main::line1_pos#2 main::line1_pos#1 ] -[ cur_line#13 cur_line#1 ] -[ main::line2_i#2 main::line2_i#1 ] -[ main::line2_pos#2 main::line2_pos#1 ] -[ cur_line#10 cur_line#3 ] -[ main::plot2_xpos#0 ] +[ main::sc#4 main::sc#1 ] +[ main::line1_i#6 main::line1_i#1 ] +[ main::line1_pos#6 main::line1_pos#1 ] +[ cur_line#18 cur_line#1 ] +[ main::line2_i#6 main::line2_i#1 ] +[ main::line2_pos#6 main::line2_pos#1 ] +[ cur_line#22 cur_line#10 ] [ main::plot1_xpos#0 ] -Allocated zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] -Allocated zp ZP_BYTE:4 [ main::line1_i#2 main::line1_i#1 ] -Allocated zp ZP_WORD:5 [ main::line1_pos#2 main::line1_pos#1 ] -Allocated zp ZP_WORD:7 [ cur_line#13 cur_line#1 ] -Allocated zp ZP_BYTE:9 [ main::line2_i#2 main::line2_i#1 ] -Allocated zp ZP_WORD:10 [ main::line2_pos#2 main::line2_pos#1 ] -Allocated zp ZP_WORD:12 [ cur_line#10 cur_line#3 ] -Allocated zp ZP_BYTE:14 [ main::plot2_xpos#0 ] -Allocated zp ZP_BYTE:15 [ main::plot1_xpos#0 ] +[ main::plot2_xpos#0 ] +Allocated zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] +Allocated zp ZP_BYTE:4 [ main::line1_i#6 main::line1_i#1 ] +Allocated zp ZP_WORD:5 [ main::line1_pos#6 main::line1_pos#1 ] +Allocated zp ZP_WORD:7 [ cur_line#18 cur_line#1 ] +Allocated zp ZP_BYTE:9 [ main::line2_i#6 main::line2_i#1 ] +Allocated zp ZP_WORD:10 [ main::line2_pos#6 main::line2_pos#1 ] +Allocated zp ZP_WORD:12 [ cur_line#22 cur_line#10 ] +Allocated zp ZP_BYTE:14 [ main::plot1_xpos#0 ] +Allocated zp ZP_BYTE:15 [ main::plot2_xpos#0 ] INITIAL ASM Target platform is c64basic @@ -666,8 +713,8 @@ Target platform is c64basic .pc = $80d "Program" // Global Constants & labels .label cur_line = 7 - .label cur_line_3 = $c .label cur_line_10 = $c + .label cur_line_22 = $c // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -695,145 +742,95 @@ main: { .const line2_ysize = $f .const line2_ch = '.' .label sc = 2 - .label plot1_xpos = $f + .label plot1_xpos = $e .label line1_pos = 5 .label line1_i = 4 - .label plot2_xpos = $e + .label plot2_xpos = $f .label line2_pos = $a .label line2_i = 9 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::sc#2 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::sc#4 = (byte*) 1024 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$400 sta sc lda #>$400 sta sc+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((byte*) main::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + // [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: jmp b1 // main::@1 b1: - // [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 + // [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 lda sc+1 cmp #>$400+$3e8 - bcc b2 + bcc b2_from_b1 bne !+ lda sc cmp #<$400+$3e8 - bcc b2 + bcc b2_from_b1 !: - // [7] phi from main::@1 to main::line1 [phi:main::@1->main::line1] + // [9] phi from main::@1 to main::line1 [phi:main::@1->main::line1] line1_from_b1: jmp line1 // main::line1 line1: - // [8] phi from main::line1 to main::line1_@1 [phi:main::line1->main::line1_@1] - line1_b1_from_line1: - // [8] phi (byte*) cur_line#13 = (byte*) 1024 [phi:main::line1->main::line1_@1#0] -- pbuz1=pbuc1 + // [10] phi from main::line1 to main::line1_1 [phi:main::line1->main::line1_1] + line1_1_from_line1: + jmp line1_1 + // main::line1_1 + line1_1: + // [11] phi from main::line1_1 to main::line1_@2 [phi:main::line1_1->main::line1_@2] + line1_b2_from_line1_1: + // [11] phi (byte*) cur_line#18 = (byte*) 1024 [phi:main::line1_1->main::line1_@2#0] -- pbuz1=pbuc1 lda #<$400 sta cur_line lda #>$400 sta cur_line+1 - // [8] phi (word) main::line1_pos#2 = (const byte) main::line1_xpos#0*(word) $100 [phi:main::line1->main::line1_@1#1] -- vwuz1=vwuc1 + // [11] phi (word) main::line1_pos#6 = (const byte) main::line1_xpos#0*(word) $100 [phi:main::line1_1->main::line1_@2#1] -- vwuz1=vwuc1 lda #line1_xpos*$100 sta line1_pos+1 - // [8] phi (byte) main::line1_i#2 = (byte) 0 [phi:main::line1->main::line1_@1#2] -- vbuz1=vbuc1 + // [11] phi (byte) main::line1_i#6 = (byte) 0 [phi:main::line1_1->main::line1_@2#2] -- vbuz1=vbuc1 lda #0 sta line1_i - jmp line1_b1 - // main::line1_@1 - line1_b1: - // [9] if((byte) main::line1_i#2<(const byte) main::line1_ysize#0) goto main::line1_@2 -- vbuz1_lt_vbuc1_then_la1 - lda line1_i - cmp #line1_ysize - bcc line1_b2 - // [10] phi from main::line1_@1 to main::line2 [phi:main::line1_@1->main::line2] - line2_from_line1_b1: - jmp line2 - // main::line2 - line2: - // [11] phi from main::line2 to main::line2_@1 [phi:main::line2->main::line2_@1] - line2_b1_from_line2: - // [11] phi (byte*) cur_line#10 = (byte*) 1024 [phi:main::line2->main::line2_@1#0] -- pbuz1=pbuc1 - lda #<$400 - sta cur_line_10 - lda #>$400 - sta cur_line_10+1 - // [11] phi (word) main::line2_pos#2 = (const byte) main::line2_xpos#0*(word) $100 [phi:main::line2->main::line2_@1#1] -- vwuz1=vwuc1 - lda #line2_xpos*$100 - sta line2_pos+1 - // [11] phi (byte) main::line2_i#2 = (byte) 0 [phi:main::line2->main::line2_@1#2] -- vbuz1=vbuc1 - lda #0 - sta line2_i - jmp line2_b1 - // main::line2_@1 - line2_b1: - // [12] if((byte) main::line2_i#2<(const byte) main::line2_ysize#0) goto main::line2_@2 -- vbuz1_lt_vbuc1_then_la1 - lda line2_i - cmp #line2_ysize - bcc line2_b2 - jmp breturn - // main::@return - breturn: - // [13] return - rts - // main::line2_@2 - line2_b2: - // [14] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#2 -- vbuz1=_hi_vwuz2 - lda line2_pos+1 - sta plot2_xpos - jmp plot2 - // main::plot2 - plot2: - // [15] *((byte*) cur_line#10 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 -- pbuz1_derefidx_vbuz2=vbuc1 - lda #line2_ch - ldy plot2_xpos - sta (cur_line_10),y - jmp b4 - // main::@4 - b4: - // [16] (word) main::line2_pos#1 ← (word) main::line2_pos#2 + (const byte) main::line2_xadd#0 -- vwuz1=vwuz1_plus_vbuc1 - lda #line2_xadd - clc - adc line2_pos - sta line2_pos - bcc !+ - inc line2_pos+1 - !: - // [17] (byte*) cur_line#3 ← (byte*) cur_line#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc cur_line_3 - sta cur_line_3 - bcc !+ - inc cur_line_3+1 - !: - // [18] (byte) main::line2_i#1 ← ++ (byte) main::line2_i#2 -- vbuz1=_inc_vbuz1 - inc line2_i - // [11] phi from main::@4 to main::line2_@1 [phi:main::@4->main::line2_@1] - line2_b1_from_b4: - // [11] phi (byte*) cur_line#10 = (byte*) cur_line#3 [phi:main::@4->main::line2_@1#0] -- register_copy - // [11] phi (word) main::line2_pos#2 = (word) main::line2_pos#1 [phi:main::@4->main::line2_@1#1] -- register_copy - // [11] phi (byte) main::line2_i#2 = (byte) main::line2_i#1 [phi:main::@4->main::line2_@1#2] -- register_copy - jmp line2_b1 + jmp line1_b2 + // [11] phi from main::line1_@1 to main::line1_@2 [phi:main::line1_@1->main::line1_@2] + line1_b2_from_line1_b1: + // [11] phi (byte*) cur_line#18 = (byte*) cur_line#1 [phi:main::line1_@1->main::line1_@2#0] -- register_copy + // [11] phi (word) main::line1_pos#6 = (word) main::line1_pos#1 [phi:main::line1_@1->main::line1_@2#1] -- register_copy + // [11] phi (byte) main::line1_i#6 = (byte) main::line1_i#1 [phi:main::line1_@1->main::line1_@2#2] -- register_copy + jmp line1_b2 // main::line1_@2 line1_b2: - // [19] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#2 -- vbuz1=_hi_vwuz2 + // [12] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#6 -- vbuz1=_hi_vwuz2 lda line1_pos+1 sta plot1_xpos jmp plot1 // main::plot1 plot1: - // [20] *((byte*) cur_line#13 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 -- pbuz1_derefidx_vbuz2=vbuc1 + // [13] *((byte*) cur_line#18 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #line1_ch ldy plot1_xpos sta (cur_line),y jmp b3 // main::@3 b3: - // [21] (word) main::line1_pos#1 ← (word) main::line1_pos#2 + (const byte) main::line1_xadd#0 -- vwuz1=vwuz1_plus_vbuc1 + // [14] (word) main::line1_pos#1 ← (word) main::line1_pos#6 + (const byte) main::line1_xadd#0 -- vwuz1=vwuz1_plus_vbuc1 lda #line1_xadd clc adc line1_pos @@ -841,7 +838,7 @@ main: { bcc !+ inc line1_pos+1 !: - // [22] (byte*) cur_line#1 ← (byte*) cur_line#13 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [15] (byte*) cur_line#1 ← (byte*) cur_line#18 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc cur_line @@ -849,77 +846,140 @@ main: { bcc !+ inc cur_line+1 !: - // [23] (byte) main::line1_i#1 ← ++ (byte) main::line1_i#2 -- vbuz1=_inc_vbuz1 + // [16] (byte) main::line1_i#1 ← ++ (byte) main::line1_i#6 -- vbuz1=_inc_vbuz1 inc line1_i - // [8] phi from main::@3 to main::line1_@1 [phi:main::@3->main::line1_@1] - line1_b1_from_b3: - // [8] phi (byte*) cur_line#13 = (byte*) cur_line#1 [phi:main::@3->main::line1_@1#0] -- register_copy - // [8] phi (word) main::line1_pos#2 = (word) main::line1_pos#1 [phi:main::@3->main::line1_@1#1] -- register_copy - // [8] phi (byte) main::line1_i#2 = (byte) main::line1_i#1 [phi:main::@3->main::line1_@1#2] -- register_copy jmp line1_b1 - // main::@2 - b2: - // [24] *((byte*) main::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // [25] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 + // main::line1_@1 + line1_b1: + // [17] if((byte) main::line1_i#1<(const byte) main::line1_ysize#0) goto main::line1_@2 -- vbuz1_lt_vbuc1_then_la1 + lda line1_i + cmp #line1_ysize + bcc line1_b2_from_line1_b1 + // [18] phi from main::line1_@1 to main::line2 [phi:main::line1_@1->main::line2] + line2_from_line1_b1: + jmp line2 + // main::line2 + line2: + // [19] phi from main::line2 to main::line2_1 [phi:main::line2->main::line2_1] + line2_1_from_line2: + jmp line2_1 + // main::line2_1 + line2_1: + // [20] phi from main::line2_1 to main::line2_@2 [phi:main::line2_1->main::line2_@2] + line2_b2_from_line2_1: + // [20] phi (byte*) cur_line#22 = (byte*) 1024 [phi:main::line2_1->main::line2_@2#0] -- pbuz1=pbuc1 + lda #<$400 + sta cur_line_22 + lda #>$400 + sta cur_line_22+1 + // [20] phi (word) main::line2_pos#6 = (const byte) main::line2_xpos#0*(word) $100 [phi:main::line2_1->main::line2_@2#1] -- vwuz1=vwuc1 + lda #line2_xpos*$100 + sta line2_pos+1 + // [20] phi (byte) main::line2_i#6 = (byte) 0 [phi:main::line2_1->main::line2_@2#2] -- vbuz1=vbuc1 + lda #0 + sta line2_i + jmp line2_b2 + // [20] phi from main::line2_@1 to main::line2_@2 [phi:main::line2_@1->main::line2_@2] + line2_b2_from_line2_b1: + // [20] phi (byte*) cur_line#22 = (byte*) cur_line#10 [phi:main::line2_@1->main::line2_@2#0] -- register_copy + // [20] phi (word) main::line2_pos#6 = (word) main::line2_pos#1 [phi:main::line2_@1->main::line2_@2#1] -- register_copy + // [20] phi (byte) main::line2_i#6 = (byte) main::line2_i#1 [phi:main::line2_@1->main::line2_@2#2] -- register_copy + jmp line2_b2 + // main::line2_@2 + line2_b2: + // [21] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#6 -- vbuz1=_hi_vwuz2 + lda line2_pos+1 + sta plot2_xpos + jmp plot2 + // main::plot2 + plot2: + // [22] *((byte*) cur_line#22 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 -- pbuz1_derefidx_vbuz2=vbuc1 + lda #line2_ch + ldy plot2_xpos + sta (cur_line_22),y + jmp b4 + // main::@4 + b4: + // [23] (word) main::line2_pos#1 ← (word) main::line2_pos#6 + (const byte) main::line2_xadd#0 -- vwuz1=vwuz1_plus_vbuc1 + lda #line2_xadd + clc + adc line2_pos + sta line2_pos + bcc !+ + inc line2_pos+1 !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 + // [24] (byte*) cur_line#10 ← (byte*) cur_line#22 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc cur_line_10 + sta cur_line_10 + bcc !+ + inc cur_line_10+1 + !: + // [25] (byte) main::line2_i#1 ← ++ (byte) main::line2_i#6 -- vbuz1=_inc_vbuz1 + inc line2_i + jmp line2_b1 + // main::line2_@1 + line2_b1: + // [26] if((byte) main::line2_i#1<(const byte) main::line2_ysize#0) goto main::line2_@2 -- vbuz1_lt_vbuc1_then_la1 + lda line2_i + cmp #line2_ysize + bcc line2_b2_from_line2_b1 + jmp breturn + // main::@return + breturn: + // [27] return + rts } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a -Statement [14] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#2 [ main::line2_i#2 main::line2_pos#2 cur_line#10 main::plot2_xpos#0 ] ( main:2 [ main::line2_i#2 main::line2_pos#2 cur_line#10 main::plot2_xpos#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ main::line2_i#2 main::line2_i#1 ] -Statement [15] *((byte*) cur_line#10 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 [ main::line2_i#2 main::line2_pos#2 cur_line#10 ] ( main:2 [ main::line2_i#2 main::line2_pos#2 cur_line#10 ] ) always clobbers reg byte a -Statement [16] (word) main::line2_pos#1 ← (word) main::line2_pos#2 + (const byte) main::line2_xadd#0 [ main::line2_i#2 cur_line#10 main::line2_pos#1 ] ( main:2 [ main::line2_i#2 cur_line#10 main::line2_pos#1 ] ) always clobbers reg byte a -Statement [17] (byte*) cur_line#3 ← (byte*) cur_line#10 + (byte) $28 [ main::line2_i#2 main::line2_pos#1 cur_line#3 ] ( main:2 [ main::line2_i#2 main::line2_pos#1 cur_line#3 ] ) always clobbers reg byte a -Statement [19] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#2 [ main::line1_i#2 main::line1_pos#2 cur_line#13 main::plot1_xpos#0 ] ( main:2 [ main::line1_i#2 main::line1_pos#2 cur_line#13 main::plot1_xpos#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::line1_i#2 main::line1_i#1 ] -Statement [20] *((byte*) cur_line#13 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 [ main::line1_i#2 main::line1_pos#2 cur_line#13 ] ( main:2 [ main::line1_i#2 main::line1_pos#2 cur_line#13 ] ) always clobbers reg byte a -Statement [21] (word) main::line1_pos#1 ← (word) main::line1_pos#2 + (const byte) main::line1_xadd#0 [ main::line1_i#2 cur_line#13 main::line1_pos#1 ] ( main:2 [ main::line1_i#2 cur_line#13 main::line1_pos#1 ] ) always clobbers reg byte a -Statement [22] (byte*) cur_line#1 ← (byte*) cur_line#13 + (byte) $28 [ main::line1_i#2 main::line1_pos#1 cur_line#1 ] ( main:2 [ main::line1_i#2 main::line1_pos#1 cur_line#1 ] ) always clobbers reg byte a -Statement [24] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a reg byte y -Statement [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a -Statement [14] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#2 [ main::line2_i#2 main::line2_pos#2 cur_line#10 main::plot2_xpos#0 ] ( main:2 [ main::line2_i#2 main::line2_pos#2 cur_line#10 main::plot2_xpos#0 ] ) always clobbers reg byte a -Statement [15] *((byte*) cur_line#10 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 [ main::line2_i#2 main::line2_pos#2 cur_line#10 ] ( main:2 [ main::line2_i#2 main::line2_pos#2 cur_line#10 ] ) always clobbers reg byte a -Statement [16] (word) main::line2_pos#1 ← (word) main::line2_pos#2 + (const byte) main::line2_xadd#0 [ main::line2_i#2 cur_line#10 main::line2_pos#1 ] ( main:2 [ main::line2_i#2 cur_line#10 main::line2_pos#1 ] ) always clobbers reg byte a -Statement [17] (byte*) cur_line#3 ← (byte*) cur_line#10 + (byte) $28 [ main::line2_i#2 main::line2_pos#1 cur_line#3 ] ( main:2 [ main::line2_i#2 main::line2_pos#1 cur_line#3 ] ) always clobbers reg byte a -Statement [19] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#2 [ main::line1_i#2 main::line1_pos#2 cur_line#13 main::plot1_xpos#0 ] ( main:2 [ main::line1_i#2 main::line1_pos#2 cur_line#13 main::plot1_xpos#0 ] ) always clobbers reg byte a -Statement [20] *((byte*) cur_line#13 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 [ main::line1_i#2 main::line1_pos#2 cur_line#13 ] ( main:2 [ main::line1_i#2 main::line1_pos#2 cur_line#13 ] ) always clobbers reg byte a -Statement [21] (word) main::line1_pos#1 ← (word) main::line1_pos#2 + (const byte) main::line1_xadd#0 [ main::line1_i#2 cur_line#13 main::line1_pos#1 ] ( main:2 [ main::line1_i#2 cur_line#13 main::line1_pos#1 ] ) always clobbers reg byte a -Statement [22] (byte*) cur_line#1 ← (byte*) cur_line#13 + (byte) $28 [ main::line1_i#2 main::line1_pos#1 cur_line#1 ] ( main:2 [ main::line1_i#2 main::line1_pos#1 cur_line#1 ] ) always clobbers reg byte a -Statement [24] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] : zp ZP_WORD:2 , -Potential registers zp ZP_BYTE:4 [ main::line1_i#2 main::line1_i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:5 [ main::line1_pos#2 main::line1_pos#1 ] : zp ZP_WORD:5 , -Potential registers zp ZP_WORD:7 [ cur_line#13 cur_line#1 ] : zp ZP_WORD:7 , -Potential registers zp ZP_BYTE:9 [ main::line2_i#2 main::line2_i#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:10 [ main::line2_pos#2 main::line2_pos#1 ] : zp ZP_WORD:10 , -Potential registers zp ZP_WORD:12 [ cur_line#10 cur_line#3 ] : zp ZP_WORD:12 , -Potential registers zp ZP_BYTE:14 [ main::plot2_xpos#0 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:15 [ main::plot1_xpos#0 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y , +Statement [6] *((byte*) main::sc#4) ← (byte) ' ' [ main::sc#4 ] ( main:2 [ main::sc#4 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a +Statement [12] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#6 [ main::line1_i#6 main::line1_pos#6 cur_line#18 main::plot1_xpos#0 ] ( main:2 [ main::line1_i#6 main::line1_pos#6 cur_line#18 main::plot1_xpos#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::line1_i#6 main::line1_i#1 ] +Statement [13] *((byte*) cur_line#18 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 [ main::line1_i#6 main::line1_pos#6 cur_line#18 ] ( main:2 [ main::line1_i#6 main::line1_pos#6 cur_line#18 ] ) always clobbers reg byte a +Statement [14] (word) main::line1_pos#1 ← (word) main::line1_pos#6 + (const byte) main::line1_xadd#0 [ main::line1_i#6 cur_line#18 main::line1_pos#1 ] ( main:2 [ main::line1_i#6 cur_line#18 main::line1_pos#1 ] ) always clobbers reg byte a +Statement [15] (byte*) cur_line#1 ← (byte*) cur_line#18 + (byte) $28 [ main::line1_i#6 main::line1_pos#1 cur_line#1 ] ( main:2 [ main::line1_i#6 main::line1_pos#1 cur_line#1 ] ) always clobbers reg byte a +Statement [21] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#6 [ main::line2_i#6 main::line2_pos#6 cur_line#22 main::plot2_xpos#0 ] ( main:2 [ main::line2_i#6 main::line2_pos#6 cur_line#22 main::plot2_xpos#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ main::line2_i#6 main::line2_i#1 ] +Statement [22] *((byte*) cur_line#22 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 [ main::line2_i#6 main::line2_pos#6 cur_line#22 ] ( main:2 [ main::line2_i#6 main::line2_pos#6 cur_line#22 ] ) always clobbers reg byte a +Statement [23] (word) main::line2_pos#1 ← (word) main::line2_pos#6 + (const byte) main::line2_xadd#0 [ main::line2_i#6 cur_line#22 main::line2_pos#1 ] ( main:2 [ main::line2_i#6 cur_line#22 main::line2_pos#1 ] ) always clobbers reg byte a +Statement [24] (byte*) cur_line#10 ← (byte*) cur_line#22 + (byte) $28 [ main::line2_i#6 main::line2_pos#1 cur_line#10 ] ( main:2 [ main::line2_i#6 main::line2_pos#1 cur_line#10 ] ) always clobbers reg byte a +Statement [6] *((byte*) main::sc#4) ← (byte) ' ' [ main::sc#4 ] ( main:2 [ main::sc#4 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a +Statement [12] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#6 [ main::line1_i#6 main::line1_pos#6 cur_line#18 main::plot1_xpos#0 ] ( main:2 [ main::line1_i#6 main::line1_pos#6 cur_line#18 main::plot1_xpos#0 ] ) always clobbers reg byte a +Statement [13] *((byte*) cur_line#18 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 [ main::line1_i#6 main::line1_pos#6 cur_line#18 ] ( main:2 [ main::line1_i#6 main::line1_pos#6 cur_line#18 ] ) always clobbers reg byte a +Statement [14] (word) main::line1_pos#1 ← (word) main::line1_pos#6 + (const byte) main::line1_xadd#0 [ main::line1_i#6 cur_line#18 main::line1_pos#1 ] ( main:2 [ main::line1_i#6 cur_line#18 main::line1_pos#1 ] ) always clobbers reg byte a +Statement [15] (byte*) cur_line#1 ← (byte*) cur_line#18 + (byte) $28 [ main::line1_i#6 main::line1_pos#1 cur_line#1 ] ( main:2 [ main::line1_i#6 main::line1_pos#1 cur_line#1 ] ) always clobbers reg byte a +Statement [21] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#6 [ main::line2_i#6 main::line2_pos#6 cur_line#22 main::plot2_xpos#0 ] ( main:2 [ main::line2_i#6 main::line2_pos#6 cur_line#22 main::plot2_xpos#0 ] ) always clobbers reg byte a +Statement [22] *((byte*) cur_line#22 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 [ main::line2_i#6 main::line2_pos#6 cur_line#22 ] ( main:2 [ main::line2_i#6 main::line2_pos#6 cur_line#22 ] ) always clobbers reg byte a +Statement [23] (word) main::line2_pos#1 ← (word) main::line2_pos#6 + (const byte) main::line2_xadd#0 [ main::line2_i#6 cur_line#22 main::line2_pos#1 ] ( main:2 [ main::line2_i#6 cur_line#22 main::line2_pos#1 ] ) always clobbers reg byte a +Statement [24] (byte*) cur_line#10 ← (byte*) cur_line#22 + (byte) $28 [ main::line2_i#6 main::line2_pos#1 cur_line#10 ] ( main:2 [ main::line2_i#6 main::line2_pos#1 cur_line#10 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] : zp ZP_WORD:2 , +Potential registers zp ZP_BYTE:4 [ main::line1_i#6 main::line1_i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:5 [ main::line1_pos#6 main::line1_pos#1 ] : zp ZP_WORD:5 , +Potential registers zp ZP_WORD:7 [ cur_line#18 cur_line#1 ] : zp ZP_WORD:7 , +Potential registers zp ZP_BYTE:9 [ main::line2_i#6 main::line2_i#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:10 [ main::line2_pos#6 main::line2_pos#1 ] : zp ZP_WORD:10 , +Potential registers zp ZP_WORD:12 [ cur_line#22 cur_line#10 ] : zp ZP_WORD:12 , +Potential registers zp ZP_BYTE:14 [ main::plot1_xpos#0 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:15 [ main::plot2_xpos#0 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 36.67: zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] 27.5: zp ZP_BYTE:4 [ main::line1_i#2 main::line1_i#1 ] 27.5: zp ZP_BYTE:9 [ main::line2_i#2 main::line2_i#1 ] 22: zp ZP_BYTE:14 [ main::plot2_xpos#0 ] 22: zp ZP_BYTE:15 [ main::plot1_xpos#0 ] 15.58: zp ZP_WORD:5 [ main::line1_pos#2 main::line1_pos#1 ] 15.58: zp ZP_WORD:10 [ main::line2_pos#2 main::line2_pos#1 ] -Uplift Scope [] 17.6: zp ZP_WORD:7 [ cur_line#13 cur_line#1 ] 17.6: zp ZP_WORD:12 [ cur_line#10 cur_line#3 ] +Uplift Scope [main] 33: zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] 22: zp ZP_BYTE:14 [ main::plot1_xpos#0 ] 22: zp ZP_BYTE:15 [ main::plot2_xpos#0 ] 20.9: zp ZP_BYTE:4 [ main::line1_i#6 main::line1_i#1 ] 20.9: zp ZP_BYTE:9 [ main::line2_i#6 main::line2_i#1 ] 16.5: zp ZP_WORD:5 [ main::line1_pos#6 main::line1_pos#1 ] 16.5: zp ZP_WORD:10 [ main::line2_pos#6 main::line2_pos#1 ] +Uplift Scope [] 15.58: zp ZP_WORD:7 [ cur_line#18 cur_line#1 ] 15.58: zp ZP_WORD:12 [ cur_line#22 cur_line#10 ] -Uplifting [main] best 2384 combination zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] reg byte x [ main::line1_i#2 main::line1_i#1 ] reg byte x [ main::line2_i#2 main::line2_i#1 ] reg byte a [ main::plot2_xpos#0 ] reg byte a [ main::plot1_xpos#0 ] zp ZP_WORD:5 [ main::line1_pos#2 main::line1_pos#1 ] zp ZP_WORD:10 [ main::line2_pos#2 main::line2_pos#1 ] +Uplifting [main] best 2480 combination zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] reg byte a [ main::plot1_xpos#0 ] reg byte a [ main::plot2_xpos#0 ] reg byte x [ main::line1_i#6 main::line1_i#1 ] reg byte x [ main::line2_i#6 main::line2_i#1 ] zp ZP_WORD:5 [ main::line1_pos#6 main::line1_pos#1 ] zp ZP_WORD:10 [ main::line2_pos#6 main::line2_pos#1 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [] best 2384 combination zp ZP_WORD:7 [ cur_line#13 cur_line#1 ] zp ZP_WORD:12 [ cur_line#10 cur_line#3 ] -Coalescing zero page register [ zp ZP_WORD:7 [ cur_line#13 cur_line#1 ] ] with [ zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] ] -Coalescing zero page register [ zp ZP_WORD:12 [ cur_line#10 cur_line#3 ] ] with [ zp ZP_WORD:5 [ main::line1_pos#2 main::line1_pos#1 ] ] -Allocated (was zp ZP_WORD:7) zp ZP_WORD:2 [ cur_line#13 cur_line#1 main::sc#2 main::sc#1 ] -Allocated (was zp ZP_WORD:10) zp ZP_WORD:4 [ main::line2_pos#2 main::line2_pos#1 ] -Allocated (was zp ZP_WORD:12) zp ZP_WORD:6 [ cur_line#10 cur_line#3 main::line1_pos#2 main::line1_pos#1 ] +Uplifting [] best 2480 combination zp ZP_WORD:7 [ cur_line#18 cur_line#1 ] zp ZP_WORD:12 [ cur_line#22 cur_line#10 ] +Coalescing zero page register [ zp ZP_WORD:7 [ cur_line#18 cur_line#1 ] ] with [ zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] ] +Coalescing zero page register [ zp ZP_WORD:12 [ cur_line#22 cur_line#10 ] ] with [ zp ZP_WORD:5 [ main::line1_pos#6 main::line1_pos#1 ] ] +Allocated (was zp ZP_WORD:7) zp ZP_WORD:2 [ cur_line#18 cur_line#1 main::sc#4 main::sc#1 ] +Allocated (was zp ZP_WORD:10) zp ZP_WORD:4 [ main::line2_pos#6 main::line2_pos#1 ] +Allocated (was zp ZP_WORD:12) zp ZP_WORD:6 [ cur_line#22 cur_line#10 main::line1_pos#6 main::line1_pos#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -930,8 +990,8 @@ ASSEMBLER BEFORE OPTIMIZATION .pc = $80d "Program" // Global Constants & labels .label cur_line = 2 - .label cur_line_3 = 6 .label cur_line_10 = 6 + .label cur_line_22 = 6 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -961,133 +1021,87 @@ main: { .label sc = 2 .label line1_pos = 6 .label line2_pos = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::sc#2 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::sc#4 = (byte*) 1024 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$400 sta sc lda #>$400 sta sc+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((byte*) main::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + // [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: jmp b1 // main::@1 b1: - // [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 + // [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 lda sc+1 cmp #>$400+$3e8 - bcc b2 + bcc b2_from_b1 bne !+ lda sc cmp #<$400+$3e8 - bcc b2 + bcc b2_from_b1 !: - // [7] phi from main::@1 to main::line1 [phi:main::@1->main::line1] + // [9] phi from main::@1 to main::line1 [phi:main::@1->main::line1] line1_from_b1: jmp line1 // main::line1 line1: - // [8] phi from main::line1 to main::line1_@1 [phi:main::line1->main::line1_@1] - line1_b1_from_line1: - // [8] phi (byte*) cur_line#13 = (byte*) 1024 [phi:main::line1->main::line1_@1#0] -- pbuz1=pbuc1 + // [10] phi from main::line1 to main::line1_1 [phi:main::line1->main::line1_1] + line1_1_from_line1: + jmp line1_1 + // main::line1_1 + line1_1: + // [11] phi from main::line1_1 to main::line1_@2 [phi:main::line1_1->main::line1_@2] + line1_b2_from_line1_1: + // [11] phi (byte*) cur_line#18 = (byte*) 1024 [phi:main::line1_1->main::line1_@2#0] -- pbuz1=pbuc1 lda #<$400 sta cur_line lda #>$400 sta cur_line+1 - // [8] phi (word) main::line1_pos#2 = (const byte) main::line1_xpos#0*(word) $100 [phi:main::line1->main::line1_@1#1] -- vwuz1=vwuc1 + // [11] phi (word) main::line1_pos#6 = (const byte) main::line1_xpos#0*(word) $100 [phi:main::line1_1->main::line1_@2#1] -- vwuz1=vwuc1 lda #line1_xpos*$100 sta line1_pos+1 - // [8] phi (byte) main::line1_i#2 = (byte) 0 [phi:main::line1->main::line1_@1#2] -- vbuxx=vbuc1 + // [11] phi (byte) main::line1_i#6 = (byte) 0 [phi:main::line1_1->main::line1_@2#2] -- vbuxx=vbuc1 ldx #0 - jmp line1_b1 - // main::line1_@1 - line1_b1: - // [9] if((byte) main::line1_i#2<(const byte) main::line1_ysize#0) goto main::line1_@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #line1_ysize - bcc line1_b2 - // [10] phi from main::line1_@1 to main::line2 [phi:main::line1_@1->main::line2] - line2_from_line1_b1: - jmp line2 - // main::line2 - line2: - // [11] phi from main::line2 to main::line2_@1 [phi:main::line2->main::line2_@1] - line2_b1_from_line2: - // [11] phi (byte*) cur_line#10 = (byte*) 1024 [phi:main::line2->main::line2_@1#0] -- pbuz1=pbuc1 - lda #<$400 - sta cur_line_10 - lda #>$400 - sta cur_line_10+1 - // [11] phi (word) main::line2_pos#2 = (const byte) main::line2_xpos#0*(word) $100 [phi:main::line2->main::line2_@1#1] -- vwuz1=vwuc1 - lda #line2_xpos*$100 - sta line2_pos+1 - // [11] phi (byte) main::line2_i#2 = (byte) 0 [phi:main::line2->main::line2_@1#2] -- vbuxx=vbuc1 - ldx #0 - jmp line2_b1 - // main::line2_@1 - line2_b1: - // [12] if((byte) main::line2_i#2<(const byte) main::line2_ysize#0) goto main::line2_@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #line2_ysize - bcc line2_b2 - jmp breturn - // main::@return - breturn: - // [13] return - rts - // main::line2_@2 - line2_b2: - // [14] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#2 -- vbuaa=_hi_vwuz1 - lda line2_pos+1 - jmp plot2 - // main::plot2 - plot2: - // [15] *((byte*) cur_line#10 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 -- pbuz1_derefidx_vbuaa=vbuc1 - tay - lda #line2_ch - sta (cur_line_10),y - jmp b4 - // main::@4 - b4: - // [16] (word) main::line2_pos#1 ← (word) main::line2_pos#2 + (const byte) main::line2_xadd#0 -- vwuz1=vwuz1_plus_vbuc1 - lda #line2_xadd - clc - adc line2_pos - sta line2_pos - bcc !+ - inc line2_pos+1 - !: - // [17] (byte*) cur_line#3 ← (byte*) cur_line#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc cur_line_3 - sta cur_line_3 - bcc !+ - inc cur_line_3+1 - !: - // [18] (byte) main::line2_i#1 ← ++ (byte) main::line2_i#2 -- vbuxx=_inc_vbuxx - inx - // [11] phi from main::@4 to main::line2_@1 [phi:main::@4->main::line2_@1] - line2_b1_from_b4: - // [11] phi (byte*) cur_line#10 = (byte*) cur_line#3 [phi:main::@4->main::line2_@1#0] -- register_copy - // [11] phi (word) main::line2_pos#2 = (word) main::line2_pos#1 [phi:main::@4->main::line2_@1#1] -- register_copy - // [11] phi (byte) main::line2_i#2 = (byte) main::line2_i#1 [phi:main::@4->main::line2_@1#2] -- register_copy - jmp line2_b1 + jmp line1_b2 + // [11] phi from main::line1_@1 to main::line1_@2 [phi:main::line1_@1->main::line1_@2] + line1_b2_from_line1_b1: + // [11] phi (byte*) cur_line#18 = (byte*) cur_line#1 [phi:main::line1_@1->main::line1_@2#0] -- register_copy + // [11] phi (word) main::line1_pos#6 = (word) main::line1_pos#1 [phi:main::line1_@1->main::line1_@2#1] -- register_copy + // [11] phi (byte) main::line1_i#6 = (byte) main::line1_i#1 [phi:main::line1_@1->main::line1_@2#2] -- register_copy + jmp line1_b2 // main::line1_@2 line1_b2: - // [19] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#2 -- vbuaa=_hi_vwuz1 + // [12] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#6 -- vbuaa=_hi_vwuz1 lda line1_pos+1 jmp plot1 // main::plot1 plot1: - // [20] *((byte*) cur_line#13 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 -- pbuz1_derefidx_vbuaa=vbuc1 + // [13] *((byte*) cur_line#18 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 -- pbuz1_derefidx_vbuaa=vbuc1 tay lda #line1_ch sta (cur_line),y jmp b3 // main::@3 b3: - // [21] (word) main::line1_pos#1 ← (word) main::line1_pos#2 + (const byte) main::line1_xadd#0 -- vwuz1=vwuz1_plus_vbuc1 + // [14] (word) main::line1_pos#1 ← (word) main::line1_pos#6 + (const byte) main::line1_xadd#0 -- vwuz1=vwuz1_plus_vbuc1 lda #line1_xadd clc adc line1_pos @@ -1095,7 +1109,7 @@ main: { bcc !+ inc line1_pos+1 !: - // [22] (byte*) cur_line#1 ← (byte*) cur_line#13 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [15] (byte*) cur_line#1 ← (byte*) cur_line#18 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc cur_line @@ -1103,71 +1117,150 @@ main: { bcc !+ inc cur_line+1 !: - // [23] (byte) main::line1_i#1 ← ++ (byte) main::line1_i#2 -- vbuxx=_inc_vbuxx + // [16] (byte) main::line1_i#1 ← ++ (byte) main::line1_i#6 -- vbuxx=_inc_vbuxx inx - // [8] phi from main::@3 to main::line1_@1 [phi:main::@3->main::line1_@1] - line1_b1_from_b3: - // [8] phi (byte*) cur_line#13 = (byte*) cur_line#1 [phi:main::@3->main::line1_@1#0] -- register_copy - // [8] phi (word) main::line1_pos#2 = (word) main::line1_pos#1 [phi:main::@3->main::line1_@1#1] -- register_copy - // [8] phi (byte) main::line1_i#2 = (byte) main::line1_i#1 [phi:main::@3->main::line1_@1#2] -- register_copy jmp line1_b1 - // main::@2 - b2: - // [24] *((byte*) main::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // [25] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 + // main::line1_@1 + line1_b1: + // [17] if((byte) main::line1_i#1<(const byte) main::line1_ysize#0) goto main::line1_@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #line1_ysize + bcc line1_b2_from_line1_b1 + // [18] phi from main::line1_@1 to main::line2 [phi:main::line1_@1->main::line2] + line2_from_line1_b1: + jmp line2 + // main::line2 + line2: + // [19] phi from main::line2 to main::line2_1 [phi:main::line2->main::line2_1] + line2_1_from_line2: + jmp line2_1 + // main::line2_1 + line2_1: + // [20] phi from main::line2_1 to main::line2_@2 [phi:main::line2_1->main::line2_@2] + line2_b2_from_line2_1: + // [20] phi (byte*) cur_line#22 = (byte*) 1024 [phi:main::line2_1->main::line2_@2#0] -- pbuz1=pbuc1 + lda #<$400 + sta cur_line_22 + lda #>$400 + sta cur_line_22+1 + // [20] phi (word) main::line2_pos#6 = (const byte) main::line2_xpos#0*(word) $100 [phi:main::line2_1->main::line2_@2#1] -- vwuz1=vwuc1 + lda #line2_xpos*$100 + sta line2_pos+1 + // [20] phi (byte) main::line2_i#6 = (byte) 0 [phi:main::line2_1->main::line2_@2#2] -- vbuxx=vbuc1 + ldx #0 + jmp line2_b2 + // [20] phi from main::line2_@1 to main::line2_@2 [phi:main::line2_@1->main::line2_@2] + line2_b2_from_line2_b1: + // [20] phi (byte*) cur_line#22 = (byte*) cur_line#10 [phi:main::line2_@1->main::line2_@2#0] -- register_copy + // [20] phi (word) main::line2_pos#6 = (word) main::line2_pos#1 [phi:main::line2_@1->main::line2_@2#1] -- register_copy + // [20] phi (byte) main::line2_i#6 = (byte) main::line2_i#1 [phi:main::line2_@1->main::line2_@2#2] -- register_copy + jmp line2_b2 + // main::line2_@2 + line2_b2: + // [21] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#6 -- vbuaa=_hi_vwuz1 + lda line2_pos+1 + jmp plot2 + // main::plot2 + plot2: + // [22] *((byte*) cur_line#22 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 -- pbuz1_derefidx_vbuaa=vbuc1 + tay + lda #line2_ch + sta (cur_line_22),y + jmp b4 + // main::@4 + b4: + // [23] (word) main::line2_pos#1 ← (word) main::line2_pos#6 + (const byte) main::line2_xadd#0 -- vwuz1=vwuz1_plus_vbuc1 + lda #line2_xadd + clc + adc line2_pos + sta line2_pos + bcc !+ + inc line2_pos+1 !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 + // [24] (byte*) cur_line#10 ← (byte*) cur_line#22 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc cur_line_10 + sta cur_line_10 + bcc !+ + inc cur_line_10+1 + !: + // [25] (byte) main::line2_i#1 ← ++ (byte) main::line2_i#6 -- vbuxx=_inc_vbuxx + inx + jmp line2_b1 + // main::line2_@1 + line2_b1: + // [26] if((byte) main::line2_i#1<(const byte) main::line2_ysize#0) goto main::line2_@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #line2_ysize + bcc line2_b2_from_line2_b1 + jmp breturn + // main::@return + breturn: + // [27] return + rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp line1 -Removing instruction jmp line1_b1 -Removing instruction jmp line2 -Removing instruction jmp line2_b1 -Removing instruction jmp breturn -Removing instruction jmp plot2 -Removing instruction jmp b4 +Removing instruction jmp line1_1 +Removing instruction jmp line1_b2 Removing instruction jmp plot1 Removing instruction jmp b3 +Removing instruction jmp line1_b1 +Removing instruction jmp line2 +Removing instruction jmp line2_1 +Removing instruction jmp line2_b2 +Removing instruction jmp plot2 +Removing instruction jmp b4 +Removing instruction jmp line2_b1 +Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label line1_b2_from_line1_b1 with line1_b2 +Replacing label line2_b2_from_line2_b1 with line2_b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Removing instruction line1_from_b1: -Removing instruction line1_b1_from_line1: +Removing instruction line1_1_from_line1: +Removing instruction line1_1: +Removing instruction line1_b2_from_line1_1: +Removing instruction line1_b2_from_line1_b1: Removing instruction line2_from_line1_b1: -Removing instruction line2_b1_from_line2: +Removing instruction line2_1_from_line2: +Removing instruction line2_1: +Removing instruction line2_b2_from_line2_1: +Removing instruction line2_b2_from_line2_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction line1: -Removing instruction line2: -Removing instruction breturn: -Removing instruction plot2: -Removing instruction b4: -Removing instruction line2_b1_from_b4: Removing instruction plot1: Removing instruction b3: -Removing instruction line1_b1_from_b3: -Removing instruction b1_from_b2: +Removing instruction line1_b1: +Removing instruction line2: +Removing instruction plot2: +Removing instruction b4: +Removing instruction line2_b1: +Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Removing instruction jmp line1_b2 +Removing instruction jmp line2_b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -1176,10 +1269,10 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (byte*) cur_line -(byte*) cur_line#1 cur_line zp ZP_WORD:2 11.0 -(byte*) cur_line#10 cur_line#10 zp ZP_WORD:6 6.6000000000000005 -(byte*) cur_line#13 cur_line zp ZP_WORD:2 6.6000000000000005 -(byte*) cur_line#3 cur_line#3 zp ZP_WORD:6 11.0 +(byte*) cur_line#1 cur_line zp ZP_WORD:2 7.333333333333333 +(byte*) cur_line#10 cur_line#10 zp ZP_WORD:6 7.333333333333333 +(byte*) cur_line#18 cur_line zp ZP_WORD:2 8.25 +(byte*) cur_line#22 cur_line#22 zp ZP_WORD:6 8.25 (void()) main() (label) main::@1 (label) main::@2 @@ -1189,16 +1282,17 @@ FINAL SYMBOL TABLE (label) main::line1 (bool~) main::line1_$0 (byte~) main::line1_$1 +(label) main::line1_1 (label) main::line1_@1 (label) main::line1_@2 (byte) main::line1_ch (const byte) main::line1_ch#0 line1_ch = (byte) '*' (byte) main::line1_i -(byte) main::line1_i#1 reg byte x 22.0 -(byte) main::line1_i#2 reg byte x 5.5 +(byte) main::line1_i#1 reg byte x 16.5 +(byte) main::line1_i#6 reg byte x 4.4 (word) main::line1_pos -(word) main::line1_pos#1 line1_pos zp ZP_WORD:6 7.333333333333333 -(word) main::line1_pos#2 line1_pos zp ZP_WORD:6 8.25 +(word) main::line1_pos#1 line1_pos zp ZP_WORD:6 5.5 +(word) main::line1_pos#6 line1_pos zp ZP_WORD:6 11.0 (byte) main::line1_xadd (const byte) main::line1_xadd#0 line1_xadd = (byte) $40 (byte) main::line1_xpos @@ -1208,16 +1302,17 @@ FINAL SYMBOL TABLE (label) main::line2 (bool~) main::line2_$0 (byte~) main::line2_$1 +(label) main::line2_1 (label) main::line2_@1 (label) main::line2_@2 (byte) main::line2_ch (const byte) main::line2_ch#0 line2_ch = (byte) '.' (byte) main::line2_i -(byte) main::line2_i#1 reg byte x 22.0 -(byte) main::line2_i#2 reg byte x 5.5 +(byte) main::line2_i#1 reg byte x 16.5 +(byte) main::line2_i#6 reg byte x 4.4 (word) main::line2_pos -(word) main::line2_pos#1 line2_pos zp ZP_WORD:4 7.333333333333333 -(word) main::line2_pos#2 line2_pos zp ZP_WORD:4 8.25 +(word) main::line2_pos#1 line2_pos zp ZP_WORD:4 5.5 +(word) main::line2_pos#6 line2_pos zp ZP_WORD:4 11.0 (byte) main::line2_xadd (const byte) main::line2_xadd#0 line2_xadd = (byte) $80 (byte) main::line2_xpos @@ -1235,20 +1330,20 @@ FINAL SYMBOL TABLE (byte) main::plot2_xpos (byte) main::plot2_xpos#0 reg byte a 22.0 (byte*) main::sc -(byte*) main::sc#1 sc zp ZP_WORD:2 22.0 -(byte*) main::sc#2 sc zp ZP_WORD:2 14.666666666666666 +(byte*) main::sc#1 sc zp ZP_WORD:2 16.5 +(byte*) main::sc#4 sc zp ZP_WORD:2 16.5 -reg byte x [ main::line1_i#2 main::line1_i#1 ] -zp ZP_WORD:2 [ cur_line#13 cur_line#1 main::sc#2 main::sc#1 ] -reg byte x [ main::line2_i#2 main::line2_i#1 ] -zp ZP_WORD:4 [ main::line2_pos#2 main::line2_pos#1 ] -zp ZP_WORD:6 [ cur_line#10 cur_line#3 main::line1_pos#2 main::line1_pos#1 ] -reg byte a [ main::plot2_xpos#0 ] +reg byte x [ main::line1_i#6 main::line1_i#1 ] +zp ZP_WORD:2 [ cur_line#18 cur_line#1 main::sc#4 main::sc#1 ] +reg byte x [ main::line2_i#6 main::line2_i#1 ] +zp ZP_WORD:4 [ main::line2_pos#6 main::line2_pos#1 ] +zp ZP_WORD:6 [ cur_line#22 cur_line#10 main::line1_pos#6 main::line1_pos#1 ] reg byte a [ main::plot1_xpos#0 ] +reg byte a [ main::plot2_xpos#0 ] FINAL ASSEMBLER -Score: 2126 +Score: 2036 // File Comments // Inline functions in two levels @@ -1258,8 +1353,8 @@ Score: 2126 .pc = $80d "Program" // Global Constants & labels .label cur_line = 2 - .label cur_line_3 = 6 .label cur_line_10 = 6 + .label cur_line_22 = 6 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -1280,16 +1375,29 @@ main: { .label sc = 2 .label line1_pos = 6 .label line2_pos = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte*) main::sc#2 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte*) main::sc#4 = (byte*) 1024 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$400 sta sc lda #>$400 sta sc+1 - // main::@1 - b1: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // *sc = ' ' + // [6] *((byte*) main::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y // for(byte* sc = $400;sc<$400+1000;sc++) - // [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 + // [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + // main::@1 + // [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 lda sc+1 cmp #>$400+$3e8 bcc b2 @@ -1298,104 +1406,41 @@ main: { cmp #<$400+$3e8 bcc b2 !: - // [7] phi from main::@1 to main::line1 [phi:main::@1->main::line1] + // [9] phi from main::@1 to main::line1 [phi:main::@1->main::line1] // main::line1 - // [8] phi from main::line1 to main::line1_@1 [phi:main::line1->main::line1_@1] - // [8] phi (byte*) cur_line#13 = (byte*) 1024 [phi:main::line1->main::line1_@1#0] -- pbuz1=pbuc1 + // [10] phi from main::line1 to main::line1_1 [phi:main::line1->main::line1_1] + // main::line1_1 + // [11] phi from main::line1_1 to main::line1_@2 [phi:main::line1_1->main::line1_@2] + // [11] phi (byte*) cur_line#18 = (byte*) 1024 [phi:main::line1_1->main::line1_@2#0] -- pbuz1=pbuc1 lda #<$400 sta cur_line lda #>$400 sta cur_line+1 - // [8] phi (word) main::line1_pos#2 = (const byte) main::line1_xpos#0*(word) $100 [phi:main::line1->main::line1_@1#1] -- vwuz1=vwuc1 + // [11] phi (word) main::line1_pos#6 = (const byte) main::line1_xpos#0*(word) $100 [phi:main::line1_1->main::line1_@2#1] -- vwuz1=vwuc1 lda #line1_xpos*$100 sta line1_pos+1 - // [8] phi (byte) main::line1_i#2 = (byte) 0 [phi:main::line1->main::line1_@1#2] -- vbuxx=vbuc1 + // [11] phi (byte) main::line1_i#6 = (byte) 0 [phi:main::line1_1->main::line1_@2#2] -- vbuxx=vbuc1 ldx #0 - // main::line1_@1 - line1_b1: - // for( byte i=0;imain::line2] - // main::line2 - // [11] phi from main::line2 to main::line2_@1 [phi:main::line2->main::line2_@1] - // [11] phi (byte*) cur_line#10 = (byte*) 1024 [phi:main::line2->main::line2_@1#0] -- pbuz1=pbuc1 - lda #<$400 - sta cur_line_10 - lda #>$400 - sta cur_line_10+1 - // [11] phi (word) main::line2_pos#2 = (const byte) main::line2_xpos#0*(word) $100 [phi:main::line2->main::line2_@1#1] -- vwuz1=vwuc1 - lda #line2_xpos*$100 - sta line2_pos+1 - // [11] phi (byte) main::line2_i#2 = (byte) 0 [phi:main::line2->main::line2_@1#2] -- vbuxx=vbuc1 - ldx #0 - // main::line2_@1 - line2_b1: - // for( byte i=0;ipos, ch) - // [14] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#2 -- vbuaa=_hi_vwuz1 - lda line2_pos+1 - // main::plot2 - // *(cur_line+xpos) = ch - // [15] *((byte*) cur_line#10 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 -- pbuz1_derefidx_vbuaa=vbuc1 - tay - lda #line2_ch - sta (cur_line_10),y - // main::@4 - // pos += xadd - // [16] (word) main::line2_pos#1 ← (word) main::line2_pos#2 + (const byte) main::line2_xadd#0 -- vwuz1=vwuz1_plus_vbuc1 - lda #line2_xadd - clc - adc line2_pos - sta line2_pos - bcc !+ - inc line2_pos+1 - !: - // cur_line += 40 - // [17] (byte*) cur_line#3 ← (byte*) cur_line#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc cur_line_3 - sta cur_line_3 - bcc !+ - inc cur_line_3+1 - !: - // for( byte i=0;imain::line2_@1] - // [11] phi (byte*) cur_line#10 = (byte*) cur_line#3 [phi:main::@4->main::line2_@1#0] -- register_copy - // [11] phi (word) main::line2_pos#2 = (word) main::line2_pos#1 [phi:main::@4->main::line2_@1#1] -- register_copy - // [11] phi (byte) main::line2_i#2 = (byte) main::line2_i#1 [phi:main::@4->main::line2_@1#2] -- register_copy - jmp line2_b1 + // [11] phi from main::line1_@1 to main::line1_@2 [phi:main::line1_@1->main::line1_@2] + // [11] phi (byte*) cur_line#18 = (byte*) cur_line#1 [phi:main::line1_@1->main::line1_@2#0] -- register_copy + // [11] phi (word) main::line1_pos#6 = (word) main::line1_pos#1 [phi:main::line1_@1->main::line1_@2#1] -- register_copy + // [11] phi (byte) main::line1_i#6 = (byte) main::line1_i#1 [phi:main::line1_@1->main::line1_@2#2] -- register_copy // main::line1_@2 line1_b2: // plot(>pos, ch) - // [19] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#2 -- vbuaa=_hi_vwuz1 + // [12] (byte) main::plot1_xpos#0 ← > (word) main::line1_pos#6 -- vbuaa=_hi_vwuz1 lda line1_pos+1 // main::plot1 // *(cur_line+xpos) = ch - // [20] *((byte*) cur_line#13 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 -- pbuz1_derefidx_vbuaa=vbuc1 + // [13] *((byte*) cur_line#18 + (byte) main::plot1_xpos#0) ← (const byte) main::line1_ch#0 -- pbuz1_derefidx_vbuaa=vbuc1 tay lda #line1_ch sta (cur_line),y // main::@3 // pos += xadd - // [21] (word) main::line1_pos#1 ← (word) main::line1_pos#2 + (const byte) main::line1_xadd#0 -- vwuz1=vwuz1_plus_vbuc1 + // [14] (word) main::line1_pos#1 ← (word) main::line1_pos#6 + (const byte) main::line1_xadd#0 -- vwuz1=vwuz1_plus_vbuc1 lda #line1_xadd clc adc line1_pos @@ -1404,7 +1449,7 @@ main: { inc line1_pos+1 !: // cur_line += 40 - // [22] (byte*) cur_line#1 ← (byte*) cur_line#13 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [15] (byte*) cur_line#1 ← (byte*) cur_line#18 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc cur_line @@ -1413,29 +1458,74 @@ main: { inc cur_line+1 !: // for( byte i=0;imain::line1_@1] - // [8] phi (byte*) cur_line#13 = (byte*) cur_line#1 [phi:main::@3->main::line1_@1#0] -- register_copy - // [8] phi (word) main::line1_pos#2 = (word) main::line1_pos#1 [phi:main::@3->main::line1_@1#1] -- register_copy - // [8] phi (byte) main::line1_i#2 = (byte) main::line1_i#1 [phi:main::@3->main::line1_@1#2] -- register_copy - jmp line1_b1 - // main::@2 - b2: - // *sc = ' ' - // [24] *((byte*) main::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // for(byte* sc = $400;sc<$400+1000;sc++) - // [25] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 + // main::line1_@1 + // [17] if((byte) main::line1_i#1<(const byte) main::line1_ysize#0) goto main::line1_@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #line1_ysize + bcc line1_b2 + // [18] phi from main::line1_@1 to main::line2 [phi:main::line1_@1->main::line2] + // main::line2 + // [19] phi from main::line2 to main::line2_1 [phi:main::line2->main::line2_1] + // main::line2_1 + // [20] phi from main::line2_1 to main::line2_@2 [phi:main::line2_1->main::line2_@2] + // [20] phi (byte*) cur_line#22 = (byte*) 1024 [phi:main::line2_1->main::line2_@2#0] -- pbuz1=pbuc1 + lda #<$400 + sta cur_line_22 + lda #>$400 + sta cur_line_22+1 + // [20] phi (word) main::line2_pos#6 = (const byte) main::line2_xpos#0*(word) $100 [phi:main::line2_1->main::line2_@2#1] -- vwuz1=vwuc1 + lda #line2_xpos*$100 + sta line2_pos+1 + // [20] phi (byte) main::line2_i#6 = (byte) 0 [phi:main::line2_1->main::line2_@2#2] -- vbuxx=vbuc1 + ldx #0 + // [20] phi from main::line2_@1 to main::line2_@2 [phi:main::line2_@1->main::line2_@2] + // [20] phi (byte*) cur_line#22 = (byte*) cur_line#10 [phi:main::line2_@1->main::line2_@2#0] -- register_copy + // [20] phi (word) main::line2_pos#6 = (word) main::line2_pos#1 [phi:main::line2_@1->main::line2_@2#1] -- register_copy + // [20] phi (byte) main::line2_i#6 = (byte) main::line2_i#1 [phi:main::line2_@1->main::line2_@2#2] -- register_copy + // main::line2_@2 + line2_b2: + // plot(>pos, ch) + // [21] (byte) main::plot2_xpos#0 ← > (word) main::line2_pos#6 -- vbuaa=_hi_vwuz1 + lda line2_pos+1 + // main::plot2 + // *(cur_line+xpos) = ch + // [22] *((byte*) cur_line#22 + (byte) main::plot2_xpos#0) ← (const byte) main::line2_ch#0 -- pbuz1_derefidx_vbuaa=vbuc1 + tay + lda #line2_ch + sta (cur_line_22),y + // main::@4 + // pos += xadd + // [23] (word) main::line2_pos#1 ← (word) main::line2_pos#6 + (const byte) main::line2_xadd#0 -- vwuz1=vwuz1_plus_vbuc1 + lda #line2_xadd + clc + adc line2_pos + sta line2_pos + bcc !+ + inc line2_pos+1 !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 + // cur_line += 40 + // [24] (byte*) cur_line#10 ← (byte*) cur_line#22 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc cur_line_10 + sta cur_line_10 + bcc !+ + inc cur_line_10+1 + !: + // for( byte i=0;iSCREEN sta s+1 - b1: + b2: + lda #' ' + ldy #0 + sta (s),y + inc s + bne !+ + inc s+1 + !: lda s+1 cmp #>SCREEN+$3e8 bcc b2 @@ -30,15 +37,6 @@ main: { jsr testUnaryOperator jsr testBinaryOperator rts - b2: - lda #' ' - ldy #0 - sta (s),y - inc s - bne !+ - inc s+1 - !: - jmp b1 } testBinaryOperator: { ldx #$28 diff --git a/src/test/ref/int-conversion.cfg b/src/test/ref/int-conversion.cfg index 1e7a8bc7a..95e1995e7 100644 --- a/src/test/ref/int-conversion.cfg +++ b/src/test/ref/int-conversion.cfg @@ -9,26 +9,26 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::s#4 ← phi( main::@1/(byte*) main::s#1 main/(const byte*) SCREEN#0 ) + [6] *((byte*) main::s#4) ← (byte) ' ' + [7] (byte*) main::s#1 ← ++ (byte*) main::s#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::s#2 ← phi( main/(const byte*) SCREEN#0 main::@2/(byte*) main::s#1 ) - [6] if((byte*) main::s#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte*) main::s#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [7] phi() - [8] call testUnaryOperator + [9] phi() + [10] call testUnaryOperator to:main::@4 main::@4: scope:[main] from main::@3 - [9] phi() - [10] call testBinaryOperator + [11] phi() + [12] call testBinaryOperator to:main::@return main::@return: scope:[main] from main::@4 - [11] return + [13] return to:@return -main::@2: scope:[main] from main::@1 - [12] *((byte*) main::s#2) ← (byte) ' ' - [13] (byte*) main::s#1 ← ++ (byte*) main::s#2 - to:main::@1 testBinaryOperator: scope:[testBinaryOperator] from main::@4 [14] phi() [15] call assertType diff --git a/src/test/ref/int-conversion.log b/src/test/ref/int-conversion.log index 2172888c6..5e36be06b 100644 --- a/src/test/ref/int-conversion.log +++ b/src/test/ref/int-conversion.log @@ -1090,6 +1090,13 @@ Constant right-side identified [1] (byte*~) main::$2 ← (const byte*) SCREEN#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) main::$2 = SCREEN#0+$3e8 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) main::s#1 = (byte*) main::s#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) main::s#5 (const byte*) main::s#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [66] if((const byte*) main::s#0<(const byte*) main::$2) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte*) main::s#0 Inlining constant with var siblings (const byte) assertType::t1#0 Inlining constant with var siblings (const byte) assertType::t2#0 @@ -1268,11 +1275,13 @@ Constant inlined assertType::t1#38 = (const byte) TYPEID_SIGNED_DWORD Constant inlined assertType::t1#37 = (const byte) TYPEID_SIGNED_DWORD Constant inlined assertType::t1#39 = (const byte) TYPEID_SIGNED_DWORD Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@9(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @5 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::@7 Adding NOP phi() at start of main::@8 @@ -1283,54 +1292,56 @@ Adding NOP phi() at start of testUnaryOperator Adding NOP phi() at start of testUnaryOperator::@6 CALL GRAPH Calls in [] to main:2 -Calls in [main] to testUnaryOperator:9 testBinaryOperator:11 -Calls in [testBinaryOperator] to assertType:18 assertType:20 assertType:22 assertType:24 assertType:26 assertType:28 assertType:31 assertType:33 assertType:35 assertType:37 assertType:39 assertType:41 assertType:44 assertType:46 assertType:48 assertType:50 assertType:52 assertType:54 assertType:56 assertType:58 assertType:60 assertType:62 assertType:64 assertType:66 assertType:69 assertType:71 assertType:73 assertType:75 assertType:77 assertType:79 assertType:82 assertType:84 assertType:86 assertType:88 assertType:90 assertType:92 -Calls in [testUnaryOperator] to assertType:103 assertType:105 assertType:107 assertType:109 assertType:111 assertType:113 +Calls in [main] to testUnaryOperator:12 testBinaryOperator:14 +Calls in [testBinaryOperator] to assertType:19 assertType:21 assertType:23 assertType:25 assertType:27 assertType:29 assertType:32 assertType:34 assertType:36 assertType:38 assertType:40 assertType:42 assertType:45 assertType:47 assertType:49 assertType:51 assertType:53 assertType:55 assertType:57 assertType:59 assertType:61 assertType:63 assertType:65 assertType:67 assertType:70 assertType:72 assertType:74 assertType:76 assertType:78 assertType:80 assertType:83 assertType:85 assertType:87 assertType:89 assertType:91 assertType:93 +Calls in [testUnaryOperator] to assertType:104 assertType:106 assertType:108 assertType:110 assertType:112 assertType:114 Created 4 initial phi equivalence classes -Coalesced [16] main::s#4 ← main::s#1 -Coalesced [19] idx#116 ← idx#108 -Coalesced (already) [21] idx#126 ← idx#108 -Coalesced (already) [23] idx#137 ← idx#108 -Coalesced (already) [25] idx#144 ← idx#108 -Coalesced (already) [27] idx#145 ← idx#108 -Coalesced [30] idx#146 ← idx#19 -Coalesced (already) [32] idx#147 ← idx#108 -Coalesced (already) [34] idx#148 ← idx#108 -Coalesced (already) [36] idx#149 ← idx#108 -Coalesced (already) [38] idx#117 ← idx#108 -Coalesced (already) [40] idx#118 ← idx#108 -Coalesced [43] idx#119 ← idx#26 -Coalesced (already) [45] idx#120 ← idx#108 -Coalesced (already) [47] idx#121 ← idx#108 -Coalesced (already) [49] idx#122 ← idx#108 -Coalesced (already) [51] idx#123 ← idx#108 -Coalesced (already) [53] idx#124 ← idx#108 -Coalesced (already) [57] idx#125 ← idx#108 -Coalesced (already) [59] idx#127 ← idx#108 -Coalesced (already) [61] idx#128 ← idx#108 -Coalesced (already) [63] idx#129 ← idx#108 -Coalesced (already) [65] idx#130 ← idx#108 -Coalesced [68] idx#131 ← idx#40 -Coalesced (already) [70] idx#132 ← idx#108 -Coalesced (already) [72] idx#133 ← idx#108 -Coalesced (already) [74] idx#134 ← idx#108 -Coalesced (already) [76] idx#135 ← idx#108 -Coalesced (already) [78] idx#136 ← idx#108 -Coalesced [81] idx#138 ← idx#47 -Coalesced (already) [83] idx#139 ← idx#108 -Coalesced (already) [85] idx#140 ← idx#108 -Coalesced (already) [87] idx#141 ← idx#108 -Coalesced (already) [89] idx#142 ← idx#108 -Coalesced (already) [91] idx#143 ← idx#108 -Coalesced (already) [104] idx#150 ← idx#108 -Coalesced (already) [106] idx#151 ← idx#108 -Coalesced (already) [108] idx#152 ← idx#108 -Coalesced (already) [110] idx#153 ← idx#108 -Coalesced (already) [112] idx#154 ← idx#108 +Coalesced [17] main::s#6 ← main::s#1 +Coalesced [20] idx#116 ← idx#108 +Coalesced (already) [22] idx#126 ← idx#108 +Coalesced (already) [24] idx#137 ← idx#108 +Coalesced (already) [26] idx#144 ← idx#108 +Coalesced (already) [28] idx#145 ← idx#108 +Coalesced [31] idx#146 ← idx#19 +Coalesced (already) [33] idx#147 ← idx#108 +Coalesced (already) [35] idx#148 ← idx#108 +Coalesced (already) [37] idx#149 ← idx#108 +Coalesced (already) [39] idx#117 ← idx#108 +Coalesced (already) [41] idx#118 ← idx#108 +Coalesced [44] idx#119 ← idx#26 +Coalesced (already) [46] idx#120 ← idx#108 +Coalesced (already) [48] idx#121 ← idx#108 +Coalesced (already) [50] idx#122 ← idx#108 +Coalesced (already) [52] idx#123 ← idx#108 +Coalesced (already) [54] idx#124 ← idx#108 +Coalesced (already) [58] idx#125 ← idx#108 +Coalesced (already) [60] idx#127 ← idx#108 +Coalesced (already) [62] idx#128 ← idx#108 +Coalesced (already) [64] idx#129 ← idx#108 +Coalesced (already) [66] idx#130 ← idx#108 +Coalesced [69] idx#131 ← idx#40 +Coalesced (already) [71] idx#132 ← idx#108 +Coalesced (already) [73] idx#133 ← idx#108 +Coalesced (already) [75] idx#134 ← idx#108 +Coalesced (already) [77] idx#135 ← idx#108 +Coalesced (already) [79] idx#136 ← idx#108 +Coalesced [82] idx#138 ← idx#47 +Coalesced (already) [84] idx#139 ← idx#108 +Coalesced (already) [86] idx#140 ← idx#108 +Coalesced (already) [88] idx#141 ← idx#108 +Coalesced (already) [90] idx#142 ← idx#108 +Coalesced (already) [92] idx#143 ← idx#108 +Coalesced (already) [105] idx#150 ← idx#108 +Coalesced (already) [107] idx#151 ← idx#108 +Coalesced (already) [109] idx#152 ← idx#108 +Coalesced (already) [111] idx#153 ← idx#108 +Coalesced (already) [113] idx#154 ← idx#108 Coalesced down to 4 phi equivalence classes Culled Empty Block (label) @5 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@8 +Culled Empty Block (label) main::@9 Culled Empty Block (label) testBinaryOperator::@36 Culled Empty Block (label) testUnaryOperator::@6 Renumbering block @4 to @1 @@ -1392,26 +1403,26 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::s#4 ← phi( main::@1/(byte*) main::s#1 main/(const byte*) SCREEN#0 ) + [6] *((byte*) main::s#4) ← (byte) ' ' + [7] (byte*) main::s#1 ← ++ (byte*) main::s#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::s#2 ← phi( main/(const byte*) SCREEN#0 main::@2/(byte*) main::s#1 ) - [6] if((byte*) main::s#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte*) main::s#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [7] phi() - [8] call testUnaryOperator + [9] phi() + [10] call testUnaryOperator to:main::@4 main::@4: scope:[main] from main::@3 - [9] phi() - [10] call testBinaryOperator + [11] phi() + [12] call testBinaryOperator to:main::@return main::@return: scope:[main] from main::@4 - [11] return + [13] return to:@return -main::@2: scope:[main] from main::@1 - [12] *((byte*) main::s#2) ← (byte) ' ' - [13] (byte*) main::s#1 ← ++ (byte*) main::s#2 - to:main::@1 testBinaryOperator: scope:[testBinaryOperator] from main::@4 [14] phi() [15] call assertType @@ -1626,22 +1637,22 @@ VARIABLE REGISTER WEIGHTS (byte) idx#47 4.0 (void()) main() (byte*) main::s -(byte*) main::s#1 22.0 -(byte*) main::s#2 14.666666666666666 +(byte*) main::s#1 16.5 +(byte*) main::s#4 16.5 (void()) testBinaryOperator() (void()) testUnaryOperator() Initial phi equivalence classes -[ main::s#2 main::s#1 ] +[ main::s#4 main::s#1 ] [ assertType::t1#42 ] [ assertType::t2#42 ] [ idx#105 idx#108 idx#26 idx#40 idx#47 idx#19 ] Complete equivalence classes -[ main::s#2 main::s#1 ] +[ main::s#4 main::s#1 ] [ assertType::t1#42 ] [ assertType::t2#42 ] [ idx#105 idx#108 idx#26 idx#40 idx#47 idx#19 ] -Allocated zp ZP_WORD:2 [ main::s#2 main::s#1 ] +Allocated zp ZP_WORD:2 [ main::s#4 main::s#1 ] Allocated zp ZP_BYTE:4 [ assertType::t1#42 ] Allocated zp ZP_BYTE:5 [ assertType::t2#42 ] Allocated zp ZP_BYTE:6 [ idx#105 idx#108 idx#26 idx#40 idx#47 idx#19 ] @@ -1685,63 +1696,64 @@ bend: // main main: { .label s = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::s#2 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::s#4 = (const byte*) SCREEN#0 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta s+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::s#4 = (byte*) main::s#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((byte*) main::s#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (s),y + // [7] (byte*) main::s#1 ← ++ (byte*) main::s#4 -- pbuz1=_inc_pbuz1 + inc s + bne !+ + inc s+1 + !: jmp b1 // main::@1 b1: - // [6] if((byte*) main::s#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_lt_pbuc1_then_la1 + // [8] if((byte*) main::s#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_lt_pbuc1_then_la1 lda s+1 cmp #>SCREEN+$3e8 - bcc b2 + bcc b2_from_b1 bne !+ lda s cmp #main::@3] + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: jmp b3 // main::@3 b3: - // [8] call testUnaryOperator + // [10] call testUnaryOperator // [94] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] testUnaryOperator_from_b3: jsr testUnaryOperator - // [9] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] b4_from_b3: jmp b4 // main::@4 b4: - // [10] call testBinaryOperator + // [12] call testBinaryOperator // [14] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] testBinaryOperator_from_b4: jsr testBinaryOperator jmp breturn // main::@return breturn: - // [11] return + // [13] return rts - // main::@2 - b2: - // [12] *((byte*) main::s#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (s),y - // [13] (byte*) main::s#1 ← ++ (byte*) main::s#2 -- pbuz1=_inc_pbuz1 - inc s - bne !+ - inc s+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // testBinaryOperator testBinaryOperator: { @@ -2471,37 +2483,37 @@ testUnaryOperator: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if((byte*) main::s#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::s#2 ] ( main:2 [ main::s#2 ] ) always clobbers reg byte a -Statement [12] *((byte*) main::s#2) ← (byte) ' ' [ main::s#2 ] ( main:2 [ main::s#2 ] ) always clobbers reg byte a reg byte y -Statement [89] *((const byte*) COLS#0 + (byte) idx#105) ← (const byte) RED#0 [ assertType::t1#42 idx#105 ] ( main:2::testBinaryOperator:10::assertType:15 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:17 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:19 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:21 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:23 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:25 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:27 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:29 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:31 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:33 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:35 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:37 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:39 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:41 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:43 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:45 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:47 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:49 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:51 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:53 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:55 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:57 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:59 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:61 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:63 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:65 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:67 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:69 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:71 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:73 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:75 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:77 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:79 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:81 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:83 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:85 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:95 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:97 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:99 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:101 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:103 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:105 [ assertType::t1#42 idx#105 ] ) always clobbers reg byte a +Statement [6] *((byte*) main::s#4) ← (byte) ' ' [ main::s#4 ] ( main:2 [ main::s#4 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::s#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::s#1 ] ( main:2 [ main::s#1 ] ) always clobbers reg byte a +Statement [89] *((const byte*) COLS#0 + (byte) idx#105) ← (const byte) RED#0 [ assertType::t1#42 idx#105 ] ( main:2::testBinaryOperator:12::assertType:15 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:17 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:19 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:21 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:23 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:25 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:27 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:29 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:31 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:33 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:35 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:37 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:39 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:41 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:43 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:45 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:47 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:49 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:51 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:53 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:55 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:57 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:59 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:61 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:63 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:65 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:67 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:69 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:71 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:73 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:75 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:77 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:79 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:81 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:83 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:85 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:95 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:97 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:99 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:101 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:103 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:105 [ assertType::t1#42 idx#105 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ assertType::t1#42 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ idx#105 idx#108 idx#26 idx#40 idx#47 idx#19 ] -Statement [90] *((const byte*) SCREEN#0 + (byte) idx#105) ← (byte) assertType::t1#42 [ idx#105 ] ( main:2::testBinaryOperator:10::assertType:15 [ idx#105 ] main:2::testBinaryOperator:10::assertType:17 [ idx#105 ] main:2::testBinaryOperator:10::assertType:19 [ idx#105 ] main:2::testBinaryOperator:10::assertType:21 [ idx#105 ] main:2::testBinaryOperator:10::assertType:23 [ idx#105 ] main:2::testBinaryOperator:10::assertType:25 [ idx#105 ] main:2::testBinaryOperator:10::assertType:27 [ idx#105 ] main:2::testBinaryOperator:10::assertType:29 [ idx#105 ] main:2::testBinaryOperator:10::assertType:31 [ idx#105 ] main:2::testBinaryOperator:10::assertType:33 [ idx#105 ] main:2::testBinaryOperator:10::assertType:35 [ idx#105 ] main:2::testBinaryOperator:10::assertType:37 [ idx#105 ] main:2::testBinaryOperator:10::assertType:39 [ idx#105 ] main:2::testBinaryOperator:10::assertType:41 [ idx#105 ] main:2::testBinaryOperator:10::assertType:43 [ idx#105 ] main:2::testBinaryOperator:10::assertType:45 [ idx#105 ] main:2::testBinaryOperator:10::assertType:47 [ idx#105 ] main:2::testBinaryOperator:10::assertType:49 [ idx#105 ] main:2::testBinaryOperator:10::assertType:51 [ idx#105 ] main:2::testBinaryOperator:10::assertType:53 [ idx#105 ] main:2::testBinaryOperator:10::assertType:55 [ idx#105 ] main:2::testBinaryOperator:10::assertType:57 [ idx#105 ] main:2::testBinaryOperator:10::assertType:59 [ idx#105 ] main:2::testBinaryOperator:10::assertType:61 [ idx#105 ] main:2::testBinaryOperator:10::assertType:63 [ idx#105 ] main:2::testBinaryOperator:10::assertType:65 [ idx#105 ] main:2::testBinaryOperator:10::assertType:67 [ idx#105 ] main:2::testBinaryOperator:10::assertType:69 [ idx#105 ] main:2::testBinaryOperator:10::assertType:71 [ idx#105 ] main:2::testBinaryOperator:10::assertType:73 [ idx#105 ] main:2::testBinaryOperator:10::assertType:75 [ idx#105 ] main:2::testBinaryOperator:10::assertType:77 [ idx#105 ] main:2::testBinaryOperator:10::assertType:79 [ idx#105 ] main:2::testBinaryOperator:10::assertType:81 [ idx#105 ] main:2::testBinaryOperator:10::assertType:83 [ idx#105 ] main:2::testBinaryOperator:10::assertType:85 [ idx#105 ] main:2::testUnaryOperator:8::assertType:95 [ idx#105 ] main:2::testUnaryOperator:8::assertType:97 [ idx#105 ] main:2::testUnaryOperator:8::assertType:99 [ idx#105 ] main:2::testUnaryOperator:8::assertType:101 [ idx#105 ] main:2::testUnaryOperator:8::assertType:103 [ idx#105 ] main:2::testUnaryOperator:8::assertType:105 [ idx#105 ] ) always clobbers reg byte a -Statement [93] *((const byte*) COLS#0 + (byte) idx#105) ← (const byte) GREEN#0 [ assertType::t1#42 idx#105 ] ( main:2::testBinaryOperator:10::assertType:15 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:17 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:19 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:21 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:23 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:25 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:27 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:29 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:31 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:33 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:35 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:37 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:39 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:41 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:43 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:45 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:47 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:49 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:51 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:53 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:55 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:57 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:59 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:61 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:63 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:65 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:67 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:69 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:71 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:73 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:75 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:77 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:79 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:81 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:83 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:85 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:95 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:97 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:99 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:101 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:103 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:105 [ assertType::t1#42 idx#105 ] ) always clobbers reg byte a -Statement [6] if((byte*) main::s#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::s#2 ] ( main:2 [ main::s#2 ] ) always clobbers reg byte a -Statement [12] *((byte*) main::s#2) ← (byte) ' ' [ main::s#2 ] ( main:2 [ main::s#2 ] ) always clobbers reg byte a reg byte y -Statement [89] *((const byte*) COLS#0 + (byte) idx#105) ← (const byte) RED#0 [ assertType::t1#42 idx#105 ] ( main:2::testBinaryOperator:10::assertType:15 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:17 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:19 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:21 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:23 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:25 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:27 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:29 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:31 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:33 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:35 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:37 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:39 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:41 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:43 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:45 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:47 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:49 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:51 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:53 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:55 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:57 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:59 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:61 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:63 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:65 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:67 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:69 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:71 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:73 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:75 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:77 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:79 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:81 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:83 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:85 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:95 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:97 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:99 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:101 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:103 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:105 [ assertType::t1#42 idx#105 ] ) always clobbers reg byte a -Statement [90] *((const byte*) SCREEN#0 + (byte) idx#105) ← (byte) assertType::t1#42 [ idx#105 ] ( main:2::testBinaryOperator:10::assertType:15 [ idx#105 ] main:2::testBinaryOperator:10::assertType:17 [ idx#105 ] main:2::testBinaryOperator:10::assertType:19 [ idx#105 ] main:2::testBinaryOperator:10::assertType:21 [ idx#105 ] main:2::testBinaryOperator:10::assertType:23 [ idx#105 ] main:2::testBinaryOperator:10::assertType:25 [ idx#105 ] main:2::testBinaryOperator:10::assertType:27 [ idx#105 ] main:2::testBinaryOperator:10::assertType:29 [ idx#105 ] main:2::testBinaryOperator:10::assertType:31 [ idx#105 ] main:2::testBinaryOperator:10::assertType:33 [ idx#105 ] main:2::testBinaryOperator:10::assertType:35 [ idx#105 ] main:2::testBinaryOperator:10::assertType:37 [ idx#105 ] main:2::testBinaryOperator:10::assertType:39 [ idx#105 ] main:2::testBinaryOperator:10::assertType:41 [ idx#105 ] main:2::testBinaryOperator:10::assertType:43 [ idx#105 ] main:2::testBinaryOperator:10::assertType:45 [ idx#105 ] main:2::testBinaryOperator:10::assertType:47 [ idx#105 ] main:2::testBinaryOperator:10::assertType:49 [ idx#105 ] main:2::testBinaryOperator:10::assertType:51 [ idx#105 ] main:2::testBinaryOperator:10::assertType:53 [ idx#105 ] main:2::testBinaryOperator:10::assertType:55 [ idx#105 ] main:2::testBinaryOperator:10::assertType:57 [ idx#105 ] main:2::testBinaryOperator:10::assertType:59 [ idx#105 ] main:2::testBinaryOperator:10::assertType:61 [ idx#105 ] main:2::testBinaryOperator:10::assertType:63 [ idx#105 ] main:2::testBinaryOperator:10::assertType:65 [ idx#105 ] main:2::testBinaryOperator:10::assertType:67 [ idx#105 ] main:2::testBinaryOperator:10::assertType:69 [ idx#105 ] main:2::testBinaryOperator:10::assertType:71 [ idx#105 ] main:2::testBinaryOperator:10::assertType:73 [ idx#105 ] main:2::testBinaryOperator:10::assertType:75 [ idx#105 ] main:2::testBinaryOperator:10::assertType:77 [ idx#105 ] main:2::testBinaryOperator:10::assertType:79 [ idx#105 ] main:2::testBinaryOperator:10::assertType:81 [ idx#105 ] main:2::testBinaryOperator:10::assertType:83 [ idx#105 ] main:2::testBinaryOperator:10::assertType:85 [ idx#105 ] main:2::testUnaryOperator:8::assertType:95 [ idx#105 ] main:2::testUnaryOperator:8::assertType:97 [ idx#105 ] main:2::testUnaryOperator:8::assertType:99 [ idx#105 ] main:2::testUnaryOperator:8::assertType:101 [ idx#105 ] main:2::testUnaryOperator:8::assertType:103 [ idx#105 ] main:2::testUnaryOperator:8::assertType:105 [ idx#105 ] ) always clobbers reg byte a -Statement [93] *((const byte*) COLS#0 + (byte) idx#105) ← (const byte) GREEN#0 [ assertType::t1#42 idx#105 ] ( main:2::testBinaryOperator:10::assertType:15 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:17 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:19 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:21 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:23 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:25 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:27 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:29 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:31 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:33 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:35 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:37 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:39 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:41 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:43 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:45 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:47 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:49 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:51 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:53 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:55 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:57 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:59 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:61 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:63 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:65 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:67 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:69 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:71 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:73 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:75 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:77 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:79 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:81 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:83 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:10::assertType:85 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:95 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:97 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:99 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:101 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:103 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:8::assertType:105 [ assertType::t1#42 idx#105 ] ) always clobbers reg byte a -Potential registers zp ZP_WORD:2 [ main::s#2 main::s#1 ] : zp ZP_WORD:2 , +Statement [90] *((const byte*) SCREEN#0 + (byte) idx#105) ← (byte) assertType::t1#42 [ idx#105 ] ( main:2::testBinaryOperator:12::assertType:15 [ idx#105 ] main:2::testBinaryOperator:12::assertType:17 [ idx#105 ] main:2::testBinaryOperator:12::assertType:19 [ idx#105 ] main:2::testBinaryOperator:12::assertType:21 [ idx#105 ] main:2::testBinaryOperator:12::assertType:23 [ idx#105 ] main:2::testBinaryOperator:12::assertType:25 [ idx#105 ] main:2::testBinaryOperator:12::assertType:27 [ idx#105 ] main:2::testBinaryOperator:12::assertType:29 [ idx#105 ] main:2::testBinaryOperator:12::assertType:31 [ idx#105 ] main:2::testBinaryOperator:12::assertType:33 [ idx#105 ] main:2::testBinaryOperator:12::assertType:35 [ idx#105 ] main:2::testBinaryOperator:12::assertType:37 [ idx#105 ] main:2::testBinaryOperator:12::assertType:39 [ idx#105 ] main:2::testBinaryOperator:12::assertType:41 [ idx#105 ] main:2::testBinaryOperator:12::assertType:43 [ idx#105 ] main:2::testBinaryOperator:12::assertType:45 [ idx#105 ] main:2::testBinaryOperator:12::assertType:47 [ idx#105 ] main:2::testBinaryOperator:12::assertType:49 [ idx#105 ] main:2::testBinaryOperator:12::assertType:51 [ idx#105 ] main:2::testBinaryOperator:12::assertType:53 [ idx#105 ] main:2::testBinaryOperator:12::assertType:55 [ idx#105 ] main:2::testBinaryOperator:12::assertType:57 [ idx#105 ] main:2::testBinaryOperator:12::assertType:59 [ idx#105 ] main:2::testBinaryOperator:12::assertType:61 [ idx#105 ] main:2::testBinaryOperator:12::assertType:63 [ idx#105 ] main:2::testBinaryOperator:12::assertType:65 [ idx#105 ] main:2::testBinaryOperator:12::assertType:67 [ idx#105 ] main:2::testBinaryOperator:12::assertType:69 [ idx#105 ] main:2::testBinaryOperator:12::assertType:71 [ idx#105 ] main:2::testBinaryOperator:12::assertType:73 [ idx#105 ] main:2::testBinaryOperator:12::assertType:75 [ idx#105 ] main:2::testBinaryOperator:12::assertType:77 [ idx#105 ] main:2::testBinaryOperator:12::assertType:79 [ idx#105 ] main:2::testBinaryOperator:12::assertType:81 [ idx#105 ] main:2::testBinaryOperator:12::assertType:83 [ idx#105 ] main:2::testBinaryOperator:12::assertType:85 [ idx#105 ] main:2::testUnaryOperator:10::assertType:95 [ idx#105 ] main:2::testUnaryOperator:10::assertType:97 [ idx#105 ] main:2::testUnaryOperator:10::assertType:99 [ idx#105 ] main:2::testUnaryOperator:10::assertType:101 [ idx#105 ] main:2::testUnaryOperator:10::assertType:103 [ idx#105 ] main:2::testUnaryOperator:10::assertType:105 [ idx#105 ] ) always clobbers reg byte a +Statement [93] *((const byte*) COLS#0 + (byte) idx#105) ← (const byte) GREEN#0 [ assertType::t1#42 idx#105 ] ( main:2::testBinaryOperator:12::assertType:15 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:17 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:19 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:21 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:23 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:25 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:27 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:29 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:31 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:33 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:35 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:37 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:39 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:41 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:43 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:45 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:47 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:49 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:51 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:53 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:55 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:57 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:59 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:61 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:63 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:65 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:67 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:69 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:71 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:73 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:75 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:77 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:79 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:81 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:83 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:85 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:95 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:97 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:99 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:101 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:103 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:105 [ assertType::t1#42 idx#105 ] ) always clobbers reg byte a +Statement [6] *((byte*) main::s#4) ← (byte) ' ' [ main::s#4 ] ( main:2 [ main::s#4 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::s#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::s#1 ] ( main:2 [ main::s#1 ] ) always clobbers reg byte a +Statement [89] *((const byte*) COLS#0 + (byte) idx#105) ← (const byte) RED#0 [ assertType::t1#42 idx#105 ] ( main:2::testBinaryOperator:12::assertType:15 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:17 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:19 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:21 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:23 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:25 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:27 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:29 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:31 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:33 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:35 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:37 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:39 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:41 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:43 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:45 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:47 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:49 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:51 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:53 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:55 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:57 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:59 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:61 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:63 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:65 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:67 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:69 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:71 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:73 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:75 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:77 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:79 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:81 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:83 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:85 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:95 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:97 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:99 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:101 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:103 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:105 [ assertType::t1#42 idx#105 ] ) always clobbers reg byte a +Statement [90] *((const byte*) SCREEN#0 + (byte) idx#105) ← (byte) assertType::t1#42 [ idx#105 ] ( main:2::testBinaryOperator:12::assertType:15 [ idx#105 ] main:2::testBinaryOperator:12::assertType:17 [ idx#105 ] main:2::testBinaryOperator:12::assertType:19 [ idx#105 ] main:2::testBinaryOperator:12::assertType:21 [ idx#105 ] main:2::testBinaryOperator:12::assertType:23 [ idx#105 ] main:2::testBinaryOperator:12::assertType:25 [ idx#105 ] main:2::testBinaryOperator:12::assertType:27 [ idx#105 ] main:2::testBinaryOperator:12::assertType:29 [ idx#105 ] main:2::testBinaryOperator:12::assertType:31 [ idx#105 ] main:2::testBinaryOperator:12::assertType:33 [ idx#105 ] main:2::testBinaryOperator:12::assertType:35 [ idx#105 ] main:2::testBinaryOperator:12::assertType:37 [ idx#105 ] main:2::testBinaryOperator:12::assertType:39 [ idx#105 ] main:2::testBinaryOperator:12::assertType:41 [ idx#105 ] main:2::testBinaryOperator:12::assertType:43 [ idx#105 ] main:2::testBinaryOperator:12::assertType:45 [ idx#105 ] main:2::testBinaryOperator:12::assertType:47 [ idx#105 ] main:2::testBinaryOperator:12::assertType:49 [ idx#105 ] main:2::testBinaryOperator:12::assertType:51 [ idx#105 ] main:2::testBinaryOperator:12::assertType:53 [ idx#105 ] main:2::testBinaryOperator:12::assertType:55 [ idx#105 ] main:2::testBinaryOperator:12::assertType:57 [ idx#105 ] main:2::testBinaryOperator:12::assertType:59 [ idx#105 ] main:2::testBinaryOperator:12::assertType:61 [ idx#105 ] main:2::testBinaryOperator:12::assertType:63 [ idx#105 ] main:2::testBinaryOperator:12::assertType:65 [ idx#105 ] main:2::testBinaryOperator:12::assertType:67 [ idx#105 ] main:2::testBinaryOperator:12::assertType:69 [ idx#105 ] main:2::testBinaryOperator:12::assertType:71 [ idx#105 ] main:2::testBinaryOperator:12::assertType:73 [ idx#105 ] main:2::testBinaryOperator:12::assertType:75 [ idx#105 ] main:2::testBinaryOperator:12::assertType:77 [ idx#105 ] main:2::testBinaryOperator:12::assertType:79 [ idx#105 ] main:2::testBinaryOperator:12::assertType:81 [ idx#105 ] main:2::testBinaryOperator:12::assertType:83 [ idx#105 ] main:2::testBinaryOperator:12::assertType:85 [ idx#105 ] main:2::testUnaryOperator:10::assertType:95 [ idx#105 ] main:2::testUnaryOperator:10::assertType:97 [ idx#105 ] main:2::testUnaryOperator:10::assertType:99 [ idx#105 ] main:2::testUnaryOperator:10::assertType:101 [ idx#105 ] main:2::testUnaryOperator:10::assertType:103 [ idx#105 ] main:2::testUnaryOperator:10::assertType:105 [ idx#105 ] ) always clobbers reg byte a +Statement [93] *((const byte*) COLS#0 + (byte) idx#105) ← (const byte) GREEN#0 [ assertType::t1#42 idx#105 ] ( main:2::testBinaryOperator:12::assertType:15 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:17 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:19 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:21 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:23 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:25 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:27 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:29 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:31 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:33 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:35 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:37 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:39 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:41 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:43 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:45 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:47 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:49 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:51 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:53 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:55 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:57 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:59 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:61 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:63 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:65 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:67 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:69 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:71 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:73 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:75 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:77 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:79 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:81 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:83 [ assertType::t1#42 idx#105 ] main:2::testBinaryOperator:12::assertType:85 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:95 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:97 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:99 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:101 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:103 [ assertType::t1#42 idx#105 ] main:2::testUnaryOperator:10::assertType:105 [ assertType::t1#42 idx#105 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ main::s#4 main::s#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_BYTE:4 [ assertType::t1#42 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:5 [ assertType::t2#42 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:6 [ idx#105 idx#108 idx#26 idx#40 idx#47 idx#19 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 36.67: zp ZP_WORD:2 [ main::s#2 main::s#1 ] Uplift Scope [] 34.25: zp ZP_BYTE:6 [ idx#105 idx#108 idx#26 idx#40 idx#47 idx#19 ] +Uplift Scope [main] 33: zp ZP_WORD:2 [ main::s#4 main::s#1 ] Uplift Scope [assertType] 2: zp ZP_BYTE:5 [ assertType::t2#42 ] 1: zp ZP_BYTE:4 [ assertType::t1#42 ] Uplift Scope [testUnaryOperator] Uplift Scope [testBinaryOperator] -Uplifting [main] best 1506 combination zp ZP_WORD:2 [ main::s#2 main::s#1 ] -Uplifting [] best 1473 combination reg byte x [ idx#105 idx#108 idx#26 idx#40 idx#47 idx#19 ] -Uplifting [assertType] best 1345 combination zp ZP_BYTE:5 [ assertType::t2#42 ] reg byte y [ assertType::t1#42 ] -Uplifting [testUnaryOperator] best 1345 combination -Uplifting [testBinaryOperator] best 1345 combination +Uplifting [] best 1503 combination reg byte x [ idx#105 idx#108 idx#26 idx#40 idx#47 idx#19 ] +Uplifting [main] best 1503 combination zp ZP_WORD:2 [ main::s#4 main::s#1 ] +Uplifting [assertType] best 1375 combination zp ZP_BYTE:5 [ assertType::t2#42 ] reg byte y [ assertType::t1#42 ] +Uplifting [testUnaryOperator] best 1375 combination +Uplifting [testBinaryOperator] best 1375 combination Attempting to uplift remaining variables inzp ZP_BYTE:5 [ assertType::t2#42 ] -Uplifting [assertType] best 1345 combination zp ZP_BYTE:5 [ assertType::t2#42 ] +Uplifting [assertType] best 1375 combination zp ZP_BYTE:5 [ assertType::t2#42 ] Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ assertType::t2#42 ] ASSEMBLER BEFORE OPTIMIZATION @@ -2541,63 +2553,64 @@ bend: // main main: { .label s = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::s#2 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::s#4 = (const byte*) SCREEN#0 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta s+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::s#4 = (byte*) main::s#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((byte*) main::s#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (s),y + // [7] (byte*) main::s#1 ← ++ (byte*) main::s#4 -- pbuz1=_inc_pbuz1 + inc s + bne !+ + inc s+1 + !: jmp b1 // main::@1 b1: - // [6] if((byte*) main::s#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_lt_pbuc1_then_la1 + // [8] if((byte*) main::s#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_lt_pbuc1_then_la1 lda s+1 cmp #>SCREEN+$3e8 - bcc b2 + bcc b2_from_b1 bne !+ lda s cmp #main::@3] + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: jmp b3 // main::@3 b3: - // [8] call testUnaryOperator + // [10] call testUnaryOperator // [94] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] testUnaryOperator_from_b3: jsr testUnaryOperator - // [9] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] b4_from_b3: jmp b4 // main::@4 b4: - // [10] call testBinaryOperator + // [12] call testBinaryOperator // [14] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] testBinaryOperator_from_b4: jsr testBinaryOperator jmp breturn // main::@return breturn: - // [11] return + // [13] return rts - // main::@2 - b2: - // [12] *((byte*) main::s#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (s),y - // [13] (byte*) main::s#1 ← ++ (byte*) main::s#2 -- pbuz1=_inc_pbuz1 - inc s - bne !+ - inc s+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // testBinaryOperator testBinaryOperator: { @@ -3280,6 +3293,7 @@ testUnaryOperator: { ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b4 @@ -3372,10 +3386,13 @@ Replacing instruction ldy #TYPEID_WORD with TAY Replacing instruction ldy #TYPEID_SIGNED_WORD with TAY Replacing instruction ldy #TYPEID_DWORD with TAY Replacing instruction ldy #TYPEID_SIGNED_DWORD with TAY +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Removing instruction b3_from_b1: Removing instruction testUnaryOperator_from_b3: Removing instruction b4_from_b3: @@ -3454,11 +3471,11 @@ Removing instruction b5_from_b4: Removing instruction assertType_from_b5: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction b3: Removing instruction b4: Removing instruction breturn: -Removing instruction b1_from_b2: Removing instruction assertType_from_testBinaryOperator: Removing instruction b1: Removing instruction b2: @@ -3513,6 +3530,8 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -3557,8 +3576,8 @@ FINAL SYMBOL TABLE (label) main::@4 (label) main::@return (byte*) main::s -(byte*) main::s#1 s zp ZP_WORD:2 22.0 -(byte*) main::s#2 s zp ZP_WORD:2 14.666666666666666 +(byte*) main::s#1 s zp ZP_WORD:2 16.5 +(byte*) main::s#4 s zp ZP_WORD:2 16.5 (void()) testBinaryOperator() (label) testBinaryOperator::@1 (label) testBinaryOperator::@10 @@ -3604,14 +3623,14 @@ FINAL SYMBOL TABLE (label) testUnaryOperator::@5 (label) testUnaryOperator::@return -zp ZP_WORD:2 [ main::s#2 main::s#1 ] +zp ZP_WORD:2 [ main::s#4 main::s#1 ] reg byte y [ assertType::t1#42 ] zp ZP_BYTE:4 [ assertType::t2#42 ] reg byte x [ idx#105 idx#108 idx#26 idx#40 idx#47 idx#19 ] FINAL ASSEMBLER -Score: 1159 +Score: 1129 // File Comments // Tests different integer literal types @@ -3640,16 +3659,29 @@ Score: 1159 // main main: { .label s = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte*) main::s#2 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte*) main::s#4 = (const byte*) SCREEN#0 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta s+1 - // main::@1 - b1: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte*) main::s#4 = (byte*) main::s#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // *s = ' ' + // [6] *((byte*) main::s#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (s),y // for(byte* s=SCREEN;sSCREEN+$3e8 bcc b2 @@ -3658,38 +3690,22 @@ main: { cmp #main::@3] + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // testUnaryOperator() - // [8] call testUnaryOperator + // [10] call testUnaryOperator // [94] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] jsr testUnaryOperator - // [9] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // testBinaryOperator() - // [10] call testBinaryOperator + // [12] call testBinaryOperator // [14] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] jsr testBinaryOperator // main::@return // } - // [11] return + // [13] return rts - // main::@2 - b2: - // *s = ' ' - // [12] *((byte*) main::s#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (s),y - // for(byte* s=SCREEN;smain::@1] - // [5] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // testBinaryOperator testBinaryOperator: { diff --git a/src/test/ref/int-conversion.sym b/src/test/ref/int-conversion.sym index 9011b3d02..8f5309979 100644 --- a/src/test/ref/int-conversion.sym +++ b/src/test/ref/int-conversion.sym @@ -38,8 +38,8 @@ (label) main::@4 (label) main::@return (byte*) main::s -(byte*) main::s#1 s zp ZP_WORD:2 22.0 -(byte*) main::s#2 s zp ZP_WORD:2 14.666666666666666 +(byte*) main::s#1 s zp ZP_WORD:2 16.5 +(byte*) main::s#4 s zp ZP_WORD:2 16.5 (void()) testBinaryOperator() (label) testBinaryOperator::@1 (label) testBinaryOperator::@10 @@ -85,7 +85,7 @@ (label) testUnaryOperator::@5 (label) testUnaryOperator::@return -zp ZP_WORD:2 [ main::s#2 main::s#1 ] +zp ZP_WORD:2 [ main::s#4 main::s#1 ] reg byte y [ assertType::t1#42 ] zp ZP_BYTE:4 [ assertType::t2#42 ] reg byte x [ idx#105 idx#108 idx#26 idx#40 idx#47 idx#19 ] diff --git a/src/test/ref/int-literals.asm b/src/test/ref/int-literals.asm index a34a91fd8..24a6996d0 100644 --- a/src/test/ref/int-literals.asm +++ b/src/test/ref/int-literals.asm @@ -18,7 +18,14 @@ main: { sta s lda #>SCREEN sta s+1 - b1: + b2: + lda #' ' + ldy #0 + sta (s),y + inc s + bne !+ + inc s+1 + !: lda s+1 cmp #>SCREEN+$3e8 bcc b2 @@ -29,15 +36,6 @@ main: { !: jsr testSimpleTypes rts - b2: - lda #' ' - ldy #0 - sta (s),y - inc s - bne !+ - inc s+1 - !: - jmp b1 } testSimpleTypes: { ldx #0 diff --git a/src/test/ref/int-literals.cfg b/src/test/ref/int-literals.cfg index 7f23d9119..6da496f18 100644 --- a/src/test/ref/int-literals.cfg +++ b/src/test/ref/int-literals.cfg @@ -9,22 +9,22 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::s#4 ← phi( main::@1/(byte*) main::s#1 main/(const byte*) SCREEN#0 ) + [6] *((byte*) main::s#4) ← (byte) ' ' + [7] (byte*) main::s#1 ← ++ (byte*) main::s#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::s#2 ← phi( main/(const byte*) SCREEN#0 main::@2/(byte*) main::s#1 ) - [6] if((byte*) main::s#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte*) main::s#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [7] phi() - [8] call testSimpleTypes + [9] phi() + [10] call testSimpleTypes to:main::@return main::@return: scope:[main] from main::@3 - [9] return + [11] return to:@return -main::@2: scope:[main] from main::@1 - [10] *((byte*) main::s#2) ← (byte) ' ' - [11] (byte*) main::s#1 ← ++ (byte*) main::s#2 - to:main::@1 testSimpleTypes: scope:[testSimpleTypes] from main::@3 [12] phi() [13] call assertType diff --git a/src/test/ref/int-literals.log b/src/test/ref/int-literals.log index 34228c40f..e8c525e23 100644 --- a/src/test/ref/int-literals.log +++ b/src/test/ref/int-literals.log @@ -501,6 +501,13 @@ Constant right-side identified [1] (byte*~) main::$1 ← (const byte*) SCREEN#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) main::$1 = SCREEN#0+$3e8 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) main::s#1 = (byte*) main::s#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) main::s#5 (const byte*) main::s#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [33] if((const byte*) main::s#0<(const byte*) main::$1) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte*) main::s#0 Inlining constant with var siblings (const byte) assertType::t1#0 Inlining constant with var siblings (const byte) assertType::t2#0 @@ -567,39 +574,43 @@ Constant inlined assertType::t1#11 = (const byte) TYPEID_DWORD Constant inlined assertType::t1#14 = (const byte) TYPEID_SIGNED_DWORD Constant inlined assertType::t1#13 = (const byte) TYPEID_SIGNED_DWORD Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@8(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @4 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::@7 Adding NOP phi() at start of testSimpleTypes Adding NOP phi() at start of testSimpleTypes::@15 CALL GRAPH Calls in [] to main:2 -Calls in [main] to testSimpleTypes:9 -Calls in [testSimpleTypes] to assertType:16 assertType:18 assertType:20 assertType:22 assertType:24 assertType:26 assertType:28 assertType:30 assertType:32 assertType:34 assertType:36 assertType:38 assertType:40 assertType:42 assertType:44 +Calls in [main] to testSimpleTypes:12 +Calls in [testSimpleTypes] to assertType:17 assertType:19 assertType:21 assertType:23 assertType:25 assertType:27 assertType:29 assertType:31 assertType:33 assertType:35 assertType:37 assertType:39 assertType:41 assertType:43 assertType:45 Created 4 initial phi equivalence classes -Coalesced [14] main::s#4 ← main::s#1 -Coalesced [17] idx#52 ← idx#20 -Coalesced (already) [19] idx#58 ← idx#20 -Coalesced (already) [21] idx#59 ← idx#20 -Coalesced (already) [23] idx#60 ← idx#20 -Coalesced (already) [25] idx#61 ← idx#20 -Coalesced (already) [27] idx#62 ← idx#20 -Coalesced (already) [29] idx#63 ← idx#20 -Coalesced (already) [31] idx#64 ← idx#20 -Coalesced (already) [33] idx#65 ← idx#20 -Coalesced (already) [35] idx#53 ← idx#20 -Coalesced (already) [37] idx#54 ← idx#20 -Coalesced (already) [39] idx#55 ← idx#20 -Coalesced (already) [41] idx#56 ← idx#20 -Coalesced (already) [43] idx#57 ← idx#20 +Coalesced [15] main::s#6 ← main::s#1 +Coalesced [18] idx#52 ← idx#20 +Coalesced (already) [20] idx#58 ← idx#20 +Coalesced (already) [22] idx#59 ← idx#20 +Coalesced (already) [24] idx#60 ← idx#20 +Coalesced (already) [26] idx#61 ← idx#20 +Coalesced (already) [28] idx#62 ← idx#20 +Coalesced (already) [30] idx#63 ← idx#20 +Coalesced (already) [32] idx#64 ← idx#20 +Coalesced (already) [34] idx#65 ← idx#20 +Coalesced (already) [36] idx#53 ← idx#20 +Coalesced (already) [38] idx#54 ← idx#20 +Coalesced (already) [40] idx#55 ← idx#20 +Coalesced (already) [42] idx#56 ← idx#20 +Coalesced (already) [44] idx#57 ← idx#20 Coalesced down to 4 phi equivalence classes Culled Empty Block (label) @4 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@7 +Culled Empty Block (label) main::@8 Culled Empty Block (label) testSimpleTypes::@15 Renumbering block @3 to @1 Adding NOP phi() at start of @begin @@ -635,22 +646,22 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::s#4 ← phi( main::@1/(byte*) main::s#1 main/(const byte*) SCREEN#0 ) + [6] *((byte*) main::s#4) ← (byte) ' ' + [7] (byte*) main::s#1 ← ++ (byte*) main::s#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::s#2 ← phi( main/(const byte*) SCREEN#0 main::@2/(byte*) main::s#1 ) - [6] if((byte*) main::s#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte*) main::s#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [7] phi() - [8] call testSimpleTypes + [9] phi() + [10] call testSimpleTypes to:main::@return main::@return: scope:[main] from main::@3 - [9] return + [11] return to:@return -main::@2: scope:[main] from main::@1 - [10] *((byte*) main::s#2) ← (byte) ' ' - [11] (byte*) main::s#1 ← ++ (byte*) main::s#2 - to:main::@1 testSimpleTypes: scope:[testSimpleTypes] from main::@3 [12] phi() [13] call assertType @@ -750,21 +761,21 @@ VARIABLE REGISTER WEIGHTS (byte) idx#41 7.200000000000002 (void()) main() (byte*) main::s -(byte*) main::s#1 22.0 -(byte*) main::s#2 14.666666666666666 +(byte*) main::s#1 16.5 +(byte*) main::s#4 16.5 (void()) testSimpleTypes() Initial phi equivalence classes -[ main::s#2 main::s#1 ] +[ main::s#4 main::s#1 ] [ assertType::t1#15 ] [ assertType::t2#15 ] [ idx#41 idx#20 ] Complete equivalence classes -[ main::s#2 main::s#1 ] +[ main::s#4 main::s#1 ] [ assertType::t1#15 ] [ assertType::t2#15 ] [ idx#41 idx#20 ] -Allocated zp ZP_WORD:2 [ main::s#2 main::s#1 ] +Allocated zp ZP_WORD:2 [ main::s#4 main::s#1 ] Allocated zp ZP_BYTE:4 [ assertType::t1#15 ] Allocated zp ZP_BYTE:5 [ assertType::t2#15 ] Allocated zp ZP_BYTE:6 [ idx#41 idx#20 ] @@ -808,54 +819,55 @@ bend: // main main: { .label s = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::s#2 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::s#4 = (const byte*) SCREEN#0 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta s+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::s#4 = (byte*) main::s#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((byte*) main::s#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (s),y + // [7] (byte*) main::s#1 ← ++ (byte*) main::s#4 -- pbuz1=_inc_pbuz1 + inc s + bne !+ + inc s+1 + !: jmp b1 // main::@1 b1: - // [6] if((byte*) main::s#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_lt_pbuc1_then_la1 + // [8] if((byte*) main::s#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_lt_pbuc1_then_la1 lda s+1 cmp #>SCREEN+$3e8 - bcc b2 + bcc b2_from_b1 bne !+ lda s cmp #main::@3] + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: jmp b3 // main::@3 b3: - // [8] call testSimpleTypes + // [10] call testSimpleTypes // [12] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] testSimpleTypes_from_b3: jsr testSimpleTypes jmp breturn // main::@return breturn: - // [9] return + // [11] return rts - // main::@2 - b2: - // [10] *((byte*) main::s#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (s),y - // [11] (byte*) main::s#1 ← ++ (byte*) main::s#2 -- pbuz1=_inc_pbuz1 - inc s - bne !+ - inc s+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // testSimpleTypes testSimpleTypes: { @@ -1146,35 +1158,35 @@ assertType: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if((byte*) main::s#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::s#2 ] ( main:2 [ main::s#2 ] ) always clobbers reg byte a -Statement [10] *((byte*) main::s#2) ← (byte) ' ' [ main::s#2 ] ( main:2 [ main::s#2 ] ) always clobbers reg byte a reg byte y -Statement [45] *((const byte*) COLS#0 + (byte) idx#41) ← (const byte) RED#0 [ assertType::t1#15 idx#41 ] ( main:2::testSimpleTypes:8::assertType:13 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:15 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:17 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:19 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:21 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:23 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:25 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:27 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:29 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:31 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:33 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:35 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:37 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:39 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:41 [ assertType::t1#15 idx#41 ] ) always clobbers reg byte a +Statement [6] *((byte*) main::s#4) ← (byte) ' ' [ main::s#4 ] ( main:2 [ main::s#4 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::s#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::s#1 ] ( main:2 [ main::s#1 ] ) always clobbers reg byte a +Statement [45] *((const byte*) COLS#0 + (byte) idx#41) ← (const byte) RED#0 [ assertType::t1#15 idx#41 ] ( main:2::testSimpleTypes:10::assertType:13 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:15 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:17 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:19 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:21 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:23 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:25 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:27 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:29 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:31 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:33 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:35 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:37 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:39 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:41 [ assertType::t1#15 idx#41 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ assertType::t1#15 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ idx#41 idx#20 ] -Statement [46] *((const byte*) SCREEN#0 + (byte) idx#41) ← (byte) assertType::t1#15 [ idx#41 ] ( main:2::testSimpleTypes:8::assertType:13 [ idx#41 ] main:2::testSimpleTypes:8::assertType:15 [ idx#41 ] main:2::testSimpleTypes:8::assertType:17 [ idx#41 ] main:2::testSimpleTypes:8::assertType:19 [ idx#41 ] main:2::testSimpleTypes:8::assertType:21 [ idx#41 ] main:2::testSimpleTypes:8::assertType:23 [ idx#41 ] main:2::testSimpleTypes:8::assertType:25 [ idx#41 ] main:2::testSimpleTypes:8::assertType:27 [ idx#41 ] main:2::testSimpleTypes:8::assertType:29 [ idx#41 ] main:2::testSimpleTypes:8::assertType:31 [ idx#41 ] main:2::testSimpleTypes:8::assertType:33 [ idx#41 ] main:2::testSimpleTypes:8::assertType:35 [ idx#41 ] main:2::testSimpleTypes:8::assertType:37 [ idx#41 ] main:2::testSimpleTypes:8::assertType:39 [ idx#41 ] main:2::testSimpleTypes:8::assertType:41 [ idx#41 ] ) always clobbers reg byte a -Statement [49] *((const byte*) COLS#0 + (byte) idx#41) ← (const byte) GREEN#0 [ assertType::t1#15 idx#41 ] ( main:2::testSimpleTypes:8::assertType:13 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:15 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:17 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:19 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:21 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:23 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:25 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:27 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:29 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:31 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:33 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:35 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:37 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:39 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:41 [ assertType::t1#15 idx#41 ] ) always clobbers reg byte a -Statement [6] if((byte*) main::s#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::s#2 ] ( main:2 [ main::s#2 ] ) always clobbers reg byte a -Statement [10] *((byte*) main::s#2) ← (byte) ' ' [ main::s#2 ] ( main:2 [ main::s#2 ] ) always clobbers reg byte a reg byte y -Statement [45] *((const byte*) COLS#0 + (byte) idx#41) ← (const byte) RED#0 [ assertType::t1#15 idx#41 ] ( main:2::testSimpleTypes:8::assertType:13 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:15 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:17 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:19 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:21 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:23 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:25 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:27 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:29 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:31 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:33 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:35 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:37 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:39 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:41 [ assertType::t1#15 idx#41 ] ) always clobbers reg byte a -Statement [46] *((const byte*) SCREEN#0 + (byte) idx#41) ← (byte) assertType::t1#15 [ idx#41 ] ( main:2::testSimpleTypes:8::assertType:13 [ idx#41 ] main:2::testSimpleTypes:8::assertType:15 [ idx#41 ] main:2::testSimpleTypes:8::assertType:17 [ idx#41 ] main:2::testSimpleTypes:8::assertType:19 [ idx#41 ] main:2::testSimpleTypes:8::assertType:21 [ idx#41 ] main:2::testSimpleTypes:8::assertType:23 [ idx#41 ] main:2::testSimpleTypes:8::assertType:25 [ idx#41 ] main:2::testSimpleTypes:8::assertType:27 [ idx#41 ] main:2::testSimpleTypes:8::assertType:29 [ idx#41 ] main:2::testSimpleTypes:8::assertType:31 [ idx#41 ] main:2::testSimpleTypes:8::assertType:33 [ idx#41 ] main:2::testSimpleTypes:8::assertType:35 [ idx#41 ] main:2::testSimpleTypes:8::assertType:37 [ idx#41 ] main:2::testSimpleTypes:8::assertType:39 [ idx#41 ] main:2::testSimpleTypes:8::assertType:41 [ idx#41 ] ) always clobbers reg byte a -Statement [49] *((const byte*) COLS#0 + (byte) idx#41) ← (const byte) GREEN#0 [ assertType::t1#15 idx#41 ] ( main:2::testSimpleTypes:8::assertType:13 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:15 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:17 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:19 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:21 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:23 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:25 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:27 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:29 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:31 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:33 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:35 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:37 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:39 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:8::assertType:41 [ assertType::t1#15 idx#41 ] ) always clobbers reg byte a -Potential registers zp ZP_WORD:2 [ main::s#2 main::s#1 ] : zp ZP_WORD:2 , +Statement [46] *((const byte*) SCREEN#0 + (byte) idx#41) ← (byte) assertType::t1#15 [ idx#41 ] ( main:2::testSimpleTypes:10::assertType:13 [ idx#41 ] main:2::testSimpleTypes:10::assertType:15 [ idx#41 ] main:2::testSimpleTypes:10::assertType:17 [ idx#41 ] main:2::testSimpleTypes:10::assertType:19 [ idx#41 ] main:2::testSimpleTypes:10::assertType:21 [ idx#41 ] main:2::testSimpleTypes:10::assertType:23 [ idx#41 ] main:2::testSimpleTypes:10::assertType:25 [ idx#41 ] main:2::testSimpleTypes:10::assertType:27 [ idx#41 ] main:2::testSimpleTypes:10::assertType:29 [ idx#41 ] main:2::testSimpleTypes:10::assertType:31 [ idx#41 ] main:2::testSimpleTypes:10::assertType:33 [ idx#41 ] main:2::testSimpleTypes:10::assertType:35 [ idx#41 ] main:2::testSimpleTypes:10::assertType:37 [ idx#41 ] main:2::testSimpleTypes:10::assertType:39 [ idx#41 ] main:2::testSimpleTypes:10::assertType:41 [ idx#41 ] ) always clobbers reg byte a +Statement [49] *((const byte*) COLS#0 + (byte) idx#41) ← (const byte) GREEN#0 [ assertType::t1#15 idx#41 ] ( main:2::testSimpleTypes:10::assertType:13 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:15 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:17 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:19 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:21 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:23 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:25 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:27 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:29 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:31 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:33 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:35 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:37 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:39 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:41 [ assertType::t1#15 idx#41 ] ) always clobbers reg byte a +Statement [6] *((byte*) main::s#4) ← (byte) ' ' [ main::s#4 ] ( main:2 [ main::s#4 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::s#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::s#1 ] ( main:2 [ main::s#1 ] ) always clobbers reg byte a +Statement [45] *((const byte*) COLS#0 + (byte) idx#41) ← (const byte) RED#0 [ assertType::t1#15 idx#41 ] ( main:2::testSimpleTypes:10::assertType:13 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:15 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:17 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:19 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:21 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:23 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:25 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:27 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:29 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:31 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:33 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:35 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:37 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:39 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:41 [ assertType::t1#15 idx#41 ] ) always clobbers reg byte a +Statement [46] *((const byte*) SCREEN#0 + (byte) idx#41) ← (byte) assertType::t1#15 [ idx#41 ] ( main:2::testSimpleTypes:10::assertType:13 [ idx#41 ] main:2::testSimpleTypes:10::assertType:15 [ idx#41 ] main:2::testSimpleTypes:10::assertType:17 [ idx#41 ] main:2::testSimpleTypes:10::assertType:19 [ idx#41 ] main:2::testSimpleTypes:10::assertType:21 [ idx#41 ] main:2::testSimpleTypes:10::assertType:23 [ idx#41 ] main:2::testSimpleTypes:10::assertType:25 [ idx#41 ] main:2::testSimpleTypes:10::assertType:27 [ idx#41 ] main:2::testSimpleTypes:10::assertType:29 [ idx#41 ] main:2::testSimpleTypes:10::assertType:31 [ idx#41 ] main:2::testSimpleTypes:10::assertType:33 [ idx#41 ] main:2::testSimpleTypes:10::assertType:35 [ idx#41 ] main:2::testSimpleTypes:10::assertType:37 [ idx#41 ] main:2::testSimpleTypes:10::assertType:39 [ idx#41 ] main:2::testSimpleTypes:10::assertType:41 [ idx#41 ] ) always clobbers reg byte a +Statement [49] *((const byte*) COLS#0 + (byte) idx#41) ← (const byte) GREEN#0 [ assertType::t1#15 idx#41 ] ( main:2::testSimpleTypes:10::assertType:13 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:15 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:17 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:19 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:21 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:23 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:25 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:27 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:29 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:31 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:33 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:35 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:37 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:39 [ assertType::t1#15 idx#41 ] main:2::testSimpleTypes:10::assertType:41 [ assertType::t1#15 idx#41 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ main::s#4 main::s#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_BYTE:4 [ assertType::t1#15 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:5 [ assertType::t2#15 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:6 [ idx#41 idx#20 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 36.67: zp ZP_WORD:2 [ main::s#2 main::s#1 ] +Uplift Scope [main] 33: zp ZP_WORD:2 [ main::s#4 main::s#1 ] Uplift Scope [] 8.2: zp ZP_BYTE:6 [ idx#41 idx#20 ] Uplift Scope [assertType] 2: zp ZP_BYTE:5 [ assertType::t2#15 ] 1: zp ZP_BYTE:4 [ assertType::t1#15 ] Uplift Scope [testSimpleTypes] -Uplifting [main] best 948 combination zp ZP_WORD:2 [ main::s#2 main::s#1 ] -Uplifting [] best 933 combination reg byte x [ idx#41 idx#20 ] -Uplifting [assertType] best 886 combination zp ZP_BYTE:5 [ assertType::t2#15 ] reg byte y [ assertType::t1#15 ] -Uplifting [testSimpleTypes] best 886 combination +Uplifting [main] best 978 combination zp ZP_WORD:2 [ main::s#4 main::s#1 ] +Uplifting [] best 963 combination reg byte x [ idx#41 idx#20 ] +Uplifting [assertType] best 916 combination zp ZP_BYTE:5 [ assertType::t2#15 ] reg byte y [ assertType::t1#15 ] +Uplifting [testSimpleTypes] best 916 combination Attempting to uplift remaining variables inzp ZP_BYTE:5 [ assertType::t2#15 ] -Uplifting [assertType] best 886 combination zp ZP_BYTE:5 [ assertType::t2#15 ] +Uplifting [assertType] best 916 combination zp ZP_BYTE:5 [ assertType::t2#15 ] Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ assertType::t2#15 ] ASSEMBLER BEFORE OPTIMIZATION @@ -1214,54 +1226,55 @@ bend: // main main: { .label s = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::s#2 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::s#4 = (const byte*) SCREEN#0 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta s+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::s#4 = (byte*) main::s#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((byte*) main::s#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (s),y + // [7] (byte*) main::s#1 ← ++ (byte*) main::s#4 -- pbuz1=_inc_pbuz1 + inc s + bne !+ + inc s+1 + !: jmp b1 // main::@1 b1: - // [6] if((byte*) main::s#2<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_lt_pbuc1_then_la1 + // [8] if((byte*) main::s#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_lt_pbuc1_then_la1 lda s+1 cmp #>SCREEN+$3e8 - bcc b2 + bcc b2_from_b1 bne !+ lda s cmp #main::@3] + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: jmp b3 // main::@3 b3: - // [8] call testSimpleTypes + // [10] call testSimpleTypes // [12] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] testSimpleTypes_from_b3: jsr testSimpleTypes jmp breturn // main::@return breturn: - // [9] return + // [11] return rts - // main::@2 - b2: - // [10] *((byte*) main::s#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (s),y - // [11] (byte*) main::s#1 ← ++ (byte*) main::s#2 -- pbuz1=_inc_pbuz1 - inc s - bne !+ - inc s+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // testSimpleTypes testSimpleTypes: { @@ -1534,6 +1547,7 @@ assertType: { ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp breturn @@ -1571,10 +1585,13 @@ Replacing instruction ldy #TYPEID_DWORD with TAY Replacing instruction ldy #TYPEID_SIGNED_DWORD with TAY Replacing instruction ldy #TYPEID_SIGNED_DWORD with TAY Replacing instruction ldy #TYPEID_SIGNED_DWORD with TAY +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Removing instruction b3_from_b1: Removing instruction testSimpleTypes_from_b3: Removing instruction b1_from_testSimpleTypes: @@ -1607,10 +1624,10 @@ Removing instruction b14_from_b13: Removing instruction assertType_from_b14: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction b3: Removing instruction breturn: -Removing instruction b1_from_b2: Removing instruction assertType_from_testSimpleTypes: Removing instruction b1: Removing instruction b2: @@ -1633,6 +1650,8 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -1672,8 +1691,8 @@ FINAL SYMBOL TABLE (label) main::@3 (label) main::@return (byte*) main::s -(byte*) main::s#1 s zp ZP_WORD:2 22.0 -(byte*) main::s#2 s zp ZP_WORD:2 14.666666666666666 +(byte*) main::s#1 s zp ZP_WORD:2 16.5 +(byte*) main::s#4 s zp ZP_WORD:2 16.5 (void()) testSimpleTypes() (label) testSimpleTypes::@1 (label) testSimpleTypes::@10 @@ -1691,14 +1710,14 @@ FINAL SYMBOL TABLE (label) testSimpleTypes::@9 (label) testSimpleTypes::@return -zp ZP_WORD:2 [ main::s#2 main::s#1 ] +zp ZP_WORD:2 [ main::s#4 main::s#1 ] reg byte y [ assertType::t1#15 ] zp ZP_BYTE:4 [ assertType::t2#15 ] reg byte x [ idx#41 idx#20 ] FINAL ASSEMBLER -Score: 784 +Score: 754 // File Comments // Tests different integer literal types @@ -1727,16 +1746,29 @@ Score: 784 // main main: { .label s = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte*) main::s#2 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte*) main::s#4 = (const byte*) SCREEN#0 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta s+1 - // main::@1 - b1: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte*) main::s#4 = (byte*) main::s#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // *s = ' ' + // [6] *((byte*) main::s#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (s),y // for(byte* s=SCREEN;sSCREEN+$3e8 bcc b2 @@ -1745,32 +1777,16 @@ main: { cmp #main::@3] + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // testSimpleTypes() - // [8] call testSimpleTypes + // [10] call testSimpleTypes // [12] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] jsr testSimpleTypes // main::@return // } - // [9] return + // [11] return rts - // main::@2 - b2: - // *s = ' ' - // [10] *((byte*) main::s#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (s),y - // for(byte* s=SCREEN;smain::@1] - // [5] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // testSimpleTypes testSimpleTypes: { diff --git a/src/test/ref/int-literals.sym b/src/test/ref/int-literals.sym index f0b5dbc14..b7c8e1e56 100644 --- a/src/test/ref/int-literals.sym +++ b/src/test/ref/int-literals.sym @@ -33,8 +33,8 @@ (label) main::@3 (label) main::@return (byte*) main::s -(byte*) main::s#1 s zp ZP_WORD:2 22.0 -(byte*) main::s#2 s zp ZP_WORD:2 14.666666666666666 +(byte*) main::s#1 s zp ZP_WORD:2 16.5 +(byte*) main::s#4 s zp ZP_WORD:2 16.5 (void()) testSimpleTypes() (label) testSimpleTypes::@1 (label) testSimpleTypes::@10 @@ -52,7 +52,7 @@ (label) testSimpleTypes::@9 (label) testSimpleTypes::@return -zp ZP_WORD:2 [ main::s#2 main::s#1 ] +zp ZP_WORD:2 [ main::s#4 main::s#1 ] reg byte y [ assertType::t1#15 ] zp ZP_BYTE:4 [ assertType::t2#15 ] reg byte x [ idx#41 idx#20 ] diff --git a/src/test/ref/linegen.asm b/src/test/ref/linegen.asm index 12ea70962..6fb0800d4 100644 --- a/src/test/ref/linegen.asm +++ b/src/test/ref/linegen.asm @@ -86,45 +86,6 @@ main: { sta print_line_cursor+1 jsr print_ln ldx #0 - b1: - cpx #$14 - bcc b2 - lda print_line_cursor - sta print_char_cursor - lda print_line_cursor+1 - sta print_char_cursor+1 - lda #str - sta print_str.str+1 - jsr print_str - lda #<$7461 - sta print_word.w - lda #>$7461 - sta print_word.w+1 - jsr print_word - lda #str1 - sta print_str.str+1 - jsr print_str - lda #<$f781 - sta print_word.w - lda #>$f781 - sta print_word.w+1 - jsr print_word - lda #str1 - sta print_str.str+1 - jsr print_str - lda #<$6488 - sta print_word.w - lda #>$6488 - sta print_word.w+1 - jsr print_word - jsr print_ln - rts b2: stx print_byte.b lda print_line_cursor @@ -173,7 +134,44 @@ main: { jsr print_word jsr print_ln inx - jmp b1 + cpx #$14 + bcc b2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + lda #str + sta print_str.str+1 + jsr print_str + lda #<$7461 + sta print_word.w + lda #>$7461 + sta print_word.w+1 + jsr print_word + lda #str1 + sta print_str.str+1 + jsr print_str + lda #<$f781 + sta print_word.w + lda #>$f781 + sta print_word.w+1 + jsr print_word + lda #str1 + sta print_str.str+1 + jsr print_str + lda #<$6488 + sta print_word.w + lda #>$6488 + sta print_word.w+1 + jsr print_word + jsr print_ln + rts str: .text " @" str1: .text " @" lintab1: .fill 2*$14, 0 @@ -282,14 +280,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #$14 - bcc b2 - bne !+ - lda i - cmp #<$14 - bcc b2 - !: - rts b2: lda val+2 sta _6 @@ -405,7 +391,15 @@ lin16u_gen: { bne !+ inc i+1 !: - jmp b1 + lda i+1 + cmp #>$14 + bcc b2 + bne !+ + lda i + cmp #<$14 + bcc b2 + !: + rts } // Performs division on two 16 bit unsigned words and an initial remainder // Returns the quotient dividend/divisor. diff --git a/src/test/ref/linegen.cfg b/src/test/ref/linegen.cfg index 608fa2f97..629e27a3c 100644 --- a/src/test/ref/linegen.cfg +++ b/src/test/ref/linegen.cfg @@ -50,81 +50,81 @@ main::@12: scope:[main] from main::@11 main::@13: scope:[main] from main::@12 [24] phi() [25] call print_ln - to:main::@1 -main::@1: scope:[main] from main::@13 main::@21 - [26] (byte) main::i#10 ← phi( main::@13/(byte) 0 main::@21/(byte) main::i#1 ) - [27] if((byte) main::i#10<(byte) $14) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [28] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 - [29] call print_str - to:main::@22 -main::@22: scope:[main] from main::@3 - [30] phi() - [31] call print_word - to:main::@23 -main::@23: scope:[main] from main::@22 - [32] phi() - [33] call print_str - to:main::@24 -main::@24: scope:[main] from main::@23 - [34] phi() - [35] call print_word - to:main::@25 -main::@25: scope:[main] from main::@24 - [36] phi() - [37] call print_str - to:main::@26 -main::@26: scope:[main] from main::@25 - [38] phi() - [39] call print_word - to:main::@27 -main::@27: scope:[main] from main::@26 - [40] phi() - [41] call print_ln - to:main::@return -main::@return: scope:[main] from main::@27 - [42] return - to:@return -main::@2: scope:[main] from main::@1 - [43] (byte) print_byte::b#2 ← (byte) main::i#10 - [44] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 - [45] call print_byte + to:main::@2 +main::@2: scope:[main] from main::@1 main::@13 + [26] (byte) main::i#12 ← phi( main::@1/(byte) main::i#1 main::@13/(byte) 0 ) + [27] (byte) print_byte::b#2 ← (byte) main::i#12 + [28] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 + [29] call print_byte to:main::@14 main::@14: scope:[main] from main::@2 - [46] phi() - [47] call print_str + [30] phi() + [31] call print_str to:main::@15 main::@15: scope:[main] from main::@14 - [48] (byte~) main::$27 ← (byte) main::i#10 << (byte) 1 - [49] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) - [50] call print_word + [32] (byte~) main::$27 ← (byte) main::i#12 << (byte) 1 + [33] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) + [34] call print_word to:main::@16 main::@16: scope:[main] from main::@15 - [51] phi() - [52] call print_str + [35] phi() + [36] call print_str to:main::@17 main::@17: scope:[main] from main::@16 - [53] (byte~) main::$28 ← (byte) main::i#10 << (byte) 1 - [54] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) - [55] call print_word + [37] (byte~) main::$28 ← (byte) main::i#12 << (byte) 1 + [38] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) + [39] call print_word to:main::@18 main::@18: scope:[main] from main::@17 - [56] phi() - [57] call print_str + [40] phi() + [41] call print_str to:main::@19 main::@19: scope:[main] from main::@18 - [58] (byte~) main::$29 ← (byte) main::i#10 << (byte) 1 - [59] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) - [60] call print_word + [42] (byte~) main::$29 ← (byte) main::i#12 << (byte) 1 + [43] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) + [44] call print_word to:main::@20 main::@20: scope:[main] from main::@19 - [61] phi() - [62] call print_ln + [45] phi() + [46] call print_ln to:main::@21 main::@21: scope:[main] from main::@20 - [63] (byte) main::i#1 ← ++ (byte) main::i#10 + [47] (byte) main::i#1 ← ++ (byte) main::i#12 to:main::@1 +main::@1: scope:[main] from main::@21 + [48] if((byte) main::i#1<(byte) $14) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [49] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 + [50] call print_str + to:main::@22 +main::@22: scope:[main] from main::@3 + [51] phi() + [52] call print_word + to:main::@23 +main::@23: scope:[main] from main::@22 + [53] phi() + [54] call print_str + to:main::@24 +main::@24: scope:[main] from main::@23 + [55] phi() + [56] call print_word + to:main::@25 +main::@25: scope:[main] from main::@24 + [57] phi() + [58] call print_str + to:main::@26 +main::@26: scope:[main] from main::@25 + [59] phi() + [60] call print_word + to:main::@27 +main::@27: scope:[main] from main::@26 + [61] phi() + [62] call print_ln + to:main::@return +main::@return: scope:[main] from main::@27 + [63] return + to:@return print_ln: scope:[print_ln] from main::@13 main::@20 main::@27 [64] (byte*) print_line_cursor#21 ← phi( main::@13/(byte*) 1024 main::@20/(byte*) print_line_cursor#1 main::@27/(byte*) print_line_cursor#1 ) to:print_ln::@1 @@ -198,20 +198,20 @@ print_cls::@return: scope:[print_cls] from print_cls to:@return memset: scope:[memset] from print_cls [97] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [98] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [99] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [100] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [98] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [99] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [101] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [100] return + [102] return to:@return -memset::@2: scope:[memset] from memset::@1 - [101] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [102] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 lin16u_gen: scope:[lin16u_gen] from main main::@4 main::@5 - [103] (word*) lin16u_gen::lintab#6 ← phi( main/(const word[$14]) main::lintab1#0 main::@4/(const word[$14]) main::lintab2#0 main::@5/(const word[$14]) main::lintab3#0 ) + [103] (word*) lin16u_gen::lintab#10 ← phi( main/(const word[$14]) main::lintab1#0 main::@4/(const word[$14]) main::lintab2#0 main::@5/(const word[$14]) main::lintab3#0 ) [103] (word) lin16u_gen::min#3 ← phi( main/(word) $22d main::@4/(word) $79cb main::@5/(byte) 0 ) [103] (word) lin16u_gen::max#3 ← phi( main/(word) $7461 main::@4/(word) $f781 main::@5/(word) $6488 ) [104] (word) lin16u_gen::ampl#0 ← (word) lin16u_gen::max#3 - (word) lin16u_gen::min#3 @@ -229,23 +229,23 @@ lin16u_gen::@4: scope:[lin16u_gen] from lin16u_gen::@3 [112] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [113] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [114] (dword) lin16u_gen::val#0 ← (word) lin16u_gen::min#3 dw= (word) 0 + to:lin16u_gen::@2 +lin16u_gen::@2: scope:[lin16u_gen] from lin16u_gen::@1 lin16u_gen::@4 + [115] (word*) lin16u_gen::lintab#9 ← phi( lin16u_gen::@1/(word*) lin16u_gen::lintab#3 lin16u_gen::@4/(word*) lin16u_gen::lintab#10 ) + [115] (dword) lin16u_gen::val#4 ← phi( lin16u_gen::@1/(dword) lin16u_gen::val#1 lin16u_gen::@4/(dword) lin16u_gen::val#0 ) + [115] (word) lin16u_gen::i#4 ← phi( lin16u_gen::@1/(word) lin16u_gen::i#1 lin16u_gen::@4/(byte) 0 ) + [116] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#4 + [117] *((word*) lin16u_gen::lintab#9) ← (word~) lin16u_gen::$6 + [118] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#4 + (dword) lin16u_gen::step#0 + [119] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#9 + (const byte) SIZEOF_WORD + [120] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#4 to:lin16u_gen::@1 -lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@2 lin16u_gen::@4 - [115] (word*) lin16u_gen::lintab#4 ← phi( lin16u_gen::@2/(word*) lin16u_gen::lintab#3 lin16u_gen::@4/(word*) lin16u_gen::lintab#6 ) - [115] (dword) lin16u_gen::val#2 ← phi( lin16u_gen::@2/(dword) lin16u_gen::val#1 lin16u_gen::@4/(dword) lin16u_gen::val#0 ) - [115] (word) lin16u_gen::i#2 ← phi( lin16u_gen::@2/(word) lin16u_gen::i#1 lin16u_gen::@4/(byte) 0 ) - [116] if((word) lin16u_gen::i#2<(byte) $14) goto lin16u_gen::@2 +lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@2 + [121] if((word) lin16u_gen::i#1<(byte) $14) goto lin16u_gen::@2 to:lin16u_gen::@return lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@1 - [117] return + [122] return to:@return -lin16u_gen::@2: scope:[lin16u_gen] from lin16u_gen::@1 - [118] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#2 - [119] *((word*) lin16u_gen::lintab#4) ← (word~) lin16u_gen::$6 - [120] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 - [121] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (const byte) SIZEOF_WORD - [122] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 - to:lin16u_gen::@1 divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@3 [123] (word) divr16u::divisor#6 ← phi( lin16u_gen/(byte) $14-(byte) 1 lin16u_gen::@3/(byte) $14-(byte) 1 ) [123] (word) divr16u::dividend#5 ← phi( lin16u_gen/(word) divr16u::dividend#1 lin16u_gen::@3/(byte) 0 ) diff --git a/src/test/ref/linegen.log b/src/test/ref/linegen.log index 3c4c2197d..8f56c1800 100644 --- a/src/test/ref/linegen.log +++ b/src/test/ref/linegen.log @@ -1625,17 +1625,25 @@ Eliminating unused variable - keeping the phi block (word) rem16u#22 Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const word) rem16u#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $10 in if((byte) divr16u::i#1!=(number) $10) goto divr16u::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast $10 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $10 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::i#1 = (byte) main::i#10 +Alias (byte) main::i#12 = (byte) main::i#17 (byte) main::i#13 (byte) main::i#18 (byte) main::i#14 (byte) main::i#19 (byte) main::i#15 (byte) main::i#20 (byte) main::i#16 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#21 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant (const void*) memset::str#0 = (void*)print_line_cursor#0 Successful SSA optimization Pass2ConstantIdentification Constant value identified (byte*)memset::str#0 in [18] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0 Constant value identified (byte*)memset::str#0 in [20] (byte*) memset::dst#0 ← (byte*)(const void*) memset::str#0 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [130] if((const byte) main::i#0<(byte) $14) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Constant (const byte*) memset::$2 = (byte*)memset::str#0 Constant (const byte*) memset::dst#0 = (byte*)memset::str#0 Successful SSA optimization Pass2ConstantIdentification @@ -1643,9 +1651,16 @@ Constant right-side identified [18] (byte*) memset::end#0 ← (const byte*) mems Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Successful SSA optimization Pass2ConstantIdentification -Rewriting multiplication to use shift [71] (byte~) main::$27 ← (byte) main::i#10 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [75] (byte~) main::$28 ← (byte) main::i#10 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [79] (byte~) main::$29 ← (byte) main::i#10 * (const byte) SIZEOF_WORD +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) memset::dst#1 = (byte*) memset::dst#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) memset::dst#5 (const byte*) memset::dst#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [118] if((const byte*) memset::dst#0!=(const byte*) memset::end#0) goto memset::@5 +Successful SSA optimization Pass2ConstantIfs +Rewriting multiplication to use shift [71] (byte~) main::$27 ← (byte) main::i#12 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [75] (byte~) main::$28 ← (byte) main::i#12 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [79] (byte~) main::$29 ← (byte) main::i#12 * (const byte) SIZEOF_WORD Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -1735,15 +1750,29 @@ Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::divisor#0 = $14-1 Constant (const word) divr16u::divisor#1 = $14-1 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Inlining constant with var siblings (const word) divr16u::divisor#0 Inlining constant with var siblings (const word) divr16u::divisor#1 Constant inlined divr16u::divisor#1 = (byte) $14-(byte) 1 Constant inlined divr16u::divisor#0 = (byte) $14-(byte) 1 Successful SSA optimization Pass2ConstantInlining +Alias (word) lin16u_gen::i#1 = (word) lin16u_gen::i#2 +Alias (dword) lin16u_gen::val#1 = (dword) lin16u_gen::val#2 +Alias (word*) lin16u_gen::lintab#3 = (word*) lin16u_gen::lintab#4 +Alias (dword) lin16u_gen::val#0 = (dword) lin16u_gen::val#5 +Alias (word*) lin16u_gen::lintab#10 = (word*) lin16u_gen::lintab#6 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (word) lin16u_gen::i#5 (byte) 0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [116] if((byte) 0<(byte) $14) goto lin16u_gen::@2 +Successful SSA optimization Pass2ConstantIfs Added new block during phi lifting divr16u::@8(between divr16u::@3 and divr16u::@1) Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u::@2) Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3) +Added new block during phi lifting memset::@10(between memset::@4 and memset::@5) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) +Added new block during phi lifting main::@33(between main::@1 and main::@2) +Added new block during phi lifting lin16u_gen::@9(between lin16u_gen::@1 and lin16u_gen::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @20 @@ -1761,6 +1790,7 @@ Adding NOP phi() at start of main::@13 Adding NOP phi() at start of main::@15 Adding NOP phi() at start of main::@16 Adding NOP phi() at start of main::@17 +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of main::@26 Adding NOP phi() at start of main::@28 Adding NOP phi() at start of main::@30 @@ -1772,80 +1802,87 @@ Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@4_1 Adding NOP phi() at start of memset::@1 CALL GRAPH Calls in [] to main:5 -Calls in [main] to lin16u_gen:9 lin16u_gen:11 lin16u_gen:13 print_cls:15 print_str:17 print_word:19 print_str:21 print_word:23 print_str:25 print_word:27 print_ln:29 print_str:34 print_word:36 print_str:38 print_word:40 print_str:42 print_word:44 print_ln:46 print_byte:52 print_str:54 print_word:58 print_str:60 print_word:64 print_str:66 print_word:70 print_ln:72 -Calls in [print_word] to print_byte:87 print_byte:91 -Calls in [print_byte] to print_char:99 print_char:104 -Calls in [print_cls] to memset:123 -Calls in [lin16u_gen] to divr16u:139 divr16u:144 +Calls in [main] to lin16u_gen:9 lin16u_gen:11 lin16u_gen:13 print_cls:15 print_str:17 print_word:19 print_str:21 print_word:23 print_str:25 print_word:27 print_ln:29 print_byte:36 print_str:38 print_word:42 print_str:44 print_word:48 print_str:50 print_word:54 print_ln:56 print_str:60 print_word:62 print_str:64 print_word:66 print_str:68 print_word:70 print_ln:72 +Calls in [print_word] to print_byte:88 print_byte:92 +Calls in [print_byte] to print_char:100 print_char:105 +Calls in [print_cls] to memset:124 +Calls in [lin16u_gen] to divr16u:141 divr16u:146 Created 29 initial phi equivalence classes Coalesced [20] print_char_cursor#92 ← print_char_cursor#11 Coalesced (already) [24] print_char_cursor#93 ← print_char_cursor#11 -Not coalescing [33] print_char_cursor#99 ← print_line_cursor#1 -Coalesced (already) [37] print_char_cursor#97 ← print_char_cursor#11 -Coalesced (already) [41] print_char_cursor#98 ← print_char_cursor#11 -Coalesced [45] print_line_cursor#51 ← print_line_cursor#1 -Coalesced [50] print_byte::b#5 ← print_byte::b#2 -Not coalescing [51] print_char_cursor#102 ← print_line_cursor#1 -Coalesced (already) [53] print_char_cursor#94 ← print_char_cursor#11 -Coalesced [57] print_word::w#11 ← print_word::w#3 -Coalesced (already) [59] print_char_cursor#95 ← print_char_cursor#11 -Coalesced [63] print_word::w#12 ← print_word::w#4 -Coalesced (already) [65] print_char_cursor#96 ← print_char_cursor#11 -Coalesced [69] print_word::w#13 ← print_word::w#5 -Coalesced (already) [71] print_line_cursor#50 ← print_line_cursor#1 -Coalesced [74] main::i#12 ← main::i#1 -Coalesced [76] print_line_cursor#52 ← print_line_cursor#21 -Coalesced (already) [82] print_line_cursor#53 ← print_line_cursor#1 -Coalesced [85] print_byte::b#6 ← print_byte::b#0 -Coalesced [86] print_char_cursor#103 ← print_char_cursor#2 -Coalesced [89] print_byte::b#7 ← print_byte::b#1 -Coalesced [90] print_char_cursor#104 ← print_char_cursor#11 -Coalesced [97] print_char::ch#3 ← print_char::ch#0 -Coalesced [98] print_char_cursor#105 ← print_char_cursor#81 -Coalesced [102] print_char::ch#4 ← print_char::ch#1 -Coalesced (already) [103] print_char_cursor#106 ← print_char_cursor#11 -Coalesced [112] print_str::str#13 ← print_str::str#12 -Coalesced (already) [113] print_char_cursor#100 ← print_char_cursor#86 -Coalesced [120] print_str::str#14 ← print_str::str#0 -Coalesced [121] print_char_cursor#101 ← print_char_cursor#1 -Coalesced [134] memset::dst#4 ← memset::dst#1 -Coalesced [138] divr16u::dividend#9 ← divr16u::dividend#1 -Coalesced [143] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [149] lin16u_gen::val#5 ← lin16u_gen::val#0 -Coalesced [150] lin16u_gen::lintab#10 ← lin16u_gen::lintab#6 -Coalesced [159] lin16u_gen::i#4 ← lin16u_gen::i#1 -Coalesced [160] lin16u_gen::val#4 ← lin16u_gen::val#1 -Coalesced [161] lin16u_gen::lintab#9 ← lin16u_gen::lintab#3 -Coalesced [163] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [164] divr16u::dividend#10 ← divr16u::dividend#5 -Coalesced [171] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [178] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [179] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [185] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [186] divr16u::dividend#11 ← divr16u::dividend#0 -Coalesced [187] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [188] divr16u::i#7 ← divr16u::i#1 -Coalesced [189] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [190] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [191] divr16u::rem#15 ← divr16u::rem#0 +Coalesced [34] print_byte::b#5 ← print_byte::b#2 +Not coalescing [35] print_char_cursor#102 ← print_line_cursor#1 +Coalesced (already) [37] print_char_cursor#94 ← print_char_cursor#11 +Coalesced [41] print_word::w#11 ← print_word::w#3 +Coalesced (already) [43] print_char_cursor#95 ← print_char_cursor#11 +Coalesced [47] print_word::w#12 ← print_word::w#4 +Coalesced (already) [49] print_char_cursor#96 ← print_char_cursor#11 +Coalesced [53] print_word::w#13 ← print_word::w#5 +Coalesced [55] print_line_cursor#50 ← print_line_cursor#1 +Not coalescing [59] print_char_cursor#99 ← print_line_cursor#1 +Coalesced (already) [63] print_char_cursor#97 ← print_char_cursor#11 +Coalesced (already) [67] print_char_cursor#98 ← print_char_cursor#11 +Coalesced (already) [71] print_line_cursor#51 ← print_line_cursor#1 +Coalesced [75] main::i#22 ← main::i#1 +Coalesced [77] print_line_cursor#52 ← print_line_cursor#21 +Coalesced (already) [83] print_line_cursor#53 ← print_line_cursor#1 +Coalesced [86] print_byte::b#6 ← print_byte::b#0 +Coalesced [87] print_char_cursor#103 ← print_char_cursor#2 +Coalesced [90] print_byte::b#7 ← print_byte::b#1 +Coalesced [91] print_char_cursor#104 ← print_char_cursor#11 +Coalesced [98] print_char::ch#3 ← print_char::ch#0 +Coalesced [99] print_char_cursor#105 ← print_char_cursor#81 +Coalesced [103] print_char::ch#4 ← print_char::ch#1 +Coalesced (already) [104] print_char_cursor#106 ← print_char_cursor#11 +Coalesced [113] print_str::str#13 ← print_str::str#12 +Coalesced (already) [114] print_char_cursor#100 ← print_char_cursor#86 +Coalesced [121] print_str::str#14 ← print_str::str#0 +Coalesced [122] print_char_cursor#101 ← print_char_cursor#1 +Coalesced [136] memset::dst#6 ← memset::dst#1 +Coalesced [140] divr16u::dividend#9 ← divr16u::dividend#1 +Coalesced [145] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [151] lin16u_gen::val#7 ← lin16u_gen::val#0 +Coalesced [152] lin16u_gen::lintab#12 ← lin16u_gen::lintab#10 +Coalesced [161] lin16u_gen::i#6 ← lin16u_gen::i#1 +Coalesced [162] lin16u_gen::val#6 ← lin16u_gen::val#1 +Coalesced [163] lin16u_gen::lintab#11 ← lin16u_gen::lintab#3 +Coalesced [165] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [166] divr16u::dividend#10 ← divr16u::dividend#5 +Coalesced [173] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [180] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [181] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [187] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [188] divr16u::dividend#11 ← divr16u::dividend#0 +Coalesced [189] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [190] divr16u::i#7 ← divr16u::i#1 +Coalesced [191] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [192] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [193] divr16u::rem#15 ← divr16u::rem#0 Coalesced down to 18 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) @20 Culled Empty Block (label) @37 Culled Empty Block (label) @47 Culled Empty Block (label) main::@17 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@32 +Culled Empty Block (label) main::@33 Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) print_ln::@3 Culled Empty Block (label) print_word::@2 Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) print_cls::@1 Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@4_1 Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@10 +Culled Empty Block (label) lin16u_gen::@1_1 +Culled Empty Block (label) lin16u_gen::@9 Culled Empty Block (label) divr16u::@8 Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@9 @@ -1892,16 +1929,16 @@ Adding NOP phi() at start of main::@10 Adding NOP phi() at start of main::@11 Adding NOP phi() at start of main::@12 Adding NOP phi() at start of main::@13 +Adding NOP phi() at start of main::@14 +Adding NOP phi() at start of main::@16 +Adding NOP phi() at start of main::@18 +Adding NOP phi() at start of main::@20 Adding NOP phi() at start of main::@22 Adding NOP phi() at start of main::@23 Adding NOP phi() at start of main::@24 Adding NOP phi() at start of main::@25 Adding NOP phi() at start of main::@26 Adding NOP phi() at start of main::@27 -Adding NOP phi() at start of main::@14 -Adding NOP phi() at start of main::@16 -Adding NOP phi() at start of main::@18 -Adding NOP phi() at start of main::@20 Adding NOP phi() at start of print_cls Adding NOP phi() at start of memset @@ -1958,81 +1995,81 @@ main::@12: scope:[main] from main::@11 main::@13: scope:[main] from main::@12 [24] phi() [25] call print_ln - to:main::@1 -main::@1: scope:[main] from main::@13 main::@21 - [26] (byte) main::i#10 ← phi( main::@13/(byte) 0 main::@21/(byte) main::i#1 ) - [27] if((byte) main::i#10<(byte) $14) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [28] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 - [29] call print_str - to:main::@22 -main::@22: scope:[main] from main::@3 - [30] phi() - [31] call print_word - to:main::@23 -main::@23: scope:[main] from main::@22 - [32] phi() - [33] call print_str - to:main::@24 -main::@24: scope:[main] from main::@23 - [34] phi() - [35] call print_word - to:main::@25 -main::@25: scope:[main] from main::@24 - [36] phi() - [37] call print_str - to:main::@26 -main::@26: scope:[main] from main::@25 - [38] phi() - [39] call print_word - to:main::@27 -main::@27: scope:[main] from main::@26 - [40] phi() - [41] call print_ln - to:main::@return -main::@return: scope:[main] from main::@27 - [42] return - to:@return -main::@2: scope:[main] from main::@1 - [43] (byte) print_byte::b#2 ← (byte) main::i#10 - [44] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 - [45] call print_byte + to:main::@2 +main::@2: scope:[main] from main::@1 main::@13 + [26] (byte) main::i#12 ← phi( main::@1/(byte) main::i#1 main::@13/(byte) 0 ) + [27] (byte) print_byte::b#2 ← (byte) main::i#12 + [28] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 + [29] call print_byte to:main::@14 main::@14: scope:[main] from main::@2 - [46] phi() - [47] call print_str + [30] phi() + [31] call print_str to:main::@15 main::@15: scope:[main] from main::@14 - [48] (byte~) main::$27 ← (byte) main::i#10 << (byte) 1 - [49] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) - [50] call print_word + [32] (byte~) main::$27 ← (byte) main::i#12 << (byte) 1 + [33] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) + [34] call print_word to:main::@16 main::@16: scope:[main] from main::@15 - [51] phi() - [52] call print_str + [35] phi() + [36] call print_str to:main::@17 main::@17: scope:[main] from main::@16 - [53] (byte~) main::$28 ← (byte) main::i#10 << (byte) 1 - [54] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) - [55] call print_word + [37] (byte~) main::$28 ← (byte) main::i#12 << (byte) 1 + [38] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) + [39] call print_word to:main::@18 main::@18: scope:[main] from main::@17 - [56] phi() - [57] call print_str + [40] phi() + [41] call print_str to:main::@19 main::@19: scope:[main] from main::@18 - [58] (byte~) main::$29 ← (byte) main::i#10 << (byte) 1 - [59] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) - [60] call print_word + [42] (byte~) main::$29 ← (byte) main::i#12 << (byte) 1 + [43] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) + [44] call print_word to:main::@20 main::@20: scope:[main] from main::@19 - [61] phi() - [62] call print_ln + [45] phi() + [46] call print_ln to:main::@21 main::@21: scope:[main] from main::@20 - [63] (byte) main::i#1 ← ++ (byte) main::i#10 + [47] (byte) main::i#1 ← ++ (byte) main::i#12 to:main::@1 +main::@1: scope:[main] from main::@21 + [48] if((byte) main::i#1<(byte) $14) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [49] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 + [50] call print_str + to:main::@22 +main::@22: scope:[main] from main::@3 + [51] phi() + [52] call print_word + to:main::@23 +main::@23: scope:[main] from main::@22 + [53] phi() + [54] call print_str + to:main::@24 +main::@24: scope:[main] from main::@23 + [55] phi() + [56] call print_word + to:main::@25 +main::@25: scope:[main] from main::@24 + [57] phi() + [58] call print_str + to:main::@26 +main::@26: scope:[main] from main::@25 + [59] phi() + [60] call print_word + to:main::@27 +main::@27: scope:[main] from main::@26 + [61] phi() + [62] call print_ln + to:main::@return +main::@return: scope:[main] from main::@27 + [63] return + to:@return print_ln: scope:[print_ln] from main::@13 main::@20 main::@27 [64] (byte*) print_line_cursor#21 ← phi( main::@13/(byte*) 1024 main::@20/(byte*) print_line_cursor#1 main::@27/(byte*) print_line_cursor#1 ) to:print_ln::@1 @@ -2106,20 +2143,20 @@ print_cls::@return: scope:[print_cls] from print_cls to:@return memset: scope:[memset] from print_cls [97] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [98] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [99] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [100] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [98] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [99] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [101] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [100] return + [102] return to:@return -memset::@2: scope:[memset] from memset::@1 - [101] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [102] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 lin16u_gen: scope:[lin16u_gen] from main main::@4 main::@5 - [103] (word*) lin16u_gen::lintab#6 ← phi( main/(const word[$14]) main::lintab1#0 main::@4/(const word[$14]) main::lintab2#0 main::@5/(const word[$14]) main::lintab3#0 ) + [103] (word*) lin16u_gen::lintab#10 ← phi( main/(const word[$14]) main::lintab1#0 main::@4/(const word[$14]) main::lintab2#0 main::@5/(const word[$14]) main::lintab3#0 ) [103] (word) lin16u_gen::min#3 ← phi( main/(word) $22d main::@4/(word) $79cb main::@5/(byte) 0 ) [103] (word) lin16u_gen::max#3 ← phi( main/(word) $7461 main::@4/(word) $f781 main::@5/(word) $6488 ) [104] (word) lin16u_gen::ampl#0 ← (word) lin16u_gen::max#3 - (word) lin16u_gen::min#3 @@ -2137,23 +2174,23 @@ lin16u_gen::@4: scope:[lin16u_gen] from lin16u_gen::@3 [112] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [113] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [114] (dword) lin16u_gen::val#0 ← (word) lin16u_gen::min#3 dw= (word) 0 + to:lin16u_gen::@2 +lin16u_gen::@2: scope:[lin16u_gen] from lin16u_gen::@1 lin16u_gen::@4 + [115] (word*) lin16u_gen::lintab#9 ← phi( lin16u_gen::@1/(word*) lin16u_gen::lintab#3 lin16u_gen::@4/(word*) lin16u_gen::lintab#10 ) + [115] (dword) lin16u_gen::val#4 ← phi( lin16u_gen::@1/(dword) lin16u_gen::val#1 lin16u_gen::@4/(dword) lin16u_gen::val#0 ) + [115] (word) lin16u_gen::i#4 ← phi( lin16u_gen::@1/(word) lin16u_gen::i#1 lin16u_gen::@4/(byte) 0 ) + [116] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#4 + [117] *((word*) lin16u_gen::lintab#9) ← (word~) lin16u_gen::$6 + [118] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#4 + (dword) lin16u_gen::step#0 + [119] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#9 + (const byte) SIZEOF_WORD + [120] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#4 to:lin16u_gen::@1 -lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@2 lin16u_gen::@4 - [115] (word*) lin16u_gen::lintab#4 ← phi( lin16u_gen::@2/(word*) lin16u_gen::lintab#3 lin16u_gen::@4/(word*) lin16u_gen::lintab#6 ) - [115] (dword) lin16u_gen::val#2 ← phi( lin16u_gen::@2/(dword) lin16u_gen::val#1 lin16u_gen::@4/(dword) lin16u_gen::val#0 ) - [115] (word) lin16u_gen::i#2 ← phi( lin16u_gen::@2/(word) lin16u_gen::i#1 lin16u_gen::@4/(byte) 0 ) - [116] if((word) lin16u_gen::i#2<(byte) $14) goto lin16u_gen::@2 +lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@2 + [121] if((word) lin16u_gen::i#1<(byte) $14) goto lin16u_gen::@2 to:lin16u_gen::@return lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@1 - [117] return + [122] return to:@return -lin16u_gen::@2: scope:[lin16u_gen] from lin16u_gen::@1 - [118] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#2 - [119] *((word*) lin16u_gen::lintab#4) ← (word~) lin16u_gen::$6 - [120] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 - [121] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (const byte) SIZEOF_WORD - [122] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 - to:lin16u_gen::@1 divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@3 [123] (word) divr16u::divisor#6 ← phi( lin16u_gen/(byte) $14-(byte) 1 lin16u_gen::@3/(byte) $14-(byte) 1 ) [123] (word) divr16u::dividend#5 ← phi( lin16u_gen/(word) divr16u::dividend#1 lin16u_gen::@3/(byte) 0 ) @@ -2232,13 +2269,13 @@ VARIABLE REGISTER WEIGHTS (word) lin16u_gen::ampl (word) lin16u_gen::ampl#0 4.0 (word) lin16u_gen::i -(word) lin16u_gen::i#1 22.0 -(word) lin16u_gen::i#2 5.5 +(word) lin16u_gen::i#1 16.5 +(word) lin16u_gen::i#4 4.4 (word) lin16u_gen::length (word*) lin16u_gen::lintab -(word*) lin16u_gen::lintab#3 11.0 -(word*) lin16u_gen::lintab#4 7.000000000000001 -(word*) lin16u_gen::lintab#6 0.16666666666666666 +(word*) lin16u_gen::lintab#10 0.16666666666666666 +(word*) lin16u_gen::lintab#3 7.333333333333333 +(word*) lin16u_gen::lintab#9 8.75 (word) lin16u_gen::max (word) lin16u_gen::max#3 2.0 (word) lin16u_gen::min @@ -2251,23 +2288,23 @@ VARIABLE REGISTER WEIGHTS (word) lin16u_gen::stepi#0 0.8 (dword) lin16u_gen::val (dword) lin16u_gen::val#0 4.0 -(dword) lin16u_gen::val#1 7.333333333333333 -(dword) lin16u_gen::val#2 8.75 +(dword) lin16u_gen::val#1 5.5 +(dword) lin16u_gen::val#4 11.666666666666666 (void()) main() (byte~) main::$27 22.0 (byte~) main::$28 22.0 (byte~) main::$29 22.0 (byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#10 3.5 +(byte) main::i#1 16.5 +(byte) main::i#12 3.142857142857143 (word[$14]) main::lintab1 (word[$14]) main::lintab2 (word[$14]) main::lintab3 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst -(byte*) memset::dst#1 22.0 -(byte*) memset::dst#2 14.666666666666666 +(byte*) memset::dst#1 16.5 +(byte*) memset::dst#4 16.5 (byte*) memset::end (word) memset::num (void*) memset::return @@ -2317,19 +2354,19 @@ VARIABLE REGISTER WEIGHTS (word) rem16u#1 0.8 Initial phi equivalence classes -[ main::i#10 main::i#1 ] +[ main::i#12 main::i#1 ] [ print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] [ print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ] [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] [ print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#102 print_char_cursor#2 print_char_cursor#11 print_char_cursor#99 print_char_cursor#1 ] [ print_str::str#10 print_str::str#12 print_str::str#0 ] -[ memset::dst#2 memset::dst#1 ] +[ memset::dst#4 memset::dst#1 ] [ lin16u_gen::max#3 ] [ lin16u_gen::min#3 ] -[ lin16u_gen::i#2 lin16u_gen::i#1 ] -[ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] -[ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ] +[ lin16u_gen::i#4 lin16u_gen::i#1 ] +[ lin16u_gen::val#4 lin16u_gen::val#1 lin16u_gen::val#0 ] +[ lin16u_gen::lintab#9 lin16u_gen::lintab#3 lin16u_gen::lintab#10 ] [ divr16u::divisor#6 ] [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] @@ -2351,19 +2388,19 @@ Added variable divr16u::$1 to zero page equivalence class [ divr16u::$1 ] Added variable divr16u::$2 to zero page equivalence class [ divr16u::$2 ] Added variable rem16u#1 to zero page equivalence class [ rem16u#1 ] Complete equivalence classes -[ main::i#10 main::i#1 ] +[ main::i#12 main::i#1 ] [ print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] [ print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ] [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] [ print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#102 print_char_cursor#2 print_char_cursor#11 print_char_cursor#99 print_char_cursor#1 ] [ print_str::str#10 print_str::str#12 print_str::str#0 ] -[ memset::dst#2 memset::dst#1 ] +[ memset::dst#4 memset::dst#1 ] [ lin16u_gen::max#3 ] [ lin16u_gen::min#3 ] -[ lin16u_gen::i#2 lin16u_gen::i#1 ] -[ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] -[ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ] +[ lin16u_gen::i#4 lin16u_gen::i#1 ] +[ lin16u_gen::val#4 lin16u_gen::val#1 lin16u_gen::val#0 ] +[ lin16u_gen::lintab#9 lin16u_gen::lintab#3 lin16u_gen::lintab#10 ] [ divr16u::divisor#6 ] [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] @@ -2384,19 +2421,19 @@ Complete equivalence classes [ divr16u::$1 ] [ divr16u::$2 ] [ rem16u#1 ] -Allocated zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#12 main::i#1 ] Allocated zp ZP_WORD:3 [ print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] Allocated zp ZP_WORD:5 [ print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ] Allocated zp ZP_BYTE:7 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Allocated zp ZP_BYTE:8 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] Allocated zp ZP_WORD:9 [ print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#102 print_char_cursor#2 print_char_cursor#11 print_char_cursor#99 print_char_cursor#1 ] Allocated zp ZP_WORD:11 [ print_str::str#10 print_str::str#12 print_str::str#0 ] -Allocated zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 ] +Allocated zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 ] Allocated zp ZP_WORD:15 [ lin16u_gen::max#3 ] Allocated zp ZP_WORD:17 [ lin16u_gen::min#3 ] -Allocated zp ZP_WORD:19 [ lin16u_gen::i#2 lin16u_gen::i#1 ] -Allocated zp ZP_DWORD:21 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] -Allocated zp ZP_WORD:25 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ] +Allocated zp ZP_WORD:19 [ lin16u_gen::i#4 lin16u_gen::i#1 ] +Allocated zp ZP_DWORD:21 [ lin16u_gen::val#4 lin16u_gen::val#1 lin16u_gen::val#0 ] +Allocated zp ZP_WORD:25 [ lin16u_gen::lintab#9 lin16u_gen::lintab#3 lin16u_gen::lintab#10 ] Allocated zp ZP_WORD:27 [ divr16u::divisor#6 ] Allocated zp ZP_WORD:29 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] Allocated zp ZP_WORD:31 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] @@ -2457,7 +2494,7 @@ main: { // [5] call lin16u_gen // [103] phi from main to lin16u_gen [phi:main->lin16u_gen] lin16u_gen_from_main: - // [103] phi (word*) lin16u_gen::lintab#6 = (const word[$14]) main::lintab1#0 [phi:main->lin16u_gen#0] -- pwuz1=pwuc1 + // [103] phi (word*) lin16u_gen::lintab#10 = (const word[$14]) main::lintab1#0 [phi:main->lin16u_gen#0] -- pwuz1=pwuc1 lda #lintab1 @@ -2481,7 +2518,7 @@ main: { // [7] call lin16u_gen // [103] phi from main::@4 to lin16u_gen [phi:main::@4->lin16u_gen] lin16u_gen_from_b4: - // [103] phi (word*) lin16u_gen::lintab#6 = (const word[$14]) main::lintab2#0 [phi:main::@4->lin16u_gen#0] -- pwuz1=pwuc1 + // [103] phi (word*) lin16u_gen::lintab#10 = (const word[$14]) main::lintab2#0 [phi:main::@4->lin16u_gen#0] -- pwuz1=pwuc1 lda #lintab2 @@ -2505,7 +2542,7 @@ main: { // [9] call lin16u_gen // [103] phi from main::@5 to lin16u_gen [phi:main::@5->lin16u_gen] lin16u_gen_from_b5: - // [103] phi (word*) lin16u_gen::lintab#6 = (const word[$14]) main::lintab3#0 [phi:main::@5->lin16u_gen#0] -- pwuz1=pwuc1 + // [103] phi (word*) lin16u_gen::lintab#10 = (const word[$14]) main::lintab3#0 [phi:main::@5->lin16u_gen#0] -- pwuz1=pwuc1 lda #lintab3 @@ -2635,145 +2672,38 @@ main: { lda #>$400 sta print_line_cursor+1 jsr print_ln - // [26] phi from main::@13 to main::@1 [phi:main::@13->main::@1] - b1_from_b13: - // [26] phi (byte) main::i#10 = (byte) 0 [phi:main::@13->main::@1#0] -- vbuz1=vbuc1 + // [26] phi from main::@13 to main::@2 [phi:main::@13->main::@2] + b2_from_b13: + // [26] phi (byte) main::i#12 = (byte) 0 [phi:main::@13->main::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [27] if((byte) main::i#10<(byte) $14) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$14 - bcc b2 - jmp b3 - // main::@3 - b3: - // [28] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 - lda print_line_cursor - sta print_char_cursor - lda print_line_cursor+1 - sta print_char_cursor+1 - // [29] call print_str - // [87] phi from main::@3 to print_str [phi:main::@3->print_str] - print_str_from_b3: - // [87] phi (byte*) print_char_cursor#86 = (byte*~) print_char_cursor#99 [phi:main::@3->print_str#0] -- register_copy - // [87] phi (byte*) print_str::str#12 = (const string) main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - // [30] phi from main::@3 to main::@22 [phi:main::@3->main::@22] - b22_from_b3: - jmp b22 - // main::@22 - b22: - // [31] call print_word - // [69] phi from main::@22 to print_word [phi:main::@22->print_word] - print_word_from_b22: - // [69] phi (word) print_word::w#10 = (word) $7461 [phi:main::@22->print_word#0] -- vwuz1=vwuc1 - lda #<$7461 - sta print_word.w - lda #>$7461 - sta print_word.w+1 - jsr print_word - // [32] phi from main::@22 to main::@23 [phi:main::@22->main::@23] - b23_from_b22: - jmp b23 - // main::@23 - b23: - // [33] call print_str - // [87] phi from main::@23 to print_str [phi:main::@23->print_str] - print_str_from_b23: - // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@23->print_str#0] -- register_copy - // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - // [34] phi from main::@23 to main::@24 [phi:main::@23->main::@24] - b24_from_b23: - jmp b24 - // main::@24 - b24: - // [35] call print_word - // [69] phi from main::@24 to print_word [phi:main::@24->print_word] - print_word_from_b24: - // [69] phi (word) print_word::w#10 = (word) $f781 [phi:main::@24->print_word#0] -- vwuz1=vwuc1 - lda #<$f781 - sta print_word.w - lda #>$f781 - sta print_word.w+1 - jsr print_word - // [36] phi from main::@24 to main::@25 [phi:main::@24->main::@25] - b25_from_b24: - jmp b25 - // main::@25 - b25: - // [37] call print_str - // [87] phi from main::@25 to print_str [phi:main::@25->print_str] - print_str_from_b25: - // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@25->print_str#0] -- register_copy - // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - // [38] phi from main::@25 to main::@26 [phi:main::@25->main::@26] - b26_from_b25: - jmp b26 - // main::@26 - b26: - // [39] call print_word - // [69] phi from main::@26 to print_word [phi:main::@26->print_word] - print_word_from_b26: - // [69] phi (word) print_word::w#10 = (word) $6488 [phi:main::@26->print_word#0] -- vwuz1=vwuc1 - lda #<$6488 - sta print_word.w - lda #>$6488 - sta print_word.w+1 - jsr print_word - // [40] phi from main::@26 to main::@27 [phi:main::@26->main::@27] - b27_from_b26: - jmp b27 - // main::@27 - b27: - // [41] call print_ln - // [64] phi from main::@27 to print_ln [phi:main::@27->print_ln] - print_ln_from_b27: - // [64] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@27->print_ln#0] -- register_copy - jsr print_ln - jmp breturn - // main::@return - breturn: - // [42] return - rts + jmp b2 + // [26] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [26] phi (byte) main::i#12 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 // main::@2 b2: - // [43] (byte) print_byte::b#2 ← (byte) main::i#10 -- vbuz1=vbuz2 + // [27] (byte) print_byte::b#2 ← (byte) main::i#12 -- vbuz1=vbuz2 lda i sta print_byte.b - // [44] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [28] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 - // [45] call print_byte + // [29] call print_byte // [75] phi from main::@2 to print_byte [phi:main::@2->print_byte] print_byte_from_b2: // [75] phi (byte*) print_char_cursor#81 = (byte*~) print_char_cursor#102 [phi:main::@2->print_byte#0] -- register_copy // [75] phi (byte) print_byte::b#3 = (byte) print_byte::b#2 [phi:main::@2->print_byte#1] -- register_copy jsr print_byte - // [46] phi from main::@2 to main::@14 [phi:main::@2->main::@14] + // [30] phi from main::@2 to main::@14 [phi:main::@2->main::@14] b14_from_b2: jmp b14 // main::@14 b14: - // [47] call print_str + // [31] call print_str // [87] phi from main::@14 to print_str [phi:main::@14->print_str] print_str_from_b14: // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@14->print_str#0] -- register_copy @@ -2786,27 +2716,27 @@ main: { jmp b15 // main::@15 b15: - // [48] (byte~) main::$27 ← (byte) main::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [32] (byte~) main::$27 ← (byte) main::i#12 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _27 - // [49] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) -- vwuz1=pwuc1_derefidx_vbuz2 + // [33] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) -- vwuz1=pwuc1_derefidx_vbuz2 ldy _27 lda lintab1,y sta print_word.w lda lintab1+1,y sta print_word.w+1 - // [50] call print_word + // [34] call print_word // [69] phi from main::@15 to print_word [phi:main::@15->print_word] print_word_from_b15: // [69] phi (word) print_word::w#10 = (word) print_word::w#3 [phi:main::@15->print_word#0] -- register_copy jsr print_word - // [51] phi from main::@15 to main::@16 [phi:main::@15->main::@16] + // [35] phi from main::@15 to main::@16 [phi:main::@15->main::@16] b16_from_b15: jmp b16 // main::@16 b16: - // [52] call print_str + // [36] call print_str // [87] phi from main::@16 to print_str [phi:main::@16->print_str] print_str_from_b16: // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@16->print_str#0] -- register_copy @@ -2819,27 +2749,27 @@ main: { jmp b17 // main::@17 b17: - // [53] (byte~) main::$28 ← (byte) main::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [37] (byte~) main::$28 ← (byte) main::i#12 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _28 - // [54] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) -- vwuz1=pwuc1_derefidx_vbuz2 + // [38] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) -- vwuz1=pwuc1_derefidx_vbuz2 ldy _28 lda lintab2,y sta print_word.w lda lintab2+1,y sta print_word.w+1 - // [55] call print_word + // [39] call print_word // [69] phi from main::@17 to print_word [phi:main::@17->print_word] print_word_from_b17: // [69] phi (word) print_word::w#10 = (word) print_word::w#4 [phi:main::@17->print_word#0] -- register_copy jsr print_word - // [56] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + // [40] phi from main::@17 to main::@18 [phi:main::@17->main::@18] b18_from_b17: jmp b18 // main::@18 b18: - // [57] call print_str + // [41] call print_str // [87] phi from main::@18 to print_str [phi:main::@18->print_str] print_str_from_b18: // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@18->print_str#0] -- register_copy @@ -2852,27 +2782,27 @@ main: { jmp b19 // main::@19 b19: - // [58] (byte~) main::$29 ← (byte) main::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [42] (byte~) main::$29 ← (byte) main::i#12 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _29 - // [59] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) -- vwuz1=pwuc1_derefidx_vbuz2 + // [43] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) -- vwuz1=pwuc1_derefidx_vbuz2 ldy _29 lda lintab3,y sta print_word.w lda lintab3+1,y sta print_word.w+1 - // [60] call print_word + // [44] call print_word // [69] phi from main::@19 to print_word [phi:main::@19->print_word] print_word_from_b19: // [69] phi (word) print_word::w#10 = (word) print_word::w#5 [phi:main::@19->print_word#0] -- register_copy jsr print_word - // [61] phi from main::@19 to main::@20 [phi:main::@19->main::@20] + // [45] phi from main::@19 to main::@20 [phi:main::@19->main::@20] b20_from_b19: jmp b20 // main::@20 b20: - // [62] call print_ln + // [46] call print_ln // [64] phi from main::@20 to print_ln [phi:main::@20->print_ln] print_ln_from_b20: // [64] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@20->print_ln#0] -- register_copy @@ -2880,12 +2810,120 @@ main: { jmp b21 // main::@21 b21: - // [63] (byte) main::i#1 ← ++ (byte) main::i#10 -- vbuz1=_inc_vbuz1 + // [47] (byte) main::i#1 ← ++ (byte) main::i#12 -- vbuz1=_inc_vbuz1 inc i - // [26] phi from main::@21 to main::@1 [phi:main::@21->main::@1] - b1_from_b21: - // [26] phi (byte) main::i#10 = (byte) main::i#1 [phi:main::@21->main::@1#0] -- register_copy jmp b1 + // main::@1 + b1: + // [48] if((byte) main::i#1<(byte) $14) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$14 + bcc b2_from_b1 + jmp b3 + // main::@3 + b3: + // [49] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + // [50] call print_str + // [87] phi from main::@3 to print_str [phi:main::@3->print_str] + print_str_from_b3: + // [87] phi (byte*) print_char_cursor#86 = (byte*~) print_char_cursor#99 [phi:main::@3->print_str#0] -- register_copy + // [87] phi (byte*) print_str::str#12 = (const string) main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + // [51] phi from main::@3 to main::@22 [phi:main::@3->main::@22] + b22_from_b3: + jmp b22 + // main::@22 + b22: + // [52] call print_word + // [69] phi from main::@22 to print_word [phi:main::@22->print_word] + print_word_from_b22: + // [69] phi (word) print_word::w#10 = (word) $7461 [phi:main::@22->print_word#0] -- vwuz1=vwuc1 + lda #<$7461 + sta print_word.w + lda #>$7461 + sta print_word.w+1 + jsr print_word + // [53] phi from main::@22 to main::@23 [phi:main::@22->main::@23] + b23_from_b22: + jmp b23 + // main::@23 + b23: + // [54] call print_str + // [87] phi from main::@23 to print_str [phi:main::@23->print_str] + print_str_from_b23: + // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@23->print_str#0] -- register_copy + // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + // [55] phi from main::@23 to main::@24 [phi:main::@23->main::@24] + b24_from_b23: + jmp b24 + // main::@24 + b24: + // [56] call print_word + // [69] phi from main::@24 to print_word [phi:main::@24->print_word] + print_word_from_b24: + // [69] phi (word) print_word::w#10 = (word) $f781 [phi:main::@24->print_word#0] -- vwuz1=vwuc1 + lda #<$f781 + sta print_word.w + lda #>$f781 + sta print_word.w+1 + jsr print_word + // [57] phi from main::@24 to main::@25 [phi:main::@24->main::@25] + b25_from_b24: + jmp b25 + // main::@25 + b25: + // [58] call print_str + // [87] phi from main::@25 to print_str [phi:main::@25->print_str] + print_str_from_b25: + // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@25->print_str#0] -- register_copy + // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + // [59] phi from main::@25 to main::@26 [phi:main::@25->main::@26] + b26_from_b25: + jmp b26 + // main::@26 + b26: + // [60] call print_word + // [69] phi from main::@26 to print_word [phi:main::@26->print_word] + print_word_from_b26: + // [69] phi (word) print_word::w#10 = (word) $6488 [phi:main::@26->print_word#0] -- vwuz1=vwuc1 + lda #<$6488 + sta print_word.w + lda #>$6488 + sta print_word.w+1 + jsr print_word + // [61] phi from main::@26 to main::@27 [phi:main::@26->main::@27] + b27_from_b26: + jmp b27 + // main::@27 + b27: + // [62] call print_ln + // [64] phi from main::@27 to print_ln [phi:main::@27->print_ln] + print_ln_from_b27: + // [64] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@27->print_ln#0] -- register_copy + jsr print_ln + jmp breturn + // main::@return + breturn: + // [63] return + rts str: .text " @" str1: .text " @" lintab1: .fill 2*$14, 0 @@ -3087,43 +3125,44 @@ memset: { .label str = $400 .label end = str+num .label dst = $d - // [98] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [98] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [98] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [98] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [99] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [98] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [101] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [99] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [102] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [100] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [98] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [98] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [101] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #lin16u_gen::@1] - b1_from_b4: - // [115] phi (word*) lin16u_gen::lintab#4 = (word*) lin16u_gen::lintab#6 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- register_copy - // [115] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- register_copy - // [115] phi (word) lin16u_gen::i#2 = (byte) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vwuz1=vbuc1 + // [115] phi from lin16u_gen::@4 to lin16u_gen::@2 [phi:lin16u_gen::@4->lin16u_gen::@2] + b2_from_b4: + // [115] phi (word*) lin16u_gen::lintab#9 = (word*) lin16u_gen::lintab#10 [phi:lin16u_gen::@4->lin16u_gen::@2#0] -- register_copy + // [115] phi (dword) lin16u_gen::val#4 = (dword) lin16u_gen::val#0 [phi:lin16u_gen::@4->lin16u_gen::@2#1] -- register_copy + // [115] phi (word) lin16u_gen::i#4 = (byte) 0 [phi:lin16u_gen::@4->lin16u_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // lin16u_gen::@1 - b1: - // [116] if((word) lin16u_gen::i#2<(byte) $14) goto lin16u_gen::@2 -- vwuz1_lt_vbuc1_then_la1 - lda i+1 - cmp #>$14 - bcc b2 - bne !+ - lda i - cmp #<$14 - bcc b2 - !: - jmp breturn - // lin16u_gen::@return - breturn: - // [117] return - rts + jmp b2 + // [115] phi from lin16u_gen::@1 to lin16u_gen::@2 [phi:lin16u_gen::@1->lin16u_gen::@2] + b2_from_b1: + // [115] phi (word*) lin16u_gen::lintab#9 = (word*) lin16u_gen::lintab#3 [phi:lin16u_gen::@1->lin16u_gen::@2#0] -- register_copy + // [115] phi (dword) lin16u_gen::val#4 = (dword) lin16u_gen::val#1 [phi:lin16u_gen::@1->lin16u_gen::@2#1] -- register_copy + // [115] phi (word) lin16u_gen::i#4 = (word) lin16u_gen::i#1 [phi:lin16u_gen::@1->lin16u_gen::@2#2] -- register_copy + jmp b2 // lin16u_gen::@2 b2: - // [118] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#2 -- vwuz1=_hi_vduz2 + // [116] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#4 -- vwuz1=_hi_vduz2 lda val+2 sta _6 lda val+3 sta _6+1 - // [119] *((word*) lin16u_gen::lintab#4) ← (word~) lin16u_gen::$6 -- _deref_pwuz1=vwuz2 + // [117] *((word*) lin16u_gen::lintab#9) ← (word~) lin16u_gen::$6 -- _deref_pwuz1=vwuz2 ldy #0 lda _6 sta (lintab),y iny lda _6+1 sta (lintab),y - // [120] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 -- vduz1=vduz1_plus_vduz2 + // [118] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#4 + (dword) lin16u_gen::step#0 -- vduz1=vduz1_plus_vduz2 lda val clc adc step @@ -3287,7 +3316,7 @@ lin16u_gen: { lda val+3 adc step+3 sta val+3 - // [121] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [119] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#9 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc lintab @@ -3295,17 +3324,28 @@ lin16u_gen: { bcc !+ inc lintab+1 !: - // [122] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 -- vwuz1=_inc_vwuz1 + // [120] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#4 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [115] phi from lin16u_gen::@2 to lin16u_gen::@1 [phi:lin16u_gen::@2->lin16u_gen::@1] - b1_from_b2: - // [115] phi (word*) lin16u_gen::lintab#4 = (word*) lin16u_gen::lintab#3 [phi:lin16u_gen::@2->lin16u_gen::@1#0] -- register_copy - // [115] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#1 [phi:lin16u_gen::@2->lin16u_gen::@1#1] -- register_copy - // [115] phi (word) lin16u_gen::i#2 = (word) lin16u_gen::i#1 [phi:lin16u_gen::@2->lin16u_gen::@1#2] -- register_copy jmp b1 + // lin16u_gen::@1 + b1: + // [121] if((word) lin16u_gen::i#1<(byte) $14) goto lin16u_gen::@2 -- vwuz1_lt_vbuc1_then_la1 + lda i+1 + cmp #>$14 + bcc b2_from_b1 + bne !+ + lda i + cmp #<$14 + bcc b2_from_b1 + !: + jmp breturn + // lin16u_gen::@return + breturn: + // [122] return + rts } // divr16u // Performs division on two 16 bit unsigned words and an initial remainder @@ -3437,100 +3477,100 @@ divr16u: { print_hextab: .text "0123456789abcdef" REGISTER UPLIFT POTENTIAL REGISTERS -Statement [28] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 [ print_char_cursor#99 print_line_cursor#1 ] ( main:2 [ print_char_cursor#99 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [44] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 [ main::i#10 print_line_cursor#1 print_byte::b#2 print_char_cursor#102 ] ( main:2 [ main::i#10 print_line_cursor#1 print_byte::b#2 print_char_cursor#102 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +Statement [28] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 [ main::i#12 print_byte::b#2 print_char_cursor#102 print_line_cursor#1 ] ( main:2 [ main::i#12 print_byte::b#2 print_char_cursor#102 print_line_cursor#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#12 main::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Statement [48] (byte~) main::$27 ← (byte) main::i#10 << (byte) 1 [ main::i#10 print_line_cursor#1 main::$27 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 main::$27 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [49] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) [ main::i#10 print_line_cursor#1 print_word::w#3 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 print_word::w#3 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [53] (byte~) main::$28 ← (byte) main::i#10 << (byte) 1 [ main::i#10 print_line_cursor#1 main::$28 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 main::$28 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [54] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) [ main::i#10 print_line_cursor#1 print_word::w#4 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 print_word::w#4 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [58] (byte~) main::$29 ← (byte) main::i#10 << (byte) 1 [ main::i#10 print_line_cursor#1 main::$29 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 main::$29 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [59] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) [ main::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [66] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 [ print_line_cursor#1 print_char_cursor#11 ] ( main:2::print_ln:25 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:41 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:62 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] ) always clobbers reg byte a -Statement [67] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#11) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#11 ] ( main:2::print_ln:25 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:41 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:62 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] ) always clobbers reg byte a -Statement [70] (byte) print_byte::b#0 ← > (word) print_word::w#10 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] ( main:2::print_word:15 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:19 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:23 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:31 [ print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:35 [ print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:39 [ print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:50 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:55 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:60 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [72] (byte) print_byte::b#1 ← < (word) print_word::w#10 [ print_char_cursor#11 print_byte::b#1 ] ( main:2::print_word:15 [ print_char_cursor#11 print_byte::b#1 ] main:2::print_word:19 [ print_char_cursor#11 print_byte::b#1 ] main:2::print_word:23 [ print_char_cursor#11 print_byte::b#1 ] main:2::print_word:31 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:35 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:39 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:50 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:55 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:60 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] ) always clobbers reg byte a -Statement [76] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte) 4 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ( main:2::print_byte:45 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:31::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:35::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:39::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:50::print_byte:71 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:55::print_byte:71 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:60::print_byte:71 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:31::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:35::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:39::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:50::print_byte:73 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:55::print_byte:73 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:60::print_byte:73 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ) always clobbers reg byte a -Statement [79] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:45 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:31::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:35::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:39::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:50::print_byte:71 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:55::print_byte:71 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:60::print_byte:71 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:31::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:35::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:39::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:50::print_byte:73 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:55::print_byte:73 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:60::print_byte:73 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a -Statement [84] *((byte*) print_char_cursor#50) ← (byte) print_char::ch#2 [ print_char_cursor#50 ] ( main:2::print_byte:45::print_char:78 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:31::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:35::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:50::print_byte:71::print_char:78 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:55::print_byte:71::print_char:78 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:78 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:31::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:35::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:50::print_byte:73::print_char:78 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:55::print_byte:73::print_char:78 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:78 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_byte:45::print_char:81 [ main::i#10 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:31::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:35::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:50::print_byte:71::print_char:81 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:55::print_byte:71::print_char:81 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:81 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:31::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:35::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:50::print_byte:73::print_char:81 [ main::i#10 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:55::print_byte:73::print_char:81 [ main::i#10 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:81 [ main::i#10 print_line_cursor#1 print_char_cursor#50 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +Statement [32] (byte~) main::$27 ← (byte) main::i#12 << (byte) 1 [ main::i#12 print_line_cursor#1 main::$27 print_char_cursor#2 ] ( main:2 [ main::i#12 print_line_cursor#1 main::$27 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [33] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) [ main::i#12 print_line_cursor#1 print_word::w#3 print_char_cursor#2 ] ( main:2 [ main::i#12 print_line_cursor#1 print_word::w#3 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [37] (byte~) main::$28 ← (byte) main::i#12 << (byte) 1 [ main::i#12 print_line_cursor#1 main::$28 print_char_cursor#2 ] ( main:2 [ main::i#12 print_line_cursor#1 main::$28 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [38] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) [ main::i#12 print_line_cursor#1 print_word::w#4 print_char_cursor#2 ] ( main:2 [ main::i#12 print_line_cursor#1 print_word::w#4 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [42] (byte~) main::$29 ← (byte) main::i#12 << (byte) 1 [ main::i#12 print_line_cursor#1 main::$29 print_char_cursor#2 ] ( main:2 [ main::i#12 print_line_cursor#1 main::$29 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [43] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) [ main::i#12 print_line_cursor#1 print_word::w#5 print_char_cursor#2 ] ( main:2 [ main::i#12 print_line_cursor#1 print_word::w#5 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [49] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#99 ] ( main:2 [ print_line_cursor#1 print_char_cursor#99 ] ) always clobbers reg byte a +Statement [66] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 [ print_line_cursor#1 print_char_cursor#11 ] ( main:2::print_ln:25 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:46 [ main::i#12 print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:62 [ print_line_cursor#1 print_char_cursor#11 ] ) always clobbers reg byte a +Statement [67] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#11) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#11 ] ( main:2::print_ln:25 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:46 [ main::i#12 print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:62 [ print_line_cursor#1 print_char_cursor#11 ] ) always clobbers reg byte a +Statement [70] (byte) print_byte::b#0 ← > (word) print_word::w#10 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] ( main:2::print_word:15 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:19 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:23 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:34 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:39 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:44 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:52 [ print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:56 [ print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:60 [ print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [72] (byte) print_byte::b#1 ← < (word) print_word::w#10 [ print_char_cursor#11 print_byte::b#1 ] ( main:2::print_word:15 [ print_char_cursor#11 print_byte::b#1 ] main:2::print_word:19 [ print_char_cursor#11 print_byte::b#1 ] main:2::print_word:23 [ print_char_cursor#11 print_byte::b#1 ] main:2::print_word:34 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:39 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:44 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:52 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:56 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:60 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] ) always clobbers reg byte a +Statement [76] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte) 4 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ( main:2::print_byte:29 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:34::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:39::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:44::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:52::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:56::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:60::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:34::print_byte:73 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:39::print_byte:73 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:44::print_byte:73 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:52::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:56::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:60::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ) always clobbers reg byte a +Statement [79] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:29 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:34::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:39::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:44::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:52::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:56::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:60::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:34::print_byte:73 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:39::print_byte:73 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:44::print_byte:73 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:52::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:56::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:60::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a +Statement [84] *((byte*) print_char_cursor#50) ← (byte) print_char::ch#2 [ print_char_cursor#50 ] ( main:2::print_byte:29::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:34::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:44::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:52::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:56::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:34::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:44::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:52::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:56::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_byte:29::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:34::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:44::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:52::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:56::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:34::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:44::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:52::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:56::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#12 main::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Statement [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:29 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:33 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:37 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:47 [ main::i#10 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:52 [ main::i#10 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:57 [ main::i#10 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y -Statement [91] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:29 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:33 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:37 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:47 [ main::i#10 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:52 [ main::i#10 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:57 [ main::i#10 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y -Statement [99] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:11::memset:95 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [101] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:11::memset:95 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [104] (word) lin16u_gen::ampl#0 ← (word) lin16u_gen::max#3 - (word) lin16u_gen::min#3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] ) always clobbers reg byte a -Statement [105] (word) divr16u::dividend#1 ← (word) lin16u_gen::ampl#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] ) always clobbers reg byte a -Statement [107] (word) divr16u::return#2 ← (word) divr16u::return#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#1 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#1 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a -Statement [108] (word) lin16u_gen::stepi#0 ← (word) divr16u::return#2 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#1 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#1 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#1 ] ) always clobbers reg byte a -Statement [109] (word) divr16u::rem#4 ← (word) rem16u#1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [111] (word) divr16u::return#3 ← (word) divr16u::return#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] ) always clobbers reg byte a -Statement [112] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) always clobbers reg byte a -Statement [113] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] ) always clobbers reg byte a -Statement [114] (dword) lin16u_gen::val#0 ← (word) lin16u_gen::min#3 dw= (word) 0 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] main:2::lin16u_gen:7 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] main:2::lin16u_gen:9 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] ) always clobbers reg byte a -Statement [116] if((word) lin16u_gen::i#2<(byte) $14) goto lin16u_gen::@2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] ) always clobbers reg byte a -Statement [118] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$6 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$6 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$6 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$6 ] ) always clobbers reg byte a -Statement [119] *((word*) lin16u_gen::lintab#4) ← (word~) lin16u_gen::$6 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] ) always clobbers reg byte a reg byte y -Statement [120] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] ) always clobbers reg byte a -Statement [121] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (const byte) SIZEOF_WORD [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ) always clobbers reg byte a -Statement [126] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [91] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [99] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:11::memset:95 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [101] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:11::memset:95 [ memset::dst#1 ] ) always clobbers reg byte a +Statement [104] (word) lin16u_gen::ampl#0 ← (word) lin16u_gen::max#3 - (word) lin16u_gen::min#3 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::ampl#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::ampl#0 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::ampl#0 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::ampl#0 ] ) always clobbers reg byte a +Statement [105] (word) divr16u::dividend#1 ← (word) lin16u_gen::ampl#0 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::dividend#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::dividend#1 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::dividend#1 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::dividend#1 ] ) always clobbers reg byte a +Statement [107] (word) divr16u::return#2 ← (word) divr16u::return#0 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#2 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#2 rem16u#1 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#2 rem16u#1 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [108] (word) lin16u_gen::stepi#0 ← (word) divr16u::return#2 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 rem16u#1 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 rem16u#1 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [109] (word) divr16u::rem#4 ← (word) rem16u#1 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::rem#4 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::rem#4 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [111] (word) divr16u::return#3 ← (word) divr16u::return#0 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#3 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#3 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [112] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) always clobbers reg byte a +Statement [113] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::step#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::step#0 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::step#0 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::step#0 ] ) always clobbers reg byte a +Statement [114] (dword) lin16u_gen::val#0 ← (word) lin16u_gen::min#3 dw= (word) 0 [ lin16u_gen::lintab#10 lin16u_gen::step#0 lin16u_gen::val#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::lintab#10 lin16u_gen::step#0 lin16u_gen::val#0 ] main:2::lin16u_gen:7 [ lin16u_gen::lintab#10 lin16u_gen::step#0 lin16u_gen::val#0 ] main:2::lin16u_gen:9 [ lin16u_gen::lintab#10 lin16u_gen::step#0 lin16u_gen::val#0 ] ) always clobbers reg byte a +Statement [116] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#4 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 lin16u_gen::$6 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 lin16u_gen::$6 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 lin16u_gen::$6 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 lin16u_gen::$6 ] ) always clobbers reg byte a +Statement [117] *((word*) lin16u_gen::lintab#9) ← (word~) lin16u_gen::$6 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 ] ) always clobbers reg byte a reg byte y +Statement [118] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#4 + (dword) lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::lintab#9 lin16u_gen::val#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::lintab#9 lin16u_gen::val#1 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::lintab#9 lin16u_gen::val#1 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::lintab#9 lin16u_gen::val#1 ] ) always clobbers reg byte a +Statement [119] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#9 + (const byte) SIZEOF_WORD [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ) always clobbers reg byte a +Statement [121] if((word) lin16u_gen::i#1<(byte) $14) goto lin16u_gen::@2 [ lin16u_gen::step#0 lin16u_gen::i#1 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#1 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#1 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#1 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ) always clobbers reg byte a +Statement [126] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ divr16u::i#2 divr16u::i#1 ] -Statement [129] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [133] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [135] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [139] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a -Statement [28] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 [ print_char_cursor#99 print_line_cursor#1 ] ( main:2 [ print_char_cursor#99 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [44] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 [ main::i#10 print_line_cursor#1 print_byte::b#2 print_char_cursor#102 ] ( main:2 [ main::i#10 print_line_cursor#1 print_byte::b#2 print_char_cursor#102 ] ) always clobbers reg byte a -Statement [48] (byte~) main::$27 ← (byte) main::i#10 << (byte) 1 [ main::i#10 print_line_cursor#1 main::$27 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 main::$27 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [49] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) [ main::i#10 print_line_cursor#1 print_word::w#3 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 print_word::w#3 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [53] (byte~) main::$28 ← (byte) main::i#10 << (byte) 1 [ main::i#10 print_line_cursor#1 main::$28 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 main::$28 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [54] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) [ main::i#10 print_line_cursor#1 print_word::w#4 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 print_word::w#4 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [58] (byte~) main::$29 ← (byte) main::i#10 << (byte) 1 [ main::i#10 print_line_cursor#1 main::$29 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 main::$29 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [59] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) [ main::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [66] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 [ print_line_cursor#1 print_char_cursor#11 ] ( main:2::print_ln:25 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:41 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:62 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] ) always clobbers reg byte a -Statement [67] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#11) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#11 ] ( main:2::print_ln:25 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:41 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:62 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] ) always clobbers reg byte a -Statement [70] (byte) print_byte::b#0 ← > (word) print_word::w#10 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] ( main:2::print_word:15 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:19 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:23 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:31 [ print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:35 [ print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:39 [ print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:50 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:55 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:60 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [72] (byte) print_byte::b#1 ← < (word) print_word::w#10 [ print_char_cursor#11 print_byte::b#1 ] ( main:2::print_word:15 [ print_char_cursor#11 print_byte::b#1 ] main:2::print_word:19 [ print_char_cursor#11 print_byte::b#1 ] main:2::print_word:23 [ print_char_cursor#11 print_byte::b#1 ] main:2::print_word:31 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:35 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:39 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:50 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:55 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:60 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] ) always clobbers reg byte a -Statement [76] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte) 4 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ( main:2::print_byte:45 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:31::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:35::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:39::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:50::print_byte:71 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:55::print_byte:71 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:60::print_byte:71 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:31::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:35::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:39::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:50::print_byte:73 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:55::print_byte:73 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:60::print_byte:73 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ) always clobbers reg byte a -Statement [79] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:45 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:31::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:35::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:39::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:50::print_byte:71 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:55::print_byte:71 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:60::print_byte:71 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:31::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:35::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:39::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:50::print_byte:73 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:55::print_byte:73 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:60::print_byte:73 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a -Statement [84] *((byte*) print_char_cursor#50) ← (byte) print_char::ch#2 [ print_char_cursor#50 ] ( main:2::print_byte:45::print_char:78 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:31::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:35::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:50::print_byte:71::print_char:78 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:55::print_byte:71::print_char:78 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:78 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:31::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:35::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:50::print_byte:73::print_char:78 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:55::print_byte:73::print_char:78 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:78 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_byte:45::print_char:81 [ main::i#10 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:31::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:35::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:50::print_byte:71::print_char:81 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:55::print_byte:71::print_char:81 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:81 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:31::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:35::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:50::print_byte:73::print_char:81 [ main::i#10 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:55::print_byte:73::print_char:81 [ main::i#10 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:81 [ main::i#10 print_line_cursor#1 print_char_cursor#50 ] ) always clobbers reg byte y -Statement [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:29 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:33 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:37 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:47 [ main::i#10 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:52 [ main::i#10 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:57 [ main::i#10 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y -Statement [91] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:29 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:33 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:37 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:47 [ main::i#10 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:52 [ main::i#10 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:57 [ main::i#10 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y -Statement [99] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:11::memset:95 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [101] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:11::memset:95 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [104] (word) lin16u_gen::ampl#0 ← (word) lin16u_gen::max#3 - (word) lin16u_gen::min#3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] ) always clobbers reg byte a -Statement [105] (word) divr16u::dividend#1 ← (word) lin16u_gen::ampl#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] ) always clobbers reg byte a -Statement [107] (word) divr16u::return#2 ← (word) divr16u::return#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#1 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#1 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a -Statement [108] (word) lin16u_gen::stepi#0 ← (word) divr16u::return#2 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#1 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#1 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#1 ] ) always clobbers reg byte a -Statement [109] (word) divr16u::rem#4 ← (word) rem16u#1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [111] (word) divr16u::return#3 ← (word) divr16u::return#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] ) always clobbers reg byte a -Statement [112] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) always clobbers reg byte a -Statement [113] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] ) always clobbers reg byte a -Statement [114] (dword) lin16u_gen::val#0 ← (word) lin16u_gen::min#3 dw= (word) 0 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] main:2::lin16u_gen:7 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] main:2::lin16u_gen:9 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] ) always clobbers reg byte a -Statement [116] if((word) lin16u_gen::i#2<(byte) $14) goto lin16u_gen::@2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] ) always clobbers reg byte a -Statement [118] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$6 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$6 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$6 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$6 ] ) always clobbers reg byte a -Statement [119] *((word*) lin16u_gen::lintab#4) ← (word~) lin16u_gen::$6 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] ) always clobbers reg byte a reg byte y -Statement [120] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] ) always clobbers reg byte a -Statement [121] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (const byte) SIZEOF_WORD [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ) always clobbers reg byte a -Statement [126] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Statement [129] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [133] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [135] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [139] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#10 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , +Statement [129] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [133] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [135] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [139] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a +Statement [28] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 [ main::i#12 print_byte::b#2 print_char_cursor#102 print_line_cursor#1 ] ( main:2 [ main::i#12 print_byte::b#2 print_char_cursor#102 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [32] (byte~) main::$27 ← (byte) main::i#12 << (byte) 1 [ main::i#12 print_line_cursor#1 main::$27 print_char_cursor#2 ] ( main:2 [ main::i#12 print_line_cursor#1 main::$27 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [33] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) [ main::i#12 print_line_cursor#1 print_word::w#3 print_char_cursor#2 ] ( main:2 [ main::i#12 print_line_cursor#1 print_word::w#3 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [37] (byte~) main::$28 ← (byte) main::i#12 << (byte) 1 [ main::i#12 print_line_cursor#1 main::$28 print_char_cursor#2 ] ( main:2 [ main::i#12 print_line_cursor#1 main::$28 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [38] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) [ main::i#12 print_line_cursor#1 print_word::w#4 print_char_cursor#2 ] ( main:2 [ main::i#12 print_line_cursor#1 print_word::w#4 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [42] (byte~) main::$29 ← (byte) main::i#12 << (byte) 1 [ main::i#12 print_line_cursor#1 main::$29 print_char_cursor#2 ] ( main:2 [ main::i#12 print_line_cursor#1 main::$29 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [43] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) [ main::i#12 print_line_cursor#1 print_word::w#5 print_char_cursor#2 ] ( main:2 [ main::i#12 print_line_cursor#1 print_word::w#5 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [49] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#99 ] ( main:2 [ print_line_cursor#1 print_char_cursor#99 ] ) always clobbers reg byte a +Statement [66] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 [ print_line_cursor#1 print_char_cursor#11 ] ( main:2::print_ln:25 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:46 [ main::i#12 print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:62 [ print_line_cursor#1 print_char_cursor#11 ] ) always clobbers reg byte a +Statement [67] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#11) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#11 ] ( main:2::print_ln:25 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:46 [ main::i#12 print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:62 [ print_line_cursor#1 print_char_cursor#11 ] ) always clobbers reg byte a +Statement [70] (byte) print_byte::b#0 ← > (word) print_word::w#10 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] ( main:2::print_word:15 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:19 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:23 [ print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:34 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:39 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:44 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:52 [ print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:56 [ print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] main:2::print_word:60 [ print_line_cursor#1 print_word::w#10 print_byte::b#0 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [72] (byte) print_byte::b#1 ← < (word) print_word::w#10 [ print_char_cursor#11 print_byte::b#1 ] ( main:2::print_word:15 [ print_char_cursor#11 print_byte::b#1 ] main:2::print_word:19 [ print_char_cursor#11 print_byte::b#1 ] main:2::print_word:23 [ print_char_cursor#11 print_byte::b#1 ] main:2::print_word:34 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:39 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:44 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:52 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:56 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] main:2::print_word:60 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#1 ] ) always clobbers reg byte a +Statement [76] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte) 4 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ( main:2::print_byte:29 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:34::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:39::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:44::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:52::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:56::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:60::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:34::print_byte:73 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:39::print_byte:73 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:44::print_byte:73 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:52::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:56::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:60::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ) always clobbers reg byte a +Statement [79] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:29 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:34::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:39::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:44::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:52::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:56::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:60::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:34::print_byte:73 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:39::print_byte:73 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:44::print_byte:73 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:52::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:56::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:60::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a +Statement [84] *((byte*) print_char_cursor#50) ← (byte) print_char::ch#2 [ print_char_cursor#50 ] ( main:2::print_byte:29::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:34::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:44::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:52::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:56::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:34::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:44::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:52::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:56::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_byte:29::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:34::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:44::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:52::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:56::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:34::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:44::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:52::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:56::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] ) always clobbers reg byte y +Statement [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [91] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [99] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:11::memset:95 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [101] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:11::memset:95 [ memset::dst#1 ] ) always clobbers reg byte a +Statement [104] (word) lin16u_gen::ampl#0 ← (word) lin16u_gen::max#3 - (word) lin16u_gen::min#3 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::ampl#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::ampl#0 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::ampl#0 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::ampl#0 ] ) always clobbers reg byte a +Statement [105] (word) divr16u::dividend#1 ← (word) lin16u_gen::ampl#0 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::dividend#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::dividend#1 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::dividend#1 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::dividend#1 ] ) always clobbers reg byte a +Statement [107] (word) divr16u::return#2 ← (word) divr16u::return#0 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#2 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#2 rem16u#1 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#2 rem16u#1 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [108] (word) lin16u_gen::stepi#0 ← (word) divr16u::return#2 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 rem16u#1 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 rem16u#1 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [109] (word) divr16u::rem#4 ← (word) rem16u#1 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::rem#4 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::rem#4 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [111] (word) divr16u::return#3 ← (word) divr16u::return#0 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#3 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#3 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [112] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) always clobbers reg byte a +Statement [113] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::step#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::step#0 ] main:2::lin16u_gen:7 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::step#0 ] main:2::lin16u_gen:9 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::step#0 ] ) always clobbers reg byte a +Statement [114] (dword) lin16u_gen::val#0 ← (word) lin16u_gen::min#3 dw= (word) 0 [ lin16u_gen::lintab#10 lin16u_gen::step#0 lin16u_gen::val#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::lintab#10 lin16u_gen::step#0 lin16u_gen::val#0 ] main:2::lin16u_gen:7 [ lin16u_gen::lintab#10 lin16u_gen::step#0 lin16u_gen::val#0 ] main:2::lin16u_gen:9 [ lin16u_gen::lintab#10 lin16u_gen::step#0 lin16u_gen::val#0 ] ) always clobbers reg byte a +Statement [116] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#4 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 lin16u_gen::$6 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 lin16u_gen::$6 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 lin16u_gen::$6 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 lin16u_gen::$6 ] ) always clobbers reg byte a +Statement [117] *((word*) lin16u_gen::lintab#9) ← (word~) lin16u_gen::$6 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#4 lin16u_gen::lintab#9 ] ) always clobbers reg byte a reg byte y +Statement [118] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#4 + (dword) lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::lintab#9 lin16u_gen::val#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::lintab#9 lin16u_gen::val#1 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::lintab#9 lin16u_gen::val#1 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::lintab#9 lin16u_gen::val#1 ] ) always clobbers reg byte a +Statement [119] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#9 + (const byte) SIZEOF_WORD [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#4 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ) always clobbers reg byte a +Statement [121] if((word) lin16u_gen::i#1<(byte) $14) goto lin16u_gen::@2 [ lin16u_gen::step#0 lin16u_gen::i#1 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#1 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:7 [ lin16u_gen::step#0 lin16u_gen::i#1 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:9 [ lin16u_gen::step#0 lin16u_gen::i#1 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ) always clobbers reg byte a +Statement [126] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [129] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [133] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [135] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [139] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:7::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:9::divr16u:106 [ lin16u_gen::min#3 lin16u_gen::lintab#10 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:7::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:9::divr16u:110 [ lin16u_gen::min#3 lin16u_gen::lintab#10 lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#12 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , Potential registers zp ZP_WORD:3 [ print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] : zp ZP_WORD:3 , Potential registers zp ZP_WORD:5 [ print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ] : zp ZP_WORD:5 , Potential registers zp ZP_BYTE:7 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:7 , reg byte x , Potential registers zp ZP_BYTE:8 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:9 [ print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#102 print_char_cursor#2 print_char_cursor#11 print_char_cursor#99 print_char_cursor#1 ] : zp ZP_WORD:9 , Potential registers zp ZP_WORD:11 [ print_str::str#10 print_str::str#12 print_str::str#0 ] : zp ZP_WORD:11 , -Potential registers zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:13 , +Potential registers zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:13 , Potential registers zp ZP_WORD:15 [ lin16u_gen::max#3 ] : zp ZP_WORD:15 , Potential registers zp ZP_WORD:17 [ lin16u_gen::min#3 ] : zp ZP_WORD:17 , -Potential registers zp ZP_WORD:19 [ lin16u_gen::i#2 lin16u_gen::i#1 ] : zp ZP_WORD:19 , -Potential registers zp ZP_DWORD:21 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] : zp ZP_DWORD:21 , -Potential registers zp ZP_WORD:25 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ] : zp ZP_WORD:25 , +Potential registers zp ZP_WORD:19 [ lin16u_gen::i#4 lin16u_gen::i#1 ] : zp ZP_WORD:19 , +Potential registers zp ZP_DWORD:21 [ lin16u_gen::val#4 lin16u_gen::val#1 lin16u_gen::val#0 ] : zp ZP_DWORD:21 , +Potential registers zp ZP_WORD:25 [ lin16u_gen::lintab#9 lin16u_gen::lintab#3 lin16u_gen::lintab#10 ] : zp ZP_WORD:25 , Potential registers zp ZP_WORD:27 [ divr16u::divisor#6 ] : zp ZP_WORD:27 , Potential registers zp ZP_WORD:29 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp ZP_WORD:29 , Potential registers zp ZP_WORD:31 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] : zp ZP_WORD:31 , @@ -3556,31 +3596,31 @@ REGISTER UPLIFT SCOPES Uplift Scope [] 227.22: zp ZP_WORD:3 [ print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] 197.27: zp ZP_WORD:9 [ print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#102 print_char_cursor#2 print_char_cursor#11 print_char_cursor#99 print_char_cursor#1 ] 0.8: zp ZP_WORD:59 [ rem16u#1 ] Uplift Scope [print_str] 305.5: zp ZP_WORD:11 [ print_str::str#10 print_str::str#12 print_str::str#0 ] Uplift Scope [divr16u] 106.92: zp ZP_WORD:29 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp ZP_WORD:33 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:57 [ divr16u::$1 ] 22: zp ZP_BYTE:58 [ divr16u::$2 ] 18.19: zp ZP_BYTE:35 [ divr16u::i#2 divr16u::i#1 ] 15.75: zp ZP_WORD:31 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] 4: zp ZP_WORD:43 [ divr16u::return#2 ] 4: zp ZP_WORD:47 [ divr16u::return#3 ] 1.38: zp ZP_WORD:27 [ divr16u::divisor#6 ] -Uplift Scope [lin16u_gen] 27.5: zp ZP_WORD:19 [ lin16u_gen::i#2 lin16u_gen::i#1 ] 22: zp ZP_WORD:55 [ lin16u_gen::$6 ] 20.08: zp ZP_DWORD:21 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] 18.17: zp ZP_WORD:25 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ] 4: zp ZP_WORD:41 [ lin16u_gen::ampl#0 ] 4: zp ZP_WORD:49 [ lin16u_gen::stepf#0 ] 2: zp ZP_WORD:15 [ lin16u_gen::max#3 ] 1.44: zp ZP_DWORD:51 [ lin16u_gen::step#0 ] 0.8: zp ZP_WORD:45 [ lin16u_gen::stepi#0 ] 0.36: zp ZP_WORD:17 [ lin16u_gen::min#3 ] -Uplift Scope [main] 25.5: zp ZP_BYTE:2 [ main::i#10 main::i#1 ] 22: zp ZP_BYTE:36 [ main::$27 ] 22: zp ZP_BYTE:37 [ main::$28 ] 22: zp ZP_BYTE:38 [ main::$29 ] +Uplift Scope [lin16u_gen] 22: zp ZP_WORD:55 [ lin16u_gen::$6 ] 21.17: zp ZP_DWORD:21 [ lin16u_gen::val#4 lin16u_gen::val#1 lin16u_gen::val#0 ] 20.9: zp ZP_WORD:19 [ lin16u_gen::i#4 lin16u_gen::i#1 ] 16.25: zp ZP_WORD:25 [ lin16u_gen::lintab#9 lin16u_gen::lintab#3 lin16u_gen::lintab#10 ] 4: zp ZP_WORD:41 [ lin16u_gen::ampl#0 ] 4: zp ZP_WORD:49 [ lin16u_gen::stepf#0 ] 2: zp ZP_WORD:15 [ lin16u_gen::max#3 ] 1.44: zp ZP_DWORD:51 [ lin16u_gen::step#0 ] 0.8: zp ZP_WORD:45 [ lin16u_gen::stepi#0 ] 0.36: zp ZP_WORD:17 [ lin16u_gen::min#3 ] +Uplift Scope [main] 22: zp ZP_BYTE:36 [ main::$27 ] 22: zp ZP_BYTE:37 [ main::$28 ] 22: zp ZP_BYTE:38 [ main::$29 ] 19.64: zp ZP_BYTE:2 [ main::i#12 main::i#1 ] Uplift Scope [print_word] 78.33: zp ZP_WORD:5 [ print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [memset] 33: zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 ] Uplift Scope [print_byte] 23.75: zp ZP_BYTE:7 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:39 [ print_byte::$0 ] 4: zp ZP_BYTE:40 [ print_byte::$2 ] Uplift Scope [print_char] 14: zp ZP_BYTE:8 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] -Uplifting [] best 16244 combination zp ZP_WORD:3 [ print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] zp ZP_WORD:9 [ print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#102 print_char_cursor#2 print_char_cursor#11 print_char_cursor#99 print_char_cursor#1 ] zp ZP_WORD:59 [ rem16u#1 ] -Uplifting [print_str] best 16244 combination zp ZP_WORD:11 [ print_str::str#10 print_str::str#12 print_str::str#0 ] -Uplifting [divr16u] best 16034 combination zp ZP_WORD:29 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:33 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:31 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] zp ZP_WORD:43 [ divr16u::return#2 ] zp ZP_WORD:47 [ divr16u::return#3 ] zp ZP_WORD:27 [ divr16u::divisor#6 ] -Uplifting [lin16u_gen] best 16034 combination zp ZP_WORD:19 [ lin16u_gen::i#2 lin16u_gen::i#1 ] zp ZP_WORD:55 [ lin16u_gen::$6 ] zp ZP_DWORD:21 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] zp ZP_WORD:25 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ] zp ZP_WORD:41 [ lin16u_gen::ampl#0 ] zp ZP_WORD:49 [ lin16u_gen::stepf#0 ] zp ZP_WORD:15 [ lin16u_gen::max#3 ] zp ZP_DWORD:51 [ lin16u_gen::step#0 ] zp ZP_WORD:45 [ lin16u_gen::stepi#0 ] zp ZP_WORD:17 [ lin16u_gen::min#3 ] -Uplifting [main] best 15764 combination reg byte x [ main::i#10 main::i#1 ] reg byte a [ main::$27 ] reg byte a [ main::$28 ] reg byte a [ main::$29 ] +Uplifting [] best 16334 combination zp ZP_WORD:3 [ print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] zp ZP_WORD:9 [ print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#102 print_char_cursor#2 print_char_cursor#11 print_char_cursor#99 print_char_cursor#1 ] zp ZP_WORD:59 [ rem16u#1 ] +Uplifting [print_str] best 16334 combination zp ZP_WORD:11 [ print_str::str#10 print_str::str#12 print_str::str#0 ] +Uplifting [divr16u] best 16124 combination zp ZP_WORD:29 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:33 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:31 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] zp ZP_WORD:43 [ divr16u::return#2 ] zp ZP_WORD:47 [ divr16u::return#3 ] zp ZP_WORD:27 [ divr16u::divisor#6 ] +Uplifting [lin16u_gen] best 16124 combination zp ZP_WORD:55 [ lin16u_gen::$6 ] zp ZP_DWORD:21 [ lin16u_gen::val#4 lin16u_gen::val#1 lin16u_gen::val#0 ] zp ZP_WORD:19 [ lin16u_gen::i#4 lin16u_gen::i#1 ] zp ZP_WORD:25 [ lin16u_gen::lintab#9 lin16u_gen::lintab#3 lin16u_gen::lintab#10 ] zp ZP_WORD:41 [ lin16u_gen::ampl#0 ] zp ZP_WORD:49 [ lin16u_gen::stepf#0 ] zp ZP_WORD:15 [ lin16u_gen::max#3 ] zp ZP_DWORD:51 [ lin16u_gen::step#0 ] zp ZP_WORD:45 [ lin16u_gen::stepi#0 ] zp ZP_WORD:17 [ lin16u_gen::min#3 ] +Uplifting [main] best 15854 combination reg byte a [ main::$27 ] reg byte a [ main::$28 ] reg byte a [ main::$29 ] reg byte x [ main::i#12 main::i#1 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [print_word] best 15764 combination zp ZP_WORD:5 [ print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ] -Uplifting [memset] best 15764 combination zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_byte] best 15756 combination zp ZP_BYTE:7 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] -Uplifting [print_char] best 15747 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -Uplifting [RADIX] best 15747 combination -Uplifting [print_ln] best 15747 combination -Uplifting [print_cls] best 15747 combination +Uplifting [print_word] best 15854 combination zp ZP_WORD:5 [ print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ] +Uplifting [memset] best 15854 combination zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 ] +Uplifting [print_byte] best 15846 combination zp ZP_BYTE:7 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [print_char] best 15837 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Uplifting [RADIX] best 15837 combination +Uplifting [print_ln] best 15837 combination +Uplifting [print_cls] best 15837 combination Attempting to uplift remaining variables inzp ZP_BYTE:7 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Uplifting [print_byte] best 15747 combination zp ZP_BYTE:7 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Uplifting [print_byte] best 15837 combination zp ZP_BYTE:7 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Coalescing zero page register [ zp ZP_WORD:29 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:59 [ rem16u#1 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:15 [ lin16u_gen::max#3 ] ] with [ zp ZP_WORD:41 [ lin16u_gen::ampl#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:33 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:43 [ divr16u::return#2 ] ] - score: 1 @@ -3588,18 +3628,18 @@ Coalescing zero page register [ zp ZP_WORD:33 [ divr16u::quotient#3 divr16u::ret Coalescing zero page register [ zp ZP_WORD:15 [ lin16u_gen::max#3 lin16u_gen::ampl#0 ] ] with [ zp ZP_WORD:31 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:33 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp ZP_WORD:49 [ lin16u_gen::stepf#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:11 [ print_str::str#10 print_str::str#12 print_str::str#0 ] ] with [ zp ZP_WORD:5 [ print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ] ] -Coalescing zero page register [ zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:3 [ print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] ] +Coalescing zero page register [ zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:3 [ print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] ] Coalescing zero page register [ zp ZP_WORD:15 [ lin16u_gen::max#3 lin16u_gen::ampl#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] ] with [ zp ZP_WORD:9 [ print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#102 print_char_cursor#2 print_char_cursor#11 print_char_cursor#99 print_char_cursor#1 ] ] -Coalescing zero page register [ zp ZP_WORD:27 [ divr16u::divisor#6 ] ] with [ zp ZP_WORD:19 [ lin16u_gen::i#2 lin16u_gen::i#1 ] ] +Coalescing zero page register [ zp ZP_WORD:27 [ divr16u::divisor#6 ] ] with [ zp ZP_WORD:19 [ lin16u_gen::i#4 lin16u_gen::i#1 ] ] Coalescing zero page register [ zp ZP_WORD:55 [ lin16u_gen::$6 ] ] with [ zp ZP_WORD:29 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] Coalescing zero page register [ zp ZP_WORD:17 [ lin16u_gen::min#3 ] ] with [ zp ZP_WORD:11 [ print_str::str#10 print_str::str#12 print_str::str#0 print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ] ] -Coalescing zero page register [ zp ZP_WORD:25 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ] ] with [ zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] ] +Coalescing zero page register [ zp ZP_WORD:25 [ lin16u_gen::lintab#9 lin16u_gen::lintab#3 lin16u_gen::lintab#10 ] ] with [ zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] ] Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:2 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Allocated (was zp ZP_WORD:15) zp ZP_WORD:3 [ lin16u_gen::max#3 lin16u_gen::ampl#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#102 print_char_cursor#2 print_char_cursor#11 print_char_cursor#99 print_char_cursor#1 ] Allocated (was zp ZP_WORD:17) zp ZP_WORD:5 [ lin16u_gen::min#3 print_str::str#10 print_str::str#12 print_str::str#0 print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ] -Allocated (was zp ZP_DWORD:21) zp ZP_DWORD:7 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] -Allocated (was zp ZP_WORD:25) zp ZP_WORD:11 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 memset::dst#2 memset::dst#1 print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] -Allocated (was zp ZP_WORD:27) zp ZP_WORD:13 [ divr16u::divisor#6 lin16u_gen::i#2 lin16u_gen::i#1 ] +Allocated (was zp ZP_DWORD:21) zp ZP_DWORD:7 [ lin16u_gen::val#4 lin16u_gen::val#1 lin16u_gen::val#0 ] +Allocated (was zp ZP_WORD:25) zp ZP_WORD:11 [ lin16u_gen::lintab#9 lin16u_gen::lintab#3 lin16u_gen::lintab#10 memset::dst#4 memset::dst#1 print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] +Allocated (was zp ZP_WORD:27) zp ZP_WORD:13 [ divr16u::divisor#6 lin16u_gen::i#4 lin16u_gen::i#1 ] Allocated (was zp ZP_WORD:33) zp ZP_WORD:15 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 lin16u_gen::stepf#0 ] Allocated (was zp ZP_WORD:45) zp ZP_WORD:17 [ lin16u_gen::stepi#0 ] Allocated (was zp ZP_DWORD:51) zp ZP_DWORD:19 [ lin16u_gen::step#0 ] @@ -3639,7 +3679,7 @@ main: { // [5] call lin16u_gen // [103] phi from main to lin16u_gen [phi:main->lin16u_gen] lin16u_gen_from_main: - // [103] phi (word*) lin16u_gen::lintab#6 = (const word[$14]) main::lintab1#0 [phi:main->lin16u_gen#0] -- pwuz1=pwuc1 + // [103] phi (word*) lin16u_gen::lintab#10 = (const word[$14]) main::lintab1#0 [phi:main->lin16u_gen#0] -- pwuz1=pwuc1 lda #lintab1 @@ -3663,7 +3703,7 @@ main: { // [7] call lin16u_gen // [103] phi from main::@4 to lin16u_gen [phi:main::@4->lin16u_gen] lin16u_gen_from_b4: - // [103] phi (word*) lin16u_gen::lintab#6 = (const word[$14]) main::lintab2#0 [phi:main::@4->lin16u_gen#0] -- pwuz1=pwuc1 + // [103] phi (word*) lin16u_gen::lintab#10 = (const word[$14]) main::lintab2#0 [phi:main::@4->lin16u_gen#0] -- pwuz1=pwuc1 lda #lintab2 @@ -3687,7 +3727,7 @@ main: { // [9] call lin16u_gen // [103] phi from main::@5 to lin16u_gen [phi:main::@5->lin16u_gen] lin16u_gen_from_b5: - // [103] phi (word*) lin16u_gen::lintab#6 = (const word[$14]) main::lintab3#0 [phi:main::@5->lin16u_gen#0] -- pwuz1=pwuc1 + // [103] phi (word*) lin16u_gen::lintab#10 = (const word[$14]) main::lintab3#0 [phi:main::@5->lin16u_gen#0] -- pwuz1=pwuc1 lda #lintab3 @@ -3817,142 +3857,36 @@ main: { lda #>$400 sta print_line_cursor+1 jsr print_ln - // [26] phi from main::@13 to main::@1 [phi:main::@13->main::@1] - b1_from_b13: - // [26] phi (byte) main::i#10 = (byte) 0 [phi:main::@13->main::@1#0] -- vbuxx=vbuc1 + // [26] phi from main::@13 to main::@2 [phi:main::@13->main::@2] + b2_from_b13: + // [26] phi (byte) main::i#12 = (byte) 0 [phi:main::@13->main::@2#0] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // main::@1 - b1: - // [27] if((byte) main::i#10<(byte) $14) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$14 - bcc b2 - jmp b3 - // main::@3 - b3: - // [28] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 - lda print_line_cursor - sta print_char_cursor - lda print_line_cursor+1 - sta print_char_cursor+1 - // [29] call print_str - // [87] phi from main::@3 to print_str [phi:main::@3->print_str] - print_str_from_b3: - // [87] phi (byte*) print_char_cursor#86 = (byte*~) print_char_cursor#99 [phi:main::@3->print_str#0] -- register_copy - // [87] phi (byte*) print_str::str#12 = (const string) main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - // [30] phi from main::@3 to main::@22 [phi:main::@3->main::@22] - b22_from_b3: - jmp b22 - // main::@22 - b22: - // [31] call print_word - // [69] phi from main::@22 to print_word [phi:main::@22->print_word] - print_word_from_b22: - // [69] phi (word) print_word::w#10 = (word) $7461 [phi:main::@22->print_word#0] -- vwuz1=vwuc1 - lda #<$7461 - sta print_word.w - lda #>$7461 - sta print_word.w+1 - jsr print_word - // [32] phi from main::@22 to main::@23 [phi:main::@22->main::@23] - b23_from_b22: - jmp b23 - // main::@23 - b23: - // [33] call print_str - // [87] phi from main::@23 to print_str [phi:main::@23->print_str] - print_str_from_b23: - // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@23->print_str#0] -- register_copy - // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - // [34] phi from main::@23 to main::@24 [phi:main::@23->main::@24] - b24_from_b23: - jmp b24 - // main::@24 - b24: - // [35] call print_word - // [69] phi from main::@24 to print_word [phi:main::@24->print_word] - print_word_from_b24: - // [69] phi (word) print_word::w#10 = (word) $f781 [phi:main::@24->print_word#0] -- vwuz1=vwuc1 - lda #<$f781 - sta print_word.w - lda #>$f781 - sta print_word.w+1 - jsr print_word - // [36] phi from main::@24 to main::@25 [phi:main::@24->main::@25] - b25_from_b24: - jmp b25 - // main::@25 - b25: - // [37] call print_str - // [87] phi from main::@25 to print_str [phi:main::@25->print_str] - print_str_from_b25: - // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@25->print_str#0] -- register_copy - // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - // [38] phi from main::@25 to main::@26 [phi:main::@25->main::@26] - b26_from_b25: - jmp b26 - // main::@26 - b26: - // [39] call print_word - // [69] phi from main::@26 to print_word [phi:main::@26->print_word] - print_word_from_b26: - // [69] phi (word) print_word::w#10 = (word) $6488 [phi:main::@26->print_word#0] -- vwuz1=vwuc1 - lda #<$6488 - sta print_word.w - lda #>$6488 - sta print_word.w+1 - jsr print_word - // [40] phi from main::@26 to main::@27 [phi:main::@26->main::@27] - b27_from_b26: - jmp b27 - // main::@27 - b27: - // [41] call print_ln - // [64] phi from main::@27 to print_ln [phi:main::@27->print_ln] - print_ln_from_b27: - // [64] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@27->print_ln#0] -- register_copy - jsr print_ln - jmp breturn - // main::@return - breturn: - // [42] return - rts + jmp b2 + // [26] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [26] phi (byte) main::i#12 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 // main::@2 b2: - // [43] (byte) print_byte::b#2 ← (byte) main::i#10 -- vbuz1=vbuxx + // [27] (byte) print_byte::b#2 ← (byte) main::i#12 -- vbuz1=vbuxx stx print_byte.b - // [44] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [28] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 - // [45] call print_byte + // [29] call print_byte // [75] phi from main::@2 to print_byte [phi:main::@2->print_byte] print_byte_from_b2: // [75] phi (byte*) print_char_cursor#81 = (byte*~) print_char_cursor#102 [phi:main::@2->print_byte#0] -- register_copy // [75] phi (byte) print_byte::b#3 = (byte) print_byte::b#2 [phi:main::@2->print_byte#1] -- register_copy jsr print_byte - // [46] phi from main::@2 to main::@14 [phi:main::@2->main::@14] + // [30] phi from main::@2 to main::@14 [phi:main::@2->main::@14] b14_from_b2: jmp b14 // main::@14 b14: - // [47] call print_str + // [31] call print_str // [87] phi from main::@14 to print_str [phi:main::@14->print_str] print_str_from_b14: // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@14->print_str#0] -- register_copy @@ -3965,26 +3899,26 @@ main: { jmp b15 // main::@15 b15: - // [48] (byte~) main::$27 ← (byte) main::i#10 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [32] (byte~) main::$27 ← (byte) main::i#12 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [49] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) -- vwuz1=pwuc1_derefidx_vbuaa + // [33] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) -- vwuz1=pwuc1_derefidx_vbuaa tay lda lintab1,y sta print_word.w lda lintab1+1,y sta print_word.w+1 - // [50] call print_word + // [34] call print_word // [69] phi from main::@15 to print_word [phi:main::@15->print_word] print_word_from_b15: // [69] phi (word) print_word::w#10 = (word) print_word::w#3 [phi:main::@15->print_word#0] -- register_copy jsr print_word - // [51] phi from main::@15 to main::@16 [phi:main::@15->main::@16] + // [35] phi from main::@15 to main::@16 [phi:main::@15->main::@16] b16_from_b15: jmp b16 // main::@16 b16: - // [52] call print_str + // [36] call print_str // [87] phi from main::@16 to print_str [phi:main::@16->print_str] print_str_from_b16: // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@16->print_str#0] -- register_copy @@ -3997,26 +3931,26 @@ main: { jmp b17 // main::@17 b17: - // [53] (byte~) main::$28 ← (byte) main::i#10 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [37] (byte~) main::$28 ← (byte) main::i#12 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [54] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) -- vwuz1=pwuc1_derefidx_vbuaa + // [38] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) -- vwuz1=pwuc1_derefidx_vbuaa tay lda lintab2,y sta print_word.w lda lintab2+1,y sta print_word.w+1 - // [55] call print_word + // [39] call print_word // [69] phi from main::@17 to print_word [phi:main::@17->print_word] print_word_from_b17: // [69] phi (word) print_word::w#10 = (word) print_word::w#4 [phi:main::@17->print_word#0] -- register_copy jsr print_word - // [56] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + // [40] phi from main::@17 to main::@18 [phi:main::@17->main::@18] b18_from_b17: jmp b18 // main::@18 b18: - // [57] call print_str + // [41] call print_str // [87] phi from main::@18 to print_str [phi:main::@18->print_str] print_str_from_b18: // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@18->print_str#0] -- register_copy @@ -4029,26 +3963,26 @@ main: { jmp b19 // main::@19 b19: - // [58] (byte~) main::$29 ← (byte) main::i#10 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [42] (byte~) main::$29 ← (byte) main::i#12 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [59] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) -- vwuz1=pwuc1_derefidx_vbuaa + // [43] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) -- vwuz1=pwuc1_derefidx_vbuaa tay lda lintab3,y sta print_word.w lda lintab3+1,y sta print_word.w+1 - // [60] call print_word + // [44] call print_word // [69] phi from main::@19 to print_word [phi:main::@19->print_word] print_word_from_b19: // [69] phi (word) print_word::w#10 = (word) print_word::w#5 [phi:main::@19->print_word#0] -- register_copy jsr print_word - // [61] phi from main::@19 to main::@20 [phi:main::@19->main::@20] + // [45] phi from main::@19 to main::@20 [phi:main::@19->main::@20] b20_from_b19: jmp b20 // main::@20 b20: - // [62] call print_ln + // [46] call print_ln // [64] phi from main::@20 to print_ln [phi:main::@20->print_ln] print_ln_from_b20: // [64] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@20->print_ln#0] -- register_copy @@ -4056,12 +3990,119 @@ main: { jmp b21 // main::@21 b21: - // [63] (byte) main::i#1 ← ++ (byte) main::i#10 -- vbuxx=_inc_vbuxx + // [47] (byte) main::i#1 ← ++ (byte) main::i#12 -- vbuxx=_inc_vbuxx inx - // [26] phi from main::@21 to main::@1 [phi:main::@21->main::@1] - b1_from_b21: - // [26] phi (byte) main::i#10 = (byte) main::i#1 [phi:main::@21->main::@1#0] -- register_copy jmp b1 + // main::@1 + b1: + // [48] if((byte) main::i#1<(byte) $14) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #$14 + bcc b2_from_b1 + jmp b3 + // main::@3 + b3: + // [49] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + // [50] call print_str + // [87] phi from main::@3 to print_str [phi:main::@3->print_str] + print_str_from_b3: + // [87] phi (byte*) print_char_cursor#86 = (byte*~) print_char_cursor#99 [phi:main::@3->print_str#0] -- register_copy + // [87] phi (byte*) print_str::str#12 = (const string) main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + // [51] phi from main::@3 to main::@22 [phi:main::@3->main::@22] + b22_from_b3: + jmp b22 + // main::@22 + b22: + // [52] call print_word + // [69] phi from main::@22 to print_word [phi:main::@22->print_word] + print_word_from_b22: + // [69] phi (word) print_word::w#10 = (word) $7461 [phi:main::@22->print_word#0] -- vwuz1=vwuc1 + lda #<$7461 + sta print_word.w + lda #>$7461 + sta print_word.w+1 + jsr print_word + // [53] phi from main::@22 to main::@23 [phi:main::@22->main::@23] + b23_from_b22: + jmp b23 + // main::@23 + b23: + // [54] call print_str + // [87] phi from main::@23 to print_str [phi:main::@23->print_str] + print_str_from_b23: + // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@23->print_str#0] -- register_copy + // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + // [55] phi from main::@23 to main::@24 [phi:main::@23->main::@24] + b24_from_b23: + jmp b24 + // main::@24 + b24: + // [56] call print_word + // [69] phi from main::@24 to print_word [phi:main::@24->print_word] + print_word_from_b24: + // [69] phi (word) print_word::w#10 = (word) $f781 [phi:main::@24->print_word#0] -- vwuz1=vwuc1 + lda #<$f781 + sta print_word.w + lda #>$f781 + sta print_word.w+1 + jsr print_word + // [57] phi from main::@24 to main::@25 [phi:main::@24->main::@25] + b25_from_b24: + jmp b25 + // main::@25 + b25: + // [58] call print_str + // [87] phi from main::@25 to print_str [phi:main::@25->print_str] + print_str_from_b25: + // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@25->print_str#0] -- register_copy + // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + // [59] phi from main::@25 to main::@26 [phi:main::@25->main::@26] + b26_from_b25: + jmp b26 + // main::@26 + b26: + // [60] call print_word + // [69] phi from main::@26 to print_word [phi:main::@26->print_word] + print_word_from_b26: + // [69] phi (word) print_word::w#10 = (word) $6488 [phi:main::@26->print_word#0] -- vwuz1=vwuc1 + lda #<$6488 + sta print_word.w + lda #>$6488 + sta print_word.w+1 + jsr print_word + // [61] phi from main::@26 to main::@27 [phi:main::@26->main::@27] + b27_from_b26: + jmp b27 + // main::@27 + b27: + // [62] call print_ln + // [64] phi from main::@27 to print_ln [phi:main::@27->print_ln] + print_ln_from_b27: + // [64] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@27->print_ln#0] -- register_copy + jsr print_ln + jmp breturn + // main::@return + breturn: + // [63] return + rts str: .text " @" str1: .text " @" lintab1: .fill 2*$14, 0 @@ -4255,43 +4296,44 @@ memset: { .label str = $400 .label end = str+num .label dst = $b - // [98] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [98] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [98] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [98] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [99] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [98] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [101] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [99] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [102] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [100] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [98] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [98] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [101] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #lin16u_gen::@1] - b1_from_b4: - // [115] phi (word*) lin16u_gen::lintab#4 = (word*) lin16u_gen::lintab#6 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- register_copy - // [115] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- register_copy - // [115] phi (word) lin16u_gen::i#2 = (byte) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vwuz1=vbuc1 + // [115] phi from lin16u_gen::@4 to lin16u_gen::@2 [phi:lin16u_gen::@4->lin16u_gen::@2] + b2_from_b4: + // [115] phi (word*) lin16u_gen::lintab#9 = (word*) lin16u_gen::lintab#10 [phi:lin16u_gen::@4->lin16u_gen::@2#0] -- register_copy + // [115] phi (dword) lin16u_gen::val#4 = (dword) lin16u_gen::val#0 [phi:lin16u_gen::@4->lin16u_gen::@2#1] -- register_copy + // [115] phi (word) lin16u_gen::i#4 = (byte) 0 [phi:lin16u_gen::@4->lin16u_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // lin16u_gen::@1 - b1: - // [116] if((word) lin16u_gen::i#2<(byte) $14) goto lin16u_gen::@2 -- vwuz1_lt_vbuc1_then_la1 - lda i+1 - cmp #>$14 - bcc b2 - bne !+ - lda i - cmp #<$14 - bcc b2 - !: - jmp breturn - // lin16u_gen::@return - breturn: - // [117] return - rts + jmp b2 + // [115] phi from lin16u_gen::@1 to lin16u_gen::@2 [phi:lin16u_gen::@1->lin16u_gen::@2] + b2_from_b1: + // [115] phi (word*) lin16u_gen::lintab#9 = (word*) lin16u_gen::lintab#3 [phi:lin16u_gen::@1->lin16u_gen::@2#0] -- register_copy + // [115] phi (dword) lin16u_gen::val#4 = (dword) lin16u_gen::val#1 [phi:lin16u_gen::@1->lin16u_gen::@2#1] -- register_copy + // [115] phi (word) lin16u_gen::i#4 = (word) lin16u_gen::i#1 [phi:lin16u_gen::@1->lin16u_gen::@2#2] -- register_copy + jmp b2 // lin16u_gen::@2 b2: - // [118] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#2 -- vwuz1=_hi_vduz2 + // [116] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#4 -- vwuz1=_hi_vduz2 lda val+2 sta _6 lda val+3 sta _6+1 - // [119] *((word*) lin16u_gen::lintab#4) ← (word~) lin16u_gen::$6 -- _deref_pwuz1=vwuz2 + // [117] *((word*) lin16u_gen::lintab#9) ← (word~) lin16u_gen::$6 -- _deref_pwuz1=vwuz2 ldy #0 lda _6 sta (lintab),y iny lda _6+1 sta (lintab),y - // [120] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 -- vduz1=vduz1_plus_vduz2 + // [118] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#4 + (dword) lin16u_gen::step#0 -- vduz1=vduz1_plus_vduz2 lda val clc adc step @@ -4435,7 +4467,7 @@ lin16u_gen: { lda val+3 adc step+3 sta val+3 - // [121] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [119] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#9 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc lintab @@ -4443,17 +4475,28 @@ lin16u_gen: { bcc !+ inc lintab+1 !: - // [122] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 -- vwuz1=_inc_vwuz1 + // [120] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#4 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [115] phi from lin16u_gen::@2 to lin16u_gen::@1 [phi:lin16u_gen::@2->lin16u_gen::@1] - b1_from_b2: - // [115] phi (word*) lin16u_gen::lintab#4 = (word*) lin16u_gen::lintab#3 [phi:lin16u_gen::@2->lin16u_gen::@1#0] -- register_copy - // [115] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#1 [phi:lin16u_gen::@2->lin16u_gen::@1#1] -- register_copy - // [115] phi (word) lin16u_gen::i#2 = (word) lin16u_gen::i#1 [phi:lin16u_gen::@2->lin16u_gen::@1#2] -- register_copy jmp b1 + // lin16u_gen::@1 + b1: + // [121] if((word) lin16u_gen::i#1<(byte) $14) goto lin16u_gen::@2 -- vwuz1_lt_vbuc1_then_la1 + lda i+1 + cmp #>$14 + bcc b2_from_b1 + bne !+ + lda i + cmp #<$14 + bcc b2_from_b1 + !: + jmp breturn + // lin16u_gen::@return + breturn: + // [122] return + rts } // divr16u // Performs division on two 16 bit unsigned words and an initial remainder @@ -4582,15 +4625,7 @@ Removing instruction jmp b10 Removing instruction jmp b11 Removing instruction jmp b12 Removing instruction jmp b13 -Removing instruction jmp b1 -Removing instruction jmp b3 -Removing instruction jmp b22 -Removing instruction jmp b23 -Removing instruction jmp b24 -Removing instruction jmp b25 -Removing instruction jmp b26 -Removing instruction jmp b27 -Removing instruction jmp breturn +Removing instruction jmp b2 Removing instruction jmp b14 Removing instruction jmp b15 Removing instruction jmp b16 @@ -4600,6 +4635,15 @@ Removing instruction jmp b19 Removing instruction jmp b20 Removing instruction jmp b21 Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp b22 +Removing instruction jmp b23 +Removing instruction jmp b24 +Removing instruction jmp b25 +Removing instruction jmp b26 +Removing instruction jmp b27 +Removing instruction jmp breturn +Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn @@ -4609,10 +4653,12 @@ Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp breturn +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp b3 Removing instruction jmp b4 +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp b1 @@ -4633,10 +4679,15 @@ Removing instruction lda #>0 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b2_from_b1 with b2 Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 Replacing label b1_from_b2 with b1 Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Replacing label b3_from_b2 with b3 Replacing label b3_from_b2 with b3 Replacing label b1_from_b3 with b1 @@ -4664,6 +4715,15 @@ Removing instruction b12_from_b11: Removing instruction print_word_from_b12: Removing instruction b13_from_b12: Removing instruction print_ln_from_b13: +Removing instruction b2_from_b1: +Removing instruction b14_from_b2: +Removing instruction print_str_from_b14: +Removing instruction b16_from_b15: +Removing instruction print_str_from_b16: +Removing instruction b18_from_b17: +Removing instruction print_str_from_b18: +Removing instruction b20_from_b19: +Removing instruction print_ln_from_b20: Removing instruction b22_from_b3: Removing instruction print_word_from_b22: Removing instruction b23_from_b22: @@ -4676,18 +4736,12 @@ Removing instruction b26_from_b25: Removing instruction print_word_from_b26: Removing instruction b27_from_b26: Removing instruction print_ln_from_b27: -Removing instruction b14_from_b2: -Removing instruction print_str_from_b14: -Removing instruction b16_from_b15: -Removing instruction print_str_from_b16: -Removing instruction b18_from_b17: -Removing instruction print_str_from_b18: -Removing instruction b20_from_b19: -Removing instruction print_ln_from_b20: Removing instruction b1_from_print_ln: Removing instruction b1_from_b1: Removing instruction b1_from_print_str: Removing instruction b1_from_b2: +Removing instruction b2_from_b1: +Removing instruction b2_from_b1: Removing instruction b1_from_b3: Removing instruction b2_from_b1: Removing instruction b2_from_b4: @@ -4707,16 +4761,7 @@ Removing instruction b10: Removing instruction b11: Removing instruction b12: Removing instruction b13: -Removing instruction b1_from_b13: -Removing instruction b3: -Removing instruction print_str_from_b3: -Removing instruction b22: -Removing instruction b23: -Removing instruction b24: -Removing instruction b25: -Removing instruction b26: -Removing instruction b27: -Removing instruction breturn: +Removing instruction b2_from_b13: Removing instruction print_byte_from_b2: Removing instruction b14: Removing instruction b15: @@ -4729,7 +4774,16 @@ Removing instruction b19: Removing instruction print_word_from_b19: Removing instruction b20: Removing instruction b21: -Removing instruction b1_from_b21: +Removing instruction b1: +Removing instruction b3: +Removing instruction print_str_from_b3: +Removing instruction b22: +Removing instruction b23: +Removing instruction b24: +Removing instruction b25: +Removing instruction b26: +Removing instruction b27: +Removing instruction breturn: Removing instruction breturn: Removing instruction print_byte_from_print_word: Removing instruction b1: @@ -4743,16 +4797,16 @@ Removing instruction breturn: Removing instruction breturn: Removing instruction memset_from_print_cls: Removing instruction breturn: -Removing instruction b1_from_memset: +Removing instruction b2_from_memset: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Removing instruction divr16u_from_lin16u_gen: Removing instruction b3: Removing instruction divr16u_from_b3: Removing instruction b4: -Removing instruction b1_from_b4: +Removing instruction b2_from_b4: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Removing instruction b1_from_divr16u: Removing instruction b4: Removing instruction b5: @@ -4761,6 +4815,9 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Removing instruction jmp b2 +Removing instruction jmp b2 Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: @@ -4822,13 +4879,13 @@ FINAL SYMBOL TABLE (word) lin16u_gen::ampl (word) lin16u_gen::ampl#0 ampl zp ZP_WORD:3 4.0 (word) lin16u_gen::i -(word) lin16u_gen::i#1 i zp ZP_WORD:13 22.0 -(word) lin16u_gen::i#2 i zp ZP_WORD:13 5.5 +(word) lin16u_gen::i#1 i zp ZP_WORD:13 16.5 +(word) lin16u_gen::i#4 i zp ZP_WORD:13 4.4 (word) lin16u_gen::length (word*) lin16u_gen::lintab -(word*) lin16u_gen::lintab#3 lintab zp ZP_WORD:11 11.0 -(word*) lin16u_gen::lintab#4 lintab zp ZP_WORD:11 7.000000000000001 -(word*) lin16u_gen::lintab#6 lintab zp ZP_WORD:11 0.16666666666666666 +(word*) lin16u_gen::lintab#10 lintab zp ZP_WORD:11 0.16666666666666666 +(word*) lin16u_gen::lintab#3 lintab zp ZP_WORD:11 7.333333333333333 +(word*) lin16u_gen::lintab#9 lintab zp ZP_WORD:11 8.75 (word) lin16u_gen::max (word) lin16u_gen::max#3 max zp ZP_WORD:3 2.0 (word) lin16u_gen::min @@ -4841,8 +4898,8 @@ FINAL SYMBOL TABLE (word) lin16u_gen::stepi#0 stepi zp ZP_WORD:17 0.8 (dword) lin16u_gen::val (dword) lin16u_gen::val#0 val zp ZP_DWORD:7 4.0 -(dword) lin16u_gen::val#1 val zp ZP_DWORD:7 7.333333333333333 -(dword) lin16u_gen::val#2 val zp ZP_DWORD:7 8.75 +(dword) lin16u_gen::val#1 val zp ZP_DWORD:7 5.5 +(dword) lin16u_gen::val#4 val zp ZP_DWORD:7 11.666666666666666 (void()) main() (byte~) main::$27 reg byte a 22.0 (byte~) main::$28 reg byte a 22.0 @@ -4876,8 +4933,8 @@ FINAL SYMBOL TABLE (label) main::@9 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#10 reg byte x 3.5 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#12 reg byte x 3.142857142857143 (word[$14]) main::lintab1 (const word[$14]) main::lintab1#0 lintab1 = { fill( $14, 0) } (word[$14]) main::lintab2 @@ -4893,8 +4950,8 @@ FINAL SYMBOL TABLE (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:11 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:11 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:11 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:11 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -4958,14 +5015,14 @@ FINAL SYMBOL TABLE (word) rem16u (word) rem16u#1 rem16u zp ZP_WORD:23 0.8 -reg byte x [ main::i#10 main::i#1 ] +reg byte x [ main::i#12 main::i#1 ] zp ZP_BYTE:2 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] zp ZP_WORD:3 [ lin16u_gen::max#3 lin16u_gen::ampl#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#102 print_char_cursor#2 print_char_cursor#11 print_char_cursor#99 print_char_cursor#1 ] zp ZP_WORD:5 [ lin16u_gen::min#3 print_str::str#10 print_str::str#12 print_str::str#0 print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ] -zp ZP_DWORD:7 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] -zp ZP_WORD:11 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 memset::dst#2 memset::dst#1 print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] -zp ZP_WORD:13 [ divr16u::divisor#6 lin16u_gen::i#2 lin16u_gen::i#1 ] +zp ZP_DWORD:7 [ lin16u_gen::val#4 lin16u_gen::val#1 lin16u_gen::val#0 ] +zp ZP_WORD:11 [ lin16u_gen::lintab#9 lin16u_gen::lintab#3 lin16u_gen::lintab#10 memset::dst#4 memset::dst#1 print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] +zp ZP_WORD:13 [ divr16u::divisor#6 lin16u_gen::i#4 lin16u_gen::i#1 ] zp ZP_WORD:15 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 lin16u_gen::stepf#0 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte a [ main::$27 ] @@ -4981,7 +5038,7 @@ reg byte a [ divr16u::$2 ] FINAL ASSEMBLER -Score: 13613 +Score: 13523 // File Comments // Linear table generator @@ -5007,7 +5064,7 @@ main: { // lin16u_gen(557, 29793, lintab1, 20) // [5] call lin16u_gen // [103] phi from main to lin16u_gen [phi:main->lin16u_gen] - // [103] phi (word*) lin16u_gen::lintab#6 = (const word[$14]) main::lintab1#0 [phi:main->lin16u_gen#0] -- pwuz1=pwuc1 + // [103] phi (word*) lin16u_gen::lintab#10 = (const word[$14]) main::lintab1#0 [phi:main->lin16u_gen#0] -- pwuz1=pwuc1 lda #lintab1 @@ -5028,7 +5085,7 @@ main: { // lin16u_gen(31179, 63361, lintab2, 20) // [7] call lin16u_gen // [103] phi from main::@4 to lin16u_gen [phi:main::@4->lin16u_gen] - // [103] phi (word*) lin16u_gen::lintab#6 = (const word[$14]) main::lintab2#0 [phi:main::@4->lin16u_gen#0] -- pwuz1=pwuc1 + // [103] phi (word*) lin16u_gen::lintab#10 = (const word[$14]) main::lintab2#0 [phi:main::@4->lin16u_gen#0] -- pwuz1=pwuc1 lda #lintab2 @@ -5049,7 +5106,7 @@ main: { // lin16u_gen(0, $6488, lintab3, 20) // [9] call lin16u_gen // [103] phi from main::@5 to lin16u_gen [phi:main::@5->lin16u_gen] - // [103] phi (word*) lin16u_gen::lintab#6 = (const word[$14]) main::lintab3#0 [phi:main::@5->lin16u_gen#0] -- pwuz1=pwuc1 + // [103] phi (word*) lin16u_gen::lintab#10 = (const word[$14]) main::lintab3#0 [phi:main::@5->lin16u_gen#0] -- pwuz1=pwuc1 lda #lintab3 @@ -5153,119 +5210,31 @@ main: { lda #>$400 sta print_line_cursor+1 jsr print_ln - // [26] phi from main::@13 to main::@1 [phi:main::@13->main::@1] - // [26] phi (byte) main::i#10 = (byte) 0 [phi:main::@13->main::@1#0] -- vbuxx=vbuc1 + // [26] phi from main::@13 to main::@2 [phi:main::@13->main::@2] + // [26] phi (byte) main::i#12 = (byte) 0 [phi:main::@13->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // main::@1 - b1: - // for(byte i=0; i<20; i++) - // [27] if((byte) main::i#10<(byte) $14) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$14 - bcc b2 - // main::@3 - // [28] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 - lda print_line_cursor - sta print_char_cursor - lda print_line_cursor+1 - sta print_char_cursor+1 - // print_str(" ") - // [29] call print_str - // [87] phi from main::@3 to print_str [phi:main::@3->print_str] - // [87] phi (byte*) print_char_cursor#86 = (byte*~) print_char_cursor#99 [phi:main::@3->print_str#0] -- register_copy - // [87] phi (byte*) print_str::str#12 = (const string) main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - // [30] phi from main::@3 to main::@22 [phi:main::@3->main::@22] - // main::@22 - // print_word(29793) - // [31] call print_word - // [69] phi from main::@22 to print_word [phi:main::@22->print_word] - // [69] phi (word) print_word::w#10 = (word) $7461 [phi:main::@22->print_word#0] -- vwuz1=vwuc1 - lda #<$7461 - sta print_word.w - lda #>$7461 - sta print_word.w+1 - jsr print_word - // [32] phi from main::@22 to main::@23 [phi:main::@22->main::@23] - // main::@23 - // print_str(" ") - // [33] call print_str - // [87] phi from main::@23 to print_str [phi:main::@23->print_str] - // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@23->print_str#0] -- register_copy - // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - // [34] phi from main::@23 to main::@24 [phi:main::@23->main::@24] - // main::@24 - // print_word(63361) - // [35] call print_word - // [69] phi from main::@24 to print_word [phi:main::@24->print_word] - // [69] phi (word) print_word::w#10 = (word) $f781 [phi:main::@24->print_word#0] -- vwuz1=vwuc1 - lda #<$f781 - sta print_word.w - lda #>$f781 - sta print_word.w+1 - jsr print_word - // [36] phi from main::@24 to main::@25 [phi:main::@24->main::@25] - // main::@25 - // print_str(" ") - // [37] call print_str - // [87] phi from main::@25 to print_str [phi:main::@25->print_str] - // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@25->print_str#0] -- register_copy - // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - // [38] phi from main::@25 to main::@26 [phi:main::@25->main::@26] - // main::@26 - // print_word($6488) - // [39] call print_word - // [69] phi from main::@26 to print_word [phi:main::@26->print_word] - // [69] phi (word) print_word::w#10 = (word) $6488 [phi:main::@26->print_word#0] -- vwuz1=vwuc1 - lda #<$6488 - sta print_word.w - lda #>$6488 - sta print_word.w+1 - jsr print_word - // [40] phi from main::@26 to main::@27 [phi:main::@26->main::@27] - // main::@27 - // print_ln() - // [41] call print_ln - // [64] phi from main::@27 to print_ln [phi:main::@27->print_ln] - // [64] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@27->print_ln#0] -- register_copy - jsr print_ln - // main::@return - // } - // [42] return - rts + // [26] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [26] phi (byte) main::i#12 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy // main::@2 b2: // print_byte(i) - // [43] (byte) print_byte::b#2 ← (byte) main::i#10 -- vbuz1=vbuxx + // [27] (byte) print_byte::b#2 ← (byte) main::i#12 -- vbuz1=vbuxx stx print_byte.b - // [44] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [28] (byte*~) print_char_cursor#102 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 // print_byte(i) - // [45] call print_byte + // [29] call print_byte // [75] phi from main::@2 to print_byte [phi:main::@2->print_byte] // [75] phi (byte*) print_char_cursor#81 = (byte*~) print_char_cursor#102 [phi:main::@2->print_byte#0] -- register_copy // [75] phi (byte) print_byte::b#3 = (byte) print_byte::b#2 [phi:main::@2->print_byte#1] -- register_copy jsr print_byte - // [46] phi from main::@2 to main::@14 [phi:main::@2->main::@14] + // [30] phi from main::@2 to main::@14 [phi:main::@2->main::@14] // main::@14 // print_str(" ") - // [47] call print_str + // [31] call print_str // [87] phi from main::@14 to print_str [phi:main::@14->print_str] // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@14->print_str#0] -- register_copy // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1 @@ -5276,23 +5245,23 @@ main: { jsr print_str // main::@15 // print_word(lintab1[i]) - // [48] (byte~) main::$27 ← (byte) main::i#10 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [32] (byte~) main::$27 ← (byte) main::i#12 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [49] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) -- vwuz1=pwuc1_derefidx_vbuaa + // [33] (word) print_word::w#3 ← *((const word[$14]) main::lintab1#0 + (byte~) main::$27) -- vwuz1=pwuc1_derefidx_vbuaa tay lda lintab1,y sta print_word.w lda lintab1+1,y sta print_word.w+1 - // [50] call print_word + // [34] call print_word // [69] phi from main::@15 to print_word [phi:main::@15->print_word] // [69] phi (word) print_word::w#10 = (word) print_word::w#3 [phi:main::@15->print_word#0] -- register_copy jsr print_word - // [51] phi from main::@15 to main::@16 [phi:main::@15->main::@16] + // [35] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 // print_str(" ") - // [52] call print_str + // [36] call print_str // [87] phi from main::@16 to print_str [phi:main::@16->print_str] // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@16->print_str#0] -- register_copy // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1 @@ -5303,23 +5272,23 @@ main: { jsr print_str // main::@17 // print_word(lintab2[i]) - // [53] (byte~) main::$28 ← (byte) main::i#10 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [37] (byte~) main::$28 ← (byte) main::i#12 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [54] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) -- vwuz1=pwuc1_derefidx_vbuaa + // [38] (word) print_word::w#4 ← *((const word[$14]) main::lintab2#0 + (byte~) main::$28) -- vwuz1=pwuc1_derefidx_vbuaa tay lda lintab2,y sta print_word.w lda lintab2+1,y sta print_word.w+1 - // [55] call print_word + // [39] call print_word // [69] phi from main::@17 to print_word [phi:main::@17->print_word] // [69] phi (word) print_word::w#10 = (word) print_word::w#4 [phi:main::@17->print_word#0] -- register_copy jsr print_word - // [56] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + // [40] phi from main::@17 to main::@18 [phi:main::@17->main::@18] // main::@18 // print_str(" ") - // [57] call print_str + // [41] call print_str // [87] phi from main::@18 to print_str [phi:main::@18->print_str] // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@18->print_str#0] -- register_copy // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1 @@ -5330,33 +5299,118 @@ main: { jsr print_str // main::@19 // print_word(lintab3[i]) - // [58] (byte~) main::$29 ← (byte) main::i#10 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [42] (byte~) main::$29 ← (byte) main::i#12 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [59] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) -- vwuz1=pwuc1_derefidx_vbuaa + // [43] (word) print_word::w#5 ← *((const word[$14]) main::lintab3#0 + (byte~) main::$29) -- vwuz1=pwuc1_derefidx_vbuaa tay lda lintab3,y sta print_word.w lda lintab3+1,y sta print_word.w+1 - // [60] call print_word + // [44] call print_word // [69] phi from main::@19 to print_word [phi:main::@19->print_word] // [69] phi (word) print_word::w#10 = (word) print_word::w#5 [phi:main::@19->print_word#0] -- register_copy jsr print_word - // [61] phi from main::@19 to main::@20 [phi:main::@19->main::@20] + // [45] phi from main::@19 to main::@20 [phi:main::@19->main::@20] // main::@20 // print_ln() - // [62] call print_ln + // [46] call print_ln // [64] phi from main::@20 to print_ln [phi:main::@20->print_ln] // [64] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@20->print_ln#0] -- register_copy jsr print_ln // main::@21 // for(byte i=0; i<20; i++) - // [63] (byte) main::i#1 ← ++ (byte) main::i#10 -- vbuxx=_inc_vbuxx + // [47] (byte) main::i#1 ← ++ (byte) main::i#12 -- vbuxx=_inc_vbuxx inx - // [26] phi from main::@21 to main::@1 [phi:main::@21->main::@1] - // [26] phi (byte) main::i#10 = (byte) main::i#1 [phi:main::@21->main::@1#0] -- register_copy - jmp b1 + // main::@1 + // [48] if((byte) main::i#1<(byte) $14) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #$14 + bcc b2 + // main::@3 + // [49] (byte*~) print_char_cursor#99 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + // print_str(" ") + // [50] call print_str + // [87] phi from main::@3 to print_str [phi:main::@3->print_str] + // [87] phi (byte*) print_char_cursor#86 = (byte*~) print_char_cursor#99 [phi:main::@3->print_str#0] -- register_copy + // [87] phi (byte*) print_str::str#12 = (const string) main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + // [51] phi from main::@3 to main::@22 [phi:main::@3->main::@22] + // main::@22 + // print_word(29793) + // [52] call print_word + // [69] phi from main::@22 to print_word [phi:main::@22->print_word] + // [69] phi (word) print_word::w#10 = (word) $7461 [phi:main::@22->print_word#0] -- vwuz1=vwuc1 + lda #<$7461 + sta print_word.w + lda #>$7461 + sta print_word.w+1 + jsr print_word + // [53] phi from main::@22 to main::@23 [phi:main::@22->main::@23] + // main::@23 + // print_str(" ") + // [54] call print_str + // [87] phi from main::@23 to print_str [phi:main::@23->print_str] + // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@23->print_str#0] -- register_copy + // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + // [55] phi from main::@23 to main::@24 [phi:main::@23->main::@24] + // main::@24 + // print_word(63361) + // [56] call print_word + // [69] phi from main::@24 to print_word [phi:main::@24->print_word] + // [69] phi (word) print_word::w#10 = (word) $f781 [phi:main::@24->print_word#0] -- vwuz1=vwuc1 + lda #<$f781 + sta print_word.w + lda #>$f781 + sta print_word.w+1 + jsr print_word + // [57] phi from main::@24 to main::@25 [phi:main::@24->main::@25] + // main::@25 + // print_str(" ") + // [58] call print_str + // [87] phi from main::@25 to print_str [phi:main::@25->print_str] + // [87] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@25->print_str#0] -- register_copy + // [87] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + // [59] phi from main::@25 to main::@26 [phi:main::@25->main::@26] + // main::@26 + // print_word($6488) + // [60] call print_word + // [69] phi from main::@26 to print_word [phi:main::@26->print_word] + // [69] phi (word) print_word::w#10 = (word) $6488 [phi:main::@26->print_word#0] -- vwuz1=vwuc1 + lda #<$6488 + sta print_word.w + lda #>$6488 + sta print_word.w+1 + jsr print_word + // [61] phi from main::@26 to main::@27 [phi:main::@26->main::@27] + // main::@27 + // print_ln() + // [62] call print_ln + // [64] phi from main::@27 to print_ln [phi:main::@27->print_ln] + // [64] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@27->print_ln#0] -- register_copy + jsr print_ln + // main::@return + // } + // [63] return + rts str: .text " @" str1: .text " @" lintab1: .fill 2*$14, 0 @@ -5542,16 +5596,29 @@ memset: { .label str = $400 .label end = str+num .label dst = $b - // [98] phi from memset to memset::@1 [phi:memset->memset::@1] - // [98] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [98] phi from memset to memset::@2 [phi:memset->memset::@2] + // [98] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [98] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [98] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [99] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [99] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [100] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [101] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -5560,24 +5627,8 @@ memset: { bne b2 // memset::@return // } - // [100] return + // [102] return rts - // memset::@2 - b2: - // *dst = c - // [101] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [102] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [98] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [98] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // lin16u_gen // Generate word linear table @@ -5667,39 +5718,27 @@ lin16u_gen: { sta val+2 lda min+1 sta val+3 - // [115] phi from lin16u_gen::@4 to lin16u_gen::@1 [phi:lin16u_gen::@4->lin16u_gen::@1] - // [115] phi (word*) lin16u_gen::lintab#4 = (word*) lin16u_gen::lintab#6 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- register_copy - // [115] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- register_copy - // [115] phi (word) lin16u_gen::i#2 = (byte) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vwuz1=vbuc1 + // [115] phi from lin16u_gen::@4 to lin16u_gen::@2 [phi:lin16u_gen::@4->lin16u_gen::@2] + // [115] phi (word*) lin16u_gen::lintab#9 = (word*) lin16u_gen::lintab#10 [phi:lin16u_gen::@4->lin16u_gen::@2#0] -- register_copy + // [115] phi (dword) lin16u_gen::val#4 = (dword) lin16u_gen::val#0 [phi:lin16u_gen::@4->lin16u_gen::@2#1] -- register_copy + // [115] phi (word) lin16u_gen::i#4 = (byte) 0 [phi:lin16u_gen::@4->lin16u_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i sta i+1 - // lin16u_gen::@1 - b1: - // for(word i=0; i$14 - bcc b2 - bne !+ - lda i - cmp #<$14 - bcc b2 - !: - // lin16u_gen::@return - // } - // [117] return - rts + // [115] phi from lin16u_gen::@1 to lin16u_gen::@2 [phi:lin16u_gen::@1->lin16u_gen::@2] + // [115] phi (word*) lin16u_gen::lintab#9 = (word*) lin16u_gen::lintab#3 [phi:lin16u_gen::@1->lin16u_gen::@2#0] -- register_copy + // [115] phi (dword) lin16u_gen::val#4 = (dword) lin16u_gen::val#1 [phi:lin16u_gen::@1->lin16u_gen::@2#1] -- register_copy + // [115] phi (word) lin16u_gen::i#4 = (word) lin16u_gen::i#1 [phi:lin16u_gen::@1->lin16u_gen::@2#2] -- register_copy // lin16u_gen::@2 b2: // >val - // [118] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#2 -- vwuz1=_hi_vduz2 + // [116] (word~) lin16u_gen::$6 ← > (dword) lin16u_gen::val#4 -- vwuz1=_hi_vduz2 lda val+2 sta _6 lda val+3 sta _6+1 // *lintab = >val - // [119] *((word*) lin16u_gen::lintab#4) ← (word~) lin16u_gen::$6 -- _deref_pwuz1=vwuz2 + // [117] *((word*) lin16u_gen::lintab#9) ← (word~) lin16u_gen::$6 -- _deref_pwuz1=vwuz2 ldy #0 lda _6 sta (lintab),y @@ -5707,7 +5746,7 @@ lin16u_gen: { lda _6+1 sta (lintab),y // val = val + step - // [120] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 -- vduz1=vduz1_plus_vduz2 + // [118] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#4 + (dword) lin16u_gen::step#0 -- vduz1=vduz1_plus_vduz2 lda val clc adc step @@ -5722,7 +5761,7 @@ lin16u_gen: { adc step+3 sta val+3 // lintab++; - // [121] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [119] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#9 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc lintab @@ -5731,16 +5770,25 @@ lin16u_gen: { inc lintab+1 !: // for(word i=0; ilin16u_gen::@1] - // [115] phi (word*) lin16u_gen::lintab#4 = (word*) lin16u_gen::lintab#3 [phi:lin16u_gen::@2->lin16u_gen::@1#0] -- register_copy - // [115] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#1 [phi:lin16u_gen::@2->lin16u_gen::@1#1] -- register_copy - // [115] phi (word) lin16u_gen::i#2 = (word) lin16u_gen::i#1 [phi:lin16u_gen::@2->lin16u_gen::@1#2] -- register_copy - jmp b1 + // lin16u_gen::@1 + // [121] if((word) lin16u_gen::i#1<(byte) $14) goto lin16u_gen::@2 -- vwuz1_lt_vbuc1_then_la1 + lda i+1 + cmp #>$14 + bcc b2 + bne !+ + lda i + cmp #<$14 + bcc b2 + !: + // lin16u_gen::@return + // } + // [122] return + rts } // divr16u // Performs division on two 16 bit unsigned words and an initial remainder diff --git a/src/test/ref/linegen.sym b/src/test/ref/linegen.sym index 486a427c5..ad9a4d852 100644 --- a/src/test/ref/linegen.sym +++ b/src/test/ref/linegen.sym @@ -53,13 +53,13 @@ (word) lin16u_gen::ampl (word) lin16u_gen::ampl#0 ampl zp ZP_WORD:3 4.0 (word) lin16u_gen::i -(word) lin16u_gen::i#1 i zp ZP_WORD:13 22.0 -(word) lin16u_gen::i#2 i zp ZP_WORD:13 5.5 +(word) lin16u_gen::i#1 i zp ZP_WORD:13 16.5 +(word) lin16u_gen::i#4 i zp ZP_WORD:13 4.4 (word) lin16u_gen::length (word*) lin16u_gen::lintab -(word*) lin16u_gen::lintab#3 lintab zp ZP_WORD:11 11.0 -(word*) lin16u_gen::lintab#4 lintab zp ZP_WORD:11 7.000000000000001 -(word*) lin16u_gen::lintab#6 lintab zp ZP_WORD:11 0.16666666666666666 +(word*) lin16u_gen::lintab#10 lintab zp ZP_WORD:11 0.16666666666666666 +(word*) lin16u_gen::lintab#3 lintab zp ZP_WORD:11 7.333333333333333 +(word*) lin16u_gen::lintab#9 lintab zp ZP_WORD:11 8.75 (word) lin16u_gen::max (word) lin16u_gen::max#3 max zp ZP_WORD:3 2.0 (word) lin16u_gen::min @@ -72,8 +72,8 @@ (word) lin16u_gen::stepi#0 stepi zp ZP_WORD:17 0.8 (dword) lin16u_gen::val (dword) lin16u_gen::val#0 val zp ZP_DWORD:7 4.0 -(dword) lin16u_gen::val#1 val zp ZP_DWORD:7 7.333333333333333 -(dword) lin16u_gen::val#2 val zp ZP_DWORD:7 8.75 +(dword) lin16u_gen::val#1 val zp ZP_DWORD:7 5.5 +(dword) lin16u_gen::val#4 val zp ZP_DWORD:7 11.666666666666666 (void()) main() (byte~) main::$27 reg byte a 22.0 (byte~) main::$28 reg byte a 22.0 @@ -107,8 +107,8 @@ (label) main::@9 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#10 reg byte x 3.5 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#12 reg byte x 3.142857142857143 (word[$14]) main::lintab1 (const word[$14]) main::lintab1#0 lintab1 = { fill( $14, 0) } (word[$14]) main::lintab2 @@ -124,8 +124,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:11 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:11 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:11 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:11 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -189,14 +189,14 @@ (word) rem16u (word) rem16u#1 rem16u zp ZP_WORD:23 0.8 -reg byte x [ main::i#10 main::i#1 ] +reg byte x [ main::i#12 main::i#1 ] zp ZP_BYTE:2 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] zp ZP_WORD:3 [ lin16u_gen::max#3 lin16u_gen::ampl#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#102 print_char_cursor#2 print_char_cursor#11 print_char_cursor#99 print_char_cursor#1 ] zp ZP_WORD:5 [ lin16u_gen::min#3 print_str::str#10 print_str::str#12 print_str::str#0 print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ] -zp ZP_DWORD:7 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] -zp ZP_WORD:11 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 memset::dst#2 memset::dst#1 print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] -zp ZP_WORD:13 [ divr16u::divisor#6 lin16u_gen::i#2 lin16u_gen::i#1 ] +zp ZP_DWORD:7 [ lin16u_gen::val#4 lin16u_gen::val#1 lin16u_gen::val#0 ] +zp ZP_WORD:11 [ lin16u_gen::lintab#9 lin16u_gen::lintab#3 lin16u_gen::lintab#10 memset::dst#4 memset::dst#1 print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] +zp ZP_WORD:13 [ divr16u::divisor#6 lin16u_gen::i#4 lin16u_gen::i#1 ] zp ZP_WORD:15 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 lin16u_gen::stepf#0 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte a [ main::$27 ] diff --git a/src/test/ref/loop-break-nested.asm b/src/test/ref/loop-break-nested.asm index 7ac7ae9ef..13db0a5f9 100644 --- a/src/test/ref/loop-break-nested.asm +++ b/src/test/ref/loop-break-nested.asm @@ -8,22 +8,14 @@ main: { sta line lda #>$400 sta line+1 - b1: - lda line+1 - cmp #>$400+$28*$19 - bcc !+ - bne breturn - lda line - cmp #<$400+$28*$19 - bcs breturn - !: + b2: ldy #0 lda (line),y cmp #'a' - bne b2 + bne b1 breturn: rts - b2: + b1: ldy #0 b3: lda (line),y @@ -42,5 +34,13 @@ main: { bcc !+ inc line+1 !: - jmp b1 + lda line+1 + cmp #>$400+$28*$19 + bcc !+ + bne breturn + lda line + cmp #<$400+$28*$19 + bcs breturn + !: + jmp b2 } diff --git a/src/test/ref/loop-break-nested.cfg b/src/test/ref/loop-break-nested.cfg index 049a09907..8d1473eef 100644 --- a/src/test/ref/loop-break-nested.cfg +++ b/src/test/ref/loop-break-nested.cfg @@ -9,26 +9,26 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@5 - [5] (byte*) main::line#2 ← phi( main/(byte*) 1024 main::@5/(byte*) main::line#1 ) - [6] if((byte*) main::line#2>=(word)(number) $400+(number) $28*(number) $19) goto main::@return to:main::@2 -main::@2: scope:[main] from main::@1 - [7] if(*((byte*) main::line#2)!=(byte) 'a') goto main::@3 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::line#12 ← phi( main::@1/(byte*) main::line#1 main/(byte*) 1024 ) + [6] if(*((byte*) main::line#12)!=(byte) 'a') goto main::@3 to:main::@return main::@return: scope:[main] from main::@1 main::@2 - [8] return + [7] return to:@return main::@3: scope:[main] from main::@2 main::@4 - [9] (byte) main::i#2 ← phi( main::@2/(byte) 0 main::@4/(byte) main::i#1 ) - [10] if(*((byte*) main::line#2 + (byte) main::i#2)==(byte) 'a') goto main::@5 + [8] (byte) main::i#2 ← phi( main::@2/(byte) 0 main::@4/(byte) main::i#1 ) + [9] if(*((byte*) main::line#12 + (byte) main::i#2)==(byte) 'a') goto main::@5 to:main::@4 main::@4: scope:[main] from main::@3 - [11] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a' - [12] (byte) main::i#1 ← ++ (byte) main::i#2 - [13] if((byte) main::i#1!=(byte) $28) goto main::@3 + [10] *((byte*) main::line#12 + (byte) main::i#2) ← (byte) 'a' + [11] (byte) main::i#1 ← ++ (byte) main::i#2 + [12] if((byte) main::i#1!=(byte) $28) goto main::@3 to:main::@5 main::@5: scope:[main] from main::@3 main::@4 - [14] (byte*) main::line#1 ← (byte*) main::line#2 + (byte) $28 + [13] (byte*) main::line#1 ← (byte*) main::line#12 + (byte) $28 to:main::@1 +main::@1: scope:[main] from main::@5 + [14] if((byte*) main::line#1>=(word)(number) $400+(number) $28*(number) $19) goto main::@return + to:main::@2 diff --git a/src/test/ref/loop-break-nested.log b/src/test/ref/loop-break-nested.log index 3eddefd7c..018410ba2 100644 --- a/src/test/ref/loop-break-nested.log +++ b/src/test/ref/loop-break-nested.log @@ -127,34 +127,50 @@ Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [16] main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value [18] if(main::i#1!=rangelast(0,$27)) goto main::@6 to (number) $28 +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $28 in if((byte) main::i#1!=(number) $28) goto main::@6 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte*) main::line#1 = (byte*) main::line#2 +Alias (byte*) main::line#12 = (byte*) main::line#8 +Alias (byte*) main::line#10 = (byte*) main::line#9 +Successful SSA optimization Pass2AliasElimination +Alias (byte*) main::line#10 = (byte*) main::line#11 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) main::line#10 (byte*) main::line#12 +Identical Phi Values (byte*) main::line#13 (const byte*) main::line#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always false - eliminating [17] if((const byte*) main::line#0>=(word)(number) $400+(number) $28*(number) $19) goto main::@return +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte*) main::line#0 Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Constant inlined main::line#0 = (byte*) 1024 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@17(between main::@7 and main::@6) +Added new block during phi lifting main::@17(between main::@1 and main::@2) +Added new block during phi lifting main::@18(between main::@7 and main::@6) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of main::@4 CALL GRAPH Calls in [] to main:2 Created 2 initial phi equivalence classes -Coalesced [17] main::line#8 ← main::line#1 -Coalesced [18] main::i#4 ← main::i#1 +Coalesced [18] main::line#14 ← main::line#1 +Coalesced [19] main::i#4 ← main::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@4 Culled Empty Block (label) main::@17 +Culled Empty Block (label) main::@18 Renumbering block main::@6 to main::@3 Renumbering block main::@7 to main::@4 Renumbering block main::@8 to main::@5 @@ -175,29 +191,29 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@5 - [5] (byte*) main::line#2 ← phi( main/(byte*) 1024 main::@5/(byte*) main::line#1 ) - [6] if((byte*) main::line#2>=(word)(number) $400+(number) $28*(number) $19) goto main::@return to:main::@2 -main::@2: scope:[main] from main::@1 - [7] if(*((byte*) main::line#2)!=(byte) 'a') goto main::@3 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::line#12 ← phi( main::@1/(byte*) main::line#1 main/(byte*) 1024 ) + [6] if(*((byte*) main::line#12)!=(byte) 'a') goto main::@3 to:main::@return main::@return: scope:[main] from main::@1 main::@2 - [8] return + [7] return to:@return main::@3: scope:[main] from main::@2 main::@4 - [9] (byte) main::i#2 ← phi( main::@2/(byte) 0 main::@4/(byte) main::i#1 ) - [10] if(*((byte*) main::line#2 + (byte) main::i#2)==(byte) 'a') goto main::@5 + [8] (byte) main::i#2 ← phi( main::@2/(byte) 0 main::@4/(byte) main::i#1 ) + [9] if(*((byte*) main::line#12 + (byte) main::i#2)==(byte) 'a') goto main::@5 to:main::@4 main::@4: scope:[main] from main::@3 - [11] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a' - [12] (byte) main::i#1 ← ++ (byte) main::i#2 - [13] if((byte) main::i#1!=(byte) $28) goto main::@3 + [10] *((byte*) main::line#12 + (byte) main::i#2) ← (byte) 'a' + [11] (byte) main::i#1 ← ++ (byte) main::i#2 + [12] if((byte) main::i#1!=(byte) $28) goto main::@3 to:main::@5 main::@5: scope:[main] from main::@3 main::@4 - [14] (byte*) main::line#1 ← (byte*) main::line#2 + (byte) $28 + [13] (byte*) main::line#1 ← (byte*) main::line#12 + (byte) $28 to:main::@1 +main::@1: scope:[main] from main::@5 + [14] if((byte*) main::line#1>=(word)(number) $400+(number) $28*(number) $19) goto main::@return + to:main::@2 VARIABLE REGISTER WEIGHTS @@ -206,16 +222,16 @@ VARIABLE REGISTER WEIGHTS (byte) main::i#1 151.5 (byte) main::i#2 134.66666666666666 (byte*) main::line -(byte*) main::line#1 22.0 -(byte*) main::line#2 30.75 +(byte*) main::line#1 16.5 +(byte*) main::line#12 33.57142857142857 Initial phi equivalence classes -[ main::line#2 main::line#1 ] +[ main::line#12 main::line#1 ] [ main::i#2 main::i#1 ] Complete equivalence classes -[ main::line#2 main::line#1 ] +[ main::line#12 main::line#1 ] [ main::i#2 main::i#1 ] -Allocated zp ZP_WORD:2 [ main::line#2 main::line#1 ] +Allocated zp ZP_WORD:2 [ main::line#12 main::line#1 ] Allocated zp ZP_BYTE:4 [ main::i#2 main::i#1 ] INITIAL ASM @@ -247,17 +263,71 @@ bend: main: { .label i = 4 .label line = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::line#2 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::line#12 = (byte*) 1024 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$400 sta line lda #>$400 sta line+1 + jmp b2 + // main::@2 + b2: + // [6] if(*((byte*) main::line#12)!=(byte) 'a') goto main::@3 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (line),y + cmp #'a' + bne b3_from_b2 + jmp breturn + // main::@return + breturn: + // [7] return + rts + // [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + // [8] phi (byte) main::i#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 + lda #0 + sta i + jmp b3 + // [8] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + b3_from_b4: + // [8] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#0] -- register_copy + jmp b3 + // main::@3 + b3: + // [9] if(*((byte*) main::line#12 + (byte) main::i#2)==(byte) 'a') goto main::@5 -- pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1 + ldy i + lda (line),y + cmp #'a' + beq b5 + jmp b4 + // main::@4 + b4: + // [10] *((byte*) main::line#12 + (byte) main::i#2) ← (byte) 'a' -- pbuz1_derefidx_vbuz2=vbuc1 + lda #'a' + ldy i + sta (line),y + // [11] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + inc i + // [12] if((byte) main::i#1!=(byte) $28) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 + lda #$28 + cmp i + bne b3_from_b4 + jmp b5 + // main::@5 + b5: + // [13] (byte*) main::line#1 ← (byte*) main::line#12 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: jmp b1 // main::@1 b1: - // [6] if((byte*) main::line#2>=(word)(number) $400+(number) $28*(number) $19) goto main::@return -- pbuz1_ge_vwuc1_then_la1 + // [14] if((byte*) main::line#1>=(word)(number) $400+(number) $28*(number) $19) goto main::@return -- pbuz1_ge_vwuc1_then_la1 lda line+1 cmp #>$400+$28*$19 bcc !+ @@ -266,87 +336,33 @@ main: { cmp #<$400+$28*$19 bcs breturn !: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::line#12 = (byte*) main::line#1 [phi:main::@1->main::@2#0] -- register_copy jmp b2 - // main::@2 - b2: - // [7] if(*((byte*) main::line#2)!=(byte) 'a') goto main::@3 -- _deref_pbuz1_neq_vbuc1_then_la1 - ldy #0 - lda (line),y - cmp #'a' - bne b3_from_b2 - jmp breturn - // main::@return - breturn: - // [8] return - rts - // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - b3_from_b2: - // [9] phi (byte) main::i#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 - lda #0 - sta i - jmp b3 - // [9] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - b3_from_b4: - // [9] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#0] -- register_copy - jmp b3 - // main::@3 - b3: - // [10] if(*((byte*) main::line#2 + (byte) main::i#2)==(byte) 'a') goto main::@5 -- pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1 - ldy i - lda (line),y - cmp #'a' - beq b5 - jmp b4 - // main::@4 - b4: - // [11] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a' -- pbuz1_derefidx_vbuz2=vbuc1 - lda #'a' - ldy i - sta (line),y - // [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [13] if((byte) main::i#1!=(byte) $28) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 - lda #$28 - cmp i - bne b3_from_b4 - jmp b5 - // main::@5 - b5: - // [14] (byte*) main::line#1 ← (byte*) main::line#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] - b1_from_b5: - // [5] phi (byte*) main::line#2 = (byte*) main::line#1 [phi:main::@5->main::@1#0] -- register_copy - jmp b1 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if((byte*) main::line#2>=(word)(number) $400+(number) $28*(number) $19) goto main::@return [ main::line#2 ] ( main:2 [ main::line#2 ] ) always clobbers reg byte a -Statement [7] if(*((byte*) main::line#2)!=(byte) 'a') goto main::@3 [ main::line#2 ] ( main:2 [ main::line#2 ] ) always clobbers reg byte a reg byte y -Statement [10] if(*((byte*) main::line#2 + (byte) main::i#2)==(byte) 'a') goto main::@5 [ main::line#2 main::i#2 ] ( main:2 [ main::line#2 main::i#2 ] ) always clobbers reg byte a +Statement [6] if(*((byte*) main::line#12)!=(byte) 'a') goto main::@3 [ main::line#12 ] ( main:2 [ main::line#12 ] ) always clobbers reg byte a reg byte y +Statement [9] if(*((byte*) main::line#12 + (byte) main::i#2)==(byte) 'a') goto main::@5 [ main::line#12 main::i#2 ] ( main:2 [ main::line#12 main::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::i#2 main::i#1 ] -Statement [11] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a' [ main::line#2 main::i#2 ] ( main:2 [ main::line#2 main::i#2 ] ) always clobbers reg byte a -Statement [14] (byte*) main::line#1 ← (byte*) main::line#2 + (byte) $28 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a -Statement [6] if((byte*) main::line#2>=(word)(number) $400+(number) $28*(number) $19) goto main::@return [ main::line#2 ] ( main:2 [ main::line#2 ] ) always clobbers reg byte a -Statement [7] if(*((byte*) main::line#2)!=(byte) 'a') goto main::@3 [ main::line#2 ] ( main:2 [ main::line#2 ] ) always clobbers reg byte a reg byte y -Statement [10] if(*((byte*) main::line#2 + (byte) main::i#2)==(byte) 'a') goto main::@5 [ main::line#2 main::i#2 ] ( main:2 [ main::line#2 main::i#2 ] ) always clobbers reg byte a -Statement [11] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a' [ main::line#2 main::i#2 ] ( main:2 [ main::line#2 main::i#2 ] ) always clobbers reg byte a -Statement [14] (byte*) main::line#1 ← (byte*) main::line#2 + (byte) $28 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a -Potential registers zp ZP_WORD:2 [ main::line#2 main::line#1 ] : zp ZP_WORD:2 , +Statement [10] *((byte*) main::line#12 + (byte) main::i#2) ← (byte) 'a' [ main::line#12 main::i#2 ] ( main:2 [ main::line#12 main::i#2 ] ) always clobbers reg byte a +Statement [13] (byte*) main::line#1 ← (byte*) main::line#12 + (byte) $28 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a +Statement [14] if((byte*) main::line#1>=(word)(number) $400+(number) $28*(number) $19) goto main::@return [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a +Statement [6] if(*((byte*) main::line#12)!=(byte) 'a') goto main::@3 [ main::line#12 ] ( main:2 [ main::line#12 ] ) always clobbers reg byte a reg byte y +Statement [9] if(*((byte*) main::line#12 + (byte) main::i#2)==(byte) 'a') goto main::@5 [ main::line#12 main::i#2 ] ( main:2 [ main::line#12 main::i#2 ] ) always clobbers reg byte a +Statement [10] *((byte*) main::line#12 + (byte) main::i#2) ← (byte) 'a' [ main::line#12 main::i#2 ] ( main:2 [ main::line#12 main::i#2 ] ) always clobbers reg byte a +Statement [13] (byte*) main::line#1 ← (byte*) main::line#12 + (byte) $28 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a +Statement [14] if((byte*) main::line#1>=(word)(number) $400+(number) $28*(number) $19) goto main::@return [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ main::line#12 main::line#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_BYTE:4 [ main::i#2 main::i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 286.17: zp ZP_BYTE:4 [ main::i#2 main::i#1 ] 52.75: zp ZP_WORD:2 [ main::line#2 main::line#1 ] +Uplift Scope [main] 286.17: zp ZP_BYTE:4 [ main::i#2 main::i#1 ] 50.07: zp ZP_WORD:2 [ main::line#12 main::line#1 ] Uplift Scope [] -Uplifting [main] best 4558 combination reg byte y [ main::i#2 main::i#1 ] zp ZP_WORD:2 [ main::line#2 main::line#1 ] +Uplifting [main] best 4558 combination reg byte y [ main::i#2 main::i#1 ] zp ZP_WORD:2 [ main::line#12 main::line#1 ] Uplifting [] best 4558 combination ASSEMBLER BEFORE OPTIMIZATION @@ -376,17 +392,67 @@ bend: // main main: { .label line = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::line#2 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::line#12 = (byte*) 1024 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$400 sta line lda #>$400 sta line+1 + jmp b2 + // main::@2 + b2: + // [6] if(*((byte*) main::line#12)!=(byte) 'a') goto main::@3 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (line),y + cmp #'a' + bne b3_from_b2 + jmp breturn + // main::@return + breturn: + // [7] return + rts + // [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + // [8] phi (byte) main::i#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuyy=vbuc1 + ldy #0 + jmp b3 + // [8] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + b3_from_b4: + // [8] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#0] -- register_copy + jmp b3 + // main::@3 + b3: + // [9] if(*((byte*) main::line#12 + (byte) main::i#2)==(byte) 'a') goto main::@5 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 + lda (line),y + cmp #'a' + beq b5 + jmp b4 + // main::@4 + b4: + // [10] *((byte*) main::line#12 + (byte) main::i#2) ← (byte) 'a' -- pbuz1_derefidx_vbuyy=vbuc1 + lda #'a' + sta (line),y + // [11] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy + iny + // [12] if((byte) main::i#1!=(byte) $28) goto main::@3 -- vbuyy_neq_vbuc1_then_la1 + cpy #$28 + bne b3_from_b4 + jmp b5 + // main::@5 + b5: + // [13] (byte*) main::line#1 ← (byte*) main::line#12 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: jmp b1 // main::@1 b1: - // [6] if((byte*) main::line#2>=(word)(number) $400+(number) $28*(number) $19) goto main::@return -- pbuz1_ge_vwuc1_then_la1 + // [14] if((byte*) main::line#1>=(word)(number) $400+(number) $28*(number) $19) goto main::@return -- pbuz1_ge_vwuc1_then_la1 lda line+1 cmp #>$400+$28*$19 bcc !+ @@ -395,72 +461,22 @@ main: { cmp #<$400+$28*$19 bcs breturn !: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::line#12 = (byte*) main::line#1 [phi:main::@1->main::@2#0] -- register_copy jmp b2 - // main::@2 - b2: - // [7] if(*((byte*) main::line#2)!=(byte) 'a') goto main::@3 -- _deref_pbuz1_neq_vbuc1_then_la1 - ldy #0 - lda (line),y - cmp #'a' - bne b3_from_b2 - jmp breturn - // main::@return - breturn: - // [8] return - rts - // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - b3_from_b2: - // [9] phi (byte) main::i#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuyy=vbuc1 - ldy #0 - jmp b3 - // [9] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - b3_from_b4: - // [9] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#0] -- register_copy - jmp b3 - // main::@3 - b3: - // [10] if(*((byte*) main::line#2 + (byte) main::i#2)==(byte) 'a') goto main::@5 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 - lda (line),y - cmp #'a' - beq b5 - jmp b4 - // main::@4 - b4: - // [11] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a' -- pbuz1_derefidx_vbuyy=vbuc1 - lda #'a' - sta (line),y - // [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy - iny - // [13] if((byte) main::i#1!=(byte) $28) goto main::@3 -- vbuyy_neq_vbuc1_then_la1 - cpy #$28 - bne b3_from_b4 - jmp b5 - // main::@5 - b5: - // [14] (byte*) main::line#1 ← (byte*) main::line#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] - b1_from_b5: - // [5] phi (byte*) main::line#2 = (byte*) main::line#1 [phi:main::@5->main::@1#0] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp breturn Removing instruction jmp b3 Removing instruction jmp b4 Removing instruction jmp b5 +Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination Replacing label b3_from_b4 with b3 Removing instruction b1_from_bbegin: @@ -470,15 +486,15 @@ Removing instruction bend_from_b1: Removing instruction b3_from_b4: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b2: +Removing instruction b2_from_main: Removing instruction b4: -Removing instruction b1_from_b5: +Removing instruction b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Relabelling long label b3_from_b2 to b2 +Relabelling long label b3_from_b2 to b1 Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp b3 Succesful ASM optimization Pass5NextJumpElimination @@ -500,10 +516,10 @@ FINAL SYMBOL TABLE (byte) main::i#1 reg byte y 151.5 (byte) main::i#2 reg byte y 134.66666666666666 (byte*) main::line -(byte*) main::line#1 line zp ZP_WORD:2 22.0 -(byte*) main::line#2 line zp ZP_WORD:2 30.75 +(byte*) main::line#1 line zp ZP_WORD:2 16.5 +(byte*) main::line#12 line zp ZP_WORD:2 33.57142857142857 -zp ZP_WORD:2 [ main::line#2 main::line#1 ] +zp ZP_WORD:2 [ main::line#12 main::line#1 ] reg byte y [ main::i#2 main::i#1 ] @@ -527,16 +543,63 @@ Score: 3256 // main main: { .label line = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte*) main::line#2 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte*) main::line#12 = (byte*) 1024 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$400 sta line lda #>$400 sta line+1 - // main::@1 + // main::@2 + b2: + // if(*line=='a') + // [6] if(*((byte*) main::line#12)!=(byte) 'a') goto main::@3 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (line),y + cmp #'a' + bne b1 + // main::@return + breturn: + // } + // [7] return + rts + // [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] b1: + // [8] phi (byte) main::i#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuyy=vbuc1 + ldy #0 + // [8] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + // [8] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#0] -- register_copy + // main::@3 + b3: + // if(line[i]=='a') + // [9] if(*((byte*) main::line#12 + (byte) main::i#2)==(byte) 'a') goto main::@5 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 + lda (line),y + cmp #'a' + beq b5 + // main::@4 + // line[i] = 'a' + // [10] *((byte*) main::line#12 + (byte) main::i#2) ← (byte) 'a' -- pbuz1_derefidx_vbuyy=vbuc1 + lda #'a' + sta (line),y + // for( byte i: 0..39) + // [11] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy + iny + // [12] if((byte) main::i#1!=(byte) $28) goto main::@3 -- vbuyy_neq_vbuc1_then_la1 + cpy #$28 + bne b3 + // main::@5 + b5: + // line+=40 + // [13] (byte*) main::line#1 ← (byte*) main::line#12 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: + // main::@1 // for(byte* line = $400; line<$400+40*25;line+=40 ) - // [6] if((byte*) main::line#2>=(word)(number) $400+(number) $28*(number) $19) goto main::@return -- pbuz1_ge_vwuc1_then_la1 + // [14] if((byte*) main::line#1>=(word)(number) $400+(number) $28*(number) $19) goto main::@return -- pbuz1_ge_vwuc1_then_la1 lda line+1 cmp #>$400+$28*$19 bcc !+ @@ -545,56 +608,9 @@ main: { cmp #<$400+$28*$19 bcs breturn !: - // main::@2 - // if(*line=='a') - // [7] if(*((byte*) main::line#2)!=(byte) 'a') goto main::@3 -- _deref_pbuz1_neq_vbuc1_then_la1 - ldy #0 - lda (line),y - cmp #'a' - bne b2 - // main::@return - breturn: - // } - // [8] return - rts - // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - b2: - // [9] phi (byte) main::i#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuyy=vbuc1 - ldy #0 - // [9] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - // [9] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#0] -- register_copy - // main::@3 - b3: - // if(line[i]=='a') - // [10] if(*((byte*) main::line#2 + (byte) main::i#2)==(byte) 'a') goto main::@5 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 - lda (line),y - cmp #'a' - beq b5 - // main::@4 - // line[i] = 'a' - // [11] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a' -- pbuz1_derefidx_vbuyy=vbuc1 - lda #'a' - sta (line),y - // for( byte i: 0..39) - // [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy - iny - // [13] if((byte) main::i#1!=(byte) $28) goto main::@3 -- vbuyy_neq_vbuc1_then_la1 - cpy #$28 - bne b3 - // main::@5 - b5: - // line+=40 - // [14] (byte*) main::line#1 ← (byte*) main::line#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] - // [5] phi (byte*) main::line#2 = (byte*) main::line#1 [phi:main::@5->main::@1#0] -- register_copy - jmp b1 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte*) main::line#12 = (byte*) main::line#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 } // File Data diff --git a/src/test/ref/loop-break-nested.sym b/src/test/ref/loop-break-nested.sym index 52e508dc6..1bcde9cd9 100644 --- a/src/test/ref/loop-break-nested.sym +++ b/src/test/ref/loop-break-nested.sym @@ -12,8 +12,8 @@ (byte) main::i#1 reg byte y 151.5 (byte) main::i#2 reg byte y 134.66666666666666 (byte*) main::line -(byte*) main::line#1 line zp ZP_WORD:2 22.0 -(byte*) main::line#2 line zp ZP_WORD:2 30.75 +(byte*) main::line#1 line zp ZP_WORD:2 16.5 +(byte*) main::line#12 line zp ZP_WORD:2 33.57142857142857 -zp ZP_WORD:2 [ main::line#2 main::line#1 ] +zp ZP_WORD:2 [ main::line#12 main::line#1 ] reg byte y [ main::i#2 main::i#1 ] diff --git a/src/test/ref/loop-for-sideeffect.asm b/src/test/ref/loop-for-sideeffect.asm index e8d677238..31dae4004 100644 --- a/src/test/ref/loop-for-sideeffect.asm +++ b/src/test/ref/loop-for-sideeffect.asm @@ -5,19 +5,8 @@ .pc = $80d "Program" .label SCREEN = $400 main: { - lda #7 - b1: - tax - inx - cmp #7 - bcc b2 // The condition-evaluation should increment i - even if when it is not met - x should end up in 0x0408 lda #'x' - sta SCREEN,x + sta SCREEN+8 rts - b2: - txa - sta SCREEN,x - txa - jmp b1 } diff --git a/src/test/ref/loop-for-sideeffect.cfg b/src/test/ref/loop-for-sideeffect.cfg index 2450d64bc..b5ffbdfaa 100644 --- a/src/test/ref/loop-for-sideeffect.cfg +++ b/src/test/ref/loop-for-sideeffect.cfg @@ -10,18 +10,9 @@ main: scope:[main] from @1 [4] phi() to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#3 ← phi( main/(byte) 7 main::@2/(byte~) main::i#6 ) - [6] (byte) main::i#2 ← ++ (byte) main::i#3 - [7] if((byte) main::i#3<(byte) 7) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 'x' +main::@1: scope:[main] from main + [5] *((const byte*) SCREEN#0+(byte) 8) ← (byte) 'x' to:main::@return -main::@return: scope:[main] from main::@3 - [9] return +main::@return: scope:[main] from main::@1 + [6] return to:@return -main::@2: scope:[main] from main::@1 - [10] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 - [11] (byte~) main::i#6 ← (byte) main::i#2 - to:main::@1 diff --git a/src/test/ref/loop-for-sideeffect.log b/src/test/ref/loop-for-sideeffect.log index 4d844fdee..813302b82 100644 --- a/src/test/ref/loop-for-sideeffect.log +++ b/src/test/ref/loop-for-sideeffect.log @@ -79,21 +79,50 @@ Constant (const byte) main::i#1 = 7 Successful SSA optimization Pass2ConstantIdentification Eliminating unused constant (const byte) main::i#0 Successful SSA optimization PassNEliminateUnusedVars -Inlining constant with var siblings (const byte) main::i#1 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#3 = (byte) main::i#6 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#8 (const byte) main::i#1 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [10] (byte) main::i#9 ← ++ (const byte) main::i#1 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) main::i#9 = ++main::i#1 +Successful SSA optimization Pass2ConstantIdentification +Removing PHI-reference to removed block (main::@1_1) in block main::@2 +if() condition always false - eliminating [11] if((const byte) main::i#1<(byte) 7) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Eliminating variable (byte) main::i#2 from unused block main::@1 +Eliminating variable (byte) main::i#3 from unused block main::@2 +Removing PHI-reference to removed block (main::@1) in block main::@2 +Removing PHI-reference to removed block (main::@1) in block main::@3 +Removing unused block main::@1 +Removing unused block main::@2 +Successful SSA optimization Pass2EliminateUnusedBlocks +Identical Phi Values (byte) main::i#7 (const byte) main::i#9 +Successful SSA optimization Pass2IdenticalPhiElimination +Inlining constant with different constant siblings (const byte) main::i#1 +Inlining constant with different constant siblings (const byte) main::i#9 +Constant inlined main::i#9 = ++(byte) 7 Constant inlined main::i#1 = (byte) 7 Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN#0+++7) +Successful SSA optimization Pass2ConstantAdditionElimination +Simplifying constant integer increment ++7 +Successful SSA optimization Pass2ConstantSimplification Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 -Created 1 initial phi equivalence classes -Not coalescing [12] main::i#6 ← main::i#2 -Coalesced down to 2 phi equivalence classes +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Renumbering block main::@3 to main::@1 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -112,39 +141,21 @@ FINAL CONTROL FLOW GRAPH main: scope:[main] from @1 [4] phi() to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#3 ← phi( main/(byte) 7 main::@2/(byte~) main::i#6 ) - [6] (byte) main::i#2 ← ++ (byte) main::i#3 - [7] if((byte) main::i#3<(byte) 7) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 'x' +main::@1: scope:[main] from main + [5] *((const byte*) SCREEN#0+(byte) 8) ← (byte) 'x' to:main::@return -main::@return: scope:[main] from main::@3 - [9] return +main::@return: scope:[main] from main::@1 + [6] return to:@return -main::@2: scope:[main] from main::@1 - [10] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 - [11] (byte~) main::i#6 ← (byte) main::i#2 - to:main::@1 VARIABLE REGISTER WEIGHTS (byte*) SCREEN (void()) main() (byte) main::i -(byte) main::i#2 15.333333333333332 -(byte) main::i#3 16.5 -(byte~) main::i#6 22.0 Initial phi equivalence classes -[ main::i#3 main::i#6 ] -Added variable main::i#2 to zero page equivalence class [ main::i#2 ] Complete equivalence classes -[ main::i#3 main::i#6 ] -[ main::i#2 ] -Allocated zp ZP_BYTE:2 [ main::i#3 main::i#6 ] -Allocated zp ZP_BYTE:3 [ main::i#2 ] INITIAL ASM Target platform is c64basic @@ -175,65 +186,30 @@ bend_from_b1: bend: // main main: { - .label i = 3 - .label i_3 = 2 - .label i_6 = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#3 = (byte) 7 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #7 - sta i_3 jmp b1 // main::@1 b1: - // [6] (byte) main::i#2 ← ++ (byte) main::i#3 -- vbuz1=_inc_vbuz2 - ldy i_3 - iny - sty i - // [7] if((byte) main::i#3<(byte) 7) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i_3 - cmp #7 - bcc b2 - jmp b3 - // main::@3 - b3: - // [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 'x' -- pbuc1_derefidx_vbuz1=vbuc2 + // [5] *((const byte*) SCREEN#0+(byte) 8) ← (byte) 'x' -- _deref_pbuc1=vbuc2 // The condition-evaluation should increment i - even if when it is not met - x should end up in 0x0408 lda #'x' - ldy i - sta SCREEN,y + sta SCREEN+8 jmp breturn // main::@return breturn: - // [9] return + // [6] return rts - // main::@2 - b2: - // [10] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz1 - ldy i - tya - sta SCREEN,y - // [11] (byte~) main::i#6 ← (byte) main::i#2 -- vbuz1=vbuz2 - lda i - sta i_6 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#3 = (byte~) main::i#6 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 'x' [ ] ( main:2 [ ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#3 main::i#6 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ main::i#2 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Statement [5] *((const byte*) SCREEN#0+(byte) 8) ← (byte) 'x' [ ] ( main:2 [ ] ) always clobbers reg byte a REGISTER UPLIFT SCOPES -Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#3 main::i#6 ] 15.33: zp ZP_BYTE:3 [ main::i#2 ] +Uplift Scope [main] Uplift Scope [] -Uplifting [main] best 313 combination reg byte a [ main::i#3 main::i#6 ] reg byte x [ main::i#2 ] -Uplifting [] best 313 combination +Uplifting [main] best 57 combination +Uplifting [] best 57 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -263,42 +239,18 @@ bend_from_b1: bend: // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#3 = (byte) 7 [phi:main->main::@1#0] -- vbuaa=vbuc1 - lda #7 jmp b1 // main::@1 b1: - // [6] (byte) main::i#2 ← ++ (byte) main::i#3 -- vbuxx=_inc_vbuaa - tax - inx - // [7] if((byte) main::i#3<(byte) 7) goto main::@2 -- vbuaa_lt_vbuc1_then_la1 - cmp #7 - bcc b2 - jmp b3 - // main::@3 - b3: - // [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 'x' -- pbuc1_derefidx_vbuxx=vbuc2 + // [5] *((const byte*) SCREEN#0+(byte) 8) ← (byte) 'x' -- _deref_pbuc1=vbuc2 // The condition-evaluation should increment i - even if when it is not met - x should end up in 0x0408 lda #'x' - sta SCREEN,x + sta SCREEN+8 jmp breturn // main::@return breturn: - // [9] return + // [6] return rts - // main::@2 - b2: - // [10] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta SCREEN,x - // [11] (byte~) main::i#6 ← (byte) main::i#2 -- vbuaa=vbuxx - txa - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#3 = (byte~) main::i#6 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data @@ -306,7 +258,6 @@ ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend Removing instruction jmp b1 -Removing instruction jmp b3 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction b1_from_bbegin: @@ -315,10 +266,8 @@ Removing instruction main_from_b1: Removing instruction bend_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b3: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main @@ -334,20 +283,13 @@ FINAL SYMBOL TABLE (const byte*) SCREEN#0 SCREEN = (byte*) 1024 (void()) main() (label) main::@1 -(label) main::@2 -(label) main::@3 (label) main::@return (byte) main::i -(byte) main::i#2 reg byte x 15.333333333333332 -(byte) main::i#3 reg byte a 16.5 -(byte~) main::i#6 reg byte a 22.0 -reg byte a [ main::i#3 main::i#6 ] -reg byte x [ main::i#2 ] FINAL ASSEMBLER -Score: 238 +Score: 12 // File Comments // Test a for()-loop where the condition has a side-effect @@ -367,39 +309,16 @@ Score: 238 // @end // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#3 = (byte) 7 [phi:main->main::@1#0] -- vbuaa=vbuc1 - lda #7 // main::@1 - b1: - // for(i=7;i++<7;) - // [6] (byte) main::i#2 ← ++ (byte) main::i#3 -- vbuxx=_inc_vbuaa - tax - inx - // [7] if((byte) main::i#3<(byte) 7) goto main::@2 -- vbuaa_lt_vbuc1_then_la1 - cmp #7 - bcc b2 - // main::@3 // (SCREEN)[i] = 'x' - // [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 'x' -- pbuc1_derefidx_vbuxx=vbuc2 + // [5] *((const byte*) SCREEN#0+(byte) 8) ← (byte) 'x' -- _deref_pbuc1=vbuc2 // The condition-evaluation should increment i - even if when it is not met - x should end up in 0x0408 lda #'x' - sta SCREEN,x + sta SCREEN+8 // main::@return // } - // [9] return + // [6] return rts - // main::@2 - b2: - // SCREEN[i] = i - // [10] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta SCREEN,x - // [11] (byte~) main::i#6 ← (byte) main::i#2 -- vbuaa=vbuxx - txa - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#3 = (byte~) main::i#6 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/loop-for-sideeffect.sym b/src/test/ref/loop-for-sideeffect.sym index 627ce857f..ff525f446 100644 --- a/src/test/ref/loop-for-sideeffect.sym +++ b/src/test/ref/loop-for-sideeffect.sym @@ -5,13 +5,6 @@ (const byte*) SCREEN#0 SCREEN = (byte*) 1024 (void()) main() (label) main::@1 -(label) main::@2 -(label) main::@3 (label) main::@return (byte) main::i -(byte) main::i#2 reg byte x 15.333333333333332 -(byte) main::i#3 reg byte a 16.5 -(byte~) main::i#6 reg byte a 22.0 -reg byte a [ main::i#3 main::i#6 ] -reg byte x [ main::i#2 ] diff --git a/src/test/ref/loop-memset-min.asm b/src/test/ref/loop-memset-min.asm index a8b6ed712..ceb2300c8 100644 --- a/src/test/ref/loop-memset-min.asm +++ b/src/test/ref/loop-memset-min.asm @@ -18,14 +18,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [8] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [8] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [8] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [9] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [8] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [11] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [9] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [12] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [10] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [8] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [8] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [11] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [8] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [8] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [8] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [9] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [8] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [11] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [9] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [12] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [10] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [8] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [8] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [11] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [8] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [8] phi from memset to memset::@2 [phi:memset->memset::@2] + // [8] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 + // [8] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [8] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [9] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y + // dst++; + // [10] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: // memset::@1 - b1: // while(dst!=end) - // [9] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [11] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -563,24 +596,8 @@ memset: { bne b2 // memset::@return // } - // [10] return + // [12] return rts - // memset::@2 - b2: - // *dst = c - // [11] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // dst++; - // [12] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [8] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [8] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/loop-memset-min.sym b/src/test/ref/loop-memset-min.sym index c6fda7016..c51e79bad 100644 --- a/src/test/ref/loop-memset-min.sym +++ b/src/test/ref/loop-memset-min.sym @@ -12,8 +12,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) 'c' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:2 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:2 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:2 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:2 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -22,4 +22,4 @@ (void*) memset::str (const void*) memset::str#0 str = (void*)(const byte*) SCREEN#0 -zp ZP_WORD:2 [ memset::dst#2 memset::dst#1 ] +zp ZP_WORD:2 [ memset::dst#4 memset::dst#1 ] diff --git a/src/test/ref/loop-problem2.asm b/src/test/ref/loop-problem2.asm index 72d5b9c5b..fe7394cea 100644 --- a/src/test/ref/loop-problem2.asm +++ b/src/test/ref/loop-problem2.asm @@ -27,14 +27,6 @@ print_cls: { sta sc lda #>SCREEN sta sc+1 - b1: - lda sc+1 - cmp #>SCREEN+$3e8 - bne b2 - lda sc - cmp #SCREEN+$3e8 + bne b2 + lda sc + cmp #print_cls::@1] - b1_from_print_cls: - // [15] phi (byte*) print_cls::sc#2 = (const byte*) SCREEN#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + // [15] phi from print_cls to print_cls::@2 [phi:print_cls->print_cls::@2] + b2_from_print_cls: + // [15] phi (byte*) print_cls::sc#4 = (const byte*) SCREEN#0 [phi:print_cls->print_cls::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta sc+1 - jmp b1 - // print_cls::@1 - b1: - // [16] if((byte*) print_cls::sc#2!=(const byte*) SCREEN#0+(word) $3e8) goto print_cls::@2 -- pbuz1_neq_pbuc1_then_la1 - lda sc+1 - cmp #>SCREEN+$3e8 - bne b2 - lda sc - cmp #print_cls::@2] + b2_from_b1: + // [15] phi (byte*) print_cls::sc#4 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@2#0] -- register_copy + jmp b2 // print_cls::@2 b2: - // [18] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + // [16] *((byte*) print_cls::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 lda #' ' ldy #0 sta (sc),y - // [19] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 + // [17] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#4 -- pbuz1=_inc_pbuz1 inc sc bne !+ inc sc+1 !: - // [15] phi from print_cls::@2 to print_cls::@1 [phi:print_cls::@2->print_cls::@1] - b1_from_b2: - // [15] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@2->print_cls::@1#0] -- register_copy jmp b1 + // print_cls::@1 + b1: + // [18] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word) $3e8) goto print_cls::@2 -- pbuz1_neq_pbuc1_then_la1 + lda sc+1 + cmp #>SCREEN+$3e8 + bne b2_from_b1 + lda sc + cmp #print_cls::@1] - b1_from_print_cls: - // [15] phi (byte*) print_cls::sc#2 = (const byte*) SCREEN#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + // [15] phi from print_cls to print_cls::@2 [phi:print_cls->print_cls::@2] + b2_from_print_cls: + // [15] phi (byte*) print_cls::sc#4 = (const byte*) SCREEN#0 [phi:print_cls->print_cls::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta sc+1 - jmp b1 - // print_cls::@1 - b1: - // [16] if((byte*) print_cls::sc#2!=(const byte*) SCREEN#0+(word) $3e8) goto print_cls::@2 -- pbuz1_neq_pbuc1_then_la1 - lda sc+1 - cmp #>SCREEN+$3e8 - bne b2 - lda sc - cmp #print_cls::@2] + b2_from_b1: + // [15] phi (byte*) print_cls::sc#4 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@2#0] -- register_copy + jmp b2 // print_cls::@2 b2: - // [18] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + // [16] *((byte*) print_cls::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 lda #' ' ldy #0 sta (sc),y - // [19] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 + // [17] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#4 -- pbuz1=_inc_pbuz1 inc sc bne !+ inc sc+1 !: - // [15] phi from print_cls::@2 to print_cls::@1 [phi:print_cls::@2->print_cls::@1] - b1_from_b2: - // [15] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@2->print_cls::@1#0] -- register_copy jmp b1 + // print_cls::@1 + b1: + // [18] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word) $3e8) goto print_cls::@2 -- pbuz1_neq_pbuc1_then_la1 + lda sc+1 + cmp #>SCREEN+$3e8 + bne b2_from_b1 + lda sc + cmp #print_cls::@1] - // [15] phi (byte*) print_cls::sc#2 = (const byte*) SCREEN#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + // [15] phi from print_cls to print_cls::@2 [phi:print_cls->print_cls::@2] + // [15] phi (byte*) print_cls::sc#4 = (const byte*) SCREEN#0 [phi:print_cls->print_cls::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta sc+1 - // print_cls::@1 - b1: + // [15] phi from print_cls::@1 to print_cls::@2 [phi:print_cls::@1->print_cls::@2] + // [15] phi (byte*) print_cls::sc#4 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@2#0] -- register_copy + // print_cls::@2 + b2: + // *sc = ' ' + // [16] *((byte*) print_cls::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y // for(byte* sc=SCREEN; sc!=SCREEN+1000; sc++) - // [16] if((byte*) print_cls::sc#2!=(const byte*) SCREEN#0+(word) $3e8) goto print_cls::@2 -- pbuz1_neq_pbuc1_then_la1 + // [17] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + // print_cls::@1 + // [18] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word) $3e8) goto print_cls::@2 -- pbuz1_neq_pbuc1_then_la1 lda sc+1 cmp #>SCREEN+$3e8 bne b2 @@ -642,24 +674,8 @@ print_cls: { bne b2 // print_cls::@return // } - // [17] return + // [19] return rts - // print_cls::@2 - b2: - // *sc = ' ' - // [18] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // for(byte* sc=SCREEN; sc!=SCREEN+1000; sc++) - // [19] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - // [15] phi from print_cls::@2 to print_cls::@1 [phi:print_cls::@2->print_cls::@1] - // [15] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@2->print_cls::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/loop-problem2.sym b/src/test/ref/loop-problem2.sym index a71530723..1970be2c4 100644 --- a/src/test/ref/loop-problem2.sym +++ b/src/test/ref/loop-problem2.sym @@ -19,8 +19,8 @@ (label) print_cls::@2 (label) print_cls::@return (byte*) print_cls::sc -(byte*) print_cls::sc#1 sc zp ZP_WORD:2 22.0 -(byte*) print_cls::sc#2 sc zp ZP_WORD:2 14.666666666666666 +(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5 +(byte*) print_cls::sc#4 sc zp ZP_WORD:2 16.5 -zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ] +zp ZP_WORD:2 [ print_cls::sc#4 print_cls::sc#1 ] reg byte a [ mode_ctrl::before#0 ] diff --git a/src/test/ref/loop-while-min.asm b/src/test/ref/loop-while-min.asm index 669d67109..1223cbde0 100644 --- a/src/test/ref/loop-while-min.asm +++ b/src/test/ref/loop-while-min.asm @@ -5,13 +5,11 @@ .label SCREEN = $400 main: { ldx #0 - b1: - cpx #$64 - bne b2 - rts b2: txa sta SCREEN,x inx - jmp b1 + cpx #$64 + bne b2 + rts } diff --git a/src/test/ref/loop-while-min.cfg b/src/test/ref/loop-while-min.cfg index b93d67ece..5322325b6 100644 --- a/src/test/ref/loop-while-min.cfg +++ b/src/test/ref/loop-while-min.cfg @@ -9,15 +9,15 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2!=(byte) $64) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1!=(byte) $64) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [9] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 diff --git a/src/test/ref/loop-while-min.log b/src/test/ref/loop-while-min.log index d5892f35a..9ded400e4 100644 --- a/src/test/ref/loop-while-min.log +++ b/src/test/ref/loop-while-min.log @@ -69,21 +69,32 @@ Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = (byte*) 1024 Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [9] if((const byte) main::i#0!=(byte) $64) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 1 initial phi equivalence classes -Coalesced [11] main::i#4 ← main::i#1 +Coalesced [12] main::i#6 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -101,32 +112,32 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2!=(byte) $64) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1!=(byte) $64) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [9] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 VARIABLE REGISTER WEIGHTS (byte*) SCREEN (void()) main() (byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 18.333333333333332 +(byte) main::i#1 16.5 +(byte) main::i#4 22.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] INITIAL ASM Target platform is c64basic @@ -157,47 +168,48 @@ bend: // main main: { .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2!=(byte) $64) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 - lda #$64 - cmp i - bne b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 // main::@2 b2: - // [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz1 + // [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuz1=vbuz1 ldy i tya sta SCREEN,y - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 inc i - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp b1 + // main::@1 + b1: + // [8] if((byte) main::i#1!=(byte) $64) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #$64 + cmp i + bne b2_from_b1 + jmp breturn + // main::@return + breturn: + // [9] return + rts } // File Data 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:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 40.33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] Uplift Scope [] -Uplifting [main] best 263 combination reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 263 combination +Uplifting [main] best 293 combination reg byte x [ main::i#4 main::i#1 ] +Uplifting [] best 293 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -226,54 +238,60 @@ bend_from_b1: bend: // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta SCREEN,x + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2!=(byte) $64) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 + // [8] if((byte) main::i#1!=(byte) $64) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 cpx #$64 - bne b2 + bne b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [9] return rts - // main::@2 - b2: - // [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta SCREEN,x - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -288,14 +306,14 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] FINAL ASSEMBLER -Score: 191 +Score: 161 // File Comments // Minimal classic while() loop @@ -314,31 +332,29 @@ Score: 191 // @end // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // SCREEN[i] = i + // [6] *((const byte*) SCREEN#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta SCREEN,x + // i++; + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx // main::@1 - b1: // while(i!=100) - // [6] if((byte) main::i#2!=(byte) $64) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 + // [8] if((byte) main::i#1!=(byte) $64) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 cpx #$64 bne b2 // main::@return // } - // [7] return + // [9] return rts - // main::@2 - b2: - // SCREEN[i] = i - // [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta SCREEN,x - // i++; - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/loop-while-min.sym b/src/test/ref/loop-while-min.sym index 19dc59f31..882179ca9 100644 --- a/src/test/ref/loop-while-min.sym +++ b/src/test/ref/loop-while-min.sym @@ -8,7 +8,7 @@ (label) main::@2 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] diff --git a/src/test/ref/loop-while-sideeffect.asm b/src/test/ref/loop-while-sideeffect.asm index 36f77af8f..3b26818a7 100644 --- a/src/test/ref/loop-while-sideeffect.asm +++ b/src/test/ref/loop-while-sideeffect.asm @@ -4,19 +4,8 @@ .pc = $80d "Program" .label SCREEN = $400 main: { - lda #7 - b1: - tax - inx - cmp #7 - bne b2 // The condition-evaluation should increment i - even if when it is not met lda #'x' - sta SCREEN,x + sta SCREEN+8 rts - b2: - txa - sta SCREEN,x - txa - jmp b1 } diff --git a/src/test/ref/loop-while-sideeffect.cfg b/src/test/ref/loop-while-sideeffect.cfg index 35a51cd3c..b5ffbdfaa 100644 --- a/src/test/ref/loop-while-sideeffect.cfg +++ b/src/test/ref/loop-while-sideeffect.cfg @@ -10,18 +10,9 @@ main: scope:[main] from @1 [4] phi() to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 7 main::@2/(byte~) main::i#5 ) - [6] (byte) main::i#1 ← ++ (byte) main::i#2 - [7] if((byte) main::i#2!=(byte) 7) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [8] *((const byte*) SCREEN#0 + (byte) main::i#1) ← (byte) 'x' +main::@1: scope:[main] from main + [5] *((const byte*) SCREEN#0+(byte) 8) ← (byte) 'x' to:main::@return -main::@return: scope:[main] from main::@3 - [9] return +main::@return: scope:[main] from main::@1 + [6] return to:@return -main::@2: scope:[main] from main::@1 - [10] *((const byte*) SCREEN#0 + (byte) main::i#1) ← (byte) main::i#1 - [11] (byte~) main::i#5 ← (byte) main::i#1 - to:main::@1 diff --git a/src/test/ref/loop-while-sideeffect.log b/src/test/ref/loop-while-sideeffect.log index c39b878a5..f911bd45b 100644 --- a/src/test/ref/loop-while-sideeffect.log +++ b/src/test/ref/loop-while-sideeffect.log @@ -74,21 +74,50 @@ Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = (byte*) 1024 Constant (const byte) main::i#0 = 7 Successful SSA optimization Pass2ConstantIdentification -Inlining constant with var siblings (const byte) main::i#0 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#2 = (byte) main::i#5 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#7 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [10] (byte) main::i#8 ← ++ (const byte) main::i#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) main::i#8 = ++main::i#0 +Successful SSA optimization Pass2ConstantIdentification +Removing PHI-reference to removed block (main::@1_1) in block main::@2 +if() condition always false - eliminating [11] if((const byte) main::i#0!=(byte) 7) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Eliminating variable (byte) main::i#1 from unused block main::@1 +Eliminating variable (byte) main::i#2 from unused block main::@2 +Removing PHI-reference to removed block (main::@1) in block main::@2 +Removing PHI-reference to removed block (main::@1) in block main::@3 +Removing unused block main::@1 +Removing unused block main::@2 +Successful SSA optimization Pass2EliminateUnusedBlocks +Identical Phi Values (byte) main::i#6 (const byte) main::i#8 +Successful SSA optimization Pass2IdenticalPhiElimination +Inlining constant with different constant siblings (const byte) main::i#0 +Inlining constant with different constant siblings (const byte) main::i#8 +Constant inlined main::i#8 = ++(byte) 7 Constant inlined main::i#0 = (byte) 7 Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN#0+++7) +Successful SSA optimization Pass2ConstantAdditionElimination +Simplifying constant integer increment ++7 +Successful SSA optimization Pass2ConstantSimplification Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 -Created 1 initial phi equivalence classes -Not coalescing [12] main::i#5 ← main::i#1 -Coalesced down to 2 phi equivalence classes +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Renumbering block main::@3 to main::@1 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -107,39 +136,21 @@ FINAL CONTROL FLOW GRAPH main: scope:[main] from @1 [4] phi() to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 7 main::@2/(byte~) main::i#5 ) - [6] (byte) main::i#1 ← ++ (byte) main::i#2 - [7] if((byte) main::i#2!=(byte) 7) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [8] *((const byte*) SCREEN#0 + (byte) main::i#1) ← (byte) 'x' +main::@1: scope:[main] from main + [5] *((const byte*) SCREEN#0+(byte) 8) ← (byte) 'x' to:main::@return -main::@return: scope:[main] from main::@3 - [9] return +main::@return: scope:[main] from main::@1 + [6] return to:@return -main::@2: scope:[main] from main::@1 - [10] *((const byte*) SCREEN#0 + (byte) main::i#1) ← (byte) main::i#1 - [11] (byte~) main::i#5 ← (byte) main::i#1 - to:main::@1 VARIABLE REGISTER WEIGHTS (byte*) SCREEN (void()) main() (byte) main::i -(byte) main::i#1 15.333333333333332 -(byte) main::i#2 16.5 -(byte~) main::i#5 22.0 Initial phi equivalence classes -[ main::i#2 main::i#5 ] -Added variable main::i#1 to zero page equivalence class [ main::i#1 ] Complete equivalence classes -[ main::i#2 main::i#5 ] -[ main::i#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#5 ] -Allocated zp ZP_BYTE:3 [ main::i#1 ] INITIAL ASM Target platform is c64basic @@ -169,65 +180,30 @@ bend_from_b1: bend: // main main: { - .label i = 3 - .label i_2 = 2 - .label i_5 = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 7 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #7 - sta i_2 jmp b1 // main::@1 b1: - // [6] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz2 - ldy i_2 - iny - sty i - // [7] if((byte) main::i#2!=(byte) 7) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 - lda #7 - cmp i_2 - bne b2 - jmp b3 - // main::@3 - b3: - // [8] *((const byte*) SCREEN#0 + (byte) main::i#1) ← (byte) 'x' -- pbuc1_derefidx_vbuz1=vbuc2 + // [5] *((const byte*) SCREEN#0+(byte) 8) ← (byte) 'x' -- _deref_pbuc1=vbuc2 // The condition-evaluation should increment i - even if when it is not met lda #'x' - ldy i - sta SCREEN,y + sta SCREEN+8 jmp breturn // main::@return breturn: - // [9] return + // [6] return rts - // main::@2 - b2: - // [10] *((const byte*) SCREEN#0 + (byte) main::i#1) ← (byte) main::i#1 -- pbuc1_derefidx_vbuz1=vbuz1 - ldy i - tya - sta SCREEN,y - // [11] (byte~) main::i#5 ← (byte) main::i#1 -- vbuz1=vbuz2 - lda i - sta i_5 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte~) main::i#5 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [8] *((const byte*) SCREEN#0 + (byte) main::i#1) ← (byte) 'x' [ ] ( main:2 [ ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#5 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ main::i#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Statement [5] *((const byte*) SCREEN#0+(byte) 8) ← (byte) 'x' [ ] ( main:2 [ ] ) always clobbers reg byte a REGISTER UPLIFT SCOPES -Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#2 main::i#5 ] 15.33: zp ZP_BYTE:3 [ main::i#1 ] +Uplift Scope [main] Uplift Scope [] -Uplifting [main] best 313 combination reg byte a [ main::i#2 main::i#5 ] reg byte x [ main::i#1 ] -Uplifting [] best 313 combination +Uplifting [main] best 57 combination +Uplifting [] best 57 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -256,42 +232,18 @@ bend_from_b1: bend: // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 7 [phi:main->main::@1#0] -- vbuaa=vbuc1 - lda #7 jmp b1 // main::@1 b1: - // [6] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuaa - tax - inx - // [7] if((byte) main::i#2!=(byte) 7) goto main::@2 -- vbuaa_neq_vbuc1_then_la1 - cmp #7 - bne b2 - jmp b3 - // main::@3 - b3: - // [8] *((const byte*) SCREEN#0 + (byte) main::i#1) ← (byte) 'x' -- pbuc1_derefidx_vbuxx=vbuc2 + // [5] *((const byte*) SCREEN#0+(byte) 8) ← (byte) 'x' -- _deref_pbuc1=vbuc2 // The condition-evaluation should increment i - even if when it is not met lda #'x' - sta SCREEN,x + sta SCREEN+8 jmp breturn // main::@return breturn: - // [9] return + // [6] return rts - // main::@2 - b2: - // [10] *((const byte*) SCREEN#0 + (byte) main::i#1) ← (byte) main::i#1 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta SCREEN,x - // [11] (byte~) main::i#5 ← (byte) main::i#1 -- vbuaa=vbuxx - txa - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte~) main::i#5 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data @@ -299,7 +251,6 @@ ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend Removing instruction jmp b1 -Removing instruction jmp b3 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction b1_from_bbegin: @@ -308,10 +259,8 @@ Removing instruction main_from_b1: Removing instruction bend_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b3: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main @@ -327,20 +276,13 @@ FINAL SYMBOL TABLE (const byte*) SCREEN#0 SCREEN = (byte*) 1024 (void()) main() (label) main::@1 -(label) main::@2 -(label) main::@3 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 15.333333333333332 -(byte) main::i#2 reg byte a 16.5 -(byte~) main::i#5 reg byte a 22.0 -reg byte a [ main::i#2 main::i#5 ] -reg byte x [ main::i#1 ] FINAL ASSEMBLER -Score: 238 +Score: 12 // File Comments // Test a while()-loop where the condition has a side-effect @@ -359,39 +301,16 @@ Score: 238 // @end // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 7 [phi:main->main::@1#0] -- vbuaa=vbuc1 - lda #7 // main::@1 - b1: - // while(i++!=7) - // [6] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuaa - tax - inx - // [7] if((byte) main::i#2!=(byte) 7) goto main::@2 -- vbuaa_neq_vbuc1_then_la1 - cmp #7 - bne b2 - // main::@3 // (SCREEN)[i] = 'x' - // [8] *((const byte*) SCREEN#0 + (byte) main::i#1) ← (byte) 'x' -- pbuc1_derefidx_vbuxx=vbuc2 + // [5] *((const byte*) SCREEN#0+(byte) 8) ← (byte) 'x' -- _deref_pbuc1=vbuc2 // The condition-evaluation should increment i - even if when it is not met lda #'x' - sta SCREEN,x + sta SCREEN+8 // main::@return // } - // [9] return + // [6] return rts - // main::@2 - b2: - // SCREEN[i] = i - // [10] *((const byte*) SCREEN#0 + (byte) main::i#1) ← (byte) main::i#1 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta SCREEN,x - // [11] (byte~) main::i#5 ← (byte) main::i#1 -- vbuaa=vbuxx - txa - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte~) main::i#5 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/loop-while-sideeffect.sym b/src/test/ref/loop-while-sideeffect.sym index a335e8d3f..ff525f446 100644 --- a/src/test/ref/loop-while-sideeffect.sym +++ b/src/test/ref/loop-while-sideeffect.sym @@ -5,13 +5,6 @@ (const byte*) SCREEN#0 SCREEN = (byte*) 1024 (void()) main() (label) main::@1 -(label) main::@2 -(label) main::@3 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 15.333333333333332 -(byte) main::i#2 reg byte a 16.5 -(byte~) main::i#5 reg byte a 22.0 -reg byte a [ main::i#2 main::i#5 ] -reg byte x [ main::i#1 ] diff --git a/src/test/ref/loop100.asm b/src/test/ref/loop100.asm index 0cb575f30..4993c740b 100644 --- a/src/test/ref/loop100.asm +++ b/src/test/ref/loop100.asm @@ -3,11 +3,9 @@ .pc = $80d "Program" main: { ldx #0 - b1: + b2: + inx cpx #$64 bcc b2 rts - b2: - inx - jmp b1 } diff --git a/src/test/ref/loop100.cfg b/src/test/ref/loop100.cfg index 69b7bab07..fc1064142 100644 --- a/src/test/ref/loop100.cfg +++ b/src/test/ref/loop100.cfg @@ -9,14 +9,14 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $64) goto main::@2 +main::@1: scope:[main] from main::@2 + [7] if((byte) main::i#1<(byte) $64) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [8] return to:@return -main::@2: scope:[main] from main::@1 - [8] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 diff --git a/src/test/ref/loop100.log b/src/test/ref/loop100.log index b52dfe461..170588a30 100644 --- a/src/test/ref/loop100.log +++ b/src/test/ref/loop100.log @@ -61,21 +61,32 @@ Simple Condition (bool~) main::$0 [3] if((byte) main::i#2<(byte) $64) goto main: Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [8] if((const byte) main::i#0<(byte) $64) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 1 initial phi equivalence classes -Coalesced [10] main::i#4 ← main::i#1 +Coalesced [11] main::i#6 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -93,30 +104,30 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $64) goto main::@2 +main::@1: scope:[main] from main::@2 + [7] if((byte) main::i#1<(byte) $64) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [8] return to:@return -main::@2: scope:[main] from main::@1 - [8] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 VARIABLE REGISTER WEIGHTS (void()) main() (byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 16.5 +(byte) main::i#1 16.5 +(byte) main::i#4 22.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] INITIAL ASM Target platform is c64basic @@ -145,43 +156,44 @@ bend: // main main: { .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta i + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 + inc i jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2<(byte) $64) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + // [7] if((byte) main::i#1<(byte) $64) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$64 - bcc b2 + bcc b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [8] return rts - // main::@2 - b2: - // [8] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data 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:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] Uplift Scope [] -Uplifting [main] best 193 combination reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 193 combination +Uplifting [main] best 223 combination reg byte x [ main::i#4 main::i#1 ] +Uplifting [] best 223 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -208,51 +220,57 @@ bend_from_b1: bend: // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2<(byte) $64) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [7] if((byte) main::i#1<(byte) $64) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$64 - bcc b2 + bcc b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [8] return rts - // main::@2 - b2: - // [8] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -265,14 +283,14 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 16.5 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] FINAL ASSEMBLER -Score: 121 +Score: 91 // File Comments // Upstart @@ -289,27 +307,24 @@ Score: 121 // @end // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // main::@1 - b1: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: // for(byte i=0; i<100; i++) - // [6] if((byte) main::i#2<(byte) $64) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [6] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx + // main::@1 + // [7] if((byte) main::i#1<(byte) $64) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$64 bcc b2 // main::@return // } - // [7] return + // [8] return rts - // main::@2 - b2: - // for(byte i=0; i<100; i++) - // [8] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/loop100.sym b/src/test/ref/loop100.sym index 446dc1a1b..3a304823a 100644 --- a/src/test/ref/loop100.sym +++ b/src/test/ref/loop100.sym @@ -6,7 +6,7 @@ (label) main::@2 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 16.5 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] diff --git a/src/test/ref/loopmin.asm b/src/test/ref/loopmin.asm index 4e5845cce..16b638483 100644 --- a/src/test/ref/loopmin.asm +++ b/src/test/ref/loopmin.asm @@ -4,9 +4,7 @@ main: { lda #0 ldx #$a - b1: - cpx #5+1 - bcc b2 + b3: stx $ff clc adc $ff @@ -15,4 +13,8 @@ main: { cpx #0 bne b1 rts + b1: + cpx #5+1 + bcc b2 + jmp b3 } diff --git a/src/test/ref/loopmin.cfg b/src/test/ref/loopmin.cfg index 42550cb12..f1bfbd751 100644 --- a/src/test/ref/loopmin.cfg +++ b/src/test/ref/loopmin.cfg @@ -9,20 +9,20 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::s#2 ← phi( main/(byte) 0 main::@2/(byte) main::s#4 ) - [5] (byte) main::i#2 ← phi( main/(byte) $a main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) 5+(byte) 1) goto main::@2 to:main::@3 -main::@3: scope:[main] from main::@1 - [7] (byte) main::s#1 ← (byte) main::s#2 + (byte) main::i#2 +main::@3: scope:[main] from main main::@1 + [5] (byte) main::s#5 ← phi( main::@1/(byte) main::s#1 main/(byte) 0 ) + [5] (byte) main::i#6 ← phi( main::@1/(byte) main::i#1 main/(byte) $a ) + [6] (byte) main::s#1 ← (byte) main::s#5 + (byte) main::i#6 to:main::@2 main::@2: scope:[main] from main::@1 main::@3 - [8] (byte) main::s#4 ← phi( main::@1/(byte) main::s#2 main::@3/(byte) main::s#1 ) - [9] (byte) main::i#1 ← -- (byte) main::i#2 - [10] if((byte) main::i#1>(byte) 0) goto main::@1 + [7] (byte) main::i#5 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#6 ) + [8] (byte) main::i#1 ← -- (byte) main::i#5 + [9] if((byte) main::i#1>(byte) 0) goto main::@1 to:main::@return main::@return: scope:[main] from main::@2 - [11] return + [10] return to:@return +main::@1: scope:[main] from main::@2 + [11] if((byte) main::i#1<(byte) 5+(byte) 1) goto main::@2 + to:main::@3 diff --git a/src/test/ref/loopmin.log b/src/test/ref/loopmin.log index 0309bfad2..b0ccb730b 100644 --- a/src/test/ref/loopmin.log +++ b/src/test/ref/loopmin.log @@ -97,6 +97,7 @@ Constant (const byte) main::i#0 = $a Constant (const byte) main::s#0 = 0 Successful SSA optimization Pass2ConstantIdentification Rewriting conditional comparison [5] if((byte) main::i#2<=(byte) 5) goto main::@2 +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 5+1 in if((byte) main::i#2<(byte) 5+(number) 1) goto main::@2 Adding number conversion cast (unumber) 1 in if((byte) main::i#2<(unumber)(byte) 5+(number) 1) goto main::@2 Successful SSA optimization PassNAddNumberTypeConversions @@ -105,30 +106,44 @@ Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::i#1 = (byte) main::i#2 +Alias (byte) main::s#2 = (byte) main::s#4 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#7 (const byte) main::i#0 +Identical Phi Values (byte) main::s#6 (const byte) main::s#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (main::@1_1) in block main::@2 +Removing PHI-reference to removed block (main::@1_1) in block main::@2 +if() condition always false - eliminating [10] if((const byte) main::i#0<(byte) 5+(byte) 1) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Identical Phi Values (byte) main::s#2 (byte) main::s#1 +Successful SSA optimization Pass2IdenticalPhiElimination Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::s#0 Constant inlined main::i#0 = (byte) $a Constant inlined main::s#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@5(between main::@2 and main::@1) -Added new block during phi lifting main::@6(between main::@1 and main::@2) +Added new block during phi lifting main::@5(between main::@1 and main::@2) +Added new block during phi lifting main::@6(between main::@1 and main::@3) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 3 initial phi equivalence classes -Coalesced [9] main::s#7 ← main::s#1 -Coalesced [14] main::i#5 ← main::i#1 -Coalesced [15] main::s#5 ← main::s#4 -Coalesced (already) [16] main::s#6 ← main::s#2 +Coalesced [9] main::i#9 ← main::i#6 +Coalesced [15] main::i#10 ← main::i#1 +Coalesced [16] main::s#7 ← main::s#1 +Coalesced (already) [17] main::i#8 ← main::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 -Culled Empty Block (label) main::@5 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@6 +Culled Empty Block (label) main::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -146,43 +161,43 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::s#2 ← phi( main/(byte) 0 main::@2/(byte) main::s#4 ) - [5] (byte) main::i#2 ← phi( main/(byte) $a main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) 5+(byte) 1) goto main::@2 to:main::@3 -main::@3: scope:[main] from main::@1 - [7] (byte) main::s#1 ← (byte) main::s#2 + (byte) main::i#2 +main::@3: scope:[main] from main main::@1 + [5] (byte) main::s#5 ← phi( main::@1/(byte) main::s#1 main/(byte) 0 ) + [5] (byte) main::i#6 ← phi( main::@1/(byte) main::i#1 main/(byte) $a ) + [6] (byte) main::s#1 ← (byte) main::s#5 + (byte) main::i#6 to:main::@2 main::@2: scope:[main] from main::@1 main::@3 - [8] (byte) main::s#4 ← phi( main::@1/(byte) main::s#2 main::@3/(byte) main::s#1 ) - [9] (byte) main::i#1 ← -- (byte) main::i#2 - [10] if((byte) main::i#1>(byte) 0) goto main::@1 + [7] (byte) main::i#5 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#6 ) + [8] (byte) main::i#1 ← -- (byte) main::i#5 + [9] if((byte) main::i#1>(byte) 0) goto main::@1 to:main::@return main::@return: scope:[main] from main::@2 - [11] return + [10] return to:@return +main::@1: scope:[main] from main::@2 + [11] if((byte) main::i#1<(byte) 5+(byte) 1) goto main::@2 + to:main::@3 VARIABLE REGISTER WEIGHTS (void()) main() (byte) main::i -(byte) main::i#1 16.5 -(byte) main::i#2 11.0 +(byte) main::i#1 168.33333333333331 +(byte) main::i#5 213.0 +(byte) main::i#6 61.5 (byte) main::s -(byte) main::s#1 22.0 -(byte) main::s#2 16.5 -(byte) main::s#4 11.0 +(byte) main::s#1 22.4 +(byte) main::s#5 112.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] -[ main::s#2 main::s#4 main::s#1 ] +[ main::s#5 main::s#1 ] +[ main::i#5 main::i#6 main::i#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ main::s#2 main::s#4 main::s#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::s#2 main::s#4 main::s#1 ] +[ main::s#5 main::s#1 ] +[ main::i#5 main::i#6 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::s#5 main::s#1 ] +Allocated zp ZP_BYTE:3 [ main::i#5 main::i#6 main::i#1 ] INITIAL ASM Target platform is c64basic @@ -210,69 +225,68 @@ bend_from_b1: bend: // main main: { - .label i = 2 - .label s = 3 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::s#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + .label i = 3 + .label s = 2 + // [5] phi from main to main::@3 [phi:main->main::@3] + b3_from_main: + // [5] phi (byte) main::s#5 = (byte) 0 [phi:main->main::@3#0] -- vbuz1=vbuc1 lda #0 sta s - // [5] phi (byte) main::i#2 = (byte) $a [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::i#6 = (byte) $a [phi:main->main::@3#1] -- vbuz1=vbuc1 lda #$a sta i - jmp b1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::s#2 = (byte) main::s#4 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) 5+(byte) 1) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #5+1 - bcc b2_from_b1 jmp b3 // main::@3 b3: - // [7] (byte) main::s#1 ← (byte) main::s#2 + (byte) main::i#2 -- vbuz1=vbuz1_plus_vbuz2 + // [6] (byte) main::s#1 ← (byte) main::s#5 + (byte) main::i#6 -- vbuz1=vbuz1_plus_vbuz2 lda s clc adc i sta s - // [8] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] + // [7] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] b2_from_b1: b2_from_b3: - // [8] phi (byte) main::s#4 = (byte) main::s#2 [phi:main::@1/main::@3->main::@2#0] -- register_copy + // [7] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@1/main::@3->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [9] (byte) main::i#1 ← -- (byte) main::i#2 -- vbuz1=_dec_vbuz1 + // [8] (byte) main::i#1 ← -- (byte) main::i#5 -- vbuz1=_dec_vbuz1 dec i - // [10] if((byte) main::i#1>(byte) 0) goto main::@1 -- vbuz1_gt_0_then_la1 + // [9] if((byte) main::i#1>(byte) 0) goto main::@1 -- vbuz1_gt_0_then_la1 lda i - bne b1_from_b2 + bne b1 jmp breturn // main::@return breturn: - // [11] return + // [10] return rts + // main::@1 + b1: + // [11] if((byte) main::i#1<(byte) 5+(byte) 1) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #5+1 + bcc b2_from_b1 + // [5] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + // [5] phi (byte) main::s#5 = (byte) main::s#1 [phi:main::@1->main::@3#0] -- register_copy + // [5] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@1->main::@3#1] -- register_copy + jmp b3 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [7] (byte) main::s#1 ← (byte) main::s#2 + (byte) main::i#2 [ main::i#2 main::s#1 ] ( main:2 [ main::i#2 main::s#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Statement [7] (byte) main::s#1 ← (byte) main::s#2 + (byte) main::i#2 [ main::i#2 main::s#1 ] ( main:2 [ main::i#2 main::s#1 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ main::s#2 main::s#4 main::s#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Statement [6] (byte) main::s#1 ← (byte) main::s#5 + (byte) main::i#6 [ main::i#6 main::s#1 ] ( main:2 [ main::i#6 main::s#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::i#5 main::i#6 main::i#1 ] +Statement [6] (byte) main::s#1 ← (byte) main::s#5 + (byte) main::i#6 [ main::i#6 main::s#1 ] ( main:2 [ main::i#6 main::s#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::s#5 main::s#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::i#5 main::i#6 main::i#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 49.5: zp ZP_BYTE:3 [ main::s#2 main::s#4 main::s#1 ] 27.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 442.83: zp ZP_BYTE:3 [ main::i#5 main::i#6 main::i#1 ] 134.4: zp ZP_BYTE:2 [ main::s#5 main::s#1 ] Uplift Scope [] -Uplifting [main] best 398 combination reg byte a [ main::s#2 main::s#4 main::s#1 ] reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 398 combination +Uplifting [main] best 1898 combination reg byte x [ main::i#5 main::i#6 main::i#1 ] reg byte a [ main::s#5 main::s#1 ] +Uplifting [] best 1898 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -299,78 +313,72 @@ bend_from_b1: bend: // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::s#2 = (byte) 0 [phi:main->main::@1#0] -- vbuaa=vbuc1 + // [5] phi from main to main::@3 [phi:main->main::@3] + b3_from_main: + // [5] phi (byte) main::s#5 = (byte) 0 [phi:main->main::@3#0] -- vbuaa=vbuc1 lda #0 - // [5] phi (byte) main::i#2 = (byte) $a [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi (byte) main::i#6 = (byte) $a [phi:main->main::@3#1] -- vbuxx=vbuc1 ldx #$a - jmp b1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::s#2 = (byte) main::s#4 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) 5+(byte) 1) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #5+1 - bcc b2_from_b1 jmp b3 // main::@3 b3: - // [7] (byte) main::s#1 ← (byte) main::s#2 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuxx + // [6] (byte) main::s#1 ← (byte) main::s#5 + (byte) main::i#6 -- vbuaa=vbuaa_plus_vbuxx stx $ff clc adc $ff - // [8] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] + // [7] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] b2_from_b1: b2_from_b3: - // [8] phi (byte) main::s#4 = (byte) main::s#2 [phi:main::@1/main::@3->main::@2#0] -- register_copy + // [7] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@1/main::@3->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [9] (byte) main::i#1 ← -- (byte) main::i#2 -- vbuxx=_dec_vbuxx + // [8] (byte) main::i#1 ← -- (byte) main::i#5 -- vbuxx=_dec_vbuxx dex - // [10] if((byte) main::i#1>(byte) 0) goto main::@1 -- vbuxx_gt_0_then_la1 + // [9] if((byte) main::i#1>(byte) 0) goto main::@1 -- vbuxx_gt_0_then_la1 cpx #0 - bne b1_from_b2 + bne b1 jmp breturn // main::@return breturn: - // [11] return + // [10] return rts + // main::@1 + b1: + // [11] if((byte) main::i#1<(byte) 5+(byte) 1) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #5+1 + bcc b2_from_b1 + // [5] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + // [5] phi (byte) main::s#5 = (byte) main::s#1 [phi:main::@1->main::@3#0] -- register_copy + // [5] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@1->main::@3#1] -- register_copy + jmp b3 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b2 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Replacing label b2_from_b1 with b2 -Replacing label b1_from_b2 with b1 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b1_from_b2: Removing instruction b2_from_b1: Removing instruction b2_from_b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b3: +Removing instruction b3_from_main: Removing instruction breturn: +Removing instruction b3_from_b1: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Removing instruction jmp b1 -Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -384,19 +392,19 @@ FINAL SYMBOL TABLE (label) main::@3 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 11.0 +(byte) main::i#1 reg byte x 168.33333333333331 +(byte) main::i#5 reg byte x 213.0 +(byte) main::i#6 reg byte x 61.5 (byte) main::s -(byte) main::s#1 reg byte a 22.0 -(byte) main::s#2 reg byte a 16.5 -(byte) main::s#4 reg byte a 11.0 +(byte) main::s#1 reg byte a 22.4 +(byte) main::s#5 reg byte a 112.0 -reg byte x [ main::i#2 main::i#1 ] -reg byte a [ main::s#2 main::s#4 main::s#1 ] +reg byte a [ main::s#5 main::s#1 ] +reg byte x [ main::i#5 main::i#6 main::i#1 ] FINAL ASSEMBLER -Score: 236 +Score: 1256 // File Comments // Upstart @@ -413,41 +421,43 @@ Score: 236 // @end // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::s#2 = (byte) 0 [phi:main->main::@1#0] -- vbuaa=vbuc1 + // [5] phi from main to main::@3 [phi:main->main::@3] + // [5] phi (byte) main::s#5 = (byte) 0 [phi:main->main::@3#0] -- vbuaa=vbuc1 lda #0 - // [5] phi (byte) main::i#2 = (byte) $a [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi (byte) main::i#6 = (byte) $a [phi:main->main::@3#1] -- vbuxx=vbuc1 ldx #$a - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::s#2 = (byte) main::s#4 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - // main::@1 - b1: - // if(i>5) - // [6] if((byte) main::i#2<(byte) 5+(byte) 1) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #5+1 - bcc b2 // main::@3 + b3: // s=s+i - // [7] (byte) main::s#1 ← (byte) main::s#2 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuxx + // [6] (byte) main::s#1 ← (byte) main::s#5 + (byte) main::i#6 -- vbuaa=vbuaa_plus_vbuxx stx $ff clc adc $ff - // [8] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] - // [8] phi (byte) main::s#4 = (byte) main::s#2 [phi:main::@1/main::@3->main::@2#0] -- register_copy + // [7] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] + // [7] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@1/main::@3->main::@2#0] -- register_copy // main::@2 b2: // i--; - // [9] (byte) main::i#1 ← -- (byte) main::i#2 -- vbuxx=_dec_vbuxx + // [8] (byte) main::i#1 ← -- (byte) main::i#5 -- vbuxx=_dec_vbuxx dex // while (i>0) - // [10] if((byte) main::i#1>(byte) 0) goto main::@1 -- vbuxx_gt_0_then_la1 + // [9] if((byte) main::i#1>(byte) 0) goto main::@1 -- vbuxx_gt_0_then_la1 cpx #0 bne b1 // main::@return // } - // [11] return + // [10] return rts + // main::@1 + b1: + // if(i>5) + // [11] if((byte) main::i#1<(byte) 5+(byte) 1) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #5+1 + bcc b2 + // [5] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [5] phi (byte) main::s#5 = (byte) main::s#1 [phi:main::@1->main::@3#0] -- register_copy + // [5] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@1->main::@3#1] -- register_copy + jmp b3 } // File Data diff --git a/src/test/ref/loopmin.sym b/src/test/ref/loopmin.sym index 8debc0c66..c6f244fb1 100644 --- a/src/test/ref/loopmin.sym +++ b/src/test/ref/loopmin.sym @@ -7,12 +7,12 @@ (label) main::@3 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 11.0 +(byte) main::i#1 reg byte x 168.33333333333331 +(byte) main::i#5 reg byte x 213.0 +(byte) main::i#6 reg byte x 61.5 (byte) main::s -(byte) main::s#1 reg byte a 22.0 -(byte) main::s#2 reg byte a 16.5 -(byte) main::s#4 reg byte a 11.0 +(byte) main::s#1 reg byte a 22.4 +(byte) main::s#5 reg byte a 112.0 -reg byte x [ main::i#2 main::i#1 ] -reg byte a [ main::s#2 main::s#4 main::s#1 ] +reg byte a [ main::s#5 main::s#1 ] +reg byte x [ main::i#5 main::i#6 main::i#1 ] diff --git a/src/test/ref/norom-charset.asm b/src/test/ref/norom-charset.asm index b31a90b33..4575c8f8d 100644 --- a/src/test/ref/norom-charset.asm +++ b/src/test/ref/norom-charset.asm @@ -14,13 +14,6 @@ main: { sta charset+1 lda #0 sta c - b1: - lda #4 - cmp c - bne b2 - lda #SCREEN/$40|CHARSET/$400 - sta VIC_MEMORY - rts b2: lda c asl @@ -38,7 +31,12 @@ main: { inc charset+1 !: inc c - jmp b1 + lda #4 + cmp c + bne b2 + lda #SCREEN/$40|CHARSET/$400 + sta VIC_MEMORY + rts } // Generate one 5x3 character from a 16-bit char spec // The 5x3 char is stored as 5x 3-bit rows followed by a zero. %aaabbbcc cdddeee0 diff --git a/src/test/ref/norom-charset.cfg b/src/test/ref/norom-charset.cfg index 97c551389..90217c1bb 100644 --- a/src/test/ref/norom-charset.cfg +++ b/src/test/ref/norom-charset.cfg @@ -9,28 +9,28 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@4 - [5] (byte*) main::charset#2 ← phi( main/(const byte*) CHARSET#0+(byte) 8 main::@4/(byte*) main::charset#1 ) - [5] (byte) main::c#2 ← phi( main/(byte) 0 main::@4/(byte) main::c#1 ) - [6] if((byte) main::c#2!=(byte) 4) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [7] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 - to:main::@return -main::@return: scope:[main] from main::@3 - [8] return - to:@return -main::@2: scope:[main] from main::@1 - [9] (byte~) main::$10 ← (byte) main::c#2 << (byte) 1 - [10] (byte*) gen_char3::dst#0 ← (byte*) main::charset#2 - [11] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) - [12] call gen_char3 + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::charset#5 ← phi( main::@1/(byte*) main::charset#1 main/(const byte*) CHARSET#0+(byte) 8 ) + [5] (byte) main::c#5 ← phi( main::@1/(byte) main::c#1 main/(byte) 0 ) + [6] (byte~) main::$10 ← (byte) main::c#5 << (byte) 1 + [7] (byte*) gen_char3::dst#0 ← (byte*) main::charset#5 + [8] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) + [9] call gen_char3 to:main::@4 main::@4: scope:[main] from main::@2 - [13] (byte*) main::charset#1 ← (byte*) main::charset#2 + (byte) 8 - [14] (byte) main::c#1 ← ++ (byte) main::c#2 + [10] (byte*) main::charset#1 ← (byte*) main::charset#5 + (byte) 8 + [11] (byte) main::c#1 ← ++ (byte) main::c#5 to:main::@1 +main::@1: scope:[main] from main::@4 + [12] if((byte) main::c#1!=(byte) 4) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [13] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 + to:main::@return +main::@return: scope:[main] from main::@3 + [14] return + to:@return gen_char3: scope:[gen_char3] from main::@2 [15] phi() to:gen_char3::@1 diff --git a/src/test/ref/norom-charset.log b/src/test/ref/norom-charset.log index b4cdf9f0e..7c249b0ae 100644 --- a/src/test/ref/norom-charset.log +++ b/src/test/ref/norom-charset.log @@ -341,6 +341,7 @@ Resolved ranged next value [43] gen_char3::c#1 ← ++ gen_char3::c#2 to ++ Resolved ranged comparison value [45] if(gen_char3::c#1!=rangelast(0,2)) goto gen_char3::@2 to (number) 3 Resolved ranged next value [51] gen_char3::r#1 ← ++ gen_char3::r#6 to ++ Resolved ranged comparison value [53] if(gen_char3::r#1!=rangelast(0,4)) goto gen_char3::@1 to (number) 5 +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 3 in if((byte) gen_char3::c#1!=(number) 3) goto gen_char3::@2 Adding number conversion cast (unumber) 5 in if((byte) gen_char3::r#1!=(number) 5) goto gen_char3::@1 Successful SSA optimization PassNAddNumberTypeConversions @@ -350,12 +351,22 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 5 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::c#1 = (byte) main::c#2 +Alias (byte*) main::charset#1 = (byte*) main::charset#2 +Alias (byte) main::c#5 = (byte) main::c#6 +Alias (byte*) main::charset#5 = (byte*) main::charset#6 +Alias (byte*) main::charset#0 = (byte*) main::charset#7 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::c#7 (const byte) main::c#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [0] (byte*) main::charset#0 ← (const byte*) CHARSET#0 + (byte) 8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) main::charset#0 = CHARSET#0+8 Constant (const word) main::$1 = (word)SCREEN#0 Constant (const word) main::$3 = (word)CHARSET#0 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [37] if((const byte) main::c#0!=(byte) 4) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Constant right-side identified [8] (word~) main::$2 ← (const word) main::$1 / (byte) $40 Constant right-side identified [9] (word~) main::$4 ← (const word) main::$3 / (word) $400 Successful SSA optimization Pass2ConstantRValueConsolidation @@ -370,7 +381,7 @@ Constant value identified (byte)main::$5 in [9] (byte~) main::$6 ← (byte)(cons Successful SSA optimization Pass2ConstantValues Constant (const byte) main::$6 = (byte)main::$5 Successful SSA optimization Pass2ConstantIdentification -Rewriting multiplication to use shift [2] (byte~) main::$10 ← (byte) main::c#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [2] (byte~) main::$10 ← (byte) main::c#5 * (const byte) SIZEOF_WORD Rewriting multiplication to use shift [16] (byte) gen_char3::b#1 ← (byte) gen_char3::b#3 * (byte) 2 Rewriting multiplication to use shift [17] (word) gen_char3::spec#1 ← (word) gen_char3::spec#2 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting @@ -393,6 +404,7 @@ Constant inlined main::$4 = (word)(const byte*) CHARSET#0/(word) $400 Successful SSA optimization Pass2ConstantInlining Eliminating unused constant (const byte) SIZEOF_WORD Successful SSA optimization PassNEliminateUnusedVars +Added new block during phi lifting main::@8(between main::@1 and main::@2) Added new block during phi lifting gen_char3::@7(between gen_char3::@5 and gen_char3::@1) Added new block during phi lifting gen_char3::@8(between gen_char3::@3 and gen_char3::@2) Added new block during phi lifting gen_char3::@9(between gen_char3::@2 and gen_char3::@3) @@ -401,24 +413,27 @@ Adding NOP phi() at start of @2 Adding NOP phi() at start of @3 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 -Calls in [main] to gen_char3:13 +Calls in [main] to gen_char3:11 Created 8 initial phi equivalence classes -Coalesced [16] main::c#5 ← main::c#1 -Coalesced [17] main::charset#5 ← main::charset#1 -Coalesced [18] gen_char3::spec#8 ← gen_char3::spec#0 -Coalesced [20] gen_char3::spec#10 ← gen_char3::spec#4 -Coalesced [26] gen_char3::b#9 ← gen_char3::b#2 -Coalesced [36] gen_char3::spec#9 ← gen_char3::spec#1 -Coalesced [37] gen_char3::r#7 ← gen_char3::r#1 -Coalesced (already) [38] gen_char3::spec#11 ← gen_char3::spec#1 -Coalesced [39] gen_char3::b#7 ← gen_char3::b#1 -Coalesced [40] gen_char3::c#5 ← gen_char3::c#1 -Coalesced [41] gen_char3::b#8 ← gen_char3::b#4 +Coalesced [17] main::c#8 ← main::c#1 +Coalesced [18] main::charset#8 ← main::charset#1 +Coalesced [19] gen_char3::spec#8 ← gen_char3::spec#0 +Coalesced [21] gen_char3::spec#10 ← gen_char3::spec#4 +Coalesced [27] gen_char3::b#9 ← gen_char3::b#2 +Coalesced [37] gen_char3::spec#9 ← gen_char3::spec#1 +Coalesced [38] gen_char3::r#7 ← gen_char3::r#1 +Coalesced (already) [39] gen_char3::spec#11 ← gen_char3::spec#1 +Coalesced [40] gen_char3::b#7 ← gen_char3::b#1 +Coalesced [41] gen_char3::c#5 ← gen_char3::c#1 +Coalesced [42] gen_char3::b#8 ← gen_char3::b#4 Coalesced down to 6 phi equivalence classes Culled Empty Block (label) @3 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@8 Culled Empty Block (label) gen_char3::@7 Culled Empty Block (label) gen_char3::@8 Culled Empty Block (label) gen_char3::@9 @@ -442,28 +457,28 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@4 - [5] (byte*) main::charset#2 ← phi( main/(const byte*) CHARSET#0+(byte) 8 main::@4/(byte*) main::charset#1 ) - [5] (byte) main::c#2 ← phi( main/(byte) 0 main::@4/(byte) main::c#1 ) - [6] if((byte) main::c#2!=(byte) 4) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [7] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 - to:main::@return -main::@return: scope:[main] from main::@3 - [8] return - to:@return -main::@2: scope:[main] from main::@1 - [9] (byte~) main::$10 ← (byte) main::c#2 << (byte) 1 - [10] (byte*) gen_char3::dst#0 ← (byte*) main::charset#2 - [11] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) - [12] call gen_char3 + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::charset#5 ← phi( main::@1/(byte*) main::charset#1 main/(const byte*) CHARSET#0+(byte) 8 ) + [5] (byte) main::c#5 ← phi( main::@1/(byte) main::c#1 main/(byte) 0 ) + [6] (byte~) main::$10 ← (byte) main::c#5 << (byte) 1 + [7] (byte*) gen_char3::dst#0 ← (byte*) main::charset#5 + [8] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) + [9] call gen_char3 to:main::@4 main::@4: scope:[main] from main::@2 - [13] (byte*) main::charset#1 ← (byte*) main::charset#2 + (byte) 8 - [14] (byte) main::c#1 ← ++ (byte) main::c#2 + [10] (byte*) main::charset#1 ← (byte*) main::charset#5 + (byte) 8 + [11] (byte) main::c#1 ← ++ (byte) main::c#5 to:main::@1 +main::@1: scope:[main] from main::@4 + [12] if((byte) main::c#1!=(byte) 4) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [13] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 + to:main::@return +main::@return: scope:[main] from main::@3 + [14] return + to:@return gen_char3: scope:[gen_char3] from main::@2 [15] phi() to:gen_char3::@1 @@ -528,15 +543,15 @@ VARIABLE REGISTER WEIGHTS (void()) main() (byte~) main::$10 11.0 (byte) main::c -(byte) main::c#1 22.0 -(byte) main::c#2 6.285714285714286 +(byte) main::c#1 16.5 +(byte) main::c#5 5.5 (byte*) main::charset -(byte*) main::charset#1 11.0 -(byte*) main::charset#2 5.5 +(byte*) main::charset#1 7.333333333333333 +(byte*) main::charset#5 6.6000000000000005 Initial phi equivalence classes -[ main::c#2 main::c#1 ] -[ main::charset#2 main::charset#1 ] +[ main::c#5 main::c#1 ] +[ main::charset#5 main::charset#1 ] [ gen_char3::r#6 gen_char3::r#1 ] [ gen_char3::spec#2 gen_char3::spec#4 gen_char3::spec#0 gen_char3::spec#1 ] [ gen_char3::c#2 gen_char3::c#1 ] @@ -546,8 +561,8 @@ Added variable gen_char3::dst#0 to zero page equivalence class [ gen_char3::dst# Added variable gen_char3::$0 to zero page equivalence class [ gen_char3::$0 ] Added variable gen_char3::$1 to zero page equivalence class [ gen_char3::$1 ] Complete equivalence classes -[ main::c#2 main::c#1 ] -[ main::charset#2 main::charset#1 ] +[ main::c#5 main::c#1 ] +[ main::charset#5 main::charset#1 ] [ gen_char3::r#6 gen_char3::r#1 ] [ gen_char3::spec#2 gen_char3::spec#4 gen_char3::spec#0 gen_char3::spec#1 ] [ gen_char3::c#2 gen_char3::c#1 ] @@ -556,8 +571,8 @@ Complete equivalence classes [ gen_char3::dst#0 ] [ gen_char3::$0 ] [ gen_char3::$1 ] -Allocated zp ZP_BYTE:2 [ main::c#2 main::c#1 ] -Allocated zp ZP_WORD:3 [ main::charset#2 main::charset#1 ] +Allocated zp ZP_BYTE:2 [ main::c#5 main::c#1 ] +Allocated zp ZP_WORD:3 [ main::charset#5 main::charset#1 ] Allocated zp ZP_BYTE:5 [ gen_char3::r#6 gen_char3::r#1 ] Allocated zp ZP_WORD:6 [ gen_char3::spec#2 gen_char3::spec#4 gen_char3::spec#0 gen_char3::spec#1 ] Allocated zp ZP_BYTE:8 [ gen_char3::c#2 gen_char3::c#1 ] @@ -600,59 +615,47 @@ main: { .label _10 = $a .label charset = 3 .label c = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::charset#2 = (const byte*) CHARSET#0+(byte) 8 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::charset#5 = (const byte*) CHARSET#0+(byte) 8 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #CHARSET+8 sta charset+1 - // [5] phi (byte) main::c#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::c#5 = (byte) 0 [phi:main->main::@2#1] -- vbuz1=vbuc1 lda #0 sta c - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::c#2!=(byte) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 - lda #4 - cmp c - bne b2 - jmp b3 - // main::@3 - b3: - // [7] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 -- _deref_pbuc1=vbuc2 - lda #SCREEN/$40|CHARSET/$400 - sta VIC_MEMORY - jmp breturn - // main::@return - breturn: - // [8] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::charset#5 = (byte*) main::charset#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::c#5 = (byte) main::c#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 // main::@2 b2: - // [9] (byte~) main::$10 ← (byte) main::c#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [6] (byte~) main::$10 ← (byte) main::c#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda c asl sta _10 - // [10] (byte*) gen_char3::dst#0 ← (byte*) main::charset#2 -- pbuz1=pbuz2 + // [7] (byte*) gen_char3::dst#0 ← (byte*) main::charset#5 -- pbuz1=pbuz2 lda charset sta gen_char3.dst lda charset+1 sta gen_char3.dst+1 - // [11] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) -- vwuz1=pwuc1_derefidx_vbuz2 + // [8] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) -- vwuz1=pwuc1_derefidx_vbuz2 ldy _10 lda charset_spec_row,y sta gen_char3.spec lda charset_spec_row+1,y sta gen_char3.spec+1 - // [12] call gen_char3 + // [9] call gen_char3 // [15] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] gen_char3_from_b2: jsr gen_char3 jmp b4 // main::@4 b4: - // [13] (byte*) main::charset#1 ← (byte*) main::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [10] (byte*) main::charset#1 ← (byte*) main::charset#5 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc charset @@ -660,13 +663,26 @@ main: { bcc !+ inc charset+1 !: - // [14] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuz1=_inc_vbuz1 + // [11] (byte) main::c#1 ← ++ (byte) main::c#5 -- vbuz1=_inc_vbuz1 inc c - // [5] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [5] phi (byte*) main::charset#2 = (byte*) main::charset#1 [phi:main::@4->main::@1#0] -- register_copy - // [5] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@4->main::@1#1] -- register_copy jmp b1 + // main::@1 + b1: + // [12] if((byte) main::c#1!=(byte) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #4 + cmp c + bne b2_from_b1 + jmp b3 + // main::@3 + b3: + // [13] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 -- _deref_pbuc1=vbuc2 + lda #SCREEN/$40|CHARSET/$400 + sta VIC_MEMORY + jmp breturn + // main::@return + breturn: + // [14] return + rts } // gen_char3 // Generate one 5x3 character from a 16-bit char spec @@ -773,29 +789,29 @@ gen_char3: { charset_spec_row: .word $f7da, $f7de, $f24e, $d6de REGISTER UPLIFT POTENTIAL REGISTERS -Statement [7] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [9] (byte~) main::$10 ← (byte) main::c#2 << (byte) 1 [ main::c#2 main::charset#2 main::$10 ] ( main:2 [ main::c#2 main::charset#2 main::$10 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::c#2 main::c#1 ] -Statement [10] (byte*) gen_char3::dst#0 ← (byte*) main::charset#2 [ main::c#2 main::charset#2 main::$10 gen_char3::dst#0 ] ( main:2 [ main::c#2 main::charset#2 main::$10 gen_char3::dst#0 ] ) always clobbers reg byte a +Statement [6] (byte~) main::$10 ← (byte) main::c#5 << (byte) 1 [ main::c#5 main::charset#5 main::$10 ] ( main:2 [ main::c#5 main::charset#5 main::$10 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::c#5 main::c#1 ] +Statement [7] (byte*) gen_char3::dst#0 ← (byte*) main::charset#5 [ main::c#5 main::charset#5 main::$10 gen_char3::dst#0 ] ( main:2 [ main::c#5 main::charset#5 main::$10 gen_char3::dst#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ main::$10 ] -Statement [11] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) [ main::c#2 main::charset#2 gen_char3::dst#0 gen_char3::spec#0 ] ( main:2 [ main::c#2 main::charset#2 gen_char3::dst#0 gen_char3::spec#0 ] ) always clobbers reg byte a -Statement [13] (byte*) main::charset#1 ← (byte*) main::charset#2 + (byte) 8 [ main::c#2 main::charset#1 ] ( main:2 [ main::c#2 main::charset#1 ] ) always clobbers reg byte a -Statement [18] (byte~) gen_char3::$0 ← > (word) gen_char3::spec#2 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$0 ] ( main:2::gen_char3:12 [ main::c#2 main::charset#2 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$0 ] ) always clobbers reg byte a +Statement [8] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) [ main::c#5 main::charset#5 gen_char3::dst#0 gen_char3::spec#0 ] ( main:2 [ main::c#5 main::charset#5 gen_char3::dst#0 gen_char3::spec#0 ] ) always clobbers reg byte a +Statement [10] (byte*) main::charset#1 ← (byte*) main::charset#5 + (byte) 8 [ main::c#5 main::charset#1 ] ( main:2 [ main::c#5 main::charset#1 ] ) always clobbers reg byte a +Statement [13] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [18] (byte~) gen_char3::$0 ← > (word) gen_char3::spec#2 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$0 ] ( main:2::gen_char3:9 [ main::c#5 main::charset#5 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ gen_char3::r#6 gen_char3::r#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ gen_char3::b#3 gen_char3::b#4 gen_char3::b#1 gen_char3::b#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ gen_char3::c#2 gen_char3::c#1 ] -Statement [21] (byte) gen_char3::b#2 ← (byte) gen_char3::b#4 | (byte) 1 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::c#2 gen_char3::b#2 ] ( main:2::gen_char3:12 [ main::c#2 main::charset#2 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::c#2 gen_char3::b#2 ] ) always clobbers reg byte a -Statement [27] *((byte*) gen_char3::dst#0 + (byte) gen_char3::r#6) ← (byte) gen_char3::b#1 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#1 ] ( main:2::gen_char3:12 [ main::c#2 main::charset#2 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#1 ] ) always clobbers reg byte a -Statement [7] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [9] (byte~) main::$10 ← (byte) main::c#2 << (byte) 1 [ main::c#2 main::charset#2 main::$10 ] ( main:2 [ main::c#2 main::charset#2 main::$10 ] ) always clobbers reg byte a -Statement [10] (byte*) gen_char3::dst#0 ← (byte*) main::charset#2 [ main::c#2 main::charset#2 main::$10 gen_char3::dst#0 ] ( main:2 [ main::c#2 main::charset#2 main::$10 gen_char3::dst#0 ] ) always clobbers reg byte a -Statement [11] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) [ main::c#2 main::charset#2 gen_char3::dst#0 gen_char3::spec#0 ] ( main:2 [ main::c#2 main::charset#2 gen_char3::dst#0 gen_char3::spec#0 ] ) always clobbers reg byte a -Statement [13] (byte*) main::charset#1 ← (byte*) main::charset#2 + (byte) 8 [ main::c#2 main::charset#1 ] ( main:2 [ main::c#2 main::charset#1 ] ) always clobbers reg byte a -Statement [18] (byte~) gen_char3::$0 ← > (word) gen_char3::spec#2 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$0 ] ( main:2::gen_char3:12 [ main::c#2 main::charset#2 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$0 ] ) always clobbers reg byte a -Statement [21] (byte) gen_char3::b#2 ← (byte) gen_char3::b#4 | (byte) 1 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::c#2 gen_char3::b#2 ] ( main:2::gen_char3:12 [ main::c#2 main::charset#2 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::c#2 gen_char3::b#2 ] ) always clobbers reg byte a -Statement [27] *((byte*) gen_char3::dst#0 + (byte) gen_char3::r#6) ← (byte) gen_char3::b#1 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#1 ] ( main:2::gen_char3:12 [ main::c#2 main::charset#2 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#1 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::c#2 main::c#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:3 [ main::charset#2 main::charset#1 ] : zp ZP_WORD:3 , +Statement [21] (byte) gen_char3::b#2 ← (byte) gen_char3::b#4 | (byte) 1 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::c#2 gen_char3::b#2 ] ( main:2::gen_char3:9 [ main::c#5 main::charset#5 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::c#2 gen_char3::b#2 ] ) always clobbers reg byte a +Statement [27] *((byte*) gen_char3::dst#0 + (byte) gen_char3::r#6) ← (byte) gen_char3::b#1 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#1 ] ( main:2::gen_char3:9 [ main::c#5 main::charset#5 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#1 ] ) always clobbers reg byte a +Statement [6] (byte~) main::$10 ← (byte) main::c#5 << (byte) 1 [ main::c#5 main::charset#5 main::$10 ] ( main:2 [ main::c#5 main::charset#5 main::$10 ] ) always clobbers reg byte a +Statement [7] (byte*) gen_char3::dst#0 ← (byte*) main::charset#5 [ main::c#5 main::charset#5 main::$10 gen_char3::dst#0 ] ( main:2 [ main::c#5 main::charset#5 main::$10 gen_char3::dst#0 ] ) always clobbers reg byte a +Statement [8] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) [ main::c#5 main::charset#5 gen_char3::dst#0 gen_char3::spec#0 ] ( main:2 [ main::c#5 main::charset#5 gen_char3::dst#0 gen_char3::spec#0 ] ) always clobbers reg byte a +Statement [10] (byte*) main::charset#1 ← (byte*) main::charset#5 + (byte) 8 [ main::c#5 main::charset#1 ] ( main:2 [ main::c#5 main::charset#1 ] ) always clobbers reg byte a +Statement [13] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [18] (byte~) gen_char3::$0 ← > (word) gen_char3::spec#2 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$0 ] ( main:2::gen_char3:9 [ main::c#5 main::charset#5 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$0 ] ) always clobbers reg byte a +Statement [21] (byte) gen_char3::b#2 ← (byte) gen_char3::b#4 | (byte) 1 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::c#2 gen_char3::b#2 ] ( main:2::gen_char3:9 [ main::c#5 main::charset#5 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::c#2 gen_char3::b#2 ] ) always clobbers reg byte a +Statement [27] *((byte*) gen_char3::dst#0 + (byte) gen_char3::r#6) ← (byte) gen_char3::b#1 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#1 ] ( main:2::gen_char3:9 [ main::c#5 main::charset#5 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::c#5 main::c#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:3 [ main::charset#5 main::charset#1 ] : zp ZP_WORD:3 , Potential registers zp ZP_BYTE:5 [ gen_char3::r#6 gen_char3::r#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , Potential registers zp ZP_WORD:6 [ gen_char3::spec#2 gen_char3::spec#4 gen_char3::spec#0 gen_char3::spec#1 ] : zp ZP_WORD:6 , Potential registers zp ZP_BYTE:8 [ gen_char3::c#2 gen_char3::c#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , @@ -807,18 +823,18 @@ Potential registers zp ZP_BYTE:14 [ gen_char3::$1 ] : zp ZP_BYTE:14 , reg byte a REGISTER UPLIFT SCOPES Uplift Scope [gen_char3] 6,281.5: zp ZP_BYTE:9 [ gen_char3::b#3 gen_char3::b#4 gen_char3::b#1 gen_char3::b#2 ] 2,002: zp ZP_BYTE:13 [ gen_char3::$0 ] 2,002: zp ZP_BYTE:14 [ gen_char3::$1 ] 1,751.75: zp ZP_BYTE:8 [ gen_char3::c#2 gen_char3::c#1 ] 1,004.43: zp ZP_WORD:6 [ gen_char3::spec#2 gen_char3::spec#4 gen_char3::spec#0 gen_char3::spec#1 ] 176.75: zp ZP_BYTE:5 [ gen_char3::r#6 gen_char3::r#1 ] 6.59: zp ZP_WORD:11 [ gen_char3::dst#0 ] -Uplift Scope [main] 28.29: zp ZP_BYTE:2 [ main::c#2 main::c#1 ] 16.5: zp ZP_WORD:3 [ main::charset#2 main::charset#1 ] 11: zp ZP_BYTE:10 [ main::$10 ] +Uplift Scope [main] 22: zp ZP_BYTE:2 [ main::c#5 main::c#1 ] 13.93: zp ZP_WORD:3 [ main::charset#5 main::charset#1 ] 11: zp ZP_BYTE:10 [ main::$10 ] Uplift Scope [] -Uplifting [gen_char3] best 61712 combination reg byte y [ gen_char3::b#3 gen_char3::b#4 gen_char3::b#1 gen_char3::b#2 ] reg byte a [ gen_char3::$0 ] reg byte a [ gen_char3::$1 ] reg byte x [ gen_char3::c#2 gen_char3::c#1 ] zp ZP_WORD:6 [ gen_char3::spec#2 gen_char3::spec#4 gen_char3::spec#0 gen_char3::spec#1 ] zp ZP_BYTE:5 [ gen_char3::r#6 gen_char3::r#1 ] zp ZP_WORD:11 [ gen_char3::dst#0 ] +Uplifting [gen_char3] best 61742 combination reg byte y [ gen_char3::b#3 gen_char3::b#4 gen_char3::b#1 gen_char3::b#2 ] reg byte a [ gen_char3::$0 ] reg byte a [ gen_char3::$1 ] reg byte x [ gen_char3::c#2 gen_char3::c#1 ] zp ZP_WORD:6 [ gen_char3::spec#2 gen_char3::spec#4 gen_char3::spec#0 gen_char3::spec#1 ] zp ZP_BYTE:5 [ gen_char3::r#6 gen_char3::r#1 ] zp ZP_WORD:11 [ gen_char3::dst#0 ] Limited combination testing to 100 combinations of 432 possible. -Uplifting [main] best 61672 combination zp ZP_BYTE:2 [ main::c#2 main::c#1 ] zp ZP_WORD:3 [ main::charset#2 main::charset#1 ] reg byte x [ main::$10 ] -Uplifting [] best 61672 combination +Uplifting [main] best 61702 combination zp ZP_BYTE:2 [ main::c#5 main::c#1 ] zp ZP_WORD:3 [ main::charset#5 main::charset#1 ] reg byte x [ main::$10 ] +Uplifting [] best 61702 combination Attempting to uplift remaining variables inzp ZP_BYTE:5 [ gen_char3::r#6 gen_char3::r#1 ] -Uplifting [gen_char3] best 61672 combination zp ZP_BYTE:5 [ gen_char3::r#6 gen_char3::r#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::c#2 main::c#1 ] -Uplifting [main] best 61672 combination zp ZP_BYTE:2 [ main::c#2 main::c#1 ] -Coalescing zero page register [ zp ZP_WORD:3 [ main::charset#2 main::charset#1 ] ] with [ zp ZP_WORD:11 [ gen_char3::dst#0 ] ] - score: 1 +Uplifting [gen_char3] best 61702 combination zp ZP_BYTE:5 [ gen_char3::r#6 gen_char3::r#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::c#5 main::c#1 ] +Uplifting [main] best 61702 combination zp ZP_BYTE:2 [ main::c#5 main::c#1 ] +Coalescing zero page register [ zp ZP_WORD:3 [ main::charset#5 main::charset#1 ] ] with [ zp ZP_WORD:11 [ gen_char3::dst#0 ] ] - score: 1 ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -851,54 +867,42 @@ bend: main: { .label charset = 3 .label c = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::charset#2 = (const byte*) CHARSET#0+(byte) 8 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::charset#5 = (const byte*) CHARSET#0+(byte) 8 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #CHARSET+8 sta charset+1 - // [5] phi (byte) main::c#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::c#5 = (byte) 0 [phi:main->main::@2#1] -- vbuz1=vbuc1 lda #0 sta c - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::c#2!=(byte) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 - lda #4 - cmp c - bne b2 - jmp b3 - // main::@3 - b3: - // [7] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 -- _deref_pbuc1=vbuc2 - lda #SCREEN/$40|CHARSET/$400 - sta VIC_MEMORY - jmp breturn - // main::@return - breturn: - // [8] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::charset#5 = (byte*) main::charset#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::c#5 = (byte) main::c#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 // main::@2 b2: - // [9] (byte~) main::$10 ← (byte) main::c#2 << (byte) 1 -- vbuxx=vbuz1_rol_1 + // [6] (byte~) main::$10 ← (byte) main::c#5 << (byte) 1 -- vbuxx=vbuz1_rol_1 lda c asl tax - // [10] (byte*) gen_char3::dst#0 ← (byte*) main::charset#2 - // [11] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) -- vwuz1=pwuc1_derefidx_vbuxx + // [7] (byte*) gen_char3::dst#0 ← (byte*) main::charset#5 + // [8] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) -- vwuz1=pwuc1_derefidx_vbuxx lda charset_spec_row,x sta gen_char3.spec lda charset_spec_row+1,x sta gen_char3.spec+1 - // [12] call gen_char3 + // [9] call gen_char3 // [15] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] gen_char3_from_b2: jsr gen_char3 jmp b4 // main::@4 b4: - // [13] (byte*) main::charset#1 ← (byte*) main::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [10] (byte*) main::charset#1 ← (byte*) main::charset#5 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc charset @@ -906,13 +910,26 @@ main: { bcc !+ inc charset+1 !: - // [14] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuz1=_inc_vbuz1 + // [11] (byte) main::c#1 ← ++ (byte) main::c#5 -- vbuz1=_inc_vbuz1 inc c - // [5] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [5] phi (byte*) main::charset#2 = (byte*) main::charset#1 [phi:main::@4->main::@1#0] -- register_copy - // [5] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@4->main::@1#1] -- register_copy jmp b1 + // main::@1 + b1: + // [12] if((byte) main::c#1!=(byte) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #4 + cmp c + bne b2_from_b1 + jmp b3 + // main::@3 + b3: + // [13] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 -- _deref_pbuc1=vbuc2 + lda #SCREEN/$40|CHARSET/$400 + sta VIC_MEMORY + jmp breturn + // main::@return + breturn: + // [14] return + rts } // gen_char3 // Generate one 5x3 character from a 16-bit char spec @@ -1012,10 +1029,11 @@ gen_char3: { ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 +Removing instruction jmp b4 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp breturn -Removing instruction jmp b4 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b4 @@ -1023,6 +1041,7 @@ Removing instruction jmp b3 Removing instruction jmp b5 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Replacing label b3_from_b2 with b3 Replacing label b2_from_b3 with b2 Replacing label b1_from_b5 with b1 @@ -1030,6 +1049,7 @@ Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Removing instruction b1_from_b5: Removing instruction b2_from_b1: Removing instruction b2_from_b3: @@ -1037,12 +1057,12 @@ Removing instruction b3_from_b2: Removing instruction b3_from_b4: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b3: -Removing instruction breturn: +Removing instruction b2_from_main: Removing instruction gen_char3_from_b2: Removing instruction b4: -Removing instruction b1_from_b4: +Removing instruction b1: +Removing instruction b3: +Removing instruction breturn: Removing instruction b1_from_gen_char3: Removing instruction b4: Removing instruction b5: @@ -1051,6 +1071,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b2 Succesful ASM optimization Pass5NextJumpElimination @@ -1104,14 +1125,14 @@ FINAL SYMBOL TABLE (label) main::@4 (label) main::@return (byte) main::c -(byte) main::c#1 c zp ZP_BYTE:2 22.0 -(byte) main::c#2 c zp ZP_BYTE:2 6.285714285714286 +(byte) main::c#1 c zp ZP_BYTE:2 16.5 +(byte) main::c#5 c zp ZP_BYTE:2 5.5 (byte*) main::charset -(byte*) main::charset#1 charset zp ZP_WORD:3 11.0 -(byte*) main::charset#2 charset zp ZP_WORD:3 5.5 +(byte*) main::charset#1 charset zp ZP_WORD:3 7.333333333333333 +(byte*) main::charset#5 charset zp ZP_WORD:3 6.6000000000000005 -zp ZP_BYTE:2 [ main::c#2 main::c#1 ] -zp ZP_WORD:3 [ main::charset#2 main::charset#1 gen_char3::dst#0 ] +zp ZP_BYTE:2 [ main::c#5 main::c#1 ] +zp ZP_WORD:3 [ main::charset#5 main::charset#1 gen_char3::dst#0 ] zp ZP_BYTE:5 [ gen_char3::r#6 gen_char3::r#1 ] zp ZP_WORD:6 [ gen_char3::spec#2 gen_char3::spec#4 gen_char3::spec#0 gen_char3::spec#1 ] reg byte x [ gen_char3::c#2 gen_char3::c#1 ] @@ -1122,7 +1143,7 @@ reg byte a [ gen_char3::$1 ] FINAL ASSEMBLER -Score: 45574 +Score: 45544 // File Comments // Generate a charset based on a 5x3 pattern stored in 2 bytes @@ -1145,50 +1166,37 @@ Score: 45574 main: { .label charset = 3 .label c = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte*) main::charset#2 = (const byte*) CHARSET#0+(byte) 8 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte*) main::charset#5 = (const byte*) CHARSET#0+(byte) 8 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #CHARSET+8 sta charset+1 - // [5] phi (byte) main::c#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::c#5 = (byte) 0 [phi:main->main::@2#1] -- vbuz1=vbuc1 lda #0 sta c - // main::@1 - b1: - // for(byte c=0;c!=4;c++) - // [6] if((byte) main::c#2!=(byte) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 - lda #4 - cmp c - bne b2 - // main::@3 - // *VIC_MEMORY = (byte)(((word)SCREEN/$40)|((word)CHARSET/$400)) - // [7] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 -- _deref_pbuc1=vbuc2 - lda #SCREEN/$40|CHARSET/$400 - sta VIC_MEMORY - // main::@return - // } - // [8] return - rts + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte*) main::charset#5 = (byte*) main::charset#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) main::c#5 = (byte) main::c#1 [phi:main::@1->main::@2#1] -- register_copy // main::@2 b2: // gen_char3(charset, charset_spec_row[c]) - // [9] (byte~) main::$10 ← (byte) main::c#2 << (byte) 1 -- vbuxx=vbuz1_rol_1 + // [6] (byte~) main::$10 ← (byte) main::c#5 << (byte) 1 -- vbuxx=vbuz1_rol_1 lda c asl tax - // [10] (byte*) gen_char3::dst#0 ← (byte*) main::charset#2 - // [11] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) -- vwuz1=pwuc1_derefidx_vbuxx + // [7] (byte*) gen_char3::dst#0 ← (byte*) main::charset#5 + // [8] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte~) main::$10) -- vwuz1=pwuc1_derefidx_vbuxx lda charset_spec_row,x sta gen_char3.spec lda charset_spec_row+1,x sta gen_char3.spec+1 - // [12] call gen_char3 + // [9] call gen_char3 // [15] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] jsr gen_char3 // main::@4 // charset = charset+8 - // [13] (byte*) main::charset#1 ← (byte*) main::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [10] (byte*) main::charset#1 ← (byte*) main::charset#5 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc charset @@ -1197,12 +1205,22 @@ main: { inc charset+1 !: // for(byte c=0;c!=4;c++) - // [14] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuz1=_inc_vbuz1 + // [11] (byte) main::c#1 ← ++ (byte) main::c#5 -- vbuz1=_inc_vbuz1 inc c - // [5] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - // [5] phi (byte*) main::charset#2 = (byte*) main::charset#1 [phi:main::@4->main::@1#0] -- register_copy - // [5] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@4->main::@1#1] -- register_copy - jmp b1 + // main::@1 + // [12] if((byte) main::c#1!=(byte) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #4 + cmp c + bne b2 + // main::@3 + // *VIC_MEMORY = (byte)(((word)SCREEN/$40)|((word)CHARSET/$400)) + // [13] *((const byte*) VIC_MEMORY#0) ← (byte)(word)(const byte*) SCREEN#0/(byte) $40|(word)(const byte*) CHARSET#0/(word) $400 -- _deref_pbuc1=vbuc2 + lda #SCREEN/$40|CHARSET/$400 + sta VIC_MEMORY + // main::@return + // } + // [14] return + rts } // gen_char3 // Generate one 5x3 character from a 16-bit char spec diff --git a/src/test/ref/norom-charset.sym b/src/test/ref/norom-charset.sym index 551214380..183f7322e 100644 --- a/src/test/ref/norom-charset.sym +++ b/src/test/ref/norom-charset.sym @@ -44,14 +44,14 @@ (label) main::@4 (label) main::@return (byte) main::c -(byte) main::c#1 c zp ZP_BYTE:2 22.0 -(byte) main::c#2 c zp ZP_BYTE:2 6.285714285714286 +(byte) main::c#1 c zp ZP_BYTE:2 16.5 +(byte) main::c#5 c zp ZP_BYTE:2 5.5 (byte*) main::charset -(byte*) main::charset#1 charset zp ZP_WORD:3 11.0 -(byte*) main::charset#2 charset zp ZP_WORD:3 5.5 +(byte*) main::charset#1 charset zp ZP_WORD:3 7.333333333333333 +(byte*) main::charset#5 charset zp ZP_WORD:3 6.6000000000000005 -zp ZP_BYTE:2 [ main::c#2 main::c#1 ] -zp ZP_WORD:3 [ main::charset#2 main::charset#1 gen_char3::dst#0 ] +zp ZP_BYTE:2 [ main::c#5 main::c#1 ] +zp ZP_WORD:3 [ main::charset#5 main::charset#1 gen_char3::dst#0 ] zp ZP_BYTE:5 [ gen_char3::r#6 gen_char3::r#1 ] zp ZP_WORD:6 [ gen_char3::spec#2 gen_char3::spec#4 gen_char3::spec#0 gen_char3::spec#1 ] reg byte x [ gen_char3::c#2 gen_char3::c#1 ] diff --git a/src/test/ref/plasma-center.asm b/src/test/ref/plasma-center.asm index 26cb99837..481541dd4 100644 --- a/src/test/ref/plasma-center.asm +++ b/src/test/ref/plasma-center.asm @@ -25,15 +25,15 @@ // Plasma screen 2 .label SCREEN2 = $2c00 .const NUM_SQUARES = $30 - .label heap_head = $18 - .label SQUARES = 9 + .label heap_head = 9 + .label SQUARES = $13 .label print_char_cursor = 7 // Screen containing distance to center .label SCREEN_DIST = $b // Screen containing angle to center .label SCREEN_ANGLE = $d .label sin_offset_x = 2 - .label sin_offset_y = $f + .label sin_offset_y = $11 bbegin: lda #<$3e8 sta malloc.size @@ -105,8 +105,8 @@ main: { doplasma: { .label angle = 3 .label dist = 5 - .label sin_x = $1a - .label sin_y = $10 + .label sin_x = $13 + .label sin_y = $f .label screen = 7 .label y = $12 lda SCREEN_ANGLE @@ -188,7 +188,7 @@ doplasma: { // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. // memset(void* zeropage(3) str, byte register(X) c) memset: { - .label end = $1a + .label end = $f .label dst = 3 .label str = 3 lda str @@ -219,12 +219,12 @@ memset: { // Make a plasma-friendly charset where the chars are randomly filled make_plasma_charset: { .label _7 = $12 - .label _10 = $10 - .label _11 = $10 - .label s = $f + .label _10 = $13 + .label _11 = $13 + .label s = $11 .label i = 2 .label c = 5 - .label _16 = $10 + .label _16 = $13 jsr sid_rnd_init jsr print_cls lda #$100 - bcc b2 - bne !+ - lda c - cmp #<$100 - bcc b2 - !: - rts b2: lda c tay @@ -251,27 +241,23 @@ make_plasma_charset: { sta s lda #0 sta i - b3: - lda i - cmp #8 - bcc b4 - lda c - and #7 - cmp #0 - bne b11 - jsr print_char - b11: - inc c - bne !+ - inc c+1 - !: - jmp b1 b4: ldy #0 ldx #0 - b5: + b7: + jsr sid_rnd + and #$ff + sta _7 + lda s + cmp _7 + bcs b9 + tya + ora bittab,x + tay + b9: + inx cpx #8 - bcc b6 + bcc b7 lda c asl sta _10 @@ -300,27 +286,29 @@ make_plasma_charset: { ldy #0 sta (_16),y inc i - jmp b3 - b6: - jsr sid_rnd - and #$ff - sta _7 - lda s - cmp _7 - bcs b8 - tya - ora bittab,x - tay - b8: - inx - jmp b5 - bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 -} -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -sid_rnd: { - lda SID_VOICE3_OSC + lda i + cmp #8 + bcc b4 + lda c + and #7 + cmp #0 + bne b12 + jsr print_char + b12: + inc c + bne !+ + inc c+1 + !: + lda c+1 + cmp #>$100 + bcc b2 + bne !+ + lda c + cmp #<$100 + bcc b2 + !: rts + bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // Print a single char print_char: { @@ -334,6 +322,12 @@ print_char: { !: rts } +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + lda SID_VOICE3_OSC + rts +} // Clear the screen. Also resets current line/char cursor. print_cls: { ldx #' ' @@ -358,17 +352,17 @@ sid_rnd_init: { // Utilizes symmetry around the center // init_angle_screen(byte* zeropage(5) screen) init_angle_screen: { - .label _11 = $10 + .label _11 = $18 .label screen = 5 .label screen_topline = 3 .label screen_bottomline = 5 - .label xw = $14 + .label xw = $13 .label yw = $16 - .label angle_w = $10 - .label ang_w = $13 + .label angle_w = $18 + .label ang_w = $15 .label x = $12 .label xb = 2 - .label y = $f + .label y = $11 lda screen clc adc #<$28*$c @@ -390,29 +384,6 @@ init_angle_screen: { sta xb lda #0 sta x - b2: - lda x - cmp #$13+1 - bcc b3 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - inc y - lda #$d - cmp y - bne b1 - rts b3: lda x asl @@ -453,22 +424,43 @@ init_angle_screen: { sta (screen_bottomline),y inc x dec xb - jmp b2 + lda x + cmp #$13+1 + bcc b3 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + inc y + lda #$d + cmp y + bne b1 + rts } // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($14) x, signed word zeropage($16) y) +// atan2_16(signed word zeropage($13) x, signed word zeropage($16) y) atan2_16: { .label _2 = 7 - .label _7 = $1a + .label _7 = $f .label yi = 7 - .label xi = $1a - .label angle = $10 + .label xi = $f + .label angle = $18 .label xd = 9 - .label yd = $18 - .label return = $10 - .label x = $14 + .label yd = $1a + .label return = $18 + .label x = $13 .label y = $16 lda y+1 bmi !b1+ @@ -650,12 +642,12 @@ atan2_16: { init_dist_screen: { .label screen = 3 .label screen_bottomline = 5 - .label yds = $14 + .label yds = $16 .label screen_topline = 3 .label y = 2 - .label xds = $16 - .label ds = $16 - .label x = $f + .label xds = $18 + .label ds = $18 + .label x = $11 .label xb = $12 jsr init_squares lda screen @@ -685,29 +677,6 @@ init_dist_screen: { sta xb lda #0 sta x - b5: - lda x - cmp #$13+1 - bcc b6 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - inc y - lda #$d - cmp y - bne b1 - rts b6: lda x asl @@ -734,7 +703,28 @@ init_dist_screen: { sta (screen_bottomline),y inc x dec xb - jmp b5 + lda x + cmp #$13+1 + bcc b6 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + inc y + lda #$d + cmp y + bne b1 + rts b8: sec sbc #$27 @@ -747,16 +737,16 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($16) val) +// sqrt(word zeropage($18) val) sqrt: { - .label _1 = 7 - .label _3 = 7 - .label found = 7 - .label val = $16 + .label _1 = $f + .label _3 = $f + .label found = $f + .label val = $18 lda SQUARES - sta bsearch16u.items + sta bsearch16u.items_1 lda SQUARES+1 - sta bsearch16u.items+1 + sta bsearch16u.items_1+1 jsr bsearch16u lda _3 sec @@ -775,46 +765,27 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($16) key, word* zeropage(7) items, byte register(X) num) +// bsearch16u(word zeropage($18) key, word* zeropage($f) items, byte register(X) num) bsearch16u: { - .label _2 = 7 - .label pivot = $18 + .label _2 = $f + .label pivot = $f .label result = $1a - .label return = 7 - .label items = 7 - .label key = $16 + .label return = $f + .label items = $f + .label key = $18 + .label items_1 = 7 + .label items_10 = 7 + .label items_16 = 7 ldx #NUM_SQUARES - b3: - cpx #0 - bne b4 - ldy #1 - lda (items),y - cmp key+1 - bne !+ - dey - lda (items),y - cmp key - beq b2 - !: - bcc b2 - lda _2 - sec - sbc #<1*SIZEOF_WORD - sta _2 - lda _2+1 - sbc #>1*SIZEOF_WORD - sta _2+1 - b2: - rts b4: txa lsr asl clc - adc items + adc items_10 sta pivot lda #0 - adc items+1 + adc items_10+1 sta pivot+1 sec lda key @@ -828,38 +799,66 @@ bsearch16u: { bne b6 lda result bne b6 - lda pivot - sta return - lda pivot+1 - sta return+1 + breturn: rts b6: lda result+1 - bmi b7 + bmi b10 bne !+ lda result - beq b7 + beq b10 !: lda #1*SIZEOF_WORD clc - adc pivot + adc items sta items - lda #0 - adc pivot+1 - sta items+1 + bcc !+ + inc items+1 + !: dex b7: txa lsr tax - jmp b3 + cpx #0 + bne b9 + ldy #1 + lda (items),y + cmp key+1 + bne !+ + dey + lda (items),y + cmp key + beq breturn + !: + bcc breturn + lda _2 + sec + sbc #<1*SIZEOF_WORD + sta _2 + lda _2+1 + sbc #>1*SIZEOF_WORD + sta _2+1 + rts + b9: + lda items + sta items_16 + lda items+1 + sta items_16+1 + jmp b4 + b10: + lda items_10 + sta items + lda items_10+1 + sta items+1 + jmp b7 } // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $16 - .label return_2 = $14 + .label return = $18 + .label return_2 = $16 asl tay lda (SQUARES),y @@ -872,8 +871,8 @@ sqr: { // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label squares = $10 - .label sqr = $1a + .label squares = $1a + .label sqr = $18 lda #NUM_SQUARES*SIZEOF_WORD @@ -918,10 +917,10 @@ init_squares: { } // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. -// malloc(word zeropage(9) size) +// malloc(word zeropage($13) size) malloc: { - .label mem = 9 - .label size = 9 + .label mem = $13 + .label size = $13 lda heap_head sec sbc mem diff --git a/src/test/ref/plasma-center.cfg b/src/test/ref/plasma-center.cfg index 9f62c7dfb..535e123d6 100644 --- a/src/test/ref/plasma-center.cfg +++ b/src/test/ref/plasma-center.cfg @@ -113,373 +113,377 @@ memset::@3: scope:[memset] from memset::@2 make_plasma_charset: scope:[make_plasma_charset] from main::@6 [52] phi() [53] call sid_rnd_init - to:make_plasma_charset::@12 -make_plasma_charset::@12: scope:[make_plasma_charset] from make_plasma_charset + to:make_plasma_charset::@13 +make_plasma_charset::@13: scope:[make_plasma_charset] from make_plasma_charset [54] phi() [55] call print_cls + to:make_plasma_charset::@2 +make_plasma_charset::@2: scope:[make_plasma_charset] from make_plasma_charset::@1 make_plasma_charset::@13 + [56] (byte*) print_char_cursor#59 ← phi( make_plasma_charset::@1/(byte*) print_char_cursor#18 make_plasma_charset::@13/(const byte*) print_line_cursor#0 ) + [56] (word) make_plasma_charset::c#16 ← phi( make_plasma_charset::@1/(word) make_plasma_charset::c#1 make_plasma_charset::@13/(byte) 0 ) + [57] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#16 + [58] (byte) make_plasma_charset::s#0 ← *((const byte[$200]) SINTABLE#0 + (byte~) make_plasma_charset::$3) + to:make_plasma_charset::@4 +make_plasma_charset::@4: scope:[make_plasma_charset] from make_plasma_charset::@2 make_plasma_charset::@3 + [59] (byte) make_plasma_charset::i#13 ← phi( make_plasma_charset::@3/(byte) make_plasma_charset::i#1 make_plasma_charset::@2/(byte) 0 ) + to:make_plasma_charset::@7 +make_plasma_charset::@7: scope:[make_plasma_charset] from make_plasma_charset::@4 make_plasma_charset::@6 + [60] (byte) make_plasma_charset::b#10 ← phi( make_plasma_charset::@6/(byte) make_plasma_charset::b#2 make_plasma_charset::@4/(byte) 0 ) + [60] (byte) make_plasma_charset::ii#10 ← phi( make_plasma_charset::@6/(byte) make_plasma_charset::ii#1 make_plasma_charset::@4/(byte) 0 ) + [61] call sid_rnd + [62] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + to:make_plasma_charset::@14 +make_plasma_charset::@14: scope:[make_plasma_charset] from make_plasma_charset::@7 + [63] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2 + [64] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff + [65] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@9 + to:make_plasma_charset::@10 +make_plasma_charset::@10: scope:[make_plasma_charset] from make_plasma_charset::@14 + [66] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#10 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#10) + to:make_plasma_charset::@9 +make_plasma_charset::@9: scope:[make_plasma_charset] from make_plasma_charset::@10 make_plasma_charset::@14 + [67] (byte) make_plasma_charset::b#2 ← phi( make_plasma_charset::@10/(byte) make_plasma_charset::b#1 make_plasma_charset::@14/(byte) make_plasma_charset::b#10 ) + [68] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#10 + to:make_plasma_charset::@6 +make_plasma_charset::@6: scope:[make_plasma_charset] from make_plasma_charset::@9 + [69] if((byte) make_plasma_charset::ii#1<(byte) 8) goto make_plasma_charset::@7 + to:make_plasma_charset::@8 +make_plasma_charset::@8: scope:[make_plasma_charset] from make_plasma_charset::@6 + [70] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#16 << (byte) 3 + [71] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#13 + [72] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 + [73] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 + [74] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#13 + to:make_plasma_charset::@3 +make_plasma_charset::@3: scope:[make_plasma_charset] from make_plasma_charset::@8 + [75] if((byte) make_plasma_charset::i#1<(byte) 8) goto make_plasma_charset::@4 + to:make_plasma_charset::@5 +make_plasma_charset::@5: scope:[make_plasma_charset] from make_plasma_charset::@3 + [76] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#16 & (byte) 7 + [77] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@12 + to:make_plasma_charset::@11 +make_plasma_charset::@11: scope:[make_plasma_charset] from make_plasma_charset::@5 + [78] phi() + [79] call print_char + to:make_plasma_charset::@12 +make_plasma_charset::@12: scope:[make_plasma_charset] from make_plasma_charset::@11 make_plasma_charset::@5 + [80] (byte*) print_char_cursor#18 ← phi( make_plasma_charset::@11/(byte*) print_char_cursor#1 make_plasma_charset::@5/(byte*) print_char_cursor#59 ) + [81] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#16 to:make_plasma_charset::@1 -make_plasma_charset::@1: scope:[make_plasma_charset] from make_plasma_charset::@11 make_plasma_charset::@12 - [56] (byte*) print_char_cursor#18 ← phi( make_plasma_charset::@11/(byte*) print_char_cursor#30 make_plasma_charset::@12/(const byte*) print_line_cursor#0 ) - [56] (word) make_plasma_charset::c#2 ← phi( make_plasma_charset::@11/(word) make_plasma_charset::c#1 make_plasma_charset::@12/(byte) 0 ) - [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 +make_plasma_charset::@1: scope:[make_plasma_charset] from make_plasma_charset::@12 + [82] if((word) make_plasma_charset::c#1<(word) $100) goto make_plasma_charset::@2 to:make_plasma_charset::@return make_plasma_charset::@return: scope:[make_plasma_charset] from make_plasma_charset::@1 - [58] return + [83] return to:@return -make_plasma_charset::@2: scope:[make_plasma_charset] from make_plasma_charset::@1 - [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 - [60] (byte) make_plasma_charset::s#0 ← *((const byte[$200]) SINTABLE#0 + (byte~) make_plasma_charset::$3) - to:make_plasma_charset::@3 -make_plasma_charset::@3: scope:[make_plasma_charset] from make_plasma_charset::@2 make_plasma_charset::@7 - [61] (byte) make_plasma_charset::i#2 ← phi( make_plasma_charset::@2/(byte) 0 make_plasma_charset::@7/(byte) make_plasma_charset::i#1 ) - [62] if((byte) make_plasma_charset::i#2<(byte) 8) goto make_plasma_charset::@5 - to:make_plasma_charset::@4 -make_plasma_charset::@4: scope:[make_plasma_charset] from make_plasma_charset::@3 - [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 - [64] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@11 - to:make_plasma_charset::@10 -make_plasma_charset::@10: scope:[make_plasma_charset] from make_plasma_charset::@4 - [65] phi() - [66] call print_char - to:make_plasma_charset::@11 -make_plasma_charset::@11: scope:[make_plasma_charset] from make_plasma_charset::@10 make_plasma_charset::@4 - [67] (byte*) print_char_cursor#30 ← phi( make_plasma_charset::@10/(byte*) print_char_cursor#1 make_plasma_charset::@4/(byte*) print_char_cursor#18 ) - [68] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#2 - to:make_plasma_charset::@1 -make_plasma_charset::@5: scope:[make_plasma_charset] from make_plasma_charset::@3 make_plasma_charset::@8 - [69] (byte) make_plasma_charset::b#2 ← phi( make_plasma_charset::@8/(byte) make_plasma_charset::b#6 make_plasma_charset::@3/(byte) 0 ) - [69] (byte) make_plasma_charset::ii#2 ← phi( make_plasma_charset::@8/(byte) make_plasma_charset::ii#1 make_plasma_charset::@3/(byte) 0 ) - [70] if((byte) make_plasma_charset::ii#2<(byte) 8) goto make_plasma_charset::@6 - to:make_plasma_charset::@7 -make_plasma_charset::@7: scope:[make_plasma_charset] from make_plasma_charset::@5 - [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 - [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 - [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 - [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 - [75] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#2 - to:make_plasma_charset::@3 -make_plasma_charset::@6: scope:[make_plasma_charset] from make_plasma_charset::@5 - [76] phi() - [77] call sid_rnd - [78] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - to:make_plasma_charset::@13 -make_plasma_charset::@13: scope:[make_plasma_charset] from make_plasma_charset::@6 - [79] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2 - [80] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff - [81] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@8 - to:make_plasma_charset::@9 -make_plasma_charset::@9: scope:[make_plasma_charset] from make_plasma_charset::@13 - [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#2) - to:make_plasma_charset::@8 -make_plasma_charset::@8: scope:[make_plasma_charset] from make_plasma_charset::@13 make_plasma_charset::@9 - [83] (byte) make_plasma_charset::b#6 ← phi( make_plasma_charset::@9/(byte) make_plasma_charset::b#1 make_plasma_charset::@13/(byte) make_plasma_charset::b#2 ) - [84] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#2 - to:make_plasma_charset::@5 -sid_rnd: scope:[sid_rnd] from make_plasma_charset::@6 - [85] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) - to:sid_rnd::@return -sid_rnd::@return: scope:[sid_rnd] from sid_rnd - [86] return - to:@return -print_char: scope:[print_char] from make_plasma_charset::@10 - [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 - [88] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 +print_char: scope:[print_char] from make_plasma_charset::@11 + [84] *((byte*) print_char_cursor#59) ← (const byte) print_char::ch#0 + [85] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#59 to:print_char::@return print_char::@return: scope:[print_char] from print_char - [89] return + [86] return to:@return -print_cls: scope:[print_cls] from make_plasma_charset::@12 - [90] phi() - [91] call memset +sid_rnd: scope:[sid_rnd] from make_plasma_charset::@7 + [87] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) + to:sid_rnd::@return +sid_rnd::@return: scope:[sid_rnd] from sid_rnd + [88] return + to:@return +print_cls: scope:[print_cls] from make_plasma_charset::@13 + [89] phi() + [90] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [92] return + [91] return to:@return sid_rnd_init: scope:[sid_rnd_init] from make_plasma_charset - [93] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff - [94] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 + [92] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff + [93] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - [95] return + [94] return to:@return init_angle_screen: scope:[init_angle_screen] from main::@5 - [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c - [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [95] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [96] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c to:init_angle_screen::@1 init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4 - [98] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) - [98] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) - [98] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - to:init_angle_screen::@2 -init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [99] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [99] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 - to:init_angle_screen::@4 -init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 - to:init_angle_screen::@return -init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [105] return - to:@return -init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [113] call atan2_16 - [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + [97] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) + [97] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) + [97] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) + to:init_angle_screen::@3 +init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@2 + [98] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 ) + [98] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 ) + [99] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 + [100] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [101] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [102] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [103] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [104] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [105] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [106] call atan2_16 + [107] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [108] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [109] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [110] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [111] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 + [112] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [113] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 + [114] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 + [116] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [117] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 + [118] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 + [119] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 to:init_angle_screen::@2 +init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@5 + [120] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 + to:init_angle_screen::@4 +init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 + [121] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [122] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [123] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [124] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + to:init_angle_screen::@return +init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 + [125] return + to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@3 - [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 + [126] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 atan2_16::@2: scope:[atan2_16] from atan2_16 - [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + [127] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 to:atan2_16::@3 atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 - [129] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) - [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 + [128] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) + [129] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 to:atan2_16::@5 atan2_16::@5: scope:[atan2_16] from atan2_16::@3 - [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + [130] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 - [132] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) + [131] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [133] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) - [133] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) - [133] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) - [133] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) - [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + [132] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [132] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [132] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) + [132] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) + [133] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 to:atan2_16::@12 atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19 - [135] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) - [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 - [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + [134] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) + [135] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [136] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 to:atan2_16::@21 atan2_16::@21: scope:[atan2_16] from atan2_16::@12 - [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + [137] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 to:atan2_16::@7 atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21 - [139] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) - [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + [138] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) + [139] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 to:atan2_16::@9 atan2_16::@9: scope:[atan2_16] from atan2_16::@7 - [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + [140] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 to:atan2_16::@8 atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 - [142] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + [141] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) to:atan2_16::@return atan2_16::@return: scope:[atan2_16] from atan2_16::@8 - [143] return + [142] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 - [144] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 - [145] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 - [146] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 + [143] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 + [144] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 + [145] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 to:atan2_16::@13 atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14 - [147] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) - [147] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) - [147] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) - [148] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 + [146] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) + [146] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) + [146] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) + [147] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@13 - [149] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 + [148] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 to:atan2_16::@16 atan2_16::@16: scope:[atan2_16] from atan2_16::@15 - [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 - [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 + [149] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 + [150] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 to:atan2_16::@17 atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16 - [152] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) - [152] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) - [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 + [151] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) + [151] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) + [152] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 to:atan2_16::@20 atan2_16::@20: scope:[atan2_16] from atan2_16::@17 - [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 - [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 - [156] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 - [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) + [153] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 + [154] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 + [155] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 + [156] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) to:atan2_16::@19 atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20 - [158] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) - [158] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) - [158] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) - [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 - [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 + [157] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) + [157] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) + [157] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) + [158] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [159] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 to:atan2_16::@10 atan2_16::@18: scope:[atan2_16] from atan2_16::@17 - [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 - [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 - [163] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 - [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) + [160] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 + [161] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 + [162] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [163] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) to:atan2_16::@19 atan2_16::@14: scope:[atan2_16] from atan2_16::@13 - [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 - [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 - [167] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 + [164] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 + [165] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 + [166] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 to:atan2_16::@13 atan2_16::@4: scope:[atan2_16] from atan2_16::@3 - [168] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 + [167] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@1: scope:[atan2_16] from atan2_16 - [169] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 + [168] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 to:atan2_16::@3 init_dist_screen: scope:[init_dist_screen] from main - [170] phi() - [171] call init_squares + [169] phi() + [170] call init_squares to:init_dist_screen::@11 init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen - [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 + [171] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 to:init_dist_screen::@1 init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@7 - [173] (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 ) - [173] (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 ) - [173] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 ) - [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 - [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 + [172] (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 ) + [172] (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 ) + [172] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 ) + [173] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 + [174] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 to:init_dist_screen::@3 init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1 - [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 + [175] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 to:init_dist_screen::@4 init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3 - [177] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) - [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - [179] call sqr - [180] (word) sqr::return#2 ← (word) sqr::return#0 + [176] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) + [177] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + [178] call sqr + [179] (word) sqr::return#2 ← (word) sqr::return#0 to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@4 - [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - to:init_dist_screen::@5 -init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@14 - [182] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 ) - [182] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 ) - [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 - to:init_dist_screen::@7 -init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 - [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 - [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 - [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 - to:init_dist_screen::@return -init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 - [188] return - to:@return -init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 + [180] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + to:init_dist_screen::@6 +init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@5 + [181] (byte) init_dist_screen::xb#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#1 init_dist_screen::@12/(byte) $27 ) + [181] (byte) init_dist_screen::x#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#1 init_dist_screen::@12/(byte) 0 ) + [182] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 + [183] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 - [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [184] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9 - [192] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) - [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [194] call sqr - [195] (word) sqr::return#3 ← (word) sqr::return#0 + [185] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) + [186] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [187] call sqr + [188] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@13 init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@10 - [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [199] call sqrt - [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [189] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [190] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [191] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [192] call sqrt + [193] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@14 init_dist_screen::@14: scope:[init_dist_screen] from init_dist_screen::@13 - [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [194] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [195] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [196] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [199] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 + [200] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 to:init_dist_screen::@5 +init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@14 + [201] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 + to:init_dist_screen::@7 +init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 + [202] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 + [203] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 + [204] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [205] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 + to:init_dist_screen::@return +init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 + [206] return + to:@return init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 - [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 + [207] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@10 init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1 - [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 + [208] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 to:init_dist_screen::@4 sqrt: scope:[sqrt] from init_dist_screen::@13 - [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 - [212] call bsearch16u - [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + [209] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + [210] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 + [211] call bsearch16u + [212] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 to:sqrt::@1 sqrt::@1: scope:[sqrt] from sqrt - [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 - [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 - [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 - [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 + [213] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + [214] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 + [215] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 + [216] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 to:sqrt::@return sqrt::@return: scope:[sqrt] from sqrt::@1 - [218] return + [217] return to:@return bsearch16u: scope:[bsearch16u] from sqrt - [219] phi() - to:bsearch16u::@3 -bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [220] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [220] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 - to:bsearch16u::@5 -bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 - to:bsearch16u::@1 -bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD - to:bsearch16u::@2 -bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 - [224] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [218] phi() + to:bsearch16u::@4 +bsearch16u::@4: scope:[bsearch16u] from bsearch16u bsearch16u::@9 + [219] (word*) bsearch16u::items#10 ← phi( bsearch16u::@9/(word*~) bsearch16u::items#16 bsearch16u/(word*) bsearch16u::items#1 ) + [219] (byte) bsearch16u::num#10 ← phi( bsearch16u::@9/(byte) bsearch16u::num#0 bsearch16u/(const byte) NUM_SQUARES#3 ) + [220] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 + [221] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [222] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 + [223] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [224] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 to:bsearch16u::@return -bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 - [225] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) +bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@4 + [225] (word*) bsearch16u::return#1 ← phi( bsearch16u::@4/(word*) bsearch16u::pivot#0 bsearch16u::@2/(word*) bsearch16u::return#2 ) [226] return to:@return -bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 - to:bsearch16u::@8 -bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [232] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 - to:bsearch16u::@return bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 - to:bsearch16u::@9 -bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 + [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 + to:bsearch16u::@8 +bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@6 + [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [229] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 to:bsearch16u::@7 -bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [236] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [236] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 +bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@10 bsearch16u::@8 + [230] (word*) bsearch16u::items#11 ← phi( bsearch16u::@8/(word*) bsearch16u::items#0 bsearch16u::@10/(word*~) bsearch16u::items#19 ) + [230] (byte) bsearch16u::num#5 ← phi( bsearch16u::@8/(byte) bsearch16u::num#1 bsearch16u::@10/(byte) bsearch16u::num#10 ) + [231] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 to:bsearch16u::@3 +bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@7 + [232] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 + to:bsearch16u::@5 +bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 + [233] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + to:bsearch16u::@1 +bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 + [234] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD + to:bsearch16u::@2 +bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 + [235] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#11 bsearch16u::@1/(word*~) bsearch16u::$2 ) + to:bsearch16u::@return +bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@3 + [236] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 + to:bsearch16u::@4 +bsearch16u::@10: scope:[bsearch16u] from bsearch16u::@6 + [237] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 + to:bsearch16u::@7 sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 [238] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 diff --git a/src/test/ref/plasma-center.log b/src/test/ref/plasma-center.log index 5e1d94443..de0dc3568 100644 --- a/src/test/ref/plasma-center.log +++ b/src/test/ref/plasma-center.log @@ -3676,6 +3676,12 @@ Eliminating unused constant (const word*) SQUARES#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $28 in if((byte) doplasma::x#1!=(number) $28) goto doplasma::@2 Adding number conversion cast (unumber) $1a in if((byte) doplasma::y#1!=(number) $1a) goto doplasma::@1 Adding number conversion cast (unumber) $13+1 in if((byte) init_angle_screen::x#2<(byte) $13+(number) 1) goto init_angle_screen::@3 @@ -3703,9 +3709,81 @@ Finalized unsigned number type (byte) $d Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [34] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD -Constant right-side identified [40] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 -Constant right-side identified [69] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 +Alias (byte) bsearch16u::num#0 = (byte) bsearch16u::num#3 +Alias (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 +Alias (byte) bsearch16u::num#10 = (byte) bsearch16u::num#9 (byte) bsearch16u::num#11 +Alias (word*) bsearch16u::items#10 = (word*) bsearch16u::items#12 +Alias (word*) bsearch16u::items#11 = (word*) bsearch16u::items#14 (word*) bsearch16u::items#13 +Alias (byte) init_angle_screen::x#1 = (byte) init_angle_screen::x#2 +Alias (byte) init_angle_screen::xb#1 = (byte) init_angle_screen::xb#2 +Alias (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#6 +Alias (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#6 +Alias (byte) init_dist_screen::x#1 = (byte) init_dist_screen::x#2 +Alias (byte) init_dist_screen::xb#1 = (byte) init_dist_screen::xb#2 +Alias (byte) init_dist_screen::x#13 = (byte) init_dist_screen::x#9 (byte) init_dist_screen::x#14 +Alias (byte) init_dist_screen::xb#12 = (byte) init_dist_screen::xb#14 (byte) init_dist_screen::xb#13 +Alias (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#11 (byte) init_dist_screen::x#12 +Alias (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#11 (byte) init_dist_screen::xb#9 +Alias (word) make_plasma_charset::c#1 = (word) make_plasma_charset::c#2 +Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#30 +Alias (byte) make_plasma_charset::i#1 = (byte) make_plasma_charset::i#2 +Alias (word) make_plasma_charset::c#18 = (word) make_plasma_charset::c#20 +Alias (byte*) print_char_cursor#58 = (byte*) print_char_cursor#60 +Alias (byte) make_plasma_charset::ii#1 = (byte) make_plasma_charset::ii#2 +Alias (byte) make_plasma_charset::b#2 = (byte) make_plasma_charset::b#6 +Alias (byte) make_plasma_charset::i#11 = (byte) make_plasma_charset::i#12 +Alias (word) make_plasma_charset::c#22 = (word) make_plasma_charset::c#25 +Alias (byte*) print_char_cursor#62 = (byte*) print_char_cursor#64 +Alias (byte) make_plasma_charset::i#14 = (byte) make_plasma_charset::i#15 (byte) make_plasma_charset::i#16 +Alias (byte) make_plasma_charset::ii#10 = (byte) make_plasma_charset::ii#9 (byte) make_plasma_charset::ii#8 +Alias (byte) make_plasma_charset::b#10 = (byte) make_plasma_charset::b#9 (byte) make_plasma_charset::b#11 +Alias (word) make_plasma_charset::c#28 = (word) make_plasma_charset::c#29 (word) make_plasma_charset::c#30 +Alias (byte*) print_char_cursor#66 = (byte*) print_char_cursor#67 (byte*) print_char_cursor#68 +Alias (word) make_plasma_charset::c#17 = (word) make_plasma_charset::c#27 (word) make_plasma_charset::c#24 +Alias (byte*) print_char_cursor#56 = (byte*) print_char_cursor#57 +Alias (word) make_plasma_charset::c#16 = (word) make_plasma_charset::c#21 +Alias (byte*) print_char_cursor#59 = (byte*) print_char_cursor#61 +Alias (byte) make_plasma_charset::i#13 = (byte) make_plasma_charset::i#18 +Alias (word) make_plasma_charset::c#23 = (word) make_plasma_charset::c#26 +Alias (byte*) print_char_cursor#63 = (byte*) print_char_cursor#65 +Successful SSA optimization Pass2AliasElimination +Alias (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#13 +Alias (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#12 +Alias (byte) make_plasma_charset::i#11 = (byte) make_plasma_charset::i#14 +Alias (byte) make_plasma_charset::ii#10 = (byte) make_plasma_charset::ii#7 +Alias (word) make_plasma_charset::c#22 = (word) make_plasma_charset::c#28 +Alias (byte*) print_char_cursor#62 = (byte*) print_char_cursor#66 +Alias (word) make_plasma_charset::c#17 = (word) make_plasma_charset::c#19 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) print_char_cursor#55 (byte*) print_char_cursor#56 +Identical Phi Values (byte) make_plasma_charset::i#11 (byte) make_plasma_charset::i#13 +Identical Phi Values (word) make_plasma_charset::c#22 (word) make_plasma_charset::c#23 +Identical Phi Values (byte*) print_char_cursor#62 (byte*) print_char_cursor#63 +Identical Phi Values (byte) bsearch16u::num#12 (const byte) bsearch16u::num#2 +Identical Phi Values (word*) bsearch16u::items#15 (word*) bsearch16u::items#1 +Identical Phi Values (byte) init_angle_screen::x#7 (const byte) init_angle_screen::x#0 +Identical Phi Values (byte) init_angle_screen::xb#7 (const byte) init_angle_screen::xb#0 +Identical Phi Values (byte) init_dist_screen::x#15 (const byte) init_dist_screen::x#0 +Identical Phi Values (byte) init_dist_screen::xb#15 (const byte) init_dist_screen::xb#0 +Identical Phi Values (byte) make_plasma_charset::i#17 (const byte) make_plasma_charset::i#0 +Identical Phi Values (byte) make_plasma_charset::ii#11 (const byte) make_plasma_charset::ii#0 +Identical Phi Values (byte) make_plasma_charset::b#12 (const byte) make_plasma_charset::b#0 +Identical Phi Values (word) make_plasma_charset::c#31 (const word) make_plasma_charset::c#0 +Identical Phi Values (byte*) print_char_cursor#69 (const byte*) print_line_cursor#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) make_plasma_charset::i#10 (byte) make_plasma_charset::i#13 +Identical Phi Values (word) make_plasma_charset::c#18 (word) make_plasma_charset::c#23 +Identical Phi Values (byte*) print_char_cursor#58 (byte*) print_char_cursor#63 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (word) make_plasma_charset::c#23 (word) make_plasma_charset::c#16 +Identical Phi Values (byte*) print_char_cursor#63 (byte*) print_char_cursor#59 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (word) make_plasma_charset::c#17 (word) make_plasma_charset::c#16 +Identical Phi Values (byte*) print_char_cursor#56 (byte*) print_char_cursor#59 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [40] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD +Constant right-side identified [46] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 +Constant right-side identified [75] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD Constant (const byte) init_squares::$2 = NUM_SQUARES#3-1 @@ -3717,10 +3795,19 @@ Constant (const word) main::toD0181_$4#0 = (word)main::toD0181_gfx#0 Constant (const word) main::toD0182_$0#0 = (word)main::toD0182_screen#0 Constant (const word) main::toD0182_$4#0 = (word)main::toD0182_gfx#0 Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [47] init_squares::i#1 ← ++ init_squares::i#2 to ++ -Resolved ranged comparison value [48] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 -Resolved ranged next value [94] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ -Resolved ranged comparison value [95] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 +Removing PHI-reference to removed block (bsearch16u::@6_1) in block bsearch16u::@8 +if() condition always true - replacing block destination [299] if((const byte) bsearch16u::num#2>(byte) 0) goto bsearch16u::@7 +if() condition always true - replacing block destination [301] if((const byte) init_angle_screen::x#0<(byte) $13+(byte) 1) goto init_angle_screen::@3 +if() condition always true - replacing block destination [303] if((const byte) init_dist_screen::x#0<(byte) $13+(byte) 1) goto init_dist_screen::@6 +if() condition always true - replacing block destination [305] if((const byte) make_plasma_charset::i#0<(byte) 8) goto make_plasma_charset::@5 +Removing PHI-reference to removed block (make_plasma_charset::@7_1) in block make_plasma_charset::@9 +if() condition always true - replacing block destination [307] if((const byte) make_plasma_charset::ii#0<(byte) 8) goto make_plasma_charset::@8 +if() condition always true - replacing block destination [309] if((const word) make_plasma_charset::c#0<(word) $100) goto make_plasma_charset::@2 +Successful SSA optimization Pass2ConstantIfs +Resolved ranged next value [53] init_squares::i#1 ← ++ init_squares::i#2 to ++ +Resolved ranged comparison value [54] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 +Resolved ranged next value [100] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ +Resolved ranged comparison value [101] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 Adding number conversion cast (unumber) init_squares::$2+1 in if((byte) init_squares::i#1!=(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) 1 in if((byte) init_squares::i#1!=(unumber)(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) atan2_16::$16+1 in if((byte) atan2_16::i#1==(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17 @@ -3734,10 +3821,13 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [125] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff -Constant right-side identified [128] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 -Constant right-side identified [134] (word~) main::toD0182_$1#0 ← (const word) main::toD0182_$0#0 & (word) $3fff -Constant right-side identified [137] (byte~) main::toD0182_$5#0 ← > (const word) main::toD0182_$4#0 +Alias (word*) bsearch16u::items#11 = (word*) bsearch16u::items#2 +Alias (byte) make_plasma_charset::b#2 = (byte) make_plasma_charset::b#8 +Successful SSA optimization Pass2AliasElimination +Constant right-side identified [126] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff +Constant right-side identified [129] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 +Constant right-side identified [135] (word~) main::toD0182_$1#0 ← (const word) main::toD0182_$0#0 & (word) $3fff +Constant right-side identified [138] (byte~) main::toD0182_$5#0 ← > (const word) main::toD0182_$4#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&$3fff Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0 @@ -3793,11 +3883,11 @@ Rewriting division to use shift [58] (word~) sqrt::$1 ← (word~) sqrt::$3 / (co Rewriting division to use shift [70] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2 Rewriting multiplication to use shift [84] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD Rewriting multiplication to use shift [88] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [152] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [152] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 * (byte) 2 Rewriting multiplication to use shift [156] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 * (byte) 2 Rewriting multiplication to use shift [183] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2 -Rewriting multiplication to use shift [194] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 * (byte) 2 -Rewriting multiplication to use shift [236] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 * (byte) 8 +Rewriting multiplication to use shift [194] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 * (byte) 2 +Rewriting multiplication to use shift [236] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#16 * (byte) 8 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte) memset::c#0 Inlining constant with var siblings (const word) memset::num#0 @@ -3889,7 +3979,8 @@ Identical Phi Values (word) memset::num#2 (word) $3e8 Successful SSA optimization Pass2IdenticalPhiElimination if() condition always false - eliminating [1] if((word) $3e8<=(byte) 0) goto memset::@1 Successful SSA optimization Pass2ConstantIfs -Added new block during phi lifting bsearch16u::@18(between bsearch16u::@9 and bsearch16u::@10) +Added new block during phi lifting bsearch16u::@18(between bsearch16u::@6 and bsearch16u::@7) +Added new block during phi lifting bsearch16u::@19(between bsearch16u::@9 and bsearch16u::@10) Added new block during phi lifting init_squares::@4(between init_squares::@1 and init_squares::@1) Added new block during phi lifting atan2_16::@34(between atan2_16::@27 and atan2_16::@15) Added new block during phi lifting atan2_16::@35(between atan2_16::@15 and atan2_16::@17) @@ -3900,9 +3991,14 @@ Added new block during phi lifting atan2_16::@39(between atan2_16::@7 and atan2_ Added new block during phi lifting doplasma::@5(between doplasma::@3 and doplasma::@1) Added new block during phi lifting doplasma::@6(between doplasma::@2 and doplasma::@2) Added new block during phi lifting init_angle_screen::@10(between init_angle_screen::@4 and init_angle_screen::@1) +Added new block during phi lifting init_angle_screen::@11(between init_angle_screen::@2 and init_angle_screen::@3) Added new block during phi lifting init_dist_screen::@23(between init_dist_screen::@7 and init_dist_screen::@1) -Added new block during phi lifting make_plasma_charset::@27(between make_plasma_charset::@25 and make_plasma_charset::@10) -Added new block during phi lifting make_plasma_charset::@28(between make_plasma_charset::@6 and make_plasma_charset::@19) +Added new block during phi lifting init_dist_screen::@24(between init_dist_screen::@5 and init_dist_screen::@6) +Added new block during phi lifting make_plasma_charset::@27(between make_plasma_charset::@1 and make_plasma_charset::@2) +Added new block during phi lifting make_plasma_charset::@28(between make_plasma_charset::@4 and make_plasma_charset::@5) +Added new block during phi lifting make_plasma_charset::@29(between make_plasma_charset::@7 and make_plasma_charset::@8) +Added new block during phi lifting make_plasma_charset::@30(between make_plasma_charset::@25 and make_plasma_charset::@10) +Added new block during phi lifting make_plasma_charset::@31(between make_plasma_charset::@6 and make_plasma_charset::@19) Adding NOP phi() at start of @begin Adding NOP phi() at start of @8 Adding NOP phi() at start of @16 @@ -3927,21 +4023,25 @@ Adding NOP phi() at start of memset::@1 Adding NOP phi() at start of make_plasma_charset Adding NOP phi() at start of make_plasma_charset::@23 Adding NOP phi() at start of make_plasma_charset::@24 +Adding NOP phi() at start of make_plasma_charset::@1_1 +Adding NOP phi() at start of make_plasma_charset::@4_1 +Adding NOP phi() at start of make_plasma_charset::@7_1 Adding NOP phi() at start of make_plasma_charset::@18 -Adding NOP phi() at start of make_plasma_charset::@5 -Adding NOP phi() at start of make_plasma_charset::@8 Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 +Adding NOP phi() at start of init_angle_screen::@2_1 Adding NOP phi() at start of init_dist_screen +Adding NOP phi() at start of init_dist_screen::@5_1 +Adding NOP phi() at start of bsearch16u CALL GRAPH Calls in [] to malloc:7 malloc:10 main:14 Calls in [main] to init_dist_screen:18 init_angle_screen:20 make_plasma_charset:22 memset:24 doplasma:29 doplasma:36 -Calls in [make_plasma_charset] to sid_rnd_init:81 print_cls:83 print_char:95 sid_rnd:112 -Calls in [print_cls] to memset:130 -Calls in [init_angle_screen] to atan2_16:158 -Calls in [init_dist_screen] to init_squares:245 sqr:257 sqr:277 sqrt:282 -Calls in [sqrt] to bsearch16u:299 -Calls in [init_squares] to malloc:339 +Calls in [make_plasma_charset] to sid_rnd_init:81 print_cls:83 sid_rnd:93 print_char:112 +Calls in [print_cls] to memset:131 +Calls in [init_angle_screen] to atan2_16:151 +Calls in [init_dist_screen] to init_squares:247 sqr:259 sqr:271 sqrt:276 +Calls in [sqrt] to bsearch16u:302 +Calls in [init_squares] to malloc:343 Created 61 initial phi equivalence classes Coalesced [9] heap_head#60 ← heap_head#1 @@ -3960,84 +4060,84 @@ Coalesced [67] doplasma::screen#8 ← doplasma::screen#2 Coalesced [68] doplasma::y#5 ← doplasma::y#1 Coalesced [69] doplasma::x#3 ← doplasma::x#1 Coalesced [79] memset::dst#5 ← memset::dst#1 -Coalesced [96] print_char_cursor#56 ← print_char_cursor#1 -Coalesced [99] make_plasma_charset::c#16 ← make_plasma_charset::c#1 -Coalesced [100] print_char_cursor#55 ← print_char_cursor#30 -Coalesced (already) [101] print_char_cursor#57 ← print_char_cursor#18 -Coalesced [110] make_plasma_charset::i#10 ← make_plasma_charset::i#1 -Coalesced [118] make_plasma_charset::b#9 ← make_plasma_charset::b#1 -Coalesced [121] make_plasma_charset::ii#7 ← make_plasma_charset::ii#1 -Coalesced [122] make_plasma_charset::b#8 ← make_plasma_charset::b#6 -Coalesced (already) [123] make_plasma_charset::b#10 ← make_plasma_charset::b#2 -Coalesced [138] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#0 -Coalesced [139] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#0 -Coalesced [148] init_angle_screen::y#7 ← init_angle_screen::y#1 -Coalesced [149] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1 -Coalesced [150] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1 -Coalesced [172] init_angle_screen::x#5 ← init_angle_screen::x#1 -Coalesced [173] init_angle_screen::xb#5 ← init_angle_screen::xb#1 -Coalesced [176] atan2_16::yi#17 ← atan2_16::$2 -Coalesced [180] atan2_16::xi#14 ← atan2_16::$7 -Coalesced [182] atan2_16::yi#19 ← atan2_16::yi#0 -Coalesced [183] atan2_16::xi#16 ← atan2_16::xi#0 -Coalesced [186] atan2_16::angle#22 ← atan2_16::angle#12 -Coalesced [191] atan2_16::angle#27 ← atan2_16::angle#4 -Coalesced [195] atan2_16::return#5 ← atan2_16::angle#5 -Coalesced [198] atan2_16::return#6 ← atan2_16::angle#11 -Coalesced [199] atan2_16::angle#26 ← atan2_16::angle#1 -Not coalescing [200] atan2_16::shift#5 ← atan2_16::i#2 -Not coalescing [201] atan2_16::xd#10 ← atan2_16::xi#3 -Not coalescing [202] atan2_16::yd#10 ← atan2_16::yi#3 -Coalesced [208] atan2_16::yd#13 ← atan2_16::yd#2 -Coalesced [209] atan2_16::xd#13 ← atan2_16::xd#2 -Coalesced [216] atan2_16::yi#21 ← atan2_16::yi#2 -Coalesced [217] atan2_16::angle#25 ← atan2_16::angle#3 -Coalesced [218] atan2_16::xi#18 ← atan2_16::xi#2 -Coalesced [222] atan2_16::yi#18 ← atan2_16::yi#8 -Coalesced [223] atan2_16::xi#15 ← atan2_16::xi#8 -Coalesced [224] atan2_16::i#12 ← atan2_16::i#1 -Coalesced [225] atan2_16::angle#21 ← atan2_16::angle#13 -Coalesced (already) [226] atan2_16::angle#23 ← atan2_16::angle#13 -Coalesced [231] atan2_16::yi#20 ← atan2_16::yi#1 -Coalesced [232] atan2_16::angle#24 ← atan2_16::angle#2 -Coalesced [233] atan2_16::xi#17 ← atan2_16::xi#1 -Coalesced [234] atan2_16::yd#12 ← atan2_16::yd#3 -Coalesced [235] atan2_16::xd#12 ← atan2_16::xd#3 -Coalesced [239] atan2_16::shift#6 ← atan2_16::shift#1 -Coalesced [240] atan2_16::xd#11 ← atan2_16::xd#1 -Coalesced [241] atan2_16::yd#11 ← atan2_16::yd#1 -Not coalescing [242] atan2_16::xi#13 ← atan2_16::x#0 -Not coalescing [243] atan2_16::yi#16 ← atan2_16::y#0 -Coalesced [247] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0 -Coalesced [248] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0 -Coalesced [253] init_dist_screen::yd#2 ← init_dist_screen::$5 -Coalesced [256] sqr::val#4 ← sqr::val#0 -Coalesced [267] init_dist_screen::y#15 ← init_dist_screen::y#1 -Coalesced [268] init_dist_screen::screen_topline#16 ← init_dist_screen::screen_topline#1 -Coalesced [269] init_dist_screen::screen_bottomline#16 ← init_dist_screen::screen_bottomline#1 -Coalesced [273] init_dist_screen::xd#2 ← init_dist_screen::$14 -Coalesced [276] sqr::val#3 ← sqr::val#1 -Coalesced [291] init_dist_screen::x#9 ← init_dist_screen::x#1 -Coalesced [292] init_dist_screen::xb#9 ← init_dist_screen::xb#1 -Coalesced [294] init_dist_screen::xd#1 ← init_dist_screen::$16 -Coalesced [296] init_dist_screen::yd#1 ← init_dist_screen::$7 -Coalesced [306] bsearch16u::items#10 ← bsearch16u::items#1 -Coalesced [311] bsearch16u::return#9 ← bsearch16u::$2 -Coalesced [313] bsearch16u::return#7 ← bsearch16u::return#2 -Coalesced [316] bsearch16u::return#8 ← bsearch16u::items#2 -Not coalescing [322] bsearch16u::return#6 ← bsearch16u::pivot#0 -Coalesced [326] bsearch16u::num#10 ← bsearch16u::num#1 -Coalesced [327] bsearch16u::items#12 ← bsearch16u::items#0 -Coalesced [330] bsearch16u::num#9 ← bsearch16u::num#0 -Coalesced [331] bsearch16u::items#11 ← bsearch16u::items#8 -Coalesced [332] bsearch16u::num#11 ← bsearch16u::num#3 -Coalesced (already) [333] bsearch16u::items#13 ← bsearch16u::items#2 -Coalesced (already) [338] heap_head#61 ← heap_head#1 -Coalesced [342] init_squares::squares#4 ← init_squares::squares#0 -Coalesced [352] init_squares::sqr#3 ← init_squares::sqr#1 -Coalesced [353] init_squares::squares#3 ← init_squares::squares#1 -Coalesced [354] init_squares::i#3 ← init_squares::i#1 -Not coalescing [357] heap_head#1 ← malloc::mem#0 +Coalesced [99] make_plasma_charset::b#14 ← make_plasma_charset::b#1 +Coalesced [113] print_char_cursor#71 ← print_char_cursor#1 +Coalesced [118] make_plasma_charset::c#32 ← make_plasma_charset::c#1 +Coalesced [119] print_char_cursor#70 ← print_char_cursor#18 +Coalesced (already) [120] print_char_cursor#72 ← print_char_cursor#59 +Coalesced [121] make_plasma_charset::i#19 ← make_plasma_charset::i#1 +Coalesced [122] make_plasma_charset::ii#12 ← make_plasma_charset::ii#1 +Coalesced [123] make_plasma_charset::b#13 ← make_plasma_charset::b#2 +Coalesced (already) [124] make_plasma_charset::b#15 ← make_plasma_charset::b#10 +Coalesced [139] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#0 +Coalesced [140] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#0 +Coalesced [171] init_angle_screen::y#7 ← init_angle_screen::y#1 +Coalesced [172] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1 +Coalesced [173] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1 +Coalesced [174] init_angle_screen::x#8 ← init_angle_screen::x#1 +Coalesced [175] init_angle_screen::xb#8 ← init_angle_screen::xb#1 +Coalesced [178] atan2_16::yi#17 ← atan2_16::$2 +Coalesced [182] atan2_16::xi#14 ← atan2_16::$7 +Coalesced [184] atan2_16::yi#19 ← atan2_16::yi#0 +Coalesced [185] atan2_16::xi#16 ← atan2_16::xi#0 +Coalesced [188] atan2_16::angle#22 ← atan2_16::angle#12 +Coalesced [193] atan2_16::angle#27 ← atan2_16::angle#4 +Coalesced [197] atan2_16::return#5 ← atan2_16::angle#5 +Coalesced [200] atan2_16::return#6 ← atan2_16::angle#11 +Coalesced [201] atan2_16::angle#26 ← atan2_16::angle#1 +Not coalescing [202] atan2_16::shift#5 ← atan2_16::i#2 +Not coalescing [203] atan2_16::xd#10 ← atan2_16::xi#3 +Not coalescing [204] atan2_16::yd#10 ← atan2_16::yi#3 +Coalesced [210] atan2_16::yd#13 ← atan2_16::yd#2 +Coalesced [211] atan2_16::xd#13 ← atan2_16::xd#2 +Coalesced [218] atan2_16::yi#21 ← atan2_16::yi#2 +Coalesced [219] atan2_16::angle#25 ← atan2_16::angle#3 +Coalesced [220] atan2_16::xi#18 ← atan2_16::xi#2 +Coalesced [224] atan2_16::yi#18 ← atan2_16::yi#8 +Coalesced [225] atan2_16::xi#15 ← atan2_16::xi#8 +Coalesced [226] atan2_16::i#12 ← atan2_16::i#1 +Coalesced [227] atan2_16::angle#21 ← atan2_16::angle#13 +Coalesced (already) [228] atan2_16::angle#23 ← atan2_16::angle#13 +Coalesced [233] atan2_16::yi#20 ← atan2_16::yi#1 +Coalesced [234] atan2_16::angle#24 ← atan2_16::angle#2 +Coalesced [235] atan2_16::xi#17 ← atan2_16::xi#1 +Coalesced [236] atan2_16::yd#12 ← atan2_16::yd#3 +Coalesced [237] atan2_16::xd#12 ← atan2_16::xd#3 +Coalesced [241] atan2_16::shift#6 ← atan2_16::shift#1 +Coalesced [242] atan2_16::xd#11 ← atan2_16::xd#1 +Coalesced [243] atan2_16::yd#11 ← atan2_16::yd#1 +Not coalescing [244] atan2_16::xi#13 ← atan2_16::x#0 +Not coalescing [245] atan2_16::yi#16 ← atan2_16::y#0 +Coalesced [249] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0 +Coalesced [250] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0 +Coalesced [255] init_dist_screen::yd#2 ← init_dist_screen::$5 +Coalesced [258] sqr::val#4 ← sqr::val#0 +Coalesced [267] init_dist_screen::xd#2 ← init_dist_screen::$14 +Coalesced [270] sqr::val#3 ← sqr::val#1 +Coalesced [291] init_dist_screen::y#15 ← init_dist_screen::y#1 +Coalesced [292] init_dist_screen::screen_topline#16 ← init_dist_screen::screen_topline#1 +Coalesced [293] init_dist_screen::screen_bottomline#16 ← init_dist_screen::screen_bottomline#1 +Coalesced [294] init_dist_screen::x#16 ← init_dist_screen::x#1 +Coalesced [295] init_dist_screen::xb#16 ← init_dist_screen::xb#1 +Coalesced [297] init_dist_screen::xd#1 ← init_dist_screen::$16 +Coalesced [299] init_dist_screen::yd#1 ← init_dist_screen::$7 +Coalesced [310] bsearch16u::items#17 ← bsearch16u::items#1 +Coalesced [317] bsearch16u::return#6 ← bsearch16u::pivot#0 +Coalesced [323] bsearch16u::num#14 ← bsearch16u::num#1 +Coalesced [324] bsearch16u::items#18 ← bsearch16u::items#0 +Coalesced [330] bsearch16u::return#9 ← bsearch16u::$2 +Coalesced [332] bsearch16u::return#7 ← bsearch16u::return#2 +Coalesced [333] bsearch16u::return#8 ← bsearch16u::items#11 +Coalesced [334] bsearch16u::num#13 ← bsearch16u::num#0 +Not coalescing [335] bsearch16u::items#16 ← bsearch16u::items#11 +Coalesced [336] bsearch16u::num#15 ← bsearch16u::num#10 +Not coalescing [337] bsearch16u::items#19 ← bsearch16u::items#10 +Coalesced (already) [342] heap_head#61 ← heap_head#1 +Coalesced [346] init_squares::squares#4 ← init_squares::squares#0 +Coalesced [356] init_squares::sqr#3 ← init_squares::sqr#1 +Coalesced [357] init_squares::squares#3 ← init_squares::squares#1 +Coalesced [358] init_squares::i#3 ← init_squares::i#1 +Not coalescing [361] heap_head#1 ← malloc::mem#0 Coalesced down to 47 phi equivalence classes Culled Empty Block (label) @8 Culled Empty Block (label) @16 @@ -4055,21 +4155,31 @@ Culled Empty Block (label) doplasma::@5 Culled Empty Block (label) doplasma::@6 Culled Empty Block (label) memset::@1 Culled Empty Block (label) make_plasma_charset::@24 +Culled Empty Block (label) make_plasma_charset::@1_1 +Culled Empty Block (label) make_plasma_charset::@4_1 +Culled Empty Block (label) make_plasma_charset::@7_1 Culled Empty Block (label) make_plasma_charset::@26 -Culled Empty Block (label) make_plasma_charset::@28 -Culled Empty Block (label) make_plasma_charset::@5 Culled Empty Block (label) make_plasma_charset::@27 +Culled Empty Block (label) make_plasma_charset::@31 +Culled Empty Block (label) make_plasma_charset::@28 +Culled Empty Block (label) make_plasma_charset::@29 +Culled Empty Block (label) make_plasma_charset::@30 Culled Empty Block (label) print_cls::@1 +Culled Empty Block (label) init_angle_screen::@2_1 Culled Empty Block (label) init_angle_screen::@10 +Culled Empty Block (label) init_angle_screen::@11 Culled Empty Block (label) atan2_16::@35 Culled Empty Block (label) atan2_16::@39 Culled Empty Block (label) atan2_16::@38 Culled Empty Block (label) atan2_16::@34 Culled Empty Block (label) atan2_16::@36 Culled Empty Block (label) atan2_16::@37 +Culled Empty Block (label) init_dist_screen::@5_1 Culled Empty Block (label) init_dist_screen::@23 +Culled Empty Block (label) init_dist_screen::@24 +Culled Empty Block (label) bsearch16u::@6_1 +Culled Empty Block (label) bsearch16u::@13 Culled Empty Block (label) bsearch16u::@1 -Culled Empty Block (label) bsearch16u::@18 Culled Empty Block (label) init_squares::@4 Renumbering block @47 to @1 Renumbering block @52 to @2 @@ -4085,8 +4195,9 @@ Renumbering block bsearch16u::@7 to bsearch16u::@4 Renumbering block bsearch16u::@8 to bsearch16u::@5 Renumbering block bsearch16u::@9 to bsearch16u::@6 Renumbering block bsearch16u::@10 to bsearch16u::@7 -Renumbering block bsearch16u::@13 to bsearch16u::@8 -Renumbering block bsearch16u::@15 to bsearch16u::@9 +Renumbering block bsearch16u::@15 to bsearch16u::@8 +Renumbering block bsearch16u::@18 to bsearch16u::@9 +Renumbering block bsearch16u::@19 to bsearch16u::@10 Renumbering block init_squares::@3 to init_squares::@2 Renumbering block sqrt::@2 to sqrt::@1 Renumbering block atan2_16::@13 to atan2_16::@9 @@ -4113,16 +4224,17 @@ Renumbering block init_dist_screen::@20 to init_dist_screen::@12 Renumbering block init_dist_screen::@21 to init_dist_screen::@13 Renumbering block init_dist_screen::@22 to init_dist_screen::@14 Renumbering block make_plasma_charset::@4 to make_plasma_charset::@3 -Renumbering block make_plasma_charset::@6 to make_plasma_charset::@4 -Renumbering block make_plasma_charset::@7 to make_plasma_charset::@5 -Renumbering block make_plasma_charset::@8 to make_plasma_charset::@6 -Renumbering block make_plasma_charset::@9 to make_plasma_charset::@7 -Renumbering block make_plasma_charset::@10 to make_plasma_charset::@8 -Renumbering block make_plasma_charset::@13 to make_plasma_charset::@9 -Renumbering block make_plasma_charset::@18 to make_plasma_charset::@10 -Renumbering block make_plasma_charset::@19 to make_plasma_charset::@11 -Renumbering block make_plasma_charset::@23 to make_plasma_charset::@12 -Renumbering block make_plasma_charset::@25 to make_plasma_charset::@13 +Renumbering block make_plasma_charset::@5 to make_plasma_charset::@4 +Renumbering block make_plasma_charset::@6 to make_plasma_charset::@5 +Renumbering block make_plasma_charset::@7 to make_plasma_charset::@6 +Renumbering block make_plasma_charset::@8 to make_plasma_charset::@7 +Renumbering block make_plasma_charset::@9 to make_plasma_charset::@8 +Renumbering block make_plasma_charset::@10 to make_plasma_charset::@9 +Renumbering block make_plasma_charset::@13 to make_plasma_charset::@10 +Renumbering block make_plasma_charset::@18 to make_plasma_charset::@11 +Renumbering block make_plasma_charset::@19 to make_plasma_charset::@12 +Renumbering block make_plasma_charset::@23 to make_plasma_charset::@13 +Renumbering block make_plasma_charset::@25 to make_plasma_charset::@14 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 @@ -4133,9 +4245,8 @@ Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::toD0181 Adding NOP phi() at start of main::toD0182 Adding NOP phi() at start of make_plasma_charset -Adding NOP phi() at start of make_plasma_charset::@12 -Adding NOP phi() at start of make_plasma_charset::@10 -Adding NOP phi() at start of make_plasma_charset::@6 +Adding NOP phi() at start of make_plasma_charset::@13 +Adding NOP phi() at start of make_plasma_charset::@11 Adding NOP phi() at start of print_cls Adding NOP phi() at start of init_dist_screen Adding NOP phi() at start of bsearch16u @@ -4257,373 +4368,377 @@ memset::@3: scope:[memset] from memset::@2 make_plasma_charset: scope:[make_plasma_charset] from main::@6 [52] phi() [53] call sid_rnd_init - to:make_plasma_charset::@12 -make_plasma_charset::@12: scope:[make_plasma_charset] from make_plasma_charset + to:make_plasma_charset::@13 +make_plasma_charset::@13: scope:[make_plasma_charset] from make_plasma_charset [54] phi() [55] call print_cls + to:make_plasma_charset::@2 +make_plasma_charset::@2: scope:[make_plasma_charset] from make_plasma_charset::@1 make_plasma_charset::@13 + [56] (byte*) print_char_cursor#59 ← phi( make_plasma_charset::@1/(byte*) print_char_cursor#18 make_plasma_charset::@13/(const byte*) print_line_cursor#0 ) + [56] (word) make_plasma_charset::c#16 ← phi( make_plasma_charset::@1/(word) make_plasma_charset::c#1 make_plasma_charset::@13/(byte) 0 ) + [57] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#16 + [58] (byte) make_plasma_charset::s#0 ← *((const byte[$200]) SINTABLE#0 + (byte~) make_plasma_charset::$3) + to:make_plasma_charset::@4 +make_plasma_charset::@4: scope:[make_plasma_charset] from make_plasma_charset::@2 make_plasma_charset::@3 + [59] (byte) make_plasma_charset::i#13 ← phi( make_plasma_charset::@3/(byte) make_plasma_charset::i#1 make_plasma_charset::@2/(byte) 0 ) + to:make_plasma_charset::@7 +make_plasma_charset::@7: scope:[make_plasma_charset] from make_plasma_charset::@4 make_plasma_charset::@6 + [60] (byte) make_plasma_charset::b#10 ← phi( make_plasma_charset::@6/(byte) make_plasma_charset::b#2 make_plasma_charset::@4/(byte) 0 ) + [60] (byte) make_plasma_charset::ii#10 ← phi( make_plasma_charset::@6/(byte) make_plasma_charset::ii#1 make_plasma_charset::@4/(byte) 0 ) + [61] call sid_rnd + [62] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + to:make_plasma_charset::@14 +make_plasma_charset::@14: scope:[make_plasma_charset] from make_plasma_charset::@7 + [63] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2 + [64] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff + [65] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@9 + to:make_plasma_charset::@10 +make_plasma_charset::@10: scope:[make_plasma_charset] from make_plasma_charset::@14 + [66] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#10 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#10) + to:make_plasma_charset::@9 +make_plasma_charset::@9: scope:[make_plasma_charset] from make_plasma_charset::@10 make_plasma_charset::@14 + [67] (byte) make_plasma_charset::b#2 ← phi( make_plasma_charset::@10/(byte) make_plasma_charset::b#1 make_plasma_charset::@14/(byte) make_plasma_charset::b#10 ) + [68] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#10 + to:make_plasma_charset::@6 +make_plasma_charset::@6: scope:[make_plasma_charset] from make_plasma_charset::@9 + [69] if((byte) make_plasma_charset::ii#1<(byte) 8) goto make_plasma_charset::@7 + to:make_plasma_charset::@8 +make_plasma_charset::@8: scope:[make_plasma_charset] from make_plasma_charset::@6 + [70] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#16 << (byte) 3 + [71] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#13 + [72] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 + [73] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 + [74] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#13 + to:make_plasma_charset::@3 +make_plasma_charset::@3: scope:[make_plasma_charset] from make_plasma_charset::@8 + [75] if((byte) make_plasma_charset::i#1<(byte) 8) goto make_plasma_charset::@4 + to:make_plasma_charset::@5 +make_plasma_charset::@5: scope:[make_plasma_charset] from make_plasma_charset::@3 + [76] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#16 & (byte) 7 + [77] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@12 + to:make_plasma_charset::@11 +make_plasma_charset::@11: scope:[make_plasma_charset] from make_plasma_charset::@5 + [78] phi() + [79] call print_char + to:make_plasma_charset::@12 +make_plasma_charset::@12: scope:[make_plasma_charset] from make_plasma_charset::@11 make_plasma_charset::@5 + [80] (byte*) print_char_cursor#18 ← phi( make_plasma_charset::@11/(byte*) print_char_cursor#1 make_plasma_charset::@5/(byte*) print_char_cursor#59 ) + [81] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#16 to:make_plasma_charset::@1 -make_plasma_charset::@1: scope:[make_plasma_charset] from make_plasma_charset::@11 make_plasma_charset::@12 - [56] (byte*) print_char_cursor#18 ← phi( make_plasma_charset::@11/(byte*) print_char_cursor#30 make_plasma_charset::@12/(const byte*) print_line_cursor#0 ) - [56] (word) make_plasma_charset::c#2 ← phi( make_plasma_charset::@11/(word) make_plasma_charset::c#1 make_plasma_charset::@12/(byte) 0 ) - [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 +make_plasma_charset::@1: scope:[make_plasma_charset] from make_plasma_charset::@12 + [82] if((word) make_plasma_charset::c#1<(word) $100) goto make_plasma_charset::@2 to:make_plasma_charset::@return make_plasma_charset::@return: scope:[make_plasma_charset] from make_plasma_charset::@1 - [58] return + [83] return to:@return -make_plasma_charset::@2: scope:[make_plasma_charset] from make_plasma_charset::@1 - [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 - [60] (byte) make_plasma_charset::s#0 ← *((const byte[$200]) SINTABLE#0 + (byte~) make_plasma_charset::$3) - to:make_plasma_charset::@3 -make_plasma_charset::@3: scope:[make_plasma_charset] from make_plasma_charset::@2 make_plasma_charset::@7 - [61] (byte) make_plasma_charset::i#2 ← phi( make_plasma_charset::@2/(byte) 0 make_plasma_charset::@7/(byte) make_plasma_charset::i#1 ) - [62] if((byte) make_plasma_charset::i#2<(byte) 8) goto make_plasma_charset::@5 - to:make_plasma_charset::@4 -make_plasma_charset::@4: scope:[make_plasma_charset] from make_plasma_charset::@3 - [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 - [64] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@11 - to:make_plasma_charset::@10 -make_plasma_charset::@10: scope:[make_plasma_charset] from make_plasma_charset::@4 - [65] phi() - [66] call print_char - to:make_plasma_charset::@11 -make_plasma_charset::@11: scope:[make_plasma_charset] from make_plasma_charset::@10 make_plasma_charset::@4 - [67] (byte*) print_char_cursor#30 ← phi( make_plasma_charset::@10/(byte*) print_char_cursor#1 make_plasma_charset::@4/(byte*) print_char_cursor#18 ) - [68] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#2 - to:make_plasma_charset::@1 -make_plasma_charset::@5: scope:[make_plasma_charset] from make_plasma_charset::@3 make_plasma_charset::@8 - [69] (byte) make_plasma_charset::b#2 ← phi( make_plasma_charset::@8/(byte) make_plasma_charset::b#6 make_plasma_charset::@3/(byte) 0 ) - [69] (byte) make_plasma_charset::ii#2 ← phi( make_plasma_charset::@8/(byte) make_plasma_charset::ii#1 make_plasma_charset::@3/(byte) 0 ) - [70] if((byte) make_plasma_charset::ii#2<(byte) 8) goto make_plasma_charset::@6 - to:make_plasma_charset::@7 -make_plasma_charset::@7: scope:[make_plasma_charset] from make_plasma_charset::@5 - [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 - [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 - [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 - [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 - [75] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#2 - to:make_plasma_charset::@3 -make_plasma_charset::@6: scope:[make_plasma_charset] from make_plasma_charset::@5 - [76] phi() - [77] call sid_rnd - [78] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - to:make_plasma_charset::@13 -make_plasma_charset::@13: scope:[make_plasma_charset] from make_plasma_charset::@6 - [79] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2 - [80] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff - [81] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@8 - to:make_plasma_charset::@9 -make_plasma_charset::@9: scope:[make_plasma_charset] from make_plasma_charset::@13 - [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#2) - to:make_plasma_charset::@8 -make_plasma_charset::@8: scope:[make_plasma_charset] from make_plasma_charset::@13 make_plasma_charset::@9 - [83] (byte) make_plasma_charset::b#6 ← phi( make_plasma_charset::@9/(byte) make_plasma_charset::b#1 make_plasma_charset::@13/(byte) make_plasma_charset::b#2 ) - [84] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#2 - to:make_plasma_charset::@5 -sid_rnd: scope:[sid_rnd] from make_plasma_charset::@6 - [85] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) - to:sid_rnd::@return -sid_rnd::@return: scope:[sid_rnd] from sid_rnd - [86] return - to:@return -print_char: scope:[print_char] from make_plasma_charset::@10 - [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 - [88] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 +print_char: scope:[print_char] from make_plasma_charset::@11 + [84] *((byte*) print_char_cursor#59) ← (const byte) print_char::ch#0 + [85] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#59 to:print_char::@return print_char::@return: scope:[print_char] from print_char - [89] return + [86] return to:@return -print_cls: scope:[print_cls] from make_plasma_charset::@12 - [90] phi() - [91] call memset +sid_rnd: scope:[sid_rnd] from make_plasma_charset::@7 + [87] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) + to:sid_rnd::@return +sid_rnd::@return: scope:[sid_rnd] from sid_rnd + [88] return + to:@return +print_cls: scope:[print_cls] from make_plasma_charset::@13 + [89] phi() + [90] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [92] return + [91] return to:@return sid_rnd_init: scope:[sid_rnd_init] from make_plasma_charset - [93] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff - [94] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 + [92] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff + [93] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - [95] return + [94] return to:@return init_angle_screen: scope:[init_angle_screen] from main::@5 - [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c - [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [95] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [96] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c to:init_angle_screen::@1 init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4 - [98] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) - [98] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) - [98] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - to:init_angle_screen::@2 -init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [99] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [99] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 - to:init_angle_screen::@4 -init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 - to:init_angle_screen::@return -init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [105] return - to:@return -init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [113] call atan2_16 - [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + [97] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) + [97] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) + [97] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) + to:init_angle_screen::@3 +init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@2 + [98] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 ) + [98] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 ) + [99] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 + [100] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [101] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [102] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [103] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [104] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [105] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [106] call atan2_16 + [107] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [108] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [109] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [110] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [111] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 + [112] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [113] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 + [114] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 + [116] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [117] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 + [118] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 + [119] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 to:init_angle_screen::@2 +init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@5 + [120] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 + to:init_angle_screen::@4 +init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 + [121] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [122] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [123] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [124] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + to:init_angle_screen::@return +init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 + [125] return + to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@3 - [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 + [126] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 atan2_16::@2: scope:[atan2_16] from atan2_16 - [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + [127] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 to:atan2_16::@3 atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 - [129] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) - [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 + [128] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) + [129] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 to:atan2_16::@5 atan2_16::@5: scope:[atan2_16] from atan2_16::@3 - [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + [130] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 - [132] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) + [131] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [133] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) - [133] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) - [133] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) - [133] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) - [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + [132] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [132] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [132] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) + [132] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) + [133] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 to:atan2_16::@12 atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19 - [135] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) - [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 - [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + [134] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) + [135] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [136] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 to:atan2_16::@21 atan2_16::@21: scope:[atan2_16] from atan2_16::@12 - [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + [137] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 to:atan2_16::@7 atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21 - [139] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) - [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + [138] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) + [139] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 to:atan2_16::@9 atan2_16::@9: scope:[atan2_16] from atan2_16::@7 - [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + [140] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 to:atan2_16::@8 atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 - [142] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + [141] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) to:atan2_16::@return atan2_16::@return: scope:[atan2_16] from atan2_16::@8 - [143] return + [142] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 - [144] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 - [145] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 - [146] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 + [143] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 + [144] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 + [145] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 to:atan2_16::@13 atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14 - [147] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) - [147] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) - [147] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) - [148] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 + [146] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) + [146] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) + [146] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) + [147] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@13 - [149] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 + [148] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 to:atan2_16::@16 atan2_16::@16: scope:[atan2_16] from atan2_16::@15 - [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 - [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 + [149] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 + [150] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 to:atan2_16::@17 atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16 - [152] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) - [152] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) - [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 + [151] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) + [151] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) + [152] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 to:atan2_16::@20 atan2_16::@20: scope:[atan2_16] from atan2_16::@17 - [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 - [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 - [156] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 - [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) + [153] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 + [154] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 + [155] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 + [156] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) to:atan2_16::@19 atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20 - [158] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) - [158] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) - [158] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) - [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 - [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 + [157] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) + [157] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) + [157] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) + [158] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [159] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 to:atan2_16::@10 atan2_16::@18: scope:[atan2_16] from atan2_16::@17 - [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 - [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 - [163] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 - [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) + [160] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 + [161] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 + [162] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [163] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) to:atan2_16::@19 atan2_16::@14: scope:[atan2_16] from atan2_16::@13 - [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 - [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 - [167] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 + [164] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 + [165] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 + [166] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 to:atan2_16::@13 atan2_16::@4: scope:[atan2_16] from atan2_16::@3 - [168] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 + [167] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@1: scope:[atan2_16] from atan2_16 - [169] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 + [168] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 to:atan2_16::@3 init_dist_screen: scope:[init_dist_screen] from main - [170] phi() - [171] call init_squares + [169] phi() + [170] call init_squares to:init_dist_screen::@11 init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen - [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 + [171] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 to:init_dist_screen::@1 init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@7 - [173] (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 ) - [173] (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 ) - [173] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 ) - [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 - [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 + [172] (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 ) + [172] (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 ) + [172] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 ) + [173] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 + [174] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 to:init_dist_screen::@3 init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1 - [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 + [175] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 to:init_dist_screen::@4 init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3 - [177] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) - [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - [179] call sqr - [180] (word) sqr::return#2 ← (word) sqr::return#0 + [176] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) + [177] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + [178] call sqr + [179] (word) sqr::return#2 ← (word) sqr::return#0 to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@4 - [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - to:init_dist_screen::@5 -init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@14 - [182] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 ) - [182] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 ) - [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 - to:init_dist_screen::@7 -init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 - [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 - [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 - [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 - to:init_dist_screen::@return -init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 - [188] return - to:@return -init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 + [180] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + to:init_dist_screen::@6 +init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@5 + [181] (byte) init_dist_screen::xb#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#1 init_dist_screen::@12/(byte) $27 ) + [181] (byte) init_dist_screen::x#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#1 init_dist_screen::@12/(byte) 0 ) + [182] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 + [183] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 - [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [184] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9 - [192] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) - [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [194] call sqr - [195] (word) sqr::return#3 ← (word) sqr::return#0 + [185] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) + [186] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [187] call sqr + [188] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@13 init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@10 - [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [199] call sqrt - [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [189] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [190] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [191] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [192] call sqrt + [193] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@14 init_dist_screen::@14: scope:[init_dist_screen] from init_dist_screen::@13 - [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [194] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [195] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [196] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [199] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 + [200] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 to:init_dist_screen::@5 +init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@14 + [201] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 + to:init_dist_screen::@7 +init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 + [202] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 + [203] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 + [204] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [205] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 + to:init_dist_screen::@return +init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 + [206] return + to:@return init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 - [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 + [207] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@10 init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1 - [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 + [208] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 to:init_dist_screen::@4 sqrt: scope:[sqrt] from init_dist_screen::@13 - [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 - [212] call bsearch16u - [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + [209] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + [210] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 + [211] call bsearch16u + [212] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 to:sqrt::@1 sqrt::@1: scope:[sqrt] from sqrt - [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 - [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 - [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 - [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 + [213] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + [214] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 + [215] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 + [216] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 to:sqrt::@return sqrt::@return: scope:[sqrt] from sqrt::@1 - [218] return + [217] return to:@return bsearch16u: scope:[bsearch16u] from sqrt - [219] phi() - to:bsearch16u::@3 -bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [220] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [220] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 - to:bsearch16u::@5 -bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 - to:bsearch16u::@1 -bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD - to:bsearch16u::@2 -bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 - [224] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [218] phi() + to:bsearch16u::@4 +bsearch16u::@4: scope:[bsearch16u] from bsearch16u bsearch16u::@9 + [219] (word*) bsearch16u::items#10 ← phi( bsearch16u::@9/(word*~) bsearch16u::items#16 bsearch16u/(word*) bsearch16u::items#1 ) + [219] (byte) bsearch16u::num#10 ← phi( bsearch16u::@9/(byte) bsearch16u::num#0 bsearch16u/(const byte) NUM_SQUARES#3 ) + [220] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 + [221] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [222] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 + [223] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [224] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 to:bsearch16u::@return -bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 - [225] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) +bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@4 + [225] (word*) bsearch16u::return#1 ← phi( bsearch16u::@4/(word*) bsearch16u::pivot#0 bsearch16u::@2/(word*) bsearch16u::return#2 ) [226] return to:@return -bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 - to:bsearch16u::@8 -bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [232] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 - to:bsearch16u::@return bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 - to:bsearch16u::@9 -bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 + [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 + to:bsearch16u::@8 +bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@6 + [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [229] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 to:bsearch16u::@7 -bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [236] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [236] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 +bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@10 bsearch16u::@8 + [230] (word*) bsearch16u::items#11 ← phi( bsearch16u::@8/(word*) bsearch16u::items#0 bsearch16u::@10/(word*~) bsearch16u::items#19 ) + [230] (byte) bsearch16u::num#5 ← phi( bsearch16u::@8/(byte) bsearch16u::num#1 bsearch16u::@10/(byte) bsearch16u::num#10 ) + [231] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 to:bsearch16u::@3 +bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@7 + [232] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 + to:bsearch16u::@5 +bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 + [233] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + to:bsearch16u::@1 +bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 + [234] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD + to:bsearch16u::@2 +bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 + [235] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#11 bsearch16u::@1/(word*~) bsearch16u::$2 ) + to:bsearch16u::@return +bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@3 + [236] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 + to:bsearch16u::@4 +bsearch16u::@10: scope:[bsearch16u] from bsearch16u::@6 + [237] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 + to:bsearch16u::@7 sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 [238] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 @@ -4750,24 +4865,25 @@ VARIABLE REGISTER WEIGHTS (word*) bsearch16u::items (word*) bsearch16u::items#0 1001.0 (word*) bsearch16u::items#1 2.0 -(word*) bsearch16u::items#2 334.5555555555556 -(word*) bsearch16u::items#8 1501.5 +(word*) bsearch16u::items#10 429.2857142857143 +(word*) bsearch16u::items#11 752.25 +(word*~) bsearch16u::items#16 2002.0 +(word*~) bsearch16u::items#19 2002.0 (word) bsearch16u::key -(word) bsearch16u::key#0 0.26666666666666666 +(word) bsearch16u::key#0 0.23529411764705882 (byte) bsearch16u::num -(byte) bsearch16u::num#0 2002.0 +(byte) bsearch16u::num#0 1001.0 (byte) bsearch16u::num#1 2002.0 -(byte) bsearch16u::num#3 556.1111111111111 +(byte) bsearch16u::num#10 444.8888888888889 (byte) bsearch16u::num#5 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 501.0 +(word*) bsearch16u::pivot#0 750.75 (signed word) bsearch16u::result (signed word) bsearch16u::result#0 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 2.0 +(word*) bsearch16u::return#1 335.00000000000006 (word*) bsearch16u::return#2 6.0 (word*) bsearch16u::return#3 4.0 -(word*~) bsearch16u::return#6 4.0 (void()) doplasma((byte*) doplasma::screen) (byte~) doplasma::$2 2002.0 (byte*) doplasma::angle @@ -4812,17 +4928,17 @@ VARIABLE REGISTER WEIGHTS (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#0 4.0 (byte*) init_angle_screen::screen_bottomline#1 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 9.04 +(byte*) init_angle_screen::screen_bottomline#6 9.040000000000001 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#0 2.0 (byte*) init_angle_screen::screen_topline#1 5.5 (byte*) init_angle_screen::screen_topline#6 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 101.0 -(byte) init_angle_screen::x#2 28.857142857142858 +(byte) init_angle_screen::x#5 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 202.0 -(byte) init_angle_screen::xb#2 18.363636363636363 +(byte) init_angle_screen::xb#1 101.0 +(byte) init_angle_screen::xb#5 19.238095238095237 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 33.666666666666664 (byte) init_angle_screen::y @@ -4850,12 +4966,12 @@ VARIABLE REGISTER WEIGHTS (byte*) init_dist_screen::screen_topline#11 7.0625 (byte) init_dist_screen::x (byte) init_dist_screen::x#1 101.0 -(byte) init_dist_screen::x#2 30.3 +(byte) init_dist_screen::x#10 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 202.0 -(byte) init_dist_screen::xb#2 19.238095238095237 +(byte) init_dist_screen::xb#1 101.0 +(byte) init_dist_screen::xb#10 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 303.0 (word) init_dist_screen::xds @@ -4917,21 +5033,21 @@ VARIABLE REGISTER WEIGHTS (byte~) make_plasma_charset::$7 2002.0 (byte) make_plasma_charset::b (byte) make_plasma_charset::b#1 2002.0 -(byte) make_plasma_charset::b#2 282.1818181818182 -(byte) make_plasma_charset::b#6 1501.5 +(byte) make_plasma_charset::b#10 500.5 +(byte) make_plasma_charset::b#2 517.3333333333334 (byte[8]) make_plasma_charset::bittab (word) make_plasma_charset::c -(word) make_plasma_charset::c#1 22.0 -(word) make_plasma_charset::c#2 5.777777777777778 +(word) make_plasma_charset::c#1 16.5 +(word) make_plasma_charset::c#16 5.800000000000001 (byte*) make_plasma_charset::charset (byte) make_plasma_charset::i -(byte) make_plasma_charset::i#1 202.0 -(byte) make_plasma_charset::i#2 23.764705882352942 +(byte) make_plasma_charset::i#1 151.5 +(byte) make_plasma_charset::i#13 20.2 (byte) make_plasma_charset::ii -(byte) make_plasma_charset::ii#1 2002.0 -(byte) make_plasma_charset::ii#2 400.4 +(byte) make_plasma_charset::ii#1 1501.5 +(byte) make_plasma_charset::ii#10 375.375 (byte) make_plasma_charset::s -(byte) make_plasma_charset::s#0 53.26315789473684 +(byte) make_plasma_charset::s#0 56.22222222222223 (void*()) malloc((word) malloc::size) (byte*) malloc::mem (byte*) malloc::mem#0 0.6666666666666666 @@ -4955,8 +5071,8 @@ VARIABLE REGISTER WEIGHTS (byte) print_char::ch (byte*) print_char_cursor (byte*) print_char_cursor#1 4.333333333333333 -(byte*) print_char_cursor#18 1.0 -(byte*) print_char_cursor#30 16.5 +(byte*) print_char_cursor#18 11.0 +(byte*) print_char_cursor#59 1.0833333333333333 (void()) print_cls() (byte*) print_line_cursor (byte*) print_screen @@ -5006,16 +5122,16 @@ Initial phi equivalence classes [ memset::str#3 ] [ memset::c#4 ] [ memset::dst#2 memset::dst#4 memset::dst#1 ] -[ make_plasma_charset::c#2 make_plasma_charset::c#1 ] -[ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] -[ make_plasma_charset::i#2 make_plasma_charset::i#1 ] -[ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] -[ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ] +[ make_plasma_charset::c#16 make_plasma_charset::c#1 ] +[ print_char_cursor#59 print_char_cursor#18 print_char_cursor#1 ] +[ make_plasma_charset::i#13 make_plasma_charset::i#1 ] +[ make_plasma_charset::ii#10 make_plasma_charset::ii#1 ] +[ make_plasma_charset::b#10 make_plasma_charset::b#2 make_plasma_charset::b#1 ] [ init_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::x#2 init_angle_screen::x#1 ] -[ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +[ init_angle_screen::x#5 init_angle_screen::x#1 ] +[ init_angle_screen::xb#5 init_angle_screen::xb#1 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] [ atan2_16::i#2 atan2_16::i#1 ] @@ -5028,11 +5144,12 @@ Initial phi equivalence classes [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -[ init_dist_screen::x#2 init_dist_screen::x#1 ] -[ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +[ init_dist_screen::x#10 init_dist_screen::x#1 ] +[ init_dist_screen::xb#10 init_dist_screen::xb#1 ] [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +[ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] +[ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] +[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] [ sqr::val#2 sqr::val#1 sqr::val#0 ] [ init_squares::sqr#2 init_squares::sqr#1 ] [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] @@ -5048,13 +5165,13 @@ Added variable doplasma::$2 to zero page equivalence class [ doplasma::$2 ] Added variable memset::end#0 to zero page equivalence class [ memset::end#0 ] Added variable make_plasma_charset::$3 to zero page equivalence class [ make_plasma_charset::$3 ] Added variable make_plasma_charset::s#0 to zero page equivalence class [ make_plasma_charset::s#0 ] -Added variable make_plasma_charset::$12 to zero page equivalence class [ make_plasma_charset::$12 ] -Added variable make_plasma_charset::$10 to zero page equivalence class [ make_plasma_charset::$10 ] -Added variable make_plasma_charset::$11 to zero page equivalence class [ make_plasma_charset::$11 ] -Added variable make_plasma_charset::$16 to zero page equivalence class [ make_plasma_charset::$16 ] Added variable sid_rnd::return#2 to zero page equivalence class [ sid_rnd::return#2 ] Added variable make_plasma_charset::$6 to zero page equivalence class [ make_plasma_charset::$6 ] Added variable make_plasma_charset::$7 to zero page equivalence class [ make_plasma_charset::$7 ] +Added variable make_plasma_charset::$10 to zero page equivalence class [ make_plasma_charset::$10 ] +Added variable make_plasma_charset::$11 to zero page equivalence class [ make_plasma_charset::$11 ] +Added variable make_plasma_charset::$16 to zero page equivalence class [ make_plasma_charset::$16 ] +Added variable make_plasma_charset::$12 to zero page equivalence class [ make_plasma_charset::$12 ] Added variable sid_rnd::return#0 to zero page equivalence class [ sid_rnd::return#0 ] Added variable init_angle_screen::$3 to zero page equivalence class [ init_angle_screen::$3 ] Added variable init_angle_screen::$4 to zero page equivalence class [ init_angle_screen::$4 ] @@ -5090,7 +5207,6 @@ Added variable sqrt::$1 to zero page equivalence class [ sqrt::$1 ] Added variable sqrt::return#0 to zero page equivalence class [ sqrt::return#0 ] Added variable bsearch16u::$6 to zero page equivalence class [ bsearch16u::$6 ] Added variable bsearch16u::$16 to zero page equivalence class [ bsearch16u::$16 ] -Added variable bsearch16u::pivot#0 to zero page equivalence class [ bsearch16u::pivot#0 ] Added variable bsearch16u::result#0 to zero page equivalence class [ bsearch16u::result#0 ] Added variable sqr::$0 to zero page equivalence class [ sqr::$0 ] Added variable sqr::return#0 to zero page equivalence class [ sqr::return#0 ] @@ -5109,16 +5225,16 @@ Complete equivalence classes [ memset::str#3 ] [ memset::c#4 ] [ memset::dst#2 memset::dst#4 memset::dst#1 ] -[ make_plasma_charset::c#2 make_plasma_charset::c#1 ] -[ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] -[ make_plasma_charset::i#2 make_plasma_charset::i#1 ] -[ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] -[ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ] +[ make_plasma_charset::c#16 make_plasma_charset::c#1 ] +[ print_char_cursor#59 print_char_cursor#18 print_char_cursor#1 ] +[ make_plasma_charset::i#13 make_plasma_charset::i#1 ] +[ make_plasma_charset::ii#10 make_plasma_charset::ii#1 ] +[ make_plasma_charset::b#10 make_plasma_charset::b#2 make_plasma_charset::b#1 ] [ init_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::x#2 init_angle_screen::x#1 ] -[ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +[ init_angle_screen::x#5 init_angle_screen::x#1 ] +[ init_angle_screen::xb#5 init_angle_screen::xb#1 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] [ atan2_16::i#2 atan2_16::i#1 ] @@ -5131,11 +5247,12 @@ Complete equivalence classes [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -[ init_dist_screen::x#2 init_dist_screen::x#1 ] -[ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +[ init_dist_screen::x#10 init_dist_screen::x#1 ] +[ init_dist_screen::xb#10 init_dist_screen::xb#1 ] [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +[ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] +[ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] +[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] [ sqr::val#2 sqr::val#1 sqr::val#0 ] [ init_squares::sqr#2 init_squares::sqr#1 ] [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] @@ -5151,13 +5268,13 @@ Complete equivalence classes [ memset::end#0 ] [ make_plasma_charset::$3 ] [ make_plasma_charset::s#0 ] -[ make_plasma_charset::$12 ] -[ make_plasma_charset::$10 ] -[ make_plasma_charset::$11 ] -[ make_plasma_charset::$16 ] [ sid_rnd::return#2 ] [ make_plasma_charset::$6 ] [ make_plasma_charset::$7 ] +[ make_plasma_charset::$10 ] +[ make_plasma_charset::$11 ] +[ make_plasma_charset::$16 ] +[ make_plasma_charset::$12 ] [ sid_rnd::return#0 ] [ init_angle_screen::$3 ] [ init_angle_screen::$4 ] @@ -5193,7 +5310,6 @@ Complete equivalence classes [ sqrt::return#0 ] [ bsearch16u::$6 ] [ bsearch16u::$16 ] -[ bsearch16u::pivot#0 ] [ bsearch16u::result#0 ] [ sqr::$0 ] [ sqr::return#0 ] @@ -5211,16 +5327,16 @@ Allocated zp ZP_BYTE:11 [ doplasma::x#2 doplasma::x#1 ] Allocated zp ZP_WORD:12 [ memset::str#3 ] Allocated zp ZP_BYTE:14 [ memset::c#4 ] Allocated zp ZP_WORD:15 [ memset::dst#2 memset::dst#4 memset::dst#1 ] -Allocated zp ZP_WORD:17 [ make_plasma_charset::c#2 make_plasma_charset::c#1 ] -Allocated zp ZP_WORD:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] -Allocated zp ZP_BYTE:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] -Allocated zp ZP_BYTE:22 [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] -Allocated zp ZP_BYTE:23 [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ] +Allocated zp ZP_WORD:17 [ make_plasma_charset::c#16 make_plasma_charset::c#1 ] +Allocated zp ZP_WORD:19 [ print_char_cursor#59 print_char_cursor#18 print_char_cursor#1 ] +Allocated zp ZP_BYTE:21 [ make_plasma_charset::i#13 make_plasma_charset::i#1 ] +Allocated zp ZP_BYTE:22 [ make_plasma_charset::ii#10 make_plasma_charset::ii#1 ] +Allocated zp ZP_BYTE:23 [ make_plasma_charset::b#10 make_plasma_charset::b#2 make_plasma_charset::b#1 ] Allocated zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Allocated zp ZP_WORD:25 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] Allocated zp ZP_WORD:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] -Allocated zp ZP_BYTE:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Allocated zp ZP_BYTE:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Allocated zp ZP_BYTE:29 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Allocated zp ZP_BYTE:30 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] Allocated zp ZP_WORD:31 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] Allocated zp ZP_WORD:33 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] Allocated zp ZP_BYTE:35 [ atan2_16::i#2 atan2_16::i#1 ] @@ -5233,69 +5349,69 @@ Allocated zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Allocated zp ZP_WORD:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] Allocated zp ZP_WORD:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] Allocated zp ZP_BYTE:50 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Allocated zp ZP_BYTE:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Allocated zp ZP_BYTE:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Allocated zp ZP_BYTE:51 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Allocated zp ZP_BYTE:52 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] Allocated zp ZP_BYTE:53 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -Allocated zp ZP_WORD:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -Allocated zp ZP_BYTE:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Allocated zp ZP_BYTE:57 [ sqr::val#2 sqr::val#1 sqr::val#0 ] -Allocated zp ZP_WORD:58 [ init_squares::sqr#2 init_squares::sqr#1 ] -Allocated zp ZP_WORD:60 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] -Allocated zp ZP_BYTE:62 [ init_squares::i#2 init_squares::i#1 ] -Allocated zp ZP_WORD:63 [ heap_head#12 heap_head#1 ] -Allocated zp ZP_WORD:65 [ malloc::size#3 ] -Allocated zp ZP_WORD:67 [ SCREEN_DIST#0 ] -Allocated zp ZP_WORD:69 [ SCREEN_ANGLE#0 ] -Allocated zp ZP_WORD:71 [ init_angle_screen::screen#0 ] -Allocated zp ZP_WORD:73 [ doplasma::sin_x#0 ] -Allocated zp ZP_WORD:75 [ doplasma::sin_y#0 ] -Allocated zp ZP_BYTE:77 [ doplasma::$2 ] -Allocated zp ZP_WORD:78 [ memset::end#0 ] -Allocated zp ZP_BYTE:80 [ make_plasma_charset::$3 ] -Allocated zp ZP_BYTE:81 [ make_plasma_charset::s#0 ] -Allocated zp ZP_BYTE:82 [ make_plasma_charset::$12 ] -Allocated zp ZP_WORD:83 [ make_plasma_charset::$10 ] -Allocated zp ZP_WORD:85 [ make_plasma_charset::$11 ] -Allocated zp ZP_WORD:87 [ make_plasma_charset::$16 ] -Allocated zp ZP_BYTE:89 [ sid_rnd::return#2 ] -Allocated zp ZP_BYTE:90 [ make_plasma_charset::$6 ] -Allocated zp ZP_BYTE:91 [ make_plasma_charset::$7 ] -Allocated zp ZP_BYTE:92 [ sid_rnd::return#0 ] -Allocated zp ZP_BYTE:93 [ init_angle_screen::$3 ] -Allocated zp ZP_BYTE:94 [ init_angle_screen::$4 ] -Allocated zp ZP_WORD:95 [ init_angle_screen::xw#0 ] -Allocated zp ZP_BYTE:97 [ init_angle_screen::$7 ] -Allocated zp ZP_WORD:98 [ init_angle_screen::yw#0 ] -Allocated zp ZP_WORD:100 [ atan2_16::x#0 ] -Allocated zp ZP_WORD:102 [ atan2_16::y#0 ] -Allocated zp ZP_WORD:104 [ atan2_16::return#2 ] -Allocated zp ZP_WORD:106 [ init_angle_screen::angle_w#0 ] -Allocated zp ZP_WORD:108 [ init_angle_screen::$11 ] -Allocated zp ZP_BYTE:110 [ init_angle_screen::ang_w#0 ] -Allocated zp ZP_BYTE:111 [ init_angle_screen::$13 ] -Allocated zp ZP_BYTE:112 [ init_angle_screen::$14 ] -Allocated zp ZP_BYTE:113 [ init_angle_screen::$15 ] -Allocated zp ZP_BYTE:114 [ atan2_16::$24 ] -Allocated zp ZP_BYTE:115 [ atan2_16::$23 ] -Allocated zp ZP_BYTE:116 [ init_dist_screen::y2#0 ] -Allocated zp ZP_WORD:117 [ sqr::return#2 ] -Allocated zp ZP_WORD:119 [ init_dist_screen::yds#0 ] -Allocated zp ZP_BYTE:121 [ init_dist_screen::x2#0 ] -Allocated zp ZP_WORD:122 [ sqr::return#3 ] -Allocated zp ZP_WORD:124 [ init_dist_screen::xds#0 ] -Allocated zp ZP_WORD:126 [ init_dist_screen::ds#0 ] -Allocated zp ZP_WORD:128 [ sqrt::val#0 ] -Allocated zp ZP_BYTE:130 [ sqrt::return#2 ] -Allocated zp ZP_BYTE:131 [ init_dist_screen::d#0 ] -Allocated zp ZP_WORD:132 [ bsearch16u::key#0 ] -Allocated zp ZP_WORD:134 [ bsearch16u::return#3 ] -Allocated zp ZP_WORD:136 [ sqrt::found#0 ] -Allocated zp ZP_WORD:138 [ sqrt::$3 ] -Allocated zp ZP_WORD:140 [ sqrt::$1 ] -Allocated zp ZP_BYTE:142 [ sqrt::return#0 ] -Allocated zp ZP_BYTE:143 [ bsearch16u::$6 ] -Allocated zp ZP_BYTE:144 [ bsearch16u::$16 ] -Allocated zp ZP_WORD:145 [ bsearch16u::pivot#0 ] +Allocated zp ZP_WORD:54 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] +Allocated zp ZP_WORD:56 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] +Allocated zp ZP_BYTE:58 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] +Allocated zp ZP_BYTE:59 [ sqr::val#2 sqr::val#1 sqr::val#0 ] +Allocated zp ZP_WORD:60 [ init_squares::sqr#2 init_squares::sqr#1 ] +Allocated zp ZP_WORD:62 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] +Allocated zp ZP_BYTE:64 [ init_squares::i#2 init_squares::i#1 ] +Allocated zp ZP_WORD:65 [ heap_head#12 heap_head#1 ] +Allocated zp ZP_WORD:67 [ malloc::size#3 ] +Allocated zp ZP_WORD:69 [ SCREEN_DIST#0 ] +Allocated zp ZP_WORD:71 [ SCREEN_ANGLE#0 ] +Allocated zp ZP_WORD:73 [ init_angle_screen::screen#0 ] +Allocated zp ZP_WORD:75 [ doplasma::sin_x#0 ] +Allocated zp ZP_WORD:77 [ doplasma::sin_y#0 ] +Allocated zp ZP_BYTE:79 [ doplasma::$2 ] +Allocated zp ZP_WORD:80 [ memset::end#0 ] +Allocated zp ZP_BYTE:82 [ make_plasma_charset::$3 ] +Allocated zp ZP_BYTE:83 [ make_plasma_charset::s#0 ] +Allocated zp ZP_BYTE:84 [ sid_rnd::return#2 ] +Allocated zp ZP_BYTE:85 [ make_plasma_charset::$6 ] +Allocated zp ZP_BYTE:86 [ make_plasma_charset::$7 ] +Allocated zp ZP_WORD:87 [ make_plasma_charset::$10 ] +Allocated zp ZP_WORD:89 [ make_plasma_charset::$11 ] +Allocated zp ZP_WORD:91 [ make_plasma_charset::$16 ] +Allocated zp ZP_BYTE:93 [ make_plasma_charset::$12 ] +Allocated zp ZP_BYTE:94 [ sid_rnd::return#0 ] +Allocated zp ZP_BYTE:95 [ init_angle_screen::$3 ] +Allocated zp ZP_BYTE:96 [ init_angle_screen::$4 ] +Allocated zp ZP_WORD:97 [ init_angle_screen::xw#0 ] +Allocated zp ZP_BYTE:99 [ init_angle_screen::$7 ] +Allocated zp ZP_WORD:100 [ init_angle_screen::yw#0 ] +Allocated zp ZP_WORD:102 [ atan2_16::x#0 ] +Allocated zp ZP_WORD:104 [ atan2_16::y#0 ] +Allocated zp ZP_WORD:106 [ atan2_16::return#2 ] +Allocated zp ZP_WORD:108 [ init_angle_screen::angle_w#0 ] +Allocated zp ZP_WORD:110 [ init_angle_screen::$11 ] +Allocated zp ZP_BYTE:112 [ init_angle_screen::ang_w#0 ] +Allocated zp ZP_BYTE:113 [ init_angle_screen::$13 ] +Allocated zp ZP_BYTE:114 [ init_angle_screen::$14 ] +Allocated zp ZP_BYTE:115 [ init_angle_screen::$15 ] +Allocated zp ZP_BYTE:116 [ atan2_16::$24 ] +Allocated zp ZP_BYTE:117 [ atan2_16::$23 ] +Allocated zp ZP_BYTE:118 [ init_dist_screen::y2#0 ] +Allocated zp ZP_WORD:119 [ sqr::return#2 ] +Allocated zp ZP_WORD:121 [ init_dist_screen::yds#0 ] +Allocated zp ZP_BYTE:123 [ init_dist_screen::x2#0 ] +Allocated zp ZP_WORD:124 [ sqr::return#3 ] +Allocated zp ZP_WORD:126 [ init_dist_screen::xds#0 ] +Allocated zp ZP_WORD:128 [ init_dist_screen::ds#0 ] +Allocated zp ZP_WORD:130 [ sqrt::val#0 ] +Allocated zp ZP_BYTE:132 [ sqrt::return#2 ] +Allocated zp ZP_BYTE:133 [ init_dist_screen::d#0 ] +Allocated zp ZP_WORD:134 [ bsearch16u::key#0 ] +Allocated zp ZP_WORD:136 [ bsearch16u::return#3 ] +Allocated zp ZP_WORD:138 [ sqrt::found#0 ] +Allocated zp ZP_WORD:140 [ sqrt::$3 ] +Allocated zp ZP_WORD:142 [ sqrt::$1 ] +Allocated zp ZP_BYTE:144 [ sqrt::return#0 ] +Allocated zp ZP_BYTE:145 [ bsearch16u::$6 ] +Allocated zp ZP_BYTE:146 [ bsearch16u::$16 ] Allocated zp ZP_WORD:147 [ bsearch16u::result#0 ] Allocated zp ZP_BYTE:149 [ sqr::$0 ] Allocated zp ZP_WORD:150 [ sqr::return#0 ] @@ -5336,13 +5452,13 @@ Target platform is c64basic // Plasma screen 2 .label SCREEN2 = $2c00 .const NUM_SQUARES = $30 - .label heap_head = $3f + .label heap_head = $41 .label SQUARES = $98 .label print_char_cursor = $13 // Screen containing distance to center - .label SCREEN_DIST = $43 + .label SCREEN_DIST = $45 // Screen containing angle to center - .label SCREEN_ANGLE = $45 + .label SCREEN_ANGLE = $47 .label sin_offset_x = 2 .label sin_offset_y = 3 // @begin @@ -5414,7 +5530,7 @@ main: { lda SCREEN_DIST+1 sta init_dist_screen.screen+1 // [10] call init_dist_screen - // [170] phi from main to init_dist_screen [phi:main->init_dist_screen] + // [169] phi from main to init_dist_screen [phi:main->init_dist_screen] init_dist_screen_from_main: jsr init_dist_screen jmp b5 @@ -5524,11 +5640,11 @@ main: { // Render plasma to the passed screen // doplasma(byte* zeropage(8) screen) doplasma: { - .label _2 = $4d + .label _2 = $4f .label angle = 4 .label dist = 6 - .label sin_x = $49 - .label sin_y = $4b + .label sin_x = $4b + .label sin_y = $4d .label x = $b .label screen = 8 .label y = $a @@ -5663,7 +5779,7 @@ doplasma: { // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. // memset(void* zeropage($c) str, byte zeropage($e) c) memset: { - .label end = $4e + .label end = $50 .label dst = $f .label str = $c .label c = $e @@ -5718,133 +5834,131 @@ memset: { // make_plasma_charset // Make a plasma-friendly charset where the chars are randomly filled make_plasma_charset: { - .label _3 = $50 - .label _6 = $5a - .label _7 = $5b - .label _10 = $53 - .label _11 = $55 - .label _12 = $52 - .label s = $51 + .label _3 = $52 + .label _6 = $55 + .label _7 = $56 + .label _10 = $57 + .label _11 = $59 + .label _12 = $5d + .label s = $53 .label i = $15 .label ii = $16 .label b = $17 .label c = $11 - .label _16 = $57 + .label _16 = $5b // [53] call sid_rnd_init jsr sid_rnd_init - // [54] phi from make_plasma_charset to make_plasma_charset::@12 [phi:make_plasma_charset->make_plasma_charset::@12] - b12_from_make_plasma_charset: - jmp b12 - // make_plasma_charset::@12 - b12: + // [54] phi from make_plasma_charset to make_plasma_charset::@13 [phi:make_plasma_charset->make_plasma_charset::@13] + b13_from_make_plasma_charset: + jmp b13 + // make_plasma_charset::@13 + b13: // [55] call print_cls - // [90] phi from make_plasma_charset::@12 to print_cls [phi:make_plasma_charset::@12->print_cls] - print_cls_from_b12: + // [89] phi from make_plasma_charset::@13 to print_cls [phi:make_plasma_charset::@13->print_cls] + print_cls_from_b13: jsr print_cls - // [56] phi from make_plasma_charset::@12 to make_plasma_charset::@1 [phi:make_plasma_charset::@12->make_plasma_charset::@1] - b1_from_b12: - // [56] phi (byte*) print_char_cursor#18 = (const byte*) print_line_cursor#0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#0] -- pbuz1=pbuc1 + // [56] phi from make_plasma_charset::@13 to make_plasma_charset::@2 [phi:make_plasma_charset::@13->make_plasma_charset::@2] + b2_from_b13: + // [56] phi (byte*) print_char_cursor#59 = (const byte*) print_line_cursor#0 [phi:make_plasma_charset::@13->make_plasma_charset::@2#0] -- pbuz1=pbuc1 lda #print_line_cursor sta print_char_cursor+1 - // [56] phi (word) make_plasma_charset::c#2 = (byte) 0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#1] -- vwuz1=vbuc1 + // [56] phi (word) make_plasma_charset::c#16 = (byte) 0 [phi:make_plasma_charset::@13->make_plasma_charset::@2#1] -- vwuz1=vbuc1 lda #<0 sta c lda #>0 sta c+1 - jmp b1 - // make_plasma_charset::@1 - b1: - // [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 -- vwuz1_lt_vwuc1_then_la1 - lda c+1 - cmp #>$100 - bcc b2 - bne !+ - lda c - cmp #<$100 - bcc b2 - !: - jmp breturn - // make_plasma_charset::@return - breturn: - // [58] return - rts + jmp b2 + // [56] phi from make_plasma_charset::@1 to make_plasma_charset::@2 [phi:make_plasma_charset::@1->make_plasma_charset::@2] + b2_from_b1: + // [56] phi (byte*) print_char_cursor#59 = (byte*) print_char_cursor#18 [phi:make_plasma_charset::@1->make_plasma_charset::@2#0] -- register_copy + // [56] phi (word) make_plasma_charset::c#16 = (word) make_plasma_charset::c#1 [phi:make_plasma_charset::@1->make_plasma_charset::@2#1] -- register_copy + jmp b2 // make_plasma_charset::@2 b2: - // [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 -- vbuz1=_lo_vwuz2 + // [57] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#16 -- vbuz1=_lo_vwuz2 lda c sta _3 - // [60] (byte) make_plasma_charset::s#0 ← *((const byte[$200]) SINTABLE#0 + (byte~) make_plasma_charset::$3) -- vbuz1=pbuc1_derefidx_vbuz2 + // [58] (byte) make_plasma_charset::s#0 ← *((const byte[$200]) SINTABLE#0 + (byte~) make_plasma_charset::$3) -- vbuz1=pbuc1_derefidx_vbuz2 ldy _3 lda SINTABLE,y sta s - // [61] phi from make_plasma_charset::@2 to make_plasma_charset::@3 [phi:make_plasma_charset::@2->make_plasma_charset::@3] - b3_from_b2: - // [61] phi (byte) make_plasma_charset::i#2 = (byte) 0 [phi:make_plasma_charset::@2->make_plasma_charset::@3#0] -- vbuz1=vbuc1 + // [59] phi from make_plasma_charset::@2 to make_plasma_charset::@4 [phi:make_plasma_charset::@2->make_plasma_charset::@4] + b4_from_b2: + // [59] phi (byte) make_plasma_charset::i#13 = (byte) 0 [phi:make_plasma_charset::@2->make_plasma_charset::@4#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b3 - // make_plasma_charset::@3 - b3: - // [62] if((byte) make_plasma_charset::i#2<(byte) 8) goto make_plasma_charset::@5 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #8 - bcc b5_from_b3 + jmp b4 + // [59] phi from make_plasma_charset::@3 to make_plasma_charset::@4 [phi:make_plasma_charset::@3->make_plasma_charset::@4] + b4_from_b3: + // [59] phi (byte) make_plasma_charset::i#13 = (byte) make_plasma_charset::i#1 [phi:make_plasma_charset::@3->make_plasma_charset::@4#0] -- register_copy jmp b4 // make_plasma_charset::@4 b4: - // [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 -- vbuz1=vwuz2_band_vbuc1 - lda c - and #7 - sta _12 - // [64] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@11 -- vbuz1_neq_0_then_la1 - lda _12 - cmp #0 - bne b11_from_b4 - // [65] phi from make_plasma_charset::@4 to make_plasma_charset::@10 [phi:make_plasma_charset::@4->make_plasma_charset::@10] - b10_from_b4: - jmp b10 - // make_plasma_charset::@10 - b10: - // [66] call print_char - jsr print_char - // [67] phi from make_plasma_charset::@10 make_plasma_charset::@4 to make_plasma_charset::@11 [phi:make_plasma_charset::@10/make_plasma_charset::@4->make_plasma_charset::@11] - b11_from_b10: - b11_from_b4: - // [67] phi (byte*) print_char_cursor#30 = (byte*) print_char_cursor#1 [phi:make_plasma_charset::@10/make_plasma_charset::@4->make_plasma_charset::@11#0] -- register_copy - jmp b11 - // make_plasma_charset::@11 - b11: - // [68] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#2 -- vwuz1=_inc_vwuz1 - inc c - bne !+ - inc c+1 - !: - // [56] phi from make_plasma_charset::@11 to make_plasma_charset::@1 [phi:make_plasma_charset::@11->make_plasma_charset::@1] - b1_from_b11: - // [56] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#30 [phi:make_plasma_charset::@11->make_plasma_charset::@1#0] -- register_copy - // [56] phi (word) make_plasma_charset::c#2 = (word) make_plasma_charset::c#1 [phi:make_plasma_charset::@11->make_plasma_charset::@1#1] -- register_copy - jmp b1 - // [69] phi from make_plasma_charset::@3 to make_plasma_charset::@5 [phi:make_plasma_charset::@3->make_plasma_charset::@5] - b5_from_b3: - // [69] phi (byte) make_plasma_charset::b#2 = (byte) 0 [phi:make_plasma_charset::@3->make_plasma_charset::@5#0] -- vbuz1=vbuc1 + // [60] phi from make_plasma_charset::@4 to make_plasma_charset::@7 [phi:make_plasma_charset::@4->make_plasma_charset::@7] + b7_from_b4: + // [60] phi (byte) make_plasma_charset::b#10 = (byte) 0 [phi:make_plasma_charset::@4->make_plasma_charset::@7#0] -- vbuz1=vbuc1 lda #0 sta b - // [69] phi (byte) make_plasma_charset::ii#2 = (byte) 0 [phi:make_plasma_charset::@3->make_plasma_charset::@5#1] -- vbuz1=vbuc1 + // [60] phi (byte) make_plasma_charset::ii#10 = (byte) 0 [phi:make_plasma_charset::@4->make_plasma_charset::@7#1] -- vbuz1=vbuc1 lda #0 sta ii - jmp b5 - // make_plasma_charset::@5 - b5: - // [70] if((byte) make_plasma_charset::ii#2<(byte) 8) goto make_plasma_charset::@6 -- vbuz1_lt_vbuc1_then_la1 - lda ii - cmp #8 - bcc b6_from_b5 + jmp b7 + // [60] phi from make_plasma_charset::@6 to make_plasma_charset::@7 [phi:make_plasma_charset::@6->make_plasma_charset::@7] + b7_from_b6: + // [60] phi (byte) make_plasma_charset::b#10 = (byte) make_plasma_charset::b#2 [phi:make_plasma_charset::@6->make_plasma_charset::@7#0] -- register_copy + // [60] phi (byte) make_plasma_charset::ii#10 = (byte) make_plasma_charset::ii#1 [phi:make_plasma_charset::@6->make_plasma_charset::@7#1] -- register_copy jmp b7 // make_plasma_charset::@7 b7: - // [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [61] call sid_rnd + jsr sid_rnd + // [62] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 + lda sid_rnd.return + sta sid_rnd.return_2 + jmp b14 + // make_plasma_charset::@14 + b14: + // [63] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 + lda sid_rnd.return_2 + sta _6 + // [64] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff -- vbuz1=vbuz2_band_vbuc1 + lda #$ff + and _6 + sta _7 + // [65] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@9 -- vbuz1_le_vbuz2_then_la1 + lda s + cmp _7 + bcs b9_from_b14 + jmp b10 + // make_plasma_charset::@10 + b10: + // [66] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#10 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#10) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 + lda b + ldy ii + ora bittab,y + sta b + // [67] phi from make_plasma_charset::@10 make_plasma_charset::@14 to make_plasma_charset::@9 [phi:make_plasma_charset::@10/make_plasma_charset::@14->make_plasma_charset::@9] + b9_from_b10: + b9_from_b14: + // [67] phi (byte) make_plasma_charset::b#2 = (byte) make_plasma_charset::b#1 [phi:make_plasma_charset::@10/make_plasma_charset::@14->make_plasma_charset::@9#0] -- register_copy + jmp b9 + // make_plasma_charset::@9 + b9: + // [68] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#10 -- vbuz1=_inc_vbuz1 + inc ii + jmp b6 + // make_plasma_charset::@6 + b6: + // [69] if((byte) make_plasma_charset::ii#1<(byte) 8) goto make_plasma_charset::@7 -- vbuz1_lt_vbuc1_then_la1 + lda ii + cmp #8 + bcc b7_from_b6 + jmp b8 + // make_plasma_charset::@8 + b8: + // [70] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#16 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda c asl sta _10 @@ -5855,7 +5969,7 @@ make_plasma_charset: { rol _10+1 asl _10 rol _10+1 - // [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 -- vwuz1=vwuz2_plus_vbuz3 + // [71] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#13 -- vwuz1=vwuz2_plus_vbuz3 lda i clc adc _10 @@ -5863,7 +5977,7 @@ make_plasma_charset: { lda #0 adc _10+1 sta _11+1 - // [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 -- pbuz1=pbuc1_plus_vwuz2 + // [72] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 -- pbuz1=pbuc1_plus_vwuz2 lda _11 clc adc #CHARSET sta _16+1 - // [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 -- _deref_pbuz1=vbuz2 + // [73] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 -- _deref_pbuz1=vbuz2 lda b ldy #0 sta (_16),y - // [75] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#2 -- vbuz1=_inc_vbuz1 + // [74] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#13 -- vbuz1=_inc_vbuz1 inc i - // [61] phi from make_plasma_charset::@7 to make_plasma_charset::@3 [phi:make_plasma_charset::@7->make_plasma_charset::@3] - b3_from_b7: - // [61] phi (byte) make_plasma_charset::i#2 = (byte) make_plasma_charset::i#1 [phi:make_plasma_charset::@7->make_plasma_charset::@3#0] -- register_copy jmp b3 - // [76] phi from make_plasma_charset::@5 to make_plasma_charset::@6 [phi:make_plasma_charset::@5->make_plasma_charset::@6] - b6_from_b5: - jmp b6 - // make_plasma_charset::@6 - b6: - // [77] call sid_rnd - jsr sid_rnd - // [78] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 - lda sid_rnd.return - sta sid_rnd.return_2 - jmp b13 - // make_plasma_charset::@13 - b13: - // [79] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 - lda sid_rnd.return_2 - sta _6 - // [80] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff -- vbuz1=vbuz2_band_vbuc1 - lda #$ff - and _6 - sta _7 - // [81] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@8 -- vbuz1_le_vbuz2_then_la1 - lda s - cmp _7 - bcs b8_from_b13 - jmp b9 - // make_plasma_charset::@9 - b9: - // [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#2) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 - lda b - ldy ii - ora bittab,y - sta b - // [83] phi from make_plasma_charset::@13 make_plasma_charset::@9 to make_plasma_charset::@8 [phi:make_plasma_charset::@13/make_plasma_charset::@9->make_plasma_charset::@8] - b8_from_b13: - b8_from_b9: - // [83] phi (byte) make_plasma_charset::b#6 = (byte) make_plasma_charset::b#2 [phi:make_plasma_charset::@13/make_plasma_charset::@9->make_plasma_charset::@8#0] -- register_copy - jmp b8 - // make_plasma_charset::@8 - b8: - // [84] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#2 -- vbuz1=_inc_vbuz1 - inc ii - // [69] phi from make_plasma_charset::@8 to make_plasma_charset::@5 [phi:make_plasma_charset::@8->make_plasma_charset::@5] - b5_from_b8: - // [69] phi (byte) make_plasma_charset::b#2 = (byte) make_plasma_charset::b#6 [phi:make_plasma_charset::@8->make_plasma_charset::@5#0] -- register_copy - // [69] phi (byte) make_plasma_charset::ii#2 = (byte) make_plasma_charset::ii#1 [phi:make_plasma_charset::@8->make_plasma_charset::@5#1] -- register_copy + // make_plasma_charset::@3 + b3: + // [75] if((byte) make_plasma_charset::i#1<(byte) 8) goto make_plasma_charset::@4 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #8 + bcc b4_from_b3 jmp b5 - bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 -} - // sid_rnd -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -sid_rnd: { - .label return = $5c - .label return_2 = $59 - // [85] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 - lda SID_VOICE3_OSC - sta return + // make_plasma_charset::@5 + b5: + // [76] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#16 & (byte) 7 -- vbuz1=vwuz2_band_vbuc1 + lda c + and #7 + sta _12 + // [77] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@12 -- vbuz1_neq_0_then_la1 + lda _12 + cmp #0 + bne b12_from_b5 + // [78] phi from make_plasma_charset::@5 to make_plasma_charset::@11 [phi:make_plasma_charset::@5->make_plasma_charset::@11] + b11_from_b5: + jmp b11 + // make_plasma_charset::@11 + b11: + // [79] call print_char + jsr print_char + // [80] phi from make_plasma_charset::@11 make_plasma_charset::@5 to make_plasma_charset::@12 [phi:make_plasma_charset::@11/make_plasma_charset::@5->make_plasma_charset::@12] + b12_from_b11: + b12_from_b5: + // [80] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#1 [phi:make_plasma_charset::@11/make_plasma_charset::@5->make_plasma_charset::@12#0] -- register_copy + jmp b12 + // make_plasma_charset::@12 + b12: + // [81] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#16 -- vwuz1=_inc_vwuz1 + inc c + bne !+ + inc c+1 + !: + jmp b1 + // make_plasma_charset::@1 + b1: + // [82] if((word) make_plasma_charset::c#1<(word) $100) goto make_plasma_charset::@2 -- vwuz1_lt_vwuc1_then_la1 + lda c+1 + cmp #>$100 + bcc b2_from_b1 + bne !+ + lda c + cmp #<$100 + bcc b2_from_b1 + !: jmp breturn - // sid_rnd::@return + // make_plasma_charset::@return breturn: - // [86] return + // [83] return rts + bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // print_char // Print a single char print_char: { .const ch = '.' - // [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 + // [84] *((byte*) print_char_cursor#59) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (print_char_cursor),y - // [88] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 + // [85] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#59 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 @@ -5960,13 +6063,28 @@ print_char: { jmp breturn // print_char::@return breturn: - // [89] return + // [86] return + rts +} + // sid_rnd +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + .label return = $5e + .label return_2 = $54 + // [87] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 + lda SID_VOICE3_OSC + sta return + jmp breturn + // sid_rnd::@return + breturn: + // [88] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [91] call memset + // [90] call memset // [44] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: // [44] phi (byte) memset::c#4 = (byte) ' ' [phi:print_cls->memset#0] -- vbuz1=vbuc1 @@ -5981,49 +6099,49 @@ print_cls: { jmp breturn // print_cls::@return breturn: - // [92] return + // [91] return rts } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [93] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [92] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff sta SID_VOICE3_FREQ lda #>$ffff sta SID_VOICE3_FREQ+1 - // [94] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [93] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL jmp breturn // sid_rnd_init::@return breturn: - // [95] return + // [94] return rts } // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center -// init_angle_screen(byte* zeropage($47) screen) +// init_angle_screen(byte* zeropage($49) screen) init_angle_screen: { - .label _3 = $5d - .label _4 = $5e - .label _7 = $61 - .label _11 = $6c - .label _13 = $6f - .label _14 = $70 - .label _15 = $71 - .label screen = $47 + .label _3 = $5f + .label _4 = $60 + .label _7 = $63 + .label _11 = $6e + .label _13 = $71 + .label _14 = $72 + .label _15 = $73 + .label screen = $49 .label screen_topline = $19 .label screen_bottomline = $1b - .label xw = $5f - .label yw = $62 - .label angle_w = $6a - .label ang_w = $6e + .label xw = $61 + .label yw = $64 + .label angle_w = $6c + .label ang_w = $70 .label x = $1d .label xb = $1e .label y = $18 - // [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 + // [95] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda screen clc adc #<$28*$c @@ -6031,7 +6149,7 @@ init_angle_screen: { lda screen+1 adc #>$28*$c sta screen_topline+1 - // [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 + // [96] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda screen clc adc #<$28*$c @@ -6039,105 +6157,74 @@ init_angle_screen: { lda screen+1 adc #>$28*$c sta screen_bottomline+1 - // [98] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + // [97] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] b1_from_init_angle_screen: - // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy - // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy - // [98] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [97] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy + // [97] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy + // [97] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y jmp b1 - // [98] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] + // [97] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] b1_from_b4: - // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy - // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy - // [98] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy + // [97] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy + // [97] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy + // [97] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy jmp b1 // init_angle_screen::@1 b1: - // [99] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - b2_from_b1: - // [99] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [98] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + b3_from_b1: + // [98] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [99] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [98] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b2 - // init_angle_screen::@2 - b2: - // [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - jmp b4 - // init_angle_screen::@4 - b4: - // [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b4 - jmp breturn - // init_angle_screen::@return - breturn: - // [105] return - rts + jmp b3 + // [98] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + b3_from_b2: + // [98] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [98] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy + jmp b3 // init_angle_screen::@3 b3: - // [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [99] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta _3 - // [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 + // [100] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc _3 sta _4 - // [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [101] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _4 ldy #0 sta xw+1 sty xw - // [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [102] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda y asl sta _7 - // [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [103] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _7 ldy #0 sta yw+1 sty yw - // [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 + // [104] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 lda xw sta atan2_16.x lda xw+1 sta atan2_16.x+1 - // [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 + // [105] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 lda yw sta atan2_16.y lda yw+1 sta atan2_16.y+1 - // [113] call atan2_16 + // [106] call atan2_16 jsr atan2_16 - // [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 + // [107] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 lda atan2_16.return sta atan2_16.return_2 lda atan2_16.return+1 @@ -6145,12 +6232,12 @@ init_angle_screen: { jmp b5 // init_angle_screen::@5 b5: - // [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 + // [108] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 lda atan2_16.return_2 sta angle_w lda atan2_16.return_2+1 sta angle_w+1 - // [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 + // [109] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 lda #$80 clc adc angle_w @@ -6158,60 +6245,92 @@ init_angle_screen: { lda #0 adc angle_w+1 sta _11+1 - // [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [110] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w - // [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [111] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 + // [112] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 lda ang_w eor #$ff clc adc #1 sta _13 - // [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 + // [113] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 lda _13 ldy xb sta (screen_topline),y - // [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 + // [114] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 lax ang_w axs #-[$80] stx _14 - // [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 + // [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 lda _14 ldy x sta (screen_topline),y - // [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 + // [116] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$80 sec sbc ang_w sta _15 - // [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 + // [117] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 lda _15 ldy x sta (screen_bottomline),y - // [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [118] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [119] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [99] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - b2_from_b5: - // [99] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [99] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp b2 + // init_angle_screen::@2 + b2: + // [120] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3_from_b2 + jmp b4 + // init_angle_screen::@4 + b4: + // [121] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // [122] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // [123] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [124] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b4 + jmp breturn + // init_angle_screen::@return + breturn: + // [125] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($64) x, signed word zeropage($66) y) +// atan2_16(signed word zeropage($66) x, signed word zeropage($68) y) atan2_16: { .label _2 = $1f .label _7 = $21 - .label _23 = $73 - .label _24 = $72 + .label _23 = $75 + .label _24 = $74 .label yi = $1f .label xi = $21 .label angle = $26 @@ -6222,19 +6341,19 @@ atan2_16: { .label angle_3 = $24 .label i = $23 .label return = $26 - .label x = $64 - .label y = $66 - .label return_2 = $68 + .label x = $66 + .label y = $68 + .label return_2 = $6a .label angle_6 = $24 .label angle_12 = $24 .label angle_13 = $24 - // [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + // [126] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda y+1 bpl b1 jmp b2 // atan2_16::@2 b2: - // [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [127] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc y @@ -6242,20 +6361,20 @@ atan2_16: { lda #0 sbc y+1 sta _2+1 - // [129] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [128] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] b3_from_b1: b3_from_b2: - // [129] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + // [128] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy jmp b3 // atan2_16::@3 b3: - // [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [129] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda x+1 bpl b4 jmp b5 // atan2_16::@5 b5: - // [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [130] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc x @@ -6263,54 +6382,54 @@ atan2_16: { lda #0 sbc x+1 sta _7+1 - // [132] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [131] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] b6_from_b4: b6_from_b5: - // [132] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + // [131] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy jmp b6 // atan2_16::@6 b6: - // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [132] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] b10_from_b6: - // [133] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [132] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 lda #<0 sta angle_12 lda #>0 sta angle_12+1 - // [133] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 + // [132] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 lda #0 sta i - // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [133] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [132] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [132] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy jmp b10 // atan2_16::@10 b10: - // [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [133] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda yi+1 bne b11 lda yi bne b11 - // [135] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [134] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] b12_from_b10: b12_from_b19: - // [135] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [134] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy jmp b12 // atan2_16::@12 b12: - // [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 + // [135] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 lda angle_6+1 lsr sta angle+1 lda angle_6 ror sta angle - // [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [136] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda x+1 bpl b7_from_b12 jmp b21 // atan2_16::@21 b21: - // [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [137] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc angle @@ -6318,20 +6437,20 @@ atan2_16: { lda #>$8000 sbc angle+1 sta angle+1 - // [139] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [138] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] b7_from_b12: b7_from_b21: - // [139] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [138] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy jmp b7 // atan2_16::@7 b7: - // [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [139] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda y+1 bpl b8_from_b7 jmp b9 // atan2_16::@9 b9: - // [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [140] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc angle @@ -6339,81 +6458,81 @@ atan2_16: { lda #0 sbc angle+1 sta angle+1 - // [142] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [141] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] b8_from_b7: b8_from_b9: - // [142] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [141] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy jmp b8 // atan2_16::@8 b8: jmp breturn // atan2_16::@return breturn: - // [143] return + // [142] return rts // atan2_16::@11 b11: - // [144] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 + // [143] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 lda i sta shift - // [145] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [144] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda xi sta xd lda xi+1 sta xd+1 - // [146] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [145] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda yi sta yd lda yi+1 sta yd+1 - // [147] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [146] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] b13_from_b11: b13_from_b14: - // [147] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy - // [147] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy - // [147] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [146] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy + // [146] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy + // [146] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy jmp b13 // atan2_16::@13 b13: - // [148] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 + // [147] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 lda shift cmp #2 bcs b14 jmp b15 // atan2_16::@15 b15: - // [149] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 + // [148] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp shift beq b17_from_b15 jmp b16 // atan2_16::@16 b16: - // [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [149] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda xd+1 cmp #$80 ror xd+1 ror xd - // [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [150] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda yd+1 cmp #$80 ror yd+1 ror yd - // [152] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [151] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] b17_from_b15: b17_from_b16: - // [152] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy - // [152] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy + // [151] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy + // [151] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy jmp b17 // atan2_16::@17 b17: - // [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [152] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda yi+1 bpl b18 jmp b20 // atan2_16::@20 b20: - // [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [153] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda xi sec sbc yd @@ -6421,7 +6540,7 @@ atan2_16: { lda xi+1 sbc yd+1 sta xi+1 - // [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [154] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda yi clc adc xd @@ -6429,11 +6548,11 @@ atan2_16: { lda yi+1 adc xd+1 sta yi+1 - // [156] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [155] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _24 - // [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 + // [156] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 ldy _24 sec lda angle_3 @@ -6442,31 +6561,31 @@ atan2_16: { lda angle_3+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta angle_3+1 - // [158] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [157] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] b19_from_b18: b19_from_b20: - // [158] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy - // [158] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [158] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy + // [157] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy + // [157] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [157] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy jmp b19 // atan2_16::@19 b19: - // [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 + // [158] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 inc i - // [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 + // [159] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 lda #CORDIC_ITERATIONS_16-1+1 cmp i beq b12_from_b19 - // [133] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [132] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] b10_from_b19: - // [133] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [133] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [133] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [132] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [132] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [132] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [132] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp b10 // atan2_16::@18 b18: - // [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [160] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda xi clc adc yd @@ -6474,7 +6593,7 @@ atan2_16: { lda xi+1 adc yd+1 sta xi+1 - // [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [161] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda yi sec sbc xd @@ -6482,11 +6601,11 @@ atan2_16: { lda yi+1 sbc xd+1 sta yi+1 - // [163] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [162] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _23 - // [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 + // [163] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 ldy _23 clc lda angle_2 @@ -6498,7 +6617,7 @@ atan2_16: { jmp b19_from_b18 // atan2_16::@14 b14: - // [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [164] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda xd+1 cmp #$80 ror xd+1 @@ -6507,7 +6626,7 @@ atan2_16: { cmp #$80 ror xd+1 ror xd - // [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [165] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda yd+1 cmp #$80 ror yd+1 @@ -6516,13 +6635,13 @@ atan2_16: { cmp #$80 ror yd+1 ror yd - // [167] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 + // [166] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 dec shift dec shift jmp b13_from_b14 // atan2_16::@4 b4: - // [168] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [167] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda x sta xi lda x+1 @@ -6530,7 +6649,7 @@ atan2_16: { jmp b6_from_b4 // atan2_16::@1 b1: - // [169] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [168] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda y sta yi lda y+1 @@ -6548,26 +6667,26 @@ init_dist_screen: { .label _16 = $35 .label screen = $2e .label screen_bottomline = $30 - .label y2 = $74 + .label y2 = $76 .label yd = $32 - .label yds = $77 - .label x2 = $79 + .label yds = $79 + .label x2 = $7b .label screen_topline = $2e .label y = $2d .label xd = $35 - .label xds = $7c - .label ds = $7e - .label d = $83 + .label xds = $7e + .label ds = $80 + .label d = $85 .label x = $33 .label xb = $34 - // [171] call init_squares + // [170] call init_squares // [242] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares jmp b11 // init_dist_screen::@11 b11: - // [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 + // [171] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 lda screen clc adc #<$28*$18 @@ -6575,54 +6694,54 @@ init_dist_screen: { lda screen+1 adc #>$28*$18 sta screen_bottomline+1 - // [173] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] + // [172] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] b1_from_b11: - // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy - // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy - // [173] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 + // [172] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy + // [172] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy + // [172] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y jmp b1 - // [173] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] + // [172] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] b1_from_b7: - // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy - // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy - // [173] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy + // [172] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy + // [172] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy + // [172] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy jmp b1 // init_dist_screen::@1 b1: - // [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [173] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda y asl sta y2 - // [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuz1_ge_vbuc1_then_la1 + // [174] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuz1_ge_vbuc1_then_la1 lda y2 cmp #$18 bcs b2 jmp b3 // init_dist_screen::@3 b3: - // [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2 + // [175] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$18 sec sbc y2 sta _5 - // [177] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] + // [176] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] b4_from_b2: b4_from_b3: - // [177] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy + // [176] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy jmp b4 // init_dist_screen::@4 b4: - // [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 + // [177] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 lda yd sta sqr.val - // [179] call sqr + // [178] call sqr // [238] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from_b4: // [238] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr - // [180] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [179] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return sta sqr.return_2 lda sqr.return+1 @@ -6630,90 +6749,59 @@ init_dist_screen: { jmp b12 // init_dist_screen::@12 b12: - // [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 + // [180] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 lda sqr.return_2 sta yds lda sqr.return_2+1 sta yds+1 - // [182] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - b5_from_b12: - // [182] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [181] phi from init_dist_screen::@12 to init_dist_screen::@6 [phi:init_dist_screen::@12->init_dist_screen::@6] + b6_from_b12: + // [181] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@6#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [182] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [181] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@6#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b5 - // init_dist_screen::@5 - b5: - // [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b6 - jmp b7 - // init_dist_screen::@7 - b7: - // [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - // [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - // [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 - inc y - // [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b7 - jmp breturn - // init_dist_screen::@return - breturn: - // [188] return - rts + jmp b6 + // [181] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6] + b6_from_b5: + // [181] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy + // [181] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy + jmp b6 // init_dist_screen::@6 b6: - // [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [182] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta x2 - // [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuz1_ge_vbuc1_then_la1 + // [183] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuz1_ge_vbuc1_then_la1 lda x2 cmp #$27 bcs b8 jmp b9 // init_dist_screen::@9 b9: - // [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 + // [184] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc x2 sta _14 - // [192] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [185] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] b10_from_b8: b10_from_b9: - // [192] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [185] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy jmp b10 // init_dist_screen::@10 b10: - // [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 + // [186] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 lda xd sta sqr.val - // [194] call sqr + // [187] call sqr // [238] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] sqr_from_b10: // [238] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr - // [195] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [188] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return sta sqr.return_3 lda sqr.return+1 @@ -6721,12 +6809,12 @@ init_dist_screen: { jmp b13 // init_dist_screen::@13 b13: - // [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 + // [189] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 lda sqr.return_3 sta xds lda sqr.return_3+1 sta xds+1 - // [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 + // [190] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 lda xds clc adc yds @@ -6734,57 +6822,89 @@ init_dist_screen: { lda xds+1 adc yds+1 sta ds+1 - // [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 + // [191] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 lda ds sta sqrt.val lda ds+1 sta sqrt.val+1 - // [199] call sqrt + // [192] call sqrt jsr sqrt - // [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 + // [193] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 lda sqrt.return sta sqrt.return_2 jmp b14 // init_dist_screen::@14 b14: - // [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 + // [194] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 lda sqrt.return_2 sta d - // [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [195] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy x sta (screen_topline),y - // [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [196] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy x sta (screen_bottomline),y - // [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy xb sta (screen_topline),y - // [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy xb sta (screen_bottomline),y - // [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [199] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 inc x - // [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [200] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 dec xb - // [182] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] - b5_from_b14: - // [182] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy - // [182] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy jmp b5 + // init_dist_screen::@5 + b5: + // [201] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b6_from_b5 + jmp b7 + // init_dist_screen::@7 + b7: + // [202] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + // [203] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + // [204] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + inc y + // [205] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b7 + jmp breturn + // init_dist_screen::@return + breturn: + // [206] return + rts // init_dist_screen::@8 b8: - // [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 + // [207] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 lax x2 axs #$27 stx _16 jmp b10_from_b8 // init_dist_screen::@2 b2: - // [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1 + // [208] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1 lax y2 axs #$18 stx _7 @@ -6794,29 +6914,29 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($80) val) +// sqrt(word zeropage($82) val) sqrt: { - .label _1 = $8c - .label _3 = $8a - .label found = $88 - .label return = $8e - .label val = $80 - .label return_2 = $82 - // [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 + .label _1 = $8e + .label _3 = $8c + .label found = $8a + .label return = $90 + .label val = $82 + .label return_2 = $84 + // [209] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 lda val sta bsearch16u.key lda val+1 sta bsearch16u.key+1 - // [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [210] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES - sta bsearch16u.items + sta bsearch16u.items_1 lda SQUARES+1 - sta bsearch16u.items+1 - // [212] call bsearch16u - // [219] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] + sta bsearch16u.items_1+1 + // [211] call bsearch16u + // [218] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: jsr bsearch16u - // [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 + // [212] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 lda bsearch16u.return sta bsearch16u.return_3 lda bsearch16u.return+1 @@ -6824,12 +6944,12 @@ sqrt: { jmp b1 // sqrt::@1 b1: - // [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 + // [213] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 lda bsearch16u.return_3 sta found lda bsearch16u.return_3+1 sta found+1 - // [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3 + // [214] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3 lda found sec sbc SQUARES @@ -6837,20 +6957,20 @@ sqrt: { lda found+1 sbc SQUARES+1 sta _3+1 - // [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 + // [215] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 lda _3+1 lsr sta _1+1 lda _3 ror sta _1 - // [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 + // [216] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 lda _1 sta return jmp breturn // sqrt::@return breturn: - // [218] return + // [217] return rts } // bsearch16u @@ -6859,34 +6979,112 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($84) key, word* zeropage($36) items, byte zeropage($38) num) +// bsearch16u(word zeropage($86) key, word* zeropage($38) items, byte zeropage($3a) num) bsearch16u: { - .label _2 = $36 - .label _6 = $8f - .label _16 = $90 - .label pivot = $91 + .label _2 = $38 + .label _6 = $91 + .label _16 = $92 + .label pivot = $38 .label result = $93 - .label return = $36 - .label num = $38 - .label items = $36 - .label key = $84 - .label return_3 = $86 - // [220] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - b3_from_bsearch16u: - // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [220] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 + .label return = $38 + .label num = $3a + .label items = $38 + .label key = $86 + .label items_1 = $36 + .label return_3 = $88 + .label items_10 = $36 + .label items_16 = $36 + // [219] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4] + b4_from_bsearch16u: + // [219] phi (word*) bsearch16u::items#10 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@4#0] -- register_copy + // [219] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuz1=vbuc1 lda #NUM_SQUARES sta num + jmp b4 + // bsearch16u::@4 + b4: + // [220] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuz1=vbuz2_ror_1 + lda num + lsr + sta _6 + // [221] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda _6 + asl + sta _16 + // [222] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 + lda _16 + clc + adc items_10 + sta pivot + lda #0 + adc items_10+1 + sta pivot+1 + // [223] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + sec + lda key + ldy #0 + sbc (pivot),y + sta result + lda key+1 + iny + sbc (pivot),y + sta result+1 + // [224] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + lda result+1 + bne b6 + lda result + bne b6 + // [225] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return] + breturn_from_b2: + breturn_from_b4: + // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy + jmp breturn + // bsearch16u::@return + breturn: + // [226] return + rts + // bsearch16u::@6 + b6: + // [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 + lda result+1 + bmi b10 + bne !+ + lda result + beq b10 + !: + jmp b8 + // bsearch16u::@8 + b8: + // [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + lda #1*SIZEOF_WORD + clc + adc items + sta items + bcc !+ + inc items+1 + !: + // [229] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuz1=_dec_vbuz1 + dec num + // [230] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7] + b7_from_b10: + b7_from_b8: + // [230] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#19 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy + // [230] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy + jmp b7 + // bsearch16u::@7 + b7: + // [231] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + lsr num jmp b3 // bsearch16u::@3 b3: - // [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 + // [232] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuz1_gt_0_then_la1 lda num - bne b4 + bne b9 jmp b5 // bsearch16u::@5 b5: - // [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [233] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp key+1 @@ -6900,7 +7098,7 @@ bsearch16u: { jmp b1 // bsearch16u::@1 b1: - // [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [234] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -6908,112 +7106,45 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [224] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [235] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] b2_from_b1: b2_from_b5: - // [224] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [235] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp b2 // bsearch16u::@2 b2: - // [225] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - breturn_from_b2: - breturn_from_b8: - // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy - jmp breturn - // bsearch16u::@return - breturn: - // [226] return - rts - // bsearch16u::@4 - b4: - // [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 - lda num - lsr - sta _6 - // [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 - lda _6 - asl - sta _16 - // [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 - lda _16 - clc - adc items - sta pivot - lda #0 - adc items+1 - sta pivot+1 - // [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 - sec - lda key - ldy #0 - sbc (pivot),y - sta result - lda key+1 - iny - sbc (pivot),y - sta result+1 - // [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 - lda result+1 - bne b6 - lda result - bne b6 - jmp b8 - // bsearch16u::@8 - b8: - // [232] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 - lda pivot - sta return - lda pivot+1 - sta return+1 - jmp breturn_from_b8 - // bsearch16u::@6 - b6: - // [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 - lda result+1 - bmi b7_from_b6 - bne !+ - lda result - beq b7_from_b6 - !: - jmp b9 + jmp breturn_from_b2 // bsearch16u::@9 b9: - // [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 - lda #1*SIZEOF_WORD - clc - adc pivot + // [236] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 + lda items + sta items_16 + lda items+1 + sta items_16+1 + // [219] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4] + b4_from_b9: + // [219] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy + // [219] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy + jmp b4 + // bsearch16u::@10 + b10: + // [237] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 + lda items_10 sta items - lda #0 - adc pivot+1 + lda items_10+1 sta items+1 - // [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 - dec num - // [236] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - b7_from_b6: - b7_from_b9: - // [236] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [236] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy - jmp b7 - // bsearch16u::@7 - b7: - // [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 - lsr num - // [220] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - b3_from_b7: - // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [220] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy - jmp b3 + jmp b7_from_b10 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() -// sqr(byte zeropage($39) val) +// sqr(byte zeropage($3b) val) sqr: { .label _0 = $95 .label return = $96 - .label val = $39 - .label return_2 = $75 - .label return_3 = $7a + .label val = $3b + .label return_2 = $77 + .label return_3 = $7c // [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda val asl @@ -7037,9 +7168,9 @@ sqr: { init_squares: { .label _3 = $9a .label _4 = $9b - .label squares = $3c - .label sqr = $3a - .label i = $3e + .label squares = $3e + .label sqr = $3c + .label i = $40 // [243] call malloc // [255] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: @@ -7129,10 +7260,10 @@ init_squares: { // malloc // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. -// malloc(word zeropage($41) size) +// malloc(word zeropage($43) size) malloc: { .label mem = $9c - .label size = $41 + .label size = $43 // [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz3 lda heap_head sec @@ -7192,138 +7323,139 @@ Statement [41] (byte) sin_offset_x#12 ← (byte) sin_offset_x#10 - (byte) 3 [ SC Removing always clobbered register reg byte x as potential for zp ZP_BYTE:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] Statement [42] (byte) sin_offset_y#12 ← (byte) sin_offset_y#10 - (byte) 7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ) always clobbers reg byte a reg byte x Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] -Statement [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] main:7::make_plasma_charset:14::print_cls:55::memset:90 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ memset::c#4 ] -Statement [46] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [50] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [46] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] main:7::make_plasma_charset:14::print_cls:55::memset:90 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:90 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [50] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:90 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ memset::c#4 ] -Statement [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 [ make_plasma_charset::c#2 print_char_cursor#18 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a -Statement [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$3 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$3 ] ) always clobbers reg byte a -Statement [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$12 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$12 ] ) always clobbers reg byte a -Statement [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$10 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$10 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:81 [ make_plasma_charset::s#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ] -Statement [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$11 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$11 ] ) always clobbers reg byte a -Statement [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$16 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$16 ] ) always clobbers reg byte a -Statement [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:81 [ make_plasma_charset::s#0 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] -Statement [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#2) [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] -Statement [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:7::make_plasma_charset:14::print_char:66 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a reg byte y -Statement [93] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a -Statement [94] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a -Statement [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a -Statement [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [57] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#16 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::$3 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::$3 ] ) always clobbers reg byte a +Statement [66] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#10 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#10) [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::ii#10 make_plasma_charset::b#1 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::ii#10 make_plasma_charset::b#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:83 [ make_plasma_charset::s#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ make_plasma_charset::i#13 make_plasma_charset::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ make_plasma_charset::ii#10 make_plasma_charset::ii#1 ] +Statement [70] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#16 << (byte) 3 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$10 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$10 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ make_plasma_charset::b#10 make_plasma_charset::b#2 make_plasma_charset::b#1 ] +Statement [71] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#13 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$11 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$11 ] ) always clobbers reg byte a +Statement [72] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$16 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$16 ] ) always clobbers reg byte a +Statement [73] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:83 [ make_plasma_charset::s#0 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:21 [ make_plasma_charset::i#13 make_plasma_charset::i#1 ] +Statement [76] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#16 & (byte) 7 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::$12 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::$12 ] ) always clobbers reg byte a +Statement [82] if((word) make_plasma_charset::c#1<(word) $100) goto make_plasma_charset::@2 [ make_plasma_charset::c#1 print_char_cursor#18 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#1 print_char_cursor#18 ] ) always clobbers reg byte a +Statement [84] *((byte*) print_char_cursor#59) ← (const byte) print_char::ch#0 [ print_char_cursor#59 ] ( main:7::make_plasma_charset:14::print_char:79 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 ] ) always clobbers reg byte a reg byte y +Statement [92] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a +Statement [93] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a +Statement [95] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a +Statement [96] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a +Statement [99] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Statement [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Statement [100] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [101] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:110 [ init_angle_screen::ang_w#0 ] -Statement [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:110 [ init_angle_screen::ang_w#0 ] -Statement [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:29 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:30 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Statement [102] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [103] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [104] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [105] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [107] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [108] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [109] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [110] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [111] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:112 [ init_angle_screen::ang_w#0 ] +Statement [112] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:112 [ init_angle_screen::ang_w#0 ] +Statement [113] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [114] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [116] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [117] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [121] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [122] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [126] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [127] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [129] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [130] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [133] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ atan2_16::i#2 atan2_16::i#1 ] -Statement [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [145] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [135] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [136] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [137] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [139] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [140] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [144] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:40 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -Statement [146] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [156] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [163] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [168] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [169] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a -Statement [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [145] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [149] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [150] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [152] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [153] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [154] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [155] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [156] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [160] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [161] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [162] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [163] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [164] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [165] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [167] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [168] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [171] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [173] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Statement [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a -Statement [180] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a -Statement [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a -Statement [195] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y +Statement [175] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a +Statement [179] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a +Statement [180] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [182] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:51 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Statement [184] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a +Statement [188] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [189] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [190] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [191] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [202] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [203] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [209] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [210] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [212] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [213] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [214] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [215] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [216] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [220] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:58 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] +Statement [221] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [222] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [223] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [232] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:62 [ init_squares::i#2 init_squares::i#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:62 [ init_squares::i#2 init_squares::i#1 ] -Statement [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a -Statement [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:51 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:52 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:58 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] +Statement [224] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [233] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y +Statement [234] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [236] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a +Statement [237] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ) always clobbers reg byte a +Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:187 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:187 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:64 [ init_squares::i#2 init_squares::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:64 [ init_squares::i#2 init_squares::i#1 ] +Statement [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:170::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:170::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a Statement [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a @@ -7341,115 +7473,116 @@ Statement [37] (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#4 + (byte) Statement [38] (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#4 + (byte) $28 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] ) always clobbers reg byte a Statement [41] (byte) sin_offset_x#12 ← (byte) sin_offset_x#10 - (byte) 3 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] ) always clobbers reg byte a reg byte x Statement [42] (byte) sin_offset_y#12 ← (byte) sin_offset_y#10 - (byte) 7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ) always clobbers reg byte a reg byte x -Statement [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a -Statement [46] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [50] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 [ make_plasma_charset::c#2 print_char_cursor#18 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a -Statement [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$3 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$3 ] ) always clobbers reg byte a -Statement [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$12 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$12 ] ) always clobbers reg byte a -Statement [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$10 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$10 ] ) always clobbers reg byte a -Statement [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$11 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$11 ] ) always clobbers reg byte a -Statement [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$16 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$16 ] ) always clobbers reg byte a -Statement [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ) always clobbers reg byte a reg byte y -Statement [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#2) [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ) always clobbers reg byte a -Statement [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:7::make_plasma_charset:14::print_char:66 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a reg byte y -Statement [93] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a -Statement [94] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a -Statement [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a -Statement [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [145] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [146] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [156] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [163] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [168] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [169] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a -Statement [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a -Statement [180] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a -Statement [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a -Statement [195] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:131 [ init_dist_screen::d#0 ] -Statement [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y -Statement [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Statement [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Statement [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Statement [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [232] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Statement [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a -Statement [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] main:7::make_plasma_charset:14::print_cls:55::memset:90 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [46] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] main:7::make_plasma_charset:14::print_cls:55::memset:90 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:90 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [50] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:90 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [57] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#16 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::$3 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::$3 ] ) always clobbers reg byte a +Statement [66] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#10 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#10) [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::ii#10 make_plasma_charset::b#1 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::ii#10 make_plasma_charset::b#1 ] ) always clobbers reg byte a +Statement [70] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#16 << (byte) 3 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$10 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$10 ] ) always clobbers reg byte a +Statement [71] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#13 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$11 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$11 ] ) always clobbers reg byte a +Statement [72] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$16 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$16 ] ) always clobbers reg byte a +Statement [73] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 ] ) always clobbers reg byte a reg byte y +Statement [76] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#16 & (byte) 7 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::$12 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::$12 ] ) always clobbers reg byte a +Statement [82] if((word) make_plasma_charset::c#1<(word) $100) goto make_plasma_charset::@2 [ make_plasma_charset::c#1 print_char_cursor#18 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#1 print_char_cursor#18 ] ) always clobbers reg byte a +Statement [84] *((byte*) print_char_cursor#59) ← (const byte) print_char::ch#0 [ print_char_cursor#59 ] ( main:7::make_plasma_charset:14::print_char:79 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 ] ) always clobbers reg byte a reg byte y +Statement [92] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a +Statement [93] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a +Statement [95] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a +Statement [96] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a +Statement [99] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [100] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [101] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [102] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [103] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [104] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [105] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [107] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [108] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [109] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [110] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [111] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [112] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [113] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [114] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [116] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [117] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [121] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [122] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [126] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [127] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [129] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [130] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [133] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [135] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [136] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [137] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [139] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [140] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [144] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [145] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [149] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [150] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [152] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [153] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [154] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [155] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [156] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [160] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [161] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [162] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [163] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [164] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [165] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [167] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [168] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [171] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [173] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [175] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a +Statement [179] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a +Statement [180] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [182] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [184] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a +Statement [188] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [189] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [190] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [191] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [195] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:133 [ init_dist_screen::d#0 ] +Statement [196] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 ] ) always clobbers reg byte y +Statement [202] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [203] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [209] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [210] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [212] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [213] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [214] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [215] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [216] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [220] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [221] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [222] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [223] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [224] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [233] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y +Statement [234] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [236] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a +Statement [237] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ) always clobbers reg byte a +Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:187 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:187 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:170::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:170::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a Statement [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a @@ -7467,114 +7600,115 @@ Statement [37] (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#4 + (byte) Statement [38] (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#4 + (byte) $28 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] ) always clobbers reg byte a Statement [41] (byte) sin_offset_x#12 ← (byte) sin_offset_x#10 - (byte) 3 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] ) always clobbers reg byte a reg byte x Statement [42] (byte) sin_offset_y#12 ← (byte) sin_offset_y#10 - (byte) 7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ) always clobbers reg byte a reg byte x -Statement [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a -Statement [46] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [50] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 [ make_plasma_charset::c#2 print_char_cursor#18 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a -Statement [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$3 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$3 ] ) always clobbers reg byte a -Statement [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$12 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$12 ] ) always clobbers reg byte a -Statement [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$10 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$10 ] ) always clobbers reg byte a -Statement [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$11 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$11 ] ) always clobbers reg byte a -Statement [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$16 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$16 ] ) always clobbers reg byte a -Statement [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ) always clobbers reg byte a reg byte y -Statement [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#2) [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ) always clobbers reg byte a -Statement [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:7::make_plasma_charset:14::print_char:66 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a reg byte y -Statement [93] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a -Statement [94] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a -Statement [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a -Statement [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [145] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [146] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [156] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [163] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [168] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [169] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a -Statement [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a -Statement [180] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a -Statement [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a -Statement [195] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y -Statement [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Statement [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Statement [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Statement [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [232] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Statement [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a -Statement [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] main:7::make_plasma_charset:14::print_cls:55::memset:90 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [46] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] main:7::make_plasma_charset:14::print_cls:55::memset:90 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:90 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [50] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:90 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [57] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#16 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::$3 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::$3 ] ) always clobbers reg byte a +Statement [66] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#10 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#10) [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::ii#10 make_plasma_charset::b#1 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::ii#10 make_plasma_charset::b#1 ] ) always clobbers reg byte a +Statement [70] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#16 << (byte) 3 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$10 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$10 ] ) always clobbers reg byte a +Statement [71] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#13 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$11 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$11 ] ) always clobbers reg byte a +Statement [72] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$16 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 make_plasma_charset::b#2 make_plasma_charset::$16 ] ) always clobbers reg byte a +Statement [73] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::s#0 make_plasma_charset::i#13 ] ) always clobbers reg byte a reg byte y +Statement [76] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#16 & (byte) 7 [ make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::$12 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 make_plasma_charset::$12 ] ) always clobbers reg byte a +Statement [82] if((word) make_plasma_charset::c#1<(word) $100) goto make_plasma_charset::@2 [ make_plasma_charset::c#1 print_char_cursor#18 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#1 print_char_cursor#18 ] ) always clobbers reg byte a +Statement [84] *((byte*) print_char_cursor#59) ← (const byte) print_char::ch#0 [ print_char_cursor#59 ] ( main:7::make_plasma_charset:14::print_char:79 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#16 print_char_cursor#59 ] ) always clobbers reg byte a reg byte y +Statement [92] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a +Statement [93] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a +Statement [95] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a +Statement [96] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a +Statement [99] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [100] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [101] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [102] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [103] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [104] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [105] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [107] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [108] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [109] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [110] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [111] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [112] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [113] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [114] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [116] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [117] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [121] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [122] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [126] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [127] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [129] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [130] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [133] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [135] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [136] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [137] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [139] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [140] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [144] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [145] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [149] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [150] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [152] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [153] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [154] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [155] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [156] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [160] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [161] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [162] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [163] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [164] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [165] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [167] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [168] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:12::atan2_16:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [171] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [173] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [175] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a +Statement [179] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a +Statement [180] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [182] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [184] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a +Statement [188] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [189] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [190] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [191] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [195] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [196] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 ] ) always clobbers reg byte y +Statement [202] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [203] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [209] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [210] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [212] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [213] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [214] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [215] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [216] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:192 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [220] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [221] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [222] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [223] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [224] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [233] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y +Statement [234] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [236] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a +Statement [237] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ( main:7::init_dist_screen:10::sqrt:192::bsearch16u:211 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ) always clobbers reg byte a +Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:187 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:187 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:170 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:170::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:170::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] : zp ZP_BYTE:2 , Potential registers zp ZP_BYTE:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] : zp ZP_BYTE:3 , Potential registers zp ZP_WORD:4 [ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] : zp ZP_WORD:4 , @@ -7585,16 +7719,16 @@ Potential registers zp ZP_BYTE:11 [ doplasma::x#2 doplasma::x#1 ] : zp ZP_BYTE:1 Potential registers zp ZP_WORD:12 [ memset::str#3 ] : zp ZP_WORD:12 , Potential registers zp ZP_BYTE:14 [ memset::c#4 ] : zp ZP_BYTE:14 , reg byte x , Potential registers zp ZP_WORD:15 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp ZP_WORD:15 , -Potential registers zp ZP_WORD:17 [ make_plasma_charset::c#2 make_plasma_charset::c#1 ] : zp ZP_WORD:17 , -Potential registers zp ZP_WORD:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] : zp ZP_WORD:19 , -Potential registers zp ZP_BYTE:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] : zp ZP_BYTE:21 , reg byte x , -Potential registers zp ZP_BYTE:22 [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:23 [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ] : zp ZP_BYTE:23 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:17 [ make_plasma_charset::c#16 make_plasma_charset::c#1 ] : zp ZP_WORD:17 , +Potential registers zp ZP_WORD:19 [ print_char_cursor#59 print_char_cursor#18 print_char_cursor#1 ] : zp ZP_WORD:19 , +Potential registers zp ZP_BYTE:21 [ make_plasma_charset::i#13 make_plasma_charset::i#1 ] : zp ZP_BYTE:21 , reg byte x , +Potential registers zp ZP_BYTE:22 [ make_plasma_charset::ii#10 make_plasma_charset::ii#1 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:23 [ make_plasma_charset::b#10 make_plasma_charset::b#2 make_plasma_charset::b#1 ] : zp ZP_BYTE:23 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp ZP_BYTE:24 , reg byte x , Potential registers zp ZP_WORD:25 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:25 , Potential registers zp ZP_WORD:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:27 , -Potential registers zp ZP_BYTE:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp ZP_BYTE:29 , reg byte x , -Potential registers zp ZP_BYTE:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp ZP_BYTE:30 , reg byte x , +Potential registers zp ZP_BYTE:29 [ init_angle_screen::x#5 init_angle_screen::x#1 ] : zp ZP_BYTE:29 , reg byte x , +Potential registers zp ZP_BYTE:30 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] : zp ZP_BYTE:30 , reg byte x , Potential registers zp ZP_WORD:31 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp ZP_WORD:31 , Potential registers zp ZP_WORD:33 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp ZP_WORD:33 , Potential registers zp ZP_BYTE:35 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:35 , reg byte x , reg byte y , @@ -7607,69 +7741,69 @@ Potential registers zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 Potential registers zp ZP_WORD:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] : zp ZP_WORD:46 , Potential registers zp ZP_WORD:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] : zp ZP_WORD:48 , Potential registers zp ZP_BYTE:50 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp ZP_BYTE:50 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp ZP_BYTE:51 , reg byte x , -Potential registers zp ZP_BYTE:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp ZP_BYTE:52 , reg byte x , +Potential registers zp ZP_BYTE:51 [ init_dist_screen::x#10 init_dist_screen::x#1 ] : zp ZP_BYTE:51 , reg byte x , +Potential registers zp ZP_BYTE:52 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] : zp ZP_BYTE:52 , reg byte x , Potential registers zp ZP_BYTE:53 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] : zp ZP_WORD:54 , -Potential registers zp ZP_BYTE:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] : zp ZP_BYTE:56 , reg byte x , -Potential registers zp ZP_BYTE:57 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp ZP_BYTE:57 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:58 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:58 , -Potential registers zp ZP_WORD:60 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp ZP_WORD:60 , -Potential registers zp ZP_BYTE:62 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:62 , reg byte x , -Potential registers zp ZP_WORD:63 [ heap_head#12 heap_head#1 ] : zp ZP_WORD:63 , -Potential registers zp ZP_WORD:65 [ malloc::size#3 ] : zp ZP_WORD:65 , -Potential registers zp ZP_WORD:67 [ SCREEN_DIST#0 ] : zp ZP_WORD:67 , -Potential registers zp ZP_WORD:69 [ SCREEN_ANGLE#0 ] : zp ZP_WORD:69 , -Potential registers zp ZP_WORD:71 [ init_angle_screen::screen#0 ] : zp ZP_WORD:71 , -Potential registers zp ZP_WORD:73 [ doplasma::sin_x#0 ] : zp ZP_WORD:73 , -Potential registers zp ZP_WORD:75 [ doplasma::sin_y#0 ] : zp ZP_WORD:75 , -Potential registers zp ZP_BYTE:77 [ doplasma::$2 ] : zp ZP_BYTE:77 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:78 [ memset::end#0 ] : zp ZP_WORD:78 , -Potential registers zp ZP_BYTE:80 [ make_plasma_charset::$3 ] : zp ZP_BYTE:80 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:81 [ make_plasma_charset::s#0 ] : zp ZP_BYTE:81 , reg byte x , -Potential registers zp ZP_BYTE:82 [ make_plasma_charset::$12 ] : zp ZP_BYTE:82 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:83 [ make_plasma_charset::$10 ] : zp ZP_WORD:83 , -Potential registers zp ZP_WORD:85 [ make_plasma_charset::$11 ] : zp ZP_WORD:85 , -Potential registers zp ZP_WORD:87 [ make_plasma_charset::$16 ] : zp ZP_WORD:87 , -Potential registers zp ZP_BYTE:89 [ sid_rnd::return#2 ] : zp ZP_BYTE:89 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:90 [ make_plasma_charset::$6 ] : zp ZP_BYTE:90 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:91 [ make_plasma_charset::$7 ] : zp ZP_BYTE:91 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:92 [ sid_rnd::return#0 ] : zp ZP_BYTE:92 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:93 [ init_angle_screen::$3 ] : zp ZP_BYTE:93 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:94 [ init_angle_screen::$4 ] : zp ZP_BYTE:94 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:95 [ init_angle_screen::xw#0 ] : zp ZP_WORD:95 , -Potential registers zp ZP_BYTE:97 [ init_angle_screen::$7 ] : zp ZP_BYTE:97 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:98 [ init_angle_screen::yw#0 ] : zp ZP_WORD:98 , -Potential registers zp ZP_WORD:100 [ atan2_16::x#0 ] : zp ZP_WORD:100 , -Potential registers zp ZP_WORD:102 [ atan2_16::y#0 ] : zp ZP_WORD:102 , -Potential registers zp ZP_WORD:104 [ atan2_16::return#2 ] : zp ZP_WORD:104 , -Potential registers zp ZP_WORD:106 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:106 , -Potential registers zp ZP_WORD:108 [ init_angle_screen::$11 ] : zp ZP_WORD:108 , -Potential registers zp ZP_BYTE:110 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:110 , reg byte x , -Potential registers zp ZP_BYTE:111 [ init_angle_screen::$13 ] : zp ZP_BYTE:111 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:112 [ init_angle_screen::$14 ] : zp ZP_BYTE:112 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:113 [ init_angle_screen::$15 ] : zp ZP_BYTE:113 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:114 [ atan2_16::$24 ] : zp ZP_BYTE:114 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:115 [ atan2_16::$23 ] : zp ZP_BYTE:115 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:116 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:116 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:117 [ sqr::return#2 ] : zp ZP_WORD:117 , -Potential registers zp ZP_WORD:119 [ init_dist_screen::yds#0 ] : zp ZP_WORD:119 , -Potential registers zp ZP_BYTE:121 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:121 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:122 [ sqr::return#3 ] : zp ZP_WORD:122 , -Potential registers zp ZP_WORD:124 [ init_dist_screen::xds#0 ] : zp ZP_WORD:124 , -Potential registers zp ZP_WORD:126 [ init_dist_screen::ds#0 ] : zp ZP_WORD:126 , -Potential registers zp ZP_WORD:128 [ sqrt::val#0 ] : zp ZP_WORD:128 , -Potential registers zp ZP_BYTE:130 [ sqrt::return#2 ] : zp ZP_BYTE:130 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:131 [ init_dist_screen::d#0 ] : zp ZP_BYTE:131 , reg byte a , reg byte x , -Potential registers zp ZP_WORD:132 [ bsearch16u::key#0 ] : zp ZP_WORD:132 , -Potential registers zp ZP_WORD:134 [ bsearch16u::return#3 ] : zp ZP_WORD:134 , -Potential registers zp ZP_WORD:136 [ sqrt::found#0 ] : zp ZP_WORD:136 , -Potential registers zp ZP_WORD:138 [ sqrt::$3 ] : zp ZP_WORD:138 , -Potential registers zp ZP_WORD:140 [ sqrt::$1 ] : zp ZP_WORD:140 , -Potential registers zp ZP_BYTE:142 [ sqrt::return#0 ] : zp ZP_BYTE:142 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:143 [ bsearch16u::$6 ] : zp ZP_BYTE:143 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:144 [ bsearch16u::$16 ] : zp ZP_BYTE:144 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:145 [ bsearch16u::pivot#0 ] : zp ZP_WORD:145 , +Potential registers zp ZP_WORD:54 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] : zp ZP_WORD:54 , +Potential registers zp ZP_WORD:56 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] : zp ZP_WORD:56 , +Potential registers zp ZP_BYTE:58 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] : zp ZP_BYTE:58 , reg byte x , +Potential registers zp ZP_BYTE:59 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp ZP_BYTE:59 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:60 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:60 , +Potential registers zp ZP_WORD:62 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp ZP_WORD:62 , +Potential registers zp ZP_BYTE:64 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:64 , reg byte x , +Potential registers zp ZP_WORD:65 [ heap_head#12 heap_head#1 ] : zp ZP_WORD:65 , +Potential registers zp ZP_WORD:67 [ malloc::size#3 ] : zp ZP_WORD:67 , +Potential registers zp ZP_WORD:69 [ SCREEN_DIST#0 ] : zp ZP_WORD:69 , +Potential registers zp ZP_WORD:71 [ SCREEN_ANGLE#0 ] : zp ZP_WORD:71 , +Potential registers zp ZP_WORD:73 [ init_angle_screen::screen#0 ] : zp ZP_WORD:73 , +Potential registers zp ZP_WORD:75 [ doplasma::sin_x#0 ] : zp ZP_WORD:75 , +Potential registers zp ZP_WORD:77 [ doplasma::sin_y#0 ] : zp ZP_WORD:77 , +Potential registers zp ZP_BYTE:79 [ doplasma::$2 ] : zp ZP_BYTE:79 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:80 [ memset::end#0 ] : zp ZP_WORD:80 , +Potential registers zp ZP_BYTE:82 [ make_plasma_charset::$3 ] : zp ZP_BYTE:82 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:83 [ make_plasma_charset::s#0 ] : zp ZP_BYTE:83 , reg byte x , +Potential registers zp ZP_BYTE:84 [ sid_rnd::return#2 ] : zp ZP_BYTE:84 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:85 [ make_plasma_charset::$6 ] : zp ZP_BYTE:85 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:86 [ make_plasma_charset::$7 ] : zp ZP_BYTE:86 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:87 [ make_plasma_charset::$10 ] : zp ZP_WORD:87 , +Potential registers zp ZP_WORD:89 [ make_plasma_charset::$11 ] : zp ZP_WORD:89 , +Potential registers zp ZP_WORD:91 [ make_plasma_charset::$16 ] : zp ZP_WORD:91 , +Potential registers zp ZP_BYTE:93 [ make_plasma_charset::$12 ] : zp ZP_BYTE:93 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:94 [ sid_rnd::return#0 ] : zp ZP_BYTE:94 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:95 [ init_angle_screen::$3 ] : zp ZP_BYTE:95 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:96 [ init_angle_screen::$4 ] : zp ZP_BYTE:96 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:97 [ init_angle_screen::xw#0 ] : zp ZP_WORD:97 , +Potential registers zp ZP_BYTE:99 [ init_angle_screen::$7 ] : zp ZP_BYTE:99 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:100 [ init_angle_screen::yw#0 ] : zp ZP_WORD:100 , +Potential registers zp ZP_WORD:102 [ atan2_16::x#0 ] : zp ZP_WORD:102 , +Potential registers zp ZP_WORD:104 [ atan2_16::y#0 ] : zp ZP_WORD:104 , +Potential registers zp ZP_WORD:106 [ atan2_16::return#2 ] : zp ZP_WORD:106 , +Potential registers zp ZP_WORD:108 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:108 , +Potential registers zp ZP_WORD:110 [ init_angle_screen::$11 ] : zp ZP_WORD:110 , +Potential registers zp ZP_BYTE:112 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:112 , reg byte x , +Potential registers zp ZP_BYTE:113 [ init_angle_screen::$13 ] : zp ZP_BYTE:113 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:114 [ init_angle_screen::$14 ] : zp ZP_BYTE:114 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:115 [ init_angle_screen::$15 ] : zp ZP_BYTE:115 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:116 [ atan2_16::$24 ] : zp ZP_BYTE:116 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:117 [ atan2_16::$23 ] : zp ZP_BYTE:117 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:118 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:118 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:119 [ sqr::return#2 ] : zp ZP_WORD:119 , +Potential registers zp ZP_WORD:121 [ init_dist_screen::yds#0 ] : zp ZP_WORD:121 , +Potential registers zp ZP_BYTE:123 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:123 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:124 [ sqr::return#3 ] : zp ZP_WORD:124 , +Potential registers zp ZP_WORD:126 [ init_dist_screen::xds#0 ] : zp ZP_WORD:126 , +Potential registers zp ZP_WORD:128 [ init_dist_screen::ds#0 ] : zp ZP_WORD:128 , +Potential registers zp ZP_WORD:130 [ sqrt::val#0 ] : zp ZP_WORD:130 , +Potential registers zp ZP_BYTE:132 [ sqrt::return#2 ] : zp ZP_BYTE:132 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:133 [ init_dist_screen::d#0 ] : zp ZP_BYTE:133 , reg byte a , reg byte x , +Potential registers zp ZP_WORD:134 [ bsearch16u::key#0 ] : zp ZP_WORD:134 , +Potential registers zp ZP_WORD:136 [ bsearch16u::return#3 ] : zp ZP_WORD:136 , +Potential registers zp ZP_WORD:138 [ sqrt::found#0 ] : zp ZP_WORD:138 , +Potential registers zp ZP_WORD:140 [ sqrt::$3 ] : zp ZP_WORD:140 , +Potential registers zp ZP_WORD:142 [ sqrt::$1 ] : zp ZP_WORD:142 , +Potential registers zp ZP_BYTE:144 [ sqrt::return#0 ] : zp ZP_BYTE:144 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:145 [ bsearch16u::$6 ] : zp ZP_BYTE:145 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:146 [ bsearch16u::$16 ] : zp ZP_BYTE:146 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:147 [ bsearch16u::result#0 ] : zp ZP_WORD:147 , Potential registers zp ZP_BYTE:149 [ sqr::$0 ] : zp ZP_BYTE:149 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:150 [ sqr::return#0 ] : zp ZP_WORD:150 , @@ -7679,154 +7813,152 @@ Potential registers zp ZP_BYTE:155 [ init_squares::$4 ] : zp ZP_BYTE:155 , reg b Potential registers zp ZP_WORD:156 [ malloc::mem#0 ] : zp ZP_WORD:156 , REGISTER UPLIFT SCOPES -Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:40 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:41 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:43 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:31 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:33 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:114 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:115 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:35 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:104 [ atan2_16::return#2 ] 50: zp ZP_WORD:38 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:100 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:102 [ atan2_16::y#0 ] -Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp ZP_WORD:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp ZP_BYTE:143 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:144 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:147 [ bsearch16u::result#0 ] 501: zp ZP_WORD:145 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:134 [ bsearch16u::return#3 ] 0.27: zp ZP_WORD:132 [ bsearch16u::key#0 ] -Uplift Scope [make_plasma_charset] 3,785.68: zp ZP_BYTE:23 [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ] 2,402.4: zp ZP_BYTE:22 [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] 2,002: zp ZP_BYTE:90 [ make_plasma_charset::$6 ] 2,002: zp ZP_BYTE:91 [ make_plasma_charset::$7 ] 225.76: zp ZP_BYTE:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] 202: zp ZP_WORD:83 [ make_plasma_charset::$10 ] 202: zp ZP_WORD:85 [ make_plasma_charset::$11 ] 202: zp ZP_WORD:87 [ make_plasma_charset::$16 ] 53.26: zp ZP_BYTE:81 [ make_plasma_charset::s#0 ] 27.78: zp ZP_WORD:17 [ make_plasma_charset::c#2 make_plasma_charset::c#1 ] 22: zp ZP_BYTE:80 [ make_plasma_charset::$3 ] 22: zp ZP_BYTE:82 [ make_plasma_charset::$12 ] -Uplift Scope [doplasma] 3,169.83: zp ZP_BYTE:11 [ doplasma::x#2 doplasma::x#1 ] 2,002: zp ZP_BYTE:77 [ doplasma::$2 ] 241.63: zp ZP_WORD:8 [ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] 223.64: zp ZP_WORD:4 [ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] 219.29: zp ZP_WORD:6 [ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] 173.94: zp ZP_BYTE:10 [ doplasma::y#4 doplasma::y#1 ] 83.58: zp ZP_WORD:75 [ doplasma::sin_y#0 ] 77.15: zp ZP_WORD:73 [ doplasma::sin_x#0 ] -Uplift Scope [sid_rnd] 2,002: zp ZP_BYTE:89 [ sid_rnd::return#2 ] 334.33: zp ZP_BYTE:92 [ sid_rnd::return#0 ] -Uplift Scope [init_angle_screen] 220.36: zp ZP_BYTE:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 202: zp ZP_BYTE:93 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:94 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:97 [ init_angle_screen::$7 ] 202: zp ZP_WORD:106 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:108 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:111 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:112 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:113 [ init_angle_screen::$15 ] 129.86: zp ZP_BYTE:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 84.17: zp ZP_BYTE:110 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:98 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:95 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:25 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:71 [ init_angle_screen::screen#0 ] -Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:53 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 221.24: zp ZP_BYTE:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 202: zp ZP_BYTE:121 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:124 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:126 [ init_dist_screen::ds#0 ] 131.3: zp ZP_BYTE:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:131 [ init_dist_screen::d#0 ] 77: zp ZP_BYTE:50 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:116 [ init_dist_screen::y2#0 ] 18.18: zp ZP_WORD:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] 17.47: zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp ZP_WORD:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:119 [ init_dist_screen::yds#0 ] -Uplift Scope [sqr] 338: zp ZP_BYTE:57 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 202: zp ZP_WORD:122 [ sqr::return#3 ] 28.5: zp ZP_WORD:150 [ sqr::return#0 ] 22: zp ZP_WORD:117 [ sqr::return#2 ] 4: zp ZP_BYTE:149 [ sqr::$0 ] -Uplift Scope [sqrt] 202: zp ZP_BYTE:130 [ sqrt::return#2 ] 103: zp ZP_WORD:128 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:142 [ sqrt::return#0 ] 4: zp ZP_WORD:136 [ sqrt::found#0 ] 4: zp ZP_WORD:138 [ sqrt::$3 ] 2: zp ZP_WORD:140 [ sqrt::$1 ] -Uplift Scope [init_squares] 25.17: zp ZP_WORD:60 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:62 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:154 [ init_squares::$3 ] 22: zp ZP_BYTE:155 [ init_squares::$4 ] 13.93: zp ZP_WORD:58 [ init_squares::sqr#2 init_squares::sqr#1 ] -Uplift Scope [] 21.83: zp ZP_WORD:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] 15.53: zp ZP_BYTE:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] 15.29: zp ZP_BYTE:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] 6.6: zp ZP_WORD:63 [ heap_head#12 heap_head#1 ] 0.05: zp ZP_WORD:69 [ SCREEN_ANGLE#0 ] 0.05: zp ZP_WORD:67 [ SCREEN_DIST#0 ] 0.03: zp ZP_WORD:152 [ SQUARES#1 ] -Uplift Scope [memset] 41.33: zp ZP_WORD:15 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp ZP_WORD:78 [ memset::end#0 ] 1.57: zp ZP_BYTE:14 [ memset::c#4 ] 0: zp ZP_WORD:12 [ memset::str#3 ] -Uplift Scope [malloc] 2: zp ZP_WORD:65 [ malloc::size#3 ] 0.67: zp ZP_WORD:156 [ malloc::mem#0 ] +Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:40 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:41 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:43 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:31 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:33 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:116 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:117 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:35 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:106 [ atan2_16::return#2 ] 50: zp ZP_WORD:38 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:102 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:104 [ atan2_16::y#0 ] +Uplift Scope [bsearch16u] 6,450.89: zp ZP_BYTE:58 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] 4,851: zp ZP_WORD:56 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] 2,433.29: zp ZP_WORD:54 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] 2,002: zp ZP_BYTE:145 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:146 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:147 [ bsearch16u::result#0 ] 4: zp ZP_WORD:136 [ bsearch16u::return#3 ] 0.24: zp ZP_WORD:134 [ bsearch16u::key#0 ] +Uplift Scope [make_plasma_charset] 3,019.83: zp ZP_BYTE:23 [ make_plasma_charset::b#10 make_plasma_charset::b#2 make_plasma_charset::b#1 ] 2,002: zp ZP_BYTE:85 [ make_plasma_charset::$6 ] 2,002: zp ZP_BYTE:86 [ make_plasma_charset::$7 ] 1,876.88: zp ZP_BYTE:22 [ make_plasma_charset::ii#10 make_plasma_charset::ii#1 ] 202: zp ZP_WORD:87 [ make_plasma_charset::$10 ] 202: zp ZP_WORD:89 [ make_plasma_charset::$11 ] 202: zp ZP_WORD:91 [ make_plasma_charset::$16 ] 171.7: zp ZP_BYTE:21 [ make_plasma_charset::i#13 make_plasma_charset::i#1 ] 56.22: zp ZP_BYTE:83 [ make_plasma_charset::s#0 ] 22.3: zp ZP_WORD:17 [ make_plasma_charset::c#16 make_plasma_charset::c#1 ] 22: zp ZP_BYTE:82 [ make_plasma_charset::$3 ] 22: zp ZP_BYTE:93 [ make_plasma_charset::$12 ] +Uplift Scope [doplasma] 3,169.83: zp ZP_BYTE:11 [ doplasma::x#2 doplasma::x#1 ] 2,002: zp ZP_BYTE:79 [ doplasma::$2 ] 241.63: zp ZP_WORD:8 [ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] 223.64: zp ZP_WORD:4 [ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] 219.29: zp ZP_WORD:6 [ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] 173.94: zp ZP_BYTE:10 [ doplasma::y#4 doplasma::y#1 ] 83.58: zp ZP_WORD:77 [ doplasma::sin_y#0 ] 77.15: zp ZP_WORD:75 [ doplasma::sin_x#0 ] +Uplift Scope [sid_rnd] 2,002: zp ZP_BYTE:84 [ sid_rnd::return#2 ] 334.33: zp ZP_BYTE:94 [ sid_rnd::return#0 ] +Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:95 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:96 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:99 [ init_angle_screen::$7 ] 202: zp ZP_WORD:108 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:110 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:113 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:114 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:115 [ init_angle_screen::$15 ] 126.25: zp ZP_BYTE:29 [ init_angle_screen::x#5 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:30 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:112 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:100 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:97 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:25 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:73 [ init_angle_screen::screen#0 ] +Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:53 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 202: zp ZP_BYTE:123 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:126 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:128 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:51 [ init_dist_screen::x#10 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:133 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:52 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:50 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:118 [ init_dist_screen::y2#0 ] 18.18: zp ZP_WORD:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] 17.47: zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp ZP_WORD:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:121 [ init_dist_screen::yds#0 ] +Uplift Scope [sqr] 338: zp ZP_BYTE:59 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 202: zp ZP_WORD:124 [ sqr::return#3 ] 28.5: zp ZP_WORD:150 [ sqr::return#0 ] 22: zp ZP_WORD:119 [ sqr::return#2 ] 4: zp ZP_BYTE:149 [ sqr::$0 ] +Uplift Scope [sqrt] 202: zp ZP_BYTE:132 [ sqrt::return#2 ] 103: zp ZP_WORD:130 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:144 [ sqrt::return#0 ] 4: zp ZP_WORD:138 [ sqrt::found#0 ] 4: zp ZP_WORD:140 [ sqrt::$3 ] 2: zp ZP_WORD:142 [ sqrt::$1 ] +Uplift Scope [init_squares] 25.17: zp ZP_WORD:62 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:64 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:154 [ init_squares::$3 ] 22: zp ZP_BYTE:155 [ init_squares::$4 ] 13.93: zp ZP_WORD:60 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplift Scope [] 16.42: zp ZP_WORD:19 [ print_char_cursor#59 print_char_cursor#18 print_char_cursor#1 ] 15.53: zp ZP_BYTE:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] 15.29: zp ZP_BYTE:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] 6.6: zp ZP_WORD:65 [ heap_head#12 heap_head#1 ] 0.05: zp ZP_WORD:71 [ SCREEN_ANGLE#0 ] 0.05: zp ZP_WORD:69 [ SCREEN_DIST#0 ] 0.03: zp ZP_WORD:152 [ SQUARES#1 ] +Uplift Scope [memset] 41.33: zp ZP_WORD:15 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp ZP_WORD:80 [ memset::end#0 ] 1.57: zp ZP_BYTE:14 [ memset::c#4 ] 0: zp ZP_WORD:12 [ memset::str#3 ] +Uplift Scope [malloc] 2: zp ZP_WORD:67 [ malloc::size#3 ] 0.67: zp ZP_WORD:156 [ malloc::mem#0 ] Uplift Scope [RADIX] Uplift Scope [print_char] Uplift Scope [print_cls] Uplift Scope [sid_rnd_init] Uplift Scope [main] -Uplifting [atan2_16] best 1415221 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:41 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:43 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:31 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:33 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:104 [ atan2_16::return#2 ] zp ZP_WORD:38 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:100 [ atan2_16::x#0 ] zp ZP_WORD:102 [ atan2_16::y#0 ] +Uplifting [atan2_16] best 1442666 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:41 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:43 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:31 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:33 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:106 [ atan2_16::return#2 ] zp ZP_WORD:38 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:102 [ atan2_16::x#0 ] zp ZP_WORD:104 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [bsearch16u] best 1396221 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp ZP_WORD:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:147 [ bsearch16u::result#0 ] zp ZP_WORD:145 [ bsearch16u::pivot#0 ] zp ZP_WORD:134 [ bsearch16u::return#3 ] zp ZP_WORD:132 [ bsearch16u::key#0 ] -Uplifting [make_plasma_charset] best 1373121 combination reg byte y [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ] reg byte x [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] reg byte a [ make_plasma_charset::$6 ] zp ZP_BYTE:91 [ make_plasma_charset::$7 ] zp ZP_BYTE:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] zp ZP_WORD:83 [ make_plasma_charset::$10 ] zp ZP_WORD:85 [ make_plasma_charset::$11 ] zp ZP_WORD:87 [ make_plasma_charset::$16 ] zp ZP_BYTE:81 [ make_plasma_charset::s#0 ] zp ZP_WORD:17 [ make_plasma_charset::c#2 make_plasma_charset::c#1 ] zp ZP_BYTE:80 [ make_plasma_charset::$3 ] zp ZP_BYTE:82 [ make_plasma_charset::$12 ] +Uplifting [bsearch16u] best 1423666 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] zp ZP_WORD:56 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] zp ZP_WORD:54 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:147 [ bsearch16u::result#0 ] zp ZP_WORD:136 [ bsearch16u::return#3 ] zp ZP_WORD:134 [ bsearch16u::key#0 ] +Uplifting [make_plasma_charset] best 1400566 combination reg byte y [ make_plasma_charset::b#10 make_plasma_charset::b#2 make_plasma_charset::b#1 ] reg byte a [ make_plasma_charset::$6 ] zp ZP_BYTE:86 [ make_plasma_charset::$7 ] reg byte x [ make_plasma_charset::ii#10 make_plasma_charset::ii#1 ] zp ZP_WORD:87 [ make_plasma_charset::$10 ] zp ZP_WORD:89 [ make_plasma_charset::$11 ] zp ZP_WORD:91 [ make_plasma_charset::$16 ] zp ZP_BYTE:21 [ make_plasma_charset::i#13 make_plasma_charset::i#1 ] zp ZP_BYTE:83 [ make_plasma_charset::s#0 ] zp ZP_WORD:17 [ make_plasma_charset::c#16 make_plasma_charset::c#1 ] zp ZP_BYTE:82 [ make_plasma_charset::$3 ] zp ZP_BYTE:93 [ make_plasma_charset::$12 ] Limited combination testing to 100 combinations of 9216 possible. -Uplifting [doplasma] best 1362121 combination reg byte x [ doplasma::x#2 doplasma::x#1 ] reg byte a [ doplasma::$2 ] zp ZP_WORD:8 [ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] zp ZP_WORD:4 [ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] zp ZP_WORD:6 [ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] zp ZP_BYTE:10 [ doplasma::y#4 doplasma::y#1 ] zp ZP_WORD:75 [ doplasma::sin_y#0 ] zp ZP_WORD:73 [ doplasma::sin_x#0 ] -Uplifting [sid_rnd] best 1353118 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] -Uplifting [init_angle_screen] best 1351518 combination zp ZP_BYTE:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:106 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:108 [ init_angle_screen::$11 ] zp ZP_BYTE:111 [ init_angle_screen::$13 ] zp ZP_BYTE:112 [ init_angle_screen::$14 ] zp ZP_BYTE:113 [ init_angle_screen::$15 ] zp ZP_BYTE:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:110 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:98 [ init_angle_screen::yw#0 ] zp ZP_WORD:95 [ init_angle_screen::xw#0 ] zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:25 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:71 [ init_angle_screen::screen#0 ] +Uplifting [doplasma] best 1389566 combination reg byte x [ doplasma::x#2 doplasma::x#1 ] reg byte a [ doplasma::$2 ] zp ZP_WORD:8 [ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] zp ZP_WORD:4 [ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] zp ZP_WORD:6 [ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] zp ZP_BYTE:10 [ doplasma::y#4 doplasma::y#1 ] zp ZP_WORD:77 [ doplasma::sin_y#0 ] zp ZP_WORD:75 [ doplasma::sin_x#0 ] +Uplifting [sid_rnd] best 1380563 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] +Uplifting [init_angle_screen] best 1378363 combination reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:108 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:110 [ init_angle_screen::$11 ] reg byte a [ init_angle_screen::$13 ] zp ZP_BYTE:114 [ init_angle_screen::$14 ] zp ZP_BYTE:115 [ init_angle_screen::$15 ] zp ZP_BYTE:29 [ init_angle_screen::x#5 init_angle_screen::x#1 ] zp ZP_BYTE:30 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] zp ZP_BYTE:112 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:100 [ init_angle_screen::yw#0 ] zp ZP_WORD:97 [ init_angle_screen::xw#0 ] zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:25 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:73 [ init_angle_screen::screen#0 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [init_dist_screen] best 1348318 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] zp ZP_BYTE:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:124 [ init_dist_screen::xds#0 ] zp ZP_WORD:126 [ init_dist_screen::ds#0 ] zp ZP_BYTE:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:50 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:116 [ init_dist_screen::y2#0 ] zp ZP_WORD:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp ZP_WORD:119 [ init_dist_screen::yds#0 ] +Uplifting [init_dist_screen] best 1375163 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:126 [ init_dist_screen::xds#0 ] zp ZP_WORD:128 [ init_dist_screen::ds#0 ] zp ZP_BYTE:51 [ init_dist_screen::x#10 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:52 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] zp ZP_BYTE:50 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:118 [ init_dist_screen::y2#0 ] zp ZP_WORD:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp ZP_WORD:121 [ init_dist_screen::yds#0 ] Limited combination testing to 100 combinations of 6144 possible. -Uplifting [sqr] best 1347981 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp ZP_WORD:122 [ sqr::return#3 ] zp ZP_WORD:150 [ sqr::return#0 ] zp ZP_WORD:117 [ sqr::return#2 ] reg byte a [ sqr::$0 ] -Uplifting [sqrt] best 1347078 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:128 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:136 [ sqrt::found#0 ] zp ZP_WORD:138 [ sqrt::$3 ] zp ZP_WORD:140 [ sqrt::$1 ] -Uplifting [init_squares] best 1346878 combination zp ZP_WORD:60 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp ZP_WORD:58 [ init_squares::sqr#2 init_squares::sqr#1 ] -Uplifting [] best 1346878 combination zp ZP_WORD:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] zp ZP_BYTE:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] zp ZP_BYTE:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] zp ZP_WORD:63 [ heap_head#12 heap_head#1 ] zp ZP_WORD:69 [ SCREEN_ANGLE#0 ] zp ZP_WORD:67 [ SCREEN_DIST#0 ] zp ZP_WORD:152 [ SQUARES#1 ] -Uplifting [memset] best 1346862 combination zp ZP_WORD:15 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:78 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp ZP_WORD:12 [ memset::str#3 ] -Uplifting [malloc] best 1346862 combination zp ZP_WORD:65 [ malloc::size#3 ] zp ZP_WORD:156 [ malloc::mem#0 ] -Uplifting [RADIX] best 1346862 combination -Uplifting [print_char] best 1346862 combination -Uplifting [print_cls] best 1346862 combination -Uplifting [sid_rnd_init] best 1346862 combination -Uplifting [main] best 1346862 combination -Attempting to uplift remaining variables inzp ZP_BYTE:91 [ make_plasma_charset::$7 ] -Uplifting [make_plasma_charset] best 1346862 combination zp ZP_BYTE:91 [ make_plasma_charset::$7 ] -Attempting to uplift remaining variables inzp ZP_BYTE:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] -Uplifting [make_plasma_charset] best 1346862 combination zp ZP_BYTE:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Uplifting [init_dist_screen] best 1346862 combination zp ZP_BYTE:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Uplifting [init_angle_screen] best 1346862 combination zp ZP_BYTE:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:111 [ init_angle_screen::$13 ] -Uplifting [init_angle_screen] best 1346262 combination reg byte a [ init_angle_screen::$13 ] -Attempting to uplift remaining variables inzp ZP_BYTE:112 [ init_angle_screen::$14 ] -Uplifting [init_angle_screen] best 1345862 combination reg byte a [ init_angle_screen::$14 ] -Attempting to uplift remaining variables inzp ZP_BYTE:113 [ init_angle_screen::$15 ] -Uplifting [init_angle_screen] best 1345262 combination reg byte a [ init_angle_screen::$15 ] +Uplifting [sqr] best 1374826 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp ZP_WORD:124 [ sqr::return#3 ] zp ZP_WORD:150 [ sqr::return#0 ] zp ZP_WORD:119 [ sqr::return#2 ] reg byte a [ sqr::$0 ] +Uplifting [sqrt] best 1373923 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:130 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:138 [ sqrt::found#0 ] zp ZP_WORD:140 [ sqrt::$3 ] zp ZP_WORD:142 [ sqrt::$1 ] +Uplifting [init_squares] best 1373723 combination zp ZP_WORD:62 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp ZP_WORD:60 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplifting [] best 1373723 combination zp ZP_WORD:19 [ print_char_cursor#59 print_char_cursor#18 print_char_cursor#1 ] zp ZP_BYTE:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] zp ZP_BYTE:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] zp ZP_WORD:65 [ heap_head#12 heap_head#1 ] zp ZP_WORD:71 [ SCREEN_ANGLE#0 ] zp ZP_WORD:69 [ SCREEN_DIST#0 ] zp ZP_WORD:152 [ SQUARES#1 ] +Uplifting [memset] best 1373707 combination zp ZP_WORD:15 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:80 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp ZP_WORD:12 [ memset::str#3 ] +Uplifting [malloc] best 1373707 combination zp ZP_WORD:67 [ malloc::size#3 ] zp ZP_WORD:156 [ malloc::mem#0 ] +Uplifting [RADIX] best 1373707 combination +Uplifting [print_char] best 1373707 combination +Uplifting [print_cls] best 1373707 combination +Uplifting [sid_rnd_init] best 1373707 combination +Uplifting [main] best 1373707 combination +Attempting to uplift remaining variables inzp ZP_BYTE:86 [ make_plasma_charset::$7 ] +Uplifting [make_plasma_charset] best 1373707 combination zp ZP_BYTE:86 [ make_plasma_charset::$7 ] +Attempting to uplift remaining variables inzp ZP_BYTE:114 [ init_angle_screen::$14 ] +Uplifting [init_angle_screen] best 1373307 combination reg byte a [ init_angle_screen::$14 ] +Attempting to uplift remaining variables inzp ZP_BYTE:115 [ init_angle_screen::$15 ] +Uplifting [init_angle_screen] best 1372707 combination reg byte a [ init_angle_screen::$15 ] Attempting to uplift remaining variables inzp ZP_BYTE:10 [ doplasma::y#4 doplasma::y#1 ] -Uplifting [doplasma] best 1345262 combination zp ZP_BYTE:10 [ doplasma::y#4 doplasma::y#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Uplifting [init_dist_screen] best 1345262 combination zp ZP_BYTE:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Uplifting [init_angle_screen] best 1345262 combination zp ZP_BYTE:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:110 [ init_angle_screen::ang_w#0 ] -Uplifting [init_angle_screen] best 1345262 combination zp ZP_BYTE:110 [ init_angle_screen::ang_w#0 ] +Uplifting [doplasma] best 1372707 combination zp ZP_BYTE:10 [ doplasma::y#4 doplasma::y#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:21 [ make_plasma_charset::i#13 make_plasma_charset::i#1 ] +Uplifting [make_plasma_charset] best 1372707 combination zp ZP_BYTE:21 [ make_plasma_charset::i#13 make_plasma_charset::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:51 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Uplifting [init_dist_screen] best 1372707 combination zp ZP_BYTE:51 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:29 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Uplifting [init_angle_screen] best 1372707 combination zp ZP_BYTE:29 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:52 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Uplifting [init_dist_screen] best 1372707 combination zp ZP_BYTE:52 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:30 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Uplifting [init_angle_screen] best 1372707 combination zp ZP_BYTE:30 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:112 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1372707 combination zp ZP_BYTE:112 [ init_angle_screen::ang_w#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:50 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Uplifting [init_dist_screen] best 1345192 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Attempting to uplift remaining variables inzp ZP_BYTE:81 [ make_plasma_charset::s#0 ] -Uplifting [make_plasma_charset] best 1345192 combination zp ZP_BYTE:81 [ make_plasma_charset::s#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:80 [ make_plasma_charset::$3 ] -Uplifting [make_plasma_charset] best 1345152 combination reg byte a [ make_plasma_charset::$3 ] -Attempting to uplift remaining variables inzp ZP_BYTE:82 [ make_plasma_charset::$12 ] -Uplifting [make_plasma_charset] best 1345092 combination reg byte a [ make_plasma_charset::$12 ] -Attempting to uplift remaining variables inzp ZP_BYTE:116 [ init_dist_screen::y2#0 ] -Uplifting [init_dist_screen] best 1344992 combination reg byte a [ init_dist_screen::y2#0 ] +Uplifting [init_dist_screen] best 1372637 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] +Attempting to uplift remaining variables inzp ZP_BYTE:83 [ make_plasma_charset::s#0 ] +Uplifting [make_plasma_charset] best 1372637 combination zp ZP_BYTE:83 [ make_plasma_charset::s#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:82 [ make_plasma_charset::$3 ] +Uplifting [make_plasma_charset] best 1372597 combination reg byte a [ make_plasma_charset::$3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:93 [ make_plasma_charset::$12 ] +Uplifting [make_plasma_charset] best 1372537 combination reg byte a [ make_plasma_charset::$12 ] +Attempting to uplift remaining variables inzp ZP_BYTE:118 [ init_dist_screen::y2#0 ] +Uplifting [init_dist_screen] best 1372437 combination reg byte a [ init_dist_screen::y2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Uplifting [init_angle_screen] best 1344992 combination zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] +Uplifting [init_angle_screen] best 1372437 combination zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Uplifting [init_dist_screen] best 1344992 combination zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +Uplifting [init_dist_screen] best 1372437 combination zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] -Uplifting [] best 1344992 combination zp ZP_BYTE:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] +Uplifting [] best 1372437 combination zp ZP_BYTE:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] -Uplifting [] best 1344992 combination zp ZP_BYTE:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] +Uplifting [] best 1372437 combination zp ZP_BYTE:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] Coalescing zero page register [ zp ZP_WORD:12 [ memset::str#3 ] ] with [ zp ZP_WORD:15 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:71 [ init_angle_screen::screen#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:73 [ init_angle_screen::screen#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:38 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] ] with [ zp ZP_WORD:134 [ bsearch16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:65 [ malloc::size#3 ] ] with [ zp ZP_WORD:156 [ malloc::mem#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:83 [ make_plasma_charset::$10 ] ] with [ zp ZP_WORD:85 [ make_plasma_charset::$11 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:95 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:100 [ atan2_16::x#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:98 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:102 [ atan2_16::y#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:104 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:106 [ init_angle_screen::angle_w#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:117 [ sqr::return#2 ] ] with [ zp ZP_WORD:119 [ init_dist_screen::yds#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:122 [ sqr::return#3 ] ] with [ zp ZP_WORD:124 [ init_dist_screen::xds#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:122 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:150 [ sqr::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:126 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:128 [ sqrt::val#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:136 [ sqrt::found#0 ] ] with [ zp ZP_WORD:138 [ sqrt::$3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp ZP_WORD:104 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp ZP_WORD:136 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:65 [ malloc::size#3 malloc::mem#0 ] ] with [ zp ZP_WORD:152 [ SQUARES#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:83 [ make_plasma_charset::$10 make_plasma_charset::$11 ] ] with [ zp ZP_WORD:87 [ make_plasma_charset::$16 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:122 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:126 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp ZP_WORD:108 [ init_angle_screen::$11 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:140 [ sqrt::$1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:122 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:132 [ bsearch16u::key#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:56 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] ] with [ zp ZP_WORD:136 [ bsearch16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:67 [ malloc::size#3 ] ] with [ zp ZP_WORD:156 [ malloc::mem#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:87 [ make_plasma_charset::$10 ] ] with [ zp ZP_WORD:89 [ make_plasma_charset::$11 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:97 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:102 [ atan2_16::x#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:100 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:104 [ atan2_16::y#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:106 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:108 [ init_angle_screen::angle_w#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:119 [ sqr::return#2 ] ] with [ zp ZP_WORD:121 [ init_dist_screen::yds#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:124 [ sqr::return#3 ] ] with [ zp ZP_WORD:126 [ init_dist_screen::xds#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:124 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:150 [ sqr::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:128 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:130 [ sqrt::val#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:138 [ sqrt::found#0 ] ] with [ zp ZP_WORD:140 [ sqrt::$3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp ZP_WORD:106 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:56 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 ] ] with [ zp ZP_WORD:138 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:67 [ malloc::size#3 malloc::mem#0 ] ] with [ zp ZP_WORD:152 [ SQUARES#1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:87 [ make_plasma_charset::$10 make_plasma_charset::$11 ] ] with [ zp ZP_WORD:91 [ make_plasma_charset::$16 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:124 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:128 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp ZP_WORD:110 [ init_angle_screen::$11 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:56 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:142 [ sqrt::$1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:124 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:134 [ bsearch16u::key#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:12 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:4 [ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] ] -Coalescing zero page register [ zp ZP_WORD:17 [ make_plasma_charset::c#2 make_plasma_charset::c#1 ] ] with [ zp ZP_WORD:6 [ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] ] -Coalescing zero page register [ zp ZP_WORD:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] ] with [ zp ZP_WORD:8 [ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] ] -Coalescing zero page register [ zp ZP_BYTE:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] ] with [ zp ZP_BYTE:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] ] +Coalescing zero page register [ zp ZP_WORD:17 [ make_plasma_charset::c#16 make_plasma_charset::c#1 ] ] with [ zp ZP_WORD:6 [ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] ] +Coalescing zero page register [ zp ZP_WORD:19 [ print_char_cursor#59 print_char_cursor#18 print_char_cursor#1 ] ] with [ zp ZP_WORD:8 [ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] ] +Coalescing zero page register [ zp ZP_BYTE:21 [ make_plasma_charset::i#13 make_plasma_charset::i#1 ] ] with [ zp ZP_BYTE:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] ] Coalescing zero page register [ zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp ZP_BYTE:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] ] -Coalescing zero page register [ zp ZP_BYTE:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] with [ zp ZP_BYTE:10 [ doplasma::y#4 doplasma::y#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] ] with [ zp ZP_BYTE:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:29 [ init_angle_screen::x#5 init_angle_screen::x#1 ] ] with [ zp ZP_BYTE:10 [ doplasma::y#4 doplasma::y#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] ] with [ zp ZP_BYTE:30 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] ] Coalescing zero page register [ zp ZP_WORD:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] ] with [ zp ZP_WORD:25 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ] Coalescing zero page register [ zp ZP_WORD:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ] -Coalescing zero page register [ zp ZP_WORD:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] with [ zp ZP_WORD:31 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] -Coalescing zero page register [ zp ZP_WORD:58 [ init_squares::sqr#2 init_squares::sqr#1 ] ] with [ zp ZP_WORD:33 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] -Coalescing zero page register [ zp ZP_WORD:60 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ] with [ zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] ] -Coalescing zero page register [ zp ZP_WORD:63 [ heap_head#12 heap_head#1 ] ] with [ zp ZP_WORD:41 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ] -Coalescing zero page register [ zp ZP_WORD:65 [ malloc::size#3 malloc::mem#0 SQUARES#1 ] ] with [ zp ZP_WORD:43 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] ] -Coalescing zero page register [ zp ZP_WORD:78 [ memset::end#0 ] ] with [ zp ZP_WORD:73 [ doplasma::sin_x#0 ] ] -Coalescing zero page register [ zp ZP_BYTE:81 [ make_plasma_charset::s#0 ] ] with [ zp ZP_BYTE:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] ] -Coalescing zero page register [ zp ZP_WORD:83 [ make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 ] ] with [ zp ZP_WORD:75 [ doplasma::sin_y#0 ] ] -Coalescing zero page register [ zp ZP_BYTE:91 [ make_plasma_charset::$7 ] ] with [ zp ZP_BYTE:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] ] -Coalescing zero page register [ zp ZP_WORD:117 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ zp ZP_WORD:95 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] -Coalescing zero page register [ zp ZP_WORD:122 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] ] with [ zp ZP_WORD:98 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] -Coalescing zero page register [ zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] with [ zp ZP_BYTE:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] ] +Coalescing zero page register [ zp ZP_WORD:54 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] ] with [ zp ZP_WORD:31 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] +Coalescing zero page register [ zp ZP_WORD:56 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] with [ zp ZP_WORD:33 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] +Coalescing zero page register [ zp ZP_WORD:60 [ init_squares::sqr#2 init_squares::sqr#1 ] ] with [ zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] ] +Coalescing zero page register [ zp ZP_WORD:62 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ] with [ zp ZP_WORD:41 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ] +Coalescing zero page register [ zp ZP_WORD:65 [ heap_head#12 heap_head#1 ] ] with [ zp ZP_WORD:43 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] ] +Coalescing zero page register [ zp ZP_WORD:75 [ doplasma::sin_x#0 ] ] with [ zp ZP_WORD:67 [ malloc::size#3 malloc::mem#0 SQUARES#1 ] ] +Coalescing zero page register [ zp ZP_WORD:80 [ memset::end#0 ] ] with [ zp ZP_WORD:77 [ doplasma::sin_y#0 ] ] +Coalescing zero page register [ zp ZP_BYTE:83 [ make_plasma_charset::s#0 ] ] with [ zp ZP_BYTE:51 [ init_dist_screen::x#10 init_dist_screen::x#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:86 [ make_plasma_charset::$7 ] ] with [ zp ZP_BYTE:52 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] ] +Coalescing zero page register [ zp ZP_WORD:97 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] with [ zp ZP_WORD:87 [ make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 ] ] +Coalescing zero page register [ zp ZP_WORD:119 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ zp ZP_WORD:100 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] +Coalescing zero page register [ zp ZP_BYTE:45 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ] ] with [ zp ZP_BYTE:21 [ make_plasma_charset::i#13 make_plasma_charset::i#1 sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] ] Coalescing zero page register [ zp ZP_WORD:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ] with [ zp ZP_WORD:12 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] ] -Coalescing zero page register [ zp ZP_WORD:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ] with [ zp ZP_WORD:17 [ make_plasma_charset::c#2 make_plasma_charset::c#1 doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] ] -Coalescing zero page register [ zp ZP_WORD:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] with [ zp ZP_WORD:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] ] -Coalescing zero page register [ zp ZP_WORD:78 [ memset::end#0 doplasma::sin_x#0 ] ] with [ zp ZP_WORD:58 [ init_squares::sqr#2 init_squares::sqr#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] -Coalescing zero page register [ zp ZP_BYTE:81 [ make_plasma_charset::s#0 init_dist_screen::x#2 init_dist_screen::x#1 ] ] with [ zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] ] -Coalescing zero page register [ zp ZP_WORD:83 [ make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 doplasma::sin_y#0 ] ] with [ zp ZP_WORD:60 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] ] -Coalescing zero page register [ zp ZP_BYTE:91 [ make_plasma_charset::$7 init_dist_screen::xb#2 init_dist_screen::xb#1 ] ] with [ zp ZP_BYTE:29 [ init_angle_screen::x#2 init_angle_screen::x#1 doplasma::y#4 doplasma::y#1 ] ] -Coalescing zero page register [ zp ZP_WORD:145 [ bsearch16u::pivot#0 ] ] with [ zp ZP_WORD:63 [ heap_head#12 heap_head#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ] -Coalescing zero page register [ zp ZP_WORD:147 [ bsearch16u::result#0 ] ] with [ zp ZP_WORD:78 [ memset::end#0 doplasma::sin_x#0 init_squares::sqr#2 init_squares::sqr#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] -Allocated (was zp ZP_BYTE:45) zp ZP_BYTE:2 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#2 init_angle_screen::xb#1 make_plasma_charset::i#2 make_plasma_charset::i#1 sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] +Coalescing zero page register [ zp ZP_WORD:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ] with [ zp ZP_WORD:17 [ make_plasma_charset::c#16 make_plasma_charset::c#1 doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] ] +Coalescing zero page register [ zp ZP_WORD:54 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] with [ zp ZP_WORD:19 [ print_char_cursor#59 print_char_cursor#18 print_char_cursor#1 doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] ] +Coalescing zero page register [ zp ZP_WORD:80 [ memset::end#0 doplasma::sin_y#0 ] ] with [ zp ZP_WORD:56 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] +Coalescing zero page register [ zp ZP_BYTE:83 [ make_plasma_charset::s#0 init_dist_screen::x#10 init_dist_screen::x#1 ] ] with [ zp ZP_BYTE:24 [ init_angle_screen::y#5 init_angle_screen::y#1 sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] ] +Coalescing zero page register [ zp ZP_BYTE:86 [ make_plasma_charset::$7 init_dist_screen::xb#10 init_dist_screen::xb#1 ] ] with [ zp ZP_BYTE:29 [ init_angle_screen::x#5 init_angle_screen::x#1 doplasma::y#4 doplasma::y#1 ] ] +Coalescing zero page register [ zp ZP_WORD:97 [ init_angle_screen::xw#0 atan2_16::x#0 make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 ] ] with [ zp ZP_WORD:75 [ doplasma::sin_x#0 malloc::size#3 malloc::mem#0 SQUARES#1 ] ] +Coalescing zero page register [ zp ZP_WORD:124 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] ] with [ zp ZP_WORD:60 [ init_squares::sqr#2 init_squares::sqr#1 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] ] +Coalescing zero page register [ zp ZP_WORD:147 [ bsearch16u::result#0 ] ] with [ zp ZP_WORD:62 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ] +Allocated (was zp ZP_BYTE:45) zp ZP_BYTE:2 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#5 init_angle_screen::xb#1 make_plasma_charset::i#13 make_plasma_charset::i#1 sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] Allocated (was zp ZP_WORD:46) zp ZP_WORD:3 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] -Allocated (was zp ZP_WORD:48) zp ZP_WORD:5 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 make_plasma_charset::c#2 make_plasma_charset::c#1 doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] -Allocated (was zp ZP_WORD:54) zp ZP_WORD:7 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] -Allocated (was zp ZP_WORD:65) zp ZP_WORD:9 [ malloc::size#3 malloc::mem#0 SQUARES#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -Allocated (was zp ZP_WORD:67) zp ZP_WORD:11 [ SCREEN_DIST#0 ] -Allocated (was zp ZP_WORD:69) zp ZP_WORD:13 [ SCREEN_ANGLE#0 ] -Allocated (was zp ZP_BYTE:81) zp ZP_BYTE:15 [ make_plasma_charset::s#0 init_dist_screen::x#2 init_dist_screen::x#1 init_angle_screen::y#5 init_angle_screen::y#1 sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] -Allocated (was zp ZP_WORD:83) zp ZP_WORD:16 [ make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 doplasma::sin_y#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] -Allocated (was zp ZP_BYTE:91) zp ZP_BYTE:18 [ make_plasma_charset::$7 init_dist_screen::xb#2 init_dist_screen::xb#1 init_angle_screen::x#2 init_angle_screen::x#1 doplasma::y#4 doplasma::y#1 ] -Allocated (was zp ZP_BYTE:110) zp ZP_BYTE:19 [ init_angle_screen::ang_w#0 ] -Allocated (was zp ZP_WORD:117) zp ZP_WORD:20 [ sqr::return#2 init_dist_screen::yds#0 init_angle_screen::xw#0 atan2_16::x#0 ] -Allocated (was zp ZP_WORD:122) zp ZP_WORD:22 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::yw#0 atan2_16::y#0 ] -Allocated (was zp ZP_WORD:145) zp ZP_WORD:24 [ bsearch16u::pivot#0 heap_head#12 heap_head#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -Allocated (was zp ZP_WORD:147) zp ZP_WORD:26 [ bsearch16u::result#0 memset::end#0 doplasma::sin_x#0 init_squares::sqr#2 init_squares::sqr#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +Allocated (was zp ZP_WORD:48) zp ZP_WORD:5 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 make_plasma_charset::c#16 make_plasma_charset::c#1 doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] +Allocated (was zp ZP_WORD:54) zp ZP_WORD:7 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 print_char_cursor#59 print_char_cursor#18 print_char_cursor#1 doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] +Allocated (was zp ZP_WORD:65) zp ZP_WORD:9 [ heap_head#12 heap_head#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +Allocated (was zp ZP_WORD:69) zp ZP_WORD:11 [ SCREEN_DIST#0 ] +Allocated (was zp ZP_WORD:71) zp ZP_WORD:13 [ SCREEN_ANGLE#0 ] +Allocated (was zp ZP_WORD:80) zp ZP_WORD:15 [ memset::end#0 doplasma::sin_y#0 bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +Allocated (was zp ZP_BYTE:83) zp ZP_BYTE:17 [ make_plasma_charset::s#0 init_dist_screen::x#10 init_dist_screen::x#1 init_angle_screen::y#5 init_angle_screen::y#1 sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] +Allocated (was zp ZP_BYTE:86) zp ZP_BYTE:18 [ make_plasma_charset::$7 init_dist_screen::xb#10 init_dist_screen::xb#1 init_angle_screen::x#5 init_angle_screen::x#1 doplasma::y#4 doplasma::y#1 ] +Allocated (was zp ZP_WORD:97) zp ZP_WORD:19 [ init_angle_screen::xw#0 atan2_16::x#0 make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 doplasma::sin_x#0 malloc::size#3 malloc::mem#0 SQUARES#1 ] +Allocated (was zp ZP_BYTE:112) zp ZP_BYTE:21 [ init_angle_screen::ang_w#0 ] +Allocated (was zp ZP_WORD:119) zp ZP_WORD:22 [ sqr::return#2 init_dist_screen::yds#0 init_angle_screen::yw#0 atan2_16::y#0 ] +Allocated (was zp ZP_WORD:124) zp ZP_WORD:24 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_squares::sqr#2 init_squares::sqr#1 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] +Allocated (was zp ZP_WORD:147) zp ZP_WORD:26 [ bsearch16u::result#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -7859,15 +7991,15 @@ ASSEMBLER BEFORE OPTIMIZATION // Plasma screen 2 .label SCREEN2 = $2c00 .const NUM_SQUARES = $30 - .label heap_head = $18 - .label SQUARES = 9 + .label heap_head = 9 + .label SQUARES = $13 .label print_char_cursor = 7 // Screen containing distance to center .label SCREEN_DIST = $b // Screen containing angle to center .label SCREEN_ANGLE = $d .label sin_offset_x = 2 - .label sin_offset_y = $f + .label sin_offset_y = $11 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -7937,7 +8069,7 @@ main: { lda SCREEN_DIST+1 sta init_dist_screen.screen+1 // [10] call init_dist_screen - // [170] phi from main to init_dist_screen [phi:main->init_dist_screen] + // [169] phi from main to init_dist_screen [phi:main->init_dist_screen] init_dist_screen_from_main: jsr init_dist_screen jmp b5 @@ -8048,8 +8180,8 @@ main: { doplasma: { .label angle = 3 .label dist = 5 - .label sin_x = $1a - .label sin_y = $10 + .label sin_x = $13 + .label sin_y = $f .label screen = 7 .label y = $12 // [26] (byte*) doplasma::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 @@ -8181,7 +8313,7 @@ doplasma: { // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. // memset(void* zeropage(3) str, byte register(X) c) memset: { - .label end = $1a + .label end = $f .label dst = 3 .label str = 3 jmp b1 @@ -8232,121 +8364,115 @@ memset: { // Make a plasma-friendly charset where the chars are randomly filled make_plasma_charset: { .label _7 = $12 - .label _10 = $10 - .label _11 = $10 - .label s = $f + .label _10 = $13 + .label _11 = $13 + .label s = $11 .label i = 2 .label c = 5 - .label _16 = $10 + .label _16 = $13 // [53] call sid_rnd_init jsr sid_rnd_init - // [54] phi from make_plasma_charset to make_plasma_charset::@12 [phi:make_plasma_charset->make_plasma_charset::@12] - b12_from_make_plasma_charset: - jmp b12 - // make_plasma_charset::@12 - b12: + // [54] phi from make_plasma_charset to make_plasma_charset::@13 [phi:make_plasma_charset->make_plasma_charset::@13] + b13_from_make_plasma_charset: + jmp b13 + // make_plasma_charset::@13 + b13: // [55] call print_cls - // [90] phi from make_plasma_charset::@12 to print_cls [phi:make_plasma_charset::@12->print_cls] - print_cls_from_b12: + // [89] phi from make_plasma_charset::@13 to print_cls [phi:make_plasma_charset::@13->print_cls] + print_cls_from_b13: jsr print_cls - // [56] phi from make_plasma_charset::@12 to make_plasma_charset::@1 [phi:make_plasma_charset::@12->make_plasma_charset::@1] - b1_from_b12: - // [56] phi (byte*) print_char_cursor#18 = (const byte*) print_line_cursor#0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#0] -- pbuz1=pbuc1 + // [56] phi from make_plasma_charset::@13 to make_plasma_charset::@2 [phi:make_plasma_charset::@13->make_plasma_charset::@2] + b2_from_b13: + // [56] phi (byte*) print_char_cursor#59 = (const byte*) print_line_cursor#0 [phi:make_plasma_charset::@13->make_plasma_charset::@2#0] -- pbuz1=pbuc1 lda #print_line_cursor sta print_char_cursor+1 - // [56] phi (word) make_plasma_charset::c#2 = (byte) 0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#1] -- vwuz1=vbuc1 + // [56] phi (word) make_plasma_charset::c#16 = (byte) 0 [phi:make_plasma_charset::@13->make_plasma_charset::@2#1] -- vwuz1=vbuc1 lda #<0 sta c lda #>0 sta c+1 - jmp b1 - // make_plasma_charset::@1 - b1: - // [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 -- vwuz1_lt_vwuc1_then_la1 - lda c+1 - cmp #>$100 - bcc b2 - bne !+ - lda c - cmp #<$100 - bcc b2 - !: - jmp breturn - // make_plasma_charset::@return - breturn: - // [58] return - rts + jmp b2 + // [56] phi from make_plasma_charset::@1 to make_plasma_charset::@2 [phi:make_plasma_charset::@1->make_plasma_charset::@2] + b2_from_b1: + // [56] phi (byte*) print_char_cursor#59 = (byte*) print_char_cursor#18 [phi:make_plasma_charset::@1->make_plasma_charset::@2#0] -- register_copy + // [56] phi (word) make_plasma_charset::c#16 = (word) make_plasma_charset::c#1 [phi:make_plasma_charset::@1->make_plasma_charset::@2#1] -- register_copy + jmp b2 // make_plasma_charset::@2 b2: - // [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 -- vbuaa=_lo_vwuz1 + // [57] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#16 -- vbuaa=_lo_vwuz1 lda c - // [60] (byte) make_plasma_charset::s#0 ← *((const byte[$200]) SINTABLE#0 + (byte~) make_plasma_charset::$3) -- vbuz1=pbuc1_derefidx_vbuaa + // [58] (byte) make_plasma_charset::s#0 ← *((const byte[$200]) SINTABLE#0 + (byte~) make_plasma_charset::$3) -- vbuz1=pbuc1_derefidx_vbuaa tay lda SINTABLE,y sta s - // [61] phi from make_plasma_charset::@2 to make_plasma_charset::@3 [phi:make_plasma_charset::@2->make_plasma_charset::@3] - b3_from_b2: - // [61] phi (byte) make_plasma_charset::i#2 = (byte) 0 [phi:make_plasma_charset::@2->make_plasma_charset::@3#0] -- vbuz1=vbuc1 + // [59] phi from make_plasma_charset::@2 to make_plasma_charset::@4 [phi:make_plasma_charset::@2->make_plasma_charset::@4] + b4_from_b2: + // [59] phi (byte) make_plasma_charset::i#13 = (byte) 0 [phi:make_plasma_charset::@2->make_plasma_charset::@4#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b3 - // make_plasma_charset::@3 - b3: - // [62] if((byte) make_plasma_charset::i#2<(byte) 8) goto make_plasma_charset::@5 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #8 - bcc b5_from_b3 + jmp b4 + // [59] phi from make_plasma_charset::@3 to make_plasma_charset::@4 [phi:make_plasma_charset::@3->make_plasma_charset::@4] + b4_from_b3: + // [59] phi (byte) make_plasma_charset::i#13 = (byte) make_plasma_charset::i#1 [phi:make_plasma_charset::@3->make_plasma_charset::@4#0] -- register_copy jmp b4 // make_plasma_charset::@4 b4: - // [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 - lda c - and #7 - // [64] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@11 -- vbuaa_neq_0_then_la1 - cmp #0 - bne b11_from_b4 - // [65] phi from make_plasma_charset::@4 to make_plasma_charset::@10 [phi:make_plasma_charset::@4->make_plasma_charset::@10] - b10_from_b4: - jmp b10 - // make_plasma_charset::@10 - b10: - // [66] call print_char - jsr print_char - // [67] phi from make_plasma_charset::@10 make_plasma_charset::@4 to make_plasma_charset::@11 [phi:make_plasma_charset::@10/make_plasma_charset::@4->make_plasma_charset::@11] - b11_from_b10: - b11_from_b4: - // [67] phi (byte*) print_char_cursor#30 = (byte*) print_char_cursor#1 [phi:make_plasma_charset::@10/make_plasma_charset::@4->make_plasma_charset::@11#0] -- register_copy - jmp b11 - // make_plasma_charset::@11 - b11: - // [68] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#2 -- vwuz1=_inc_vwuz1 - inc c - bne !+ - inc c+1 - !: - // [56] phi from make_plasma_charset::@11 to make_plasma_charset::@1 [phi:make_plasma_charset::@11->make_plasma_charset::@1] - b1_from_b11: - // [56] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#30 [phi:make_plasma_charset::@11->make_plasma_charset::@1#0] -- register_copy - // [56] phi (word) make_plasma_charset::c#2 = (word) make_plasma_charset::c#1 [phi:make_plasma_charset::@11->make_plasma_charset::@1#1] -- register_copy - jmp b1 - // [69] phi from make_plasma_charset::@3 to make_plasma_charset::@5 [phi:make_plasma_charset::@3->make_plasma_charset::@5] - b5_from_b3: - // [69] phi (byte) make_plasma_charset::b#2 = (byte) 0 [phi:make_plasma_charset::@3->make_plasma_charset::@5#0] -- vbuyy=vbuc1 + // [60] phi from make_plasma_charset::@4 to make_plasma_charset::@7 [phi:make_plasma_charset::@4->make_plasma_charset::@7] + b7_from_b4: + // [60] phi (byte) make_plasma_charset::b#10 = (byte) 0 [phi:make_plasma_charset::@4->make_plasma_charset::@7#0] -- vbuyy=vbuc1 ldy #0 - // [69] phi (byte) make_plasma_charset::ii#2 = (byte) 0 [phi:make_plasma_charset::@3->make_plasma_charset::@5#1] -- vbuxx=vbuc1 + // [60] phi (byte) make_plasma_charset::ii#10 = (byte) 0 [phi:make_plasma_charset::@4->make_plasma_charset::@7#1] -- vbuxx=vbuc1 ldx #0 - jmp b5 - // make_plasma_charset::@5 - b5: - // [70] if((byte) make_plasma_charset::ii#2<(byte) 8) goto make_plasma_charset::@6 -- vbuxx_lt_vbuc1_then_la1 - cpx #8 - bcc b6_from_b5 + jmp b7 + // [60] phi from make_plasma_charset::@6 to make_plasma_charset::@7 [phi:make_plasma_charset::@6->make_plasma_charset::@7] + b7_from_b6: + // [60] phi (byte) make_plasma_charset::b#10 = (byte) make_plasma_charset::b#2 [phi:make_plasma_charset::@6->make_plasma_charset::@7#0] -- register_copy + // [60] phi (byte) make_plasma_charset::ii#10 = (byte) make_plasma_charset::ii#1 [phi:make_plasma_charset::@6->make_plasma_charset::@7#1] -- register_copy jmp b7 // make_plasma_charset::@7 b7: - // [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [61] call sid_rnd + jsr sid_rnd + // [62] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + jmp b14 + // make_plasma_charset::@14 + b14: + // [63] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2 + // [64] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 + and #$ff + sta _7 + // [65] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@9 -- vbuz1_le_vbuz2_then_la1 + lda s + cmp _7 + bcs b9_from_b14 + jmp b10 + // make_plasma_charset::@10 + b10: + // [66] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#10 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#10) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx + tya + ora bittab,x + tay + // [67] phi from make_plasma_charset::@10 make_plasma_charset::@14 to make_plasma_charset::@9 [phi:make_plasma_charset::@10/make_plasma_charset::@14->make_plasma_charset::@9] + b9_from_b10: + b9_from_b14: + // [67] phi (byte) make_plasma_charset::b#2 = (byte) make_plasma_charset::b#1 [phi:make_plasma_charset::@10/make_plasma_charset::@14->make_plasma_charset::@9#0] -- register_copy + jmp b9 + // make_plasma_charset::@9 + b9: + // [68] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#10 -- vbuxx=_inc_vbuxx + inx + jmp b6 + // make_plasma_charset::@6 + b6: + // [69] if((byte) make_plasma_charset::ii#1<(byte) 8) goto make_plasma_charset::@7 -- vbuxx_lt_vbuc1_then_la1 + cpx #8 + bcc b7_from_b6 + jmp b8 + // make_plasma_charset::@8 + b8: + // [70] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#16 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda c asl sta _10 @@ -8357,7 +8483,7 @@ make_plasma_charset: { rol _10+1 asl _10 rol _10+1 - // [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 -- vwuz1=vwuz1_plus_vbuz2 + // [71] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#13 -- vwuz1=vwuz1_plus_vbuz2 lda i clc adc _11 @@ -8365,7 +8491,7 @@ make_plasma_charset: { bcc !+ inc _11+1 !: - // [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 -- pbuz1=pbuc1_plus_vwuz1 + // [72] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 -- pbuz1=pbuc1_plus_vwuz1 clc lda _16 adc #CHARSET sta _16+1 - // [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 -- _deref_pbuz1=vbuyy + // [73] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 -- _deref_pbuz1=vbuyy tya ldy #0 sta (_16),y - // [75] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#2 -- vbuz1=_inc_vbuz1 + // [74] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#13 -- vbuz1=_inc_vbuz1 inc i - // [61] phi from make_plasma_charset::@7 to make_plasma_charset::@3 [phi:make_plasma_charset::@7->make_plasma_charset::@3] - b3_from_b7: - // [61] phi (byte) make_plasma_charset::i#2 = (byte) make_plasma_charset::i#1 [phi:make_plasma_charset::@7->make_plasma_charset::@3#0] -- register_copy jmp b3 - // [76] phi from make_plasma_charset::@5 to make_plasma_charset::@6 [phi:make_plasma_charset::@5->make_plasma_charset::@6] - b6_from_b5: - jmp b6 - // make_plasma_charset::@6 - b6: - // [77] call sid_rnd - jsr sid_rnd - // [78] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - jmp b13 - // make_plasma_charset::@13 - b13: - // [79] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2 - // [80] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 - and #$ff - sta _7 - // [81] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@8 -- vbuz1_le_vbuz2_then_la1 - lda s - cmp _7 - bcs b8_from_b13 - jmp b9 - // make_plasma_charset::@9 - b9: - // [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx - tya - ora bittab,x - tay - // [83] phi from make_plasma_charset::@13 make_plasma_charset::@9 to make_plasma_charset::@8 [phi:make_plasma_charset::@13/make_plasma_charset::@9->make_plasma_charset::@8] - b8_from_b13: - b8_from_b9: - // [83] phi (byte) make_plasma_charset::b#6 = (byte) make_plasma_charset::b#2 [phi:make_plasma_charset::@13/make_plasma_charset::@9->make_plasma_charset::@8#0] -- register_copy - jmp b8 - // make_plasma_charset::@8 - b8: - // [84] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#2 -- vbuxx=_inc_vbuxx - inx - // [69] phi from make_plasma_charset::@8 to make_plasma_charset::@5 [phi:make_plasma_charset::@8->make_plasma_charset::@5] - b5_from_b8: - // [69] phi (byte) make_plasma_charset::b#2 = (byte) make_plasma_charset::b#6 [phi:make_plasma_charset::@8->make_plasma_charset::@5#0] -- register_copy - // [69] phi (byte) make_plasma_charset::ii#2 = (byte) make_plasma_charset::ii#1 [phi:make_plasma_charset::@8->make_plasma_charset::@5#1] -- register_copy + // make_plasma_charset::@3 + b3: + // [75] if((byte) make_plasma_charset::i#1<(byte) 8) goto make_plasma_charset::@4 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #8 + bcc b4_from_b3 jmp b5 - bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 -} - // sid_rnd -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -sid_rnd: { - // [85] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // make_plasma_charset::@5 + b5: + // [76] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#16 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 + lda c + and #7 + // [77] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@12 -- vbuaa_neq_0_then_la1 + cmp #0 + bne b12_from_b5 + // [78] phi from make_plasma_charset::@5 to make_plasma_charset::@11 [phi:make_plasma_charset::@5->make_plasma_charset::@11] + b11_from_b5: + jmp b11 + // make_plasma_charset::@11 + b11: + // [79] call print_char + jsr print_char + // [80] phi from make_plasma_charset::@11 make_plasma_charset::@5 to make_plasma_charset::@12 [phi:make_plasma_charset::@11/make_plasma_charset::@5->make_plasma_charset::@12] + b12_from_b11: + b12_from_b5: + // [80] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#1 [phi:make_plasma_charset::@11/make_plasma_charset::@5->make_plasma_charset::@12#0] -- register_copy + jmp b12 + // make_plasma_charset::@12 + b12: + // [81] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#16 -- vwuz1=_inc_vwuz1 + inc c + bne !+ + inc c+1 + !: + jmp b1 + // make_plasma_charset::@1 + b1: + // [82] if((word) make_plasma_charset::c#1<(word) $100) goto make_plasma_charset::@2 -- vwuz1_lt_vwuc1_then_la1 + lda c+1 + cmp #>$100 + bcc b2_from_b1 + bne !+ + lda c + cmp #<$100 + bcc b2_from_b1 + !: jmp breturn - // sid_rnd::@return + // make_plasma_charset::@return breturn: - // [86] return + // [83] return rts + bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // print_char // Print a single char print_char: { .const ch = '.' - // [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 + // [84] *((byte*) print_char_cursor#59) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (print_char_cursor),y - // [88] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 + // [85] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#59 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 @@ -8453,13 +8575,25 @@ print_char: { jmp breturn // print_char::@return breturn: - // [89] return + // [86] return + rts +} + // sid_rnd +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + // [87] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 + lda SID_VOICE3_OSC + jmp breturn + // sid_rnd::@return + breturn: + // [88] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [91] call memset + // [90] call memset // [44] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: // [44] phi (byte) memset::c#4 = (byte) ' ' [phi:print_cls->memset#0] -- vbuxx=vbuc1 @@ -8473,24 +8607,24 @@ print_cls: { jmp breturn // print_cls::@return breturn: - // [92] return + // [91] return rts } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [93] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [92] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff sta SID_VOICE3_FREQ lda #>$ffff sta SID_VOICE3_FREQ+1 - // [94] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [93] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL jmp breturn // sid_rnd_init::@return breturn: - // [95] return + // [94] return rts } // init_angle_screen @@ -8498,18 +8632,18 @@ sid_rnd_init: { // Utilizes symmetry around the center // init_angle_screen(byte* zeropage(5) screen) init_angle_screen: { - .label _11 = $10 + .label _11 = $18 .label screen = 5 .label screen_topline = 3 .label screen_bottomline = 5 - .label xw = $14 + .label xw = $13 .label yw = $16 - .label angle_w = $10 - .label ang_w = $13 + .label angle_w = $18 + .label ang_w = $15 .label x = $12 .label xb = 2 - .label y = $f - // [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 + .label y = $11 + // [95] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda screen clc adc #<$28*$c @@ -8517,7 +8651,7 @@ init_angle_screen: { lda screen+1 adc #>$28*$c sta screen_topline+1 - // [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 + // [96] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 clc lda screen_bottomline adc #<$28*$c @@ -8525,97 +8659,66 @@ init_angle_screen: { lda screen_bottomline+1 adc #>$28*$c sta screen_bottomline+1 - // [98] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + // [97] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] b1_from_init_angle_screen: - // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy - // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy - // [98] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [97] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy + // [97] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy + // [97] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y jmp b1 - // [98] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] + // [97] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] b1_from_b4: - // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy - // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy - // [98] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy + // [97] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy + // [97] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy + // [97] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy jmp b1 // init_angle_screen::@1 b1: - // [99] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - b2_from_b1: - // [99] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [98] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + b3_from_b1: + // [98] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [99] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [98] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b2 - // init_angle_screen::@2 - b2: - // [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - jmp b4 - // init_angle_screen::@4 - b4: - // [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b4 - jmp breturn - // init_angle_screen::@return - breturn: - // [105] return - rts + jmp b3 + // [98] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + b3_from_b2: + // [98] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [98] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy + jmp b3 // init_angle_screen::@3 b3: - // [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [99] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [100] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [101] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw - // [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [102] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl - // [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [103] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta yw+1 sty yw - // [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [113] call atan2_16 + // [104] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [105] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [106] call atan2_16 jsr atan2_16 - // [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [107] (word) atan2_16::return#2 ← (word) atan2_16::return#0 jmp b5 // init_angle_screen::@5 b5: - // [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - // [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [108] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [109] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _11 @@ -8623,68 +8726,100 @@ init_angle_screen: { bcc !+ inc _11+1 !: - // [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [110] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w - // [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [111] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [112] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 lda ang_w eor #$ff clc adc #1 - // [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [113] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y - // [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [114] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w - // [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y - // [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [116] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w - // [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [117] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_bottomline),y - // [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [118] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [119] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [99] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - b2_from_b5: - // [99] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [99] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp b2 + // init_angle_screen::@2 + b2: + // [120] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3_from_b2 + jmp b4 + // init_angle_screen::@4 + b4: + // [121] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // [122] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // [123] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [124] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b4 + jmp breturn + // init_angle_screen::@return + breturn: + // [125] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($14) x, signed word zeropage($16) y) +// atan2_16(signed word zeropage($13) x, signed word zeropage($16) y) atan2_16: { .label _2 = 7 - .label _7 = $1a + .label _7 = $f .label yi = 7 - .label xi = $1a - .label angle = $10 + .label xi = $f + .label angle = $18 .label xd = 9 - .label yd = $18 - .label return = $10 - .label x = $14 + .label yd = $1a + .label return = $18 + .label x = $13 .label y = $16 - // [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + // [126] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda y+1 bpl b1 jmp b2 // atan2_16::@2 b2: - // [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [127] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc y @@ -8692,20 +8827,20 @@ atan2_16: { lda #0 sbc y+1 sta _2+1 - // [129] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [128] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] b3_from_b1: b3_from_b2: - // [129] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + // [128] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy jmp b3 // atan2_16::@3 b3: - // [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [129] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda x+1 bpl b4 jmp b5 // atan2_16::@5 b5: - // [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [130] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc x @@ -8713,49 +8848,49 @@ atan2_16: { lda #0 sbc x+1 sta _7+1 - // [132] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [131] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] b6_from_b4: b6_from_b5: - // [132] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + // [131] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy jmp b6 // atan2_16::@6 b6: - // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [132] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] b10_from_b6: - // [133] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [132] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 lda #<0 sta angle lda #>0 sta angle+1 - // [133] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 + // [132] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 ldx #0 - // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [133] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [132] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [132] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy jmp b10 // atan2_16::@10 b10: - // [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [133] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda yi+1 bne b11 lda yi bne b11 - // [135] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [134] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] b12_from_b10: b12_from_b19: - // [135] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [134] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy jmp b12 // atan2_16::@12 b12: - // [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [135] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr angle+1 ror angle - // [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [136] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda x+1 bpl b7_from_b12 jmp b21 // atan2_16::@21 b21: - // [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [137] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc angle @@ -8763,20 +8898,20 @@ atan2_16: { lda #>$8000 sbc angle+1 sta angle+1 - // [139] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [138] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] b7_from_b12: b7_from_b21: - // [139] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [138] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy jmp b7 // atan2_16::@7 b7: - // [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [139] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda y+1 bpl b8_from_b7 jmp b9 // atan2_16::@9 b9: - // [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [140] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc angle @@ -8784,79 +8919,79 @@ atan2_16: { lda #0 sbc angle+1 sta angle+1 - // [142] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [141] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] b8_from_b7: b8_from_b9: - // [142] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [141] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy jmp b8 // atan2_16::@8 b8: jmp breturn // atan2_16::@return breturn: - // [143] return + // [142] return rts // atan2_16::@11 b11: - // [144] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx + // [143] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay - // [145] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [144] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda xi sta xd lda xi+1 sta xd+1 - // [146] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [145] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda yi sta yd lda yi+1 sta yd+1 - // [147] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [146] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] b13_from_b11: b13_from_b14: - // [147] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy - // [147] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy - // [147] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [146] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy + // [146] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy + // [146] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy jmp b13 // atan2_16::@13 b13: - // [148] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 + // [147] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 cpy #2 bcs b14 jmp b15 // atan2_16::@15 b15: - // [149] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 + // [148] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 cpy #0 beq b17_from_b15 jmp b16 // atan2_16::@16 b16: - // [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [149] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda xd+1 cmp #$80 ror xd+1 ror xd - // [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [150] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda yd+1 cmp #$80 ror yd+1 ror yd - // [152] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [151] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] b17_from_b15: b17_from_b16: - // [152] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy - // [152] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy + // [151] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy + // [151] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy jmp b17 // atan2_16::@17 b17: - // [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [152] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda yi+1 bpl b18 jmp b20 // atan2_16::@20 b20: - // [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [153] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda xi sec sbc yd @@ -8864,7 +8999,7 @@ atan2_16: { lda xi+1 sbc yd+1 sta xi+1 - // [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [154] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda yi clc adc xd @@ -8872,10 +9007,10 @@ atan2_16: { lda yi+1 adc xd+1 sta yi+1 - // [156] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [155] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa + // [156] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa tay sec lda angle @@ -8884,30 +9019,30 @@ atan2_16: { lda angle+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta angle+1 - // [158] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [157] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] b19_from_b18: b19_from_b20: - // [158] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy - // [158] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [158] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy + // [157] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy + // [157] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [157] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy jmp b19 // atan2_16::@19 b19: - // [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx + // [158] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx - // [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 + // [159] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 cpx #CORDIC_ITERATIONS_16-1+1 beq b12_from_b19 - // [133] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [132] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] b10_from_b19: - // [133] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [133] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [133] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [132] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [132] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [132] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [132] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp b10 // atan2_16::@18 b18: - // [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [160] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda xi clc adc yd @@ -8915,7 +9050,7 @@ atan2_16: { lda xi+1 adc yd+1 sta xi+1 - // [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [161] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda yi sec sbc xd @@ -8923,10 +9058,10 @@ atan2_16: { lda yi+1 sbc xd+1 sta yi+1 - // [163] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [162] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa + // [163] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa tay clc lda angle @@ -8938,7 +9073,7 @@ atan2_16: { jmp b19_from_b18 // atan2_16::@14 b14: - // [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [164] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda xd+1 cmp #$80 ror xd+1 @@ -8947,7 +9082,7 @@ atan2_16: { cmp #$80 ror xd+1 ror xd - // [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [165] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda yd+1 cmp #$80 ror yd+1 @@ -8956,13 +9091,13 @@ atan2_16: { cmp #$80 ror yd+1 ror yd - // [167] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 + // [166] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 dey dey jmp b13_from_b14 // atan2_16::@4 b4: - // [168] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [167] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda x sta xi lda x+1 @@ -8970,7 +9105,7 @@ atan2_16: { jmp b6_from_b4 // atan2_16::@1 b1: - // [169] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [168] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda y sta yi lda y+1 @@ -8984,21 +9119,21 @@ atan2_16: { init_dist_screen: { .label screen = 3 .label screen_bottomline = 5 - .label yds = $14 + .label yds = $16 .label screen_topline = 3 .label y = 2 - .label xds = $16 - .label ds = $16 - .label x = $f + .label xds = $18 + .label ds = $18 + .label x = $11 .label xb = $12 - // [171] call init_squares + // [170] call init_squares // [242] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares jmp b11 // init_dist_screen::@11 b11: - // [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 + // [171] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 lda screen clc adc #<$28*$18 @@ -9006,49 +9141,49 @@ init_dist_screen: { lda screen+1 adc #>$28*$18 sta screen_bottomline+1 - // [173] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] + // [172] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] b1_from_b11: - // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy - // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy - // [173] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 + // [172] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy + // [172] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy + // [172] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y jmp b1 - // [173] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] + // [172] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] b1_from_b7: - // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy - // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy - // [173] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy + // [172] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy + // [172] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy + // [172] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy jmp b1 // init_dist_screen::@1 b1: - // [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [173] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl - // [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 + // [174] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 cmp #$18 bcs b2 jmp b3 // init_dist_screen::@3 b3: - // [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa + // [175] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$18+1 - // [177] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] + // [176] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] b4_from_b2: b4_from_b3: - // [177] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy + // [176] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy jmp b4 // init_dist_screen::@4 b4: - // [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - // [179] call sqr + // [177] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + // [178] call sqr // [238] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from_b4: // [238] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr - // [180] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [179] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return sta sqr.return_2 lda sqr.return+1 @@ -9056,86 +9191,55 @@ init_dist_screen: { jmp b12 // init_dist_screen::@12 b12: - // [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [182] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - b5_from_b12: - // [182] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [180] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + // [181] phi from init_dist_screen::@12 to init_dist_screen::@6 [phi:init_dist_screen::@12->init_dist_screen::@6] + b6_from_b12: + // [181] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@6#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [182] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [181] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@6#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b5 - // init_dist_screen::@5 - b5: - // [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b6 - jmp b7 - // init_dist_screen::@7 - b7: - // [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - // [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - // [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 - inc y - // [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b7 - jmp breturn - // init_dist_screen::@return - breturn: - // [188] return - rts + jmp b6 + // [181] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6] + b6_from_b5: + // [181] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy + // [181] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy + jmp b6 // init_dist_screen::@6 b6: - // [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [182] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 + // [183] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 cmp #$27 bcs b8 jmp b9 // init_dist_screen::@9 b9: - // [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [184] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [192] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [185] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] b10_from_b8: b10_from_b9: - // [192] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [185] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy jmp b10 // init_dist_screen::@10 b10: - // [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [194] call sqr + // [186] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [187] call sqr // [238] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] sqr_from_b10: // [238] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr - // [195] (word) sqr::return#3 ← (word) sqr::return#0 + // [188] (word) sqr::return#3 ← (word) sqr::return#0 jmp b13 // init_dist_screen::@13 b13: - // [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - // [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [189] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [190] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 lda ds clc adc yds @@ -9143,44 +9247,76 @@ init_dist_screen: { lda ds+1 adc yds+1 sta ds+1 - // [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [199] call sqrt + // [191] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [192] call sqrt jsr sqrt - // [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // [193] (byte) sqrt::return#2 ← (byte) sqrt::return#0 jmp b14 // init_dist_screen::@14 b14: - // [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - // [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [194] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [195] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y - // [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [196] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_bottomline),y - // [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y - // [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_bottomline),y - // [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [199] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 inc x - // [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [200] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 dec xb - // [182] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] - b5_from_b14: - // [182] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy - // [182] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy jmp b5 + // init_dist_screen::@5 + b5: + // [201] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b6_from_b5 + jmp b7 + // init_dist_screen::@7 + b7: + // [202] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + // [203] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + // [204] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + inc y + // [205] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b7 + jmp breturn + // init_dist_screen::@return + breturn: + // [206] return + rts // init_dist_screen::@8 b8: - // [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 + // [207] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$27 jmp b10_from_b8 // init_dist_screen::@2 b2: - // [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 + // [208] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$18 jmp b4_from_b2 @@ -9189,28 +9325,28 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($16) val) +// sqrt(word zeropage($18) val) sqrt: { - .label _1 = 7 - .label _3 = 7 - .label found = 7 - .label val = $16 - // [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - // [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + .label _1 = $f + .label _3 = $f + .label found = $f + .label val = $18 + // [209] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + // [210] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES - sta bsearch16u.items + sta bsearch16u.items_1 lda SQUARES+1 - sta bsearch16u.items+1 - // [212] call bsearch16u - // [219] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] + sta bsearch16u.items_1+1 + // [211] call bsearch16u + // [218] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: jsr bsearch16u - // [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + // [212] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 jmp b1 // sqrt::@1 b1: - // [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 - // [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 + // [213] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + // [214] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 lda _3 sec sbc SQUARES @@ -9218,15 +9354,15 @@ sqrt: { lda _3+1 sbc SQUARES+1 sta _3+1 - // [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [215] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr _1+1 ror _1 - // [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 + // [216] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 lda _1 jmp breturn // sqrt::@return breturn: - // [218] return + // [217] return rts } // bsearch16u @@ -9235,29 +9371,105 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($16) key, word* zeropage(7) items, byte register(X) num) +// bsearch16u(word zeropage($18) key, word* zeropage($f) items, byte register(X) num) bsearch16u: { - .label _2 = 7 - .label pivot = $18 + .label _2 = $f + .label pivot = $f .label result = $1a - .label return = 7 - .label items = 7 - .label key = $16 - // [220] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - b3_from_bsearch16u: - // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [220] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + .label return = $f + .label items = $f + .label key = $18 + .label items_1 = 7 + .label items_10 = 7 + .label items_16 = 7 + // [219] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4] + b4_from_bsearch16u: + // [219] phi (word*) bsearch16u::items#10 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@4#0] -- register_copy + // [219] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES + jmp b4 + // bsearch16u::@4 + b4: + // [220] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + txa + lsr + // [221] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + asl + // [222] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + clc + adc items_10 + sta pivot + lda #0 + adc items_10+1 + sta pivot+1 + // [223] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + sec + lda key + ldy #0 + sbc (pivot),y + sta result + lda key+1 + iny + sbc (pivot),y + sta result+1 + // [224] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + lda result+1 + bne b6 + lda result + bne b6 + // [225] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return] + breturn_from_b2: + breturn_from_b4: + // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy + jmp breturn + // bsearch16u::@return + breturn: + // [226] return + rts + // bsearch16u::@6 + b6: + // [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 + lda result+1 + bmi b10 + bne !+ + lda result + beq b10 + !: + jmp b8 + // bsearch16u::@8 + b8: + // [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + lda #1*SIZEOF_WORD + clc + adc items + sta items + bcc !+ + inc items+1 + !: + // [229] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuxx=_dec_vbuxx + dex + // [230] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7] + b7_from_b10: + b7_from_b8: + // [230] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#19 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy + // [230] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy + jmp b7 + // bsearch16u::@7 + b7: + // [231] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + txa + lsr + tax jmp b3 // bsearch16u::@3 b3: - // [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 + // [232] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuxx_gt_0_then_la1 cpx #0 - bne b4 + bne b9 jmp b5 // bsearch16u::@5 b5: - // [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [233] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp key+1 @@ -9271,7 +9483,7 @@ bsearch16u: { jmp b1 // bsearch16u::@1 b1: - // [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [234] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -9279,107 +9491,42 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [224] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [235] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] b2_from_b1: b2_from_b5: - // [224] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [235] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp b2 // bsearch16u::@2 b2: - // [225] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - breturn_from_b2: - breturn_from_b8: - // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy - jmp breturn - // bsearch16u::@return - breturn: - // [226] return - rts - // bsearch16u::@4 - b4: - // [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 - txa - lsr - // [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 - asl - // [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa - clc - adc items - sta pivot - lda #0 - adc items+1 - sta pivot+1 - // [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 - sec - lda key - ldy #0 - sbc (pivot),y - sta result - lda key+1 - iny - sbc (pivot),y - sta result+1 - // [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 - lda result+1 - bne b6 - lda result - bne b6 - jmp b8 - // bsearch16u::@8 - b8: - // [232] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 - lda pivot - sta return - lda pivot+1 - sta return+1 - jmp breturn_from_b8 - // bsearch16u::@6 - b6: - // [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 - lda result+1 - bmi b7_from_b6 - bne !+ - lda result - beq b7_from_b6 - !: - jmp b9 + jmp breturn_from_b2 // bsearch16u::@9 b9: - // [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 - lda #1*SIZEOF_WORD - clc - adc pivot + // [236] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 + lda items + sta items_16 + lda items+1 + sta items_16+1 + // [219] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4] + b4_from_b9: + // [219] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy + // [219] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy + jmp b4 + // bsearch16u::@10 + b10: + // [237] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 + lda items_10 sta items - lda #0 - adc pivot+1 + lda items_10+1 sta items+1 - // [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx - dex - // [236] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - b7_from_b6: - b7_from_b9: - // [236] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [236] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy - jmp b7 - // bsearch16u::@7 - b7: - // [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 - txa - lsr - tax - // [220] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - b3_from_b7: - // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [220] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy - jmp b3 + jmp b7_from_b10 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $16 - .label return_2 = $14 + .label return = $18 + .label return_2 = $16 // [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl // [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa @@ -9399,8 +9546,8 @@ sqr: { // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label squares = $10 - .label sqr = $1a + .label squares = $1a + .label sqr = $18 // [243] call malloc // [255] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: @@ -9481,10 +9628,10 @@ init_squares: { // malloc // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. -// malloc(word zeropage(9) size) +// malloc(word zeropage($13) size) malloc: { - .label mem = 9 - .label size = 9 + .label mem = $13 + .label size = $13 // [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz1 lda heap_head sec @@ -9539,28 +9686,31 @@ Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp breturn +Removing instruction jmp b13 +Removing instruction jmp b2 +Removing instruction jmp b4 +Removing instruction jmp b7 +Removing instruction jmp b14 +Removing instruction jmp b10 +Removing instruction jmp b9 +Removing instruction jmp b6 +Removing instruction jmp b8 +Removing instruction jmp b3 +Removing instruction jmp b5 +Removing instruction jmp b11 Removing instruction jmp b12 Removing instruction jmp b1 Removing instruction jmp breturn -Removing instruction jmp b3 -Removing instruction jmp b4 -Removing instruction jmp b10 -Removing instruction jmp b11 -Removing instruction jmp b5 -Removing instruction jmp b7 -Removing instruction jmp b6 -Removing instruction jmp b13 -Removing instruction jmp b9 -Removing instruction jmp b8 Removing instruction jmp breturn Removing instruction jmp breturn Removing instruction jmp breturn Removing instruction jmp breturn Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b4 Removing instruction jmp breturn -Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp b5 @@ -9583,24 +9733,25 @@ Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b4 Removing instruction jmp b12 -Removing instruction jmp b5 -Removing instruction jmp b7 -Removing instruction jmp breturn +Removing instruction jmp b6 Removing instruction jmp b9 Removing instruction jmp b10 Removing instruction jmp b13 Removing instruction jmp b14 +Removing instruction jmp b5 +Removing instruction jmp b7 +Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn +Removing instruction jmp b4 +Removing instruction jmp breturn +Removing instruction jmp b8 +Removing instruction jmp b7 Removing instruction jmp b3 Removing instruction jmp b5 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp breturn -Removing instruction jmp b8 -Removing instruction jmp b9 -Removing instruction jmp b7 -Removing instruction jmp breturn Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn @@ -9625,9 +9776,13 @@ Replacing label b1 with b2 Replacing label b2_from_b2 with b2 Replacing label b1_from_b3 with b1 Replacing label b2_from_b3 with b2 -Replacing label b11_from_b4 with b11 -Replacing label b6_from_b5 with b6 -Replacing label b8_from_b13 with b8 +Replacing label b9_from_b14 with b9 +Replacing label b7_from_b6 with b7 +Replacing label b4_from_b3 with b4 +Replacing label b12_from_b5 with b12 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b3_from_b2 with b3 Replacing label b1_from_b4 with b1 Replacing label b7_from_b12 with b7 Replacing label b8_from_b7 with b8 @@ -9637,14 +9792,14 @@ Replacing label b19_from_b18 with b19 Replacing label b13_from_b14 with b13 Replacing label b6_from_b4 with b6 Replacing label b3_from_b1 with b3 +Replacing label b6_from_b5 with b6 Replacing label b1_from_b7 with b1 Replacing label b10_from_b8 with b10 Replacing label b4_from_b2 with b4 Replacing label b2_from_b5 with b2 Replacing label b2_from_b5 with b2 -Replacing label breturn_from_b8 with b2 -Replacing label b7_from_b6 with b7 -Replacing label b7_from_b6 with b7 +Replacing label breturn_from_b2 with breturn +Replacing label b7_from_b10 with b7 Replacing label b1_from_b1 with b1 Removing instruction b1_from_bbegin: Removing instruction b1: @@ -9667,16 +9822,20 @@ Removing instruction b2_from_b1: Removing instruction b2_from_b2: Removing instruction b2_from_b1: Removing instruction b2_from_b3: -Removing instruction b12_from_make_plasma_charset: -Removing instruction print_cls_from_b12: -Removing instruction b10_from_b4: -Removing instruction b11_from_b10: -Removing instruction b11_from_b4: -Removing instruction b6_from_b5: -Removing instruction b8_from_b13: -Removing instruction b8_from_b9: -Removing instruction b1_from_b4: +Removing instruction b13_from_make_plasma_charset: +Removing instruction print_cls_from_b13: Removing instruction b2_from_b1: +Removing instruction b4_from_b3: +Removing instruction b7_from_b4: +Removing instruction b7_from_b6: +Removing instruction b9_from_b10: +Removing instruction b9_from_b14: +Removing instruction b11_from_b5: +Removing instruction b12_from_b11: +Removing instruction b12_from_b5: +Removing instruction b1_from_b4: +Removing instruction b3_from_b1: +Removing instruction b3_from_b2: Removing instruction b3_from_b1: Removing instruction b3_from_b2: Removing instruction b6_from_b4: @@ -9699,17 +9858,17 @@ Removing instruction b1_from_b7: Removing instruction b4_from_b2: Removing instruction b4_from_b3: Removing instruction sqr_from_b4: -Removing instruction b5_from_b12: +Removing instruction b6_from_b12: +Removing instruction b6_from_b5: Removing instruction b10_from_b8: Removing instruction b10_from_b9: Removing instruction sqr_from_b10: +Removing instruction breturn_from_b2: +Removing instruction breturn_from_b4: +Removing instruction b7_from_b10: +Removing instruction b7_from_b8: Removing instruction b2_from_b1: Removing instruction b2_from_b5: -Removing instruction breturn_from_b2: -Removing instruction breturn_from_b8: -Removing instruction breturn: -Removing instruction b7_from_b6: -Removing instruction b7_from_b9: Removing instruction b1_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction b3: @@ -9732,28 +9891,28 @@ Removing instruction b4: Removing instruction breturn: Removing instruction b1: Removing instruction breturn: -Removing instruction b12: -Removing instruction b1_from_b12: -Removing instruction breturn: -Removing instruction b3_from_b2: -Removing instruction b4: -Removing instruction b10: -Removing instruction b1_from_b11: -Removing instruction b7: -Removing instruction b3_from_b7: Removing instruction b13: -Removing instruction b9: -Removing instruction b5_from_b8: +Removing instruction b2_from_b13: +Removing instruction b4_from_b2: +Removing instruction b14: +Removing instruction b10: +Removing instruction b6: +Removing instruction b8: +Removing instruction b3: +Removing instruction b5: +Removing instruction b11: +Removing instruction b1: +Removing instruction breturn: Removing instruction breturn: Removing instruction breturn: Removing instruction memset_from_print_cls: Removing instruction breturn: Removing instruction breturn: Removing instruction b1_from_init_angle_screen: +Removing instruction b5: +Removing instruction b2: Removing instruction b4: Removing instruction breturn: -Removing instruction b5: -Removing instruction b2_from_b5: Removing instruction b2: Removing instruction b5: Removing instruction b21: @@ -9767,21 +9926,21 @@ Removing instruction b11: Removing instruction b1_from_b11: Removing instruction b3: Removing instruction b12: -Removing instruction b7: -Removing instruction breturn: Removing instruction b9: Removing instruction b13: Removing instruction b14: -Removing instruction b5_from_b14: +Removing instruction b5: +Removing instruction b7: +Removing instruction breturn: Removing instruction bsearch16u_from_sqrt: Removing instruction b1: Removing instruction breturn: -Removing instruction b3_from_bsearch16u: +Removing instruction b4_from_bsearch16u: +Removing instruction b8: +Removing instruction b3: Removing instruction b5: Removing instruction b1: -Removing instruction b8: -Removing instruction b9: -Removing instruction b3_from_b7: +Removing instruction b4_from_b9: Removing instruction breturn: Removing instruction malloc_from_init_squares: Removing instruction b2: @@ -9789,21 +9948,28 @@ Removing instruction b1_from_b2: Removing instruction breturn: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Replacing jump to rts with rts in jmp b2 +Skipping double jump to breturn in beq b2 +Skipping double jump to breturn in bcc b2 +Replacing jump to rts with rts in jmp breturn Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b5_from_b3 to b4 -Succesful ASM optimization Pass5RelabelLongLabels Adding RTS to root block Succesful ASM optimization Pass5AddMainRts Removing instruction jmp b1 Removing instruction jmp b2 +Removing instruction jmp b2 +Removing instruction jmp b4 +Removing instruction jmp b7 Removing instruction jmp b1 +Removing instruction jmp b3 Removing instruction jmp b1 +Removing instruction jmp b6 Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination -Fixing long branch [579] beq b12 to bne -Fixing long branch [473] bpl b1 to bmi -Fixing long branch [485] bpl b4 to bmi +Removing instruction b2: +Succesful ASM optimization Pass5UnusedLabelElimination +Fixing long branch [571] beq b12 to bne +Fixing long branch [465] bpl b1 to bmi +Fixing long branch [477] bpl b4 to bmi FINAL SYMBOL TABLE (label) @1 @@ -9856,12 +10022,12 @@ FINAL SYMBOL TABLE }} (const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2 (word*) SQUARES -(void*) SQUARES#1 SQUARES zp ZP_WORD:9 0.03225806451612903 +(void*) SQUARES#1 SQUARES zp ZP_WORD:19 0.03225806451612903 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 $2 zp ZP_WORD:7 4.0 (byte~) atan2_16::$23 reg byte a 2002.0 (byte~) atan2_16::$24 reg byte a 2002.0 -(signed word~) atan2_16::$7 $7 zp ZP_WORD:26 4.0 +(signed word~) atan2_16::$7 $7 zp ZP_WORD:15 4.0 (label) atan2_16::@1 (label) atan2_16::@10 (label) atan2_16::@11 @@ -9885,27 +10051,27 @@ FINAL SYMBOL TABLE (label) atan2_16::@9 (label) atan2_16::@return (word) atan2_16::angle -(word) atan2_16::angle#1 angle zp ZP_WORD:16 3.0 -(word) atan2_16::angle#11 angle zp ZP_WORD:16 4.0 -(word) atan2_16::angle#12 angle zp ZP_WORD:16 190.66666666666666 -(word) atan2_16::angle#13 angle zp ZP_WORD:16 1334.6666666666667 -(word) atan2_16::angle#2 angle zp ZP_WORD:16 2002.0 -(word) atan2_16::angle#3 angle zp ZP_WORD:16 2002.0 -(word) atan2_16::angle#4 angle zp ZP_WORD:16 4.0 -(word) atan2_16::angle#5 angle zp ZP_WORD:16 4.0 -(word) atan2_16::angle#6 angle zp ZP_WORD:16 2004.0 +(word) atan2_16::angle#1 angle zp ZP_WORD:24 3.0 +(word) atan2_16::angle#11 angle zp ZP_WORD:24 4.0 +(word) atan2_16::angle#12 angle zp ZP_WORD:24 190.66666666666666 +(word) atan2_16::angle#13 angle zp ZP_WORD:24 1334.6666666666667 +(word) atan2_16::angle#2 angle zp ZP_WORD:24 2002.0 +(word) atan2_16::angle#3 angle zp ZP_WORD:24 2002.0 +(word) atan2_16::angle#4 angle zp ZP_WORD:24 4.0 +(word) atan2_16::angle#5 angle zp ZP_WORD:24 4.0 +(word) atan2_16::angle#6 angle zp ZP_WORD:24 2004.0 (byte) atan2_16::i (byte) atan2_16::i#1 reg byte x 1501.5 (byte) atan2_16::i#2 reg byte x 208.54166666666669 (word) atan2_16::return -(word) atan2_16::return#0 return zp ZP_WORD:16 34.99999999999999 -(word) atan2_16::return#2 return zp ZP_WORD:16 202.0 +(word) atan2_16::return#0 return zp ZP_WORD:24 34.99999999999999 +(word) atan2_16::return#2 return zp ZP_WORD:24 202.0 (byte) atan2_16::shift (byte) atan2_16::shift#1 reg byte y 20002.0 (byte) atan2_16::shift#2 reg byte y 8001.25 (byte~) atan2_16::shift#5 reg byte y 667.3333333333334 (signed word) atan2_16::x -(signed word) atan2_16::x#0 x zp ZP_WORD:20 2.8684210526315796 +(signed word) atan2_16::x#0 x zp ZP_WORD:19 2.8684210526315796 (signed word) atan2_16::xd (signed word) atan2_16::xd#1 xd zp ZP_WORD:9 6667.333333333333 (signed word~) atan2_16::xd#10 xd zp ZP_WORD:9 1001.0 @@ -9913,20 +10079,20 @@ FINAL SYMBOL TABLE (signed word) atan2_16::xd#3 xd zp ZP_WORD:9 7668.333333333332 (signed word) atan2_16::xd#5 xd zp ZP_WORD:9 1001.0 (signed word) atan2_16::xi -(signed word) atan2_16::xi#0 xi zp ZP_WORD:26 6.0 -(signed word) atan2_16::xi#1 xi zp ZP_WORD:26 500.5 -(signed word~) atan2_16::xi#13 xi zp ZP_WORD:26 4.0 -(signed word) atan2_16::xi#2 xi zp ZP_WORD:26 500.5 -(signed word) atan2_16::xi#3 xi zp ZP_WORD:26 267.0666666666667 -(signed word) atan2_16::xi#8 xi zp ZP_WORD:26 1001.0 +(signed word) atan2_16::xi#0 xi zp ZP_WORD:15 6.0 +(signed word) atan2_16::xi#1 xi zp ZP_WORD:15 500.5 +(signed word~) atan2_16::xi#13 xi zp ZP_WORD:15 4.0 +(signed word) atan2_16::xi#2 xi zp ZP_WORD:15 500.5 +(signed word) atan2_16::xi#3 xi zp ZP_WORD:15 267.0666666666667 +(signed word) atan2_16::xi#8 xi zp ZP_WORD:15 1001.0 (signed word) atan2_16::y (signed word) atan2_16::y#0 y zp ZP_WORD:22 2.724999999999999 (signed word) atan2_16::yd -(signed word) atan2_16::yd#1 yd zp ZP_WORD:24 10001.0 -(signed word~) atan2_16::yd#10 yd zp ZP_WORD:24 2002.0 -(signed word) atan2_16::yd#2 yd zp ZP_WORD:24 2002.0 -(signed word) atan2_16::yd#3 yd zp ZP_WORD:24 4601.0 -(signed word) atan2_16::yd#5 yd zp ZP_WORD:24 2002.0 +(signed word) atan2_16::yd#1 yd zp ZP_WORD:26 10001.0 +(signed word~) atan2_16::yd#10 yd zp ZP_WORD:26 2002.0 +(signed word) atan2_16::yd#2 yd zp ZP_WORD:26 2002.0 +(signed word) atan2_16::yd#3 yd zp ZP_WORD:26 4601.0 +(signed word) atan2_16::yd#5 yd zp ZP_WORD:26 2002.0 (signed word) atan2_16::yi (signed word) atan2_16::yi#0 yi zp ZP_WORD:7 1.2000000000000002 (signed word) atan2_16::yi#1 yi zp ZP_WORD:7 667.3333333333334 @@ -9936,9 +10102,10 @@ FINAL SYMBOL TABLE (signed word) atan2_16::yi#8 yi zp ZP_WORD:7 1001.0 (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) (byte~) bsearch16u::$16 reg byte a 2002.0 -(word*~) bsearch16u::$2 $2 zp ZP_WORD:7 4.0 +(word*~) bsearch16u::$2 $2 zp ZP_WORD:15 4.0 (byte~) bsearch16u::$6 reg byte a 2002.0 (label) bsearch16u::@1 +(label) bsearch16u::@10 (label) bsearch16u::@2 (label) bsearch16u::@3 (label) bsearch16u::@4 @@ -9949,26 +10116,27 @@ FINAL SYMBOL TABLE (label) bsearch16u::@9 (label) bsearch16u::@return (word*) bsearch16u::items -(word*) bsearch16u::items#0 items zp ZP_WORD:7 1001.0 -(word*) bsearch16u::items#1 items zp ZP_WORD:7 2.0 -(word*) bsearch16u::items#2 items zp ZP_WORD:7 334.5555555555556 -(word*) bsearch16u::items#8 items zp ZP_WORD:7 1501.5 +(word*) bsearch16u::items#0 items zp ZP_WORD:15 1001.0 +(word*) bsearch16u::items#1 items#1 zp ZP_WORD:7 2.0 +(word*) bsearch16u::items#10 items#10 zp ZP_WORD:7 429.2857142857143 +(word*) bsearch16u::items#11 items zp ZP_WORD:15 752.25 +(word*~) bsearch16u::items#16 items#16 zp ZP_WORD:7 2002.0 +(word*~) bsearch16u::items#19 items zp ZP_WORD:15 2002.0 (word) bsearch16u::key -(word) bsearch16u::key#0 key zp ZP_WORD:22 0.26666666666666666 +(word) bsearch16u::key#0 key zp ZP_WORD:24 0.23529411764705882 (byte) bsearch16u::num -(byte) bsearch16u::num#0 reg byte x 2002.0 +(byte) bsearch16u::num#0 reg byte x 1001.0 (byte) bsearch16u::num#1 reg byte x 2002.0 -(byte) bsearch16u::num#3 reg byte x 556.1111111111111 +(byte) bsearch16u::num#10 reg byte x 444.8888888888889 (byte) bsearch16u::num#5 reg byte x 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:24 501.0 +(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:15 750.75 (signed word) bsearch16u::result (signed word) bsearch16u::result#0 result zp ZP_WORD:26 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 return zp ZP_WORD:7 2.0 -(word*) bsearch16u::return#2 return zp ZP_WORD:7 6.0 -(word*) bsearch16u::return#3 return zp ZP_WORD:7 4.0 -(word*~) bsearch16u::return#6 return zp ZP_WORD:7 4.0 +(word*) bsearch16u::return#1 return zp ZP_WORD:15 335.00000000000006 +(word*) bsearch16u::return#2 return zp ZP_WORD:15 6.0 +(word*) bsearch16u::return#3 return zp ZP_WORD:15 4.0 (void()) doplasma((byte*) doplasma::screen) (byte~) doplasma::$2 reg byte a 2002.0 (label) doplasma::@1 @@ -9989,9 +10157,9 @@ FINAL SYMBOL TABLE (byte*) doplasma::screen#5 screen zp ZP_WORD:7 200.83333333333334 (byte*) doplasma::screen#6 screen zp ZP_WORD:7 0.4 (byte*) doplasma::sin_x -(byte*) doplasma::sin_x#0 sin_x zp ZP_WORD:26 77.15384615384616 +(byte*) doplasma::sin_x#0 sin_x zp ZP_WORD:19 77.15384615384616 (byte*) doplasma::sin_y -(byte*) doplasma::sin_y#0 sin_y zp ZP_WORD:16 83.58333333333334 +(byte*) doplasma::sin_y#0 sin_y zp ZP_WORD:15 83.58333333333334 (byte) doplasma::x (byte) doplasma::x#1 reg byte x 1501.5 (byte) doplasma::x#2 reg byte x 1668.3333333333335 @@ -9999,10 +10167,10 @@ FINAL SYMBOL TABLE (byte) doplasma::y#1 y zp ZP_BYTE:18 151.5 (byte) doplasma::y#4 y zp ZP_BYTE:18 22.444444444444443 (byte*) heap_head -(byte*) heap_head#1 heap_head zp ZP_WORD:24 0.6000000000000001 -(byte*) heap_head#12 heap_head zp ZP_WORD:24 6.0 +(byte*) heap_head#1 heap_head zp ZP_WORD:9 0.6000000000000001 +(byte*) heap_head#12 heap_head zp ZP_WORD:9 6.0 (void()) init_angle_screen((byte*) init_angle_screen::screen) -(word~) init_angle_screen::$11 $11 zp ZP_WORD:16 202.0 +(word~) init_angle_screen::$11 $11 zp ZP_WORD:24 202.0 (byte~) init_angle_screen::$13 reg byte a 202.0 (byte~) init_angle_screen::$14 reg byte a 202.0 (byte~) init_angle_screen::$15 reg byte a 202.0 @@ -10016,30 +10184,30 @@ FINAL SYMBOL TABLE (label) init_angle_screen::@5 (label) init_angle_screen::@return (byte) init_angle_screen::ang_w -(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:19 84.16666666666666 +(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:21 84.16666666666666 (word) init_angle_screen::angle_w -(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:16 202.0 +(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:24 202.0 (byte*) init_angle_screen::screen (byte*) init_angle_screen::screen#0 screen zp ZP_WORD:5 3.0 (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:5 4.0 (byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:5 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:5 9.04 +(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:5 9.040000000000001 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:3 2.0 (byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:3 5.5 (byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:3 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 x zp ZP_BYTE:18 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:18 28.857142857142858 +(byte) init_angle_screen::x#5 x zp ZP_BYTE:18 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:2 202.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:2 18.363636363636363 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:2 101.0 +(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:2 19.238095238095237 (signed word) init_angle_screen::xw -(word) init_angle_screen::xw#0 xw zp ZP_WORD:20 33.666666666666664 +(word) init_angle_screen::xw#0 xw zp ZP_WORD:19 33.666666666666664 (byte) init_angle_screen::y -(byte) init_angle_screen::y#1 y zp ZP_BYTE:15 16.5 -(byte) init_angle_screen::y#5 y zp ZP_BYTE:15 4.730769230769231 +(byte) init_angle_screen::y#1 y zp ZP_BYTE:17 16.5 +(byte) init_angle_screen::y#5 y zp ZP_BYTE:17 4.730769230769231 (signed word) init_angle_screen::yw (word) init_angle_screen::yw#0 yw zp ZP_WORD:22 50.5 (void()) init_dist_screen((byte*) init_dist_screen::screen) @@ -10065,7 +10233,7 @@ FINAL SYMBOL TABLE (byte) init_dist_screen::d (byte) init_dist_screen::d#0 reg byte a 126.25 (word) init_dist_screen::ds -(word) init_dist_screen::ds#0 ds zp ZP_WORD:22 202.0 +(word) init_dist_screen::ds#0 ds zp ZP_WORD:24 202.0 (byte*) init_dist_screen::screen (byte*) init_dist_screen::screen#0 screen zp ZP_WORD:3 1.5 (byte*) init_dist_screen::screen_bottomline @@ -10076,17 +10244,17 @@ FINAL SYMBOL TABLE (byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:3 5.5 (byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:3 7.0625 (byte) init_dist_screen::x -(byte) init_dist_screen::x#1 x zp ZP_BYTE:15 101.0 -(byte) init_dist_screen::x#2 x zp ZP_BYTE:15 30.3 +(byte) init_dist_screen::x#1 x zp ZP_BYTE:17 101.0 +(byte) init_dist_screen::x#10 x zp ZP_BYTE:17 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 reg byte a 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:18 202.0 -(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:18 19.238095238095237 +(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:18 101.0 +(byte) init_dist_screen::xb#10 xb zp ZP_BYTE:18 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 reg byte a 303.0 (word) init_dist_screen::xds -(word) init_dist_screen::xds#0 xds zp ZP_WORD:22 202.0 +(word) init_dist_screen::xds#0 xds zp ZP_WORD:24 202.0 (byte) init_dist_screen::y (byte) init_dist_screen::y#1 y zp ZP_BYTE:2 16.5 (byte) init_dist_screen::y#10 y zp ZP_BYTE:2 0.9705882352941178 @@ -10095,7 +10263,7 @@ FINAL SYMBOL TABLE (byte) init_dist_screen::yd (byte) init_dist_screen::yd#0 reg byte a 33.0 (word) init_dist_screen::yds -(word) init_dist_screen::yds#0 yds zp ZP_WORD:20 4.869565217391305 +(word) init_dist_screen::yds#0 yds zp ZP_WORD:22 4.869565217391305 (void()) init_squares() (byte~) init_squares::$3 reg byte a 22.0 (byte~) init_squares::$4 reg byte a 22.0 @@ -10106,12 +10274,12 @@ FINAL SYMBOL TABLE (byte) init_squares::i#1 reg byte x 16.5 (byte) init_squares::i#2 reg byte x 5.5 (word) init_squares::sqr -(word) init_squares::sqr#1 sqr zp ZP_WORD:26 7.333333333333333 -(word) init_squares::sqr#2 sqr zp ZP_WORD:26 6.6000000000000005 +(word) init_squares::sqr#1 sqr zp ZP_WORD:24 7.333333333333333 +(word) init_squares::sqr#2 sqr zp ZP_WORD:24 6.6000000000000005 (word*) init_squares::squares -(word*) init_squares::squares#0 squares zp ZP_WORD:16 4.0 -(word*) init_squares::squares#1 squares zp ZP_WORD:16 3.6666666666666665 -(word*) init_squares::squares#2 squares zp ZP_WORD:16 17.5 +(word*) init_squares::squares#0 squares zp ZP_WORD:26 4.0 +(word*) init_squares::squares#1 squares zp ZP_WORD:26 3.6666666666666665 +(word*) init_squares::squares#2 squares zp ZP_WORD:26 17.5 (void()) main() (label) main::@1 (label) main::@2 @@ -10149,10 +10317,10 @@ FINAL SYMBOL TABLE (const byte) main::toD0182_return#0 toD0182_return = >(word)(const byte*) SCREEN2#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f (byte*) main::toD0182_screen (void()) make_plasma_charset((byte*) make_plasma_charset::charset) -(word~) make_plasma_charset::$10 $10 zp ZP_WORD:16 202.0 -(word~) make_plasma_charset::$11 $11 zp ZP_WORD:16 202.0 +(word~) make_plasma_charset::$10 $10 zp ZP_WORD:19 202.0 +(word~) make_plasma_charset::$11 $11 zp ZP_WORD:19 202.0 (byte~) make_plasma_charset::$12 reg byte a 22.0 -(byte*~) make_plasma_charset::$16 $16 zp ZP_WORD:16 202.0 +(byte*~) make_plasma_charset::$16 $16 zp ZP_WORD:19 202.0 (byte~) make_plasma_charset::$3 reg byte a 22.0 (byte~) make_plasma_charset::$6 reg byte a 2002.0 (byte~) make_plasma_charset::$7 $7 zp ZP_BYTE:18 2002.0 @@ -10161,6 +10329,7 @@ FINAL SYMBOL TABLE (label) make_plasma_charset::@11 (label) make_plasma_charset::@12 (label) make_plasma_charset::@13 +(label) make_plasma_charset::@14 (label) make_plasma_charset::@2 (label) make_plasma_charset::@3 (label) make_plasma_charset::@4 @@ -10172,29 +10341,29 @@ FINAL SYMBOL TABLE (label) make_plasma_charset::@return (byte) make_plasma_charset::b (byte) make_plasma_charset::b#1 reg byte y 2002.0 -(byte) make_plasma_charset::b#2 reg byte y 282.1818181818182 -(byte) make_plasma_charset::b#6 reg byte y 1501.5 +(byte) make_plasma_charset::b#10 reg byte y 500.5 +(byte) make_plasma_charset::b#2 reg byte y 517.3333333333334 (byte[8]) make_plasma_charset::bittab (const byte[8]) make_plasma_charset::bittab#0 bittab = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (word) make_plasma_charset::c -(word) make_plasma_charset::c#1 c zp ZP_WORD:5 22.0 -(word) make_plasma_charset::c#2 c zp ZP_WORD:5 5.777777777777778 +(word) make_plasma_charset::c#1 c zp ZP_WORD:5 16.5 +(word) make_plasma_charset::c#16 c zp ZP_WORD:5 5.800000000000001 (byte*) make_plasma_charset::charset (byte) make_plasma_charset::i -(byte) make_plasma_charset::i#1 i zp ZP_BYTE:2 202.0 -(byte) make_plasma_charset::i#2 i zp ZP_BYTE:2 23.764705882352942 +(byte) make_plasma_charset::i#1 i zp ZP_BYTE:2 151.5 +(byte) make_plasma_charset::i#13 i zp ZP_BYTE:2 20.2 (byte) make_plasma_charset::ii -(byte) make_plasma_charset::ii#1 reg byte x 2002.0 -(byte) make_plasma_charset::ii#2 reg byte x 400.4 +(byte) make_plasma_charset::ii#1 reg byte x 1501.5 +(byte) make_plasma_charset::ii#10 reg byte x 375.375 (byte) make_plasma_charset::s -(byte) make_plasma_charset::s#0 s zp ZP_BYTE:15 53.26315789473684 +(byte) make_plasma_charset::s#0 s zp ZP_BYTE:17 56.22222222222223 (void*()) malloc((word) malloc::size) (label) malloc::@return (byte*) malloc::mem -(byte*) malloc::mem#0 mem zp ZP_WORD:9 0.6666666666666666 +(byte*) malloc::mem#0 mem zp ZP_WORD:19 0.6666666666666666 (void*) malloc::return (word) malloc::size -(word) malloc::size#3 size zp ZP_WORD:9 2.0 +(word) malloc::size#3 size zp ZP_WORD:19 2.0 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -10207,7 +10376,7 @@ FINAL SYMBOL TABLE (byte*) memset::dst#2 dst zp ZP_WORD:3 15.333333333333332 (byte*~) memset::dst#4 dst zp ZP_WORD:3 4.0 (byte*) memset::end -(byte*) memset::end#0 end zp ZP_WORD:26 2.1666666666666665 +(byte*) memset::end#0 end zp ZP_WORD:15 2.1666666666666665 (word) memset::num (void*) memset::return (void*) memset::str @@ -10218,8 +10387,8 @@ FINAL SYMBOL TABLE (const byte) print_char::ch#0 ch = (byte) '.' (byte*) print_char_cursor (byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:7 4.333333333333333 -(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:7 1.0 -(byte*) print_char_cursor#30 print_char_cursor zp ZP_WORD:7 16.5 +(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:7 11.0 +(byte*) print_char_cursor#59 print_char_cursor zp ZP_WORD:7 1.0833333333333333 (void()) print_cls() (label) print_cls::@return (byte*) print_line_cursor @@ -10237,88 +10406,88 @@ FINAL SYMBOL TABLE (byte) sin_offset_x#12 sin_offset_x zp ZP_BYTE:2 2.666666666666667 (byte) sin_offset_x#14 sin_offset_x zp ZP_BYTE:2 11.0 (byte) sin_offset_y -(byte) sin_offset_y#10 sin_offset_y zp ZP_BYTE:15 1.5294117647058825 -(byte) sin_offset_y#12 sin_offset_y zp ZP_BYTE:15 3.0 -(byte) sin_offset_y#14 sin_offset_y zp ZP_BYTE:15 11.0 +(byte) sin_offset_y#10 sin_offset_y zp ZP_BYTE:17 1.5294117647058825 +(byte) sin_offset_y#12 sin_offset_y zp ZP_BYTE:17 3.0 +(byte) sin_offset_y#14 sin_offset_y zp ZP_BYTE:17 11.0 (word()) sqr((byte) sqr::val) (byte~) sqr::$0 reg byte a 4.0 (label) sqr::@return (word) sqr::return -(word) sqr::return#0 return zp ZP_WORD:22 28.5 -(word) sqr::return#2 return#2 zp ZP_WORD:20 22.0 -(word) sqr::return#3 return zp ZP_WORD:22 202.0 +(word) sqr::return#0 return zp ZP_WORD:24 28.5 +(word) sqr::return#2 return#2 zp ZP_WORD:22 22.0 +(word) sqr::return#3 return zp ZP_WORD:24 202.0 (byte) sqr::val (byte) sqr::val#0 reg byte a 22.0 (byte) sqr::val#1 reg byte a 202.0 (byte) sqr::val#2 reg byte a 114.0 (byte()) sqrt((word) sqrt::val) -(word~) sqrt::$1 $1 zp ZP_WORD:7 2.0 -(word~) sqrt::$3 $3 zp ZP_WORD:7 4.0 +(word~) sqrt::$1 $1 zp ZP_WORD:15 2.0 +(word~) sqrt::$3 $3 zp ZP_WORD:15 4.0 (label) sqrt::@1 (label) sqrt::@return (word*) sqrt::found -(word*) sqrt::found#0 found zp ZP_WORD:7 4.0 +(word*) sqrt::found#0 found zp ZP_WORD:15 4.0 (byte) sqrt::return (byte) sqrt::return#0 reg byte a 34.33333333333333 (byte) sqrt::return#2 reg byte a 202.0 (byte) sqrt::sq (word) sqrt::val -(word) sqrt::val#0 val zp ZP_WORD:22 103.0 +(word) sqrt::val#0 val zp ZP_WORD:24 103.0 reg byte x [ doplasma::x#2 doplasma::x#1 ] reg byte x [ memset::c#4 ] -reg byte x [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] -reg byte y [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ] +reg byte x [ make_plasma_charset::ii#10 make_plasma_charset::ii#1 ] +reg byte y [ make_plasma_charset::b#10 make_plasma_charset::b#2 make_plasma_charset::b#1 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -zp ZP_BYTE:2 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#2 init_angle_screen::xb#1 make_plasma_charset::i#2 make_plasma_charset::i#1 sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] +zp ZP_BYTE:2 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#5 init_angle_screen::xb#1 make_plasma_charset::i#13 make_plasma_charset::i#1 sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] zp ZP_WORD:3 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] -zp ZP_WORD:5 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 make_plasma_charset::c#2 make_plasma_charset::c#1 doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] +zp ZP_WORD:5 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 make_plasma_charset::c#16 make_plasma_charset::c#1 doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -zp ZP_WORD:7 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] -reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +zp ZP_WORD:7 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 print_char_cursor#59 print_char_cursor#18 print_char_cursor#1 doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] +reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] -zp ZP_WORD:9 [ malloc::size#3 malloc::mem#0 SQUARES#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +zp ZP_WORD:9 [ heap_head#12 heap_head#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:11 [ SCREEN_DIST#0 ] zp ZP_WORD:13 [ SCREEN_ANGLE#0 ] reg byte a [ doplasma::$2 ] +zp ZP_WORD:15 [ memset::end#0 doplasma::sin_y#0 bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ make_plasma_charset::$3 ] -zp ZP_BYTE:15 [ make_plasma_charset::s#0 init_dist_screen::x#2 init_dist_screen::x#1 init_angle_screen::y#5 init_angle_screen::y#1 sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] -reg byte a [ make_plasma_charset::$12 ] -zp ZP_WORD:16 [ make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 doplasma::sin_y#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] +zp ZP_BYTE:17 [ make_plasma_charset::s#0 init_dist_screen::x#10 init_dist_screen::x#1 init_angle_screen::y#5 init_angle_screen::y#1 sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] reg byte a [ sid_rnd::return#2 ] reg byte a [ make_plasma_charset::$6 ] -zp ZP_BYTE:18 [ make_plasma_charset::$7 init_dist_screen::xb#2 init_dist_screen::xb#1 init_angle_screen::x#2 init_angle_screen::x#1 doplasma::y#4 doplasma::y#1 ] +zp ZP_BYTE:18 [ make_plasma_charset::$7 init_dist_screen::xb#10 init_dist_screen::xb#1 init_angle_screen::x#5 init_angle_screen::x#1 doplasma::y#4 doplasma::y#1 ] +reg byte a [ make_plasma_charset::$12 ] reg byte a [ sid_rnd::return#0 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] +zp ZP_WORD:19 [ init_angle_screen::xw#0 atan2_16::x#0 make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 doplasma::sin_x#0 malloc::size#3 malloc::mem#0 SQUARES#1 ] reg byte a [ init_angle_screen::$7 ] -zp ZP_BYTE:19 [ init_angle_screen::ang_w#0 ] +zp ZP_BYTE:21 [ init_angle_screen::ang_w#0 ] reg byte a [ init_angle_screen::$13 ] reg byte a [ init_angle_screen::$14 ] reg byte a [ init_angle_screen::$15 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte a [ init_dist_screen::y2#0 ] -zp ZP_WORD:20 [ sqr::return#2 init_dist_screen::yds#0 init_angle_screen::xw#0 atan2_16::x#0 ] +zp ZP_WORD:22 [ sqr::return#2 init_dist_screen::yds#0 init_angle_screen::yw#0 atan2_16::y#0 ] reg byte a [ init_dist_screen::x2#0 ] -zp ZP_WORD:22 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::yw#0 atan2_16::y#0 ] +zp ZP_WORD:24 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_squares::sqr#2 init_squares::sqr#1 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] reg byte a [ sqrt::return#2 ] reg byte a [ init_dist_screen::d#0 ] reg byte a [ sqrt::return#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] -zp ZP_WORD:24 [ bsearch16u::pivot#0 heap_head#12 heap_head#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -zp ZP_WORD:26 [ bsearch16u::result#0 memset::end#0 doplasma::sin_x#0 init_squares::sqr#2 init_squares::sqr#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +zp ZP_WORD:26 [ bsearch16u::result#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] reg byte a [ sqr::$0 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] FINAL ASSEMBLER -Score: 1210179 +Score: 1232791 // File Comments // Plasma based on the distance/angle to the screen center @@ -10350,15 +10519,15 @@ Score: 1210179 // Plasma screen 2 .label SCREEN2 = $2c00 .const NUM_SQUARES = $30 - .label heap_head = $18 - .label SQUARES = 9 + .label heap_head = 9 + .label SQUARES = $13 .label print_char_cursor = 7 // Screen containing distance to center .label SCREEN_DIST = $b // Screen containing angle to center .label SCREEN_ANGLE = $d .label sin_offset_x = 2 - .label sin_offset_y = $f + .label sin_offset_y = $11 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -10418,7 +10587,7 @@ main: { lda SCREEN_DIST+1 sta init_dist_screen.screen+1 // [10] call init_dist_screen - // [170] phi from main to init_dist_screen [phi:main->init_dist_screen] + // [169] phi from main to init_dist_screen [phi:main->init_dist_screen] jsr init_dist_screen // main::@5 // init_angle_screen(SCREEN_ANGLE) @@ -10506,8 +10675,8 @@ main: { doplasma: { .label angle = 3 .label dist = 5 - .label sin_x = $1a - .label sin_y = $10 + .label sin_x = $13 + .label sin_y = $f .label screen = 7 .label y = $12 // angle = SCREEN_ANGLE @@ -10639,7 +10808,7 @@ doplasma: { // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. // memset(void* zeropage(3) str, byte register(X) c) memset: { - .label end = $1a + .label end = $f .label dst = 3 .label str = 3 // memset::@1 @@ -10688,111 +10857,97 @@ memset: { // Make a plasma-friendly charset where the chars are randomly filled make_plasma_charset: { .label _7 = $12 - .label _10 = $10 - .label _11 = $10 - .label s = $f + .label _10 = $13 + .label _11 = $13 + .label s = $11 .label i = 2 .label c = 5 - .label _16 = $10 + .label _16 = $13 // sid_rnd_init() // [53] call sid_rnd_init jsr sid_rnd_init - // [54] phi from make_plasma_charset to make_plasma_charset::@12 [phi:make_plasma_charset->make_plasma_charset::@12] - // make_plasma_charset::@12 + // [54] phi from make_plasma_charset to make_plasma_charset::@13 [phi:make_plasma_charset->make_plasma_charset::@13] + // make_plasma_charset::@13 // print_cls() // [55] call print_cls - // [90] phi from make_plasma_charset::@12 to print_cls [phi:make_plasma_charset::@12->print_cls] + // [89] phi from make_plasma_charset::@13 to print_cls [phi:make_plasma_charset::@13->print_cls] jsr print_cls - // [56] phi from make_plasma_charset::@12 to make_plasma_charset::@1 [phi:make_plasma_charset::@12->make_plasma_charset::@1] - // [56] phi (byte*) print_char_cursor#18 = (const byte*) print_line_cursor#0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#0] -- pbuz1=pbuc1 + // [56] phi from make_plasma_charset::@13 to make_plasma_charset::@2 [phi:make_plasma_charset::@13->make_plasma_charset::@2] + // [56] phi (byte*) print_char_cursor#59 = (const byte*) print_line_cursor#0 [phi:make_plasma_charset::@13->make_plasma_charset::@2#0] -- pbuz1=pbuc1 lda #print_line_cursor sta print_char_cursor+1 - // [56] phi (word) make_plasma_charset::c#2 = (byte) 0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#1] -- vwuz1=vbuc1 + // [56] phi (word) make_plasma_charset::c#16 = (byte) 0 [phi:make_plasma_charset::@13->make_plasma_charset::@2#1] -- vwuz1=vbuc1 lda #<0 sta c sta c+1 - // make_plasma_charset::@1 - b1: - // for (unsigned int c = 0; c < 0x100; ++c) - // [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 -- vwuz1_lt_vwuc1_then_la1 - lda c+1 - cmp #>$100 - bcc b2 - bne !+ - lda c - cmp #<$100 - bcc b2 - !: - // make_plasma_charset::@return - // } - // [58] return - rts + // [56] phi from make_plasma_charset::@1 to make_plasma_charset::@2 [phi:make_plasma_charset::@1->make_plasma_charset::@2] + // [56] phi (byte*) print_char_cursor#59 = (byte*) print_char_cursor#18 [phi:make_plasma_charset::@1->make_plasma_charset::@2#0] -- register_copy + // [56] phi (word) make_plasma_charset::c#16 = (word) make_plasma_charset::c#1 [phi:make_plasma_charset::@1->make_plasma_charset::@2#1] -- register_copy // make_plasma_charset::@2 b2: // make_plasma_charset::@3] - // [61] phi (byte) make_plasma_charset::i#2 = (byte) 0 [phi:make_plasma_charset::@2->make_plasma_charset::@3#0] -- vbuz1=vbuc1 + // [59] phi from make_plasma_charset::@2 to make_plasma_charset::@4 [phi:make_plasma_charset::@2->make_plasma_charset::@4] + // [59] phi (byte) make_plasma_charset::i#13 = (byte) 0 [phi:make_plasma_charset::@2->make_plasma_charset::@4#0] -- vbuz1=vbuc1 lda #0 sta i - // make_plasma_charset::@3 - b3: - // for ( char i = 0; i < 8; ++i) - // [62] if((byte) make_plasma_charset::i#2<(byte) 8) goto make_plasma_charset::@5 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #8 - bcc b4 + // [59] phi from make_plasma_charset::@3 to make_plasma_charset::@4 [phi:make_plasma_charset::@3->make_plasma_charset::@4] + // [59] phi (byte) make_plasma_charset::i#13 = (byte) make_plasma_charset::i#1 [phi:make_plasma_charset::@3->make_plasma_charset::@4#0] -- register_copy // make_plasma_charset::@4 - // c & 0x07 - // [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 - lda c - and #7 - // if ((c & 0x07) == 0) - // [64] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@11 -- vbuaa_neq_0_then_la1 - cmp #0 - bne b11 - // [65] phi from make_plasma_charset::@4 to make_plasma_charset::@10 [phi:make_plasma_charset::@4->make_plasma_charset::@10] - // make_plasma_charset::@10 - // print_char('.') - // [66] call print_char - jsr print_char - // [67] phi from make_plasma_charset::@10 make_plasma_charset::@4 to make_plasma_charset::@11 [phi:make_plasma_charset::@10/make_plasma_charset::@4->make_plasma_charset::@11] - // [67] phi (byte*) print_char_cursor#30 = (byte*) print_char_cursor#1 [phi:make_plasma_charset::@10/make_plasma_charset::@4->make_plasma_charset::@11#0] -- register_copy - // make_plasma_charset::@11 - b11: - // for (unsigned int c = 0; c < 0x100; ++c) - // [68] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#2 -- vwuz1=_inc_vwuz1 - inc c - bne !+ - inc c+1 - !: - // [56] phi from make_plasma_charset::@11 to make_plasma_charset::@1 [phi:make_plasma_charset::@11->make_plasma_charset::@1] - // [56] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#30 [phi:make_plasma_charset::@11->make_plasma_charset::@1#0] -- register_copy - // [56] phi (word) make_plasma_charset::c#2 = (word) make_plasma_charset::c#1 [phi:make_plasma_charset::@11->make_plasma_charset::@1#1] -- register_copy - jmp b1 - // [69] phi from make_plasma_charset::@3 to make_plasma_charset::@5 [phi:make_plasma_charset::@3->make_plasma_charset::@5] b4: - // [69] phi (byte) make_plasma_charset::b#2 = (byte) 0 [phi:make_plasma_charset::@3->make_plasma_charset::@5#0] -- vbuyy=vbuc1 + // [60] phi from make_plasma_charset::@4 to make_plasma_charset::@7 [phi:make_plasma_charset::@4->make_plasma_charset::@7] + // [60] phi (byte) make_plasma_charset::b#10 = (byte) 0 [phi:make_plasma_charset::@4->make_plasma_charset::@7#0] -- vbuyy=vbuc1 ldy #0 - // [69] phi (byte) make_plasma_charset::ii#2 = (byte) 0 [phi:make_plasma_charset::@3->make_plasma_charset::@5#1] -- vbuxx=vbuc1 + // [60] phi (byte) make_plasma_charset::ii#10 = (byte) 0 [phi:make_plasma_charset::@4->make_plasma_charset::@7#1] -- vbuxx=vbuc1 ldx #0 - // make_plasma_charset::@5 - b5: - // for (char ii = 0; ii < 8; ++ii) - // [70] if((byte) make_plasma_charset::ii#2<(byte) 8) goto make_plasma_charset::@6 -- vbuxx_lt_vbuc1_then_la1 - cpx #8 - bcc b6 + // [60] phi from make_plasma_charset::@6 to make_plasma_charset::@7 [phi:make_plasma_charset::@6->make_plasma_charset::@7] + // [60] phi (byte) make_plasma_charset::b#10 = (byte) make_plasma_charset::b#2 [phi:make_plasma_charset::@6->make_plasma_charset::@7#0] -- register_copy + // [60] phi (byte) make_plasma_charset::ii#10 = (byte) make_plasma_charset::ii#1 [phi:make_plasma_charset::@6->make_plasma_charset::@7#1] -- register_copy // make_plasma_charset::@7 + b7: + // sid_rnd() + // [61] call sid_rnd + jsr sid_rnd + // [62] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + // make_plasma_charset::@14 + // [63] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2 + // sid_rnd() & 0xFF + // [64] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 + and #$ff + sta _7 + // if ((sid_rnd() & 0xFF) > s) + // [65] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@9 -- vbuz1_le_vbuz2_then_la1 + lda s + cmp _7 + bcs b9 + // make_plasma_charset::@10 + // b |= bittab[ii] + // [66] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#10 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#10) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx + tya + ora bittab,x + tay + // [67] phi from make_plasma_charset::@10 make_plasma_charset::@14 to make_plasma_charset::@9 [phi:make_plasma_charset::@10/make_plasma_charset::@14->make_plasma_charset::@9] + // [67] phi (byte) make_plasma_charset::b#2 = (byte) make_plasma_charset::b#1 [phi:make_plasma_charset::@10/make_plasma_charset::@14->make_plasma_charset::@9#0] -- register_copy + // make_plasma_charset::@9 + b9: + // for (char ii = 0; ii < 8; ++ii) + // [68] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#10 -- vbuxx=_inc_vbuxx + inx + // make_plasma_charset::@6 + // [69] if((byte) make_plasma_charset::ii#1<(byte) 8) goto make_plasma_charset::@7 -- vbuxx_lt_vbuc1_then_la1 + cpx #8 + bcc b7 + // make_plasma_charset::@8 // c*8 - // [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [70] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#16 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda c asl sta _10 @@ -10804,7 +10959,7 @@ make_plasma_charset: { asl _10 rol _10+1 // (c*8) + i - // [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 -- vwuz1=vwuz1_plus_vbuz2 + // [71] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#13 -- vwuz1=vwuz1_plus_vbuz2 lda i clc adc _11 @@ -10813,7 +10968,7 @@ make_plasma_charset: { inc _11+1 !: // charset[(c*8) + i] = b - // [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 -- pbuz1=pbuc1_plus_vwuz1 + // [72] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET#0 + (word~) make_plasma_charset::$11 -- pbuz1=pbuc1_plus_vwuz1 clc lda _16 adc #CHARSET sta _16+1 - // [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 -- _deref_pbuz1=vbuyy + // [73] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 -- _deref_pbuz1=vbuyy tya ldy #0 sta (_16),y // for ( char i = 0; i < 8; ++i) - // [75] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#2 -- vbuz1=_inc_vbuz1 + // [74] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#13 -- vbuz1=_inc_vbuz1 inc i - // [61] phi from make_plasma_charset::@7 to make_plasma_charset::@3 [phi:make_plasma_charset::@7->make_plasma_charset::@3] - // [61] phi (byte) make_plasma_charset::i#2 = (byte) make_plasma_charset::i#1 [phi:make_plasma_charset::@7->make_plasma_charset::@3#0] -- register_copy - jmp b3 - // [76] phi from make_plasma_charset::@5 to make_plasma_charset::@6 [phi:make_plasma_charset::@5->make_plasma_charset::@6] - // make_plasma_charset::@6 - b6: - // sid_rnd() - // [77] call sid_rnd - jsr sid_rnd - // [78] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 - // make_plasma_charset::@13 - // [79] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2 - // sid_rnd() & 0xFF - // [80] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 - and #$ff - sta _7 - // if ((sid_rnd() & 0xFF) > s) - // [81] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@8 -- vbuz1_le_vbuz2_then_la1 - lda s - cmp _7 - bcs b8 - // make_plasma_charset::@9 - // b |= bittab[ii] - // [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte[8]) make_plasma_charset::bittab#0 + (byte) make_plasma_charset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx - tya - ora bittab,x - tay - // [83] phi from make_plasma_charset::@13 make_plasma_charset::@9 to make_plasma_charset::@8 [phi:make_plasma_charset::@13/make_plasma_charset::@9->make_plasma_charset::@8] - // [83] phi (byte) make_plasma_charset::b#6 = (byte) make_plasma_charset::b#2 [phi:make_plasma_charset::@13/make_plasma_charset::@9->make_plasma_charset::@8#0] -- register_copy - // make_plasma_charset::@8 - b8: - // for (char ii = 0; ii < 8; ++ii) - // [84] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#2 -- vbuxx=_inc_vbuxx - inx - // [69] phi from make_plasma_charset::@8 to make_plasma_charset::@5 [phi:make_plasma_charset::@8->make_plasma_charset::@5] - // [69] phi (byte) make_plasma_charset::b#2 = (byte) make_plasma_charset::b#6 [phi:make_plasma_charset::@8->make_plasma_charset::@5#0] -- register_copy - // [69] phi (byte) make_plasma_charset::ii#2 = (byte) make_plasma_charset::ii#1 [phi:make_plasma_charset::@8->make_plasma_charset::@5#1] -- register_copy - jmp b5 - bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 -} - // sid_rnd -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -sid_rnd: { - // return *SID_VOICE3_OSC; - // [85] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC - // sid_rnd::@return + // make_plasma_charset::@3 + // [75] if((byte) make_plasma_charset::i#1<(byte) 8) goto make_plasma_charset::@4 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #8 + bcc b4 + // make_plasma_charset::@5 + // c & 0x07 + // [76] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#16 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 + lda c + and #7 + // if ((c & 0x07) == 0) + // [77] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@12 -- vbuaa_neq_0_then_la1 + cmp #0 + bne b12 + // [78] phi from make_plasma_charset::@5 to make_plasma_charset::@11 [phi:make_plasma_charset::@5->make_plasma_charset::@11] + // make_plasma_charset::@11 + // print_char('.') + // [79] call print_char + jsr print_char + // [80] phi from make_plasma_charset::@11 make_plasma_charset::@5 to make_plasma_charset::@12 [phi:make_plasma_charset::@11/make_plasma_charset::@5->make_plasma_charset::@12] + // [80] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#1 [phi:make_plasma_charset::@11/make_plasma_charset::@5->make_plasma_charset::@12#0] -- register_copy + // make_plasma_charset::@12 + b12: + // for (unsigned int c = 0; c < 0x100; ++c) + // [81] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#16 -- vwuz1=_inc_vwuz1 + inc c + bne !+ + inc c+1 + !: + // make_plasma_charset::@1 + // [82] if((word) make_plasma_charset::c#1<(word) $100) goto make_plasma_charset::@2 -- vwuz1_lt_vwuc1_then_la1 + lda c+1 + cmp #>$100 + bcc b2 + bne !+ + lda c + cmp #<$100 + bcc b2 + !: + // make_plasma_charset::@return // } - // [86] return + // [83] return rts + bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } // print_char // Print a single char print_char: { .const ch = '.' // *(print_char_cursor++) = ch - // [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 + // [84] *((byte*) print_char_cursor#59) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (print_char_cursor),y // *(print_char_cursor++) = ch; - // [88] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 + // [85] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#59 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 !: // print_char::@return // } - // [89] return + // [86] return + rts +} + // sid_rnd +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + // return *SID_VOICE3_OSC; + // [87] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 + lda SID_VOICE3_OSC + // sid_rnd::@return + // } + // [88] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) - // [91] call memset + // [90] call memset // [44] phi from print_cls to memset [phi:print_cls->memset] // [44] phi (byte) memset::c#4 = (byte) ' ' [phi:print_cls->memset#0] -- vbuxx=vbuc1 ldx #' ' @@ -10916,25 +11076,25 @@ print_cls: { jsr memset // print_cls::@return // } - // [92] return + // [91] return rts } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { // *SID_VOICE3_FREQ = $ffff - // [93] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [92] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff sta SID_VOICE3_FREQ lda #>$ffff sta SID_VOICE3_FREQ+1 // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE - // [94] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 + // [93] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE sta SID_VOICE3_CONTROL // sid_rnd_init::@return // } - // [95] return + // [94] return rts } // init_angle_screen @@ -10942,19 +11102,19 @@ sid_rnd_init: { // Utilizes symmetry around the center // init_angle_screen(byte* zeropage(5) screen) init_angle_screen: { - .label _11 = $10 + .label _11 = $18 .label screen = 5 .label screen_topline = 3 .label screen_bottomline = 5 - .label xw = $14 + .label xw = $13 .label yw = $16 - .label angle_w = $10 - .label ang_w = $13 + .label angle_w = $18 + .label ang_w = $15 .label x = $12 .label xb = 2 - .label y = $f + .label y = $11 // screen_topline = screen+40*12 - // [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 + // [95] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda screen clc adc #<$28*$c @@ -10963,7 +11123,7 @@ init_angle_screen: { adc #>$28*$c sta screen_topline+1 // screen_bottomline = screen+40*12 - // [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 + // [96] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 clc lda screen_bottomline adc #<$28*$c @@ -10971,97 +11131,63 @@ init_angle_screen: { lda screen_bottomline+1 adc #>$28*$c sta screen_bottomline+1 - // [98] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] - // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy - // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy - // [98] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [97] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + // [97] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy + // [97] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy + // [97] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y - // [98] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] - // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy - // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy - // [98] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy + // [97] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] + // [97] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy + // [97] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy + // [97] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy // init_angle_screen::@1 b1: - // [99] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - // [99] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [98] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + // [98] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [99] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [98] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - // init_angle_screen::@2 - b2: - // for( byte x=0,xb=39; x<=19; x++, xb--) - // [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - // init_angle_screen::@4 - // screen_topline -= 40 - // [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // screen_bottomline += 40 - // [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // for(byte y: 0..12) - // [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1 - // init_angle_screen::@return - // } - // [105] return - rts + // [98] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + // [98] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [98] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy // init_angle_screen::@3 b3: // x*2 - // [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [99] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // 39-x*2 - // [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [100] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // (word){ 39-x*2, 0 } - // [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [101] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw // y*2 - // [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [102] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl // (word){ y*2, 0 } - // [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [103] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 sta yw+1 sty yw // atan2_16(xw, yw) - // [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [113] call atan2_16 + // [104] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [105] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [106] call atan2_16 jsr atan2_16 - // [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [107] (word) atan2_16::return#2 ← (word) atan2_16::return#0 // init_angle_screen::@5 // angle_w = atan2_16(xw, yw) - // [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [108] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 // angle_w+0x0080 - // [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [109] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _11 @@ -11070,72 +11196,103 @@ init_angle_screen: { inc _11+1 !: // ang_w = >(angle_w+0x0080) - // [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [110] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w // screen_bottomline[xb] = ang_w - // [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [111] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 ldy xb sta (screen_bottomline),y // -ang_w - // [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [112] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 eor #$ff clc adc #1 // screen_topline[xb] = -ang_w - // [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [113] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_topline),y // 0x80+ang_w - // [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [114] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w // screen_topline[x] = 0x80+ang_w - // [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y // 0x80-ang_w - // [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [116] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w // screen_bottomline[x] = 0x80-ang_w - // [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [117] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [118] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [119] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [99] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - // [99] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [99] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy - jmp b2 + // init_angle_screen::@2 + // [120] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3 + // init_angle_screen::@4 + // screen_topline -= 40 + // [121] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // screen_bottomline += 40 + // [122] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // for(byte y: 0..12) + // [123] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [124] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1 + // init_angle_screen::@return + // } + // [125] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($14) x, signed word zeropage($16) y) +// atan2_16(signed word zeropage($13) x, signed word zeropage($16) y) atan2_16: { .label _2 = 7 - .label _7 = $1a + .label _7 = $f .label yi = 7 - .label xi = $1a - .label angle = $10 + .label xi = $f + .label angle = $18 .label xd = 9 - .label yd = $18 - .label return = $10 - .label x = $14 + .label yd = $1a + .label return = $18 + .label x = $13 .label y = $16 // (y>=0)?y:-y - // [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + // [126] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda y+1 bmi !b1+ jmp b1 !b1: // atan2_16::@2 - // [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [127] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc y @@ -11143,18 +11300,18 @@ atan2_16: { lda #0 sbc y+1 sta _2+1 - // [129] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] - // [129] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + // [128] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [128] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy // atan2_16::@3 b3: // (x>=0)?x:-x - // [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [129] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda x+1 bmi !b4+ jmp b4 !b4: // atan2_16::@5 - // [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [130] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc x @@ -11162,42 +11319,42 @@ atan2_16: { lda #0 sbc x+1 sta _7+1 - // [132] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] - // [132] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + // [131] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [131] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy // atan2_16::@6 b6: - // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] - // [133] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [132] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [132] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 lda #<0 sta angle sta angle+1 - // [133] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 + // [132] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 tax - // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [133] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [132] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [132] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy // atan2_16::@10 b10: // if(yi==0) - // [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [133] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda yi+1 bne b11 lda yi bne b11 - // [135] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] - // [135] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [134] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [134] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy // atan2_16::@12 b12: // angle /=2 - // [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [135] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr angle+1 ror angle // if(x<0) - // [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [136] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda x+1 bpl b7 // atan2_16::@21 // angle = 0x8000-angle - // [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [137] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc angle @@ -11205,17 +11362,17 @@ atan2_16: { lda #>$8000 sbc angle+1 sta angle+1 - // [139] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] - // [139] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [138] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [138] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy // atan2_16::@7 b7: // if(y<0) - // [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [139] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda y+1 bpl b8 // atan2_16::@9 // angle = -angle - // [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [140] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc angle @@ -11223,69 +11380,69 @@ atan2_16: { lda #0 sbc angle+1 sta angle+1 - // [142] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] - // [142] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [141] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [141] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy // atan2_16::@8 b8: // atan2_16::@return // } - // [143] return + // [142] return rts // atan2_16::@11 b11: - // [144] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx + // [143] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay - // [145] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [144] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda xi sta xd lda xi+1 sta xd+1 - // [146] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [145] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda yi sta yd lda yi+1 sta yd+1 - // [147] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] - // [147] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy - // [147] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy - // [147] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [146] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [146] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy + // [146] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy + // [146] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy // atan2_16::@13 b13: // while(shift>=2) - // [148] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 + // [147] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 cpy #2 bcs b14 // atan2_16::@15 // if(shift) - // [149] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 + // [148] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 cpy #0 beq b17 // atan2_16::@16 // xd >>= 1 - // [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [149] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda xd+1 cmp #$80 ror xd+1 ror xd // yd >>= 1 - // [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [150] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda yd+1 cmp #$80 ror yd+1 ror yd - // [152] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] - // [152] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy - // [152] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy + // [151] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [151] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy + // [151] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy // atan2_16::@17 b17: // if(yi>=0) - // [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [152] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda yi+1 bpl b18 // atan2_16::@20 // xi -= yd - // [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [153] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda xi sec sbc yd @@ -11294,7 +11451,7 @@ atan2_16: { sbc yd+1 sta xi+1 // yi += xd - // [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [154] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda yi clc adc xd @@ -11303,10 +11460,10 @@ atan2_16: { adc xd+1 sta yi+1 // angle -= CORDIC_ATAN2_ANGLES_16[i] - // [156] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [155] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa + // [156] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa tay sec lda angle @@ -11315,30 +11472,30 @@ atan2_16: { lda angle+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta angle+1 - // [158] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] - // [158] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy - // [158] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [158] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy + // [157] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [157] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy + // [157] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [157] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy // atan2_16::@19 b19: // for( byte i: 0..CORDIC_ITERATIONS_16-1) - // [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx + // [158] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx - // [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 + // [159] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 cpx #CORDIC_ITERATIONS_16-1+1 bne !b12+ jmp b12 !b12: - // [133] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] - // [133] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [133] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [133] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [132] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [132] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [132] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [132] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [132] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp b10 // atan2_16::@18 b18: // xi += yd - // [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [160] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda xi clc adc yd @@ -11347,7 +11504,7 @@ atan2_16: { adc yd+1 sta xi+1 // yi -= xd - // [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [161] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda yi sec sbc xd @@ -11356,10 +11513,10 @@ atan2_16: { sbc xd+1 sta yi+1 // angle += CORDIC_ATAN2_ANGLES_16[i] - // [163] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [162] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa + // [163] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa tay clc lda angle @@ -11372,7 +11529,7 @@ atan2_16: { // atan2_16::@14 b14: // xd >>= 2 - // [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [164] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda xd+1 cmp #$80 ror xd+1 @@ -11382,7 +11539,7 @@ atan2_16: { ror xd+1 ror xd // yd >>= 2 - // [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [165] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda yd+1 cmp #$80 ror yd+1 @@ -11392,13 +11549,13 @@ atan2_16: { ror yd+1 ror yd // shift -=2 - // [167] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 + // [166] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 dey dey jmp b13 // atan2_16::@4 b4: - // [168] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [167] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda x sta xi lda x+1 @@ -11406,7 +11563,7 @@ atan2_16: { jmp b6 // atan2_16::@1 b1: - // [169] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [168] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda y sta yi lda y+1 @@ -11420,20 +11577,20 @@ atan2_16: { init_dist_screen: { .label screen = 3 .label screen_bottomline = 5 - .label yds = $14 + .label yds = $16 .label screen_topline = 3 .label y = 2 - .label xds = $16 - .label ds = $16 - .label x = $f + .label xds = $18 + .label ds = $18 + .label x = $11 .label xb = $12 // init_squares() - // [171] call init_squares + // [170] call init_squares // [242] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] jsr init_squares // init_dist_screen::@11 // screen_bottomline = screen+40*24 - // [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 + // [171] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 lda screen clc adc #<$28*$18 @@ -11441,126 +11598,92 @@ init_dist_screen: { lda screen+1 adc #>$28*$18 sta screen_bottomline+1 - // [173] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] - // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy - // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy - // [173] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 + // [172] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] + // [172] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy + // [172] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy + // [172] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y - // [173] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] - // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy - // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy - // [173] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy + // [172] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] + // [172] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy + // [172] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy + // [172] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy // init_dist_screen::@1 b1: // y2 = y*2 - // [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [173] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl // (y2>=24)?(y2-24):(24-y2) - // [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 + // [174] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 cmp #$18 bcs b2 // init_dist_screen::@3 - // [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa + // [175] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$18+1 - // [177] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] - // [177] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy + // [176] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] + // [176] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy // init_dist_screen::@4 b4: // sqr(yd) - // [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - // [179] call sqr + // [177] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + // [178] call sqr // [238] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] // [238] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // sqr(yd) - // [180] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [179] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return sta sqr.return_2 lda sqr.return+1 sta sqr.return_2+1 // init_dist_screen::@12 // yds = sqr(yd) - // [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [182] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - // [182] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [180] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + // [181] phi from init_dist_screen::@12 to init_dist_screen::@6 [phi:init_dist_screen::@12->init_dist_screen::@6] + // [181] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@6#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [182] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [181] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@6#1] -- vbuz1=vbuc1 lda #0 sta x - // init_dist_screen::@5 - b5: - // for( byte x=0,xb=39; x<=19; x++, xb--) - // [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b6 - // init_dist_screen::@7 - // screen_topline += 40 - // [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - // screen_bottomline -= 40 - // [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - // for(byte y: 0..12) - // [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 - inc y - // [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1 - // init_dist_screen::@return - // } - // [188] return - rts + // [181] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6] + // [181] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy + // [181] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy // init_dist_screen::@6 b6: // x2 = x*2 - // [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [182] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // (x2>=39)?(x2-39):(39-x2) - // [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 + // [183] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 cmp #$27 bcs b8 // init_dist_screen::@9 - // [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [184] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [192] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] - // [192] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [185] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [185] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy // init_dist_screen::@10 b10: // sqr(xd) - // [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [194] call sqr + // [186] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [187] call sqr // [238] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] // [238] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr // sqr(xd) - // [195] (word) sqr::return#3 ← (word) sqr::return#0 + // [188] (word) sqr::return#3 ← (word) sqr::return#0 // init_dist_screen::@13 // xds = sqr(xd) - // [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [189] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 // ds = xds+yds - // [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [190] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 lda ds clc adc yds @@ -11569,47 +11692,78 @@ init_dist_screen: { adc yds+1 sta ds+1 // sqrt(ds) - // [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [199] call sqrt + // [191] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [192] call sqrt jsr sqrt - // [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // [193] (byte) sqrt::return#2 ← (byte) sqrt::return#0 // init_dist_screen::@14 // d = sqrt(ds) - // [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [194] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 // screen_topline[x] = d - // [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [195] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y // screen_bottomline[x] = d - // [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [196] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // screen_topline[xb] = d - // [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y // screen_bottomline[xb] = d - // [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [199] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 inc x - // [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [200] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 dec xb - // [182] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] - // [182] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy - // [182] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy - jmp b5 + // init_dist_screen::@5 + // [201] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b6 + // init_dist_screen::@7 + // screen_topline += 40 + // [202] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + // screen_bottomline -= 40 + // [203] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + // for(byte y: 0..12) + // [204] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + inc y + // [205] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1 + // init_dist_screen::@return + // } + // [206] return + rts // init_dist_screen::@8 b8: // (x2>=39)?(x2-39):(39-x2) - // [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 + // [207] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$27 jmp b10 // init_dist_screen::@2 b2: // (y2>=24)?(y2-24):(24-y2) - // [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 + // [208] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$18 jmp b4 @@ -11618,29 +11772,29 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($16) val) +// sqrt(word zeropage($18) val) sqrt: { - .label _1 = 7 - .label _3 = 7 - .label found = 7 - .label val = $16 + .label _1 = $f + .label _3 = $f + .label found = $f + .label val = $18 // bsearch16u(val, SQUARES, NUM_SQUARES) - // [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - // [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [209] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + // [210] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES - sta bsearch16u.items + sta bsearch16u.items_1 lda SQUARES+1 - sta bsearch16u.items+1 - // [212] call bsearch16u - // [219] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] + sta bsearch16u.items_1+1 + // [211] call bsearch16u + // [218] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] jsr bsearch16u // bsearch16u(val, SQUARES, NUM_SQUARES) - // [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + // [212] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 // sqrt::@1 // found = bsearch16u(val, SQUARES, NUM_SQUARES) - // [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + // [213] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 // found-SQUARES - // [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 + // [214] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 lda _3 sec sbc SQUARES @@ -11648,15 +11802,15 @@ sqrt: { lda _3+1 sbc SQUARES+1 sta _3+1 - // [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [215] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr _1+1 ror _1 // (byte)(found-SQUARES) - // [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 + // [216] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 lda _1 // sqrt::@return // } - // [218] return + // [217] return rts } // bsearch16u @@ -11665,74 +11819,39 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($16) key, word* zeropage(7) items, byte register(X) num) +// bsearch16u(word zeropage($18) key, word* zeropage($f) items, byte register(X) num) bsearch16u: { - .label _2 = 7 - .label pivot = $18 + .label _2 = $f + .label pivot = $f .label result = $1a - .label return = 7 - .label items = 7 - .label key = $16 - // [220] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [220] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + .label return = $f + .label items = $f + .label key = $18 + .label items_1 = 7 + .label items_10 = 7 + .label items_16 = 7 + // [219] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4] + // [219] phi (word*) bsearch16u::items#10 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@4#0] -- register_copy + // [219] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES - // bsearch16u::@3 - b3: - // while (num > 0) - // [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 - cpx #0 - bne b4 - // bsearch16u::@5 - // *items<=key?items:items-1 - // [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 - ldy #1 - lda (items),y - cmp key+1 - bne !+ - dey - lda (items),y - cmp key - beq b2 - !: - bcc b2 - // bsearch16u::@1 - // [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 - lda _2 - sec - sbc #<1*SIZEOF_WORD - sta _2 - lda _2+1 - sbc #>1*SIZEOF_WORD - sta _2+1 - // [224] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] - // [224] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy - // bsearch16u::@2 - b2: - // [225] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy - // bsearch16u::@return - // } - // [226] return - rts // bsearch16u::@4 b4: // num >> 1 - // [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + // [220] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuaa=vbuxx_ror_1 txa lsr // items + (num >> 1) - // [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [221] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + // [222] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa clc - adc items + adc items_10 sta pivot lda #0 - adc items+1 + adc items_10+1 sta pivot+1 // result = (signed int)key-(signed int)*pivot - // [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [223] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 sec lda key ldy #0 @@ -11743,62 +11862,108 @@ bsearch16u: { sbc (pivot),y sta result+1 // if (result == 0) - // [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [224] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 bne b6 lda result bne b6 - // bsearch16u::@8 - // [232] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 - lda pivot - sta return - lda pivot+1 - sta return+1 + // [225] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return] + // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy + // bsearch16u::@return + breturn: + // } + // [226] return rts // bsearch16u::@6 b6: // if (result > 0) - // [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 lda result+1 - bmi b7 + bmi b10 bne !+ lda result - beq b7 + beq b10 !: - // bsearch16u::@9 + // bsearch16u::@8 // items = pivot+1 - // [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #1*SIZEOF_WORD clc - adc pivot + adc items sta items - lda #0 - adc pivot+1 - sta items+1 + bcc !+ + inc items+1 + !: // num--; - // [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx + // [229] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuxx=_dec_vbuxx dex - // [236] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - // [236] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [236] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [230] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7] + // [230] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#19 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy + // [230] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy // bsearch16u::@7 b7: // num >>= 1 - // [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [231] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [220] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [220] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy - jmp b3 + // bsearch16u::@3 + // while (num > 0) + // [232] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuxx_gt_0_then_la1 + cpx #0 + bne b9 + // bsearch16u::@5 + // *items<=key?items:items-1 + // [233] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + ldy #1 + lda (items),y + cmp key+1 + bne !+ + dey + lda (items),y + cmp key + beq breturn + !: + bcc breturn + // bsearch16u::@1 + // [234] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + lda _2 + sec + sbc #<1*SIZEOF_WORD + sta _2 + lda _2+1 + sbc #>1*SIZEOF_WORD + sta _2+1 + // [235] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [235] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // bsearch16u::@2 + rts + // bsearch16u::@9 + b9: + // [236] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 + lda items + sta items_16 + lda items+1 + sta items_16+1 + // [219] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4] + // [219] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy + // [219] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy + jmp b4 + // bsearch16u::@10 + b10: + // [237] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 + lda items_10 + sta items + lda items_10+1 + sta items+1 + jmp b7 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $16 - .label return_2 = $14 + .label return = $18 + .label return_2 = $16 // return SQUARES[val]; // [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl @@ -11818,8 +11983,8 @@ sqr: { // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label squares = $10 - .label sqr = $1a + .label squares = $1a + .label sqr = $18 // malloc(NUM_SQUARES*sizeof(word)) // [243] call malloc // [255] phi from init_squares to malloc [phi:init_squares->malloc] @@ -11900,10 +12065,10 @@ init_squares: { // malloc // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. -// malloc(word zeropage(9) size) +// malloc(word zeropage($13) size) malloc: { - .label mem = 9 - .label size = 9 + .label mem = $13 + .label size = $13 // mem = heap_head-size // [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz1 lda heap_head diff --git a/src/test/ref/plasma-center.sym b/src/test/ref/plasma-center.sym index 759a883be..c7e1b7b16 100644 --- a/src/test/ref/plasma-center.sym +++ b/src/test/ref/plasma-center.sym @@ -48,12 +48,12 @@ }} (const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2 (word*) SQUARES -(void*) SQUARES#1 SQUARES zp ZP_WORD:9 0.03225806451612903 +(void*) SQUARES#1 SQUARES zp ZP_WORD:19 0.03225806451612903 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 $2 zp ZP_WORD:7 4.0 (byte~) atan2_16::$23 reg byte a 2002.0 (byte~) atan2_16::$24 reg byte a 2002.0 -(signed word~) atan2_16::$7 $7 zp ZP_WORD:26 4.0 +(signed word~) atan2_16::$7 $7 zp ZP_WORD:15 4.0 (label) atan2_16::@1 (label) atan2_16::@10 (label) atan2_16::@11 @@ -77,27 +77,27 @@ (label) atan2_16::@9 (label) atan2_16::@return (word) atan2_16::angle -(word) atan2_16::angle#1 angle zp ZP_WORD:16 3.0 -(word) atan2_16::angle#11 angle zp ZP_WORD:16 4.0 -(word) atan2_16::angle#12 angle zp ZP_WORD:16 190.66666666666666 -(word) atan2_16::angle#13 angle zp ZP_WORD:16 1334.6666666666667 -(word) atan2_16::angle#2 angle zp ZP_WORD:16 2002.0 -(word) atan2_16::angle#3 angle zp ZP_WORD:16 2002.0 -(word) atan2_16::angle#4 angle zp ZP_WORD:16 4.0 -(word) atan2_16::angle#5 angle zp ZP_WORD:16 4.0 -(word) atan2_16::angle#6 angle zp ZP_WORD:16 2004.0 +(word) atan2_16::angle#1 angle zp ZP_WORD:24 3.0 +(word) atan2_16::angle#11 angle zp ZP_WORD:24 4.0 +(word) atan2_16::angle#12 angle zp ZP_WORD:24 190.66666666666666 +(word) atan2_16::angle#13 angle zp ZP_WORD:24 1334.6666666666667 +(word) atan2_16::angle#2 angle zp ZP_WORD:24 2002.0 +(word) atan2_16::angle#3 angle zp ZP_WORD:24 2002.0 +(word) atan2_16::angle#4 angle zp ZP_WORD:24 4.0 +(word) atan2_16::angle#5 angle zp ZP_WORD:24 4.0 +(word) atan2_16::angle#6 angle zp ZP_WORD:24 2004.0 (byte) atan2_16::i (byte) atan2_16::i#1 reg byte x 1501.5 (byte) atan2_16::i#2 reg byte x 208.54166666666669 (word) atan2_16::return -(word) atan2_16::return#0 return zp ZP_WORD:16 34.99999999999999 -(word) atan2_16::return#2 return zp ZP_WORD:16 202.0 +(word) atan2_16::return#0 return zp ZP_WORD:24 34.99999999999999 +(word) atan2_16::return#2 return zp ZP_WORD:24 202.0 (byte) atan2_16::shift (byte) atan2_16::shift#1 reg byte y 20002.0 (byte) atan2_16::shift#2 reg byte y 8001.25 (byte~) atan2_16::shift#5 reg byte y 667.3333333333334 (signed word) atan2_16::x -(signed word) atan2_16::x#0 x zp ZP_WORD:20 2.8684210526315796 +(signed word) atan2_16::x#0 x zp ZP_WORD:19 2.8684210526315796 (signed word) atan2_16::xd (signed word) atan2_16::xd#1 xd zp ZP_WORD:9 6667.333333333333 (signed word~) atan2_16::xd#10 xd zp ZP_WORD:9 1001.0 @@ -105,20 +105,20 @@ (signed word) atan2_16::xd#3 xd zp ZP_WORD:9 7668.333333333332 (signed word) atan2_16::xd#5 xd zp ZP_WORD:9 1001.0 (signed word) atan2_16::xi -(signed word) atan2_16::xi#0 xi zp ZP_WORD:26 6.0 -(signed word) atan2_16::xi#1 xi zp ZP_WORD:26 500.5 -(signed word~) atan2_16::xi#13 xi zp ZP_WORD:26 4.0 -(signed word) atan2_16::xi#2 xi zp ZP_WORD:26 500.5 -(signed word) atan2_16::xi#3 xi zp ZP_WORD:26 267.0666666666667 -(signed word) atan2_16::xi#8 xi zp ZP_WORD:26 1001.0 +(signed word) atan2_16::xi#0 xi zp ZP_WORD:15 6.0 +(signed word) atan2_16::xi#1 xi zp ZP_WORD:15 500.5 +(signed word~) atan2_16::xi#13 xi zp ZP_WORD:15 4.0 +(signed word) atan2_16::xi#2 xi zp ZP_WORD:15 500.5 +(signed word) atan2_16::xi#3 xi zp ZP_WORD:15 267.0666666666667 +(signed word) atan2_16::xi#8 xi zp ZP_WORD:15 1001.0 (signed word) atan2_16::y (signed word) atan2_16::y#0 y zp ZP_WORD:22 2.724999999999999 (signed word) atan2_16::yd -(signed word) atan2_16::yd#1 yd zp ZP_WORD:24 10001.0 -(signed word~) atan2_16::yd#10 yd zp ZP_WORD:24 2002.0 -(signed word) atan2_16::yd#2 yd zp ZP_WORD:24 2002.0 -(signed word) atan2_16::yd#3 yd zp ZP_WORD:24 4601.0 -(signed word) atan2_16::yd#5 yd zp ZP_WORD:24 2002.0 +(signed word) atan2_16::yd#1 yd zp ZP_WORD:26 10001.0 +(signed word~) atan2_16::yd#10 yd zp ZP_WORD:26 2002.0 +(signed word) atan2_16::yd#2 yd zp ZP_WORD:26 2002.0 +(signed word) atan2_16::yd#3 yd zp ZP_WORD:26 4601.0 +(signed word) atan2_16::yd#5 yd zp ZP_WORD:26 2002.0 (signed word) atan2_16::yi (signed word) atan2_16::yi#0 yi zp ZP_WORD:7 1.2000000000000002 (signed word) atan2_16::yi#1 yi zp ZP_WORD:7 667.3333333333334 @@ -128,9 +128,10 @@ (signed word) atan2_16::yi#8 yi zp ZP_WORD:7 1001.0 (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) (byte~) bsearch16u::$16 reg byte a 2002.0 -(word*~) bsearch16u::$2 $2 zp ZP_WORD:7 4.0 +(word*~) bsearch16u::$2 $2 zp ZP_WORD:15 4.0 (byte~) bsearch16u::$6 reg byte a 2002.0 (label) bsearch16u::@1 +(label) bsearch16u::@10 (label) bsearch16u::@2 (label) bsearch16u::@3 (label) bsearch16u::@4 @@ -141,26 +142,27 @@ (label) bsearch16u::@9 (label) bsearch16u::@return (word*) bsearch16u::items -(word*) bsearch16u::items#0 items zp ZP_WORD:7 1001.0 -(word*) bsearch16u::items#1 items zp ZP_WORD:7 2.0 -(word*) bsearch16u::items#2 items zp ZP_WORD:7 334.5555555555556 -(word*) bsearch16u::items#8 items zp ZP_WORD:7 1501.5 +(word*) bsearch16u::items#0 items zp ZP_WORD:15 1001.0 +(word*) bsearch16u::items#1 items#1 zp ZP_WORD:7 2.0 +(word*) bsearch16u::items#10 items#10 zp ZP_WORD:7 429.2857142857143 +(word*) bsearch16u::items#11 items zp ZP_WORD:15 752.25 +(word*~) bsearch16u::items#16 items#16 zp ZP_WORD:7 2002.0 +(word*~) bsearch16u::items#19 items zp ZP_WORD:15 2002.0 (word) bsearch16u::key -(word) bsearch16u::key#0 key zp ZP_WORD:22 0.26666666666666666 +(word) bsearch16u::key#0 key zp ZP_WORD:24 0.23529411764705882 (byte) bsearch16u::num -(byte) bsearch16u::num#0 reg byte x 2002.0 +(byte) bsearch16u::num#0 reg byte x 1001.0 (byte) bsearch16u::num#1 reg byte x 2002.0 -(byte) bsearch16u::num#3 reg byte x 556.1111111111111 +(byte) bsearch16u::num#10 reg byte x 444.8888888888889 (byte) bsearch16u::num#5 reg byte x 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:24 501.0 +(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:15 750.75 (signed word) bsearch16u::result (signed word) bsearch16u::result#0 result zp ZP_WORD:26 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 return zp ZP_WORD:7 2.0 -(word*) bsearch16u::return#2 return zp ZP_WORD:7 6.0 -(word*) bsearch16u::return#3 return zp ZP_WORD:7 4.0 -(word*~) bsearch16u::return#6 return zp ZP_WORD:7 4.0 +(word*) bsearch16u::return#1 return zp ZP_WORD:15 335.00000000000006 +(word*) bsearch16u::return#2 return zp ZP_WORD:15 6.0 +(word*) bsearch16u::return#3 return zp ZP_WORD:15 4.0 (void()) doplasma((byte*) doplasma::screen) (byte~) doplasma::$2 reg byte a 2002.0 (label) doplasma::@1 @@ -181,9 +183,9 @@ (byte*) doplasma::screen#5 screen zp ZP_WORD:7 200.83333333333334 (byte*) doplasma::screen#6 screen zp ZP_WORD:7 0.4 (byte*) doplasma::sin_x -(byte*) doplasma::sin_x#0 sin_x zp ZP_WORD:26 77.15384615384616 +(byte*) doplasma::sin_x#0 sin_x zp ZP_WORD:19 77.15384615384616 (byte*) doplasma::sin_y -(byte*) doplasma::sin_y#0 sin_y zp ZP_WORD:16 83.58333333333334 +(byte*) doplasma::sin_y#0 sin_y zp ZP_WORD:15 83.58333333333334 (byte) doplasma::x (byte) doplasma::x#1 reg byte x 1501.5 (byte) doplasma::x#2 reg byte x 1668.3333333333335 @@ -191,10 +193,10 @@ (byte) doplasma::y#1 y zp ZP_BYTE:18 151.5 (byte) doplasma::y#4 y zp ZP_BYTE:18 22.444444444444443 (byte*) heap_head -(byte*) heap_head#1 heap_head zp ZP_WORD:24 0.6000000000000001 -(byte*) heap_head#12 heap_head zp ZP_WORD:24 6.0 +(byte*) heap_head#1 heap_head zp ZP_WORD:9 0.6000000000000001 +(byte*) heap_head#12 heap_head zp ZP_WORD:9 6.0 (void()) init_angle_screen((byte*) init_angle_screen::screen) -(word~) init_angle_screen::$11 $11 zp ZP_WORD:16 202.0 +(word~) init_angle_screen::$11 $11 zp ZP_WORD:24 202.0 (byte~) init_angle_screen::$13 reg byte a 202.0 (byte~) init_angle_screen::$14 reg byte a 202.0 (byte~) init_angle_screen::$15 reg byte a 202.0 @@ -208,30 +210,30 @@ (label) init_angle_screen::@5 (label) init_angle_screen::@return (byte) init_angle_screen::ang_w -(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:19 84.16666666666666 +(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:21 84.16666666666666 (word) init_angle_screen::angle_w -(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:16 202.0 +(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:24 202.0 (byte*) init_angle_screen::screen (byte*) init_angle_screen::screen#0 screen zp ZP_WORD:5 3.0 (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:5 4.0 (byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:5 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:5 9.04 +(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:5 9.040000000000001 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:3 2.0 (byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:3 5.5 (byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:3 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 x zp ZP_BYTE:18 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:18 28.857142857142858 +(byte) init_angle_screen::x#5 x zp ZP_BYTE:18 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:2 202.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:2 18.363636363636363 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:2 101.0 +(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:2 19.238095238095237 (signed word) init_angle_screen::xw -(word) init_angle_screen::xw#0 xw zp ZP_WORD:20 33.666666666666664 +(word) init_angle_screen::xw#0 xw zp ZP_WORD:19 33.666666666666664 (byte) init_angle_screen::y -(byte) init_angle_screen::y#1 y zp ZP_BYTE:15 16.5 -(byte) init_angle_screen::y#5 y zp ZP_BYTE:15 4.730769230769231 +(byte) init_angle_screen::y#1 y zp ZP_BYTE:17 16.5 +(byte) init_angle_screen::y#5 y zp ZP_BYTE:17 4.730769230769231 (signed word) init_angle_screen::yw (word) init_angle_screen::yw#0 yw zp ZP_WORD:22 50.5 (void()) init_dist_screen((byte*) init_dist_screen::screen) @@ -257,7 +259,7 @@ (byte) init_dist_screen::d (byte) init_dist_screen::d#0 reg byte a 126.25 (word) init_dist_screen::ds -(word) init_dist_screen::ds#0 ds zp ZP_WORD:22 202.0 +(word) init_dist_screen::ds#0 ds zp ZP_WORD:24 202.0 (byte*) init_dist_screen::screen (byte*) init_dist_screen::screen#0 screen zp ZP_WORD:3 1.5 (byte*) init_dist_screen::screen_bottomline @@ -268,17 +270,17 @@ (byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:3 5.5 (byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:3 7.0625 (byte) init_dist_screen::x -(byte) init_dist_screen::x#1 x zp ZP_BYTE:15 101.0 -(byte) init_dist_screen::x#2 x zp ZP_BYTE:15 30.3 +(byte) init_dist_screen::x#1 x zp ZP_BYTE:17 101.0 +(byte) init_dist_screen::x#10 x zp ZP_BYTE:17 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 reg byte a 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:18 202.0 -(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:18 19.238095238095237 +(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:18 101.0 +(byte) init_dist_screen::xb#10 xb zp ZP_BYTE:18 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 reg byte a 303.0 (word) init_dist_screen::xds -(word) init_dist_screen::xds#0 xds zp ZP_WORD:22 202.0 +(word) init_dist_screen::xds#0 xds zp ZP_WORD:24 202.0 (byte) init_dist_screen::y (byte) init_dist_screen::y#1 y zp ZP_BYTE:2 16.5 (byte) init_dist_screen::y#10 y zp ZP_BYTE:2 0.9705882352941178 @@ -287,7 +289,7 @@ (byte) init_dist_screen::yd (byte) init_dist_screen::yd#0 reg byte a 33.0 (word) init_dist_screen::yds -(word) init_dist_screen::yds#0 yds zp ZP_WORD:20 4.869565217391305 +(word) init_dist_screen::yds#0 yds zp ZP_WORD:22 4.869565217391305 (void()) init_squares() (byte~) init_squares::$3 reg byte a 22.0 (byte~) init_squares::$4 reg byte a 22.0 @@ -298,12 +300,12 @@ (byte) init_squares::i#1 reg byte x 16.5 (byte) init_squares::i#2 reg byte x 5.5 (word) init_squares::sqr -(word) init_squares::sqr#1 sqr zp ZP_WORD:26 7.333333333333333 -(word) init_squares::sqr#2 sqr zp ZP_WORD:26 6.6000000000000005 +(word) init_squares::sqr#1 sqr zp ZP_WORD:24 7.333333333333333 +(word) init_squares::sqr#2 sqr zp ZP_WORD:24 6.6000000000000005 (word*) init_squares::squares -(word*) init_squares::squares#0 squares zp ZP_WORD:16 4.0 -(word*) init_squares::squares#1 squares zp ZP_WORD:16 3.6666666666666665 -(word*) init_squares::squares#2 squares zp ZP_WORD:16 17.5 +(word*) init_squares::squares#0 squares zp ZP_WORD:26 4.0 +(word*) init_squares::squares#1 squares zp ZP_WORD:26 3.6666666666666665 +(word*) init_squares::squares#2 squares zp ZP_WORD:26 17.5 (void()) main() (label) main::@1 (label) main::@2 @@ -341,10 +343,10 @@ (const byte) main::toD0182_return#0 toD0182_return = >(word)(const byte*) SCREEN2#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f (byte*) main::toD0182_screen (void()) make_plasma_charset((byte*) make_plasma_charset::charset) -(word~) make_plasma_charset::$10 $10 zp ZP_WORD:16 202.0 -(word~) make_plasma_charset::$11 $11 zp ZP_WORD:16 202.0 +(word~) make_plasma_charset::$10 $10 zp ZP_WORD:19 202.0 +(word~) make_plasma_charset::$11 $11 zp ZP_WORD:19 202.0 (byte~) make_plasma_charset::$12 reg byte a 22.0 -(byte*~) make_plasma_charset::$16 $16 zp ZP_WORD:16 202.0 +(byte*~) make_plasma_charset::$16 $16 zp ZP_WORD:19 202.0 (byte~) make_plasma_charset::$3 reg byte a 22.0 (byte~) make_plasma_charset::$6 reg byte a 2002.0 (byte~) make_plasma_charset::$7 $7 zp ZP_BYTE:18 2002.0 @@ -353,6 +355,7 @@ (label) make_plasma_charset::@11 (label) make_plasma_charset::@12 (label) make_plasma_charset::@13 +(label) make_plasma_charset::@14 (label) make_plasma_charset::@2 (label) make_plasma_charset::@3 (label) make_plasma_charset::@4 @@ -364,29 +367,29 @@ (label) make_plasma_charset::@return (byte) make_plasma_charset::b (byte) make_plasma_charset::b#1 reg byte y 2002.0 -(byte) make_plasma_charset::b#2 reg byte y 282.1818181818182 -(byte) make_plasma_charset::b#6 reg byte y 1501.5 +(byte) make_plasma_charset::b#10 reg byte y 500.5 +(byte) make_plasma_charset::b#2 reg byte y 517.3333333333334 (byte[8]) make_plasma_charset::bittab (const byte[8]) make_plasma_charset::bittab#0 bittab = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (word) make_plasma_charset::c -(word) make_plasma_charset::c#1 c zp ZP_WORD:5 22.0 -(word) make_plasma_charset::c#2 c zp ZP_WORD:5 5.777777777777778 +(word) make_plasma_charset::c#1 c zp ZP_WORD:5 16.5 +(word) make_plasma_charset::c#16 c zp ZP_WORD:5 5.800000000000001 (byte*) make_plasma_charset::charset (byte) make_plasma_charset::i -(byte) make_plasma_charset::i#1 i zp ZP_BYTE:2 202.0 -(byte) make_plasma_charset::i#2 i zp ZP_BYTE:2 23.764705882352942 +(byte) make_plasma_charset::i#1 i zp ZP_BYTE:2 151.5 +(byte) make_plasma_charset::i#13 i zp ZP_BYTE:2 20.2 (byte) make_plasma_charset::ii -(byte) make_plasma_charset::ii#1 reg byte x 2002.0 -(byte) make_plasma_charset::ii#2 reg byte x 400.4 +(byte) make_plasma_charset::ii#1 reg byte x 1501.5 +(byte) make_plasma_charset::ii#10 reg byte x 375.375 (byte) make_plasma_charset::s -(byte) make_plasma_charset::s#0 s zp ZP_BYTE:15 53.26315789473684 +(byte) make_plasma_charset::s#0 s zp ZP_BYTE:17 56.22222222222223 (void*()) malloc((word) malloc::size) (label) malloc::@return (byte*) malloc::mem -(byte*) malloc::mem#0 mem zp ZP_WORD:9 0.6666666666666666 +(byte*) malloc::mem#0 mem zp ZP_WORD:19 0.6666666666666666 (void*) malloc::return (word) malloc::size -(word) malloc::size#3 size zp ZP_WORD:9 2.0 +(word) malloc::size#3 size zp ZP_WORD:19 2.0 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -399,7 +402,7 @@ (byte*) memset::dst#2 dst zp ZP_WORD:3 15.333333333333332 (byte*~) memset::dst#4 dst zp ZP_WORD:3 4.0 (byte*) memset::end -(byte*) memset::end#0 end zp ZP_WORD:26 2.1666666666666665 +(byte*) memset::end#0 end zp ZP_WORD:15 2.1666666666666665 (word) memset::num (void*) memset::return (void*) memset::str @@ -410,8 +413,8 @@ (const byte) print_char::ch#0 ch = (byte) '.' (byte*) print_char_cursor (byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:7 4.333333333333333 -(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:7 1.0 -(byte*) print_char_cursor#30 print_char_cursor zp ZP_WORD:7 16.5 +(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:7 11.0 +(byte*) print_char_cursor#59 print_char_cursor zp ZP_WORD:7 1.0833333333333333 (void()) print_cls() (label) print_cls::@return (byte*) print_line_cursor @@ -429,81 +432,81 @@ (byte) sin_offset_x#12 sin_offset_x zp ZP_BYTE:2 2.666666666666667 (byte) sin_offset_x#14 sin_offset_x zp ZP_BYTE:2 11.0 (byte) sin_offset_y -(byte) sin_offset_y#10 sin_offset_y zp ZP_BYTE:15 1.5294117647058825 -(byte) sin_offset_y#12 sin_offset_y zp ZP_BYTE:15 3.0 -(byte) sin_offset_y#14 sin_offset_y zp ZP_BYTE:15 11.0 +(byte) sin_offset_y#10 sin_offset_y zp ZP_BYTE:17 1.5294117647058825 +(byte) sin_offset_y#12 sin_offset_y zp ZP_BYTE:17 3.0 +(byte) sin_offset_y#14 sin_offset_y zp ZP_BYTE:17 11.0 (word()) sqr((byte) sqr::val) (byte~) sqr::$0 reg byte a 4.0 (label) sqr::@return (word) sqr::return -(word) sqr::return#0 return zp ZP_WORD:22 28.5 -(word) sqr::return#2 return#2 zp ZP_WORD:20 22.0 -(word) sqr::return#3 return zp ZP_WORD:22 202.0 +(word) sqr::return#0 return zp ZP_WORD:24 28.5 +(word) sqr::return#2 return#2 zp ZP_WORD:22 22.0 +(word) sqr::return#3 return zp ZP_WORD:24 202.0 (byte) sqr::val (byte) sqr::val#0 reg byte a 22.0 (byte) sqr::val#1 reg byte a 202.0 (byte) sqr::val#2 reg byte a 114.0 (byte()) sqrt((word) sqrt::val) -(word~) sqrt::$1 $1 zp ZP_WORD:7 2.0 -(word~) sqrt::$3 $3 zp ZP_WORD:7 4.0 +(word~) sqrt::$1 $1 zp ZP_WORD:15 2.0 +(word~) sqrt::$3 $3 zp ZP_WORD:15 4.0 (label) sqrt::@1 (label) sqrt::@return (word*) sqrt::found -(word*) sqrt::found#0 found zp ZP_WORD:7 4.0 +(word*) sqrt::found#0 found zp ZP_WORD:15 4.0 (byte) sqrt::return (byte) sqrt::return#0 reg byte a 34.33333333333333 (byte) sqrt::return#2 reg byte a 202.0 (byte) sqrt::sq (word) sqrt::val -(word) sqrt::val#0 val zp ZP_WORD:22 103.0 +(word) sqrt::val#0 val zp ZP_WORD:24 103.0 reg byte x [ doplasma::x#2 doplasma::x#1 ] reg byte x [ memset::c#4 ] -reg byte x [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] -reg byte y [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ] +reg byte x [ make_plasma_charset::ii#10 make_plasma_charset::ii#1 ] +reg byte y [ make_plasma_charset::b#10 make_plasma_charset::b#2 make_plasma_charset::b#1 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -zp ZP_BYTE:2 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#2 init_angle_screen::xb#1 make_plasma_charset::i#2 make_plasma_charset::i#1 sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] +zp ZP_BYTE:2 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#5 init_angle_screen::xb#1 make_plasma_charset::i#13 make_plasma_charset::i#1 sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] zp ZP_WORD:3 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] -zp ZP_WORD:5 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 make_plasma_charset::c#2 make_plasma_charset::c#1 doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] +zp ZP_WORD:5 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 make_plasma_charset::c#16 make_plasma_charset::c#1 doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -zp ZP_WORD:7 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] -reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +zp ZP_WORD:7 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 print_char_cursor#59 print_char_cursor#18 print_char_cursor#1 doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] +reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] -zp ZP_WORD:9 [ malloc::size#3 malloc::mem#0 SQUARES#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +zp ZP_WORD:9 [ heap_head#12 heap_head#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:11 [ SCREEN_DIST#0 ] zp ZP_WORD:13 [ SCREEN_ANGLE#0 ] reg byte a [ doplasma::$2 ] +zp ZP_WORD:15 [ memset::end#0 doplasma::sin_y#0 bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ make_plasma_charset::$3 ] -zp ZP_BYTE:15 [ make_plasma_charset::s#0 init_dist_screen::x#2 init_dist_screen::x#1 init_angle_screen::y#5 init_angle_screen::y#1 sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] -reg byte a [ make_plasma_charset::$12 ] -zp ZP_WORD:16 [ make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 doplasma::sin_y#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] +zp ZP_BYTE:17 [ make_plasma_charset::s#0 init_dist_screen::x#10 init_dist_screen::x#1 init_angle_screen::y#5 init_angle_screen::y#1 sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] reg byte a [ sid_rnd::return#2 ] reg byte a [ make_plasma_charset::$6 ] -zp ZP_BYTE:18 [ make_plasma_charset::$7 init_dist_screen::xb#2 init_dist_screen::xb#1 init_angle_screen::x#2 init_angle_screen::x#1 doplasma::y#4 doplasma::y#1 ] +zp ZP_BYTE:18 [ make_plasma_charset::$7 init_dist_screen::xb#10 init_dist_screen::xb#1 init_angle_screen::x#5 init_angle_screen::x#1 doplasma::y#4 doplasma::y#1 ] +reg byte a [ make_plasma_charset::$12 ] reg byte a [ sid_rnd::return#0 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] +zp ZP_WORD:19 [ init_angle_screen::xw#0 atan2_16::x#0 make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 doplasma::sin_x#0 malloc::size#3 malloc::mem#0 SQUARES#1 ] reg byte a [ init_angle_screen::$7 ] -zp ZP_BYTE:19 [ init_angle_screen::ang_w#0 ] +zp ZP_BYTE:21 [ init_angle_screen::ang_w#0 ] reg byte a [ init_angle_screen::$13 ] reg byte a [ init_angle_screen::$14 ] reg byte a [ init_angle_screen::$15 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte a [ init_dist_screen::y2#0 ] -zp ZP_WORD:20 [ sqr::return#2 init_dist_screen::yds#0 init_angle_screen::xw#0 atan2_16::x#0 ] +zp ZP_WORD:22 [ sqr::return#2 init_dist_screen::yds#0 init_angle_screen::yw#0 atan2_16::y#0 ] reg byte a [ init_dist_screen::x2#0 ] -zp ZP_WORD:22 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::yw#0 atan2_16::y#0 ] +zp ZP_WORD:24 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_squares::sqr#2 init_squares::sqr#1 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] reg byte a [ sqrt::return#2 ] reg byte a [ init_dist_screen::d#0 ] reg byte a [ sqrt::return#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] -zp ZP_WORD:24 [ bsearch16u::pivot#0 heap_head#12 heap_head#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -zp ZP_WORD:26 [ bsearch16u::result#0 memset::end#0 doplasma::sin_x#0 init_squares::sqr#2 init_squares::sqr#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +zp ZP_WORD:26 [ bsearch16u::result#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] reg byte a [ sqr::$0 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] diff --git a/src/test/ref/platform-asm6502.asm b/src/test/ref/platform-asm6502.asm index a9ad7824b..04604e81c 100644 --- a/src/test/ref/platform-asm6502.asm +++ b/src/test/ref/platform-asm6502.asm @@ -2,14 +2,12 @@ .pc = $1000 "Program" main: { ldx #0 - b1: - cpx #$a - bcc b2 - rts b2: txa sta TABLE,x inx - jmp b1 + cpx #$a + bcc b2 + rts } TABLE: .fill $a, 0 diff --git a/src/test/ref/platform-asm6502.cfg b/src/test/ref/platform-asm6502.cfg index 6d2b8eabe..3b6043e51 100644 --- a/src/test/ref/platform-asm6502.cfg +++ b/src/test/ref/platform-asm6502.cfg @@ -9,15 +9,15 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte[$a]) TABLE#0 + (byte) main::i#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1<(byte) $a) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [9] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 diff --git a/src/test/ref/platform-asm6502.log b/src/test/ref/platform-asm6502.log index 40d838cd2..0680bf297 100644 --- a/src/test/ref/platform-asm6502.log +++ b/src/test/ref/platform-asm6502.log @@ -68,21 +68,32 @@ Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte[$a]) TABLE#0 = { fill( $a, 0) } Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [9] if((const byte) main::i#0<(byte) $a) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 1 initial phi equivalence classes -Coalesced [11] main::i#4 ← main::i#1 +Coalesced [12] main::i#6 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -100,32 +111,32 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte[$a]) TABLE#0 + (byte) main::i#4) ← (byte) main::i#4 + [7] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1<(byte) $a) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [9] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 VARIABLE REGISTER WEIGHTS (byte[$a]) TABLE (void()) main() (byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 18.333333333333332 +(byte) main::i#1 16.5 +(byte) main::i#4 22.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] INITIAL ASM Target platform is asm6502 @@ -153,48 +164,49 @@ bend: // main main: { .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$a - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 // main::@2 b2: - // [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz1 + // [6] *((const byte[$a]) TABLE#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuz1=vbuz1 ldy i tya sta TABLE,y - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 inc i - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp b1 + // main::@1 + b1: + // [8] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$a + bcc b2_from_b1 + jmp breturn + // main::@return + breturn: + // [9] return + rts } // File Data TABLE: .fill $a, 0 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:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 40.33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] Uplift Scope [] -Uplifting [main] best 263 combination reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 263 combination +Uplifting [main] best 293 combination reg byte x [ main::i#4 main::i#1 ] +Uplifting [] best 293 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -220,32 +232,33 @@ bend_from_b1: bend: // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte[$a]) TABLE#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta TABLE,x + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [8] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a - bcc b2 + bcc b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [9] return rts - // main::@2 - b2: - // [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta TABLE,x - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data TABLE: .fill $a, 0 @@ -253,22 +266,27 @@ main: { ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bbegin: Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination FINAL SYMBOL TABLE (label) @1 @@ -281,14 +299,14 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] FINAL ASSEMBLER -Score: 191 +Score: 161 // File Comments // Tests the target platform ASM6502 @@ -304,31 +322,28 @@ Score: 191 // @end // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // main::@1 - b1: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // TABLE[i] = i + // [6] *((const byte[$a]) TABLE#0 + (byte) main::i#4) ← (byte) main::i#4 -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta TABLE,x // for(char i=0;i<10;i++) - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx + // main::@1 + // [8] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 // main::@return // } - // [7] return + // [9] return rts - // main::@2 - b2: - // TABLE[i] = i - // [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta TABLE,x - // for(char i=0;i<10;i++) - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data TABLE: .fill $a, 0 diff --git a/src/test/ref/platform-asm6502.sym b/src/test/ref/platform-asm6502.sym index db2f574bf..20adadfeb 100644 --- a/src/test/ref/platform-asm6502.sym +++ b/src/test/ref/platform-asm6502.sym @@ -8,7 +8,7 @@ (label) main::@2 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 22.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] diff --git a/src/test/ref/processor-port-test.asm b/src/test/ref/processor-port-test.asm index ab98e7950..f62339fa8 100644 --- a/src/test/ref/processor-port-test.asm +++ b/src/test/ref/processor-port-test.asm @@ -369,14 +369,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [137] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [137] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [137] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [138] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [137] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [140] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [138] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [141] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [139] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [137] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [137] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [140] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [137] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [137] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [137] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [138] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [137] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [140] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [138] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [141] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [139] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [137] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [137] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [140] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [137] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [137] phi from memset to memset::@2 [phi:memset->memset::@2] + // [137] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [137] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [137] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [138] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [138] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [139] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [140] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -5786,24 +5818,8 @@ memset: { bne b2 // memset::@return // } - // [139] return + // [141] return rts - // memset::@2 - b2: - // *dst = c - // [140] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [141] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [137] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [137] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/processor-port-test.sym b/src/test/ref/processor-port-test.sym index b129429c6..7864be6ef 100644 --- a/src/test/ref/processor-port-test.sym +++ b/src/test/ref/processor-port-test.sym @@ -65,8 +65,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:8 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:8 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:8 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:8 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -159,6 +159,6 @@ reg byte x [ print_byte::b#8 print_byte::b#0 print_byte::b#5 print_byte::b#6 pri reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] zp ZP_WORD:4 [ print_char_cursor#121 print_char_cursor#125 print_char_cursor#65 print_char_cursor#115 print_char_cursor#114 print_char_cursor#66 print_char_cursor#1 ] zp ZP_WORD:6 [ print_str::str#10 print_str::str#12 print_str::str#0 ] -zp ZP_WORD:8 [ memset::dst#2 memset::dst#1 print_line_cursor#34 print_line_cursor#67 print_line_cursor#1 ] +zp ZP_WORD:8 [ memset::dst#4 memset::dst#1 print_line_cursor#34 print_line_cursor#67 print_line_cursor#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] diff --git a/src/test/ref/ptrtest.asm b/src/test/ref/ptrtest.asm index 45b93e35b..0cf6d36b2 100644 --- a/src/test/ref/ptrtest.asm +++ b/src/test/ref/ptrtest.asm @@ -18,10 +18,6 @@ lvaluevar: { lda #>$400 sta screen+1 ldx #2 - b1: - cpx #$a - bcc b2 - rts b2: lda #b ldy #0 @@ -31,49 +27,43 @@ lvaluevar: { inc screen+1 !: inx - jmp b1 + cpx #$a + bcc b2 + rts } rvaluevar: { .label screen2 = $400 .label screen = 2 - ldy #0 lda #<$400 sta screen lda #>$400 sta screen+1 ldx #2 - b1: - cpx #$a - bcc b2 - sty screen2 - rts b2: ldy #0 lda (screen),y - tay inc screen bne !+ inc screen+1 !: inx - jmp b1 + cpx #$a + bcc b2 + sta screen2 + rts } rvalue: { // A constant pointer .label SCREEN = $400 .label screen2 = $400 - // RValue constant array pointer constant index - lda SCREEN+1 ldx #2 - b1: + b2: + lda SCREEN,x + inx cpx #$a bcc b2 sta screen2 rts - b2: - lda SCREEN,x - inx - jmp b1 } lvalue: { // A constant pointer @@ -85,13 +75,11 @@ lvalue: { lda #2 sta SCREEN+1 tax - b1: - cpx #$a - bcc b2 - rts b2: lda #3 sta SCREEN,x inx - jmp b1 + cpx #$a + bcc b2 + rts } diff --git a/src/test/ref/ptrtest.cfg b/src/test/ref/ptrtest.cfg index e23b1e486..1b5e286d8 100644 --- a/src/test/ref/ptrtest.cfg +++ b/src/test/ref/ptrtest.cfg @@ -28,70 +28,68 @@ main::@return: scope:[main] from main::@3 to:@return lvaluevar: scope:[lvaluevar] from main::@3 [13] phi() + to:lvaluevar::@2 +lvaluevar::@2: scope:[lvaluevar] from lvaluevar lvaluevar::@1 + [14] (byte*) lvaluevar::screen#4 ← phi( lvaluevar::@1/(byte*) lvaluevar::screen#1 lvaluevar/(byte*) 1024 ) + [14] (byte) lvaluevar::i#4 ← phi( lvaluevar::@1/(byte) lvaluevar::i#1 lvaluevar/(byte) 2 ) + [15] *((byte*) lvaluevar::screen#4) ← (const byte) lvaluevar::b#0 + [16] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#4 + [17] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#4 to:lvaluevar::@1 -lvaluevar::@1: scope:[lvaluevar] from lvaluevar lvaluevar::@2 - [14] (byte*) lvaluevar::screen#2 ← phi( lvaluevar/(byte*) 1024 lvaluevar::@2/(byte*) lvaluevar::screen#1 ) - [14] (byte) lvaluevar::i#2 ← phi( lvaluevar/(byte) 2 lvaluevar::@2/(byte) lvaluevar::i#1 ) - [15] if((byte) lvaluevar::i#2<(byte) $a) goto lvaluevar::@2 +lvaluevar::@1: scope:[lvaluevar] from lvaluevar::@2 + [18] if((byte) lvaluevar::i#1<(byte) $a) goto lvaluevar::@2 to:lvaluevar::@return lvaluevar::@return: scope:[lvaluevar] from lvaluevar::@1 - [16] return + [19] return to:@return -lvaluevar::@2: scope:[lvaluevar] from lvaluevar::@1 - [17] *((byte*) lvaluevar::screen#2) ← (const byte) lvaluevar::b#0 - [18] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#2 - [19] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 - to:lvaluevar::@1 rvaluevar: scope:[rvaluevar] from main::@2 [20] phi() + to:rvaluevar::@2 +rvaluevar::@2: scope:[rvaluevar] from rvaluevar rvaluevar::@1 + [21] (byte*) rvaluevar::screen#4 ← phi( rvaluevar::@1/(byte*) rvaluevar::screen#1 rvaluevar/(byte*) 1024 ) + [21] (byte) rvaluevar::i#4 ← phi( rvaluevar::@1/(byte) rvaluevar::i#1 rvaluevar/(byte) 2 ) + [22] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#4) + [23] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#4 + [24] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#4 to:rvaluevar::@1 -rvaluevar::@1: scope:[rvaluevar] from rvaluevar rvaluevar::@2 - [21] (byte) rvaluevar::b#2 ← phi( rvaluevar/(byte) 0 rvaluevar::@2/(byte) rvaluevar::b#1 ) - [21] (byte*) rvaluevar::screen#2 ← phi( rvaluevar/(byte*) 1024 rvaluevar::@2/(byte*) rvaluevar::screen#1 ) - [21] (byte) rvaluevar::i#2 ← phi( rvaluevar/(byte) 2 rvaluevar::@2/(byte) rvaluevar::i#1 ) - [22] if((byte) rvaluevar::i#2<(byte) $a) goto rvaluevar::@2 +rvaluevar::@1: scope:[rvaluevar] from rvaluevar::@2 + [25] if((byte) rvaluevar::i#1<(byte) $a) goto rvaluevar::@2 to:rvaluevar::@3 rvaluevar::@3: scope:[rvaluevar] from rvaluevar::@1 - [23] *((const byte*) rvaluevar::screen2#0) ← (byte) rvaluevar::b#2 + [26] *((const byte*) rvaluevar::screen2#0) ← (byte) rvaluevar::b#1 to:rvaluevar::@return rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@3 - [24] return + [27] return to:@return -rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1 - [25] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2) - [26] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 - [27] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 - to:rvaluevar::@1 rvalue: scope:[rvalue] from main::@1 - [28] (byte) rvalue::b#1 ← *((const byte[$400]) rvalue::SCREEN#0+(byte) 1) + [28] phi() + to:rvalue::@2 +rvalue::@2: scope:[rvalue] from rvalue rvalue::@1 + [29] (byte) rvalue::i#4 ← phi( rvalue::@1/(byte) rvalue::i#1 rvalue/(byte) 2 ) + [30] (byte) rvalue::b#2 ← *((const byte[$400]) rvalue::SCREEN#0 + (byte) rvalue::i#4) + [31] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#4 to:rvalue::@1 -rvalue::@1: scope:[rvalue] from rvalue rvalue::@2 - [29] (byte) rvalue::b#3 ← phi( rvalue/(byte) rvalue::b#1 rvalue::@2/(byte) rvalue::b#2 ) - [29] (byte) rvalue::i#2 ← phi( rvalue/(byte) 2 rvalue::@2/(byte) rvalue::i#1 ) - [30] if((byte) rvalue::i#2<(byte) $a) goto rvalue::@2 +rvalue::@1: scope:[rvalue] from rvalue::@2 + [32] if((byte) rvalue::i#1<(byte) $a) goto rvalue::@2 to:rvalue::@3 rvalue::@3: scope:[rvalue] from rvalue::@1 - [31] *((const byte*) rvalue::screen2#0) ← (byte) rvalue::b#3 + [33] *((const byte*) rvalue::screen2#0) ← (byte) rvalue::b#2 to:rvalue::@return rvalue::@return: scope:[rvalue] from rvalue::@3 - [32] return + [34] return to:@return -rvalue::@2: scope:[rvalue] from rvalue::@1 - [33] (byte) rvalue::b#2 ← *((const byte[$400]) rvalue::SCREEN#0 + (byte) rvalue::i#2) - [34] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 - to:rvalue::@1 lvalue: scope:[lvalue] from main [35] *((const byte[$400]) lvalue::SCREEN#0) ← (byte) 1 [36] *((const byte[$400]) lvalue::SCREEN#0+(byte) 1) ← (byte) 2 + to:lvalue::@2 +lvalue::@2: scope:[lvalue] from lvalue lvalue::@1 + [37] (byte) lvalue::i#4 ← phi( lvalue::@1/(byte) lvalue::i#1 lvalue/(byte) 2 ) + [38] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#4) ← (byte) 3 + [39] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#4 to:lvalue::@1 -lvalue::@1: scope:[lvalue] from lvalue lvalue::@2 - [37] (byte) lvalue::i#2 ← phi( lvalue/(byte) 2 lvalue::@2/(byte) lvalue::i#1 ) - [38] if((byte) lvalue::i#2<(byte) $a) goto lvalue::@2 +lvalue::@1: scope:[lvalue] from lvalue::@2 + [40] if((byte) lvalue::i#1<(byte) $a) goto lvalue::@2 to:lvalue::@return lvalue::@return: scope:[lvalue] from lvalue::@1 - [39] return + [41] return to:@return -lvalue::@2: scope:[lvalue] from lvalue::@1 - [40] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte) 3 - [41] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 - to:lvalue::@1 diff --git a/src/test/ref/ptrtest.log b/src/test/ref/ptrtest.log index 11cc82078..92059b23e 100644 --- a/src/test/ref/ptrtest.log +++ b/src/test/ref/ptrtest.log @@ -319,24 +319,60 @@ Constant (const byte*) rvaluevar::screen2#0 = (byte*) 1024 Successful SSA optimization Pass2ConstantIdentification Eliminating unused variable (byte) rvalue::b#0 and assignment [12] (byte) rvalue::b#0 ← *((const byte[$400]) rvalue::SCREEN#0) Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) lvalue::i#1 = (byte) lvalue::i#2 +Alias (byte) rvalue::i#1 = (byte) rvalue::i#2 +Alias (byte) rvalue::b#2 = (byte) rvalue::b#3 +Alias (byte) lvaluevar::i#1 = (byte) lvaluevar::i#2 +Alias (byte*) lvaluevar::screen#1 = (byte*) lvaluevar::screen#2 +Alias (byte) rvaluevar::i#1 = (byte) rvaluevar::i#2 +Alias (byte*) rvaluevar::screen#1 = (byte*) rvaluevar::screen#2 +Alias (byte) rvaluevar::b#1 = (byte) rvaluevar::b#2 +Alias (byte) rvalue::b#1 = (byte) rvalue::b#6 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) lvalue::i#5 (const byte) lvalue::i#0 +Identical Phi Values (byte) rvalue::i#5 (const byte) rvalue::i#0 +Identical Phi Values (byte) lvaluevar::i#5 (const byte) lvaluevar::i#0 +Identical Phi Values (byte*) lvaluevar::screen#5 (const byte*) lvaluevar::screen#0 +Identical Phi Values (byte) rvaluevar::i#5 (const byte) rvaluevar::i#0 +Identical Phi Values (byte*) rvaluevar::screen#5 (const byte*) rvaluevar::screen#0 +Identical Phi Values (byte) rvaluevar::b#5 (const byte) rvaluevar::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [42] if((const byte) lvalue::i#0<(byte) $a) goto lvalue::@2 +Removing PHI-reference to removed block (rvalue::@1_1) in block rvalue::@3 +if() condition always true - replacing block destination [44] if((const byte) rvalue::i#0<(byte) $a) goto rvalue::@2 +if() condition always true - replacing block destination [46] if((const byte) lvaluevar::i#0<(byte) $a) goto lvaluevar::@2 +Removing PHI-reference to removed block (rvaluevar::@1_1) in block rvaluevar::@3 +if() condition always true - replacing block destination [48] if((const byte) rvaluevar::i#0<(byte) $a) goto rvaluevar::@2 +Successful SSA optimization Pass2ConstantIfs +Eliminating unused variable (byte) rvalue::b#1 and assignment [12] (byte) rvalue::b#1 ← *((const byte[$400]) rvalue::SCREEN#0 + (byte) 1) +Eliminating unused constant (const byte) rvaluevar::b#0 +Successful SSA optimization PassNEliminateUnusedVars +Alias (byte) rvalue::b#2 = (byte) rvalue::b#5 +Alias (byte) rvaluevar::b#1 = (byte) rvaluevar::b#4 +Successful SSA optimization Pass2AliasElimination 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 Inlining constant with var siblings (const byte) lvaluevar::i#0 Inlining constant with var siblings (const byte*) rvaluevar::screen#0 -Inlining constant with var siblings (const byte) rvaluevar::b#0 Inlining constant with var siblings (const byte) rvaluevar::i#0 Constant inlined lvalue::i#0 = (byte) 2 Constant inlined rvaluevar::screen#0 = (byte*) 1024 -Constant inlined rvaluevar::b#0 = (byte) 0 Constant inlined rvalue::i#0 = (byte) 2 Constant inlined lvaluevar::i#0 = (byte) 2 Constant inlined lvaluevar::screen#0 = (byte*) 1024 Constant inlined rvaluevar::i#0 = (byte) 2 Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in *(lvalue::SCREEN#0+1) -Consolidated array index constant in *(rvalue::SCREEN#0+1) Successful SSA optimization Pass2ConstantAdditionElimination +Added new block during phi lifting lvalue::@7(between lvalue::@1 and lvalue::@2) +Added new block during phi lifting rvalue::@7(between rvalue::@1 and rvalue::@2) +Added new block during phi lifting lvaluevar::@7(between lvaluevar::@1 and lvaluevar::@2) +Added new block during phi lifting rvaluevar::@7(between rvaluevar::@1 and rvaluevar::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @6 @@ -347,24 +383,34 @@ Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::@4 Adding NOP phi() at start of lvaluevar +Adding NOP phi() at start of lvaluevar::@1_1 Adding NOP phi() at start of rvaluevar +Adding NOP phi() at start of rvaluevar::@1_1 +Adding NOP phi() at start of rvalue +Adding NOP phi() at start of rvalue::@1_1 +Adding NOP phi() at start of lvalue::@1_1 CALL GRAPH Calls in [] to main:2 Calls in [main] to lvalue:6 rvalue:8 rvaluevar:10 lvaluevar:12 -Created 8 initial phi equivalence classes -Coalesced [22] lvaluevar::i#4 ← lvaluevar::i#1 -Coalesced [23] lvaluevar::screen#4 ← lvaluevar::screen#1 -Coalesced [32] rvaluevar::i#4 ← rvaluevar::i#1 -Coalesced [33] rvaluevar::screen#4 ← rvaluevar::screen#1 -Coalesced [34] rvaluevar::b#4 ← rvaluevar::b#1 -Coalesced [36] rvalue::b#5 ← rvalue::b#1 -Coalesced [43] rvalue::i#4 ← rvalue::i#1 -Coalesced [44] rvalue::b#6 ← rvalue::b#2 -Coalesced [52] lvalue::i#4 ← lvalue::i#1 -Coalesced down to 8 phi equivalence classes +Created 6 initial phi equivalence classes +Coalesced [23] lvaluevar::i#6 ← lvaluevar::i#1 +Coalesced [24] lvaluevar::screen#6 ← lvaluevar::screen#1 +Coalesced [34] rvaluevar::i#6 ← rvaluevar::i#1 +Coalesced [35] rvaluevar::screen#6 ← rvaluevar::screen#1 +Coalesced [44] rvalue::i#6 ← rvalue::i#1 +Coalesced [53] lvalue::i#6 ← lvalue::i#1 +Coalesced down to 6 phi equivalence classes Culled Empty Block (label) @6 Culled Empty Block (label) main::@4 +Culled Empty Block (label) lvaluevar::@1_1 +Culled Empty Block (label) lvaluevar::@7 +Culled Empty Block (label) rvaluevar::@1_1 +Culled Empty Block (label) rvaluevar::@7 +Culled Empty Block (label) rvalue::@1_1 +Culled Empty Block (label) rvalue::@7 +Culled Empty Block (label) lvalue::@1_1 +Culled Empty Block (label) lvalue::@7 Renumbering block @5 to @1 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 @@ -375,6 +421,7 @@ Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@3 Adding NOP phi() at start of lvaluevar Adding NOP phi() at start of rvaluevar +Adding NOP phi() at start of rvalue FINAL CONTROL FLOW GRAPH @begin: scope:[] from @@ -407,138 +454,133 @@ main::@return: scope:[main] from main::@3 to:@return lvaluevar: scope:[lvaluevar] from main::@3 [13] phi() + to:lvaluevar::@2 +lvaluevar::@2: scope:[lvaluevar] from lvaluevar lvaluevar::@1 + [14] (byte*) lvaluevar::screen#4 ← phi( lvaluevar::@1/(byte*) lvaluevar::screen#1 lvaluevar/(byte*) 1024 ) + [14] (byte) lvaluevar::i#4 ← phi( lvaluevar::@1/(byte) lvaluevar::i#1 lvaluevar/(byte) 2 ) + [15] *((byte*) lvaluevar::screen#4) ← (const byte) lvaluevar::b#0 + [16] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#4 + [17] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#4 to:lvaluevar::@1 -lvaluevar::@1: scope:[lvaluevar] from lvaluevar lvaluevar::@2 - [14] (byte*) lvaluevar::screen#2 ← phi( lvaluevar/(byte*) 1024 lvaluevar::@2/(byte*) lvaluevar::screen#1 ) - [14] (byte) lvaluevar::i#2 ← phi( lvaluevar/(byte) 2 lvaluevar::@2/(byte) lvaluevar::i#1 ) - [15] if((byte) lvaluevar::i#2<(byte) $a) goto lvaluevar::@2 +lvaluevar::@1: scope:[lvaluevar] from lvaluevar::@2 + [18] if((byte) lvaluevar::i#1<(byte) $a) goto lvaluevar::@2 to:lvaluevar::@return lvaluevar::@return: scope:[lvaluevar] from lvaluevar::@1 - [16] return + [19] return to:@return -lvaluevar::@2: scope:[lvaluevar] from lvaluevar::@1 - [17] *((byte*) lvaluevar::screen#2) ← (const byte) lvaluevar::b#0 - [18] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#2 - [19] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 - to:lvaluevar::@1 rvaluevar: scope:[rvaluevar] from main::@2 [20] phi() + to:rvaluevar::@2 +rvaluevar::@2: scope:[rvaluevar] from rvaluevar rvaluevar::@1 + [21] (byte*) rvaluevar::screen#4 ← phi( rvaluevar::@1/(byte*) rvaluevar::screen#1 rvaluevar/(byte*) 1024 ) + [21] (byte) rvaluevar::i#4 ← phi( rvaluevar::@1/(byte) rvaluevar::i#1 rvaluevar/(byte) 2 ) + [22] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#4) + [23] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#4 + [24] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#4 to:rvaluevar::@1 -rvaluevar::@1: scope:[rvaluevar] from rvaluevar rvaluevar::@2 - [21] (byte) rvaluevar::b#2 ← phi( rvaluevar/(byte) 0 rvaluevar::@2/(byte) rvaluevar::b#1 ) - [21] (byte*) rvaluevar::screen#2 ← phi( rvaluevar/(byte*) 1024 rvaluevar::@2/(byte*) rvaluevar::screen#1 ) - [21] (byte) rvaluevar::i#2 ← phi( rvaluevar/(byte) 2 rvaluevar::@2/(byte) rvaluevar::i#1 ) - [22] if((byte) rvaluevar::i#2<(byte) $a) goto rvaluevar::@2 +rvaluevar::@1: scope:[rvaluevar] from rvaluevar::@2 + [25] if((byte) rvaluevar::i#1<(byte) $a) goto rvaluevar::@2 to:rvaluevar::@3 rvaluevar::@3: scope:[rvaluevar] from rvaluevar::@1 - [23] *((const byte*) rvaluevar::screen2#0) ← (byte) rvaluevar::b#2 + [26] *((const byte*) rvaluevar::screen2#0) ← (byte) rvaluevar::b#1 to:rvaluevar::@return rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@3 - [24] return + [27] return to:@return -rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1 - [25] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2) - [26] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 - [27] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 - to:rvaluevar::@1 rvalue: scope:[rvalue] from main::@1 - [28] (byte) rvalue::b#1 ← *((const byte[$400]) rvalue::SCREEN#0+(byte) 1) + [28] phi() + to:rvalue::@2 +rvalue::@2: scope:[rvalue] from rvalue rvalue::@1 + [29] (byte) rvalue::i#4 ← phi( rvalue::@1/(byte) rvalue::i#1 rvalue/(byte) 2 ) + [30] (byte) rvalue::b#2 ← *((const byte[$400]) rvalue::SCREEN#0 + (byte) rvalue::i#4) + [31] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#4 to:rvalue::@1 -rvalue::@1: scope:[rvalue] from rvalue rvalue::@2 - [29] (byte) rvalue::b#3 ← phi( rvalue/(byte) rvalue::b#1 rvalue::@2/(byte) rvalue::b#2 ) - [29] (byte) rvalue::i#2 ← phi( rvalue/(byte) 2 rvalue::@2/(byte) rvalue::i#1 ) - [30] if((byte) rvalue::i#2<(byte) $a) goto rvalue::@2 +rvalue::@1: scope:[rvalue] from rvalue::@2 + [32] if((byte) rvalue::i#1<(byte) $a) goto rvalue::@2 to:rvalue::@3 rvalue::@3: scope:[rvalue] from rvalue::@1 - [31] *((const byte*) rvalue::screen2#0) ← (byte) rvalue::b#3 + [33] *((const byte*) rvalue::screen2#0) ← (byte) rvalue::b#2 to:rvalue::@return rvalue::@return: scope:[rvalue] from rvalue::@3 - [32] return + [34] return to:@return -rvalue::@2: scope:[rvalue] from rvalue::@1 - [33] (byte) rvalue::b#2 ← *((const byte[$400]) rvalue::SCREEN#0 + (byte) rvalue::i#2) - [34] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 - to:rvalue::@1 lvalue: scope:[lvalue] from main [35] *((const byte[$400]) lvalue::SCREEN#0) ← (byte) 1 [36] *((const byte[$400]) lvalue::SCREEN#0+(byte) 1) ← (byte) 2 + to:lvalue::@2 +lvalue::@2: scope:[lvalue] from lvalue lvalue::@1 + [37] (byte) lvalue::i#4 ← phi( lvalue::@1/(byte) lvalue::i#1 lvalue/(byte) 2 ) + [38] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#4) ← (byte) 3 + [39] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#4 to:lvalue::@1 -lvalue::@1: scope:[lvalue] from lvalue lvalue::@2 - [37] (byte) lvalue::i#2 ← phi( lvalue/(byte) 2 lvalue::@2/(byte) lvalue::i#1 ) - [38] if((byte) lvalue::i#2<(byte) $a) goto lvalue::@2 +lvalue::@1: scope:[lvalue] from lvalue::@2 + [40] if((byte) lvalue::i#1<(byte) $a) goto lvalue::@2 to:lvalue::@return lvalue::@return: scope:[lvalue] from lvalue::@1 - [39] return + [41] return to:@return -lvalue::@2: scope:[lvalue] from lvalue::@1 - [40] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte) 3 - [41] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 - to:lvalue::@1 VARIABLE REGISTER WEIGHTS (void()) lvalue() (byte[$400]) lvalue::SCREEN (byte) lvalue::i -(byte) lvalue::i#1 22.0 -(byte) lvalue::i#2 14.666666666666666 +(byte) lvalue::i#1 16.5 +(byte) lvalue::i#4 16.5 (void()) lvaluevar() (byte) lvaluevar::b (byte) lvaluevar::i -(byte) lvaluevar::i#1 22.0 -(byte) lvaluevar::i#2 8.25 +(byte) lvaluevar::i#1 16.5 +(byte) lvaluevar::i#4 7.333333333333333 (byte*) lvaluevar::screen -(byte*) lvaluevar::screen#1 11.0 -(byte*) lvaluevar::screen#2 11.0 +(byte*) lvaluevar::screen#1 7.333333333333333 +(byte*) lvaluevar::screen#4 16.5 (void()) main() (void()) rvalue() (byte[$400]) rvalue::SCREEN (byte) rvalue::b -(byte) rvalue::b#1 4.0 -(byte) rvalue::b#2 11.0 -(byte) rvalue::b#3 7.5 +(byte) rvalue::b#2 4.333333333333333 (byte) rvalue::i -(byte) rvalue::i#1 22.0 -(byte) rvalue::i#2 14.666666666666666 +(byte) rvalue::i#1 16.5 +(byte) rvalue::i#4 16.5 (byte*) rvalue::screen2 (void()) rvaluevar() (byte) rvaluevar::b -(byte) rvaluevar::b#1 7.333333333333333 -(byte) rvaluevar::b#2 6.5 +(byte) rvaluevar::b#1 3.25 (byte) rvaluevar::i -(byte) rvaluevar::i#1 22.0 -(byte) rvaluevar::i#2 8.25 +(byte) rvaluevar::i#1 16.5 +(byte) rvaluevar::i#4 7.333333333333333 (byte*) rvaluevar::screen -(byte*) rvaluevar::screen#1 11.0 -(byte*) rvaluevar::screen#2 11.0 +(byte*) rvaluevar::screen#1 7.333333333333333 +(byte*) rvaluevar::screen#4 16.5 (byte*) rvaluevar::screen2 Initial phi equivalence classes -[ lvaluevar::i#2 lvaluevar::i#1 ] -[ lvaluevar::screen#2 lvaluevar::screen#1 ] -[ rvaluevar::i#2 rvaluevar::i#1 ] -[ rvaluevar::screen#2 rvaluevar::screen#1 ] -[ rvaluevar::b#2 rvaluevar::b#1 ] -[ rvalue::i#2 rvalue::i#1 ] -[ rvalue::b#3 rvalue::b#1 rvalue::b#2 ] -[ lvalue::i#2 lvalue::i#1 ] +[ lvaluevar::i#4 lvaluevar::i#1 ] +[ lvaluevar::screen#4 lvaluevar::screen#1 ] +[ rvaluevar::i#4 rvaluevar::i#1 ] +[ rvaluevar::screen#4 rvaluevar::screen#1 ] +[ rvalue::i#4 rvalue::i#1 ] +[ lvalue::i#4 lvalue::i#1 ] +Added variable rvaluevar::b#1 to zero page equivalence class [ rvaluevar::b#1 ] +Added variable rvalue::b#2 to zero page equivalence class [ rvalue::b#2 ] Complete equivalence classes -[ lvaluevar::i#2 lvaluevar::i#1 ] -[ lvaluevar::screen#2 lvaluevar::screen#1 ] -[ rvaluevar::i#2 rvaluevar::i#1 ] -[ rvaluevar::screen#2 rvaluevar::screen#1 ] -[ rvaluevar::b#2 rvaluevar::b#1 ] -[ rvalue::i#2 rvalue::i#1 ] -[ rvalue::b#3 rvalue::b#1 rvalue::b#2 ] -[ lvalue::i#2 lvalue::i#1 ] -Allocated zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] -Allocated zp ZP_WORD:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] -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 [ rvaluevar::b#2 rvaluevar::b#1 ] -Allocated zp ZP_BYTE:9 [ rvalue::i#2 rvalue::i#1 ] -Allocated zp ZP_BYTE:10 [ rvalue::b#3 rvalue::b#1 rvalue::b#2 ] -Allocated zp ZP_BYTE:11 [ lvalue::i#2 lvalue::i#1 ] +[ lvaluevar::i#4 lvaluevar::i#1 ] +[ lvaluevar::screen#4 lvaluevar::screen#1 ] +[ rvaluevar::i#4 rvaluevar::i#1 ] +[ rvaluevar::screen#4 rvaluevar::screen#1 ] +[ rvalue::i#4 rvalue::i#1 ] +[ lvalue::i#4 lvalue::i#1 ] +[ rvaluevar::b#1 ] +[ rvalue::b#2 ] +Allocated zp ZP_BYTE:2 [ lvaluevar::i#4 lvaluevar::i#1 ] +Allocated zp ZP_WORD:3 [ lvaluevar::screen#4 lvaluevar::screen#1 ] +Allocated zp ZP_BYTE:5 [ rvaluevar::i#4 rvaluevar::i#1 ] +Allocated zp ZP_WORD:6 [ rvaluevar::screen#4 rvaluevar::screen#1 ] +Allocated zp ZP_BYTE:8 [ rvalue::i#4 rvalue::i#1 ] +Allocated zp ZP_BYTE:9 [ lvalue::i#4 lvalue::i#1 ] +Allocated zp ZP_BYTE:10 [ rvaluevar::b#1 ] +Allocated zp ZP_BYTE:11 [ rvalue::b#2 ] INITIAL ASM Target platform is c64basic @@ -575,6 +617,8 @@ main: { // main::@1 b1: // [7] call rvalue + // [28] phi from main::@1 to rvalue [phi:main::@1->rvalue] + rvalue_from_b1: jsr rvalue // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: @@ -606,158 +650,151 @@ lvaluevar: { .const b = 4 .label screen = 3 .label i = 2 - // [14] phi from lvaluevar to lvaluevar::@1 [phi:lvaluevar->lvaluevar::@1] - b1_from_lvaluevar: - // [14] phi (byte*) lvaluevar::screen#2 = (byte*) 1024 [phi:lvaluevar->lvaluevar::@1#0] -- pbuz1=pbuc1 + // [14] phi from lvaluevar to lvaluevar::@2 [phi:lvaluevar->lvaluevar::@2] + b2_from_lvaluevar: + // [14] phi (byte*) lvaluevar::screen#4 = (byte*) 1024 [phi:lvaluevar->lvaluevar::@2#0] -- pbuz1=pbuc1 lda #<$400 sta screen lda #>$400 sta screen+1 - // [14] phi (byte) lvaluevar::i#2 = (byte) 2 [phi:lvaluevar->lvaluevar::@1#1] -- vbuz1=vbuc1 + // [14] phi (byte) lvaluevar::i#4 = (byte) 2 [phi:lvaluevar->lvaluevar::@2#1] -- vbuz1=vbuc1 lda #2 sta i - jmp b1 - // lvaluevar::@1 - b1: - // [15] if((byte) lvaluevar::i#2<(byte) $a) goto lvaluevar::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$a - bcc b2 - jmp breturn - // lvaluevar::@return - breturn: - // [16] return - rts + jmp b2 + // [14] phi from lvaluevar::@1 to lvaluevar::@2 [phi:lvaluevar::@1->lvaluevar::@2] + b2_from_b1: + // [14] phi (byte*) lvaluevar::screen#4 = (byte*) lvaluevar::screen#1 [phi:lvaluevar::@1->lvaluevar::@2#0] -- register_copy + // [14] phi (byte) lvaluevar::i#4 = (byte) lvaluevar::i#1 [phi:lvaluevar::@1->lvaluevar::@2#1] -- register_copy + jmp b2 // lvaluevar::@2 b2: - // [17] *((byte*) lvaluevar::screen#2) ← (const byte) lvaluevar::b#0 -- _deref_pbuz1=vbuc1 + // [15] *((byte*) lvaluevar::screen#4) ← (const byte) lvaluevar::b#0 -- _deref_pbuz1=vbuc1 lda #b ldy #0 sta (screen),y - // [18] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#2 -- pbuz1=_inc_pbuz1 + // [16] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#4 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [19] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 -- vbuz1=_inc_vbuz1 + // [17] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#4 -- vbuz1=_inc_vbuz1 inc i - // [14] phi from lvaluevar::@2 to lvaluevar::@1 [phi:lvaluevar::@2->lvaluevar::@1] - b1_from_b2: - // [14] phi (byte*) lvaluevar::screen#2 = (byte*) lvaluevar::screen#1 [phi:lvaluevar::@2->lvaluevar::@1#0] -- register_copy - // [14] phi (byte) lvaluevar::i#2 = (byte) lvaluevar::i#1 [phi:lvaluevar::@2->lvaluevar::@1#1] -- register_copy jmp b1 + // lvaluevar::@1 + b1: + // [18] if((byte) lvaluevar::i#1<(byte) $a) goto lvaluevar::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$a + bcc b2_from_b1 + jmp breturn + // lvaluevar::@return + breturn: + // [19] return + rts } // rvaluevar rvaluevar: { .label screen2 = $400 - .label b = 8 + .label b = $a .label screen = 6 .label i = 5 - // [21] phi from rvaluevar to rvaluevar::@1 [phi:rvaluevar->rvaluevar::@1] - b1_from_rvaluevar: - // [21] phi (byte) rvaluevar::b#2 = (byte) 0 [phi:rvaluevar->rvaluevar::@1#0] -- vbuz1=vbuc1 - lda #0 - sta b - // [21] phi (byte*) rvaluevar::screen#2 = (byte*) 1024 [phi:rvaluevar->rvaluevar::@1#1] -- pbuz1=pbuc1 + // [21] phi from rvaluevar to rvaluevar::@2 [phi:rvaluevar->rvaluevar::@2] + b2_from_rvaluevar: + // [21] phi (byte*) rvaluevar::screen#4 = (byte*) 1024 [phi:rvaluevar->rvaluevar::@2#0] -- pbuz1=pbuc1 lda #<$400 sta screen lda #>$400 sta screen+1 - // [21] phi (byte) rvaluevar::i#2 = (byte) 2 [phi:rvaluevar->rvaluevar::@1#2] -- vbuz1=vbuc1 + // [21] phi (byte) rvaluevar::i#4 = (byte) 2 [phi:rvaluevar->rvaluevar::@2#1] -- vbuz1=vbuc1 lda #2 sta i + jmp b2 + // [21] phi from rvaluevar::@1 to rvaluevar::@2 [phi:rvaluevar::@1->rvaluevar::@2] + b2_from_b1: + // [21] phi (byte*) rvaluevar::screen#4 = (byte*) rvaluevar::screen#1 [phi:rvaluevar::@1->rvaluevar::@2#0] -- register_copy + // [21] phi (byte) rvaluevar::i#4 = (byte) rvaluevar::i#1 [phi:rvaluevar::@1->rvaluevar::@2#1] -- register_copy + jmp b2 + // rvaluevar::@2 + b2: + // [22] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#4) -- vbuz1=_deref_pbuz2 + ldy #0 + lda (screen),y + sta b + // [23] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#4 -- pbuz1=_inc_pbuz1 + inc screen + bne !+ + inc screen+1 + !: + // [24] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#4 -- vbuz1=_inc_vbuz1 + inc i jmp b1 // rvaluevar::@1 b1: - // [22] if((byte) rvaluevar::i#2<(byte) $a) goto rvaluevar::@2 -- vbuz1_lt_vbuc1_then_la1 + // [25] if((byte) rvaluevar::i#1<(byte) $a) goto rvaluevar::@2 -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$a - bcc b2 + bcc b2_from_b1 jmp b3 // rvaluevar::@3 b3: - // [23] *((const byte*) rvaluevar::screen2#0) ← (byte) rvaluevar::b#2 -- _deref_pbuc1=vbuz1 + // [26] *((const byte*) rvaluevar::screen2#0) ← (byte) rvaluevar::b#1 -- _deref_pbuc1=vbuz1 lda b sta screen2 jmp breturn // rvaluevar::@return breturn: - // [24] return + // [27] return rts - // rvaluevar::@2 - b2: - // [25] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2) -- vbuz1=_deref_pbuz2 - ldy #0 - lda (screen),y - sta b - // [26] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 -- pbuz1=_inc_pbuz1 - inc screen - bne !+ - inc screen+1 - !: - // [27] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [21] phi from rvaluevar::@2 to rvaluevar::@1 [phi:rvaluevar::@2->rvaluevar::@1] - b1_from_b2: - // [21] phi (byte) rvaluevar::b#2 = (byte) rvaluevar::b#1 [phi:rvaluevar::@2->rvaluevar::@1#0] -- register_copy - // [21] phi (byte*) rvaluevar::screen#2 = (byte*) rvaluevar::screen#1 [phi:rvaluevar::@2->rvaluevar::@1#1] -- register_copy - // [21] phi (byte) rvaluevar::i#2 = (byte) rvaluevar::i#1 [phi:rvaluevar::@2->rvaluevar::@1#2] -- register_copy - jmp b1 } // rvalue rvalue: { // A constant pointer .label SCREEN = $400 .label screen2 = $400 - .label b = $a - .label i = 9 - // [28] (byte) rvalue::b#1 ← *((const byte[$400]) rvalue::SCREEN#0+(byte) 1) -- vbuz1=_deref_pbuc1 - // RValue constant array pointer constant index - lda SCREEN+1 - sta b - // [29] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1] - b1_from_rvalue: - // [29] phi (byte) rvalue::b#3 = (byte) rvalue::b#1 [phi:rvalue->rvalue::@1#0] -- register_copy - // [29] phi (byte) rvalue::i#2 = (byte) 2 [phi:rvalue->rvalue::@1#1] -- vbuz1=vbuc1 + .label b = $b + .label i = 8 + // [29] phi from rvalue to rvalue::@2 [phi:rvalue->rvalue::@2] + b2_from_rvalue: + // [29] phi (byte) rvalue::i#4 = (byte) 2 [phi:rvalue->rvalue::@2#0] -- vbuz1=vbuc1 lda #2 sta i + jmp b2 + // [29] phi from rvalue::@1 to rvalue::@2 [phi:rvalue::@1->rvalue::@2] + b2_from_b1: + // [29] phi (byte) rvalue::i#4 = (byte) rvalue::i#1 [phi:rvalue::@1->rvalue::@2#0] -- register_copy + jmp b2 + // rvalue::@2 + b2: + // [30] (byte) rvalue::b#2 ← *((const byte[$400]) rvalue::SCREEN#0 + (byte) rvalue::i#4) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy i + lda SCREEN,y + sta b + // [31] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#4 -- vbuz1=_inc_vbuz1 + inc i jmp b1 // rvalue::@1 b1: - // [30] if((byte) rvalue::i#2<(byte) $a) goto rvalue::@2 -- vbuz1_lt_vbuc1_then_la1 + // [32] if((byte) rvalue::i#1<(byte) $a) goto rvalue::@2 -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$a - bcc b2 + bcc b2_from_b1 jmp b3 // rvalue::@3 b3: - // [31] *((const byte*) rvalue::screen2#0) ← (byte) rvalue::b#3 -- _deref_pbuc1=vbuz1 + // [33] *((const byte*) rvalue::screen2#0) ← (byte) rvalue::b#2 -- _deref_pbuc1=vbuz1 lda b sta screen2 jmp breturn // rvalue::@return breturn: - // [32] return + // [34] return rts - // rvalue::@2 - b2: - // [33] (byte) rvalue::b#2 ← *((const byte[$400]) rvalue::SCREEN#0 + (byte) rvalue::i#2) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy i - lda SCREEN,y - sta b - // [34] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [29] phi from rvalue::@2 to rvalue::@1 [phi:rvalue::@2->rvalue::@1] - b1_from_b2: - // [29] phi (byte) rvalue::b#3 = (byte) rvalue::b#2 [phi:rvalue::@2->rvalue::@1#0] -- register_copy - // [29] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 [phi:rvalue::@2->rvalue::@1#1] -- register_copy - jmp b1 } // lvalue lvalue: { // A constant pointer .label SCREEN = $400 - .label i = $b + .label i = 9 // [35] *((const byte[$400]) lvalue::SCREEN#0) ← (byte) 1 -- _deref_pbuc1=vbuc2 // LValue constant pointer dereference lda #1 @@ -766,79 +803,80 @@ lvalue: { // LValue constant array constant indexing lda #2 sta SCREEN+1 - // [37] phi from lvalue to lvalue::@1 [phi:lvalue->lvalue::@1] - b1_from_lvalue: - // [37] phi (byte) lvalue::i#2 = (byte) 2 [phi:lvalue->lvalue::@1#0] -- vbuz1=vbuc1 + // [37] phi from lvalue to lvalue::@2 [phi:lvalue->lvalue::@2] + b2_from_lvalue: + // [37] phi (byte) lvalue::i#4 = (byte) 2 [phi:lvalue->lvalue::@2#0] -- vbuz1=vbuc1 lda #2 sta i - jmp b1 - // lvalue::@1 - b1: - // [38] if((byte) lvalue::i#2<(byte) $a) goto lvalue::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$a - bcc b2 - jmp breturn - // lvalue::@return - breturn: - // [39] return - rts + jmp b2 + // [37] phi from lvalue::@1 to lvalue::@2 [phi:lvalue::@1->lvalue::@2] + b2_from_b1: + // [37] phi (byte) lvalue::i#4 = (byte) lvalue::i#1 [phi:lvalue::@1->lvalue::@2#0] -- register_copy + jmp b2 // lvalue::@2 b2: - // [40] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte) 3 -- pbuc1_derefidx_vbuz1=vbuc2 + // [38] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#4) ← (byte) 3 -- pbuc1_derefidx_vbuz1=vbuc2 lda #3 ldy i sta SCREEN,y - // [41] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 -- vbuz1=_inc_vbuz1 + // [39] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#4 -- vbuz1=_inc_vbuz1 inc i - // [37] phi from lvalue::@2 to lvalue::@1 [phi:lvalue::@2->lvalue::@1] - b1_from_b2: - // [37] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 [phi:lvalue::@2->lvalue::@1#0] -- register_copy jmp b1 + // lvalue::@1 + b1: + // [40] if((byte) lvalue::i#1<(byte) $a) goto lvalue::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$a + bcc b2_from_b1 + jmp breturn + // lvalue::@return + breturn: + // [41] return + rts } // File Data 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 [25] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2) [ rvaluevar::i#2 rvaluevar::screen#2 rvaluevar::b#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 rvaluevar::b#1 ] ) 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 [15] *((byte*) lvaluevar::screen#4) ← (const byte) lvaluevar::b#0 [ lvaluevar::i#4 lvaluevar::screen#4 ] ( main:2::lvaluevar:11 [ lvaluevar::i#4 lvaluevar::screen#4 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ lvaluevar::i#4 lvaluevar::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ lvaluevar::i#4 lvaluevar::i#1 ] +Statement [22] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#4) [ rvaluevar::i#4 rvaluevar::screen#4 rvaluevar::b#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#4 rvaluevar::screen#4 rvaluevar::b#1 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ rvaluevar::i#4 rvaluevar::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ rvaluevar::i#4 rvaluevar::i#1 ] Statement [35] *((const byte[$400]) lvalue::SCREEN#0) ← (byte) 1 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a Statement [36] *((const byte[$400]) lvalue::SCREEN#0+(byte) 1) ← (byte) 2 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a -Statement [40] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte) 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:11 [ 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 [25] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2) [ rvaluevar::i#2 rvaluevar::screen#2 rvaluevar::b#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 rvaluevar::b#1 ] ) always clobbers reg byte a reg byte y +Statement [38] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#4) ← (byte) 3 [ lvalue::i#4 ] ( main:2::lvalue:5 [ lvalue::i#4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ lvalue::i#4 lvalue::i#1 ] +Statement [15] *((byte*) lvaluevar::screen#4) ← (const byte) lvaluevar::b#0 [ lvaluevar::i#4 lvaluevar::screen#4 ] ( main:2::lvaluevar:11 [ lvaluevar::i#4 lvaluevar::screen#4 ] ) always clobbers reg byte a reg byte y +Statement [22] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#4) [ rvaluevar::i#4 rvaluevar::screen#4 rvaluevar::b#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#4 rvaluevar::screen#4 rvaluevar::b#1 ] ) always clobbers reg byte a reg byte y Statement [35] *((const byte[$400]) lvalue::SCREEN#0) ← (byte) 1 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a Statement [36] *((const byte[$400]) lvalue::SCREEN#0+(byte) 1) ← (byte) 2 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a -Statement [40] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] : zp ZP_BYTE:2 , reg byte x , -Potential registers zp ZP_WORD:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] : zp ZP_WORD:3 , -Potential registers zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] : zp ZP_BYTE:5 , reg byte x , -Potential registers zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] : zp ZP_WORD:6 , -Potential registers zp ZP_BYTE:8 [ rvaluevar::b#2 rvaluevar::b#1 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:9 [ rvalue::i#2 rvalue::i#1 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:10 [ rvalue::b#3 rvalue::b#1 rvalue::b#2 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:11 [ lvalue::i#2 lvalue::i#1 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , +Statement [38] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#4) ← (byte) 3 [ lvalue::i#4 ] ( main:2::lvalue:5 [ lvalue::i#4 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ lvaluevar::i#4 lvaluevar::i#1 ] : zp ZP_BYTE:2 , reg byte x , +Potential registers zp ZP_WORD:3 [ lvaluevar::screen#4 lvaluevar::screen#1 ] : zp ZP_WORD:3 , +Potential registers zp ZP_BYTE:5 [ rvaluevar::i#4 rvaluevar::i#1 ] : zp ZP_BYTE:5 , reg byte x , +Potential registers zp ZP_WORD:6 [ rvaluevar::screen#4 rvaluevar::screen#1 ] : zp ZP_WORD:6 , +Potential registers zp ZP_BYTE:8 [ rvalue::i#4 rvalue::i#1 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ lvalue::i#4 lvalue::i#1 ] : zp ZP_BYTE:9 , 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#2 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [rvaluevar] 30.25: zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] 22: zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] 13.83: zp ZP_BYTE:8 [ rvaluevar::b#2 rvaluevar::b#1 ] -Uplift Scope [rvalue] 36.67: zp ZP_BYTE:9 [ rvalue::i#2 rvalue::i#1 ] 22.5: zp ZP_BYTE:10 [ rvalue::b#3 rvalue::b#1 rvalue::b#2 ] -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:11 [ lvalue::i#2 lvalue::i#1 ] +Uplift Scope [rvaluevar] 23.83: zp ZP_BYTE:5 [ rvaluevar::i#4 rvaluevar::i#1 ] 23.83: zp ZP_WORD:6 [ rvaluevar::screen#4 rvaluevar::screen#1 ] 3.25: zp ZP_BYTE:10 [ rvaluevar::b#1 ] +Uplift Scope [lvaluevar] 23.83: zp ZP_BYTE:2 [ lvaluevar::i#4 lvaluevar::i#1 ] 23.83: zp ZP_WORD:3 [ lvaluevar::screen#4 lvaluevar::screen#1 ] +Uplift Scope [rvalue] 33: zp ZP_BYTE:8 [ rvalue::i#4 rvalue::i#1 ] 4.33: zp ZP_BYTE:11 [ rvalue::b#2 ] +Uplift Scope [lvalue] 33: zp ZP_BYTE:9 [ lvalue::i#4 lvalue::i#1 ] Uplift Scope [main] Uplift Scope [] -Uplifting [rvaluevar] best 1954 combination reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] reg byte y [ rvaluevar::b#2 rvaluevar::b#1 ] -Uplifting [rvalue] best 1798 combination reg byte x [ rvalue::i#2 rvalue::i#1 ] reg byte a [ rvalue::b#3 rvalue::b#1 rvalue::b#2 ] -Uplifting [lvaluevar] best 1708 combination reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] zp ZP_WORD:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] -Uplifting [lvalue] best 1588 combination reg byte x [ lvalue::i#2 lvalue::i#1 ] -Uplifting [main] best 1588 combination -Uplifting [] best 1588 combination -Coalescing zero page register [ zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] ] with [ zp ZP_WORD:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] ] -Allocated (was zp ZP_WORD:6) zp ZP_WORD:2 [ rvaluevar::screen#2 rvaluevar::screen#1 lvaluevar::screen#2 lvaluevar::screen#1 ] +Uplifting [rvaluevar] best 2027 combination reg byte x [ rvaluevar::i#4 rvaluevar::i#1 ] zp ZP_WORD:6 [ rvaluevar::screen#4 rvaluevar::screen#1 ] reg byte a [ rvaluevar::b#1 ] +Uplifting [lvaluevar] best 1937 combination reg byte x [ lvaluevar::i#4 lvaluevar::i#1 ] zp ZP_WORD:3 [ lvaluevar::screen#4 lvaluevar::screen#1 ] +Uplifting [rvalue] best 1784 combination reg byte x [ rvalue::i#4 rvalue::i#1 ] reg byte a [ rvalue::b#2 ] +Uplifting [lvalue] best 1664 combination reg byte x [ lvalue::i#4 lvalue::i#1 ] +Uplifting [main] best 1664 combination +Uplifting [] best 1664 combination +Coalescing zero page register [ zp ZP_WORD:6 [ rvaluevar::screen#4 rvaluevar::screen#1 ] ] with [ zp ZP_WORD:3 [ lvaluevar::screen#4 lvaluevar::screen#1 ] ] +Allocated (was zp ZP_WORD:6) zp ZP_WORD:2 [ rvaluevar::screen#4 rvaluevar::screen#1 lvaluevar::screen#4 lvaluevar::screen#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -874,6 +912,8 @@ main: { // main::@1 b1: // [7] call rvalue + // [28] phi from main::@1 to rvalue [phi:main::@1->rvalue] + rvalue_from_b1: jsr rvalue // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: @@ -904,136 +944,130 @@ lvaluevar: { // LValue Variable pointer dereference .const b = 4 .label screen = 2 - // [14] phi from lvaluevar to lvaluevar::@1 [phi:lvaluevar->lvaluevar::@1] - b1_from_lvaluevar: - // [14] phi (byte*) lvaluevar::screen#2 = (byte*) 1024 [phi:lvaluevar->lvaluevar::@1#0] -- pbuz1=pbuc1 + // [14] phi from lvaluevar to lvaluevar::@2 [phi:lvaluevar->lvaluevar::@2] + b2_from_lvaluevar: + // [14] phi (byte*) lvaluevar::screen#4 = (byte*) 1024 [phi:lvaluevar->lvaluevar::@2#0] -- pbuz1=pbuc1 lda #<$400 sta screen lda #>$400 sta screen+1 - // [14] phi (byte) lvaluevar::i#2 = (byte) 2 [phi:lvaluevar->lvaluevar::@1#1] -- vbuxx=vbuc1 + // [14] phi (byte) lvaluevar::i#4 = (byte) 2 [phi:lvaluevar->lvaluevar::@2#1] -- vbuxx=vbuc1 ldx #2 - jmp b1 - // lvaluevar::@1 - b1: - // [15] if((byte) lvaluevar::i#2<(byte) $a) goto lvaluevar::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$a - bcc b2 - jmp breturn - // lvaluevar::@return - breturn: - // [16] return - rts + jmp b2 + // [14] phi from lvaluevar::@1 to lvaluevar::@2 [phi:lvaluevar::@1->lvaluevar::@2] + b2_from_b1: + // [14] phi (byte*) lvaluevar::screen#4 = (byte*) lvaluevar::screen#1 [phi:lvaluevar::@1->lvaluevar::@2#0] -- register_copy + // [14] phi (byte) lvaluevar::i#4 = (byte) lvaluevar::i#1 [phi:lvaluevar::@1->lvaluevar::@2#1] -- register_copy + jmp b2 // lvaluevar::@2 b2: - // [17] *((byte*) lvaluevar::screen#2) ← (const byte) lvaluevar::b#0 -- _deref_pbuz1=vbuc1 + // [15] *((byte*) lvaluevar::screen#4) ← (const byte) lvaluevar::b#0 -- _deref_pbuz1=vbuc1 lda #b ldy #0 sta (screen),y - // [18] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#2 -- pbuz1=_inc_pbuz1 + // [16] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#4 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [19] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 -- vbuxx=_inc_vbuxx + // [17] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#4 -- vbuxx=_inc_vbuxx inx - // [14] phi from lvaluevar::@2 to lvaluevar::@1 [phi:lvaluevar::@2->lvaluevar::@1] - b1_from_b2: - // [14] phi (byte*) lvaluevar::screen#2 = (byte*) lvaluevar::screen#1 [phi:lvaluevar::@2->lvaluevar::@1#0] -- register_copy - // [14] phi (byte) lvaluevar::i#2 = (byte) lvaluevar::i#1 [phi:lvaluevar::@2->lvaluevar::@1#1] -- register_copy jmp b1 + // lvaluevar::@1 + b1: + // [18] if((byte) lvaluevar::i#1<(byte) $a) goto lvaluevar::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #$a + bcc b2_from_b1 + jmp breturn + // lvaluevar::@return + breturn: + // [19] return + rts } // rvaluevar rvaluevar: { .label screen2 = $400 .label screen = 2 - // [21] phi from rvaluevar to rvaluevar::@1 [phi:rvaluevar->rvaluevar::@1] - b1_from_rvaluevar: - // [21] phi (byte) rvaluevar::b#2 = (byte) 0 [phi:rvaluevar->rvaluevar::@1#0] -- vbuyy=vbuc1 - ldy #0 - // [21] phi (byte*) rvaluevar::screen#2 = (byte*) 1024 [phi:rvaluevar->rvaluevar::@1#1] -- pbuz1=pbuc1 + // [21] phi from rvaluevar to rvaluevar::@2 [phi:rvaluevar->rvaluevar::@2] + b2_from_rvaluevar: + // [21] phi (byte*) rvaluevar::screen#4 = (byte*) 1024 [phi:rvaluevar->rvaluevar::@2#0] -- pbuz1=pbuc1 lda #<$400 sta screen lda #>$400 sta screen+1 - // [21] phi (byte) rvaluevar::i#2 = (byte) 2 [phi:rvaluevar->rvaluevar::@1#2] -- vbuxx=vbuc1 + // [21] phi (byte) rvaluevar::i#4 = (byte) 2 [phi:rvaluevar->rvaluevar::@2#1] -- vbuxx=vbuc1 ldx #2 - jmp b1 - // rvaluevar::@1 - b1: - // [22] if((byte) rvaluevar::i#2<(byte) $a) goto rvaluevar::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$a - bcc b2 - jmp b3 - // rvaluevar::@3 - b3: - // [23] *((const byte*) rvaluevar::screen2#0) ← (byte) rvaluevar::b#2 -- _deref_pbuc1=vbuyy - sty screen2 - jmp breturn - // rvaluevar::@return - breturn: - // [24] return - rts + jmp b2 + // [21] phi from rvaluevar::@1 to rvaluevar::@2 [phi:rvaluevar::@1->rvaluevar::@2] + b2_from_b1: + // [21] phi (byte*) rvaluevar::screen#4 = (byte*) rvaluevar::screen#1 [phi:rvaluevar::@1->rvaluevar::@2#0] -- register_copy + // [21] phi (byte) rvaluevar::i#4 = (byte) rvaluevar::i#1 [phi:rvaluevar::@1->rvaluevar::@2#1] -- register_copy + jmp b2 // rvaluevar::@2 b2: - // [25] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2) -- vbuyy=_deref_pbuz1 + // [22] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#4) -- vbuaa=_deref_pbuz1 ldy #0 lda (screen),y - tay - // [26] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 -- pbuz1=_inc_pbuz1 + // [23] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#4 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [27] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 -- vbuxx=_inc_vbuxx + // [24] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#4 -- vbuxx=_inc_vbuxx inx - // [21] phi from rvaluevar::@2 to rvaluevar::@1 [phi:rvaluevar::@2->rvaluevar::@1] - b1_from_b2: - // [21] phi (byte) rvaluevar::b#2 = (byte) rvaluevar::b#1 [phi:rvaluevar::@2->rvaluevar::@1#0] -- register_copy - // [21] phi (byte*) rvaluevar::screen#2 = (byte*) rvaluevar::screen#1 [phi:rvaluevar::@2->rvaluevar::@1#1] -- register_copy - // [21] phi (byte) rvaluevar::i#2 = (byte) rvaluevar::i#1 [phi:rvaluevar::@2->rvaluevar::@1#2] -- register_copy jmp b1 + // rvaluevar::@1 + b1: + // [25] if((byte) rvaluevar::i#1<(byte) $a) goto rvaluevar::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #$a + bcc b2_from_b1 + jmp b3 + // rvaluevar::@3 + b3: + // [26] *((const byte*) rvaluevar::screen2#0) ← (byte) rvaluevar::b#1 -- _deref_pbuc1=vbuaa + sta screen2 + jmp breturn + // rvaluevar::@return + breturn: + // [27] return + rts } // rvalue rvalue: { // A constant pointer .label SCREEN = $400 .label screen2 = $400 - // [28] (byte) rvalue::b#1 ← *((const byte[$400]) rvalue::SCREEN#0+(byte) 1) -- vbuaa=_deref_pbuc1 - // RValue constant array pointer constant index - lda SCREEN+1 - // [29] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1] - b1_from_rvalue: - // [29] phi (byte) rvalue::b#3 = (byte) rvalue::b#1 [phi:rvalue->rvalue::@1#0] -- register_copy - // [29] phi (byte) rvalue::i#2 = (byte) 2 [phi:rvalue->rvalue::@1#1] -- vbuxx=vbuc1 + // [29] phi from rvalue to rvalue::@2 [phi:rvalue->rvalue::@2] + b2_from_rvalue: + // [29] phi (byte) rvalue::i#4 = (byte) 2 [phi:rvalue->rvalue::@2#0] -- vbuxx=vbuc1 ldx #2 + jmp b2 + // [29] phi from rvalue::@1 to rvalue::@2 [phi:rvalue::@1->rvalue::@2] + b2_from_b1: + // [29] phi (byte) rvalue::i#4 = (byte) rvalue::i#1 [phi:rvalue::@1->rvalue::@2#0] -- register_copy + jmp b2 + // rvalue::@2 + b2: + // [30] (byte) rvalue::b#2 ← *((const byte[$400]) rvalue::SCREEN#0 + (byte) rvalue::i#4) -- vbuaa=pbuc1_derefidx_vbuxx + lda SCREEN,x + // [31] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#4 -- vbuxx=_inc_vbuxx + inx jmp b1 // rvalue::@1 b1: - // [30] if((byte) rvalue::i#2<(byte) $a) goto rvalue::@2 -- vbuxx_lt_vbuc1_then_la1 + // [32] if((byte) rvalue::i#1<(byte) $a) goto rvalue::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a - bcc b2 + bcc b2_from_b1 jmp b3 // rvalue::@3 b3: - // [31] *((const byte*) rvalue::screen2#0) ← (byte) rvalue::b#3 -- _deref_pbuc1=vbuaa + // [33] *((const byte*) rvalue::screen2#0) ← (byte) rvalue::b#2 -- _deref_pbuc1=vbuaa sta screen2 jmp breturn // rvalue::@return breturn: - // [32] return + // [34] return rts - // rvalue::@2 - b2: - // [33] (byte) rvalue::b#2 ← *((const byte[$400]) rvalue::SCREEN#0 + (byte) rvalue::i#2) -- vbuaa=pbuc1_derefidx_vbuxx - lda SCREEN,x - // [34] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 -- vbuxx=_inc_vbuxx - inx - // [29] phi from rvalue::@2 to rvalue::@1 [phi:rvalue::@2->rvalue::@1] - b1_from_b2: - // [29] phi (byte) rvalue::b#3 = (byte) rvalue::b#2 [phi:rvalue::@2->rvalue::@1#0] -- register_copy - // [29] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 [phi:rvalue::@2->rvalue::@1#1] -- register_copy - jmp b1 } // lvalue lvalue: { @@ -1047,32 +1081,33 @@ lvalue: { // LValue constant array constant indexing lda #2 sta SCREEN+1 - // [37] phi from lvalue to lvalue::@1 [phi:lvalue->lvalue::@1] - b1_from_lvalue: - // [37] phi (byte) lvalue::i#2 = (byte) 2 [phi:lvalue->lvalue::@1#0] -- vbuxx=vbuc1 + // [37] phi from lvalue to lvalue::@2 [phi:lvalue->lvalue::@2] + b2_from_lvalue: + // [37] phi (byte) lvalue::i#4 = (byte) 2 [phi:lvalue->lvalue::@2#0] -- vbuxx=vbuc1 ldx #2 + jmp b2 + // [37] phi from lvalue::@1 to lvalue::@2 [phi:lvalue::@1->lvalue::@2] + b2_from_b1: + // [37] phi (byte) lvalue::i#4 = (byte) lvalue::i#1 [phi:lvalue::@1->lvalue::@2#0] -- register_copy + jmp b2 + // lvalue::@2 + b2: + // [38] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#4) ← (byte) 3 -- pbuc1_derefidx_vbuxx=vbuc2 + lda #3 + sta SCREEN,x + // [39] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#4 -- vbuxx=_inc_vbuxx + inx jmp b1 // lvalue::@1 b1: - // [38] if((byte) lvalue::i#2<(byte) $a) goto lvalue::@2 -- vbuxx_lt_vbuc1_then_la1 + // [40] if((byte) lvalue::i#1<(byte) $a) goto lvalue::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a - bcc b2 + bcc b2_from_b1 jmp breturn // lvalue::@return breturn: - // [39] return + // [41] return rts - // lvalue::@2 - b2: - // [40] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte) 3 -- pbuc1_derefidx_vbuxx=vbuc2 - lda #3 - sta SCREEN,x - // [41] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 -- vbuxx=_inc_vbuxx - inx - // [37] phi from lvalue::@2 to lvalue::@1 [phi:lvalue::@2->lvalue::@1] - b1_from_b2: - // [37] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 [phi:lvalue::@2->lvalue::@1#0] -- register_copy - jmp b1 } // File Data @@ -1083,50 +1118,68 @@ Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp breturn +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp breturn +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp breturn +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: Removing instruction b1_from_main: +Removing instruction rvalue_from_b1: Removing instruction b2_from_b1: Removing instruction rvaluevar_from_b2: Removing instruction b3_from_b2: Removing instruction lvaluevar_from_b3: +Removing instruction b2_from_b1: +Removing instruction b2_from_b1: +Removing instruction b2_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction b1: Removing instruction b2: Removing instruction b3: Removing instruction breturn: -Removing instruction b1_from_lvaluevar: +Removing instruction b2_from_lvaluevar: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: -Removing instruction b1_from_rvaluevar: +Removing instruction b2_from_rvaluevar: +Removing instruction b1: Removing instruction b3: Removing instruction breturn: -Removing instruction b1_from_b2: -Removing instruction b1_from_rvalue: +Removing instruction b2_from_rvalue: +Removing instruction b1: Removing instruction b3: Removing instruction breturn: -Removing instruction b1_from_b2: -Removing instruction b1_from_lvalue: +Removing instruction b2_from_lvalue: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Removing instruction jmp b2 +Removing instruction jmp b2 +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Replacing instruction ldx #2 with TAX Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -1142,8 +1195,8 @@ FINAL SYMBOL TABLE (byte[$400]) lvalue::SCREEN (const byte[$400]) lvalue::SCREEN#0 SCREEN = (byte*) 1024 (byte) lvalue::i -(byte) lvalue::i#1 reg byte x 22.0 -(byte) lvalue::i#2 reg byte x 14.666666666666666 +(byte) lvalue::i#1 reg byte x 16.5 +(byte) lvalue::i#4 reg byte x 16.5 (void()) lvaluevar() (label) lvaluevar::@1 (label) lvaluevar::@2 @@ -1151,11 +1204,11 @@ FINAL SYMBOL TABLE (byte) lvaluevar::b (const byte) lvaluevar::b#0 b = (byte) 4 (byte) lvaluevar::i -(byte) lvaluevar::i#1 reg byte x 22.0 -(byte) lvaluevar::i#2 reg byte x 8.25 +(byte) lvaluevar::i#1 reg byte x 16.5 +(byte) lvaluevar::i#4 reg byte x 7.333333333333333 (byte*) lvaluevar::screen -(byte*) lvaluevar::screen#1 screen zp ZP_WORD:2 11.0 -(byte*) lvaluevar::screen#2 screen zp ZP_WORD:2 11.0 +(byte*) lvaluevar::screen#1 screen zp ZP_WORD:2 7.333333333333333 +(byte*) lvaluevar::screen#4 screen zp ZP_WORD:2 16.5 (void()) main() (label) main::@1 (label) main::@2 @@ -1169,12 +1222,10 @@ FINAL SYMBOL TABLE (byte[$400]) rvalue::SCREEN (const byte[$400]) rvalue::SCREEN#0 SCREEN = (byte*) 1024 (byte) rvalue::b -(byte) rvalue::b#1 reg byte a 4.0 -(byte) rvalue::b#2 reg byte a 11.0 -(byte) rvalue::b#3 reg byte a 7.5 +(byte) rvalue::b#2 reg byte a 4.333333333333333 (byte) rvalue::i -(byte) rvalue::i#1 reg byte x 22.0 -(byte) rvalue::i#2 reg byte x 14.666666666666666 +(byte) rvalue::i#1 reg byte x 16.5 +(byte) rvalue::i#4 reg byte x 16.5 (byte*) rvalue::screen2 (const byte*) rvalue::screen2#0 screen2 = (byte*) 1024 (void()) rvaluevar() @@ -1183,28 +1234,27 @@ FINAL SYMBOL TABLE (label) rvaluevar::@3 (label) rvaluevar::@return (byte) rvaluevar::b -(byte) rvaluevar::b#1 reg byte y 7.333333333333333 -(byte) rvaluevar::b#2 reg byte y 6.5 +(byte) rvaluevar::b#1 reg byte a 3.25 (byte) rvaluevar::i -(byte) rvaluevar::i#1 reg byte x 22.0 -(byte) rvaluevar::i#2 reg byte x 8.25 +(byte) rvaluevar::i#1 reg byte x 16.5 +(byte) rvaluevar::i#4 reg byte x 7.333333333333333 (byte*) rvaluevar::screen -(byte*) rvaluevar::screen#1 screen zp ZP_WORD:2 11.0 -(byte*) rvaluevar::screen#2 screen zp ZP_WORD:2 11.0 +(byte*) rvaluevar::screen#1 screen zp ZP_WORD:2 7.333333333333333 +(byte*) rvaluevar::screen#4 screen zp ZP_WORD:2 16.5 (byte*) rvaluevar::screen2 (const byte*) rvaluevar::screen2#0 screen2 = (byte*) 1024 -reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] -reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] -zp ZP_WORD:2 [ rvaluevar::screen#2 rvaluevar::screen#1 lvaluevar::screen#2 lvaluevar::screen#1 ] -reg byte y [ rvaluevar::b#2 rvaluevar::b#1 ] -reg byte x [ rvalue::i#2 rvalue::i#1 ] -reg byte a [ rvalue::b#3 rvalue::b#1 rvalue::b#2 ] -reg byte x [ lvalue::i#2 lvalue::i#1 ] +reg byte x [ lvaluevar::i#4 lvaluevar::i#1 ] +reg byte x [ rvaluevar::i#4 rvaluevar::i#1 ] +zp ZP_WORD:2 [ rvaluevar::screen#4 rvaluevar::screen#1 lvaluevar::screen#4 lvaluevar::screen#1 ] +reg byte x [ rvalue::i#4 rvalue::i#1 ] +reg byte x [ lvalue::i#4 lvalue::i#1 ] +reg byte a [ rvaluevar::b#1 ] +reg byte a [ rvalue::b#2 ] FINAL ASSEMBLER -Score: 1318 +Score: 1154 // File Comments // Test all types of pointers @@ -1229,6 +1279,7 @@ main: { // main::@1 // rvalue() // [7] call rvalue + // [28] phi from main::@1 to rvalue [phi:main::@1->rvalue] jsr rvalue // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -1252,134 +1303,118 @@ lvaluevar: { // LValue Variable pointer dereference .const b = 4 .label screen = 2 - // [14] phi from lvaluevar to lvaluevar::@1 [phi:lvaluevar->lvaluevar::@1] - // [14] phi (byte*) lvaluevar::screen#2 = (byte*) 1024 [phi:lvaluevar->lvaluevar::@1#0] -- pbuz1=pbuc1 + // [14] phi from lvaluevar to lvaluevar::@2 [phi:lvaluevar->lvaluevar::@2] + // [14] phi (byte*) lvaluevar::screen#4 = (byte*) 1024 [phi:lvaluevar->lvaluevar::@2#0] -- pbuz1=pbuc1 lda #<$400 sta screen lda #>$400 sta screen+1 - // [14] phi (byte) lvaluevar::i#2 = (byte) 2 [phi:lvaluevar->lvaluevar::@1#1] -- vbuxx=vbuc1 + // [14] phi (byte) lvaluevar::i#4 = (byte) 2 [phi:lvaluevar->lvaluevar::@2#1] -- vbuxx=vbuc1 ldx #2 - // lvaluevar::@1 - b1: - // while(i<10) - // [15] if((byte) lvaluevar::i#2<(byte) $a) goto lvaluevar::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$a - bcc b2 - // lvaluevar::@return - // } - // [16] return - rts + // [14] phi from lvaluevar::@1 to lvaluevar::@2 [phi:lvaluevar::@1->lvaluevar::@2] + // [14] phi (byte*) lvaluevar::screen#4 = (byte*) lvaluevar::screen#1 [phi:lvaluevar::@1->lvaluevar::@2#0] -- register_copy + // [14] phi (byte) lvaluevar::i#4 = (byte) lvaluevar::i#1 [phi:lvaluevar::@1->lvaluevar::@2#1] -- register_copy // lvaluevar::@2 b2: // *screen = b - // [17] *((byte*) lvaluevar::screen#2) ← (const byte) lvaluevar::b#0 -- _deref_pbuz1=vbuc1 + // [15] *((byte*) lvaluevar::screen#4) ← (const byte) lvaluevar::b#0 -- _deref_pbuz1=vbuc1 lda #b ldy #0 sta (screen),y // screen++; - // [18] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#2 -- pbuz1=_inc_pbuz1 + // [16] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#4 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: // i++; - // [19] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 -- vbuxx=_inc_vbuxx + // [17] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#4 -- vbuxx=_inc_vbuxx inx - // [14] phi from lvaluevar::@2 to lvaluevar::@1 [phi:lvaluevar::@2->lvaluevar::@1] - // [14] phi (byte*) lvaluevar::screen#2 = (byte*) lvaluevar::screen#1 [phi:lvaluevar::@2->lvaluevar::@1#0] -- register_copy - // [14] phi (byte) lvaluevar::i#2 = (byte) lvaluevar::i#1 [phi:lvaluevar::@2->lvaluevar::@1#1] -- register_copy - jmp b1 + // lvaluevar::@1 + // while(i<10) + // [18] if((byte) lvaluevar::i#1<(byte) $a) goto lvaluevar::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #$a + bcc b2 + // lvaluevar::@return + // } + // [19] return + rts } // rvaluevar rvaluevar: { .label screen2 = $400 .label screen = 2 - // [21] phi from rvaluevar to rvaluevar::@1 [phi:rvaluevar->rvaluevar::@1] - // [21] phi (byte) rvaluevar::b#2 = (byte) 0 [phi:rvaluevar->rvaluevar::@1#0] -- vbuyy=vbuc1 - ldy #0 - // [21] phi (byte*) rvaluevar::screen#2 = (byte*) 1024 [phi:rvaluevar->rvaluevar::@1#1] -- pbuz1=pbuc1 + // [21] phi from rvaluevar to rvaluevar::@2 [phi:rvaluevar->rvaluevar::@2] + // [21] phi (byte*) rvaluevar::screen#4 = (byte*) 1024 [phi:rvaluevar->rvaluevar::@2#0] -- pbuz1=pbuc1 lda #<$400 sta screen lda #>$400 sta screen+1 - // [21] phi (byte) rvaluevar::i#2 = (byte) 2 [phi:rvaluevar->rvaluevar::@1#2] -- vbuxx=vbuc1 + // [21] phi (byte) rvaluevar::i#4 = (byte) 2 [phi:rvaluevar->rvaluevar::@2#1] -- vbuxx=vbuc1 ldx #2 - // rvaluevar::@1 - b1: - // while(i<10) - // [22] if((byte) rvaluevar::i#2<(byte) $a) goto rvaluevar::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$a - bcc b2 - // rvaluevar::@3 - // *screen2 = b - // [23] *((const byte*) rvaluevar::screen2#0) ← (byte) rvaluevar::b#2 -- _deref_pbuc1=vbuyy - sty screen2 - // rvaluevar::@return - // } - // [24] return - rts + // [21] phi from rvaluevar::@1 to rvaluevar::@2 [phi:rvaluevar::@1->rvaluevar::@2] + // [21] phi (byte*) rvaluevar::screen#4 = (byte*) rvaluevar::screen#1 [phi:rvaluevar::@1->rvaluevar::@2#0] -- register_copy + // [21] phi (byte) rvaluevar::i#4 = (byte) rvaluevar::i#1 [phi:rvaluevar::@1->rvaluevar::@2#1] -- register_copy // rvaluevar::@2 b2: // b = *screen - // [25] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2) -- vbuyy=_deref_pbuz1 + // [22] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#4) -- vbuaa=_deref_pbuz1 ldy #0 lda (screen),y - tay // screen++; - // [26] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 -- pbuz1=_inc_pbuz1 + // [23] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#4 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: // i++; - // [27] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 -- vbuxx=_inc_vbuxx + // [24] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#4 -- vbuxx=_inc_vbuxx inx - // [21] phi from rvaluevar::@2 to rvaluevar::@1 [phi:rvaluevar::@2->rvaluevar::@1] - // [21] phi (byte) rvaluevar::b#2 = (byte) rvaluevar::b#1 [phi:rvaluevar::@2->rvaluevar::@1#0] -- register_copy - // [21] phi (byte*) rvaluevar::screen#2 = (byte*) rvaluevar::screen#1 [phi:rvaluevar::@2->rvaluevar::@1#1] -- register_copy - // [21] phi (byte) rvaluevar::i#2 = (byte) rvaluevar::i#1 [phi:rvaluevar::@2->rvaluevar::@1#2] -- register_copy - jmp b1 + // rvaluevar::@1 + // while(i<10) + // [25] if((byte) rvaluevar::i#1<(byte) $a) goto rvaluevar::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #$a + bcc b2 + // rvaluevar::@3 + // *screen2 = b + // [26] *((const byte*) rvaluevar::screen2#0) ← (byte) rvaluevar::b#1 -- _deref_pbuc1=vbuaa + sta screen2 + // rvaluevar::@return + // } + // [27] return + rts } // rvalue rvalue: { // A constant pointer .label SCREEN = $400 .label screen2 = $400 - // b = SCREEN[1] - // [28] (byte) rvalue::b#1 ← *((const byte[$400]) rvalue::SCREEN#0+(byte) 1) -- vbuaa=_deref_pbuc1 - // RValue constant array pointer constant index - lda SCREEN+1 - // [29] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1] - // [29] phi (byte) rvalue::b#3 = (byte) rvalue::b#1 [phi:rvalue->rvalue::@1#0] -- register_copy - // [29] phi (byte) rvalue::i#2 = (byte) 2 [phi:rvalue->rvalue::@1#1] -- vbuxx=vbuc1 + // [29] phi from rvalue to rvalue::@2 [phi:rvalue->rvalue::@2] + // [29] phi (byte) rvalue::i#4 = (byte) 2 [phi:rvalue->rvalue::@2#0] -- vbuxx=vbuc1 ldx #2 + // [29] phi from rvalue::@1 to rvalue::@2 [phi:rvalue::@1->rvalue::@2] + // [29] phi (byte) rvalue::i#4 = (byte) rvalue::i#1 [phi:rvalue::@1->rvalue::@2#0] -- register_copy + // rvalue::@2 + b2: + // b = SCREEN[i++] + // [30] (byte) rvalue::b#2 ← *((const byte[$400]) rvalue::SCREEN#0 + (byte) rvalue::i#4) -- vbuaa=pbuc1_derefidx_vbuxx + lda SCREEN,x + // b = SCREEN[i++]; + // [31] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#4 -- vbuxx=_inc_vbuxx + inx // rvalue::@1 - b1: // while(i<10) - // [30] if((byte) rvalue::i#2<(byte) $a) goto rvalue::@2 -- vbuxx_lt_vbuc1_then_la1 + // [32] if((byte) rvalue::i#1<(byte) $a) goto rvalue::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 // rvalue::@3 // *screen2 = b - // [31] *((const byte*) rvalue::screen2#0) ← (byte) rvalue::b#3 -- _deref_pbuc1=vbuaa + // [33] *((const byte*) rvalue::screen2#0) ← (byte) rvalue::b#2 -- _deref_pbuc1=vbuaa sta screen2 // rvalue::@return // } - // [32] return + // [34] return rts - // rvalue::@2 - b2: - // b = SCREEN[i++] - // [33] (byte) rvalue::b#2 ← *((const byte[$400]) rvalue::SCREEN#0 + (byte) rvalue::i#2) -- vbuaa=pbuc1_derefidx_vbuxx - lda SCREEN,x - // b = SCREEN[i++]; - // [34] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 -- vbuxx=_inc_vbuxx - inx - // [29] phi from rvalue::@2 to rvalue::@1 [phi:rvalue::@2->rvalue::@1] - // [29] phi (byte) rvalue::b#3 = (byte) rvalue::b#2 [phi:rvalue::@2->rvalue::@1#0] -- register_copy - // [29] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 [phi:rvalue::@2->rvalue::@1#1] -- register_copy - jmp b1 } // lvalue lvalue: { @@ -1395,31 +1430,29 @@ lvalue: { // LValue constant array constant indexing lda #2 sta SCREEN+1 - // [37] phi from lvalue to lvalue::@1 [phi:lvalue->lvalue::@1] - // [37] phi (byte) lvalue::i#2 = (byte) 2 [phi:lvalue->lvalue::@1#0] -- vbuxx=vbuc1 + // [37] phi from lvalue to lvalue::@2 [phi:lvalue->lvalue::@2] + // [37] phi (byte) lvalue::i#4 = (byte) 2 [phi:lvalue->lvalue::@2#0] -- vbuxx=vbuc1 tax + // [37] phi from lvalue::@1 to lvalue::@2 [phi:lvalue::@1->lvalue::@2] + // [37] phi (byte) lvalue::i#4 = (byte) lvalue::i#1 [phi:lvalue::@1->lvalue::@2#0] -- register_copy + // lvalue::@2 + b2: + // SCREEN[i++] = 3 + // [38] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#4) ← (byte) 3 -- pbuc1_derefidx_vbuxx=vbuc2 + lda #3 + sta SCREEN,x + // SCREEN[i++] = 3; + // [39] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#4 -- vbuxx=_inc_vbuxx + inx // lvalue::@1 - b1: // while(i<10) - // [38] if((byte) lvalue::i#2<(byte) $a) goto lvalue::@2 -- vbuxx_lt_vbuc1_then_la1 + // [40] if((byte) lvalue::i#1<(byte) $a) goto lvalue::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 // lvalue::@return // } - // [39] return + // [41] return rts - // lvalue::@2 - b2: - // SCREEN[i++] = 3 - // [40] *((const byte[$400]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte) 3 -- pbuc1_derefidx_vbuxx=vbuc2 - lda #3 - sta SCREEN,x - // SCREEN[i++] = 3; - // [41] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 -- vbuxx=_inc_vbuxx - inx - // [37] phi from lvalue::@2 to lvalue::@1 [phi:lvalue::@2->lvalue::@1] - // [37] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 [phi:lvalue::@2->lvalue::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/ptrtest.sym b/src/test/ref/ptrtest.sym index 676f372cd..1a7da404a 100644 --- a/src/test/ref/ptrtest.sym +++ b/src/test/ref/ptrtest.sym @@ -8,8 +8,8 @@ (byte[$400]) lvalue::SCREEN (const byte[$400]) lvalue::SCREEN#0 SCREEN = (byte*) 1024 (byte) lvalue::i -(byte) lvalue::i#1 reg byte x 22.0 -(byte) lvalue::i#2 reg byte x 14.666666666666666 +(byte) lvalue::i#1 reg byte x 16.5 +(byte) lvalue::i#4 reg byte x 16.5 (void()) lvaluevar() (label) lvaluevar::@1 (label) lvaluevar::@2 @@ -17,11 +17,11 @@ (byte) lvaluevar::b (const byte) lvaluevar::b#0 b = (byte) 4 (byte) lvaluevar::i -(byte) lvaluevar::i#1 reg byte x 22.0 -(byte) lvaluevar::i#2 reg byte x 8.25 +(byte) lvaluevar::i#1 reg byte x 16.5 +(byte) lvaluevar::i#4 reg byte x 7.333333333333333 (byte*) lvaluevar::screen -(byte*) lvaluevar::screen#1 screen zp ZP_WORD:2 11.0 -(byte*) lvaluevar::screen#2 screen zp ZP_WORD:2 11.0 +(byte*) lvaluevar::screen#1 screen zp ZP_WORD:2 7.333333333333333 +(byte*) lvaluevar::screen#4 screen zp ZP_WORD:2 16.5 (void()) main() (label) main::@1 (label) main::@2 @@ -35,12 +35,10 @@ (byte[$400]) rvalue::SCREEN (const byte[$400]) rvalue::SCREEN#0 SCREEN = (byte*) 1024 (byte) rvalue::b -(byte) rvalue::b#1 reg byte a 4.0 -(byte) rvalue::b#2 reg byte a 11.0 -(byte) rvalue::b#3 reg byte a 7.5 +(byte) rvalue::b#2 reg byte a 4.333333333333333 (byte) rvalue::i -(byte) rvalue::i#1 reg byte x 22.0 -(byte) rvalue::i#2 reg byte x 14.666666666666666 +(byte) rvalue::i#1 reg byte x 16.5 +(byte) rvalue::i#4 reg byte x 16.5 (byte*) rvalue::screen2 (const byte*) rvalue::screen2#0 screen2 = (byte*) 1024 (void()) rvaluevar() @@ -49,21 +47,20 @@ (label) rvaluevar::@3 (label) rvaluevar::@return (byte) rvaluevar::b -(byte) rvaluevar::b#1 reg byte y 7.333333333333333 -(byte) rvaluevar::b#2 reg byte y 6.5 +(byte) rvaluevar::b#1 reg byte a 3.25 (byte) rvaluevar::i -(byte) rvaluevar::i#1 reg byte x 22.0 -(byte) rvaluevar::i#2 reg byte x 8.25 +(byte) rvaluevar::i#1 reg byte x 16.5 +(byte) rvaluevar::i#4 reg byte x 7.333333333333333 (byte*) rvaluevar::screen -(byte*) rvaluevar::screen#1 screen zp ZP_WORD:2 11.0 -(byte*) rvaluevar::screen#2 screen zp ZP_WORD:2 11.0 +(byte*) rvaluevar::screen#1 screen zp ZP_WORD:2 7.333333333333333 +(byte*) rvaluevar::screen#4 screen zp ZP_WORD:2 16.5 (byte*) rvaluevar::screen2 (const byte*) rvaluevar::screen2#0 screen2 = (byte*) 1024 -reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] -reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] -zp ZP_WORD:2 [ rvaluevar::screen#2 rvaluevar::screen#1 lvaluevar::screen#2 lvaluevar::screen#1 ] -reg byte y [ rvaluevar::b#2 rvaluevar::b#1 ] -reg byte x [ rvalue::i#2 rvalue::i#1 ] -reg byte a [ rvalue::b#3 rvalue::b#1 rvalue::b#2 ] -reg byte x [ lvalue::i#2 lvalue::i#1 ] +reg byte x [ lvaluevar::i#4 lvaluevar::i#1 ] +reg byte x [ rvaluevar::i#4 rvaluevar::i#1 ] +zp ZP_WORD:2 [ rvaluevar::screen#4 rvaluevar::screen#1 lvaluevar::screen#4 lvaluevar::screen#1 ] +reg byte x [ rvalue::i#4 rvalue::i#1 ] +reg byte x [ lvalue::i#4 lvalue::i#1 ] +reg byte a [ rvaluevar::b#1 ] +reg byte a [ rvalue::b#2 ] diff --git a/src/test/ref/ptrtestmin.asm b/src/test/ref/ptrtestmin.asm index 13d0e0368..62b3d7626 100644 --- a/src/test/ref/ptrtestmin.asm +++ b/src/test/ref/ptrtestmin.asm @@ -5,15 +5,12 @@ main: { // A constant pointer .label SCREEN = $400 - lda #0 ldx #2 - b1: + b2: + lda SCREEN,x + inx cpx #$a bcc b2 sta SCREEN+$3e7 rts - b2: - lda SCREEN,x - inx - jmp b1 } diff --git a/src/test/ref/ptrtestmin.cfg b/src/test/ref/ptrtestmin.cfg index c2308fbae..8b68cd390 100644 --- a/src/test/ref/ptrtestmin.cfg +++ b/src/test/ref/ptrtestmin.cfg @@ -9,19 +9,18 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 2 ) + [6] (byte) main::b#1 ← *((const byte[$400]) main::SCREEN#0 + (byte) main::i#4) + [7] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::b#2 ← phi( main/(byte) 0 main::@2/(byte) main::b#1 ) - [5] (byte) main::i#2 ← phi( main/(byte) 2 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1<(byte) $a) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [7] *((const byte[$400]) main::SCREEN#0+(word) $3e7) ← (byte) main::b#2 + [9] *((const byte[$400]) main::SCREEN#0+(word) $3e7) ← (byte) main::b#1 to:main::@return main::@return: scope:[main] from main::@3 - [8] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [9] (byte) main::b#1 ← *((const byte[$400]) main::SCREEN#0 + (byte) main::i#2) - [10] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 diff --git a/src/test/ref/ptrtestmin.log b/src/test/ref/ptrtestmin.log index fb6026903..214c41abb 100644 --- a/src/test/ref/ptrtestmin.log +++ b/src/test/ref/ptrtestmin.log @@ -86,29 +86,44 @@ Constant (const byte) main::i#0 = 2 Successful SSA optimization Pass2ConstantIdentification De-inlining pointer[w] to *(pointer+w) [10] *((const byte[$400]) main::SCREEN#0 + (word) $3e7) ← (byte) main::b#2 Successful SSA optimization Pass2DeInlineWordDerefIdx -Constant right-side identified [4] (byte*~) main::$1 ← (const byte[$400]) main::SCREEN#0 + (word) $3e7 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Alias (byte) main::b#1 = (byte) main::b#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Identical Phi Values (byte) main::b#5 (const byte) main::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [6] (byte*~) main::$1 ← (const byte[$400]) main::SCREEN#0 + (word) $3e7 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) main::$1 = main::SCREEN#0+$3e7 Successful SSA optimization Pass2ConstantIdentification -Inlining constant with var siblings (const byte) main::b#0 +Removing PHI-reference to removed block (main::@1_1) in block main::@3 +if() condition always true - replacing block destination [11] if((const byte) main::i#0<(byte) $a) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Eliminating unused constant (const byte) main::b#0 +Successful SSA optimization PassNEliminateUnusedVars +Alias (byte) main::b#1 = (byte) main::b#4 +Successful SSA optimization Pass2AliasElimination Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::$1 = (const byte[$400]) main::SCREEN#0+(word) $3e7 Constant inlined main::i#0 = (byte) 2 -Constant inlined main::b#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 -Created 2 initial phi equivalence classes -Coalesced [12] main::i#4 ← main::i#1 -Coalesced [13] main::b#4 ← main::b#1 -Coalesced down to 2 phi equivalence classes +Created 1 initial phi equivalence classes +Coalesced [13] main::i#6 ← main::i#1 +Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -126,42 +141,40 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 2 ) + [6] (byte) main::b#1 ← *((const byte[$400]) main::SCREEN#0 + (byte) main::i#4) + [7] (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::b#2 ← phi( main/(byte) 0 main::@2/(byte) main::b#1 ) - [5] (byte) main::i#2 ← phi( main/(byte) 2 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte) main::i#1<(byte) $a) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [7] *((const byte[$400]) main::SCREEN#0+(word) $3e7) ← (byte) main::b#2 + [9] *((const byte[$400]) main::SCREEN#0+(word) $3e7) ← (byte) main::b#1 to:main::@return main::@return: scope:[main] from main::@3 - [8] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [9] (byte) main::b#1 ← *((const byte[$400]) main::SCREEN#0 + (byte) main::i#2) - [10] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 VARIABLE REGISTER WEIGHTS (void()) main() (byte[$400]) main::SCREEN (byte) main::b -(byte) main::b#1 11.0 -(byte) main::b#2 6.5 +(byte) main::b#1 4.333333333333333 (byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 14.666666666666666 +(byte) main::i#1 16.5 +(byte) main::i#4 16.5 Initial phi equivalence classes -[ main::i#2 main::i#1 ] -[ main::b#2 main::b#1 ] +[ main::i#4 main::i#1 ] +Added variable main::b#1 to zero page equivalence class [ main::b#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ main::b#2 main::b#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::b#2 main::b#1 ] +[ main::i#4 main::i#1 ] +[ main::b#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::b#1 ] INITIAL ASM Target platform is c64basic @@ -194,58 +207,55 @@ main: { .label SCREEN = $400 .label b = 3 .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::b#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta b - // [5] phi (byte) main::i#2 = (byte) 2 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 2 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #2 sta i + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] (byte) main::b#1 ← *((const byte[$400]) main::SCREEN#0 + (byte) main::i#4) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy i + lda SCREEN,y + sta b + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 + inc i jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + // [8] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$a - bcc b2 + bcc b2_from_b1 jmp b3 // main::@3 b3: - // [7] *((const byte[$400]) main::SCREEN#0+(word) $3e7) ← (byte) main::b#2 -- _deref_pbuc1=vbuz1 + // [9] *((const byte[$400]) main::SCREEN#0+(word) $3e7) ← (byte) main::b#1 -- _deref_pbuc1=vbuz1 lda b sta SCREEN+$3e7 jmp breturn // main::@return breturn: - // [8] return + // [10] return rts - // main::@2 - b2: - // [9] (byte) main::b#1 ← *((const byte[$400]) main::SCREEN#0 + (byte) main::i#2) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy i - lda SCREEN,y - sta b - // [10] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::b#2 = (byte) main::b#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data 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#2 main::b#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , 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] 36.67: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 17.5: zp ZP_BYTE:3 [ main::b#2 main::b#1 ] +Uplift Scope [main] 33: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] 4.33: zp ZP_BYTE:3 [ main::b#1 ] Uplift Scope [] -Uplifting [main] best 265 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::b#2 main::b#1 ] -Uplifting [] best 265 combination +Uplifting [main] best 275 combination reg byte x [ main::i#4 main::i#1 ] reg byte a [ main::b#1 ] +Uplifting [] best 275 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,63 +285,66 @@ bend: main: { // A constant pointer .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::b#2 = (byte) 0 [phi:main->main::@1#0] -- vbuaa=vbuc1 - lda #0 - // [5] phi (byte) main::i#2 = (byte) 2 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 2 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #2 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] (byte) main::b#1 ← *((const byte[$400]) main::SCREEN#0 + (byte) main::i#4) -- vbuaa=pbuc1_derefidx_vbuxx + lda SCREEN,x + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [8] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a - bcc b2 + bcc b2_from_b1 jmp b3 // main::@3 b3: - // [7] *((const byte[$400]) main::SCREEN#0+(word) $3e7) ← (byte) main::b#2 -- _deref_pbuc1=vbuaa + // [9] *((const byte[$400]) main::SCREEN#0+(word) $3e7) ← (byte) main::b#1 -- _deref_pbuc1=vbuaa sta SCREEN+$3e7 jmp breturn // main::@return breturn: - // [8] return + // [10] return rts - // main::@2 - b2: - // [9] (byte) main::b#1 ← *((const byte[$400]) main::SCREEN#0 + (byte) main::i#2) -- vbuaa=pbuc1_derefidx_vbuxx - lda SCREEN,x - // [10] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::b#2 = (byte) main::b#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction b3: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -347,18 +360,17 @@ FINAL SYMBOL TABLE (byte[$400]) main::SCREEN (const byte[$400]) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::b -(byte) main::b#1 reg byte a 11.0 -(byte) main::b#2 reg byte a 6.5 +(byte) main::b#1 reg byte a 4.333333333333333 (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 14.666666666666666 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 16.5 -reg byte x [ main::i#2 main::i#1 ] -reg byte a [ main::b#2 main::b#1 ] +reg byte x [ main::i#4 main::i#1 ] +reg byte a [ main::b#1 ] FINAL ASSEMBLER -Score: 190 +Score: 140 // File Comments // Test all types of pointers @@ -378,37 +390,32 @@ Score: 190 main: { // A constant pointer .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::b#2 = (byte) 0 [phi:main->main::@1#0] -- vbuaa=vbuc1 - lda #0 - // [5] phi (byte) main::i#2 = (byte) 2 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::i#4 = (byte) 2 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // b = SCREEN[i++] + // [6] (byte) main::b#1 ← *((const byte[$400]) main::SCREEN#0 + (byte) main::i#4) -- vbuaa=pbuc1_derefidx_vbuxx + lda SCREEN,x + // b = SCREEN[i++]; + // [7] (byte) main::i#1 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + inx // main::@1 - b1: // while(i<10) - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [8] if((byte) main::i#1<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 // main::@3 // SCREEN[999] = b - // [7] *((const byte[$400]) main::SCREEN#0+(word) $3e7) ← (byte) main::b#2 -- _deref_pbuc1=vbuaa + // [9] *((const byte[$400]) main::SCREEN#0+(word) $3e7) ← (byte) main::b#1 -- _deref_pbuc1=vbuaa sta SCREEN+$3e7 // main::@return // } - // [8] return + // [10] return rts - // main::@2 - b2: - // b = SCREEN[i++] - // [9] (byte) main::b#1 ← *((const byte[$400]) main::SCREEN#0 + (byte) main::i#2) -- vbuaa=pbuc1_derefidx_vbuxx - lda SCREEN,x - // b = SCREEN[i++]; - // [10] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::b#2 = (byte) main::b#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/ptrtestmin.sym b/src/test/ref/ptrtestmin.sym index ece81cc5c..093603d1e 100644 --- a/src/test/ref/ptrtestmin.sym +++ b/src/test/ref/ptrtestmin.sym @@ -9,11 +9,10 @@ (byte[$400]) main::SCREEN (const byte[$400]) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::b -(byte) main::b#1 reg byte a 11.0 -(byte) main::b#2 reg byte a 6.5 +(byte) main::b#1 reg byte a 4.333333333333333 (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 14.666666666666666 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 16.5 -reg byte x [ main::i#2 main::i#1 ] -reg byte a [ main::b#2 main::b#1 ] +reg byte x [ main::i#4 main::i#1 ] +reg byte a [ main::b#1 ] diff --git a/src/test/ref/sandbox-ternary-error.asm b/src/test/ref/sandbox-ternary-error.asm index a599c7f2c..6ba5c59e6 100644 --- a/src/test/ref/sandbox-ternary-error.asm +++ b/src/test/ref/sandbox-ternary-error.asm @@ -5,22 +5,22 @@ main: { .label SCREEN = $400 ldx #0 - b1: - cpx #0 - beq b2 - cpx #1 - beq b4 - lda #'c' - jmp b3 - b4: - lda #'b' - jmp b3 b2: lda #'a' - b3: + b4: sta SCREEN inx cpx #3 bne b1 rts + b1: + cpx #0 + beq b2 + cpx #1 + beq b5 + lda #'c' + jmp b4 + b5: + lda #'b' + jmp b4 } diff --git a/src/test/ref/sandbox-ternary-error.cfg b/src/test/ref/sandbox-ternary-error.cfg index c9f03353f..d0b1f502f 100644 --- a/src/test/ref/sandbox-ternary-error.cfg +++ b/src/test/ref/sandbox-ternary-error.cfg @@ -9,26 +9,29 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@3 - [5] (byte) main::b#2 ← phi( main/(byte) 0 main::@3/(byte) main::b#1 ) - [6] if((byte) main::b#2==(byte) 0) goto main::@3 to:main::@2 -main::@2: scope:[main] from main::@1 - [7] if((byte) main::b#2==(byte) 1) goto main::@4 - to:main::@5 -main::@4: scope:[main] from main::@2 - [8] phi() - to:main::@5 -main::@5: scope:[main] from main::@2 main::@4 - [9] (byte~) main::$5 ← phi( main::@4/(byte) 'b' main::@2/(byte) 'c' ) - to:main::@3 -main::@3: scope:[main] from main::@1 main::@5 - [10] (byte~) main::$7 ← phi( main::@1/(byte) 'a' main::@5/(byte~) main::$5 ) - [11] *((const byte*) main::SCREEN#0) ← (byte~) main::$7 - [12] (byte) main::b#1 ← ++ (byte) main::b#2 - [13] if((byte) main::b#1!=(byte) 3) goto main::@1 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::b#11 ← phi( main::@1/(byte) main::b#1 main/(byte) 0 ) + to:main::@4 +main::@4: scope:[main] from main::@2 main::@6 + [6] (byte) main::b#10 ← phi( main::@2/(byte) main::b#11 main::@6/(byte) main::b#1 ) + [6] (byte~) main::$7 ← phi( main::@2/(byte) 'a' main::@6/(byte~) main::$5 ) + [7] *((const byte*) main::SCREEN#0) ← (byte~) main::$7 + [8] (byte) main::b#1 ← ++ (byte) main::b#10 + [9] if((byte) main::b#1!=(byte) 3) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@3 - [14] return +main::@return: scope:[main] from main::@4 + [10] return to:@return +main::@1: scope:[main] from main::@4 + [11] if((byte) main::b#1==(byte) 0) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [12] if((byte) main::b#1==(byte) 1) goto main::@5 + to:main::@6 +main::@5: scope:[main] from main::@3 + [13] phi() + to:main::@6 +main::@6: scope:[main] from main::@3 main::@5 + [14] (byte~) main::$5 ← phi( main::@5/(byte) 'b' main::@3/(byte) 'c' ) + to:main::@4 diff --git a/src/test/ref/sandbox-ternary-error.log b/src/test/ref/sandbox-ternary-error.log index cb1aa0817..cd4a93450 100644 --- a/src/test/ref/sandbox-ternary-error.log +++ b/src/test/ref/sandbox-ternary-error.log @@ -123,47 +123,59 @@ Constant (const byte) main::$2 = 'c' Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [18] main::b#1 ← ++ main::b#2 to ++ Resolved ranged comparison value [20] if(main::b#1!=rangelast(0,2)) goto main::@1 to (number) 3 +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 3 in if((byte) main::b#1!=(number) 3) goto main::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast 3 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 3 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::b#1 = (byte) main::b#2 +Alias (byte) main::b#13 = (byte) main::b#9 (byte) main::b#14 +Successful SSA optimization Pass2AliasElimination +Alias (byte) main::b#12 = (byte) main::b#13 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::b#15 (const byte) main::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (main::@1_1) in block main::@3 +if() condition always true - replacing block destination [15] if((const byte) main::b#0==(byte) 0) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Alias (byte) main::b#1 = (byte) main::b#12 +Successful SSA optimization Pass2AliasElimination Inlining constant with var siblings (const byte) main::b#0 Constant inlined main::$6 = (byte) 'a' Constant inlined main::$3 = (byte) 'b' Constant inlined main::b#0 = (byte) 0 Constant inlined main::$2 = (byte) 'c' Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@13(between main::@4 and main::@1) +Added new block during phi lifting main::@13(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of main::@6 Adding NOP phi() at start of main::@5 -Adding NOP phi() at start of main::@2 CALL GRAPH Calls in [] to main:2 -Created 3 initial phi equivalence classes -Coalesced [11] main::$9 ← main::$5 -Coalesced [17] main::b#9 ← main::b#1 +Created 4 initial phi equivalence classes +Coalesced [8] main::b#17 ← main::b#11 +Coalesced [18] main::$9 ← main::$5 +Coalesced [19] main::b#18 ← main::b#1 +Coalesced (already) [21] main::b#16 ← main::b#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@13 -Culled Empty Block (label) main::@2 -Renumbering block main::@3 to main::@2 -Renumbering block main::@4 to main::@3 -Renumbering block main::@5 to main::@4 -Renumbering block main::@7 to main::@5 +Renumbering block main::@7 to main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of main::@5 FINAL CONTROL FLOW GRAPH @begin: scope:[] from @@ -177,48 +189,52 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@3 - [5] (byte) main::b#2 ← phi( main/(byte) 0 main::@3/(byte) main::b#1 ) - [6] if((byte) main::b#2==(byte) 0) goto main::@3 to:main::@2 -main::@2: scope:[main] from main::@1 - [7] if((byte) main::b#2==(byte) 1) goto main::@4 - to:main::@5 -main::@4: scope:[main] from main::@2 - [8] phi() - to:main::@5 -main::@5: scope:[main] from main::@2 main::@4 - [9] (byte~) main::$5 ← phi( main::@4/(byte) 'b' main::@2/(byte) 'c' ) - to:main::@3 -main::@3: scope:[main] from main::@1 main::@5 - [10] (byte~) main::$7 ← phi( main::@1/(byte) 'a' main::@5/(byte~) main::$5 ) - [11] *((const byte*) main::SCREEN#0) ← (byte~) main::$7 - [12] (byte) main::b#1 ← ++ (byte) main::b#2 - [13] if((byte) main::b#1!=(byte) 3) goto main::@1 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::b#11 ← phi( main::@1/(byte) main::b#1 main/(byte) 0 ) + to:main::@4 +main::@4: scope:[main] from main::@2 main::@6 + [6] (byte) main::b#10 ← phi( main::@2/(byte) main::b#11 main::@6/(byte) main::b#1 ) + [6] (byte~) main::$7 ← phi( main::@2/(byte) 'a' main::@6/(byte~) main::$5 ) + [7] *((const byte*) main::SCREEN#0) ← (byte~) main::$7 + [8] (byte) main::b#1 ← ++ (byte) main::b#10 + [9] if((byte) main::b#1!=(byte) 3) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@3 - [14] return +main::@return: scope:[main] from main::@4 + [10] return to:@return +main::@1: scope:[main] from main::@4 + [11] if((byte) main::b#1==(byte) 0) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [12] if((byte) main::b#1==(byte) 1) goto main::@5 + to:main::@6 +main::@5: scope:[main] from main::@3 + [13] phi() + to:main::@6 +main::@6: scope:[main] from main::@3 main::@5 + [14] (byte~) main::$5 ← phi( main::@5/(byte) 'b' main::@3/(byte) 'c' ) + to:main::@4 VARIABLE REGISTER WEIGHTS (void()) main() -(byte~) main::$5 11.0 -(byte~) main::$7 22.0 +(byte~) main::$5 101.0 +(byte~) main::$7 202.0 (byte*) main::SCREEN (byte) main::b -(byte) main::b#1 16.5 -(byte) main::b#2 6.285714285714286 +(byte) main::b#1 100.99999999999999 +(byte) main::b#10 106.5 +(byte) main::b#11 112.0 Initial phi equivalence classes -[ main::b#2 main::b#1 ] [ main::$7 main::$5 ] +[ main::b#10 main::b#11 main::b#1 ] Complete equivalence classes -[ main::b#2 main::b#1 ] [ main::$7 main::$5 ] -Allocated zp ZP_BYTE:2 [ main::b#2 main::b#1 ] -Allocated zp ZP_BYTE:3 [ main::$7 main::$5 ] +[ main::b#10 main::b#11 main::b#1 ] +Allocated zp ZP_BYTE:2 [ main::$7 main::$5 ] +Allocated zp ZP_BYTE:3 [ main::b#10 main::b#11 main::b#1 ] INITIAL ASM Target platform is c64basic @@ -248,90 +264,94 @@ bend: // main main: { .label SCREEN = $400 - .label _5 = 3 - .label _7 = 3 - .label b = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::b#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + .label _5 = 2 + .label _7 = 2 + .label b = 3 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::b#11 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta b - jmp b1 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - b1_from_b3: - // [5] phi (byte) main::b#2 = (byte) main::b#1 [phi:main::@3->main::@1#0] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::b#2==(byte) 0) goto main::@3 -- vbuz1_eq_0_then_la1 - lda b - cmp #0 - beq b3_from_b1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::b#11 = (byte) main::b#1 [phi:main::@1->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [7] if((byte) main::b#2==(byte) 1) goto main::@4 -- vbuz1_eq_vbuc1_then_la1 - lda #1 - cmp b - beq b4_from_b2 - // [9] phi from main::@2 to main::@5 [phi:main::@2->main::@5] - b5_from_b2: - // [9] phi (byte~) main::$5 = (byte) 'c' [phi:main::@2->main::@5#0] -- vbuz1=vbuc1 - lda #'c' - sta _5 - jmp b5 - // [8] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + // [6] phi from main::@2 to main::@4 [phi:main::@2->main::@4] b4_from_b2: + // [6] phi (byte) main::b#10 = (byte) main::b#11 [phi:main::@2->main::@4#0] -- register_copy + // [6] phi (byte~) main::$7 = (byte) 'a' [phi:main::@2->main::@4#1] -- vbuz1=vbuc1 + lda #'a' + sta _7 jmp b4 // main::@4 b4: - // [9] phi from main::@4 to main::@5 [phi:main::@4->main::@5] - b5_from_b4: - // [9] phi (byte~) main::$5 = (byte) 'b' [phi:main::@4->main::@5#0] -- vbuz1=vbuc1 - lda #'b' - sta _5 - jmp b5 - // main::@5 - b5: - // [10] phi from main::@5 to main::@3 [phi:main::@5->main::@3] - b3_from_b5: - // [10] phi (byte~) main::$7 = (byte~) main::$5 [phi:main::@5->main::@3#0] -- register_copy - jmp b3 - // [10] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b3_from_b1: - // [10] phi (byte~) main::$7 = (byte) 'a' [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 - lda #'a' - sta _7 - jmp b3 - // main::@3 - b3: - // [11] *((const byte*) main::SCREEN#0) ← (byte~) main::$7 -- _deref_pbuc1=vbuz1 + // [7] *((const byte*) main::SCREEN#0) ← (byte~) main::$7 -- _deref_pbuc1=vbuz1 lda _7 sta SCREEN - // [12] (byte) main::b#1 ← ++ (byte) main::b#2 -- vbuz1=_inc_vbuz1 + // [8] (byte) main::b#1 ← ++ (byte) main::b#10 -- vbuz1=_inc_vbuz1 inc b - // [13] if((byte) main::b#1!=(byte) 3) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + // [9] if((byte) main::b#1!=(byte) 3) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 lda #3 cmp b - bne b1_from_b3 + bne b1 jmp breturn // main::@return breturn: - // [14] return + // [10] return rts + // main::@1 + b1: + // [11] if((byte) main::b#1==(byte) 0) goto main::@2 -- vbuz1_eq_0_then_la1 + lda b + cmp #0 + beq b2_from_b1 + jmp b3 + // main::@3 + b3: + // [12] if((byte) main::b#1==(byte) 1) goto main::@5 -- vbuz1_eq_vbuc1_then_la1 + lda #1 + cmp b + beq b5_from_b3 + // [14] phi from main::@3 to main::@6 [phi:main::@3->main::@6] + b6_from_b3: + // [14] phi (byte~) main::$5 = (byte) 'c' [phi:main::@3->main::@6#0] -- vbuz1=vbuc1 + lda #'c' + sta _5 + jmp b6 + // [13] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + b5_from_b3: + jmp b5 + // main::@5 + b5: + // [14] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + b6_from_b5: + // [14] phi (byte~) main::$5 = (byte) 'b' [phi:main::@5->main::@6#0] -- vbuz1=vbuc1 + lda #'b' + sta _5 + jmp b6 + // main::@6 + b6: + // [6] phi from main::@6 to main::@4 [phi:main::@6->main::@4] + b4_from_b6: + // [6] phi (byte) main::b#10 = (byte) main::b#1 [phi:main::@6->main::@4#0] -- register_copy + // [6] phi (byte~) main::$7 = (byte~) main::$5 [phi:main::@6->main::@4#1] -- register_copy + jmp b4 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 [ main::b#2 main::b#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ main::$7 main::$5 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::$7 main::$5 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::b#10 main::b#11 main::b#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 33: zp ZP_BYTE:3 [ main::$7 main::$5 ] 22.79: zp ZP_BYTE:2 [ main::b#2 main::b#1 ] +Uplift Scope [main] 319.5: zp ZP_BYTE:3 [ main::b#10 main::b#11 main::b#1 ] 303: zp ZP_BYTE:2 [ main::$7 main::$5 ] Uplift Scope [] -Uplifting [main] best 563 combination reg byte a [ main::$7 main::$5 ] reg byte x [ main::b#2 main::b#1 ] -Uplifting [] best 563 combination +Uplifting [main] best 4748 combination reg byte x [ main::b#10 main::b#11 main::b#1 ] reg byte a [ main::$7 main::$5 ] +Uplifting [] best 4748 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -360,107 +380,110 @@ bend: // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::b#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::b#11 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - b1_from_b3: - // [5] phi (byte) main::b#2 = (byte) main::b#1 [phi:main::@3->main::@1#0] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::b#2==(byte) 0) goto main::@3 -- vbuxx_eq_0_then_la1 - cpx #0 - beq b3_from_b1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::b#11 = (byte) main::b#1 [phi:main::@1->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [7] if((byte) main::b#2==(byte) 1) goto main::@4 -- vbuxx_eq_vbuc1_then_la1 - cpx #1 - beq b4_from_b2 - // [9] phi from main::@2 to main::@5 [phi:main::@2->main::@5] - b5_from_b2: - // [9] phi (byte~) main::$5 = (byte) 'c' [phi:main::@2->main::@5#0] -- vbuaa=vbuc1 - lda #'c' - jmp b5 - // [8] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + // [6] phi from main::@2 to main::@4 [phi:main::@2->main::@4] b4_from_b2: + // [6] phi (byte) main::b#10 = (byte) main::b#11 [phi:main::@2->main::@4#0] -- register_copy + // [6] phi (byte~) main::$7 = (byte) 'a' [phi:main::@2->main::@4#1] -- vbuaa=vbuc1 + lda #'a' jmp b4 // main::@4 b4: - // [9] phi from main::@4 to main::@5 [phi:main::@4->main::@5] - b5_from_b4: - // [9] phi (byte~) main::$5 = (byte) 'b' [phi:main::@4->main::@5#0] -- vbuaa=vbuc1 - lda #'b' - jmp b5 - // main::@5 - b5: - // [10] phi from main::@5 to main::@3 [phi:main::@5->main::@3] - b3_from_b5: - // [10] phi (byte~) main::$7 = (byte~) main::$5 [phi:main::@5->main::@3#0] -- register_copy - jmp b3 - // [10] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b3_from_b1: - // [10] phi (byte~) main::$7 = (byte) 'a' [phi:main::@1->main::@3#0] -- vbuaa=vbuc1 - lda #'a' - jmp b3 - // main::@3 - b3: - // [11] *((const byte*) main::SCREEN#0) ← (byte~) main::$7 -- _deref_pbuc1=vbuaa + // [7] *((const byte*) main::SCREEN#0) ← (byte~) main::$7 -- _deref_pbuc1=vbuaa sta SCREEN - // [12] (byte) main::b#1 ← ++ (byte) main::b#2 -- vbuxx=_inc_vbuxx + // [8] (byte) main::b#1 ← ++ (byte) main::b#10 -- vbuxx=_inc_vbuxx inx - // [13] if((byte) main::b#1!=(byte) 3) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + // [9] if((byte) main::b#1!=(byte) 3) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #3 - bne b1_from_b3 + bne b1 jmp breturn // main::@return breturn: - // [14] return + // [10] return rts + // main::@1 + b1: + // [11] if((byte) main::b#1==(byte) 0) goto main::@2 -- vbuxx_eq_0_then_la1 + cpx #0 + beq b2_from_b1 + jmp b3 + // main::@3 + b3: + // [12] if((byte) main::b#1==(byte) 1) goto main::@5 -- vbuxx_eq_vbuc1_then_la1 + cpx #1 + beq b5_from_b3 + // [14] phi from main::@3 to main::@6 [phi:main::@3->main::@6] + b6_from_b3: + // [14] phi (byte~) main::$5 = (byte) 'c' [phi:main::@3->main::@6#0] -- vbuaa=vbuc1 + lda #'c' + jmp b6 + // [13] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + b5_from_b3: + jmp b5 + // main::@5 + b5: + // [14] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + b6_from_b5: + // [14] phi (byte~) main::$5 = (byte) 'b' [phi:main::@5->main::@6#0] -- vbuaa=vbuc1 + lda #'b' + jmp b6 + // main::@6 + b6: + // [6] phi from main::@6 to main::@4 [phi:main::@6->main::@4] + b4_from_b6: + // [6] phi (byte) main::b#10 = (byte) main::b#1 [phi:main::@6->main::@4#0] -- register_copy + // [6] phi (byte~) main::$7 = (byte~) main::$5 [phi:main::@6->main::@4#1] -- register_copy + jmp b4 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b4 -Removing instruction jmp b5 -Removing instruction jmp b3 Removing instruction jmp breturn +Removing instruction jmp b3 +Removing instruction jmp b5 +Removing instruction jmp b6 Succesful ASM optimization Pass5NextJumpElimination -Replacing label b4_from_b2 with b4 -Replacing label b1_from_b3 with b1 +Replacing label b2_from_b1 with b2 +Replacing label b5_from_b3 with b5 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b1_from_b3: +Removing instruction b2_from_b1: Removing instruction b4_from_b2: -Removing instruction b5_from_b4: -Removing instruction b3_from_b5: +Removing instruction b5_from_b3: +Removing instruction b6_from_b5: +Removing instruction b4_from_b6: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b2: -Removing instruction b5_from_b2: +Removing instruction b2_from_main: Removing instruction breturn: +Removing instruction b3: +Removing instruction b6_from_b3: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Skipping double jump to b3 in jmp b5 +Skipping double jump to b4 in jmp b6 Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b3_from_b1 to b2 -Succesful ASM optimization Pass5RelabelLongLabels -Removing instruction jmp b1 +Removing instruction jmp b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: -Removing instruction b5: +Removing instruction b6: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE @@ -468,26 +491,28 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (void()) main() -(byte~) main::$5 reg byte a 11.0 -(byte~) main::$7 reg byte a 22.0 +(byte~) main::$5 reg byte a 101.0 +(byte~) main::$7 reg byte a 202.0 (label) main::@1 (label) main::@2 (label) main::@3 (label) main::@4 (label) main::@5 +(label) main::@6 (label) main::@return (byte*) main::SCREEN (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::b -(byte) main::b#1 reg byte x 16.5 -(byte) main::b#2 reg byte x 6.285714285714286 +(byte) main::b#1 reg byte x 100.99999999999999 +(byte) main::b#10 reg byte x 106.5 +(byte) main::b#11 reg byte x 112.0 -reg byte x [ main::b#2 main::b#1 ] reg byte a [ main::$7 main::$5 ] +reg byte x [ main::b#10 main::b#11 main::b#1 ] FINAL ASSEMBLER -Score: 341 +Score: 3176 // File Comments // Demonstrates error with nested ternary operator @@ -506,55 +531,58 @@ Score: 341 // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::b#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::b#11 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - // [5] phi (byte) main::b#2 = (byte) main::b#1 [phi:main::@3->main::@1#0] -- register_copy - // main::@1 - b1: - // (b == 0) ? 'a' : ((b == 1) ? 'b' : 'c') - // [6] if((byte) main::b#2==(byte) 0) goto main::@3 -- vbuxx_eq_0_then_la1 - cpx #0 - beq b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::b#11 = (byte) main::b#1 [phi:main::@1->main::@2#0] -- register_copy // main::@2 - // (b == 1) ? 'b' : 'c' - // [7] if((byte) main::b#2==(byte) 1) goto main::@4 -- vbuxx_eq_vbuc1_then_la1 - cpx #1 - beq b4 - // [9] phi from main::@2 to main::@5 [phi:main::@2->main::@5] - // [9] phi (byte~) main::$5 = (byte) 'c' [phi:main::@2->main::@5#0] -- vbuaa=vbuc1 - lda #'c' - jmp b3 - // [8] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + b2: + // [6] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + // [6] phi (byte) main::b#10 = (byte) main::b#11 [phi:main::@2->main::@4#0] -- register_copy + // [6] phi (byte~) main::$7 = (byte) 'a' [phi:main::@2->main::@4#1] -- vbuaa=vbuc1 + lda #'a' // main::@4 b4: - // [9] phi from main::@4 to main::@5 [phi:main::@4->main::@5] - // [9] phi (byte~) main::$5 = (byte) 'b' [phi:main::@4->main::@5#0] -- vbuaa=vbuc1 - lda #'b' - // main::@5 - // [10] phi from main::@5 to main::@3 [phi:main::@5->main::@3] - // [10] phi (byte~) main::$7 = (byte~) main::$5 [phi:main::@5->main::@3#0] -- register_copy - jmp b3 - // [10] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b2: - // [10] phi (byte~) main::$7 = (byte) 'a' [phi:main::@1->main::@3#0] -- vbuaa=vbuc1 - lda #'a' - // main::@3 - b3: // *SCREEN = (b == 0) ? 'a' : ((b == 1) ? 'b' : 'c') - // [11] *((const byte*) main::SCREEN#0) ← (byte~) main::$7 -- _deref_pbuc1=vbuaa + // [7] *((const byte*) main::SCREEN#0) ← (byte~) main::$7 -- _deref_pbuc1=vbuaa sta SCREEN // for ( byte b: 0..2 ) - // [12] (byte) main::b#1 ← ++ (byte) main::b#2 -- vbuxx=_inc_vbuxx + // [8] (byte) main::b#1 ← ++ (byte) main::b#10 -- vbuxx=_inc_vbuxx inx - // [13] if((byte) main::b#1!=(byte) 3) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + // [9] if((byte) main::b#1!=(byte) 3) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #3 bne b1 // main::@return // } - // [14] return + // [10] return rts + // main::@1 + b1: + // (b == 0) ? 'a' : ((b == 1) ? 'b' : 'c') + // [11] if((byte) main::b#1==(byte) 0) goto main::@2 -- vbuxx_eq_0_then_la1 + cpx #0 + beq b2 + // main::@3 + // (b == 1) ? 'b' : 'c' + // [12] if((byte) main::b#1==(byte) 1) goto main::@5 -- vbuxx_eq_vbuc1_then_la1 + cpx #1 + beq b5 + // [14] phi from main::@3 to main::@6 [phi:main::@3->main::@6] + // [14] phi (byte~) main::$5 = (byte) 'c' [phi:main::@3->main::@6#0] -- vbuaa=vbuc1 + lda #'c' + jmp b4 + // [13] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + // main::@5 + b5: + // [14] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + // [14] phi (byte~) main::$5 = (byte) 'b' [phi:main::@5->main::@6#0] -- vbuaa=vbuc1 + lda #'b' + // main::@6 + // [6] phi from main::@6 to main::@4 [phi:main::@6->main::@4] + // [6] phi (byte) main::b#10 = (byte) main::b#1 [phi:main::@6->main::@4#0] -- register_copy + // [6] phi (byte~) main::$7 = (byte~) main::$5 [phi:main::@6->main::@4#1] -- register_copy + jmp b4 } // File Data diff --git a/src/test/ref/sandbox-ternary-error.sym b/src/test/ref/sandbox-ternary-error.sym index 0e0be9fe1..ece257cc5 100644 --- a/src/test/ref/sandbox-ternary-error.sym +++ b/src/test/ref/sandbox-ternary-error.sym @@ -2,19 +2,21 @@ (label) @begin (label) @end (void()) main() -(byte~) main::$5 reg byte a 11.0 -(byte~) main::$7 reg byte a 22.0 +(byte~) main::$5 reg byte a 101.0 +(byte~) main::$7 reg byte a 202.0 (label) main::@1 (label) main::@2 (label) main::@3 (label) main::@4 (label) main::@5 +(label) main::@6 (label) main::@return (byte*) main::SCREEN (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::b -(byte) main::b#1 reg byte x 16.5 -(byte) main::b#2 reg byte x 6.285714285714286 +(byte) main::b#1 reg byte x 100.99999999999999 +(byte) main::b#10 reg byte x 106.5 +(byte) main::b#11 reg byte x 112.0 -reg byte x [ main::b#2 main::b#1 ] reg byte a [ main::$7 main::$5 ] +reg byte x [ main::b#10 main::b#11 main::b#1 ] diff --git a/src/test/ref/scan-desire-problem.asm b/src/test/ref/scan-desire-problem.asm index 5f55658d9..16399c533 100644 --- a/src/test/ref/scan-desire-problem.asm +++ b/src/test/ref/scan-desire-problem.asm @@ -32,22 +32,10 @@ main: { jsr init lda #0 sta x - b1: - lda x - cmp #$10 - bcc b4 - b5: - jmp b5 - b4: + b2: lda #0 sta y - b2: - lda y - cmp #9 - bcc b3 - inc x - jmp b1 - b3: + b4: lda x clc adc y @@ -57,7 +45,15 @@ main: { ldx y jsr draw_block inc y - jmp b2 + lda y + cmp #9 + bcc b4 + inc x + lda x + cmp #$10 + bcc b2 + b6: + jmp b6 } // draw_block(byte register(A) tileno, byte register(Y) x, byte register(X) y) draw_block: { diff --git a/src/test/ref/scan-desire-problem.cfg b/src/test/ref/scan-desire-problem.cfg index 9ceaa9c4d..f0f0a0e34 100644 --- a/src/test/ref/scan-desire-problem.cfg +++ b/src/test/ref/scan-desire-problem.cfg @@ -10,33 +10,35 @@ main: scope:[main] from @1 [4] phi() [5] call init - to:main::@1 -main::@1: scope:[main] from main main::@4 - [6] (byte) main::x#2 ← phi( main/(byte) 0 main::@4/(byte) main::x#1 ) - [7] if((byte) main::x#2<(byte) $10) goto main::@2 - to:main::@5 -main::@5: scope:[main] from main::@1 main::@5 - [8] phi() - to:main::@5 -main::@2: scope:[main] from main::@1 main::@6 - [9] (byte) main::y#2 ← phi( main::@6/(byte) main::y#1 main::@1/(byte) 0 ) - [10] if((byte) main::y#2<(byte) 9) goto main::@3 - to:main::@4 -main::@4: scope:[main] from main::@2 - [11] (byte) main::x#1 ← ++ (byte) main::x#2 - to:main::@1 -main::@3: scope:[main] from main::@2 - [12] (byte) main::z#0 ← (byte) main::x#2 + (byte) main::y#2 - [13] (byte) main::tile#0 ← *((const byte*) level_address#0 + (byte) main::z#0) - [14] (byte) draw_block::tileno#0 ← (byte) main::tile#0 - [15] (byte) draw_block::x#0 ← (byte) main::x#2 - [16] (byte) draw_block::y#0 ← (byte) main::y#2 - [17] call draw_block - to:main::@6 -main::@6: scope:[main] from main::@3 - [18] (byte) main::y#1 ← ++ (byte) main::y#2 to:main::@2 -draw_block: scope:[draw_block] from main::@3 +main::@2: scope:[main] from main main::@1 + [6] (byte) main::x#11 ← phi( main::@1/(byte) main::x#1 main/(byte) 0 ) + to:main::@4 +main::@4: scope:[main] from main::@2 main::@3 + [7] (byte) main::y#5 ← phi( main::@3/(byte) main::y#1 main::@2/(byte) 0 ) + [8] (byte) main::z#0 ← (byte) main::x#11 + (byte) main::y#5 + [9] (byte) main::tile#0 ← *((const byte*) level_address#0 + (byte) main::z#0) + [10] (byte) draw_block::tileno#0 ← (byte) main::tile#0 + [11] (byte) draw_block::x#0 ← (byte) main::x#11 + [12] (byte) draw_block::y#0 ← (byte) main::y#5 + [13] call draw_block + to:main::@7 +main::@7: scope:[main] from main::@4 + [14] (byte) main::y#1 ← ++ (byte) main::y#5 + to:main::@3 +main::@3: scope:[main] from main::@7 + [15] if((byte) main::y#1<(byte) 9) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 + [16] (byte) main::x#1 ← ++ (byte) main::x#11 + to:main::@1 +main::@1: scope:[main] from main::@5 + [17] if((byte) main::x#1<(byte) $10) goto main::@2 + to:main::@6 +main::@6: scope:[main] from main::@1 main::@6 + [18] phi() + to:main::@6 +draw_block: scope:[draw_block] from main::@4 [19] (byte) draw_block::tileno#1 ← (byte) draw_block::tileno#0 << (byte) 2 [20] (word) draw_block::x1#0 ← (byte) draw_block::x#0 << (byte) 1 [21] (byte) draw_block::y#1 ← (byte) draw_block::y#0 << (byte) 1 diff --git a/src/test/ref/scan-desire-problem.log b/src/test/ref/scan-desire-problem.log index b75367d2b..e08dfdfdb 100644 --- a/src/test/ref/scan-desire-problem.log +++ b/src/test/ref/scan-desire-problem.log @@ -901,11 +901,28 @@ Eliminating unused constant (const byte) draw_block::color#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::x#1 = (byte) main::x#2 +Alias (byte) main::y#1 = (byte) main::y#2 +Alias (byte) main::x#10 = (byte) main::x#12 (byte) main::x#8 +Alias (byte) main::y#5 = (byte) main::y#6 +Alias (byte) main::x#11 = (byte) main::x#13 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::x#10 (byte) main::x#11 +Identical Phi Values (byte) main::y#7 (const byte) main::y#0 +Identical Phi Values (byte) main::x#14 (const byte) main::x#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) main::x#9 (byte) main::x#11 +Successful SSA optimization Pass2IdenticalPhiElimination Constant (const void*) memset::str#0 = (void*)screen#0 Constant (const void*) memset::str#1 = (void*)colors#0 Constant (const word) init::toD0181_$0#0 = (word)init::toD0181_screen#0 Constant (const word) init::toD0181_$4#0 = (word)init::toD0181_gfx#0 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [100] if((const byte) main::y#0<(byte) 9) goto main::@5 +if() condition always true - replacing block destination [102] if((const byte) main::x#0<(byte) $10) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Constant right-side identified [35] (word~) init::toD0181_$1#0 ← (const word) init::toD0181_$0#0 & (word) $3fff Constant right-side identified [38] (byte~) init::toD0181_$5#0 ← > (const word) init::toD0181_$4#0 Successful SSA optimization Pass2ConstantRValueConsolidation @@ -974,6 +991,8 @@ Successful SSA optimization Pass2IdenticalPhiElimination if() condition always false - eliminating [1] if((word) $3e8<=(byte) 0) goto memset::@1 Successful SSA optimization Pass2ConstantIfs Added new block during phi lifting mul8u::@10(between mul8u::@2 and mul8u::@4) +Added new block during phi lifting main::@17(between main::@1 and main::@2) +Added new block during phi lifting main::@18(between main::@4 and main::@5) Adding NOP phi() at start of @begin Adding NOP phi() at start of @20 Adding NOP phi() at start of @24 @@ -981,8 +1000,9 @@ Adding NOP phi() at start of @25 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@15 +Adding NOP phi() at start of main::@1_1 +Adding NOP phi() at start of main::@4_1 Adding NOP phi() at start of main::@13 -Adding NOP phi() at start of main::@2 Adding NOP phi() at start of mul8u::@3 Adding NOP phi() at start of init Adding NOP phi() at start of init::@2 @@ -993,25 +1013,28 @@ Adding NOP phi() at start of init::toD0181_@return Adding NOP phi() at start of memset::@1 CALL GRAPH Calls in [] to main:3 -Calls in [main] to init:7 draw_block:22 -Calls in [draw_block] to mul8u:29 -Calls in [init] to init_sprites:68 memset:70 memset:72 +Calls in [main] to init:7 draw_block:18 +Calls in [draw_block] to mul8u:30 +Calls in [init] to init_sprites:69 memset:71 memset:73 Created 9 initial phi equivalence classes -Coalesced [16] main::x#8 ← main::x#1 -Coalesced [24] main::y#5 ← main::y#1 -Coalesced [51] mul8u::a#7 ← mul8u::a#1 -Coalesced [59] mul8u::res#9 ← mul8u::res#1 -Coalesced [63] mul8u::a#8 ← mul8u::a#0 -Coalesced [64] mul8u::res#7 ← mul8u::res#6 -Coalesced [65] mul8u::mb#6 ← mul8u::mb#1 -Coalesced (already) [66] mul8u::res#8 ← mul8u::res#2 -Coalesced [93] memset::dst#5 ← memset::dst#1 +Coalesced [24] main::x#15 ← main::x#1 +Coalesced [25] main::y#8 ← main::y#1 +Coalesced [52] mul8u::a#7 ← mul8u::a#1 +Coalesced [60] mul8u::res#9 ← mul8u::res#1 +Coalesced [64] mul8u::a#8 ← mul8u::a#0 +Coalesced [65] mul8u::res#7 ← mul8u::res#6 +Coalesced [66] mul8u::mb#6 ← mul8u::mb#1 +Coalesced (already) [67] mul8u::res#8 ← mul8u::res#2 +Coalesced [94] memset::dst#5 ← memset::dst#1 Coalesced down to 8 phi equivalence classes Culled Empty Block (label) @20 Culled Empty Block (label) @25 Culled Empty Block (label) main::@15 -Culled Empty Block (label) main::@2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@4_1 +Culled Empty Block (label) main::@17 +Culled Empty Block (label) main::@18 Culled Empty Block (label) mul8u::@3 Culled Empty Block (label) mul8u::@10 Culled Empty Block (label) init::@4 @@ -1023,16 +1046,16 @@ Renumbering block memset::@4 to memset::@2 Renumbering block memset::@5 to memset::@3 Renumbering block mul8u::@4 to mul8u::@3 Renumbering block mul8u::@7 to mul8u::@4 -Renumbering block main::@4 to main::@2 -Renumbering block main::@5 to main::@3 -Renumbering block main::@6 to main::@4 -Renumbering block main::@13 to main::@5 -Renumbering block main::@16 to main::@6 +Renumbering block main::@4 to main::@3 +Renumbering block main::@5 to main::@4 +Renumbering block main::@6 to main::@5 +Renumbering block main::@13 to main::@6 +Renumbering block main::@16 to main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@6 Adding NOP phi() at start of mul8u Adding NOP phi() at start of init Adding NOP phi() at start of init::@2 @@ -1052,33 +1075,35 @@ FINAL CONTROL FLOW GRAPH main: scope:[main] from @1 [4] phi() [5] call init - to:main::@1 -main::@1: scope:[main] from main main::@4 - [6] (byte) main::x#2 ← phi( main/(byte) 0 main::@4/(byte) main::x#1 ) - [7] if((byte) main::x#2<(byte) $10) goto main::@2 - to:main::@5 -main::@5: scope:[main] from main::@1 main::@5 - [8] phi() - to:main::@5 -main::@2: scope:[main] from main::@1 main::@6 - [9] (byte) main::y#2 ← phi( main::@6/(byte) main::y#1 main::@1/(byte) 0 ) - [10] if((byte) main::y#2<(byte) 9) goto main::@3 - to:main::@4 -main::@4: scope:[main] from main::@2 - [11] (byte) main::x#1 ← ++ (byte) main::x#2 - to:main::@1 -main::@3: scope:[main] from main::@2 - [12] (byte) main::z#0 ← (byte) main::x#2 + (byte) main::y#2 - [13] (byte) main::tile#0 ← *((const byte*) level_address#0 + (byte) main::z#0) - [14] (byte) draw_block::tileno#0 ← (byte) main::tile#0 - [15] (byte) draw_block::x#0 ← (byte) main::x#2 - [16] (byte) draw_block::y#0 ← (byte) main::y#2 - [17] call draw_block - to:main::@6 -main::@6: scope:[main] from main::@3 - [18] (byte) main::y#1 ← ++ (byte) main::y#2 to:main::@2 -draw_block: scope:[draw_block] from main::@3 +main::@2: scope:[main] from main main::@1 + [6] (byte) main::x#11 ← phi( main::@1/(byte) main::x#1 main/(byte) 0 ) + to:main::@4 +main::@4: scope:[main] from main::@2 main::@3 + [7] (byte) main::y#5 ← phi( main::@3/(byte) main::y#1 main::@2/(byte) 0 ) + [8] (byte) main::z#0 ← (byte) main::x#11 + (byte) main::y#5 + [9] (byte) main::tile#0 ← *((const byte*) level_address#0 + (byte) main::z#0) + [10] (byte) draw_block::tileno#0 ← (byte) main::tile#0 + [11] (byte) draw_block::x#0 ← (byte) main::x#11 + [12] (byte) draw_block::y#0 ← (byte) main::y#5 + [13] call draw_block + to:main::@7 +main::@7: scope:[main] from main::@4 + [14] (byte) main::y#1 ← ++ (byte) main::y#5 + to:main::@3 +main::@3: scope:[main] from main::@7 + [15] if((byte) main::y#1<(byte) 9) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 + [16] (byte) main::x#1 ← ++ (byte) main::x#11 + to:main::@1 +main::@1: scope:[main] from main::@5 + [17] if((byte) main::x#1<(byte) $10) goto main::@2 + to:main::@6 +main::@6: scope:[main] from main::@1 main::@6 + [18] phi() + to:main::@6 +draw_block: scope:[draw_block] from main::@4 [19] (byte) draw_block::tileno#1 ← (byte) draw_block::tileno#0 << (byte) 2 [20] (word) draw_block::x1#0 ← (byte) draw_block::x#0 << (byte) 1 [21] (byte) draw_block::y#1 ← (byte) draw_block::y#0 << (byte) 1 @@ -1258,11 +1283,11 @@ VARIABLE REGISTER WEIGHTS (byte) main::tile (byte) main::tile#0 202.0 (byte) main::x -(byte) main::x#1 22.0 -(byte) main::x#2 21.363636363636363 +(byte) main::x#1 16.5 +(byte) main::x#11 22.4 (byte) main::y -(byte) main::y#1 202.0 -(byte) main::y#2 63.125 +(byte) main::y#1 151.5 +(byte) main::y#5 57.714285714285715 (byte) main::z (byte) main::z#0 202.0 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) @@ -1298,8 +1323,8 @@ VARIABLE REGISTER WEIGHTS (byte*) tileset Initial phi equivalence classes -[ main::x#2 main::x#1 ] -[ main::y#2 main::y#1 ] +[ main::x#11 main::x#1 ] +[ main::y#5 main::y#1 ] [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] [ mul8u::mb#2 mul8u::mb#1 ] @@ -1329,8 +1354,8 @@ Added variable draw_block::$18 to zero page equivalence class [ draw_block::$18 Added variable mul8u::$1 to zero page equivalence class [ mul8u::$1 ] Added variable memset::end#0 to zero page equivalence class [ memset::end#0 ] Complete equivalence classes -[ main::x#2 main::x#1 ] -[ main::y#2 main::y#1 ] +[ main::x#11 main::x#1 ] +[ main::y#5 main::y#1 ] [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] [ mul8u::mb#2 mul8u::mb#1 ] @@ -1359,8 +1384,8 @@ Complete equivalence classes [ draw_block::$18 ] [ mul8u::$1 ] [ memset::end#0 ] -Allocated zp ZP_BYTE:2 [ main::x#2 main::x#1 ] -Allocated zp ZP_BYTE:3 [ main::y#2 main::y#1 ] +Allocated zp ZP_BYTE:2 [ main::x#11 main::x#1 ] +Allocated zp ZP_BYTE:3 [ main::y#5 main::y#1 ] Allocated zp ZP_BYTE:4 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] Allocated zp ZP_WORD:5 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] Allocated zp ZP_WORD:7 [ mul8u::mb#2 mul8u::mb#1 ] @@ -1449,77 +1474,81 @@ main: { // [55] phi from main to init [phi:main->init] init_from_main: jsr init - // [6] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [6] phi (byte) main::x#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [6] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [6] phi (byte) main::x#11 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta x - jmp b1 - // main::@1 - b1: - // [7] if((byte) main::x#2<(byte) $10) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$10 - bcc b2_from_b1 - // [8] phi from main::@1 main::@5 to main::@5 [phi:main::@1/main::@5->main::@5] - b5_from_b1: - b5_from_b5: - jmp b5 - // main::@5 - b5: - jmp b5_from_b5 - // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + jmp b2 + // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: - // [9] phi (byte) main::y#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 - lda #0 - sta y + // [6] phi (byte) main::x#11 = (byte) main::x#1 [phi:main::@1->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [10] if((byte) main::y#2<(byte) 9) goto main::@3 -- vbuz1_lt_vbuc1_then_la1 - lda y - cmp #9 - bcc b3 + // [7] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + b4_from_b2: + // [7] phi (byte) main::y#5 = (byte) 0 [phi:main::@2->main::@4#0] -- vbuz1=vbuc1 + lda #0 + sta y + jmp b4 + // [7] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + b4_from_b3: + // [7] phi (byte) main::y#5 = (byte) main::y#1 [phi:main::@3->main::@4#0] -- register_copy jmp b4 // main::@4 b4: - // [11] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1 - inc x - // [6] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [6] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@4->main::@1#0] -- register_copy - jmp b1 - // main::@3 - b3: - // [12] (byte) main::z#0 ← (byte) main::x#2 + (byte) main::y#2 -- vbuz1=vbuz2_plus_vbuz3 + // [8] (byte) main::z#0 ← (byte) main::x#11 + (byte) main::y#5 -- vbuz1=vbuz2_plus_vbuz3 lda x clc adc y sta z - // [13] (byte) main::tile#0 ← *((const byte*) level_address#0 + (byte) main::z#0) -- vbuz1=pbuc1_derefidx_vbuz2 + // [9] (byte) main::tile#0 ← *((const byte*) level_address#0 + (byte) main::z#0) -- vbuz1=pbuc1_derefidx_vbuz2 ldy z lda level_address,y sta tile - // [14] (byte) draw_block::tileno#0 ← (byte) main::tile#0 -- vbuz1=vbuz2 + // [10] (byte) draw_block::tileno#0 ← (byte) main::tile#0 -- vbuz1=vbuz2 lda tile sta draw_block.tileno - // [15] (byte) draw_block::x#0 ← (byte) main::x#2 -- vbuz1=vbuz2 + // [11] (byte) draw_block::x#0 ← (byte) main::x#11 -- vbuz1=vbuz2 lda x sta draw_block.x - // [16] (byte) draw_block::y#0 ← (byte) main::y#2 -- vbuz1=vbuz2 + // [12] (byte) draw_block::y#0 ← (byte) main::y#5 -- vbuz1=vbuz2 lda y sta draw_block.y - // [17] call draw_block + // [13] call draw_block jsr draw_block + jmp b7 + // main::@7 + b7: + // [14] (byte) main::y#1 ← ++ (byte) main::y#5 -- vbuz1=_inc_vbuz1 + inc y + jmp b3 + // main::@3 + b3: + // [15] if((byte) main::y#1<(byte) 9) goto main::@4 -- vbuz1_lt_vbuc1_then_la1 + lda y + cmp #9 + bcc b4_from_b3 + jmp b5 + // main::@5 + b5: + // [16] (byte) main::x#1 ← ++ (byte) main::x#11 -- vbuz1=_inc_vbuz1 + inc x + jmp b1 + // main::@1 + b1: + // [17] if((byte) main::x#1<(byte) $10) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$10 + bcc b2_from_b1 + // [18] phi from main::@1 main::@6 to main::@6 [phi:main::@1/main::@6->main::@6] + b6_from_b1: + b6_from_b6: jmp b6 // main::@6 b6: - // [18] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1 - inc y - // [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2] - b2_from_b6: - // [9] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@6->main::@2#0] -- register_copy - jmp b2 + jmp b6_from_b6 } // draw_block // draw_block(byte zeropage($10) tileno, byte zeropage($11) x, byte zeropage($12) y) @@ -1926,38 +1955,38 @@ init_sprites: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [12] (byte) main::z#0 ← (byte) main::x#2 + (byte) main::y#2 [ main::x#2 main::y#2 main::z#0 ] ( main:2 [ main::x#2 main::y#2 main::z#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::x#2 main::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::y#2 main::y#1 ] -Statement [19] (byte) draw_block::tileno#1 ← (byte) draw_block::tileno#0 << (byte) 2 [ draw_block::x#0 draw_block::y#0 draw_block::tileno#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::x#0 draw_block::y#0 draw_block::tileno#1 ] ) always clobbers reg byte a +Statement [8] (byte) main::z#0 ← (byte) main::x#11 + (byte) main::y#5 [ main::x#11 main::y#5 main::z#0 ] ( main:2 [ main::x#11 main::y#5 main::z#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::x#11 main::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::y#5 main::y#1 ] +Statement [19] (byte) draw_block::tileno#1 ← (byte) draw_block::tileno#0 << (byte) 2 [ draw_block::x#0 draw_block::y#0 draw_block::tileno#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::x#0 draw_block::y#0 draw_block::tileno#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ draw_block::x#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ draw_block::y#0 ] -Statement [20] (word) draw_block::x1#0 ← (byte) draw_block::x#0 << (byte) 1 [ draw_block::y#0 draw_block::tileno#1 draw_block::x1#0 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::y#0 draw_block::tileno#1 draw_block::x1#0 ] ) always clobbers reg byte a +Statement [20] (word) draw_block::x1#0 ← (byte) draw_block::x#0 << (byte) 1 [ draw_block::y#0 draw_block::tileno#1 draw_block::x1#0 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::y#0 draw_block::tileno#1 draw_block::x1#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ draw_block::tileno#1 ] -Statement [21] (byte) draw_block::y#1 ← (byte) draw_block::y#0 << (byte) 1 [ draw_block::tileno#1 draw_block::x1#0 draw_block::y#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::tileno#1 draw_block::x1#0 draw_block::y#1 ] ) always clobbers reg byte a -Statement [24] (word) mul8u::return#2 ← (word) mul8u::res#2 [ draw_block::tileno#1 draw_block::x1#0 mul8u::return#2 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::tileno#1 draw_block::x1#0 mul8u::return#2 ] ) always clobbers reg byte a -Statement [25] (word) draw_block::z#0 ← (word) mul8u::return#2 [ draw_block::tileno#1 draw_block::x1#0 draw_block::z#0 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::tileno#1 draw_block::x1#0 draw_block::z#0 ] ) always clobbers reg byte a -Statement [26] (word) draw_block::z#1 ← (word) draw_block::z#0 + (word) draw_block::x1#0 [ draw_block::tileno#1 draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::tileno#1 draw_block::z#1 ] ) always clobbers reg byte a -Statement [28] (byte*~) draw_block::$11 ← (const byte*) screen#0 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::drawtile#0 draw_block::$11 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::drawtile#0 draw_block::$11 ] ) always clobbers reg byte a +Statement [21] (byte) draw_block::y#1 ← (byte) draw_block::y#0 << (byte) 1 [ draw_block::tileno#1 draw_block::x1#0 draw_block::y#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::tileno#1 draw_block::x1#0 draw_block::y#1 ] ) always clobbers reg byte a +Statement [24] (word) mul8u::return#2 ← (word) mul8u::res#2 [ draw_block::tileno#1 draw_block::x1#0 mul8u::return#2 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::tileno#1 draw_block::x1#0 mul8u::return#2 ] ) always clobbers reg byte a +Statement [25] (word) draw_block::z#0 ← (word) mul8u::return#2 [ draw_block::tileno#1 draw_block::x1#0 draw_block::z#0 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::tileno#1 draw_block::x1#0 draw_block::z#0 ] ) always clobbers reg byte a +Statement [26] (word) draw_block::z#1 ← (word) draw_block::z#0 + (word) draw_block::x1#0 [ draw_block::tileno#1 draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::tileno#1 draw_block::z#1 ] ) always clobbers reg byte a +Statement [28] (byte*~) draw_block::$11 ← (const byte*) screen#0 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::drawtile#0 draw_block::$11 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::drawtile#0 draw_block::$11 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ draw_block::drawtile#0 ] -Statement [29] *((byte*~) draw_block::$11) ← (byte) draw_block::drawtile#0 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::x#2 main::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ main::y#2 main::y#1 ] -Statement [30] (byte*~) draw_block::$12 ← (const byte*) colors#0 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$12 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::$12 ] ) always clobbers reg byte a -Statement [31] *((byte*~) draw_block::$12) ← (const byte) YELLOW#0 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [32] (byte*~) draw_block::$13 ← (const byte*) screen#0+(byte) 1 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$13 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::$13 ] ) always clobbers reg byte a -Statement [33] *((byte*~) draw_block::$13) ← (byte) 1 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [34] (byte*~) draw_block::$14 ← (const byte*) colors#0+(byte) 1 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$14 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::$14 ] ) always clobbers reg byte a -Statement [35] *((byte*~) draw_block::$14) ← (const byte) YELLOW#0 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [36] (byte*~) draw_block::$15 ← (const byte*) screen#0+(byte) $28 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$15 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::$15 ] ) always clobbers reg byte a -Statement [37] *((byte*~) draw_block::$15) ← (byte) 2 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [38] (byte*~) draw_block::$16 ← (const byte*) colors#0+(byte) $28 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$16 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::$16 ] ) always clobbers reg byte a -Statement [39] *((byte*~) draw_block::$16) ← (const byte) YELLOW#0 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [40] (byte*~) draw_block::$17 ← (const byte*) screen#0+(byte) $29 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$17 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::$17 ] ) always clobbers reg byte a -Statement [41] *((byte*~) draw_block::$17) ← (byte) 3 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [42] (byte*~) draw_block::$18 ← (const byte*) colors#0+(byte) $29 + (word) draw_block::z#1 [ draw_block::$18 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::$18 ] ) always clobbers reg byte a -Statement [43] *((byte*~) draw_block::$18) ← (const byte) YELLOW#0 [ ] ( main:2::draw_block:17 [ main::x#2 main::y#2 ] ) always clobbers reg byte a reg byte y -Statement [51] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::draw_block:17::mul8u:23 [ main::x#2 main::y#2 draw_block::tileno#1 draw_block::x1#0 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [29] *((byte*~) draw_block::$11) ← (byte) draw_block::drawtile#0 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::x#11 main::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ main::y#5 main::y#1 ] +Statement [30] (byte*~) draw_block::$12 ← (const byte*) colors#0 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$12 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::$12 ] ) always clobbers reg byte a +Statement [31] *((byte*~) draw_block::$12) ← (const byte) YELLOW#0 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [32] (byte*~) draw_block::$13 ← (const byte*) screen#0+(byte) 1 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$13 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::$13 ] ) always clobbers reg byte a +Statement [33] *((byte*~) draw_block::$13) ← (byte) 1 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [34] (byte*~) draw_block::$14 ← (const byte*) colors#0+(byte) 1 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$14 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::$14 ] ) always clobbers reg byte a +Statement [35] *((byte*~) draw_block::$14) ← (const byte) YELLOW#0 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [36] (byte*~) draw_block::$15 ← (const byte*) screen#0+(byte) $28 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$15 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::$15 ] ) always clobbers reg byte a +Statement [37] *((byte*~) draw_block::$15) ← (byte) 2 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [38] (byte*~) draw_block::$16 ← (const byte*) colors#0+(byte) $28 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$16 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::$16 ] ) always clobbers reg byte a +Statement [39] *((byte*~) draw_block::$16) ← (const byte) YELLOW#0 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [40] (byte*~) draw_block::$17 ← (const byte*) screen#0+(byte) $29 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$17 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::$17 ] ) always clobbers reg byte a +Statement [41] *((byte*~) draw_block::$17) ← (byte) 3 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [42] (byte*~) draw_block::$18 ← (const byte*) colors#0+(byte) $29 + (word) draw_block::z#1 [ draw_block::$18 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::$18 ] ) always clobbers reg byte a +Statement [43] *((byte*~) draw_block::$18) ← (const byte) YELLOW#0 [ ] ( main:2::draw_block:13 [ main::x#11 main::y#5 ] ) always clobbers reg byte a reg byte y +Statement [51] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::draw_block:13::mul8u:23 [ main::x#11 main::y#5 draw_block::tileno#1 draw_block::x1#0 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] Statement [62] *((const byte*) D018#0) ← (const byte) init::toD0181_return#0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a Statement asm { lda#$5b sta$d011 } always clobbers reg byte a @@ -1978,31 +2007,31 @@ Statement [80] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 [ ] ( main:2::in Statement [81] *((const byte*) SPRITES_XMSB#0) ← (byte) 0 [ ] ( main:2::init:5::init_sprites:56 [ ] ) always clobbers reg byte a Statement [82] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0 [ ] ( main:2::init:5::init_sprites:56 [ ] ) always clobbers reg byte a Statement [83] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:2::init:5::init_sprites:56 [ ] ) always clobbers reg byte a -Statement [12] (byte) main::z#0 ← (byte) main::x#2 + (byte) main::y#2 [ main::x#2 main::y#2 main::z#0 ] ( main:2 [ main::x#2 main::y#2 main::z#0 ] ) always clobbers reg byte a -Statement [19] (byte) draw_block::tileno#1 ← (byte) draw_block::tileno#0 << (byte) 2 [ draw_block::x#0 draw_block::y#0 draw_block::tileno#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::x#0 draw_block::y#0 draw_block::tileno#1 ] ) always clobbers reg byte a -Statement [20] (word) draw_block::x1#0 ← (byte) draw_block::x#0 << (byte) 1 [ draw_block::y#0 draw_block::tileno#1 draw_block::x1#0 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::y#0 draw_block::tileno#1 draw_block::x1#0 ] ) always clobbers reg byte a -Statement [21] (byte) draw_block::y#1 ← (byte) draw_block::y#0 << (byte) 1 [ draw_block::tileno#1 draw_block::x1#0 draw_block::y#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::tileno#1 draw_block::x1#0 draw_block::y#1 ] ) always clobbers reg byte a -Statement [24] (word) mul8u::return#2 ← (word) mul8u::res#2 [ draw_block::tileno#1 draw_block::x1#0 mul8u::return#2 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::tileno#1 draw_block::x1#0 mul8u::return#2 ] ) always clobbers reg byte a -Statement [25] (word) draw_block::z#0 ← (word) mul8u::return#2 [ draw_block::tileno#1 draw_block::x1#0 draw_block::z#0 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::tileno#1 draw_block::x1#0 draw_block::z#0 ] ) always clobbers reg byte a -Statement [26] (word) draw_block::z#1 ← (word) draw_block::z#0 + (word) draw_block::x1#0 [ draw_block::tileno#1 draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::tileno#1 draw_block::z#1 ] ) always clobbers reg byte a -Statement [28] (byte*~) draw_block::$11 ← (const byte*) screen#0 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::drawtile#0 draw_block::$11 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::drawtile#0 draw_block::$11 ] ) always clobbers reg byte a -Statement [29] *((byte*~) draw_block::$11) ← (byte) draw_block::drawtile#0 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [30] (byte*~) draw_block::$12 ← (const byte*) colors#0 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$12 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::$12 ] ) always clobbers reg byte a -Statement [31] *((byte*~) draw_block::$12) ← (const byte) YELLOW#0 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [32] (byte*~) draw_block::$13 ← (const byte*) screen#0+(byte) 1 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$13 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::$13 ] ) always clobbers reg byte a -Statement [33] *((byte*~) draw_block::$13) ← (byte) 1 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [34] (byte*~) draw_block::$14 ← (const byte*) colors#0+(byte) 1 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$14 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::$14 ] ) always clobbers reg byte a -Statement [35] *((byte*~) draw_block::$14) ← (const byte) YELLOW#0 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [36] (byte*~) draw_block::$15 ← (const byte*) screen#0+(byte) $28 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$15 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::$15 ] ) always clobbers reg byte a -Statement [37] *((byte*~) draw_block::$15) ← (byte) 2 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [38] (byte*~) draw_block::$16 ← (const byte*) colors#0+(byte) $28 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$16 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::$16 ] ) always clobbers reg byte a -Statement [39] *((byte*~) draw_block::$16) ← (const byte) YELLOW#0 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [40] (byte*~) draw_block::$17 ← (const byte*) screen#0+(byte) $29 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$17 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 draw_block::$17 ] ) always clobbers reg byte a -Statement [41] *((byte*~) draw_block::$17) ← (byte) 3 [ draw_block::z#1 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::z#1 ] ) always clobbers reg byte a reg byte y -Statement [42] (byte*~) draw_block::$18 ← (const byte*) colors#0+(byte) $29 + (word) draw_block::z#1 [ draw_block::$18 ] ( main:2::draw_block:17 [ main::x#2 main::y#2 draw_block::$18 ] ) always clobbers reg byte a -Statement [43] *((byte*~) draw_block::$18) ← (const byte) YELLOW#0 [ ] ( main:2::draw_block:17 [ main::x#2 main::y#2 ] ) always clobbers reg byte a reg byte y -Statement [49] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::draw_block:17::mul8u:23 [ main::x#2 main::y#2 draw_block::tileno#1 draw_block::x1#0 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a -Statement [51] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::draw_block:17::mul8u:23 [ main::x#2 main::y#2 draw_block::tileno#1 draw_block::x1#0 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [8] (byte) main::z#0 ← (byte) main::x#11 + (byte) main::y#5 [ main::x#11 main::y#5 main::z#0 ] ( main:2 [ main::x#11 main::y#5 main::z#0 ] ) always clobbers reg byte a +Statement [19] (byte) draw_block::tileno#1 ← (byte) draw_block::tileno#0 << (byte) 2 [ draw_block::x#0 draw_block::y#0 draw_block::tileno#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::x#0 draw_block::y#0 draw_block::tileno#1 ] ) always clobbers reg byte a +Statement [20] (word) draw_block::x1#0 ← (byte) draw_block::x#0 << (byte) 1 [ draw_block::y#0 draw_block::tileno#1 draw_block::x1#0 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::y#0 draw_block::tileno#1 draw_block::x1#0 ] ) always clobbers reg byte a +Statement [21] (byte) draw_block::y#1 ← (byte) draw_block::y#0 << (byte) 1 [ draw_block::tileno#1 draw_block::x1#0 draw_block::y#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::tileno#1 draw_block::x1#0 draw_block::y#1 ] ) always clobbers reg byte a +Statement [24] (word) mul8u::return#2 ← (word) mul8u::res#2 [ draw_block::tileno#1 draw_block::x1#0 mul8u::return#2 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::tileno#1 draw_block::x1#0 mul8u::return#2 ] ) always clobbers reg byte a +Statement [25] (word) draw_block::z#0 ← (word) mul8u::return#2 [ draw_block::tileno#1 draw_block::x1#0 draw_block::z#0 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::tileno#1 draw_block::x1#0 draw_block::z#0 ] ) always clobbers reg byte a +Statement [26] (word) draw_block::z#1 ← (word) draw_block::z#0 + (word) draw_block::x1#0 [ draw_block::tileno#1 draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::tileno#1 draw_block::z#1 ] ) always clobbers reg byte a +Statement [28] (byte*~) draw_block::$11 ← (const byte*) screen#0 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::drawtile#0 draw_block::$11 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::drawtile#0 draw_block::$11 ] ) always clobbers reg byte a +Statement [29] *((byte*~) draw_block::$11) ← (byte) draw_block::drawtile#0 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [30] (byte*~) draw_block::$12 ← (const byte*) colors#0 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$12 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::$12 ] ) always clobbers reg byte a +Statement [31] *((byte*~) draw_block::$12) ← (const byte) YELLOW#0 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [32] (byte*~) draw_block::$13 ← (const byte*) screen#0+(byte) 1 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$13 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::$13 ] ) always clobbers reg byte a +Statement [33] *((byte*~) draw_block::$13) ← (byte) 1 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [34] (byte*~) draw_block::$14 ← (const byte*) colors#0+(byte) 1 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$14 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::$14 ] ) always clobbers reg byte a +Statement [35] *((byte*~) draw_block::$14) ← (const byte) YELLOW#0 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [36] (byte*~) draw_block::$15 ← (const byte*) screen#0+(byte) $28 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$15 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::$15 ] ) always clobbers reg byte a +Statement [37] *((byte*~) draw_block::$15) ← (byte) 2 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [38] (byte*~) draw_block::$16 ← (const byte*) colors#0+(byte) $28 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$16 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::$16 ] ) always clobbers reg byte a +Statement [39] *((byte*~) draw_block::$16) ← (const byte) YELLOW#0 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [40] (byte*~) draw_block::$17 ← (const byte*) screen#0+(byte) $29 + (word) draw_block::z#1 [ draw_block::z#1 draw_block::$17 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 draw_block::$17 ] ) always clobbers reg byte a +Statement [41] *((byte*~) draw_block::$17) ← (byte) 3 [ draw_block::z#1 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::z#1 ] ) always clobbers reg byte a reg byte y +Statement [42] (byte*~) draw_block::$18 ← (const byte*) colors#0+(byte) $29 + (word) draw_block::z#1 [ draw_block::$18 ] ( main:2::draw_block:13 [ main::x#11 main::y#5 draw_block::$18 ] ) always clobbers reg byte a +Statement [43] *((byte*~) draw_block::$18) ← (const byte) YELLOW#0 [ ] ( main:2::draw_block:13 [ main::x#11 main::y#5 ] ) always clobbers reg byte a reg byte y +Statement [49] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::draw_block:13::mul8u:23 [ main::x#11 main::y#5 draw_block::tileno#1 draw_block::x1#0 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [51] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::draw_block:13::mul8u:23 [ main::x#11 main::y#5 draw_block::tileno#1 draw_block::x1#0 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Statement [62] *((const byte*) D018#0) ← (const byte) init::toD0181_return#0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a Statement asm { lda#$5b sta$d011 } always clobbers reg byte a Statement [64] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a @@ -2020,8 +2049,8 @@ Statement [80] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 [ ] ( main:2::in Statement [81] *((const byte*) SPRITES_XMSB#0) ← (byte) 0 [ ] ( main:2::init:5::init_sprites:56 [ ] ) always clobbers reg byte a Statement [82] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0 [ ] ( main:2::init:5::init_sprites:56 [ ] ) always clobbers reg byte a Statement [83] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:2::init:5::init_sprites:56 [ ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::x#2 main::x#1 ] : zp ZP_BYTE:2 , reg byte x , -Potential registers zp ZP_BYTE:3 [ main::y#2 main::y#1 ] : zp ZP_BYTE:3 , reg byte x , +Potential registers zp ZP_BYTE:2 [ main::x#11 main::x#1 ] : zp ZP_BYTE:2 , reg byte x , +Potential registers zp ZP_BYTE:3 [ main::y#5 main::y#1 ] : zp ZP_BYTE:3 , reg byte x , Potential registers zp ZP_BYTE:4 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , Potential registers zp ZP_WORD:5 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp ZP_WORD:5 , Potential registers zp ZP_WORD:7 [ mul8u::mb#2 mul8u::mb#1 ] : zp ZP_WORD:7 , @@ -2053,29 +2082,29 @@ Potential registers zp ZP_WORD:47 [ memset::end#0 ] : zp ZP_WORD:47 , REGISTER UPLIFT SCOPES Uplift Scope [mul8u] 3,503.83: zp ZP_WORD:5 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 2,431: zp ZP_WORD:7 [ mul8u::mb#2 mul8u::mb#1 ] 2,002: zp ZP_BYTE:46 [ mul8u::$1 ] 1,670.67: zp ZP_BYTE:4 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 4: zp ZP_WORD:23 [ mul8u::return#2 ] -Uplift Scope [main] 265.12: zp ZP_BYTE:3 [ main::y#2 main::y#1 ] 202: zp ZP_BYTE:14 [ main::z#0 ] 202: zp ZP_BYTE:15 [ main::tile#0 ] 43.36: zp ZP_BYTE:2 [ main::x#2 main::x#1 ] +Uplift Scope [main] 209.21: zp ZP_BYTE:3 [ main::y#5 main::y#1 ] 202: zp ZP_BYTE:14 [ main::z#0 ] 202: zp ZP_BYTE:15 [ main::tile#0 ] 38.9: zp ZP_BYTE:2 [ main::x#11 main::x#1 ] Uplift Scope [draw_block] 34.33: zp ZP_BYTE:16 [ draw_block::tileno#0 ] 34.33: zp ZP_BYTE:17 [ draw_block::x#0 ] 34.33: zp ZP_BYTE:18 [ draw_block::y#0 ] 4: zp ZP_BYTE:22 [ draw_block::y#1 ] 4: zp ZP_WORD:25 [ draw_block::z#0 ] 4: zp ZP_WORD:30 [ draw_block::$11 ] 4: zp ZP_WORD:32 [ draw_block::$12 ] 4: zp ZP_WORD:34 [ draw_block::$13 ] 4: zp ZP_WORD:36 [ draw_block::$14 ] 4: zp ZP_WORD:38 [ draw_block::$15 ] 4: zp ZP_WORD:40 [ draw_block::$16 ] 4: zp ZP_WORD:42 [ draw_block::$17 ] 4: zp ZP_WORD:44 [ draw_block::$18 ] 2: zp ZP_BYTE:29 [ draw_block::drawtile#0 ] 1.12: zp ZP_WORD:27 [ draw_block::z#1 ] 0.67: zp ZP_WORD:20 [ draw_block::x1#0 ] 0.5: zp ZP_BYTE:19 [ draw_block::tileno#1 ] Uplift Scope [memset] 41.33: zp ZP_WORD:12 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp ZP_WORD:47 [ memset::end#0 ] 1.57: zp ZP_BYTE:11 [ memset::c#4 ] 0: zp ZP_WORD:9 [ memset::str#3 ] Uplift Scope [init] Uplift Scope [init_sprites] Uplift Scope [] -Uplifting [mul8u] best 92896 combination zp ZP_WORD:5 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:7 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:23 [ mul8u::return#2 ] -Uplifting [main] best 91896 combination zp ZP_BYTE:3 [ main::y#2 main::y#1 ] reg byte a [ main::z#0 ] reg byte a [ main::tile#0 ] zp ZP_BYTE:2 [ main::x#2 main::x#1 ] -Uplifting [draw_block] best 90987 combination reg byte a [ draw_block::tileno#0 ] reg byte y [ draw_block::x#0 ] reg byte x [ draw_block::y#0 ] reg byte a [ draw_block::y#1 ] zp ZP_WORD:25 [ draw_block::z#0 ] zp ZP_WORD:30 [ draw_block::$11 ] zp ZP_WORD:32 [ draw_block::$12 ] zp ZP_WORD:34 [ draw_block::$13 ] zp ZP_WORD:36 [ draw_block::$14 ] zp ZP_WORD:38 [ draw_block::$15 ] zp ZP_WORD:40 [ draw_block::$16 ] zp ZP_WORD:42 [ draw_block::$17 ] zp ZP_WORD:44 [ draw_block::$18 ] zp ZP_BYTE:29 [ draw_block::drawtile#0 ] zp ZP_WORD:27 [ draw_block::z#1 ] zp ZP_WORD:20 [ draw_block::x1#0 ] zp ZP_BYTE:19 [ draw_block::tileno#1 ] +Uplifting [mul8u] best 93226 combination zp ZP_WORD:5 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:7 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:23 [ mul8u::return#2 ] +Uplifting [main] best 92226 combination zp ZP_BYTE:3 [ main::y#5 main::y#1 ] reg byte a [ main::z#0 ] reg byte a [ main::tile#0 ] zp ZP_BYTE:2 [ main::x#11 main::x#1 ] +Uplifting [draw_block] best 91317 combination reg byte a [ draw_block::tileno#0 ] reg byte y [ draw_block::x#0 ] reg byte x [ draw_block::y#0 ] reg byte a [ draw_block::y#1 ] zp ZP_WORD:25 [ draw_block::z#0 ] zp ZP_WORD:30 [ draw_block::$11 ] zp ZP_WORD:32 [ draw_block::$12 ] zp ZP_WORD:34 [ draw_block::$13 ] zp ZP_WORD:36 [ draw_block::$14 ] zp ZP_WORD:38 [ draw_block::$15 ] zp ZP_WORD:40 [ draw_block::$16 ] zp ZP_WORD:42 [ draw_block::$17 ] zp ZP_WORD:44 [ draw_block::$18 ] zp ZP_BYTE:29 [ draw_block::drawtile#0 ] zp ZP_WORD:27 [ draw_block::z#1 ] zp ZP_WORD:20 [ draw_block::x1#0 ] zp ZP_BYTE:19 [ draw_block::tileno#1 ] Limited combination testing to 100 combinations of 1296 possible. -Uplifting [memset] best 90971 combination zp ZP_WORD:12 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:47 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp ZP_WORD:9 [ memset::str#3 ] -Uplifting [init] best 90971 combination -Uplifting [init_sprites] best 90971 combination -Uplifting [] best 90971 combination -Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::y#2 main::y#1 ] -Uplifting [main] best 90971 combination zp ZP_BYTE:3 [ main::y#2 main::y#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::x#2 main::x#1 ] -Uplifting [main] best 90971 combination zp ZP_BYTE:2 [ main::x#2 main::x#1 ] +Uplifting [memset] best 91301 combination zp ZP_WORD:12 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:47 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp ZP_WORD:9 [ memset::str#3 ] +Uplifting [init] best 91301 combination +Uplifting [init_sprites] best 91301 combination +Uplifting [] best 91301 combination +Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::y#5 main::y#1 ] +Uplifting [main] best 91301 combination zp ZP_BYTE:3 [ main::y#5 main::y#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::x#11 main::x#1 ] +Uplifting [main] best 91301 combination zp ZP_BYTE:2 [ main::x#11 main::x#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:29 [ draw_block::drawtile#0 ] -Uplifting [draw_block] best 90967 combination reg byte x [ draw_block::drawtile#0 ] +Uplifting [draw_block] best 91297 combination reg byte x [ draw_block::drawtile#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:19 [ draw_block::tileno#1 ] -Uplifting [draw_block] best 90967 combination zp ZP_BYTE:19 [ draw_block::tileno#1 ] +Uplifting [draw_block] best 91297 combination zp ZP_BYTE:19 [ draw_block::tileno#1 ] Coalescing zero page register [ zp ZP_WORD:5 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp ZP_WORD:23 [ mul8u::return#2 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:9 [ memset::str#3 ] ] with [ zp ZP_WORD:12 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:20 [ draw_block::x1#0 ] ] with [ zp ZP_WORD:27 [ draw_block::z#1 ] ] - score: 1 @@ -2151,71 +2180,75 @@ main: { // [55] phi from main to init [phi:main->init] init_from_main: jsr init - // [6] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [6] phi (byte) main::x#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [6] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [6] phi (byte) main::x#11 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta x - jmp b1 - // main::@1 - b1: - // [7] if((byte) main::x#2<(byte) $10) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$10 - bcc b2_from_b1 - // [8] phi from main::@1 main::@5 to main::@5 [phi:main::@1/main::@5->main::@5] - b5_from_b1: - b5_from_b5: - jmp b5 - // main::@5 - b5: - jmp b5_from_b5 - // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + jmp b2 + // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: - // [9] phi (byte) main::y#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 - lda #0 - sta y + // [6] phi (byte) main::x#11 = (byte) main::x#1 [phi:main::@1->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [10] if((byte) main::y#2<(byte) 9) goto main::@3 -- vbuz1_lt_vbuc1_then_la1 - lda y - cmp #9 - bcc b3 + // [7] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + b4_from_b2: + // [7] phi (byte) main::y#5 = (byte) 0 [phi:main::@2->main::@4#0] -- vbuz1=vbuc1 + lda #0 + sta y + jmp b4 + // [7] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + b4_from_b3: + // [7] phi (byte) main::y#5 = (byte) main::y#1 [phi:main::@3->main::@4#0] -- register_copy jmp b4 // main::@4 b4: - // [11] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1 - inc x - // [6] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [6] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@4->main::@1#0] -- register_copy - jmp b1 - // main::@3 - b3: - // [12] (byte) main::z#0 ← (byte) main::x#2 + (byte) main::y#2 -- vbuaa=vbuz1_plus_vbuz2 + // [8] (byte) main::z#0 ← (byte) main::x#11 + (byte) main::y#5 -- vbuaa=vbuz1_plus_vbuz2 lda x clc adc y - // [13] (byte) main::tile#0 ← *((const byte*) level_address#0 + (byte) main::z#0) -- vbuaa=pbuc1_derefidx_vbuaa + // [9] (byte) main::tile#0 ← *((const byte*) level_address#0 + (byte) main::z#0) -- vbuaa=pbuc1_derefidx_vbuaa tay lda level_address,y - // [14] (byte) draw_block::tileno#0 ← (byte) main::tile#0 - // [15] (byte) draw_block::x#0 ← (byte) main::x#2 -- vbuyy=vbuz1 + // [10] (byte) draw_block::tileno#0 ← (byte) main::tile#0 + // [11] (byte) draw_block::x#0 ← (byte) main::x#11 -- vbuyy=vbuz1 ldy x - // [16] (byte) draw_block::y#0 ← (byte) main::y#2 -- vbuxx=vbuz1 + // [12] (byte) draw_block::y#0 ← (byte) main::y#5 -- vbuxx=vbuz1 ldx y - // [17] call draw_block + // [13] call draw_block jsr draw_block + jmp b7 + // main::@7 + b7: + // [14] (byte) main::y#1 ← ++ (byte) main::y#5 -- vbuz1=_inc_vbuz1 + inc y + jmp b3 + // main::@3 + b3: + // [15] if((byte) main::y#1<(byte) 9) goto main::@4 -- vbuz1_lt_vbuc1_then_la1 + lda y + cmp #9 + bcc b4_from_b3 + jmp b5 + // main::@5 + b5: + // [16] (byte) main::x#1 ← ++ (byte) main::x#11 -- vbuz1=_inc_vbuz1 + inc x + jmp b1 + // main::@1 + b1: + // [17] if((byte) main::x#1<(byte) $10) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$10 + bcc b2_from_b1 + // [18] phi from main::@1 main::@6 to main::@6 [phi:main::@1/main::@6->main::@6] + b6_from_b1: + b6_from_b6: jmp b6 // main::@6 b6: - // [18] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1 - inc y - // [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2] - b2_from_b6: - // [9] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@6->main::@2#0] -- register_copy - jmp b2 + jmp b6_from_b6 } // draw_block // draw_block(byte register(A) tileno, byte register(Y) x, byte register(X) y) @@ -2597,10 +2630,12 @@ init_sprites: { ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 -Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b4 +Removing instruction jmp b7 +Removing instruction jmp b3 +Removing instruction jmp b5 +Removing instruction jmp b1 Removing instruction jmp b6 Removing instruction jmp b1 Removing instruction jmp breturn @@ -2630,15 +2665,20 @@ Removing instruction lda #BLACK Removing instruction lda #0 Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label b5_from_b5 with b5 +Replacing label b4_from_b3 with b4 +Replacing label b2_from_b1 with b2 +Replacing label b6_from_b6 with b6 Replacing label b3_from_b2 with b3 Replacing label b2_from_b3 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b5_from_b1: -Removing instruction b5_from_b5: +Removing instruction b2_from_b1: +Removing instruction b4_from_b2: +Removing instruction b4_from_b3: +Removing instruction b6_from_b1: +Removing instruction b6_from_b6: Removing instruction b3_from_b2: Removing instruction b3_from_b4: Removing instruction b2_from_init: @@ -2652,11 +2692,11 @@ Removing instruction b2_from_b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction init_from_main: -Removing instruction b1_from_main: -Removing instruction b4: -Removing instruction b1_from_b4: -Removing instruction b6: -Removing instruction b2_from_b6: +Removing instruction b2_from_main: +Removing instruction b7: +Removing instruction b3: +Removing instruction b5: +Removing instruction b1: Removing instruction mul8u_from_draw_block: Removing instruction b1: Removing instruction breturn: @@ -2675,8 +2715,9 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Relabelling long label b2_from_b1 to b4 -Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b2 +Removing instruction jmp b4 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -2781,14 +2822,15 @@ FINAL SYMBOL TABLE (label) main::@4 (label) main::@5 (label) main::@6 +(label) main::@7 (byte) main::tile (byte) main::tile#0 reg byte a 202.0 (byte) main::x -(byte) main::x#1 x zp ZP_BYTE:2 22.0 -(byte) main::x#2 x zp ZP_BYTE:2 21.363636363636363 +(byte) main::x#1 x zp ZP_BYTE:2 16.5 +(byte) main::x#11 x zp ZP_BYTE:2 22.4 (byte) main::y -(byte) main::y#1 y zp ZP_BYTE:3 202.0 -(byte) main::y#2 y zp ZP_BYTE:3 63.125 +(byte) main::y#1 y zp ZP_BYTE:3 151.5 +(byte) main::y#5 y zp ZP_BYTE:3 57.714285714285715 (byte) main::z (byte) main::z#0 reg byte a 202.0 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) @@ -2835,8 +2877,8 @@ FINAL SYMBOL TABLE (byte*) tileset (const byte*) tileset#0 tileset = (byte*) 10240 -zp ZP_BYTE:2 [ main::x#2 main::x#1 ] -zp ZP_BYTE:3 [ main::y#2 main::y#1 ] +zp ZP_BYTE:2 [ main::x#11 main::x#1 ] +zp ZP_BYTE:3 [ main::y#5 main::y#1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:4 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 draw_block::z#0 ] reg byte x [ memset::c#4 ] @@ -2860,7 +2902,7 @@ zp ZP_WORD:21 [ memset::end#0 draw_block::x1#0 draw_block::z#1 draw_block::$18 ] FINAL ASSEMBLER -Score: 75798 +Score: 75468 // File Comments // Illustrates a problem with a missing fragment - pbuc1_derefidx_vwuz1=vbuz2 @@ -2908,66 +2950,61 @@ main: { // [5] call init // [55] phi from main to init [phi:main->init] jsr init - // [6] phi from main to main::@1 [phi:main->main::@1] - // [6] phi (byte) main::x#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [6] phi from main to main::@2 [phi:main->main::@2] + // [6] phi (byte) main::x#11 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta x - // main::@1 - b1: - // for (byte x = 0; x < 16; x++ ) - // [7] if((byte) main::x#2<(byte) $10) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$10 - bcc b4 - // [8] phi from main::@1 main::@5 to main::@5 [phi:main::@1/main::@5->main::@5] - // main::@5 - b5: - jmp b5 - // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - b4: - // [9] phi (byte) main::y#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 - lda #0 - sta y + // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [6] phi (byte) main::x#11 = (byte) main::x#1 [phi:main::@1->main::@2#0] -- register_copy // main::@2 b2: - // for (byte y = 0; y < 9; y++) - // [10] if((byte) main::y#2<(byte) 9) goto main::@3 -- vbuz1_lt_vbuc1_then_la1 - lda y - cmp #9 - bcc b3 + // [7] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + // [7] phi (byte) main::y#5 = (byte) 0 [phi:main::@2->main::@4#0] -- vbuz1=vbuc1 + lda #0 + sta y + // [7] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [7] phi (byte) main::y#5 = (byte) main::y#1 [phi:main::@3->main::@4#0] -- register_copy // main::@4 - // for (byte x = 0; x < 16; x++ ) - // [11] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1 - inc x - // [6] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - // [6] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@4->main::@1#0] -- register_copy - jmp b1 - // main::@3 - b3: + b4: // z = x+y - // [12] (byte) main::z#0 ← (byte) main::x#2 + (byte) main::y#2 -- vbuaa=vbuz1_plus_vbuz2 + // [8] (byte) main::z#0 ← (byte) main::x#11 + (byte) main::y#5 -- vbuaa=vbuz1_plus_vbuz2 lda x clc adc y // tile = level_address[z] - // [13] (byte) main::tile#0 ← *((const byte*) level_address#0 + (byte) main::z#0) -- vbuaa=pbuc1_derefidx_vbuaa + // [9] (byte) main::tile#0 ← *((const byte*) level_address#0 + (byte) main::z#0) -- vbuaa=pbuc1_derefidx_vbuaa tay lda level_address,y // draw_block(tile,x,y,YELLOW) - // [14] (byte) draw_block::tileno#0 ← (byte) main::tile#0 - // [15] (byte) draw_block::x#0 ← (byte) main::x#2 -- vbuyy=vbuz1 + // [10] (byte) draw_block::tileno#0 ← (byte) main::tile#0 + // [11] (byte) draw_block::x#0 ← (byte) main::x#11 -- vbuyy=vbuz1 ldy x - // [16] (byte) draw_block::y#0 ← (byte) main::y#2 -- vbuxx=vbuz1 + // [12] (byte) draw_block::y#0 ← (byte) main::y#5 -- vbuxx=vbuz1 ldx y - // [17] call draw_block + // [13] call draw_block jsr draw_block - // main::@6 + // main::@7 // for (byte y = 0; y < 9; y++) - // [18] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1 + // [14] (byte) main::y#1 ← ++ (byte) main::y#5 -- vbuz1=_inc_vbuz1 inc y - // [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2] - // [9] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@6->main::@2#0] -- register_copy - jmp b2 + // main::@3 + // [15] if((byte) main::y#1<(byte) 9) goto main::@4 -- vbuz1_lt_vbuc1_then_la1 + lda y + cmp #9 + bcc b4 + // main::@5 + // for (byte x = 0; x < 16; x++ ) + // [16] (byte) main::x#1 ← ++ (byte) main::x#11 -- vbuz1=_inc_vbuz1 + inc x + // main::@1 + // [17] if((byte) main::x#1<(byte) $10) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$10 + bcc b2 + // [18] phi from main::@1 main::@6 to main::@6 [phi:main::@1/main::@6->main::@6] + // main::@6 + b6: + jmp b6 } // draw_block // draw_block(byte register(A) tileno, byte register(Y) x, byte register(X) y) diff --git a/src/test/ref/scan-desire-problem.sym b/src/test/ref/scan-desire-problem.sym index c8310b23e..a20b3303e 100644 --- a/src/test/ref/scan-desire-problem.sym +++ b/src/test/ref/scan-desire-problem.sym @@ -98,14 +98,15 @@ (label) main::@4 (label) main::@5 (label) main::@6 +(label) main::@7 (byte) main::tile (byte) main::tile#0 reg byte a 202.0 (byte) main::x -(byte) main::x#1 x zp ZP_BYTE:2 22.0 -(byte) main::x#2 x zp ZP_BYTE:2 21.363636363636363 +(byte) main::x#1 x zp ZP_BYTE:2 16.5 +(byte) main::x#11 x zp ZP_BYTE:2 22.4 (byte) main::y -(byte) main::y#1 y zp ZP_BYTE:3 202.0 -(byte) main::y#2 y zp ZP_BYTE:3 63.125 +(byte) main::y#1 y zp ZP_BYTE:3 151.5 +(byte) main::y#5 y zp ZP_BYTE:3 57.714285714285715 (byte) main::z (byte) main::z#0 reg byte a 202.0 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) @@ -152,8 +153,8 @@ (byte*) tileset (const byte*) tileset#0 tileset = (byte*) 10240 -zp ZP_BYTE:2 [ main::x#2 main::x#1 ] -zp ZP_BYTE:3 [ main::y#2 main::y#1 ] +zp ZP_BYTE:2 [ main::x#11 main::x#1 ] +zp ZP_BYTE:3 [ main::y#5 main::y#1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:4 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 draw_block::z#0 ] reg byte x [ memset::c#4 ] diff --git a/src/test/ref/screen-center-angle.asm b/src/test/ref/screen-center-angle.asm index 76ea6f76d..ab2420529 100644 --- a/src/test/ref/screen-center-angle.asm +++ b/src/test/ref/screen-center-angle.asm @@ -185,29 +185,6 @@ init_angle_screen: { sta xb lda #0 sta x - b2: - lda x - cmp #$13+1 - bcc b3 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - inc y - lda #$d - cmp y - bne b1 - rts b3: lda x asl @@ -248,7 +225,28 @@ init_angle_screen: { sta (screen_bottomline),y inc x dec xb - jmp b2 + lda x + cmp #$13+1 + bcc b3 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + inc y + lda #$d + cmp y + bne b1 + rts } // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 diff --git a/src/test/ref/screen-center-angle.cfg b/src/test/ref/screen-center-angle.cfg index c0c69df1b..a0de573dd 100644 --- a/src/test/ref/screen-center-angle.cfg +++ b/src/test/ref/screen-center-angle.cfg @@ -106,46 +106,46 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an [50] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(const byte*) SCREEN#0+(word)(number) $28*(number) $c init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) [50] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(const byte*) SCREEN#0+(word)(number) $28*(number) $c init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) [50] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - to:init_angle_screen::@2 -init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [51] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [51] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [52] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 - to:init_angle_screen::@4 -init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [53] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [54] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [55] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [56] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 - to:init_angle_screen::@return -init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [57] return - to:@return -init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [58] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [59] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [60] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [61] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [62] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [63] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [64] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [65] call atan2_16 - [66] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + to:init_angle_screen::@3 +init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@2 + [51] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 ) + [51] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 ) + [52] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 + [53] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [54] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [55] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [56] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [57] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [58] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [59] call atan2_16 + [60] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [67] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [68] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [69] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [71] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [72] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [73] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [74] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [75] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [76] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [77] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [78] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [61] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [62] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [63] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [64] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 + [65] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [66] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 + [67] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [68] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 + [69] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 + [71] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 + [72] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 to:init_angle_screen::@2 +init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@5 + [73] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 + to:init_angle_screen::@4 +init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 + [74] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [75] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [76] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [77] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + to:init_angle_screen::@return +init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 + [78] return + to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@3 [79] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 diff --git a/src/test/ref/screen-center-angle.log b/src/test/ref/screen-center-angle.log index a15710a3c..25ca230e2 100644 --- a/src/test/ref/screen-center-angle.log +++ b/src/test/ref/screen-center-angle.log @@ -1751,6 +1751,7 @@ Eliminating unused variable (byte) init_font_hex::idx#4 and assignment [15] (byt Eliminating unused constant (const byte) CIA_TIMER_CONTROL_STOP#0 Eliminating unused constant (const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 5 in if((byte) init_font_hex::i#1!=(number) 5) goto init_font_hex::@3 Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c1#1!=(number) $10) goto init_font_hex::@2 Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c#1!=(number) $10) goto init_font_hex::@1 @@ -1775,7 +1776,14 @@ Finalized unsigned number type (byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) clock_start::$1 = (byte~) clock_start::$0 (byte~) clock_start::$2 Alias (byte~) clock_start::$6 = (byte~) clock_start::$4 (byte~) clock_start::$7 +Alias (byte) init_angle_screen::x#1 = (byte) init_angle_screen::x#2 +Alias (byte) init_angle_screen::xb#1 = (byte) init_angle_screen::xb#2 +Alias (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#6 +Alias (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#6 Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) init_angle_screen::x#7 (const byte) init_angle_screen::x#0 +Identical Phi Values (byte) init_angle_screen::xb#7 (const byte) init_angle_screen::xb#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 Constant right-side identified [29] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 Constant right-side identified [89] (byte*) print_word_at::at#1 ← (const byte*) print_dword_at::at#0 + (byte) 4 @@ -1794,6 +1802,8 @@ Constant (const word) main::toD0182_$4#0 = (word)main::BASE_CHARSET#0 Constant (const byte*) init_angle_screen::screen_topline#0 = init_angle_screen::screen#0+(word)$28*$c Constant (const byte*) init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0+(word)$28*$c Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [173] if((const byte) init_angle_screen::x#0<(byte) $13+(byte) 1) goto init_angle_screen::@3 +Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [54] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ Resolved ranged comparison value [55] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 in [68] (byte~) clock_start::$3 ← (const byte) clock_start::$1 | (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 @@ -1851,7 +1861,7 @@ Successful SSA optimization Pass2NopCastInlining Rewriting division to use shift [31] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2 Rewriting multiplication to use shift [45] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD Rewriting multiplication to use shift [49] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [109] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [109] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 * (byte) 2 Rewriting multiplication to use shift [113] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte) init_font_hex::c#0 @@ -1929,6 +1939,7 @@ Added new block during phi lifting atan2_16::@37(between atan2_16::@20 and atan2 Added new block during phi lifting atan2_16::@38(between atan2_16::@17 and atan2_16::@7) Added new block during phi lifting atan2_16::@39(between atan2_16::@7 and atan2_16::@8) Added new block during phi lifting init_angle_screen::@10(between init_angle_screen::@4 and init_angle_screen::@1) +Added new block during phi lifting init_angle_screen::@11(between init_angle_screen::@2 and init_angle_screen::@3) Adding NOP phi() at start of @begin Adding NOP phi() at start of @12 Adding NOP phi() at start of @17 @@ -1951,6 +1962,7 @@ Adding NOP phi() at start of print_dword_at::@2 Adding NOP phi() at start of print_word_at::@2 Adding NOP phi() at start of print_byte_at::@2 Adding NOP phi() at start of init_angle_screen +Adding NOP phi() at start of init_angle_screen::@2_1 Adding NOP phi() at start of init_font_hex CALL GRAPH Calls in [] to main:7 @@ -1958,7 +1970,7 @@ Calls in [main] to init_font_hex:11 clock_start:16 init_angle_screen:18 clock:20 Calls in [print_dword_at] to print_word_at:33 print_word_at:36 Calls in [print_word_at] to print_byte_at:44 print_byte_at:49 Calls in [print_byte_at] to print_char_at:58 print_char_at:64 -Calls in [init_angle_screen] to atan2_16:91 +Calls in [init_angle_screen] to atan2_16:83 Created 36 initial phi equivalence classes Coalesced [32] print_word_at::w#4 ← print_word_at::w#0 @@ -1971,52 +1983,52 @@ Coalesced [56] print_char_at::ch#3 ← print_char_at::ch#0 Coalesced [57] print_char_at::at#3 ← print_char_at::at#0 Coalesced [62] print_char_at::ch#4 ← print_char_at::ch#1 Coalesced [63] print_char_at::at#4 ← print_char_at::at#1 -Coalesced [81] init_angle_screen::y#7 ← init_angle_screen::y#1 -Coalesced [82] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#1 -Coalesced [83] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#1 -Coalesced [105] init_angle_screen::x#5 ← init_angle_screen::x#1 -Coalesced [106] init_angle_screen::xb#5 ← init_angle_screen::xb#1 -Coalesced [109] atan2_16::yi#17 ← atan2_16::$2 -Coalesced [113] atan2_16::xi#14 ← atan2_16::$7 -Coalesced [115] atan2_16::yi#19 ← atan2_16::yi#0 -Coalesced [116] atan2_16::xi#16 ← atan2_16::xi#0 -Coalesced [119] atan2_16::angle#22 ← atan2_16::angle#12 -Coalesced [124] atan2_16::angle#27 ← atan2_16::angle#4 -Coalesced [128] atan2_16::return#5 ← atan2_16::angle#5 -Coalesced [131] atan2_16::return#6 ← atan2_16::angle#11 -Coalesced [132] atan2_16::angle#26 ← atan2_16::angle#1 -Not coalescing [133] atan2_16::shift#5 ← atan2_16::i#2 -Not coalescing [134] atan2_16::xd#10 ← atan2_16::xi#3 -Not coalescing [135] atan2_16::yd#10 ← atan2_16::yi#3 -Coalesced [141] atan2_16::yd#13 ← atan2_16::yd#2 -Coalesced [142] atan2_16::xd#13 ← atan2_16::xd#2 -Coalesced [149] atan2_16::yi#21 ← atan2_16::yi#2 -Coalesced [150] atan2_16::angle#25 ← atan2_16::angle#3 -Coalesced [151] atan2_16::xi#18 ← atan2_16::xi#2 -Coalesced [155] atan2_16::yi#18 ← atan2_16::yi#8 -Coalesced [156] atan2_16::xi#15 ← atan2_16::xi#8 -Coalesced [157] atan2_16::i#12 ← atan2_16::i#1 -Coalesced [158] atan2_16::angle#21 ← atan2_16::angle#13 -Coalesced (already) [159] atan2_16::angle#23 ← atan2_16::angle#13 -Coalesced [164] atan2_16::yi#20 ← atan2_16::yi#1 -Coalesced [165] atan2_16::angle#24 ← atan2_16::angle#2 -Coalesced [166] atan2_16::xi#17 ← atan2_16::xi#1 -Coalesced [167] atan2_16::yd#12 ← atan2_16::yd#3 -Coalesced [168] atan2_16::xd#12 ← atan2_16::xd#3 -Coalesced [172] atan2_16::shift#6 ← atan2_16::shift#1 -Coalesced [173] atan2_16::xd#11 ← atan2_16::xd#1 -Coalesced [174] atan2_16::yd#11 ← atan2_16::yd#1 -Not coalescing [175] atan2_16::xi#13 ← atan2_16::x#0 -Not coalescing [176] atan2_16::yi#16 ← atan2_16::y#0 -Coalesced [185] init_font_hex::charset#9 ← init_font_hex::charset#5 -Coalesced [207] init_font_hex::charset#8 ← init_font_hex::charset#0 -Coalesced [208] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 -Coalesced [209] init_font_hex::c#7 ← init_font_hex::c#1 -Coalesced (already) [210] init_font_hex::charset#10 ← init_font_hex::charset#0 -Coalesced [211] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 -Coalesced [212] init_font_hex::c1#5 ← init_font_hex::c1#1 -Coalesced [213] init_font_hex::i#3 ← init_font_hex::i#1 -Coalesced [214] init_font_hex::idx#7 ← init_font_hex::idx#2 +Coalesced [103] init_angle_screen::y#7 ← init_angle_screen::y#1 +Coalesced [104] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#1 +Coalesced [105] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#1 +Coalesced [106] init_angle_screen::x#8 ← init_angle_screen::x#1 +Coalesced [107] init_angle_screen::xb#8 ← init_angle_screen::xb#1 +Coalesced [110] atan2_16::yi#17 ← atan2_16::$2 +Coalesced [114] atan2_16::xi#14 ← atan2_16::$7 +Coalesced [116] atan2_16::yi#19 ← atan2_16::yi#0 +Coalesced [117] atan2_16::xi#16 ← atan2_16::xi#0 +Coalesced [120] atan2_16::angle#22 ← atan2_16::angle#12 +Coalesced [125] atan2_16::angle#27 ← atan2_16::angle#4 +Coalesced [129] atan2_16::return#5 ← atan2_16::angle#5 +Coalesced [132] atan2_16::return#6 ← atan2_16::angle#11 +Coalesced [133] atan2_16::angle#26 ← atan2_16::angle#1 +Not coalescing [134] atan2_16::shift#5 ← atan2_16::i#2 +Not coalescing [135] atan2_16::xd#10 ← atan2_16::xi#3 +Not coalescing [136] atan2_16::yd#10 ← atan2_16::yi#3 +Coalesced [142] atan2_16::yd#13 ← atan2_16::yd#2 +Coalesced [143] atan2_16::xd#13 ← atan2_16::xd#2 +Coalesced [150] atan2_16::yi#21 ← atan2_16::yi#2 +Coalesced [151] atan2_16::angle#25 ← atan2_16::angle#3 +Coalesced [152] atan2_16::xi#18 ← atan2_16::xi#2 +Coalesced [156] atan2_16::yi#18 ← atan2_16::yi#8 +Coalesced [157] atan2_16::xi#15 ← atan2_16::xi#8 +Coalesced [158] atan2_16::i#12 ← atan2_16::i#1 +Coalesced [159] atan2_16::angle#21 ← atan2_16::angle#13 +Coalesced (already) [160] atan2_16::angle#23 ← atan2_16::angle#13 +Coalesced [165] atan2_16::yi#20 ← atan2_16::yi#1 +Coalesced [166] atan2_16::angle#24 ← atan2_16::angle#2 +Coalesced [167] atan2_16::xi#17 ← atan2_16::xi#1 +Coalesced [168] atan2_16::yd#12 ← atan2_16::yd#3 +Coalesced [169] atan2_16::xd#12 ← atan2_16::xd#3 +Coalesced [173] atan2_16::shift#6 ← atan2_16::shift#1 +Coalesced [174] atan2_16::xd#11 ← atan2_16::xd#1 +Coalesced [175] atan2_16::yd#11 ← atan2_16::yd#1 +Not coalescing [176] atan2_16::xi#13 ← atan2_16::x#0 +Not coalescing [177] atan2_16::yi#16 ← atan2_16::y#0 +Coalesced [186] init_font_hex::charset#9 ← init_font_hex::charset#5 +Coalesced [208] init_font_hex::charset#8 ← init_font_hex::charset#0 +Coalesced [209] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 +Coalesced [210] init_font_hex::c#7 ← init_font_hex::c#1 +Coalesced (already) [211] init_font_hex::charset#10 ← init_font_hex::charset#0 +Coalesced [212] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 +Coalesced [213] init_font_hex::c1#5 ← init_font_hex::c1#1 +Coalesced [214] init_font_hex::i#3 ← init_font_hex::i#1 +Coalesced [215] init_font_hex::idx#7 ← init_font_hex::idx#2 Coalesced down to 28 phi equivalence classes Culled Empty Block (label) @12 Culled Empty Block (label) @17 @@ -2031,7 +2043,9 @@ Culled Empty Block (label) main::toD0182_@return Culled Empty Block (label) print_dword_at::@2 Culled Empty Block (label) print_word_at::@2 Culled Empty Block (label) print_byte_at::@2 +Culled Empty Block (label) init_angle_screen::@2_1 Culled Empty Block (label) init_angle_screen::@10 +Culled Empty Block (label) init_angle_screen::@11 Culled Empty Block (label) atan2_16::@35 Culled Empty Block (label) atan2_16::@39 Culled Empty Block (label) atan2_16::@38 @@ -2179,46 +2193,46 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an [50] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(const byte*) SCREEN#0+(word)(number) $28*(number) $c init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) [50] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(const byte*) SCREEN#0+(word)(number) $28*(number) $c init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) [50] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - to:init_angle_screen::@2 -init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [51] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [51] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [52] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 - to:init_angle_screen::@4 -init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [53] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [54] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [55] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [56] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 - to:init_angle_screen::@return -init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [57] return - to:@return -init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [58] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [59] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [60] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [61] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [62] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [63] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [64] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [65] call atan2_16 - [66] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + to:init_angle_screen::@3 +init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@2 + [51] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 ) + [51] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 ) + [52] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 + [53] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [54] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [55] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [56] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [57] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [58] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [59] call atan2_16 + [60] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [67] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [68] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [69] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [71] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [72] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [73] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [74] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [75] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [76] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [77] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [78] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [61] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [62] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [63] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [64] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 + [65] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [66] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 + [67] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [68] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 + [69] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 + [71] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 + [72] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 to:init_angle_screen::@2 +init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@5 + [73] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 + to:init_angle_screen::@4 +init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 + [74] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [75] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [76] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [77] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + to:init_angle_screen::@return +init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 + [78] return + to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@3 [79] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 @@ -2461,16 +2475,16 @@ VARIABLE REGISTER WEIGHTS (byte*) init_angle_screen::screen (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#1 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 8.96 +(byte*) init_angle_screen::screen_bottomline#6 8.959999999999999 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#1 5.5 -(byte*) init_angle_screen::screen_topline#6 9.333333333333332 +(byte*) init_angle_screen::screen_topline#6 9.333333333333334 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 101.0 -(byte) init_angle_screen::x#2 28.857142857142858 +(byte) init_angle_screen::x#5 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 202.0 -(byte) init_angle_screen::xb#2 18.363636363636363 +(byte) init_angle_screen::xb#1 101.0 +(byte) init_angle_screen::xb#5 19.238095238095237 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 33.666666666666664 (byte) init_angle_screen::y @@ -2578,8 +2592,8 @@ Initial phi equivalence classes [ init_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::x#2 init_angle_screen::x#1 ] -[ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +[ init_angle_screen::x#5 init_angle_screen::x#1 ] +[ init_angle_screen::xb#5 init_angle_screen::xb#1 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] [ atan2_16::i#2 atan2_16::i#1 ] @@ -2632,8 +2646,8 @@ Complete equivalence classes [ init_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::x#2 init_angle_screen::x#1 ] -[ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +[ init_angle_screen::x#5 init_angle_screen::x#1 ] +[ init_angle_screen::xb#5 init_angle_screen::xb#1 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] [ atan2_16::i#2 atan2_16::i#1 ] @@ -2685,8 +2699,8 @@ Allocated zp ZP_WORD:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at: Allocated zp ZP_BYTE:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Allocated zp ZP_WORD:13 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] Allocated zp ZP_WORD:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] -Allocated zp ZP_BYTE:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Allocated zp ZP_BYTE:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Allocated zp ZP_BYTE:17 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Allocated zp ZP_BYTE:18 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] Allocated zp ZP_WORD:19 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] Allocated zp ZP_WORD:21 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] Allocated zp ZP_BYTE:23 [ atan2_16::i#2 atan2_16::i#1 ] @@ -3117,89 +3131,58 @@ init_angle_screen: { jmp b1 // init_angle_screen::@1 b1: - // [51] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - b2_from_b1: - // [51] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [51] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + b3_from_b1: + // [51] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [51] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [51] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b2 - // init_angle_screen::@2 - b2: - // [52] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - jmp b4 - // init_angle_screen::@4 - b4: - // [53] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // [54] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // [55] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [56] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b4 - jmp breturn - // init_angle_screen::@return - breturn: - // [57] return - rts + jmp b3 + // [51] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + b3_from_b2: + // [51] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [51] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy + jmp b3 // init_angle_screen::@3 b3: - // [58] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [52] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta _3 - // [59] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 + // [53] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc _3 sta _4 - // [60] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [54] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _4 ldy #0 sta xw+1 sty xw - // [61] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [55] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda y asl sta _7 - // [62] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [56] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _7 ldy #0 sta yw+1 sty yw - // [63] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 + // [57] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 lda xw sta atan2_16.x lda xw+1 sta atan2_16.x+1 - // [64] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 + // [58] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 lda yw sta atan2_16.y lda yw+1 sta atan2_16.y+1 - // [65] call atan2_16 + // [59] call atan2_16 jsr atan2_16 - // [66] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 + // [60] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 lda atan2_16.return sta atan2_16.return_2 lda atan2_16.return+1 @@ -3207,12 +3190,12 @@ init_angle_screen: { jmp b5 // init_angle_screen::@5 b5: - // [67] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 + // [61] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 lda atan2_16.return_2 sta angle_w lda atan2_16.return_2+1 sta angle_w+1 - // [68] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 + // [62] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 lda #$80 clc adc angle_w @@ -3220,49 +3203,81 @@ init_angle_screen: { lda #0 adc angle_w+1 sta _11+1 - // [69] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [63] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w - // [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [64] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [71] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 + // [65] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 lda ang_w eor #$ff clc adc #1 sta _13 - // [72] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 + // [66] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 lda _13 ldy xb sta (screen_topline),y - // [73] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 + // [67] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 lax ang_w axs #-[$80] stx _14 - // [74] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 + // [68] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 lda _14 ldy x sta (screen_topline),y - // [75] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 + // [69] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$80 sec sbc ang_w sta _15 - // [76] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 + // [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 lda _15 ldy x sta (screen_bottomline),y - // [77] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [71] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [78] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [72] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [51] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - b2_from_b5: - // [51] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [51] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp b2 + // init_angle_screen::@2 + b2: + // [73] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3_from_b2 + jmp b4 + // init_angle_screen::@4 + b4: + // [74] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // [75] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // [76] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [77] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b4 + jmp breturn + // init_angle_screen::@return + breturn: + // [78] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) @@ -3832,63 +3847,63 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:60 [ p Statement [45] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 [ ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29::print_char_at:38 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29::print_char_at:38 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32::print_char_at:38 [ print_dword_at::dw#0 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32::print_char_at:38 [ print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:29::print_char_at:42 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29::print_char_at:42 [ print_word_at::w#2 print_word_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32::print_char_at:42 [ print_dword_at::dw#0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32::print_char_at:42 [ ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] Statement [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) [ clock::return#0 ] ( main:2::clock:12 [ clock::return#0 ] ) always clobbers reg byte a -Statement [53] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [52] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Statement [54] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [58] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [59] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [60] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Statement [53] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [54] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [61] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [62] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [63] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [64] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [66] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [67] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [68] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [69] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:17 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Statement [55] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [56] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [57] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [58] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [60] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [61] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [62] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [63] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [64] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] -Statement [71] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [65] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] -Statement [72] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [73] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [74] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [75] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [76] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [79] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [80] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [82] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [83] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [86] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [66] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [67] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [68] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [69] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [74] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [75] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [79] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [80] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [82] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [83] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [86] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ atan2_16::i#2 atan2_16::i#1 ] -Statement [88] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [89] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [90] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [92] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [93] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [97] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [88] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [89] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [90] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [92] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [93] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [97] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:28 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -Statement [98] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [102] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [103] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [105] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [106] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [107] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [108] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [109] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [113] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [114] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [115] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [116] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [117] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [118] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [120] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [121] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [98] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [102] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [103] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [105] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [106] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [107] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [108] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [109] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [113] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [114] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [115] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [116] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [117] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [118] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [120] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [121] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [122] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a Statement [123] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a Statement [124] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a @@ -3927,53 +3942,53 @@ Statement [39] (byte~) print_byte_at::$2 ← (byte) print_byte_at::b#2 & (byte) Statement [40] (byte*) print_char_at::at#1 ← (byte*) print_byte_at::at#2 + (byte) 1 [ print_byte_at::$2 print_char_at::at#1 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::$2 print_char_at::at#1 ] ) always clobbers reg byte a Statement [45] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 [ ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29::print_char_at:38 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29::print_char_at:38 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32::print_char_at:38 [ print_dword_at::dw#0 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32::print_char_at:38 [ print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:29::print_char_at:42 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29::print_char_at:42 [ print_word_at::w#2 print_word_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32::print_char_at:42 [ print_dword_at::dw#0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32::print_char_at:42 [ ] ) always clobbers reg byte a reg byte y Statement [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) [ clock::return#0 ] ( main:2::clock:12 [ clock::return#0 ] ) always clobbers reg byte a -Statement [53] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [54] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [58] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [59] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [60] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [61] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [62] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [63] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [64] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [66] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [67] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [68] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [69] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [71] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [72] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [73] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [74] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [75] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [76] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [79] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [80] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [82] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [83] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [86] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [88] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [89] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [90] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [92] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [93] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [97] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [98] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [102] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [103] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [105] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [106] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [107] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [108] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [109] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [113] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [114] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [115] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [116] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [117] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [118] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [120] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [121] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [52] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [53] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [54] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [55] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [56] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [57] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [58] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [60] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [61] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [62] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [63] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [64] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [65] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [66] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [67] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [68] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [69] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [74] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [75] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:2::init_angle_screen:10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [79] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [80] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [82] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [83] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [86] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [88] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [89] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [90] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [92] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [93] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [97] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [98] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [102] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [103] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [105] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [106] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [107] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [108] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [109] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [113] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [114] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [115] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [116] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [117] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [118] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [120] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [121] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:10::atan2_16:59 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [122] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a Statement [123] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a Statement [124] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a @@ -3996,8 +4011,8 @@ Potential registers zp ZP_WORD:10 [ print_char_at::at#2 print_char_at::at#0 prin Potential registers zp ZP_BYTE:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp ZP_BYTE:12 , reg byte x , Potential registers zp ZP_WORD:13 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:13 , Potential registers zp ZP_WORD:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:15 , -Potential registers zp ZP_BYTE:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp ZP_BYTE:17 , reg byte x , -Potential registers zp ZP_BYTE:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp ZP_BYTE:18 , reg byte x , +Potential registers zp ZP_BYTE:17 [ init_angle_screen::x#5 init_angle_screen::x#1 ] : zp ZP_BYTE:17 , reg byte x , +Potential registers zp ZP_BYTE:18 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] : zp ZP_BYTE:18 , reg byte x , Potential registers zp ZP_WORD:19 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp ZP_WORD:19 , Potential registers zp ZP_WORD:21 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp ZP_WORD:21 , Potential registers zp ZP_BYTE:23 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:23 , reg byte x , reg byte y , @@ -4044,7 +4059,7 @@ Potential registers zp ZP_BYTE:91 [ init_font_hex::idx#3 ] : zp ZP_BYTE:91 , reg REGISTER UPLIFT SCOPES Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:28 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:29 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:31 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:24 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:19 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:21 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:86 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:87 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:23 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:76 [ atan2_16::return#2 ] 50: zp ZP_WORD:26 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:72 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:74 [ atan2_16::y#0 ] Uplift Scope [init_font_hex] 2,168.83: zp ZP_BYTE:41 [ init_font_hex::i#2 init_font_hex::i#1 ] 2,002: zp ZP_BYTE:89 [ init_font_hex::$1 ] 2,002: zp ZP_BYTE:90 [ init_font_hex::$2 ] 1,151.6: zp ZP_BYTE:42 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 1,001: zp ZP_BYTE:88 [ init_font_hex::$0 ] 202: zp ZP_BYTE:91 [ init_font_hex::idx#3 ] 165.86: zp ZP_WORD:36 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 164.97: zp ZP_BYTE:40 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 143.04: zp ZP_WORD:38 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 64.17: zp ZP_WORD:33 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 17.66: zp ZP_BYTE:35 [ init_font_hex::c#6 init_font_hex::c#1 ] -Uplift Scope [init_angle_screen] 220.36: zp ZP_BYTE:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 202: zp ZP_BYTE:65 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:66 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:69 [ init_angle_screen::$7 ] 202: zp ZP_WORD:78 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:80 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:83 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:84 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:85 [ init_angle_screen::$15 ] 129.86: zp ZP_BYTE:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 84.17: zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:70 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:67 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 16.29: zp ZP_WORD:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] 14.83: zp ZP_WORD:13 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] +Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:65 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:66 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:69 [ init_angle_screen::$7 ] 202: zp ZP_WORD:78 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:80 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:83 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:84 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:85 [ init_angle_screen::$15 ] 126.25: zp ZP_BYTE:17 [ init_angle_screen::x#5 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:18 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:70 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:67 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 16.29: zp ZP_WORD:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] 14.83: zp ZP_WORD:13 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] Uplift Scope [print_char_at] 12: zp ZP_BYTE:9 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] 12: zp ZP_WORD:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] Uplift Scope [print_byte_at] 9.33: zp ZP_WORD:7 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] 5.6: zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] 4: zp ZP_BYTE:59 [ print_byte_at::$0 ] 2: zp ZP_BYTE:60 [ print_byte_at::$2 ] Uplift Scope [print_word_at] 10: zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] 0.8: zp ZP_WORD:4 [ print_word_at::at#2 ] @@ -4055,47 +4070,45 @@ Uplift Scope [RADIX] Uplift Scope [clock_start] Uplift Scope [] -Uplifting [atan2_16] best 1159771 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:29 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:31 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:24 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:19 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:21 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:76 [ atan2_16::return#2 ] zp ZP_WORD:26 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:72 [ atan2_16::x#0 ] zp ZP_WORD:74 [ atan2_16::y#0 ] +Uplifting [atan2_16] best 1160071 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:29 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:31 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:24 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:19 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:21 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:76 [ atan2_16::return#2 ] zp ZP_WORD:26 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:72 [ atan2_16::x#0 ] zp ZP_WORD:74 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [init_font_hex] best 1140771 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:42 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:88 [ init_font_hex::$0 ] zp ZP_BYTE:91 [ init_font_hex::idx#3 ] zp ZP_WORD:36 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:40 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:38 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:33 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:35 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplifting [init_font_hex] best 1141071 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:42 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:88 [ init_font_hex::$0 ] zp ZP_BYTE:91 [ init_font_hex::idx#3 ] zp ZP_WORD:36 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:40 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:38 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:33 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:35 [ init_font_hex::c#6 init_font_hex::c#1 ] Limited combination testing to 100 combinations of 6912 possible. -Uplifting [init_angle_screen] best 1139171 combination zp ZP_BYTE:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:78 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:80 [ init_angle_screen::$11 ] zp ZP_BYTE:83 [ init_angle_screen::$13 ] zp ZP_BYTE:84 [ init_angle_screen::$14 ] zp ZP_BYTE:85 [ init_angle_screen::$15 ] zp ZP_BYTE:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:70 [ init_angle_screen::yw#0 ] zp ZP_WORD:67 [ init_angle_screen::xw#0 ] zp ZP_BYTE:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:13 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] +Uplifting [init_angle_screen] best 1138871 combination reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:78 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:80 [ init_angle_screen::$11 ] reg byte a [ init_angle_screen::$13 ] zp ZP_BYTE:84 [ init_angle_screen::$14 ] zp ZP_BYTE:85 [ init_angle_screen::$15 ] zp ZP_BYTE:17 [ init_angle_screen::x#5 init_angle_screen::x#1 ] zp ZP_BYTE:18 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:70 [ init_angle_screen::yw#0 ] zp ZP_WORD:67 [ init_angle_screen::xw#0 ] zp ZP_BYTE:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:13 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [print_char_at] best 1139164 combination reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] zp ZP_WORD:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] -Uplifting [print_byte_at] best 1139156 combination zp ZP_WORD:7 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] reg byte a [ print_byte_at::$0 ] reg byte y [ print_byte_at::$2 ] -Uplifting [print_word_at] best 1139156 combination zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] zp ZP_WORD:4 [ print_word_at::at#2 ] -Uplifting [main] best 1139156 combination zp ZP_DWORD:47 [ main::$4 ] zp ZP_DWORD:51 [ main::cyclecount#0 ] -Uplifting [clock] best 1139156 combination zp ZP_DWORD:43 [ clock::return#2 ] zp ZP_DWORD:61 [ clock::return#0 ] -Uplifting [print_dword_at] best 1139156 combination zp ZP_DWORD:55 [ print_dword_at::dw#0 ] -Uplifting [RADIX] best 1139156 combination -Uplifting [clock_start] best 1139156 combination -Uplifting [] best 1139156 combination +Uplifting [print_char_at] best 1138864 combination reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] zp ZP_WORD:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] +Uplifting [print_byte_at] best 1138856 combination zp ZP_WORD:7 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] reg byte a [ print_byte_at::$0 ] reg byte y [ print_byte_at::$2 ] +Uplifting [print_word_at] best 1138856 combination zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] zp ZP_WORD:4 [ print_word_at::at#2 ] +Uplifting [main] best 1138856 combination zp ZP_DWORD:47 [ main::$4 ] zp ZP_DWORD:51 [ main::cyclecount#0 ] +Uplifting [clock] best 1138856 combination zp ZP_DWORD:43 [ clock::return#2 ] zp ZP_DWORD:61 [ clock::return#0 ] +Uplifting [print_dword_at] best 1138856 combination zp ZP_DWORD:55 [ print_dword_at::dw#0 ] +Uplifting [RADIX] best 1138856 combination +Uplifting [clock_start] best 1138856 combination +Uplifting [] best 1138856 combination Attempting to uplift remaining variables inzp ZP_BYTE:42 [ init_font_hex::idx#5 init_font_hex::idx#2 ] -Uplifting [init_font_hex] best 1139156 combination zp ZP_BYTE:42 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Uplifting [init_font_hex] best 1138856 combination zp ZP_BYTE:42 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:88 [ init_font_hex::$0 ] -Uplifting [init_font_hex] best 1139156 combination zp ZP_BYTE:88 [ init_font_hex::$0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Uplifting [init_angle_screen] best 1139156 combination zp ZP_BYTE:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:83 [ init_angle_screen::$13 ] -Uplifting [init_angle_screen] best 1138556 combination reg byte a [ init_angle_screen::$13 ] +Uplifting [init_font_hex] best 1138856 combination zp ZP_BYTE:88 [ init_font_hex::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:84 [ init_angle_screen::$14 ] -Uplifting [init_angle_screen] best 1138156 combination reg byte a [ init_angle_screen::$14 ] +Uplifting [init_angle_screen] best 1138456 combination reg byte a [ init_angle_screen::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:85 [ init_angle_screen::$15 ] -Uplifting [init_angle_screen] best 1137556 combination reg byte a [ init_angle_screen::$15 ] +Uplifting [init_angle_screen] best 1137856 combination reg byte a [ init_angle_screen::$15 ] Attempting to uplift remaining variables inzp ZP_BYTE:91 [ init_font_hex::idx#3 ] -Uplifting [init_font_hex] best 1136956 combination reg byte y [ init_font_hex::idx#3 ] +Uplifting [init_font_hex] best 1137256 combination reg byte y [ init_font_hex::idx#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:40 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Uplifting [init_font_hex] best 1136956 combination zp ZP_BYTE:40 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Uplifting [init_angle_screen] best 1136956 combination zp ZP_BYTE:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Uplifting [init_font_hex] best 1137256 combination zp ZP_BYTE:40 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:17 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Uplifting [init_angle_screen] best 1137256 combination zp ZP_BYTE:17 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:18 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Uplifting [init_angle_screen] best 1137256 combination zp ZP_BYTE:18 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] -Uplifting [init_angle_screen] best 1136956 combination zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1137256 combination zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Uplifting [init_angle_screen] best 1136956 combination zp ZP_BYTE:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] +Uplifting [init_angle_screen] best 1137256 combination zp ZP_BYTE:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:35 [ init_font_hex::c#6 init_font_hex::c#1 ] -Uplifting [init_font_hex] best 1136956 combination zp ZP_BYTE:35 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplifting [init_font_hex] best 1137256 combination zp ZP_BYTE:35 [ init_font_hex::c#6 init_font_hex::c#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] -Uplifting [print_byte_at] best 1136956 combination zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] +Uplifting [print_byte_at] best 1137256 combination zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] Coalescing zero page register [ zp ZP_WORD:4 [ print_word_at::at#2 ] ] with [ zp ZP_WORD:7 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:24 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:26 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1 Coalescing zero page register [ zp ZP_DWORD:43 [ clock::return#2 ] ] with [ zp ZP_DWORD:47 [ main::$4 ] ] - score: 1 @@ -4112,10 +4125,10 @@ Coalescing zero page register [ zp ZP_WORD:13 [ init_angle_screen::screen_toplin Coalescing zero page register [ zp ZP_WORD:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:4 [ print_word_at::at#2 print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] ] Coalescing zero page register [ zp ZP_WORD:19 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] with [ zp ZP_WORD:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] ] Coalescing zero page register [ zp ZP_WORD:33 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] ] with [ zp ZP_WORD:21 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] -Coalescing zero page register [ zp ZP_BYTE:35 [ init_font_hex::c#6 init_font_hex::c#1 ] ] with [ zp ZP_BYTE:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:35 [ init_font_hex::c#6 init_font_hex::c#1 ] ] with [ zp ZP_BYTE:17 [ init_angle_screen::x#5 init_angle_screen::x#1 ] ] Coalescing zero page register [ zp ZP_WORD:36 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] ] with [ zp ZP_WORD:24 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] ] Coalescing zero page register [ zp ZP_WORD:38 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] ] with [ zp ZP_WORD:29 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ] -Coalescing zero page register [ zp ZP_BYTE:40 [ init_font_hex::c1#4 init_font_hex::c1#1 ] ] with [ zp ZP_BYTE:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:40 [ init_font_hex::c1#4 init_font_hex::c1#1 ] ] with [ zp ZP_BYTE:18 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] ] Coalescing zero page register [ zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] ] with [ zp ZP_BYTE:42 [ init_font_hex::idx#5 init_font_hex::idx#2 ] ] Coalescing zero page register [ zp ZP_BYTE:88 [ init_font_hex::$0 ] ] with [ zp ZP_BYTE:12 [ init_angle_screen::y#5 init_angle_screen::y#1 print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] ] Allocated (was zp ZP_WORD:13) zp ZP_WORD:2 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] @@ -4123,10 +4136,10 @@ Allocated (was zp ZP_WORD:15) zp ZP_WORD:4 [ init_angle_screen::screen_bottomlin Allocated (was zp ZP_WORD:19) zp ZP_WORD:6 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] Allocated (was zp ZP_WORD:31) zp ZP_WORD:8 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] Allocated (was zp ZP_WORD:33) zp ZP_WORD:10 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] -Allocated (was zp ZP_BYTE:35) zp ZP_BYTE:12 [ init_font_hex::c#6 init_font_hex::c#1 init_angle_screen::x#2 init_angle_screen::x#1 ] +Allocated (was zp ZP_BYTE:35) zp ZP_BYTE:12 [ init_font_hex::c#6 init_font_hex::c#1 init_angle_screen::x#5 init_angle_screen::x#1 ] Allocated (was zp ZP_WORD:36) zp ZP_WORD:13 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] Allocated (was zp ZP_WORD:38) zp ZP_WORD:15 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -Allocated (was zp ZP_BYTE:40) zp ZP_BYTE:17 [ init_font_hex::c1#4 init_font_hex::c1#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Allocated (was zp ZP_BYTE:40) zp ZP_BYTE:17 [ init_font_hex::c1#4 init_font_hex::c1#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ] Allocated (was zp ZP_DWORD:43) zp ZP_DWORD:18 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_dword_at::dw#0 ] Allocated (was zp ZP_WORD:67) zp ZP_WORD:22 [ init_angle_screen::xw#0 atan2_16::x#0 ] Allocated (was zp ZP_WORD:70) zp ZP_WORD:24 [ init_angle_screen::yw#0 atan2_16::y#0 ] @@ -4477,81 +4490,50 @@ init_angle_screen: { jmp b1 // init_angle_screen::@1 b1: - // [51] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - b2_from_b1: - // [51] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [51] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + b3_from_b1: + // [51] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [51] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [51] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b2 - // init_angle_screen::@2 - b2: - // [52] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - jmp b4 - // init_angle_screen::@4 - b4: - // [53] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // [54] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // [55] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [56] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b4 - jmp breturn - // init_angle_screen::@return - breturn: - // [57] return - rts + jmp b3 + // [51] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + b3_from_b2: + // [51] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [51] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy + jmp b3 // init_angle_screen::@3 b3: - // [58] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [52] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [59] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [53] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [60] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [54] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw - // [61] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [55] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl - // [62] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [56] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta yw+1 sty yw - // [63] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [64] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [65] call atan2_16 + // [57] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [58] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [59] call atan2_16 jsr atan2_16 - // [66] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [60] (word) atan2_16::return#2 ← (word) atan2_16::return#0 jmp b5 // init_angle_screen::@5 b5: - // [67] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - // [68] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [61] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [62] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _11 @@ -4559,44 +4541,76 @@ init_angle_screen: { bcc !+ inc _11+1 !: - // [69] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [63] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w - // [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [64] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [71] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [65] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 lda ang_w eor #$ff clc adc #1 - // [72] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [66] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y - // [73] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [67] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w - // [74] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [68] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y - // [75] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [69] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w - // [76] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_bottomline),y - // [77] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [71] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [78] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [72] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [51] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - b2_from_b5: - // [51] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [51] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp b2 + // init_angle_screen::@2 + b2: + // [73] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3_from_b2 + jmp b4 + // init_angle_screen::@4 + b4: + // [74] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // [75] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // [76] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [77] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b4 + jmp breturn + // init_angle_screen::@return + breturn: + // [78] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) @@ -5133,10 +5147,11 @@ Removing instruction jmp breturn Removing instruction jmp breturn Removing instruction jmp breturn Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b4 Removing instruction jmp breturn -Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp b5 @@ -5173,6 +5188,7 @@ Replacing instruction ldy #0 with TAY Removing instruction ldy idx Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b3_from_b2 with b3 Replacing label b1_from_b4 with b1 Replacing label b7_from_b12 with b7 Replacing label b8_from_b7 with b8 @@ -5197,7 +5213,8 @@ Removing instruction b4_from_b3: Removing instruction toD0182_from_b5: Removing instruction toD0182: Removing instruction b1_from_b4: -Removing instruction b2_from_b1: +Removing instruction b3_from_b1: +Removing instruction b3_from_b2: Removing instruction b3_from_b1: Removing instruction b3_from_b2: Removing instruction b6_from_b4: @@ -5244,10 +5261,10 @@ Removing instruction breturn: Removing instruction breturn: Removing instruction breturn: Removing instruction b1_from_init_angle_screen: +Removing instruction b5: +Removing instruction b2: Removing instruction b4: Removing instruction breturn: -Removing instruction b5: -Removing instruction b2_from_b5: Removing instruction b2: Removing instruction b5: Removing instruction b21: @@ -5267,15 +5284,16 @@ Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin Removing instruction jmp b1 +Removing instruction jmp b3 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [374] beq b12 to bne -Fixing long branch [268] bpl b1 to bmi -Fixing long branch [280] bpl b4 to bmi +Fixing long branch [372] beq b12 to bne +Fixing long branch [266] bpl b1 to bmi +Fixing long branch [278] bpl b4 to bmi FINAL SYMBOL TABLE (label) @1 @@ -5420,16 +5438,16 @@ FINAL SYMBOL TABLE (byte*) init_angle_screen::screen (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:4 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:4 8.96 +(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:4 8.959999999999999 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:2 5.5 -(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:2 9.333333333333332 +(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:2 9.333333333333334 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 x zp ZP_BYTE:12 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:12 28.857142857142858 +(byte) init_angle_screen::x#5 x zp ZP_BYTE:12 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:17 202.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:17 18.363636363636363 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:17 101.0 +(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:17 19.238095238095237 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 xw zp ZP_WORD:22 33.666666666666664 (byte) init_angle_screen::y @@ -5561,10 +5579,10 @@ reg byte x [ atan2_16::i#2 atan2_16::i#1 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:8 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:10 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] -zp ZP_BYTE:12 [ init_font_hex::c#6 init_font_hex::c#1 init_angle_screen::x#2 init_angle_screen::x#1 ] +zp ZP_BYTE:12 [ init_font_hex::c#6 init_font_hex::c#1 init_angle_screen::x#5 init_angle_screen::x#1 ] zp ZP_WORD:13 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] zp ZP_WORD:15 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -zp ZP_BYTE:17 [ init_font_hex::c1#4 init_font_hex::c1#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ] +zp ZP_BYTE:17 [ init_font_hex::c1#4 init_font_hex::c1#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ] reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] zp ZP_DWORD:18 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_dword_at::dw#0 ] reg byte a [ print_byte_at::$0 ] @@ -5587,7 +5605,7 @@ reg byte y [ init_font_hex::idx#3 ] FINAL ASSEMBLER -Score: 1044967 +Score: 1044667 // File Comments // Calculate the angle to the center of the screen - and show it using font-hex @@ -5899,85 +5917,51 @@ init_angle_screen: { // [50] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy // init_angle_screen::@1 b1: - // [51] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - // [51] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [51] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + // [51] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [51] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [51] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - // init_angle_screen::@2 - b2: - // for( byte x=0,xb=39; x<=19; x++, xb--) - // [52] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - // init_angle_screen::@4 - // screen_topline -= 40 - // [53] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // screen_bottomline += 40 - // [54] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // for(byte y: 0..12) - // [55] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [56] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1 - // init_angle_screen::@return - // } - // [57] return - rts + // [51] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + // [51] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [51] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy // init_angle_screen::@3 b3: // x*2 - // [58] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [52] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // 39-x*2 - // [59] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [53] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // (word){ 39-x*2, 0 } - // [60] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [54] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw // y*2 - // [61] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [55] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl // (word){ y*2, 0 } - // [62] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [56] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 sta yw+1 sty yw // atan2_16(xw, yw) - // [63] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [64] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [65] call atan2_16 + // [57] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [58] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [59] call atan2_16 jsr atan2_16 - // [66] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [60] (word) atan2_16::return#2 ← (word) atan2_16::return#0 // init_angle_screen::@5 // angle_w = atan2_16(xw, yw) - // [67] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [61] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 // angle_w+0x0080 - // [68] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [62] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _11 @@ -5986,47 +5970,78 @@ init_angle_screen: { inc _11+1 !: // ang_w = >(angle_w+0x0080) - // [69] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [63] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w // screen_bottomline[xb] = ang_w - // [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [64] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 ldy xb sta (screen_bottomline),y // -ang_w - // [71] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [65] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 eor #$ff clc adc #1 // screen_topline[xb] = -ang_w - // [72] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [66] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_topline),y // 0x80+ang_w - // [73] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [67] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w // screen_topline[x] = 0x80+ang_w - // [74] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [68] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y // 0x80-ang_w - // [75] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [69] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w // screen_bottomline[x] = 0x80-ang_w - // [76] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [70] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [77] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [71] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [78] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [72] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [51] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - // [51] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [51] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy - jmp b2 + // init_angle_screen::@2 + // [73] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3 + // init_angle_screen::@4 + // screen_topline -= 40 + // [74] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // screen_bottomline += 40 + // [75] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // for(byte y: 0..12) + // [76] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [77] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1 + // init_angle_screen::@return + // } + // [78] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) diff --git a/src/test/ref/screen-center-angle.sym b/src/test/ref/screen-center-angle.sym index 8a5983937..790bb8285 100644 --- a/src/test/ref/screen-center-angle.sym +++ b/src/test/ref/screen-center-angle.sym @@ -140,16 +140,16 @@ (byte*) init_angle_screen::screen (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:4 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:4 8.96 +(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:4 8.959999999999999 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:2 5.5 -(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:2 9.333333333333332 +(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:2 9.333333333333334 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 x zp ZP_BYTE:12 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:12 28.857142857142858 +(byte) init_angle_screen::x#5 x zp ZP_BYTE:12 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:17 202.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:17 18.363636363636363 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:17 101.0 +(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:17 19.238095238095237 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 xw zp ZP_WORD:22 33.666666666666664 (byte) init_angle_screen::y @@ -281,10 +281,10 @@ reg byte x [ atan2_16::i#2 atan2_16::i#1 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:8 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:10 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] -zp ZP_BYTE:12 [ init_font_hex::c#6 init_font_hex::c#1 init_angle_screen::x#2 init_angle_screen::x#1 ] +zp ZP_BYTE:12 [ init_font_hex::c#6 init_font_hex::c#1 init_angle_screen::x#5 init_angle_screen::x#1 ] zp ZP_WORD:13 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] zp ZP_WORD:15 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -zp ZP_BYTE:17 [ init_font_hex::c1#4 init_font_hex::c1#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ] +zp ZP_BYTE:17 [ init_font_hex::c1#4 init_font_hex::c1#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ] reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] zp ZP_DWORD:18 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_dword_at::dw#0 ] reg byte a [ print_byte_at::$0 ] diff --git a/src/test/ref/screen-center-distance.asm b/src/test/ref/screen-center-distance.asm index b7704a771..85240237f 100644 --- a/src/test/ref/screen-center-distance.asm +++ b/src/test/ref/screen-center-distance.asm @@ -30,8 +30,8 @@ main: { .label BASE_CHARSET = $1000 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .const toD0182_return = (>(BASE_SCREEN&$3fff)*4)|(>BASE_CHARSET)/4&$f - .label _4 = $d - .label cyclecount = $d + .label _4 = $e + .label cyclecount = $e jsr init_font_hex lda #toD0181_return sta D018 @@ -57,9 +57,9 @@ main: { rts } // Print a dword as HEX at a specific position -// print_dword_at(dword zeropage($d) dw) +// print_dword_at(dword zeropage($e) dw) print_dword_at: { - .label dw = $d + .label dw = $e lda dw+2 sta print_word_at.w lda dw+3 @@ -81,10 +81,10 @@ print_dword_at: { rts } // Print a word as HEX at a specific position -// print_word_at(word zeropage(4) w, byte* zeropage(9) at) +// print_word_at(word zeropage(9) w, byte* zeropage(2) at) print_word_at: { - .label w = 4 - .label at = 9 + .label w = 9 + .label at = 2 lda w+1 sta print_byte_at.b jsr print_byte_at @@ -101,10 +101,10 @@ print_word_at: { rts } // Print a byte as HEX at a specific position -// print_byte_at(byte zeropage($c) b, byte* zeropage(9) at) +// print_byte_at(byte zeropage($d) b, byte* zeropage(2) at) print_byte_at: { - .label b = $c - .label at = 9 + .label b = $d + .label at = 2 lda b lsr lsr @@ -132,9 +132,9 @@ print_byte_at: { rts } // Print a single char -// print_char_at(byte register(X) ch, byte* zeropage(2) at) +// print_char_at(byte register(X) ch, byte* zeropage(4) at) print_char_at: { - .label at = 2 + .label at = 4 txa ldy #0 sta (at),y @@ -143,7 +143,7 @@ print_char_at: { // Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program). // This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start() clock: { - .label return = $d + .label return = $e lda #<$ffffffff sec sbc CIA2_TIMER_AB @@ -162,14 +162,14 @@ clock: { // Populates 1000 bytes (a screen) with values representing the distance to the center. // The actual value stored is distance*2 to increase precision init_dist_screen: { - .label yds = $11 - .label screen_topline = 4 - .label screen_bottomline = 9 - .label y = $c - .label xds = $13 - .label ds = $13 - .label x = 6 - .label xb = $b + .label yds = $12 + .label screen_topline = 9 + .label screen_bottomline = 2 + .label y = $d + .label xds = $14 + .label ds = $14 + .label x = $b + .label xb = $c jsr init_squares lda #$28 - sta screen_bottomline+1 - inc y - lda #$d - cmp y - bne b1 - rts b6: lda x asl @@ -248,7 +225,28 @@ init_dist_screen: { sta (screen_bottomline),y inc x dec xb - jmp b5 + lda x + cmp #$13+1 + bcc b6 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + inc y + lda #$d + cmp y + bne b1 + rts b8: sec sbc #$27 @@ -261,12 +259,12 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($13) val) +// sqrt(word zeropage($14) val) sqrt: { - .label _1 = 2 - .label _3 = 2 - .label found = 2 - .label val = $13 + .label _1 = 6 + .label _3 = 6 + .label found = 6 + .label val = $14 jsr bsearch16u lda _3 sec @@ -285,50 +283,30 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($13) key, word* zeropage(2) items, byte register(X) num) +// bsearch16u(word zeropage($14) key, word* zeropage(6) items, byte register(X) num) bsearch16u: { - .label _2 = 2 - .label pivot = $15 - .label result = $17 - .label return = 2 - .label items = 2 - .label key = $13 + .label _2 = 6 + .label pivot = 6 + .label result = $16 + .label return = 6 + .label items = 6 + .label key = $14 + .label items_10 = 4 + .label items_16 = 4 lda #SQUARES - sta items+1 + sta items_10+1 ldx #NUM_SQUARES - b3: - cpx #0 - bne b4 - ldy #1 - lda (items),y - cmp key+1 - bne !+ - dey - lda (items),y - cmp key - beq b2 - !: - bcc b2 - lda _2 - sec - sbc #<1*SIZEOF_WORD - sta _2 - lda _2+1 - sbc #>1*SIZEOF_WORD - sta _2+1 - b2: - rts b4: txa lsr asl clc - adc items + adc items_10 sta pivot lda #0 - adc items+1 + adc items_10+1 sta pivot+1 sec lda key @@ -342,38 +320,66 @@ bsearch16u: { bne b6 lda result bne b6 - lda pivot - sta return - lda pivot+1 - sta return+1 + breturn: rts b6: lda result+1 - bmi b7 + bmi b10 bne !+ lda result - beq b7 + beq b10 !: lda #1*SIZEOF_WORD clc - adc pivot + adc items sta items - lda #0 - adc pivot+1 - sta items+1 + bcc !+ + inc items+1 + !: dex b7: txa lsr tax - jmp b3 + cpx #0 + bne b9 + ldy #1 + lda (items),y + cmp key+1 + bne !+ + dey + lda (items),y + cmp key + beq breturn + !: + bcc breturn + lda _2 + sec + sbc #<1*SIZEOF_WORD + sta _2 + lda _2+1 + sbc #>1*SIZEOF_WORD + sta _2+1 + rts + b9: + lda items + sta items_16 + lda items+1 + sta items_16+1 + jmp b4 + b10: + lda items_10 + sta items + lda items_10+1 + sta items+1 + jmp b7 } // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $13 - .label return_2 = $11 + .label return = $14 + .label return_2 = $12 asl tay lda SQUARES,y @@ -386,7 +392,7 @@ sqr: { // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { .label squares = 9 - .label sqr = 4 + .label sqr = 6 jsr malloc ldx #0 lda #=(byte) $27) goto init_dist_screen::@8 + to:init_dist_screen::@6 +init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@5 + [60] (byte) init_dist_screen::xb#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#1 init_dist_screen::@11/(byte) $27 ) + [60] (byte) init_dist_screen::x#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#1 init_dist_screen::@11/(byte) 0 ) + [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 + [62] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 - [69] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [63] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9 - [70] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) - [71] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [72] call sqr - [73] (word) sqr::return#3 ← (word) sqr::return#0 + [64] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) + [65] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [66] call sqr + [67] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@10 - [74] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [75] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [76] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [77] call sqrt - [78] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [69] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [71] call sqrt + [72] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@13 init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@12 - [79] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [80] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [81] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [82] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [83] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [84] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [85] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [73] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [74] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [75] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [76] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [77] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [78] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 + [79] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 to:init_dist_screen::@5 +init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@13 + [80] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 + to:init_dist_screen::@7 +init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 + [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 + [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 + [83] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [84] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 + to:init_dist_screen::@return +init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 + [85] return + to:@return init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 [86] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@10 @@ -187,129 +187,132 @@ sqrt::@return: scope:[sqrt] from sqrt::@1 to:@return bsearch16u: scope:[bsearch16u] from sqrt [96] phi() + to:bsearch16u::@4 +bsearch16u::@4: scope:[bsearch16u] from bsearch16u bsearch16u::@9 + [97] (word*) bsearch16u::items#10 ← phi( bsearch16u::@9/(word*~) bsearch16u::items#16 bsearch16u/(const word*) SQUARES#1 ) + [97] (byte) bsearch16u::num#10 ← phi( bsearch16u::@9/(byte) bsearch16u::num#0 bsearch16u/(const byte) NUM_SQUARES#3 ) + [98] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 + [99] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [100] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 + [101] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [102] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 + to:bsearch16u::@return +bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@4 + [103] (word*) bsearch16u::return#1 ← phi( bsearch16u::@4/(word*) bsearch16u::pivot#0 bsearch16u::@2/(word*) bsearch16u::return#2 ) + [104] return + to:@return +bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 + [105] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 + to:bsearch16u::@8 +bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@6 + [106] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [107] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 + to:bsearch16u::@7 +bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@10 bsearch16u::@8 + [108] (word*) bsearch16u::items#11 ← phi( bsearch16u::@8/(word*) bsearch16u::items#0 bsearch16u::@10/(word*~) bsearch16u::items#18 ) + [108] (byte) bsearch16u::num#5 ← phi( bsearch16u::@8/(byte) bsearch16u::num#1 bsearch16u::@10/(byte) bsearch16u::num#10 ) + [109] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 to:bsearch16u::@3 -bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [97] (word*) bsearch16u::items#2 ← phi( bsearch16u/(const word*) SQUARES#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [97] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [98] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 +bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@7 + [110] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + [111] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD + [112] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD to:bsearch16u::@2 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 - [101] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [113] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#11 bsearch16u::@1/(word*~) bsearch16u::$2 ) to:bsearch16u::@return -bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 - [102] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) - [103] return - to:@return -bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [107] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [108] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 - to:bsearch16u::@8 -bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 - to:bsearch16u::@return -bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [110] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 - to:bsearch16u::@9 -bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [112] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 +bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@3 + [114] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 + to:bsearch16u::@4 +bsearch16u::@10: scope:[bsearch16u] from bsearch16u::@6 + [115] (word*~) bsearch16u::items#18 ← (word*) bsearch16u::items#10 to:bsearch16u::@7 -bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [113] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [113] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [114] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 - to:bsearch16u::@3 sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 - [115] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) - [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 - [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) + [116] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) + [117] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 + [118] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) to:sqr::@return sqr::@return: scope:[sqr] from sqr - [118] return + [119] return to:@return init_squares: scope:[init_squares] from init_dist_screen - [119] phi() - [120] call malloc + [120] phi() + [121] call malloc to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares init_squares::@1 - [121] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares/(byte) 0 ) - [121] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares/(const word*) SQUARES#1 ) - [121] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares/(byte) 0 ) - [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 - [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD - [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 - [125] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 - [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 - [127] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 - [128] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 + [122] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares/(byte) 0 ) + [122] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares/(const word*) SQUARES#1 ) + [122] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares/(byte) 0 ) + [123] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 + [124] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD + [125] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 + [126] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 + [127] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 + [128] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 + [129] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 - [129] return + [130] return to:@return malloc: scope:[malloc] from init_squares - [130] phi() + [131] phi() to:malloc::@return malloc::@return: scope:[malloc] from malloc - [131] return + [132] return to:@return clock_start: scope:[clock_start] from main::@1 - [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 - [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 - [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff - [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 - [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 + [133] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 + [134] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 + [135] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff + [136] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 + [137] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start - [137] return + [138] return to:@return init_font_hex: scope:[init_font_hex] from main - [138] phi() + [139] phi() to:init_font_hex::@1 init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5 - [139] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) - [139] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) - [139] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) + [140] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) + [140] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) + [140] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) to:init_font_hex::@2 init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4 - [140] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) - [140] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) - [140] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) - [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 + [141] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) + [141] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) + [141] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) + [142] *((byte*) init_font_hex::charset#2) ← (byte) 0 to:init_font_hex::@3 init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3 - [142] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) - [142] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) - [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 - [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 - [145] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 - [146] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 - [147] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 - [148] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 - [149] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 + [143] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) + [143] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) + [144] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 + [145] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 + [146] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 + [147] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 + [148] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 + [149] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 + [150] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 to:init_font_hex::@4 init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3 - [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 - [151] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 - [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 - [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 - [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 - [155] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 - [156] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 + [151] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 + [152] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 + [153] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 + [154] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 + [155] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 + [156] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 + [157] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 to:init_font_hex::@5 init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4 - [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 - [158] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 - [159] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 + [158] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 + [159] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 + [160] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 to:init_font_hex::@return init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 - [160] return + [161] return to:@return diff --git a/src/test/ref/screen-center-distance.log b/src/test/ref/screen-center-distance.log index 6e9fd387e..feec07c8f 100644 --- a/src/test/ref/screen-center-distance.log +++ b/src/test/ref/screen-center-distance.log @@ -2176,6 +2176,8 @@ Eliminating unused constant (const word*) SQUARES#0 Eliminating unused constant (const byte) CIA_TIMER_CONTROL_STOP#0 Eliminating unused constant (const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 5 in if((byte) init_font_hex::i#1!=(number) 5) goto init_font_hex::@3 Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c1#1!=(number) $10) goto init_font_hex::@2 Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c#1!=(number) $10) goto init_font_hex::@1 @@ -2196,14 +2198,33 @@ Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) bsearch16u::num#0 = (byte) bsearch16u::num#3 +Alias (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 +Alias (byte) bsearch16u::num#10 = (byte) bsearch16u::num#9 (byte) bsearch16u::num#11 +Alias (word*) bsearch16u::items#10 = (word*) bsearch16u::items#12 +Alias (word*) bsearch16u::items#11 = (word*) bsearch16u::items#14 (word*) bsearch16u::items#13 Alias (byte~) clock_start::$1 = (byte~) clock_start::$0 (byte~) clock_start::$2 Alias (byte~) clock_start::$6 = (byte~) clock_start::$4 (byte~) clock_start::$7 +Alias (byte) init_dist_screen::x#1 = (byte) init_dist_screen::x#2 +Alias (byte) init_dist_screen::xb#1 = (byte) init_dist_screen::xb#2 +Alias (byte) init_dist_screen::x#13 = (byte) init_dist_screen::x#9 (byte) init_dist_screen::x#14 +Alias (byte) init_dist_screen::xb#12 = (byte) init_dist_screen::xb#14 (byte) init_dist_screen::xb#13 +Alias (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#11 (byte) init_dist_screen::x#12 +Alias (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#11 (byte) init_dist_screen::xb#9 Successful SSA optimization Pass2AliasElimination -Constant right-side identified [22] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD -Constant right-side identified [28] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 -Constant right-side identified [54] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 -Constant right-side identified [101] (byte*) print_word_at::at#1 ← (const byte*) print_dword_at::at#0 + (byte) 4 -Constant right-side identified [148] (byte*) init_dist_screen::screen_bottomline#0 ← (const byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 +Alias (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#13 +Alias (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#12 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) bsearch16u::num#12 (const byte) bsearch16u::num#2 +Identical Phi Values (word*) bsearch16u::items#15 (word*) bsearch16u::items#1 +Identical Phi Values (byte) init_dist_screen::x#15 (const byte) init_dist_screen::x#0 +Identical Phi Values (byte) init_dist_screen::xb#15 (const byte) init_dist_screen::xb#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [28] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD +Constant right-side identified [34] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 +Constant right-side identified [60] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 +Constant right-side identified [107] (byte*) print_word_at::at#1 ← (const byte*) print_dword_at::at#0 + (byte) 4 +Constant right-side identified [154] (byte*) init_dist_screen::screen_bottomline#0 ← (const byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD Constant (const byte) init_squares::$2 = NUM_SQUARES#3-1 @@ -2217,9 +2238,13 @@ Constant (const word) main::toD0182_$0#0 = (word)main::BASE_SCREEN#0 Constant (const word) main::toD0182_$4#0 = (word)main::BASE_CHARSET#0 Constant (const byte*) init_dist_screen::screen_bottomline#0 = init_dist_screen::screen#0+(word)$28*$18 Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [35] init_squares::i#1 ← ++ init_squares::i#2 to ++ -Resolved ranged comparison value [36] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 -Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 in [80] (byte~) clock_start::$3 ← (const byte) clock_start::$1 | (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 +Removing PHI-reference to removed block (bsearch16u::@6_1) in block bsearch16u::@8 +if() condition always true - replacing block destination [200] if((const byte) bsearch16u::num#2>(byte) 0) goto bsearch16u::@7 +if() condition always true - replacing block destination [202] if((const byte) init_dist_screen::x#0<(byte) $13+(byte) 1) goto init_dist_screen::@6 +Successful SSA optimization Pass2ConstantIfs +Resolved ranged next value [41] init_squares::i#1 ← ++ init_squares::i#2 to ++ +Resolved ranged comparison value [42] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 +Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 in [86] (byte~) clock_start::$3 ← (const byte) clock_start::$1 | (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 Successful SSA optimization PassNSimplifyExpressionWithZero Adding number conversion cast (unumber) init_squares::$2+1 in if((byte) init_squares::i#1!=(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) 1 in if((byte) init_squares::i#1!=(unumber)(const byte) init_squares::$2+(number) 1) goto init_squares::@1 @@ -2229,12 +2254,14 @@ Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (word*) bsearch16u::items#11 = (word*) bsearch16u::items#2 +Successful SSA optimization Pass2AliasElimination Constant right-side identified [0] (byte*) malloc::mem#0 ← (const byte*) HEAP_TOP#0 - (const word) malloc::size#0 -Constant right-side identified [77] (byte~) clock_start::$5 ← (const byte) clock_start::$6 | (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -Constant right-side identified [108] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff -Constant right-side identified [111] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 -Constant right-side identified [124] (word~) main::toD0182_$1#0 ← (const word) main::toD0182_$0#0 & (word) $3fff -Constant right-side identified [127] (byte~) main::toD0182_$5#0 ← > (const word) main::toD0182_$4#0 +Constant right-side identified [78] (byte~) clock_start::$5 ← (const byte) clock_start::$6 | (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 +Constant right-side identified [109] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff +Constant right-side identified [112] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 +Constant right-side identified [125] (word~) main::toD0182_$1#0 ← (const word) main::toD0182_$0#0 & (word) $3fff +Constant right-side identified [128] (byte~) main::toD0182_$5#0 ← > (const word) main::toD0182_$4#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) malloc::mem#0 = HEAP_TOP#0-malloc::size#0 Constant (const byte) clock_start::$3 = CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 @@ -2291,7 +2318,7 @@ Rewriting multiplication to use shift [24] (byte~) init_squares::$3 ← (byte) i Rewriting multiplication to use shift [31] (byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD Rewriting division to use shift [39] (word~) sqrt::$1 ← (word~) sqrt::$3 / (const byte) SIZEOF_WORD Rewriting multiplication to use shift [112] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2 -Rewriting multiplication to use shift [123] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [123] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with different constant siblings (const void*) malloc::return#2 Inlining constant with var siblings (const byte) bsearch16u::num#2 @@ -2365,12 +2392,14 @@ Constant inlined init_squares::$2 = (const byte) NUM_SQUARES#3-(byte) 1 Successful SSA optimization Pass2ConstantInlining Simplifying constant integer increment ++0 Successful SSA optimization Pass2ConstantSimplification -Added new block during phi lifting bsearch16u::@18(between bsearch16u::@9 and bsearch16u::@10) +Added new block during phi lifting bsearch16u::@18(between bsearch16u::@6 and bsearch16u::@7) +Added new block during phi lifting bsearch16u::@19(between bsearch16u::@9 and bsearch16u::@10) Added new block during phi lifting init_squares::@4(between init_squares::@1 and init_squares::@1) Added new block during phi lifting init_font_hex::@7(between init_font_hex::@5 and init_font_hex::@1) Added new block during phi lifting init_font_hex::@8(between init_font_hex::@4 and init_font_hex::@2) Added new block during phi lifting init_font_hex::@9(between init_font_hex::@3 and init_font_hex::@3) Added new block during phi lifting init_dist_screen::@23(between init_dist_screen::@7 and init_dist_screen::@1) +Added new block during phi lifting init_dist_screen::@24(between init_dist_screen::@5 and init_dist_screen::@6) Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @12 @@ -2395,7 +2424,9 @@ Adding NOP phi() at start of print_word_at::@2 Adding NOP phi() at start of print_byte_at::@2 Adding NOP phi() at start of init_dist_screen Adding NOP phi() at start of init_dist_screen::@19 +Adding NOP phi() at start of init_dist_screen::@5_1 Adding NOP phi() at start of bsearch16u +Adding NOP phi() at start of bsearch16u::@6_1 Adding NOP phi() at start of init_squares Adding NOP phi() at start of init_squares::@3 Adding NOP phi() at start of malloc @@ -2406,9 +2437,9 @@ Calls in [main] to init_font_hex:12 clock_start:17 init_dist_screen:19 clock:21 Calls in [print_dword_at] to print_word_at:34 print_word_at:37 Calls in [print_word_at] to print_byte_at:45 print_byte_at:50 Calls in [print_byte_at] to print_char_at:59 print_char_at:65 -Calls in [init_dist_screen] to init_squares:74 sqr:84 sqr:104 sqrt:109 -Calls in [sqrt] to bsearch16u:125 -Calls in [init_squares] to malloc:165 +Calls in [init_dist_screen] to init_squares:74 sqr:84 sqr:96 sqrt:101 +Calls in [sqrt] to bsearch16u:126 +Calls in [init_squares] to malloc:167 Created 31 initial phi equivalence classes Coalesced [33] print_word_at::w#4 ← print_word_at::w#0 @@ -2423,37 +2454,37 @@ Coalesced [63] print_char_at::ch#4 ← print_char_at::ch#1 Coalesced [64] print_char_at::at#4 ← print_char_at::at#1 Coalesced [80] init_dist_screen::yd#2 ← init_dist_screen::$5 Coalesced [83] sqr::val#4 ← sqr::val#0 -Coalesced [94] init_dist_screen::y#15 ← init_dist_screen::y#1 -Coalesced [95] init_dist_screen::screen_topline#15 ← init_dist_screen::screen_topline#1 -Coalesced [96] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#1 -Coalesced [100] init_dist_screen::xd#2 ← init_dist_screen::$14 -Coalesced [103] sqr::val#3 ← sqr::val#1 -Coalesced [118] init_dist_screen::x#9 ← init_dist_screen::x#1 -Coalesced [119] init_dist_screen::xb#9 ← init_dist_screen::xb#1 -Coalesced [121] init_dist_screen::xd#1 ← init_dist_screen::$16 -Coalesced [123] init_dist_screen::yd#1 ← init_dist_screen::$7 -Coalesced [137] bsearch16u::return#9 ← bsearch16u::$2 -Coalesced [139] bsearch16u::return#7 ← bsearch16u::return#2 -Coalesced [142] bsearch16u::return#8 ← bsearch16u::items#2 -Not coalescing [148] bsearch16u::return#6 ← bsearch16u::pivot#0 -Coalesced [152] bsearch16u::num#10 ← bsearch16u::num#1 -Coalesced [153] bsearch16u::items#11 ← bsearch16u::items#0 -Coalesced [156] bsearch16u::num#9 ← bsearch16u::num#0 -Coalesced [157] bsearch16u::items#10 ← bsearch16u::items#8 -Coalesced [158] bsearch16u::num#11 ← bsearch16u::num#3 -Coalesced (already) [159] bsearch16u::items#12 ← bsearch16u::items#2 -Coalesced [176] init_squares::sqr#3 ← init_squares::sqr#1 -Coalesced [177] init_squares::squares#3 ← init_squares::squares#1 -Coalesced [178] init_squares::i#3 ← init_squares::i#1 -Coalesced [189] init_font_hex::charset#9 ← init_font_hex::charset#5 -Coalesced [211] init_font_hex::charset#8 ← init_font_hex::charset#0 -Coalesced [212] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 -Coalesced [213] init_font_hex::c#7 ← init_font_hex::c#1 -Coalesced (already) [214] init_font_hex::charset#10 ← init_font_hex::charset#0 -Coalesced [215] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 -Coalesced [216] init_font_hex::c1#5 ← init_font_hex::c1#1 -Coalesced [217] init_font_hex::i#3 ← init_font_hex::i#1 -Coalesced [218] init_font_hex::idx#7 ← init_font_hex::idx#2 +Coalesced [92] init_dist_screen::xd#2 ← init_dist_screen::$14 +Coalesced [95] sqr::val#3 ← sqr::val#1 +Coalesced [116] init_dist_screen::y#15 ← init_dist_screen::y#1 +Coalesced [117] init_dist_screen::screen_topline#15 ← init_dist_screen::screen_topline#1 +Coalesced [118] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#1 +Coalesced [119] init_dist_screen::x#16 ← init_dist_screen::x#1 +Coalesced [120] init_dist_screen::xb#16 ← init_dist_screen::xb#1 +Coalesced [122] init_dist_screen::xd#1 ← init_dist_screen::$16 +Coalesced [124] init_dist_screen::yd#1 ← init_dist_screen::$7 +Coalesced [141] bsearch16u::return#6 ← bsearch16u::pivot#0 +Coalesced [147] bsearch16u::num#14 ← bsearch16u::num#1 +Coalesced [148] bsearch16u::items#17 ← bsearch16u::items#0 +Coalesced [154] bsearch16u::return#9 ← bsearch16u::$2 +Coalesced [156] bsearch16u::return#7 ← bsearch16u::return#2 +Coalesced [157] bsearch16u::return#8 ← bsearch16u::items#11 +Coalesced [158] bsearch16u::num#13 ← bsearch16u::num#0 +Not coalescing [159] bsearch16u::items#16 ← bsearch16u::items#11 +Coalesced [160] bsearch16u::num#15 ← bsearch16u::num#10 +Not coalescing [161] bsearch16u::items#18 ← bsearch16u::items#10 +Coalesced [178] init_squares::sqr#3 ← init_squares::sqr#1 +Coalesced [179] init_squares::squares#3 ← init_squares::squares#1 +Coalesced [180] init_squares::i#3 ← init_squares::i#1 +Coalesced [191] init_font_hex::charset#9 ← init_font_hex::charset#5 +Coalesced [213] init_font_hex::charset#8 ← init_font_hex::charset#0 +Coalesced [214] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 +Coalesced [215] init_font_hex::c#7 ← init_font_hex::c#1 +Coalesced (already) [216] init_font_hex::charset#10 ← init_font_hex::charset#0 +Coalesced [217] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 +Coalesced [218] init_font_hex::c1#5 ← init_font_hex::c1#1 +Coalesced [219] init_font_hex::i#3 ← init_font_hex::i#1 +Coalesced [220] init_font_hex::idx#7 ← init_font_hex::idx#2 Coalesced down to 27 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @12 @@ -2470,9 +2501,12 @@ Culled Empty Block (label) print_dword_at::@2 Culled Empty Block (label) print_word_at::@2 Culled Empty Block (label) print_byte_at::@2 Culled Empty Block (label) init_dist_screen::@19 +Culled Empty Block (label) init_dist_screen::@5_1 Culled Empty Block (label) init_dist_screen::@23 +Culled Empty Block (label) init_dist_screen::@24 +Culled Empty Block (label) bsearch16u::@6_1 +Culled Empty Block (label) bsearch16u::@13 Culled Empty Block (label) bsearch16u::@1 -Culled Empty Block (label) bsearch16u::@18 Culled Empty Block (label) init_squares::@3 Culled Empty Block (label) init_squares::@4 Culled Empty Block (label) init_font_hex::@7 @@ -2486,8 +2520,9 @@ Renumbering block bsearch16u::@7 to bsearch16u::@4 Renumbering block bsearch16u::@8 to bsearch16u::@5 Renumbering block bsearch16u::@9 to bsearch16u::@6 Renumbering block bsearch16u::@10 to bsearch16u::@7 -Renumbering block bsearch16u::@13 to bsearch16u::@8 -Renumbering block bsearch16u::@15 to bsearch16u::@9 +Renumbering block bsearch16u::@15 to bsearch16u::@8 +Renumbering block bsearch16u::@18 to bsearch16u::@9 +Renumbering block bsearch16u::@19 to bsearch16u::@10 Renumbering block sqrt::@2 to sqrt::@1 Renumbering block main::@4 to main::@3 Renumbering block main::@5 to main::@4 @@ -2633,50 +2668,50 @@ init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_d to:init_dist_screen::@11 init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen::@4 [59] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - to:init_dist_screen::@5 -init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@13 - [60] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@11/(byte) $27 init_dist_screen::@13/(byte) init_dist_screen::xb#1 ) - [60] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@13/(byte) init_dist_screen::x#1 ) - [61] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 - to:init_dist_screen::@7 -init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 - [62] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 - [63] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 - [64] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [65] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 - to:init_dist_screen::@return -init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 - [66] return - to:@return -init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [67] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [68] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 + to:init_dist_screen::@6 +init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@5 + [60] (byte) init_dist_screen::xb#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#1 init_dist_screen::@11/(byte) $27 ) + [60] (byte) init_dist_screen::x#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#1 init_dist_screen::@11/(byte) 0 ) + [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 + [62] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 - [69] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [63] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9 - [70] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) - [71] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [72] call sqr - [73] (word) sqr::return#3 ← (word) sqr::return#0 + [64] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) + [65] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [66] call sqr + [67] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@10 - [74] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [75] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [76] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [77] call sqrt - [78] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [69] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [71] call sqrt + [72] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@13 init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@12 - [79] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [80] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [81] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [82] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [83] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [84] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [85] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [73] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [74] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [75] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [76] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [77] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [78] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 + [79] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 to:init_dist_screen::@5 +init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@13 + [80] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 + to:init_dist_screen::@7 +init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 + [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 + [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 + [83] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [84] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 + to:init_dist_screen::@return +init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 + [85] return + to:@return init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 [86] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@10 @@ -2699,131 +2734,134 @@ sqrt::@return: scope:[sqrt] from sqrt::@1 to:@return bsearch16u: scope:[bsearch16u] from sqrt [96] phi() + to:bsearch16u::@4 +bsearch16u::@4: scope:[bsearch16u] from bsearch16u bsearch16u::@9 + [97] (word*) bsearch16u::items#10 ← phi( bsearch16u::@9/(word*~) bsearch16u::items#16 bsearch16u/(const word*) SQUARES#1 ) + [97] (byte) bsearch16u::num#10 ← phi( bsearch16u::@9/(byte) bsearch16u::num#0 bsearch16u/(const byte) NUM_SQUARES#3 ) + [98] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 + [99] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [100] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 + [101] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [102] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 + to:bsearch16u::@return +bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@4 + [103] (word*) bsearch16u::return#1 ← phi( bsearch16u::@4/(word*) bsearch16u::pivot#0 bsearch16u::@2/(word*) bsearch16u::return#2 ) + [104] return + to:@return +bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 + [105] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 + to:bsearch16u::@8 +bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@6 + [106] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [107] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 + to:bsearch16u::@7 +bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@10 bsearch16u::@8 + [108] (word*) bsearch16u::items#11 ← phi( bsearch16u::@8/(word*) bsearch16u::items#0 bsearch16u::@10/(word*~) bsearch16u::items#18 ) + [108] (byte) bsearch16u::num#5 ← phi( bsearch16u::@8/(byte) bsearch16u::num#1 bsearch16u::@10/(byte) bsearch16u::num#10 ) + [109] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 to:bsearch16u::@3 -bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [97] (word*) bsearch16u::items#2 ← phi( bsearch16u/(const word*) SQUARES#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [97] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [98] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 +bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@7 + [110] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + [111] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD + [112] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD to:bsearch16u::@2 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 - [101] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [113] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#11 bsearch16u::@1/(word*~) bsearch16u::$2 ) to:bsearch16u::@return -bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 - [102] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) - [103] return - to:@return -bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [107] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [108] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 - to:bsearch16u::@8 -bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 - to:bsearch16u::@return -bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [110] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 - to:bsearch16u::@9 -bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [112] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 +bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@3 + [114] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 + to:bsearch16u::@4 +bsearch16u::@10: scope:[bsearch16u] from bsearch16u::@6 + [115] (word*~) bsearch16u::items#18 ← (word*) bsearch16u::items#10 to:bsearch16u::@7 -bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [113] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [113] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [114] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 - to:bsearch16u::@3 sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 - [115] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) - [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 - [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) + [116] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) + [117] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 + [118] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) to:sqr::@return sqr::@return: scope:[sqr] from sqr - [118] return + [119] return to:@return init_squares: scope:[init_squares] from init_dist_screen - [119] phi() - [120] call malloc + [120] phi() + [121] call malloc to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares init_squares::@1 - [121] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares/(byte) 0 ) - [121] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares/(const word*) SQUARES#1 ) - [121] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares/(byte) 0 ) - [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 - [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD - [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 - [125] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 - [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 - [127] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 - [128] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 + [122] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares/(byte) 0 ) + [122] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares/(const word*) SQUARES#1 ) + [122] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares/(byte) 0 ) + [123] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 + [124] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD + [125] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 + [126] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 + [127] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 + [128] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 + [129] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 - [129] return + [130] return to:@return malloc: scope:[malloc] from init_squares - [130] phi() + [131] phi() to:malloc::@return malloc::@return: scope:[malloc] from malloc - [131] return + [132] return to:@return clock_start: scope:[clock_start] from main::@1 - [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 - [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 - [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff - [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 - [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 + [133] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 + [134] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 + [135] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff + [136] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 + [137] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start - [137] return + [138] return to:@return init_font_hex: scope:[init_font_hex] from main - [138] phi() + [139] phi() to:init_font_hex::@1 init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5 - [139] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) - [139] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) - [139] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) + [140] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) + [140] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) + [140] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) to:init_font_hex::@2 init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4 - [140] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) - [140] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) - [140] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) - [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 + [141] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) + [141] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) + [141] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) + [142] *((byte*) init_font_hex::charset#2) ← (byte) 0 to:init_font_hex::@3 init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3 - [142] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) - [142] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) - [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 - [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 - [145] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 - [146] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 - [147] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 - [148] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 - [149] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 + [143] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) + [143] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) + [144] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 + [145] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 + [146] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 + [147] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 + [148] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 + [149] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 + [150] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 to:init_font_hex::@4 init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3 - [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 - [151] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 - [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 - [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 - [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 - [155] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 - [156] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 + [151] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 + [152] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 + [153] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 + [154] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 + [155] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 + [156] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 + [157] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 to:init_font_hex::@5 init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4 - [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 - [158] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 - [159] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 + [158] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 + [159] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 + [160] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 to:init_font_hex::@return init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 - [160] return + [161] return to:@return @@ -2850,24 +2888,25 @@ VARIABLE REGISTER WEIGHTS (byte~) bsearch16u::$6 2002.0 (word*) bsearch16u::items (word*) bsearch16u::items#0 1001.0 -(word*) bsearch16u::items#2 334.33333333333337 -(word*) bsearch16u::items#8 1501.5 +(word*) bsearch16u::items#10 429.0 +(word*) bsearch16u::items#11 752.25 +(word*~) bsearch16u::items#16 2002.0 +(word*~) bsearch16u::items#18 2002.0 (word) bsearch16u::key -(word) bsearch16u::key#0 0.2857142857142857 +(word) bsearch16u::key#0 0.25 (byte) bsearch16u::num -(byte) bsearch16u::num#0 2002.0 +(byte) bsearch16u::num#0 1001.0 (byte) bsearch16u::num#1 2002.0 -(byte) bsearch16u::num#3 556.1111111111111 +(byte) bsearch16u::num#10 444.8888888888889 (byte) bsearch16u::num#5 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 501.0 +(word*) bsearch16u::pivot#0 750.75 (signed word) bsearch16u::result (signed word) bsearch16u::result#0 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 2.0 +(word*) bsearch16u::return#1 335.00000000000006 (word*) bsearch16u::return#2 6.0 (word*) bsearch16u::return#3 4.0 -(word*~) bsearch16u::return#6 4.0 (dword()) clock() (dword) clock::return (dword) clock::return#0 1.3333333333333333 @@ -2886,18 +2925,18 @@ VARIABLE REGISTER WEIGHTS (byte*) init_dist_screen::screen (byte*) init_dist_screen::screen_bottomline (byte*) init_dist_screen::screen_bottomline#1 7.333333333333333 -(byte*) init_dist_screen::screen_bottomline#11 6.787878787878787 +(byte*) init_dist_screen::screen_bottomline#11 6.787878787878788 (byte*) init_dist_screen::screen_topline (byte*) init_dist_screen::screen_topline#1 5.5 (byte*) init_dist_screen::screen_topline#11 7.0 (byte) init_dist_screen::x (byte) init_dist_screen::x#1 101.0 -(byte) init_dist_screen::x#2 30.3 +(byte) init_dist_screen::x#10 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 202.0 -(byte) init_dist_screen::xb#2 19.238095238095237 +(byte) init_dist_screen::xb#1 101.0 +(byte) init_dist_screen::xb#10 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 303.0 (word) init_dist_screen::xds @@ -3049,11 +3088,12 @@ Initial phi equivalence classes [ init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 ] [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 ] [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -[ init_dist_screen::x#2 init_dist_screen::x#1 ] -[ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +[ init_dist_screen::x#10 init_dist_screen::x#1 ] +[ init_dist_screen::xb#10 init_dist_screen::xb#1 ] [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +[ bsearch16u::items#10 bsearch16u::items#16 ] +[ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 ] +[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] [ sqr::val#2 sqr::val#1 sqr::val#0 ] [ init_squares::sqr#2 init_squares::sqr#1 ] [ init_squares::squares#2 init_squares::squares#1 ] @@ -3090,7 +3130,6 @@ Added variable sqrt::$1 to zero page equivalence class [ sqrt::$1 ] Added variable sqrt::return#0 to zero page equivalence class [ sqrt::return#0 ] Added variable bsearch16u::$6 to zero page equivalence class [ bsearch16u::$6 ] Added variable bsearch16u::$16 to zero page equivalence class [ bsearch16u::$16 ] -Added variable bsearch16u::pivot#0 to zero page equivalence class [ bsearch16u::pivot#0 ] Added variable bsearch16u::result#0 to zero page equivalence class [ bsearch16u::result#0 ] Added variable sqr::$0 to zero page equivalence class [ sqr::$0 ] Added variable sqr::return#0 to zero page equivalence class [ sqr::return#0 ] @@ -3111,11 +3150,12 @@ Complete equivalence classes [ init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 ] [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 ] [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -[ init_dist_screen::x#2 init_dist_screen::x#1 ] -[ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +[ init_dist_screen::x#10 init_dist_screen::x#1 ] +[ init_dist_screen::xb#10 init_dist_screen::xb#1 ] [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +[ bsearch16u::items#10 bsearch16u::items#16 ] +[ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 ] +[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] [ sqr::val#2 sqr::val#1 sqr::val#0 ] [ init_squares::sqr#2 init_squares::sqr#1 ] [ init_squares::squares#2 init_squares::squares#1 ] @@ -3152,7 +3192,6 @@ Complete equivalence classes [ sqrt::return#0 ] [ bsearch16u::$6 ] [ bsearch16u::$16 ] -[ bsearch16u::pivot#0 ] [ bsearch16u::result#0 ] [ sqr::$0 ] [ sqr::return#0 ] @@ -3172,48 +3211,48 @@ Allocated zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Allocated zp ZP_WORD:15 [ init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 ] Allocated zp ZP_WORD:17 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 ] Allocated zp ZP_BYTE:19 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Allocated zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Allocated zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Allocated zp ZP_BYTE:20 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Allocated zp ZP_BYTE:21 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] Allocated zp ZP_BYTE:22 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -Allocated zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -Allocated zp ZP_BYTE:25 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Allocated zp ZP_BYTE:26 [ sqr::val#2 sqr::val#1 sqr::val#0 ] -Allocated zp ZP_WORD:27 [ init_squares::sqr#2 init_squares::sqr#1 ] -Allocated zp ZP_WORD:29 [ init_squares::squares#2 init_squares::squares#1 ] -Allocated zp ZP_BYTE:31 [ init_squares::i#2 init_squares::i#1 ] -Allocated zp ZP_WORD:32 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] -Allocated zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] -Allocated zp ZP_WORD:35 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] -Allocated zp ZP_WORD:37 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] -Allocated zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Allocated zp ZP_BYTE:40 [ init_font_hex::i#2 init_font_hex::i#1 ] -Allocated zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] -Allocated zp ZP_DWORD:42 [ clock::return#2 ] -Allocated zp ZP_DWORD:46 [ main::$4 ] -Allocated zp ZP_DWORD:50 [ main::cyclecount#0 ] -Allocated zp ZP_DWORD:54 [ print_dword_at::dw#0 ] -Allocated zp ZP_BYTE:58 [ print_byte_at::$0 ] -Allocated zp ZP_BYTE:59 [ print_byte_at::$2 ] -Allocated zp ZP_DWORD:60 [ clock::return#0 ] -Allocated zp ZP_BYTE:64 [ init_dist_screen::y2#0 ] -Allocated zp ZP_WORD:65 [ sqr::return#2 ] -Allocated zp ZP_WORD:67 [ init_dist_screen::yds#0 ] -Allocated zp ZP_BYTE:69 [ init_dist_screen::x2#0 ] -Allocated zp ZP_WORD:70 [ sqr::return#3 ] -Allocated zp ZP_WORD:72 [ init_dist_screen::xds#0 ] -Allocated zp ZP_WORD:74 [ init_dist_screen::ds#0 ] -Allocated zp ZP_WORD:76 [ sqrt::val#0 ] -Allocated zp ZP_BYTE:78 [ sqrt::return#2 ] -Allocated zp ZP_BYTE:79 [ init_dist_screen::d#0 ] -Allocated zp ZP_WORD:80 [ bsearch16u::key#0 ] -Allocated zp ZP_WORD:82 [ bsearch16u::return#3 ] -Allocated zp ZP_WORD:84 [ sqrt::found#0 ] -Allocated zp ZP_WORD:86 [ sqrt::$3 ] -Allocated zp ZP_WORD:88 [ sqrt::$1 ] -Allocated zp ZP_BYTE:90 [ sqrt::return#0 ] -Allocated zp ZP_BYTE:91 [ bsearch16u::$6 ] -Allocated zp ZP_BYTE:92 [ bsearch16u::$16 ] -Allocated zp ZP_WORD:93 [ bsearch16u::pivot#0 ] +Allocated zp ZP_WORD:23 [ bsearch16u::items#10 bsearch16u::items#16 ] +Allocated zp ZP_WORD:25 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 ] +Allocated zp ZP_BYTE:27 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] +Allocated zp ZP_BYTE:28 [ sqr::val#2 sqr::val#1 sqr::val#0 ] +Allocated zp ZP_WORD:29 [ init_squares::sqr#2 init_squares::sqr#1 ] +Allocated zp ZP_WORD:31 [ init_squares::squares#2 init_squares::squares#1 ] +Allocated zp ZP_BYTE:33 [ init_squares::i#2 init_squares::i#1 ] +Allocated zp ZP_WORD:34 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +Allocated zp ZP_BYTE:36 [ init_font_hex::c#6 init_font_hex::c#1 ] +Allocated zp ZP_WORD:37 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +Allocated zp ZP_WORD:39 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +Allocated zp ZP_BYTE:41 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Allocated zp ZP_BYTE:42 [ init_font_hex::i#2 init_font_hex::i#1 ] +Allocated zp ZP_BYTE:43 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Allocated zp ZP_DWORD:44 [ clock::return#2 ] +Allocated zp ZP_DWORD:48 [ main::$4 ] +Allocated zp ZP_DWORD:52 [ main::cyclecount#0 ] +Allocated zp ZP_DWORD:56 [ print_dword_at::dw#0 ] +Allocated zp ZP_BYTE:60 [ print_byte_at::$0 ] +Allocated zp ZP_BYTE:61 [ print_byte_at::$2 ] +Allocated zp ZP_DWORD:62 [ clock::return#0 ] +Allocated zp ZP_BYTE:66 [ init_dist_screen::y2#0 ] +Allocated zp ZP_WORD:67 [ sqr::return#2 ] +Allocated zp ZP_WORD:69 [ init_dist_screen::yds#0 ] +Allocated zp ZP_BYTE:71 [ init_dist_screen::x2#0 ] +Allocated zp ZP_WORD:72 [ sqr::return#3 ] +Allocated zp ZP_WORD:74 [ init_dist_screen::xds#0 ] +Allocated zp ZP_WORD:76 [ init_dist_screen::ds#0 ] +Allocated zp ZP_WORD:78 [ sqrt::val#0 ] +Allocated zp ZP_BYTE:80 [ sqrt::return#2 ] +Allocated zp ZP_BYTE:81 [ init_dist_screen::d#0 ] +Allocated zp ZP_WORD:82 [ bsearch16u::key#0 ] +Allocated zp ZP_WORD:84 [ bsearch16u::return#3 ] +Allocated zp ZP_WORD:86 [ sqrt::found#0 ] +Allocated zp ZP_WORD:88 [ sqrt::$3 ] +Allocated zp ZP_WORD:90 [ sqrt::$1 ] +Allocated zp ZP_BYTE:92 [ sqrt::return#0 ] +Allocated zp ZP_BYTE:93 [ bsearch16u::$6 ] +Allocated zp ZP_BYTE:94 [ bsearch16u::$16 ] Allocated zp ZP_WORD:95 [ bsearch16u::result#0 ] Allocated zp ZP_BYTE:97 [ sqr::$0 ] Allocated zp ZP_WORD:98 [ sqr::return#0 ] @@ -3278,10 +3317,10 @@ main: { .label BASE_CHARSET = $1000 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .const toD0182_return = (>(BASE_SCREEN&$3fff)*4)|(>BASE_CHARSET)/4&$f - .label _4 = $2e - .label cyclecount = $32 + .label _4 = $30 + .label cyclecount = $34 // [5] call init_font_hex - // [138] phi from main to init_font_hex [phi:main->init_font_hex] + // [139] phi from main to init_font_hex [phi:main->init_font_hex] init_font_hex_from_main: jsr init_font_hex // [6] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -3378,9 +3417,9 @@ main: { } // print_dword_at // Print a dword as HEX at a specific position -// print_dword_at(dword zeropage($36) dw) +// print_dword_at(dword zeropage($38) dw) print_dword_at: { - .label dw = $36 + .label dw = $38 // [21] (word) print_word_at::w#0 ← > (dword) print_dword_at::dw#0 -- vwuz1=_hi_vduz2 lda dw+2 sta print_word_at.w @@ -3470,8 +3509,8 @@ print_word_at: { // Print a byte as HEX at a specific position // print_byte_at(byte zeropage(6) b, byte* zeropage(9) at) print_byte_at: { - .label _0 = $3a - .label _2 = $3b + .label _0 = $3c + .label _2 = $3d .label b = 6 .label at = 9 // [35] (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#2 >> (byte) 4 -- vbuz1=vbuz2_ror_4 @@ -3547,8 +3586,8 @@ print_char_at: { // Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program). // This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start() clock: { - .label return = $3c - .label return_2 = $2a + .label return = $3e + .label return_2 = $2c // [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) -- vduz1=vduc1_minus__deref_pduc2 lda #<$ffffffff sec @@ -3577,21 +3616,21 @@ init_dist_screen: { .label _7 = $13 .label _14 = $16 .label _16 = $16 - .label y2 = $40 + .label y2 = $42 .label yd = $13 - .label yds = $43 - .label x2 = $45 + .label yds = $45 + .label x2 = $47 .label screen_topline = $f .label screen_bottomline = $11 .label y = $e .label xd = $16 - .label xds = $48 - .label ds = $4a - .label d = $4f + .label xds = $4a + .label ds = $4c + .label d = $51 .label x = $14 .label xb = $15 // [50] call init_squares - // [119] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [120] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares // [51] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1] @@ -3645,9 +3684,9 @@ init_dist_screen: { lda yd sta sqr.val // [57] call sqr - // [115] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [116] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from_b4: - // [115] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [116] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // [58] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return @@ -3662,85 +3701,54 @@ init_dist_screen: { sta yds lda sqr.return_2+1 sta yds+1 - // [60] phi from init_dist_screen::@11 to init_dist_screen::@5 [phi:init_dist_screen::@11->init_dist_screen::@5] - b5_from_b11: - // [60] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@11->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [60] phi from init_dist_screen::@11 to init_dist_screen::@6 [phi:init_dist_screen::@11->init_dist_screen::@6] + b6_from_b11: + // [60] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@11->init_dist_screen::@6#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [60] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [60] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@6#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b5 - // init_dist_screen::@5 - b5: - // [61] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b6 - jmp b7 - // init_dist_screen::@7 - b7: - // [62] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - // [63] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - // [64] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 - inc y - // [65] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b7 - jmp breturn - // init_dist_screen::@return - breturn: - // [66] return - rts + jmp b6 + // [60] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6] + b6_from_b5: + // [60] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy + // [60] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy + jmp b6 // init_dist_screen::@6 b6: - // [67] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta x2 - // [68] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuz1_ge_vbuc1_then_la1 + // [62] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuz1_ge_vbuc1_then_la1 lda x2 cmp #$27 bcs b8 jmp b9 // init_dist_screen::@9 b9: - // [69] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 + // [63] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc x2 sta _14 - // [70] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [64] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] b10_from_b8: b10_from_b9: - // [70] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [64] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy jmp b10 // init_dist_screen::@10 b10: - // [71] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 + // [65] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 lda xd sta sqr.val - // [72] call sqr - // [115] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] + // [66] call sqr + // [116] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] sqr_from_b10: - // [115] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy + // [116] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr - // [73] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [67] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return sta sqr.return_3 lda sqr.return+1 @@ -3748,12 +3756,12 @@ init_dist_screen: { jmp b12 // init_dist_screen::@12 b12: - // [74] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 + // [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 lda sqr.return_3 sta xds lda sqr.return_3+1 sta xds+1 - // [75] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 + // [69] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 lda xds clc adc yds @@ -3761,47 +3769,79 @@ init_dist_screen: { lda xds+1 adc yds+1 sta ds+1 - // [76] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 + // [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 lda ds sta sqrt.val lda ds+1 sta sqrt.val+1 - // [77] call sqrt + // [71] call sqrt jsr sqrt - // [78] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 + // [72] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 lda sqrt.return sta sqrt.return_2 jmp b13 // init_dist_screen::@13 b13: - // [79] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 + // [73] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 lda sqrt.return_2 sta d - // [80] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [74] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy x sta (screen_topline),y - // [81] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [75] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy x sta (screen_bottomline),y - // [82] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [76] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy xb sta (screen_topline),y - // [83] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [77] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy xb sta (screen_bottomline),y - // [84] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [78] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 inc x - // [85] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [79] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 dec xb - // [60] phi from init_dist_screen::@13 to init_dist_screen::@5 [phi:init_dist_screen::@13->init_dist_screen::@5] - b5_from_b13: - // [60] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@13->init_dist_screen::@5#0] -- register_copy - // [60] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@13->init_dist_screen::@5#1] -- register_copy jmp b5 + // init_dist_screen::@5 + b5: + // [80] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b6_from_b5 + jmp b7 + // init_dist_screen::@7 + b7: + // [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + // [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + // [83] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + inc y + // [84] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b7 + jmp breturn + // init_dist_screen::@return + breturn: + // [85] return + rts // init_dist_screen::@8 b8: // [86] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 @@ -3821,14 +3861,14 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($4c) val) +// sqrt(word zeropage($4e) val) sqrt: { - .label _1 = $58 - .label _3 = $56 - .label found = $54 - .label return = $5a - .label val = $4c - .label return_2 = $4e + .label _1 = $5a + .label _3 = $58 + .label found = $56 + .label return = $5c + .label val = $4e + .label return_2 = $50 // [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 lda val sta bsearch16u.key @@ -3881,38 +3921,115 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($50) key, word* zeropage($17) items, byte zeropage($19) num) +// bsearch16u(word zeropage($52) key, word* zeropage($19) items, byte zeropage($1b) num) bsearch16u: { - .label _2 = $17 - .label _6 = $5b - .label _16 = $5c - .label pivot = $5d + .label _2 = $19 + .label _6 = $5d + .label _16 = $5e + .label pivot = $19 .label result = $5f - .label return = $17 - .label num = $19 - .label items = $17 - .label key = $50 - .label return_3 = $52 - // [97] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - b3_from_bsearch16u: - // [97] phi (word*) bsearch16u::items#2 = (const word*) SQUARES#1 [phi:bsearch16u->bsearch16u::@3#0] -- pwuz1=pwuc1 + .label return = $19 + .label num = $1b + .label items = $19 + .label key = $52 + .label return_3 = $54 + .label items_10 = $17 + .label items_16 = $17 + // [97] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4] + b4_from_bsearch16u: + // [97] phi (word*) bsearch16u::items#10 = (const word*) SQUARES#1 [phi:bsearch16u->bsearch16u::@4#0] -- pwuz1=pwuc1 lda #SQUARES - sta items+1 - // [97] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 + sta items_10+1 + // [97] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuz1=vbuc1 lda #NUM_SQUARES sta num + jmp b4 + // bsearch16u::@4 + b4: + // [98] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuz1=vbuz2_ror_1 + lda num + lsr + sta _6 + // [99] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda _6 + asl + sta _16 + // [100] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 + lda _16 + clc + adc items_10 + sta pivot + lda #0 + adc items_10+1 + sta pivot+1 + // [101] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + sec + lda key + ldy #0 + sbc (pivot),y + sta result + lda key+1 + iny + sbc (pivot),y + sta result+1 + // [102] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + lda result+1 + bne b6 + lda result + bne b6 + // [103] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return] + breturn_from_b2: + breturn_from_b4: + // [103] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy + jmp breturn + // bsearch16u::@return + breturn: + // [104] return + rts + // bsearch16u::@6 + b6: + // [105] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 + lda result+1 + bmi b10 + bne !+ + lda result + beq b10 + !: + jmp b8 + // bsearch16u::@8 + b8: + // [106] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + lda #1*SIZEOF_WORD + clc + adc items + sta items + bcc !+ + inc items+1 + !: + // [107] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuz1=_dec_vbuz1 + dec num + // [108] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7] + b7_from_b10: + b7_from_b8: + // [108] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#18 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy + // [108] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy + jmp b7 + // bsearch16u::@7 + b7: + // [109] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + lsr num jmp b3 // bsearch16u::@3 b3: - // [98] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 + // [110] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuz1_gt_0_then_la1 lda num - bne b4 + bne b9 jmp b5 // bsearch16u::@5 b5: - // [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [111] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp key+1 @@ -3926,7 +4043,7 @@ bsearch16u: { jmp b1 // bsearch16u::@1 b1: - // [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [112] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -3934,117 +4051,50 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [101] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [113] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] b2_from_b1: b2_from_b5: - // [101] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [113] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp b2 // bsearch16u::@2 b2: - // [102] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - breturn_from_b2: - breturn_from_b8: - // [102] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy - jmp breturn - // bsearch16u::@return - breturn: - // [103] return - rts - // bsearch16u::@4 - b4: - // [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 - lda num - lsr - sta _6 - // [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 - lda _6 - asl - sta _16 - // [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 - lda _16 - clc - adc items - sta pivot - lda #0 - adc items+1 - sta pivot+1 - // [107] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 - sec - lda key - ldy #0 - sbc (pivot),y - sta result - lda key+1 - iny - sbc (pivot),y - sta result+1 - // [108] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 - lda result+1 - bne b6 - lda result - bne b6 - jmp b8 - // bsearch16u::@8 - b8: - // [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 - lda pivot - sta return - lda pivot+1 - sta return+1 - jmp breturn_from_b8 - // bsearch16u::@6 - b6: - // [110] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 - lda result+1 - bmi b7_from_b6 - bne !+ - lda result - beq b7_from_b6 - !: - jmp b9 + jmp breturn_from_b2 // bsearch16u::@9 b9: - // [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 - lda #1*SIZEOF_WORD - clc - adc pivot + // [114] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 + lda items + sta items_16 + lda items+1 + sta items_16+1 + // [97] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4] + b4_from_b9: + // [97] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy + // [97] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy + jmp b4 + // bsearch16u::@10 + b10: + // [115] (word*~) bsearch16u::items#18 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 + lda items_10 sta items - lda #0 - adc pivot+1 + lda items_10+1 sta items+1 - // [112] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 - dec num - // [113] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - b7_from_b6: - b7_from_b9: - // [113] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [113] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy - jmp b7 - // bsearch16u::@7 - b7: - // [114] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 - lsr num - // [97] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - b3_from_b7: - // [97] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [97] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy - jmp b3 + jmp b7_from_b10 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() -// sqr(byte zeropage($1a) val) +// sqr(byte zeropage($1c) val) sqr: { .label _0 = $61 .label return = $62 - .label val = $1a - .label return_2 = $41 - .label return_3 = $46 - // [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + .label val = $1c + .label return_2 = $43 + .label return_3 = $48 + // [117] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda val asl sta _0 - // [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuc1_derefidx_vbuz2 + // [118] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuc1_derefidx_vbuz2 ldy _0 lda SQUARES,y sta return @@ -4053,7 +4103,7 @@ sqr: { jmp breturn // sqr::@return breturn: - // [118] return + // [119] return rts } // init_squares @@ -4062,45 +4112,45 @@ sqr: { init_squares: { .label _3 = $64 .label _4 = $65 - .label squares = $1d - .label sqr = $1b - .label i = $1f - // [120] call malloc - // [130] phi from init_squares to malloc [phi:init_squares->malloc] + .label squares = $1f + .label sqr = $1d + .label i = $21 + // [121] call malloc + // [131] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: jsr malloc - // [121] phi from init_squares to init_squares::@1 [phi:init_squares->init_squares::@1] + // [122] phi from init_squares to init_squares::@1 [phi:init_squares->init_squares::@1] b1_from_init_squares: - // [121] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares->init_squares::@1#0] -- vbuz1=vbuc1 + // [122] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares->init_squares::@1#0] -- vbuz1=vbuc1 lda #0 sta i - // [121] phi (word*) init_squares::squares#2 = (const word*) SQUARES#1 [phi:init_squares->init_squares::@1#1] -- pwuz1=pwuc1 + // [122] phi (word*) init_squares::squares#2 = (const word*) SQUARES#1 [phi:init_squares->init_squares::@1#1] -- pwuz1=pwuc1 lda #SQUARES sta squares+1 - // [121] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vbuc1 + // [122] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vbuc1 lda #<0 sta sqr lda #>0 sta sqr+1 jmp b1 - // [121] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [122] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] b1_from_b1: - // [121] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [121] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [121] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [122] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [122] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [122] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy jmp b1 // init_squares::@1 b1: - // [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [123] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y iny lda sqr+1 sta (squares),y - // [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [124] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -4108,15 +4158,15 @@ init_squares: { bcc !+ inc squares+1 !: - // [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [125] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _3 - // [125] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [126] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy _3 iny sty _4 - // [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 + // [127] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 lda _4 clc adc sqr @@ -4124,16 +4174,16 @@ init_squares: { bcc !+ inc sqr+1 !: - // [127] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 + // [128] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 inc i - // [128] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 + // [129] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_SQUARES-1+1 cmp i bne b1_from_b1 jmp breturn // init_squares::@return breturn: - // [129] return + // [130] return rts } // malloc @@ -4146,21 +4196,21 @@ malloc: { jmp breturn // malloc::@return breturn: - // [131] return + // [132] return rts } // clock_start // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 + // [133] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #CIA_TIMER_CONTROL_CONTINUOUS sta CIA2_TIMER_A_CONTROL - // [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 + // [134] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A sta CIA2_TIMER_B_CONTROL - // [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 + // [135] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB lda #>$ffffffff @@ -4169,98 +4219,98 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 + // [136] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A sta CIA2_TIMER_B_CONTROL - // [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 + // [137] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START sta CIA2_TIMER_A_CONTROL jmp breturn // clock_start::@return breturn: - // [137] return + // [138] return rts } // init_font_hex // Make charset from proto chars -// init_font_hex(byte* zeropage($23) charset) +// init_font_hex(byte* zeropage($25) charset) init_font_hex: { .label _0 = $66 .label _1 = $67 .label _2 = $68 - .label idx = $29 - .label i = $28 + .label idx = $2b + .label i = $2a .label idx_3 = $69 - .label proto_lo = $25 - .label charset = $23 - .label c1 = $27 - .label proto_hi = $20 - .label c = $22 - // [139] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] + .label proto_lo = $27 + .label charset = $25 + .label c1 = $29 + .label proto_hi = $22 + .label c = $24 + // [140] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] b1_from_init_font_hex: - // [139] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 + // [140] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 lda #0 sta c - // [139] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 + // [140] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta proto_hi+1 - // [139] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 + // [140] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 lda #CHARSET sta charset+1 jmp b1 - // [139] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] + // [140] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] b1_from_b5: - // [139] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy - // [139] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy - // [139] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy + // [140] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy + // [140] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy + // [140] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy jmp b1 // init_font_hex::@1 b1: - // [140] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] + // [141] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] b2_from_b1: - // [140] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 + // [141] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 lda #0 sta c1 - // [140] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 + // [141] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta proto_lo+1 - // [140] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy + // [141] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy jmp b2 - // [140] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] + // [141] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] b2_from_b4: - // [140] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy - // [140] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy - // [140] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy + // [141] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy + // [141] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy + // [141] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy jmp b2 // init_font_hex::@2 b2: - // [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [142] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (charset),y - // [142] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] + // [143] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] b3_from_b2: - // [142] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 + // [143] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 lda #1 sta idx - // [142] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuz1=vbuc1 + // [143] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuz1=vbuc1 lda #0 sta i jmp b3 - // [142] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] + // [143] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] b3_from_b3: - // [142] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy - // [142] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy + // [143] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy + // [143] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy jmp b3 // init_font_hex::@3 b3: - // [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuz3_rol_4 + // [144] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuz3_rol_4 ldy i lda (proto_hi),y asl @@ -4268,43 +4318,43 @@ init_font_hex: { asl asl sta _0 - // [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1 + // [145] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1 ldy i lda (proto_lo),y asl sta _1 - // [145] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuz1=vbuz2_bor_vbuz3 + // [146] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuz1=vbuz2_bor_vbuz3 lda _0 ora _1 sta _2 - // [146] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuz3 + // [147] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuz3 lda _2 ldy idx sta (charset),y - // [147] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 + // [148] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 inc idx - // [148] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuz1=_inc_vbuz1 + // [149] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuz1=_inc_vbuz1 inc i - // [149] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuz1_neq_vbuc1_then_la1 + // [150] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuz1_neq_vbuc1_then_la1 lda #5 cmp i bne b3_from_b3 jmp b4 // init_font_hex::@4 b4: - // [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + // [151] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy idx sta (charset),y - // [151] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuz1=_inc_vbuz2 + // [152] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuz1=_inc_vbuz2 ldy idx iny sty idx_3 - // [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + // [153] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy idx_3 sta (charset),y - // [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + // [154] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc proto_lo @@ -4312,7 +4362,7 @@ init_font_hex: { bcc !+ inc proto_lo+1 !: - // [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [155] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc charset @@ -4320,16 +4370,16 @@ init_font_hex: { bcc !+ inc charset+1 !: - // [155] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 + // [156] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 inc c1 - // [156] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 + // [157] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp c1 bne b2_from_b4 jmp b5 // init_font_hex::@5 b5: - // [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + // [158] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc proto_hi @@ -4337,16 +4387,16 @@ init_font_hex: { bcc !+ inc proto_hi+1 !: - // [158] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 + // [159] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 inc c - // [159] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 + // [160] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp c bne b1_from_b5 jmp breturn // init_font_hex::@return breturn: - // [160] return + // [161] return rts } // File Data @@ -4373,7 +4423,7 @@ Statement [37] (byte*) print_char_at::at#0 ← (byte*) print_byte_at::at#2 [ pri Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] Statement [39] (byte~) print_byte_at::$2 ← (byte) print_byte_at::b#2 & (byte) $f [ print_byte_at::at#2 print_byte_at::$2 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::at#2 print_byte_at::$2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::at#2 print_byte_at::$2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::at#2 print_byte_at::$2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::at#2 print_byte_at::$2 ] ) always clobbers reg byte a Statement [40] (byte*) print_char_at::at#1 ← (byte*) print_byte_at::at#2 + (byte) 1 [ print_byte_at::$2 print_char_at::at#1 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::$2 print_char_at::at#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:59 [ print_byte_at::$2 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:61 [ print_byte_at::$2 ] Statement [45] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 [ ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29::print_char_at:38 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29::print_char_at:38 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32::print_char_at:38 [ print_dword_at::dw#0 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32::print_char_at:38 [ print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:29::print_char_at:42 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29::print_char_at:42 [ print_word_at::w#2 print_word_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32::print_char_at:42 [ print_dword_at::dw#0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32::print_char_at:42 [ ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] Statement [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) [ clock::return#0 ] ( main:2::clock:12 [ clock::return#0 ] ) always clobbers reg byte a @@ -4382,65 +4432,66 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ i Statement [54] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 ] ) always clobbers reg byte a Statement [58] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 ] ) always clobbers reg byte a Statement [59] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 ] ) always clobbers reg byte a -Statement [62] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [63] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [67] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [69] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 ] ) always clobbers reg byte a -Statement [73] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 ] ) always clobbers reg byte a -Statement [74] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 ] ) always clobbers reg byte a -Statement [75] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 ] ) always clobbers reg byte a -Statement [76] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 ] ) always clobbers reg byte a -Statement [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 ] ) always clobbers reg byte a -Statement [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ bsearch16u::return#3 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ sqrt::found#0 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::found#0 ] ) always clobbers reg byte a -Statement [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1 [ sqrt::$3 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::$3 ] ) always clobbers reg byte a -Statement [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ sqrt::$1 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::$1 ] ) always clobbers reg byte a -Statement [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 ] ) always clobbers reg byte a -Statement [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y +Statement [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Statement [63] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 ] ) always clobbers reg byte a +Statement [67] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 ] ) always clobbers reg byte a +Statement [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 ] ) always clobbers reg byte a +Statement [69] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 ] ) always clobbers reg byte a +Statement [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 ] ) always clobbers reg byte a +Statement [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 ] ) always clobbers reg byte a +Statement [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ bsearch16u::return#3 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ sqrt::found#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::found#0 ] ) always clobbers reg byte a +Statement [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1 [ sqrt::$3 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::$3 ] ) always clobbers reg byte a +Statement [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ sqrt::$1 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::$1 ] ) always clobbers reg byte a +Statement [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::return#0 ] ) always clobbers reg byte a +Statement [98] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:27 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] +Statement [99] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [100] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [101] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [107] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:25 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [108] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [110] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ sqr::$0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::$0 ] main:2::init_dist_screen:10::sqr:72 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::$0 ] ) always clobbers reg byte a -Statement [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 ] main:2::init_dist_screen:10::sqr:72 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 ] ) always clobbers reg byte a -Statement [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ init_squares::i#2 init_squares::i#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:31 [ init_squares::i#2 init_squares::i#1 ] -Statement [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Statement [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:40 [ init_font_hex::i#2 init_font_hex::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] -Statement [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:21 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:27 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] +Statement [102] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [105] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [106] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [111] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y +Statement [112] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [114] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a +Statement [115] (word*~) bsearch16u::items#18 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#18 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#18 ] ) always clobbers reg byte a +Statement [117] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ sqr::$0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::$0 ] main:2::init_dist_screen:10::sqr:66 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::$0 ] ) always clobbers reg byte a +Statement [118] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 ] main:2::init_dist_screen:10::sqr:66 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#0 ] ) always clobbers reg byte a +Statement [123] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ init_squares::i#2 init_squares::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ init_squares::i#2 init_squares::i#1 ] +Statement [124] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [125] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [127] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [133] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [134] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [135] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [136] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [137] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [142] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ init_font_hex::c#6 init_font_hex::c#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:36 [ init_font_hex::c#6 init_font_hex::c#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:41 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Statement [144] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:42 [ init_font_hex::i#2 init_font_hex::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:43 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Statement [145] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:102 [ init_font_hex::$0 ] -Statement [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a -Statement [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a -Statement [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a -Statement [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a -Statement [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a +Statement [151] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a +Statement [153] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a +Statement [154] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [155] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [158] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a Statement [7] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [13] (dword) clock::return#2 ← (dword) clock::return#0 [ clock::return#2 ] ( main:2 [ clock::return#2 ] ) always clobbers reg byte a Statement [14] (dword~) main::$4 ← (dword) clock::return#2 [ main::$4 ] ( main:2 [ main::$4 ] ) always clobbers reg byte a @@ -4463,54 +4514,55 @@ Statement [52] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 < Statement [54] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 ] ) always clobbers reg byte a Statement [58] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 ] ) always clobbers reg byte a Statement [59] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 ] ) always clobbers reg byte a -Statement [62] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [63] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [67] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 ] ) always clobbers reg byte a -Statement [69] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 ] ) always clobbers reg byte a -Statement [73] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 ] ) always clobbers reg byte a -Statement [74] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 ] ) always clobbers reg byte a -Statement [75] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 ] ) always clobbers reg byte a -Statement [76] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 ] ) always clobbers reg byte a -Statement [80] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:79 [ init_dist_screen::d#0 ] -Statement [81] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ) always clobbers reg byte y -Statement [82] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ) always clobbers reg byte y -Statement [83] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 ] ) always clobbers reg byte y -Statement [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 ] ) always clobbers reg byte a -Statement [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ bsearch16u::return#3 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ sqrt::found#0 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::found#0 ] ) always clobbers reg byte a -Statement [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1 [ sqrt::$3 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::$3 ] ) always clobbers reg byte a -Statement [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ sqrt::$1 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::$1 ] ) always clobbers reg byte a -Statement [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 ] ) always clobbers reg byte a -Statement [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Statement [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Statement [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [107] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Statement [108] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [110] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ sqr::$0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::$0 ] main:2::init_dist_screen:10::sqr:72 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::$0 ] ) always clobbers reg byte a -Statement [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 ] main:2::init_dist_screen:10::sqr:72 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 ] ) always clobbers reg byte a -Statement [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Statement [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y -Statement [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a -Statement [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a -Statement [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a -Statement [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a -Statement [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a -Statement [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a -Statement [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a +Statement [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 ] ) always clobbers reg byte a +Statement [63] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 ] ) always clobbers reg byte a +Statement [67] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 ] ) always clobbers reg byte a +Statement [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 ] ) always clobbers reg byte a +Statement [69] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 ] ) always clobbers reg byte a +Statement [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 ] ) always clobbers reg byte a +Statement [74] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:81 [ init_dist_screen::d#0 ] +Statement [75] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 ] ) always clobbers reg byte y +Statement [76] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 ] ) always clobbers reg byte y +Statement [77] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 ] ) always clobbers reg byte y +Statement [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 ] ) always clobbers reg byte a +Statement [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ bsearch16u::return#3 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ sqrt::found#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::found#0 ] ) always clobbers reg byte a +Statement [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1 [ sqrt::$3 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::$3 ] ) always clobbers reg byte a +Statement [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ sqrt::$1 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::$1 ] ) always clobbers reg byte a +Statement [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::return#0 ] ) always clobbers reg byte a +Statement [98] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [99] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [100] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [101] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [102] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [105] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [106] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [111] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y +Statement [112] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [114] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a +Statement [115] (word*~) bsearch16u::items#18 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#18 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#18 ] ) always clobbers reg byte a +Statement [117] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ sqr::$0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::$0 ] main:2::init_dist_screen:10::sqr:66 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::$0 ] ) always clobbers reg byte a +Statement [118] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 ] main:2::init_dist_screen:10::sqr:66 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#0 ] ) always clobbers reg byte a +Statement [123] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [124] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [125] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [127] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [133] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [134] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [135] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [136] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [137] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [142] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y +Statement [144] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a +Statement [145] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a +Statement [151] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a +Statement [153] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a +Statement [154] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [155] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [158] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a Statement [7] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [13] (dword) clock::return#2 ← (dword) clock::return#0 [ clock::return#2 ] ( main:2 [ clock::return#2 ] ) always clobbers reg byte a Statement [14] (dword~) main::$4 ← (dword) clock::return#2 [ main::$4 ] ( main:2 [ main::$4 ] ) always clobbers reg byte a @@ -4533,53 +4585,54 @@ Statement [52] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 < Statement [54] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 ] ) always clobbers reg byte a Statement [58] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 ] ) always clobbers reg byte a Statement [59] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 ] ) always clobbers reg byte a -Statement [62] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [63] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [67] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 ] ) always clobbers reg byte a -Statement [69] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 ] ) always clobbers reg byte a -Statement [73] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 ] ) always clobbers reg byte a -Statement [74] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 ] ) always clobbers reg byte a -Statement [75] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 ] ) always clobbers reg byte a -Statement [76] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 ] ) always clobbers reg byte a -Statement [80] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ) always clobbers reg byte y -Statement [81] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ) always clobbers reg byte y -Statement [82] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ) always clobbers reg byte y -Statement [83] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 ] ) always clobbers reg byte y -Statement [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 ] ) always clobbers reg byte a -Statement [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ bsearch16u::return#3 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ sqrt::found#0 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::found#0 ] ) always clobbers reg byte a -Statement [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1 [ sqrt::$3 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::$3 ] ) always clobbers reg byte a -Statement [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ sqrt::$1 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::$1 ] ) always clobbers reg byte a -Statement [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 ] ( main:2::init_dist_screen:10::sqrt:77 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 ] ) always clobbers reg byte a -Statement [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Statement [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Statement [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [107] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Statement [108] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [110] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:10::sqrt:77::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ sqr::$0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::$0 ] main:2::init_dist_screen:10::sqr:72 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::$0 ] ) always clobbers reg byte a -Statement [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 ] main:2::init_dist_screen:10::sqr:72 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 ] ) always clobbers reg byte a -Statement [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Statement [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a -Statement [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y -Statement [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a -Statement [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a -Statement [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a -Statement [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a -Statement [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a -Statement [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a -Statement [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a +Statement [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 ] ) always clobbers reg byte a +Statement [63] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 ] ) always clobbers reg byte a +Statement [67] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 ] ) always clobbers reg byte a +Statement [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 ] ) always clobbers reg byte a +Statement [69] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 ] ) always clobbers reg byte a +Statement [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 ] ) always clobbers reg byte a +Statement [74] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 ] ) always clobbers reg byte y +Statement [75] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 ] ) always clobbers reg byte y +Statement [76] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 ] ) always clobbers reg byte y +Statement [77] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 ] ) always clobbers reg byte y +Statement [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 ] ) always clobbers reg byte a +Statement [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ bsearch16u::return#3 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ sqrt::found#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::found#0 ] ) always clobbers reg byte a +Statement [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1 [ sqrt::$3 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::$3 ] ) always clobbers reg byte a +Statement [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ sqrt::$1 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::$1 ] ) always clobbers reg byte a +Statement [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::return#0 ] ) always clobbers reg byte a +Statement [98] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [99] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [100] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [101] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [102] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [105] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [106] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [111] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y +Statement [112] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [114] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a +Statement [115] (word*~) bsearch16u::items#18 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#18 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#18 ] ) always clobbers reg byte a +Statement [117] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ sqr::$0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::$0 ] main:2::init_dist_screen:10::sqr:66 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::$0 ] ) always clobbers reg byte a +Statement [118] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 ] main:2::init_dist_screen:10::sqr:66 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#0 ] ) always clobbers reg byte a +Statement [123] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [124] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [125] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [127] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [133] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [134] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [135] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [136] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [137] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a +Statement [142] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y +Statement [144] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a +Statement [145] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a +Statement [151] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a +Statement [153] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a +Statement [154] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [155] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [158] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:4 [ print_word_at::at#2 ] : zp ZP_WORD:4 , Potential registers zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] : zp ZP_BYTE:6 , reg byte x , @@ -4590,48 +4643,48 @@ Potential registers zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 Potential registers zp ZP_WORD:15 [ init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 ] : zp ZP_WORD:15 , Potential registers zp ZP_WORD:17 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 ] : zp ZP_WORD:17 , Potential registers zp ZP_BYTE:19 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp ZP_BYTE:20 , reg byte x , -Potential registers zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp ZP_BYTE:21 , reg byte x , +Potential registers zp ZP_BYTE:20 [ init_dist_screen::x#10 init_dist_screen::x#1 ] : zp ZP_BYTE:20 , reg byte x , +Potential registers zp ZP_BYTE:21 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] : zp ZP_BYTE:21 , reg byte x , Potential registers zp ZP_BYTE:22 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] : zp ZP_WORD:23 , -Potential registers zp ZP_BYTE:25 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] : zp ZP_BYTE:25 , reg byte x , -Potential registers zp ZP_BYTE:26 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:27 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:27 , -Potential registers zp ZP_WORD:29 [ init_squares::squares#2 init_squares::squares#1 ] : zp ZP_WORD:29 , -Potential registers zp ZP_BYTE:31 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:31 , reg byte x , -Potential registers zp ZP_WORD:32 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] : zp ZP_WORD:32 , -Potential registers zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] : zp ZP_BYTE:34 , reg byte x , -Potential registers zp ZP_WORD:35 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] : zp ZP_WORD:35 , -Potential registers zp ZP_WORD:37 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] : zp ZP_WORD:37 , -Potential registers zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] : zp ZP_BYTE:39 , reg byte x , -Potential registers zp ZP_BYTE:40 [ init_font_hex::i#2 init_font_hex::i#1 ] : zp ZP_BYTE:40 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] : zp ZP_BYTE:41 , reg byte x , reg byte y , -Potential registers zp ZP_DWORD:42 [ clock::return#2 ] : zp ZP_DWORD:42 , -Potential registers zp ZP_DWORD:46 [ main::$4 ] : zp ZP_DWORD:46 , -Potential registers zp ZP_DWORD:50 [ main::cyclecount#0 ] : zp ZP_DWORD:50 , -Potential registers zp ZP_DWORD:54 [ print_dword_at::dw#0 ] : zp ZP_DWORD:54 , -Potential registers zp ZP_BYTE:58 [ print_byte_at::$0 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:59 [ print_byte_at::$2 ] : zp ZP_BYTE:59 , reg byte x , reg byte y , -Potential registers zp ZP_DWORD:60 [ clock::return#0 ] : zp ZP_DWORD:60 , -Potential registers zp ZP_BYTE:64 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:64 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:65 [ sqr::return#2 ] : zp ZP_WORD:65 , -Potential registers zp ZP_WORD:67 [ init_dist_screen::yds#0 ] : zp ZP_WORD:67 , -Potential registers zp ZP_BYTE:69 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:69 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:70 [ sqr::return#3 ] : zp ZP_WORD:70 , -Potential registers zp ZP_WORD:72 [ init_dist_screen::xds#0 ] : zp ZP_WORD:72 , -Potential registers zp ZP_WORD:74 [ init_dist_screen::ds#0 ] : zp ZP_WORD:74 , -Potential registers zp ZP_WORD:76 [ sqrt::val#0 ] : zp ZP_WORD:76 , -Potential registers zp ZP_BYTE:78 [ sqrt::return#2 ] : zp ZP_BYTE:78 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:79 [ init_dist_screen::d#0 ] : zp ZP_BYTE:79 , reg byte a , reg byte x , -Potential registers zp ZP_WORD:80 [ bsearch16u::key#0 ] : zp ZP_WORD:80 , -Potential registers zp ZP_WORD:82 [ bsearch16u::return#3 ] : zp ZP_WORD:82 , -Potential registers zp ZP_WORD:84 [ sqrt::found#0 ] : zp ZP_WORD:84 , -Potential registers zp ZP_WORD:86 [ sqrt::$3 ] : zp ZP_WORD:86 , -Potential registers zp ZP_WORD:88 [ sqrt::$1 ] : zp ZP_WORD:88 , -Potential registers zp ZP_BYTE:90 [ sqrt::return#0 ] : zp ZP_BYTE:90 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:91 [ bsearch16u::$6 ] : zp ZP_BYTE:91 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:92 [ bsearch16u::$16 ] : zp ZP_BYTE:92 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:93 [ bsearch16u::pivot#0 ] : zp ZP_WORD:93 , +Potential registers zp ZP_WORD:23 [ bsearch16u::items#10 bsearch16u::items#16 ] : zp ZP_WORD:23 , +Potential registers zp ZP_WORD:25 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 ] : zp ZP_WORD:25 , +Potential registers zp ZP_BYTE:27 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] : zp ZP_BYTE:27 , reg byte x , +Potential registers zp ZP_BYTE:28 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:29 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:29 , +Potential registers zp ZP_WORD:31 [ init_squares::squares#2 init_squares::squares#1 ] : zp ZP_WORD:31 , +Potential registers zp ZP_BYTE:33 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:33 , reg byte x , +Potential registers zp ZP_WORD:34 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] : zp ZP_WORD:34 , +Potential registers zp ZP_BYTE:36 [ init_font_hex::c#6 init_font_hex::c#1 ] : zp ZP_BYTE:36 , reg byte x , +Potential registers zp ZP_WORD:37 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] : zp ZP_WORD:37 , +Potential registers zp ZP_WORD:39 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] : zp ZP_WORD:39 , +Potential registers zp ZP_BYTE:41 [ init_font_hex::c1#4 init_font_hex::c1#1 ] : zp ZP_BYTE:41 , reg byte x , +Potential registers zp ZP_BYTE:42 [ init_font_hex::i#2 init_font_hex::i#1 ] : zp ZP_BYTE:42 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:43 [ init_font_hex::idx#5 init_font_hex::idx#2 ] : zp ZP_BYTE:43 , reg byte x , reg byte y , +Potential registers zp ZP_DWORD:44 [ clock::return#2 ] : zp ZP_DWORD:44 , +Potential registers zp ZP_DWORD:48 [ main::$4 ] : zp ZP_DWORD:48 , +Potential registers zp ZP_DWORD:52 [ main::cyclecount#0 ] : zp ZP_DWORD:52 , +Potential registers zp ZP_DWORD:56 [ print_dword_at::dw#0 ] : zp ZP_DWORD:56 , +Potential registers zp ZP_BYTE:60 [ print_byte_at::$0 ] : zp ZP_BYTE:60 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:61 [ print_byte_at::$2 ] : zp ZP_BYTE:61 , reg byte x , reg byte y , +Potential registers zp ZP_DWORD:62 [ clock::return#0 ] : zp ZP_DWORD:62 , +Potential registers zp ZP_BYTE:66 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:66 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:67 [ sqr::return#2 ] : zp ZP_WORD:67 , +Potential registers zp ZP_WORD:69 [ init_dist_screen::yds#0 ] : zp ZP_WORD:69 , +Potential registers zp ZP_BYTE:71 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:71 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:72 [ sqr::return#3 ] : zp ZP_WORD:72 , +Potential registers zp ZP_WORD:74 [ init_dist_screen::xds#0 ] : zp ZP_WORD:74 , +Potential registers zp ZP_WORD:76 [ init_dist_screen::ds#0 ] : zp ZP_WORD:76 , +Potential registers zp ZP_WORD:78 [ sqrt::val#0 ] : zp ZP_WORD:78 , +Potential registers zp ZP_BYTE:80 [ sqrt::return#2 ] : zp ZP_BYTE:80 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:81 [ init_dist_screen::d#0 ] : zp ZP_BYTE:81 , reg byte a , reg byte x , +Potential registers zp ZP_WORD:82 [ bsearch16u::key#0 ] : zp ZP_WORD:82 , +Potential registers zp ZP_WORD:84 [ bsearch16u::return#3 ] : zp ZP_WORD:84 , +Potential registers zp ZP_WORD:86 [ sqrt::found#0 ] : zp ZP_WORD:86 , +Potential registers zp ZP_WORD:88 [ sqrt::$3 ] : zp ZP_WORD:88 , +Potential registers zp ZP_WORD:90 [ sqrt::$1 ] : zp ZP_WORD:90 , +Potential registers zp ZP_BYTE:92 [ sqrt::return#0 ] : zp ZP_BYTE:92 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:93 [ bsearch16u::$6 ] : zp ZP_BYTE:93 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:94 [ bsearch16u::$16 ] : zp ZP_BYTE:94 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:95 [ bsearch16u::result#0 ] : zp ZP_WORD:95 , Potential registers zp ZP_BYTE:97 [ sqr::$0 ] : zp ZP_BYTE:97 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:98 [ sqr::return#0 ] : zp ZP_WORD:98 , @@ -4643,102 +4696,102 @@ Potential registers zp ZP_BYTE:104 [ init_font_hex::$2 ] : zp ZP_BYTE:104 , reg Potential registers zp ZP_BYTE:105 [ init_font_hex::idx#3 ] : zp ZP_BYTE:105 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:25 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,852.83: zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp ZP_BYTE:91 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:92 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:95 [ bsearch16u::result#0 ] 501: zp ZP_WORD:93 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:82 [ bsearch16u::return#3 ] 0.29: zp ZP_WORD:80 [ bsearch16u::key#0 ] -Uplift Scope [init_font_hex] 2,168.83: zp ZP_BYTE:40 [ init_font_hex::i#2 init_font_hex::i#1 ] 2,002: zp ZP_BYTE:103 [ init_font_hex::$1 ] 2,002: zp ZP_BYTE:104 [ init_font_hex::$2 ] 1,151.6: zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 1,001: zp ZP_BYTE:102 [ init_font_hex::$0 ] 202: zp ZP_BYTE:105 [ init_font_hex::idx#3 ] 165.86: zp ZP_WORD:35 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 164.97: zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 143.04: zp ZP_WORD:37 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 64.17: zp ZP_WORD:32 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 17.66: zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] -Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:22 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 221.24: zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 202: zp ZP_BYTE:69 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:72 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:74 [ init_dist_screen::ds#0 ] 131.3: zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:79 [ init_dist_screen::d#0 ] 77: zp ZP_BYTE:19 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:64 [ init_dist_screen::y2#0 ] 17.47: zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.12: zp ZP_WORD:17 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 ] 12.5: zp ZP_WORD:15 [ init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:67 [ init_dist_screen::yds#0 ] -Uplift Scope [sqr] 338: zp ZP_BYTE:26 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 202: zp ZP_WORD:70 [ sqr::return#3 ] 28.5: zp ZP_WORD:98 [ sqr::return#0 ] 22: zp ZP_WORD:65 [ sqr::return#2 ] 4: zp ZP_BYTE:97 [ sqr::$0 ] -Uplift Scope [sqrt] 202: zp ZP_BYTE:78 [ sqrt::return#2 ] 103: zp ZP_WORD:76 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:90 [ sqrt::return#0 ] 4: zp ZP_WORD:84 [ sqrt::found#0 ] 4: zp ZP_WORD:86 [ sqrt::$3 ] 2: zp ZP_WORD:88 [ sqrt::$1 ] -Uplift Scope [init_squares] 22: zp ZP_BYTE:31 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:100 [ init_squares::$3 ] 22: zp ZP_BYTE:101 [ init_squares::$4 ] 20.17: zp ZP_WORD:29 [ init_squares::squares#2 init_squares::squares#1 ] 13.93: zp ZP_WORD:27 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplift Scope [bsearch16u] 6,450.89: zp ZP_BYTE:27 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] 4,851: zp ZP_WORD:25 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 ] 2,431: zp ZP_WORD:23 [ bsearch16u::items#10 bsearch16u::items#16 ] 2,002: zp ZP_BYTE:93 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:94 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:95 [ bsearch16u::result#0 ] 4: zp ZP_WORD:84 [ bsearch16u::return#3 ] 0.25: zp ZP_WORD:82 [ bsearch16u::key#0 ] +Uplift Scope [init_font_hex] 2,168.83: zp ZP_BYTE:42 [ init_font_hex::i#2 init_font_hex::i#1 ] 2,002: zp ZP_BYTE:103 [ init_font_hex::$1 ] 2,002: zp ZP_BYTE:104 [ init_font_hex::$2 ] 1,151.6: zp ZP_BYTE:43 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 1,001: zp ZP_BYTE:102 [ init_font_hex::$0 ] 202: zp ZP_BYTE:105 [ init_font_hex::idx#3 ] 165.86: zp ZP_WORD:37 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 164.97: zp ZP_BYTE:41 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 143.04: zp ZP_WORD:39 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 64.17: zp ZP_WORD:34 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 17.66: zp ZP_BYTE:36 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:22 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 202: zp ZP_BYTE:71 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:74 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:76 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:20 [ init_dist_screen::x#10 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:81 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:21 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:19 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:66 [ init_dist_screen::y2#0 ] 17.47: zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.12: zp ZP_WORD:17 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 ] 12.5: zp ZP_WORD:15 [ init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:69 [ init_dist_screen::yds#0 ] +Uplift Scope [sqr] 338: zp ZP_BYTE:28 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 202: zp ZP_WORD:72 [ sqr::return#3 ] 28.5: zp ZP_WORD:98 [ sqr::return#0 ] 22: zp ZP_WORD:67 [ sqr::return#2 ] 4: zp ZP_BYTE:97 [ sqr::$0 ] +Uplift Scope [sqrt] 202: zp ZP_BYTE:80 [ sqrt::return#2 ] 103: zp ZP_WORD:78 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:92 [ sqrt::return#0 ] 4: zp ZP_WORD:86 [ sqrt::found#0 ] 4: zp ZP_WORD:88 [ sqrt::$3 ] 2: zp ZP_WORD:90 [ sqrt::$1 ] +Uplift Scope [init_squares] 22: zp ZP_BYTE:33 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:100 [ init_squares::$3 ] 22: zp ZP_BYTE:101 [ init_squares::$4 ] 20.17: zp ZP_WORD:31 [ init_squares::squares#2 init_squares::squares#1 ] 13.93: zp ZP_WORD:29 [ init_squares::sqr#2 init_squares::sqr#1 ] Uplift Scope [print_char_at] 12: zp ZP_BYTE:11 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] 12: zp ZP_WORD:12 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] -Uplift Scope [print_byte_at] 9.33: zp ZP_WORD:9 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] 5.6: zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] 4: zp ZP_BYTE:58 [ print_byte_at::$0 ] 2: zp ZP_BYTE:59 [ print_byte_at::$2 ] +Uplift Scope [print_byte_at] 9.33: zp ZP_WORD:9 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] 5.6: zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] 4: zp ZP_BYTE:60 [ print_byte_at::$0 ] 2: zp ZP_BYTE:61 [ print_byte_at::$2 ] Uplift Scope [print_word_at] 10: zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] 0.8: zp ZP_WORD:4 [ print_word_at::at#2 ] -Uplift Scope [main] 4: zp ZP_DWORD:46 [ main::$4 ] 4: zp ZP_DWORD:50 [ main::cyclecount#0 ] -Uplift Scope [clock] 4: zp ZP_DWORD:42 [ clock::return#2 ] 1.33: zp ZP_DWORD:60 [ clock::return#0 ] -Uplift Scope [print_dword_at] 2: zp ZP_DWORD:54 [ print_dword_at::dw#0 ] +Uplift Scope [main] 4: zp ZP_DWORD:48 [ main::$4 ] 4: zp ZP_DWORD:52 [ main::cyclecount#0 ] +Uplift Scope [clock] 4: zp ZP_DWORD:44 [ clock::return#2 ] 1.33: zp ZP_DWORD:62 [ clock::return#0 ] +Uplift Scope [print_dword_at] 2: zp ZP_DWORD:56 [ print_dword_at::dw#0 ] Uplift Scope [malloc] Uplift Scope [RADIX] Uplift Scope [clock_start] Uplift Scope [] -Uplifting [bsearch16u] best 263251 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:95 [ bsearch16u::result#0 ] zp ZP_WORD:93 [ bsearch16u::pivot#0 ] zp ZP_WORD:82 [ bsearch16u::return#3 ] zp ZP_WORD:80 [ bsearch16u::key#0 ] -Uplifting [init_font_hex] best 244251 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:102 [ init_font_hex::$0 ] zp ZP_BYTE:105 [ init_font_hex::idx#3 ] zp ZP_WORD:35 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:37 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:32 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplifting [bsearch16u] best 290066 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] zp ZP_WORD:25 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 ] zp ZP_WORD:23 [ bsearch16u::items#10 bsearch16u::items#16 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:95 [ bsearch16u::result#0 ] zp ZP_WORD:84 [ bsearch16u::return#3 ] zp ZP_WORD:82 [ bsearch16u::key#0 ] +Uplifting [init_font_hex] best 271066 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:43 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:102 [ init_font_hex::$0 ] zp ZP_BYTE:105 [ init_font_hex::idx#3 ] zp ZP_WORD:37 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:41 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:39 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:34 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:36 [ init_font_hex::c#6 init_font_hex::c#1 ] Limited combination testing to 100 combinations of 6912 possible. -Uplifting [init_dist_screen] best 241051 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:72 [ init_dist_screen::xds#0 ] zp ZP_WORD:74 [ init_dist_screen::ds#0 ] zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:19 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:64 [ init_dist_screen::y2#0 ] zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:17 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 ] zp ZP_WORD:15 [ init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 ] zp ZP_WORD:67 [ init_dist_screen::yds#0 ] +Uplifting [init_dist_screen] best 267866 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:74 [ init_dist_screen::xds#0 ] zp ZP_WORD:76 [ init_dist_screen::ds#0 ] zp ZP_BYTE:20 [ init_dist_screen::x#10 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:21 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] zp ZP_BYTE:19 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:66 [ init_dist_screen::y2#0 ] zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:17 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 ] zp ZP_WORD:15 [ init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 ] zp ZP_WORD:69 [ init_dist_screen::yds#0 ] Limited combination testing to 100 combinations of 6144 possible. -Uplifting [sqr] best 240714 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp ZP_WORD:70 [ sqr::return#3 ] zp ZP_WORD:98 [ sqr::return#0 ] zp ZP_WORD:65 [ sqr::return#2 ] reg byte a [ sqr::$0 ] -Uplifting [sqrt] best 239811 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:76 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:84 [ sqrt::found#0 ] zp ZP_WORD:86 [ sqrt::$3 ] zp ZP_WORD:88 [ sqrt::$1 ] -Uplifting [init_squares] best 239611 combination reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp ZP_WORD:29 [ init_squares::squares#2 init_squares::squares#1 ] zp ZP_WORD:27 [ init_squares::sqr#2 init_squares::sqr#1 ] -Uplifting [print_char_at] best 239604 combination reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] zp ZP_WORD:12 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] -Uplifting [print_byte_at] best 239596 combination zp ZP_WORD:9 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] reg byte a [ print_byte_at::$0 ] reg byte y [ print_byte_at::$2 ] -Uplifting [print_word_at] best 239596 combination zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] zp ZP_WORD:4 [ print_word_at::at#2 ] -Uplifting [main] best 239596 combination zp ZP_DWORD:46 [ main::$4 ] zp ZP_DWORD:50 [ main::cyclecount#0 ] -Uplifting [clock] best 239596 combination zp ZP_DWORD:42 [ clock::return#2 ] zp ZP_DWORD:60 [ clock::return#0 ] -Uplifting [print_dword_at] best 239596 combination zp ZP_DWORD:54 [ print_dword_at::dw#0 ] -Uplifting [malloc] best 239596 combination -Uplifting [RADIX] best 239596 combination -Uplifting [clock_start] best 239596 combination -Uplifting [] best 239596 combination -Attempting to uplift remaining variables inzp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] -Uplifting [init_font_hex] best 239596 combination zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Uplifting [sqr] best 267529 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp ZP_WORD:72 [ sqr::return#3 ] zp ZP_WORD:98 [ sqr::return#0 ] zp ZP_WORD:67 [ sqr::return#2 ] reg byte a [ sqr::$0 ] +Uplifting [sqrt] best 266626 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:78 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:86 [ sqrt::found#0 ] zp ZP_WORD:88 [ sqrt::$3 ] zp ZP_WORD:90 [ sqrt::$1 ] +Uplifting [init_squares] best 266426 combination reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp ZP_WORD:31 [ init_squares::squares#2 init_squares::squares#1 ] zp ZP_WORD:29 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplifting [print_char_at] best 266419 combination reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] zp ZP_WORD:12 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] +Uplifting [print_byte_at] best 266411 combination zp ZP_WORD:9 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] reg byte a [ print_byte_at::$0 ] reg byte y [ print_byte_at::$2 ] +Uplifting [print_word_at] best 266411 combination zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] zp ZP_WORD:4 [ print_word_at::at#2 ] +Uplifting [main] best 266411 combination zp ZP_DWORD:48 [ main::$4 ] zp ZP_DWORD:52 [ main::cyclecount#0 ] +Uplifting [clock] best 266411 combination zp ZP_DWORD:44 [ clock::return#2 ] zp ZP_DWORD:62 [ clock::return#0 ] +Uplifting [print_dword_at] best 266411 combination zp ZP_DWORD:56 [ print_dword_at::dw#0 ] +Uplifting [malloc] best 266411 combination +Uplifting [RADIX] best 266411 combination +Uplifting [clock_start] best 266411 combination +Uplifting [] best 266411 combination +Attempting to uplift remaining variables inzp ZP_BYTE:43 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Uplifting [init_font_hex] best 266411 combination zp ZP_BYTE:43 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:102 [ init_font_hex::$0 ] -Uplifting [init_font_hex] best 239596 combination zp ZP_BYTE:102 [ init_font_hex::$0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Uplifting [init_dist_screen] best 239596 combination zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Uplifting [init_font_hex] best 266411 combination zp ZP_BYTE:102 [ init_font_hex::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:105 [ init_font_hex::idx#3 ] -Uplifting [init_font_hex] best 238996 combination reg byte y [ init_font_hex::idx#3 ] -Attempting to uplift remaining variables inzp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Uplifting [init_font_hex] best 238996 combination zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Uplifting [init_dist_screen] best 238996 combination zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] +Uplifting [init_font_hex] best 265811 combination reg byte y [ init_font_hex::idx#3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:41 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Uplifting [init_font_hex] best 265811 combination zp ZP_BYTE:41 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:20 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Uplifting [init_dist_screen] best 265811 combination zp ZP_BYTE:20 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:21 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Uplifting [init_dist_screen] best 265811 combination zp ZP_BYTE:21 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:19 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Uplifting [init_dist_screen] best 238926 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Attempting to uplift remaining variables inzp ZP_BYTE:64 [ init_dist_screen::y2#0 ] -Uplifting [init_dist_screen] best 238826 combination reg byte a [ init_dist_screen::y2#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] -Uplifting [init_font_hex] best 238826 combination zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplifting [init_dist_screen] best 265741 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] +Attempting to uplift remaining variables inzp ZP_BYTE:66 [ init_dist_screen::y2#0 ] +Uplifting [init_dist_screen] best 265641 combination reg byte a [ init_dist_screen::y2#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:36 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplifting [init_font_hex] best 265641 combination zp ZP_BYTE:36 [ init_font_hex::c#6 init_font_hex::c#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Uplifting [init_dist_screen] best 238826 combination zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +Uplifting [init_dist_screen] best 265641 combination zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] -Uplifting [print_byte_at] best 238826 combination zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] +Uplifting [print_byte_at] best 265641 combination zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] Coalescing zero page register [ zp ZP_WORD:4 [ print_word_at::at#2 ] ] with [ zp ZP_WORD:9 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] ] - score: 2 -Coalescing zero page register [ zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] ] with [ zp ZP_WORD:82 [ bsearch16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:42 [ clock::return#2 ] ] with [ zp ZP_DWORD:46 [ main::$4 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:42 [ clock::return#2 main::$4 ] ] with [ zp ZP_DWORD:60 [ clock::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:50 [ main::cyclecount#0 ] ] with [ zp ZP_DWORD:54 [ print_dword_at::dw#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:65 [ sqr::return#2 ] ] with [ zp ZP_WORD:67 [ init_dist_screen::yds#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:70 [ sqr::return#3 ] ] with [ zp ZP_WORD:72 [ init_dist_screen::xds#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:70 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:98 [ sqr::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:74 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:76 [ sqrt::val#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:84 [ sqrt::found#0 ] ] with [ zp ZP_WORD:86 [ sqrt::$3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp ZP_WORD:84 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:42 [ clock::return#2 main::$4 clock::return#0 ] ] with [ zp ZP_DWORD:50 [ main::cyclecount#0 print_dword_at::dw#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:70 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:74 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:88 [ sqrt::$1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:70 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:80 [ bsearch16u::key#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:25 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 ] ] with [ zp ZP_WORD:84 [ bsearch16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:44 [ clock::return#2 ] ] with [ zp ZP_DWORD:48 [ main::$4 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:44 [ clock::return#2 main::$4 ] ] with [ zp ZP_DWORD:62 [ clock::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:52 [ main::cyclecount#0 ] ] with [ zp ZP_DWORD:56 [ print_dword_at::dw#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:67 [ sqr::return#2 ] ] with [ zp ZP_WORD:69 [ init_dist_screen::yds#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:72 [ sqr::return#3 ] ] with [ zp ZP_WORD:74 [ init_dist_screen::xds#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:72 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:98 [ sqr::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:76 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:78 [ sqrt::val#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:86 [ sqrt::found#0 ] ] with [ zp ZP_WORD:88 [ sqrt::$3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:25 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 bsearch16u::return#3 ] ] with [ zp ZP_WORD:86 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:44 [ clock::return#2 main::$4 clock::return#0 ] ] with [ zp ZP_DWORD:52 [ main::cyclecount#0 print_dword_at::dw#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:72 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:76 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:25 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:90 [ sqrt::$1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:72 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:82 [ bsearch16u::key#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] ] with [ zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] ] Coalescing zero page register [ zp ZP_WORD:15 [ init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 ] ] with [ zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] ] Coalescing zero page register [ zp ZP_WORD:17 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:4 [ print_word_at::at#2 print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] ] -Coalescing zero page register [ zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] with [ zp ZP_WORD:12 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] ] -Coalescing zero page register [ zp ZP_WORD:32 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] ] with [ zp ZP_WORD:27 [ init_squares::sqr#2 init_squares::sqr#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] ] with [ zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] ] -Coalescing zero page register [ zp ZP_WORD:35 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] ] with [ zp ZP_WORD:29 [ init_squares::squares#2 init_squares::squares#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] ] with [ zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] ] -Coalescing zero page register [ zp ZP_WORD:65 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ zp ZP_WORD:37 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] ] -Coalescing zero page register [ zp ZP_WORD:32 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 init_squares::sqr#2 init_squares::sqr#1 ] ] with [ zp ZP_WORD:15 [ init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] ] -Coalescing zero page register [ zp ZP_WORD:35 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 init_squares::squares#2 init_squares::squares#1 ] ] with [ zp ZP_WORD:17 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 print_word_at::at#2 print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] ] with [ zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] ] -Allocated (was zp ZP_WORD:23) zp ZP_WORD:2 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] -Allocated (was zp ZP_WORD:32) zp ZP_WORD:4 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] -Allocated (was zp ZP_BYTE:34) zp ZP_BYTE:6 [ init_font_hex::c#6 init_font_hex::c#1 init_dist_screen::x#2 init_dist_screen::x#1 ] -Allocated (was zp ZP_WORD:35) zp ZP_WORD:9 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 init_squares::squares#2 init_squares::squares#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 print_word_at::at#2 print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] -Allocated (was zp ZP_BYTE:39) zp ZP_BYTE:11 [ init_font_hex::c1#4 init_font_hex::c1#1 init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Allocated (was zp ZP_BYTE:41) zp ZP_BYTE:12 [ init_font_hex::idx#5 init_font_hex::idx#2 init_dist_screen::y#10 init_dist_screen::y#1 print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] -Allocated (was zp ZP_DWORD:42) zp ZP_DWORD:13 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_dword_at::dw#0 ] -Allocated (was zp ZP_WORD:65) zp ZP_WORD:17 [ sqr::return#2 init_dist_screen::yds#0 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] -Allocated (was zp ZP_WORD:70) zp ZP_WORD:19 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] -Allocated (was zp ZP_WORD:93) zp ZP_WORD:21 [ bsearch16u::pivot#0 ] -Allocated (was zp ZP_WORD:95) zp ZP_WORD:23 [ bsearch16u::result#0 ] -Allocated (was zp ZP_BYTE:102) zp ZP_BYTE:25 [ init_font_hex::$0 ] +Coalescing zero page register [ zp ZP_WORD:23 [ bsearch16u::items#10 bsearch16u::items#16 ] ] with [ zp ZP_WORD:12 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] ] +Coalescing zero page register [ zp ZP_WORD:29 [ init_squares::sqr#2 init_squares::sqr#1 ] ] with [ zp ZP_WORD:25 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] +Coalescing zero page register [ zp ZP_WORD:34 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] ] with [ zp ZP_WORD:31 [ init_squares::squares#2 init_squares::squares#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:36 [ init_font_hex::c#6 init_font_hex::c#1 ] ] with [ zp ZP_BYTE:20 [ init_dist_screen::x#10 init_dist_screen::x#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:41 [ init_font_hex::c1#4 init_font_hex::c1#1 ] ] with [ zp ZP_BYTE:21 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] ] +Coalescing zero page register [ zp ZP_WORD:67 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ zp ZP_WORD:37 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] ] +Coalescing zero page register [ zp ZP_WORD:72 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] ] with [ zp ZP_WORD:39 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] ] +Coalescing zero page register [ zp ZP_WORD:34 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 init_squares::squares#2 init_squares::squares#1 ] ] with [ zp ZP_WORD:15 [ init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:43 [ init_font_hex::idx#5 init_font_hex::idx#2 ] ] with [ zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] ] +Allocated (was zp ZP_WORD:17) zp ZP_WORD:2 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 print_word_at::at#2 print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] +Allocated (was zp ZP_WORD:23) zp ZP_WORD:4 [ bsearch16u::items#10 bsearch16u::items#16 print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] +Allocated (was zp ZP_WORD:29) zp ZP_WORD:6 [ init_squares::sqr#2 init_squares::sqr#1 bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] +Allocated (was zp ZP_WORD:34) zp ZP_WORD:9 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 init_squares::squares#2 init_squares::squares#1 init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] +Allocated (was zp ZP_BYTE:36) zp ZP_BYTE:11 [ init_font_hex::c#6 init_font_hex::c#1 init_dist_screen::x#10 init_dist_screen::x#1 ] +Allocated (was zp ZP_BYTE:41) zp ZP_BYTE:12 [ init_font_hex::c1#4 init_font_hex::c1#1 init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Allocated (was zp ZP_BYTE:43) zp ZP_BYTE:13 [ init_font_hex::idx#5 init_font_hex::idx#2 init_dist_screen::y#10 init_dist_screen::y#1 print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] +Allocated (was zp ZP_DWORD:44) zp ZP_DWORD:14 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_dword_at::dw#0 ] +Allocated (was zp ZP_WORD:67) zp ZP_WORD:18 [ sqr::return#2 init_dist_screen::yds#0 init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +Allocated (was zp ZP_WORD:72) zp ZP_WORD:20 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +Allocated (was zp ZP_WORD:95) zp ZP_WORD:22 [ bsearch16u::result#0 ] +Allocated (was zp ZP_BYTE:102) zp ZP_BYTE:24 [ init_font_hex::$0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -4793,10 +4846,10 @@ main: { .label BASE_CHARSET = $1000 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .const toD0182_return = (>(BASE_SCREEN&$3fff)*4)|(>BASE_CHARSET)/4&$f - .label _4 = $d - .label cyclecount = $d + .label _4 = $e + .label cyclecount = $e // [5] call init_font_hex - // [138] phi from main to init_font_hex [phi:main->init_font_hex] + // [139] phi from main to init_font_hex [phi:main->init_font_hex] init_font_hex_from_main: jsr init_font_hex // [6] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -4869,9 +4922,9 @@ main: { } // print_dword_at // Print a dword as HEX at a specific position -// print_dword_at(dword zeropage($d) dw) +// print_dword_at(dword zeropage($e) dw) print_dword_at: { - .label dw = $d + .label dw = $e // [21] (word) print_word_at::w#0 ← > (dword) print_dword_at::dw#0 -- vwuz1=_hi_vduz2 lda dw+2 sta print_word_at.w @@ -4913,10 +4966,10 @@ print_dword_at: { } // print_word_at // Print a word as HEX at a specific position -// print_word_at(word zeropage(4) w, byte* zeropage(9) at) +// print_word_at(word zeropage(9) w, byte* zeropage(2) at) print_word_at: { - .label w = 4 - .label at = 9 + .label w = 9 + .label at = 2 // [27] (byte) print_byte_at::b#0 ← > (word) print_word_at::w#2 -- vbuz1=_hi_vwuz2 lda w+1 sta print_byte_at.b @@ -4955,10 +5008,10 @@ print_word_at: { } // print_byte_at // Print a byte as HEX at a specific position -// print_byte_at(byte zeropage($c) b, byte* zeropage(9) at) +// print_byte_at(byte zeropage($d) b, byte* zeropage(2) at) print_byte_at: { - .label b = $c - .label at = 9 + .label b = $d + .label at = 2 // [35] (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#2 >> (byte) 4 -- vbuaa=vbuz1_ror_4 lda b lsr @@ -5010,9 +5063,9 @@ print_byte_at: { } // print_char_at // Print a single char -// print_char_at(byte register(X) ch, byte* zeropage(2) at) +// print_char_at(byte register(X) ch, byte* zeropage(4) at) print_char_at: { - .label at = 2 + .label at = 4 // [45] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 -- _deref_pbuz1=vbuxx txa ldy #0 @@ -5027,7 +5080,7 @@ print_char_at: { // Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program). // This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start() clock: { - .label return = $d + .label return = $e // [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) -- vduz1=vduc1_minus__deref_pduc2 lda #<$ffffffff sec @@ -5052,16 +5105,16 @@ clock: { // Populates 1000 bytes (a screen) with values representing the distance to the center. // The actual value stored is distance*2 to increase precision init_dist_screen: { - .label yds = $11 - .label screen_topline = 4 - .label screen_bottomline = 9 - .label y = $c - .label xds = $13 - .label ds = $13 - .label x = 6 - .label xb = $b + .label yds = $12 + .label screen_topline = 9 + .label screen_bottomline = 2 + .label y = $d + .label xds = $14 + .label ds = $14 + .label x = $b + .label xb = $c // [50] call init_squares - // [119] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [120] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares // [51] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1] @@ -5110,9 +5163,9 @@ init_dist_screen: { b4: // [56] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 // [57] call sqr - // [115] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [116] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from_b4: - // [115] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [116] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // [58] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return @@ -5123,85 +5176,54 @@ init_dist_screen: { // init_dist_screen::@11 b11: // [59] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [60] phi from init_dist_screen::@11 to init_dist_screen::@5 [phi:init_dist_screen::@11->init_dist_screen::@5] - b5_from_b11: - // [60] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@11->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [60] phi from init_dist_screen::@11 to init_dist_screen::@6 [phi:init_dist_screen::@11->init_dist_screen::@6] + b6_from_b11: + // [60] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@11->init_dist_screen::@6#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [60] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [60] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@6#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b5 - // init_dist_screen::@5 - b5: - // [61] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b6 - jmp b7 - // init_dist_screen::@7 - b7: - // [62] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - // [63] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - // [64] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 - inc y - // [65] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b7 - jmp breturn - // init_dist_screen::@return - breturn: - // [66] return - rts + jmp b6 + // [60] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6] + b6_from_b5: + // [60] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy + // [60] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy + jmp b6 // init_dist_screen::@6 b6: - // [67] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [68] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 + // [62] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 cmp #$27 bcs b8 jmp b9 // init_dist_screen::@9 b9: - // [69] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [63] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [70] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [64] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] b10_from_b8: b10_from_b9: - // [70] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [64] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy jmp b10 // init_dist_screen::@10 b10: - // [71] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [72] call sqr - // [115] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] + // [65] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [66] call sqr + // [116] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] sqr_from_b10: - // [115] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy + // [116] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr - // [73] (word) sqr::return#3 ← (word) sqr::return#0 + // [67] (word) sqr::return#3 ← (word) sqr::return#0 jmp b12 // init_dist_screen::@12 b12: - // [74] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - // [75] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [69] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 lda ds clc adc yds @@ -5209,35 +5231,67 @@ init_dist_screen: { lda ds+1 adc yds+1 sta ds+1 - // [76] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [77] call sqrt + // [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [71] call sqrt jsr sqrt - // [78] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // [72] (byte) sqrt::return#2 ← (byte) sqrt::return#0 jmp b13 // init_dist_screen::@13 b13: - // [79] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - // [80] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [73] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [74] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y - // [81] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [75] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_bottomline),y - // [82] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [76] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y - // [83] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [77] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_bottomline),y - // [84] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [78] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 inc x - // [85] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [79] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 dec xb - // [60] phi from init_dist_screen::@13 to init_dist_screen::@5 [phi:init_dist_screen::@13->init_dist_screen::@5] - b5_from_b13: - // [60] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@13->init_dist_screen::@5#0] -- register_copy - // [60] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@13->init_dist_screen::@5#1] -- register_copy jmp b5 + // init_dist_screen::@5 + b5: + // [80] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b6_from_b5 + jmp b7 + // init_dist_screen::@7 + b7: + // [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + // [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + // [83] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + inc y + // [84] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b7 + jmp breturn + // init_dist_screen::@return + breturn: + // [85] return + rts // init_dist_screen::@8 b8: // [86] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 @@ -5255,12 +5309,12 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($13) val) +// sqrt(word zeropage($14) val) sqrt: { - .label _1 = 2 - .label _3 = 2 - .label found = 2 - .label val = $13 + .label _1 = 6 + .label _3 = 6 + .label found = 6 + .label val = $14 // [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 // [89] call bsearch16u // [96] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] @@ -5296,33 +5350,108 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($13) key, word* zeropage(2) items, byte register(X) num) +// bsearch16u(word zeropage($14) key, word* zeropage(6) items, byte register(X) num) bsearch16u: { - .label _2 = 2 - .label pivot = $15 - .label result = $17 - .label return = 2 - .label items = 2 - .label key = $13 - // [97] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - b3_from_bsearch16u: - // [97] phi (word*) bsearch16u::items#2 = (const word*) SQUARES#1 [phi:bsearch16u->bsearch16u::@3#0] -- pwuz1=pwuc1 + .label _2 = 6 + .label pivot = 6 + .label result = $16 + .label return = 6 + .label items = 6 + .label key = $14 + .label items_10 = 4 + .label items_16 = 4 + // [97] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4] + b4_from_bsearch16u: + // [97] phi (word*) bsearch16u::items#10 = (const word*) SQUARES#1 [phi:bsearch16u->bsearch16u::@4#0] -- pwuz1=pwuc1 lda #SQUARES - sta items+1 - // [97] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + sta items_10+1 + // [97] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES + jmp b4 + // bsearch16u::@4 + b4: + // [98] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + txa + lsr + // [99] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + asl + // [100] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + clc + adc items_10 + sta pivot + lda #0 + adc items_10+1 + sta pivot+1 + // [101] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + sec + lda key + ldy #0 + sbc (pivot),y + sta result + lda key+1 + iny + sbc (pivot),y + sta result+1 + // [102] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + lda result+1 + bne b6 + lda result + bne b6 + // [103] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return] + breturn_from_b2: + breturn_from_b4: + // [103] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy + jmp breturn + // bsearch16u::@return + breturn: + // [104] return + rts + // bsearch16u::@6 + b6: + // [105] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 + lda result+1 + bmi b10 + bne !+ + lda result + beq b10 + !: + jmp b8 + // bsearch16u::@8 + b8: + // [106] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + lda #1*SIZEOF_WORD + clc + adc items + sta items + bcc !+ + inc items+1 + !: + // [107] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuxx=_dec_vbuxx + dex + // [108] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7] + b7_from_b10: + b7_from_b8: + // [108] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#18 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy + // [108] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy + jmp b7 + // bsearch16u::@7 + b7: + // [109] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + txa + lsr + tax jmp b3 // bsearch16u::@3 b3: - // [98] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 + // [110] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuxx_gt_0_then_la1 cpx #0 - bne b4 + bne b9 jmp b5 // bsearch16u::@5 b5: - // [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [111] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp key+1 @@ -5336,7 +5465,7 @@ bsearch16u: { jmp b1 // bsearch16u::@1 b1: - // [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [112] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -5344,110 +5473,45 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [101] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [113] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] b2_from_b1: b2_from_b5: - // [101] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [113] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp b2 // bsearch16u::@2 b2: - // [102] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - breturn_from_b2: - breturn_from_b8: - // [102] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy - jmp breturn - // bsearch16u::@return - breturn: - // [103] return - rts - // bsearch16u::@4 - b4: - // [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 - txa - lsr - // [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 - asl - // [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa - clc - adc items - sta pivot - lda #0 - adc items+1 - sta pivot+1 - // [107] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 - sec - lda key - ldy #0 - sbc (pivot),y - sta result - lda key+1 - iny - sbc (pivot),y - sta result+1 - // [108] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 - lda result+1 - bne b6 - lda result - bne b6 - jmp b8 - // bsearch16u::@8 - b8: - // [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 - lda pivot - sta return - lda pivot+1 - sta return+1 - jmp breturn_from_b8 - // bsearch16u::@6 - b6: - // [110] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 - lda result+1 - bmi b7_from_b6 - bne !+ - lda result - beq b7_from_b6 - !: - jmp b9 + jmp breturn_from_b2 // bsearch16u::@9 b9: - // [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 - lda #1*SIZEOF_WORD - clc - adc pivot + // [114] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 + lda items + sta items_16 + lda items+1 + sta items_16+1 + // [97] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4] + b4_from_b9: + // [97] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy + // [97] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy + jmp b4 + // bsearch16u::@10 + b10: + // [115] (word*~) bsearch16u::items#18 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 + lda items_10 sta items - lda #0 - adc pivot+1 + lda items_10+1 sta items+1 - // [112] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx - dex - // [113] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - b7_from_b6: - b7_from_b9: - // [113] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [113] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy - jmp b7 - // bsearch16u::@7 - b7: - // [114] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 - txa - lsr - tax - // [97] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - b3_from_b7: - // [97] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [97] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy - jmp b3 + jmp b7_from_b10 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $13 - .label return_2 = $11 - // [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 + .label return = $14 + .label return_2 = $12 + // [117] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuc1_derefidx_vbuaa + // [118] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuc1_derefidx_vbuaa tay lda SQUARES,y sta return @@ -5456,7 +5520,7 @@ sqr: { jmp breturn // sqr::@return breturn: - // [118] return + // [119] return rts } // init_squares @@ -5464,42 +5528,42 @@ sqr: { // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { .label squares = 9 - .label sqr = 4 - // [120] call malloc - // [130] phi from init_squares to malloc [phi:init_squares->malloc] + .label sqr = 6 + // [121] call malloc + // [131] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: jsr malloc - // [121] phi from init_squares to init_squares::@1 [phi:init_squares->init_squares::@1] + // [122] phi from init_squares to init_squares::@1 [phi:init_squares->init_squares::@1] b1_from_init_squares: - // [121] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares->init_squares::@1#0] -- vbuxx=vbuc1 + // [122] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 - // [121] phi (word*) init_squares::squares#2 = (const word*) SQUARES#1 [phi:init_squares->init_squares::@1#1] -- pwuz1=pwuc1 + // [122] phi (word*) init_squares::squares#2 = (const word*) SQUARES#1 [phi:init_squares->init_squares::@1#1] -- pwuz1=pwuc1 lda #SQUARES sta squares+1 - // [121] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vbuc1 + // [122] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vbuc1 lda #<0 sta sqr lda #>0 sta sqr+1 jmp b1 - // [121] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [122] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] b1_from_b1: - // [121] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [121] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [121] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [122] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [122] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [122] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy jmp b1 // init_squares::@1 b1: - // [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [123] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y iny lda sqr+1 sta (squares),y - // [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [124] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -5507,28 +5571,28 @@ init_squares: { bcc !+ inc squares+1 !: - // [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [125] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [125] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [126] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 - // [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa + // [127] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa clc adc sqr sta sqr bcc !+ inc sqr+1 !: - // [127] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx + // [128] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx - // [128] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 + // [129] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #NUM_SQUARES-1+1 bne b1_from_b1 jmp breturn // init_squares::@return breturn: - // [129] return + // [130] return rts } // malloc @@ -5541,21 +5605,21 @@ malloc: { jmp breturn // malloc::@return breturn: - // [131] return + // [132] return rts } // clock_start // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 + // [133] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #CIA_TIMER_CONTROL_CONTINUOUS sta CIA2_TIMER_A_CONTROL - // [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 + // [134] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A sta CIA2_TIMER_B_CONTROL - // [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 + // [135] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB lda #>$ffffffff @@ -5564,93 +5628,93 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 + // [136] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A sta CIA2_TIMER_B_CONTROL - // [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 + // [137] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START sta CIA2_TIMER_A_CONTROL jmp breturn // clock_start::@return breturn: - // [137] return + // [138] return rts } // init_font_hex // Make charset from proto chars -// init_font_hex(byte* zeropage(9) charset) +// init_font_hex(byte* zeropage($12) charset) init_font_hex: { - .label _0 = $19 - .label idx = $c - .label proto_lo = $11 - .label charset = 9 - .label c1 = $b - .label proto_hi = 4 - .label c = 6 - // [139] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] + .label _0 = $18 + .label idx = $d + .label proto_lo = $14 + .label charset = $12 + .label c1 = $c + .label proto_hi = 9 + .label c = $b + // [140] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] b1_from_init_font_hex: - // [139] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 + // [140] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 lda #0 sta c - // [139] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 + // [140] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta proto_hi+1 - // [139] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 + // [140] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 lda #CHARSET sta charset+1 jmp b1 - // [139] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] + // [140] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] b1_from_b5: - // [139] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy - // [139] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy - // [139] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy + // [140] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy + // [140] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy + // [140] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy jmp b1 // init_font_hex::@1 b1: - // [140] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] + // [141] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] b2_from_b1: - // [140] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 + // [141] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 lda #0 sta c1 - // [140] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 + // [141] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta proto_lo+1 - // [140] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy + // [141] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy jmp b2 - // [140] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] + // [141] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] b2_from_b4: - // [140] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy - // [140] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy - // [140] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy + // [141] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy + // [141] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy + // [141] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy jmp b2 // init_font_hex::@2 b2: - // [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [142] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (charset),y - // [142] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] + // [143] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] b3_from_b2: - // [142] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 + // [143] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 lda #1 sta idx - // [142] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 + // [143] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 ldx #0 jmp b3 - // [142] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] + // [143] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] b3_from_b3: - // [142] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy - // [142] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy + // [143] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy + // [143] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy jmp b3 // init_font_hex::@3 b3: - // [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 + // [144] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 txa tay lda (proto_hi),y @@ -5659,37 +5723,37 @@ init_font_hex: { asl asl sta _0 - // [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 + // [145] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 txa tay lda (proto_lo),y asl - // [145] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa + // [146] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa ora _0 - // [146] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa + // [147] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa ldy idx sta (charset),y - // [147] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 + // [148] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 inc idx - // [148] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx + // [149] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx inx - // [149] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 + // [150] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne b3_from_b3 jmp b4 // init_font_hex::@4 b4: - // [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + // [151] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy idx sta (charset),y - // [151] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 + // [152] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 ldy idx iny - // [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + // [153] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 lda #0 sta (charset),y - // [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + // [154] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc proto_lo @@ -5697,7 +5761,7 @@ init_font_hex: { bcc !+ inc proto_lo+1 !: - // [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [155] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc charset @@ -5705,16 +5769,16 @@ init_font_hex: { bcc !+ inc charset+1 !: - // [155] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 + // [156] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 inc c1 - // [156] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 + // [157] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp c1 bne b2_from_b4 jmp b5 // init_font_hex::@5 b5: - // [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + // [158] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc proto_hi @@ -5722,16 +5786,16 @@ init_font_hex: { bcc !+ inc proto_hi+1 !: - // [158] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 + // [159] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 inc c - // [159] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 + // [160] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp c bne b1_from_b5 jmp breturn // init_font_hex::@return breturn: - // [160] return + // [161] return rts } // File Data @@ -5762,24 +5826,25 @@ Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b4 Removing instruction jmp b11 -Removing instruction jmp b5 -Removing instruction jmp b7 -Removing instruction jmp breturn +Removing instruction jmp b6 Removing instruction jmp b9 Removing instruction jmp b10 Removing instruction jmp b12 Removing instruction jmp b13 +Removing instruction jmp b5 +Removing instruction jmp b7 +Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn +Removing instruction jmp b4 +Removing instruction jmp breturn +Removing instruction jmp b8 +Removing instruction jmp b7 Removing instruction jmp b3 Removing instruction jmp b5 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp breturn -Removing instruction jmp b8 -Removing instruction jmp b9 -Removing instruction jmp b7 -Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp breturn @@ -5800,14 +5865,14 @@ Replacing instruction ldy #0 with TAY Removing instruction ldy idx Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b6_from_b5 with b6 Replacing label b1_from_b7 with b1 Replacing label b10_from_b8 with b10 Replacing label b4_from_b2 with b4 Replacing label b2_from_b5 with b2 Replacing label b2_from_b5 with b2 -Replacing label breturn_from_b8 with b2 -Replacing label b7_from_b6 with b7 -Replacing label b7_from_b6 with b7 +Replacing label breturn_from_b2 with breturn +Replacing label b7_from_b10 with b7 Replacing label b1_from_b1 with b1 Replacing label b3_from_b3 with b3 Replacing label b2_from_b4 with b2 @@ -5827,17 +5892,17 @@ Removing instruction b1_from_b7: Removing instruction b4_from_b2: Removing instruction b4_from_b3: Removing instruction sqr_from_b4: -Removing instruction b5_from_b11: +Removing instruction b6_from_b11: +Removing instruction b6_from_b5: Removing instruction b10_from_b8: Removing instruction b10_from_b9: Removing instruction sqr_from_b10: +Removing instruction breturn_from_b2: +Removing instruction breturn_from_b4: +Removing instruction b7_from_b10: +Removing instruction b7_from_b8: Removing instruction b2_from_b1: Removing instruction b2_from_b5: -Removing instruction breturn_from_b2: -Removing instruction breturn_from_b8: -Removing instruction breturn: -Removing instruction b7_from_b6: -Removing instruction b7_from_b9: Removing instruction b1_from_b1: Removing instruction b1_from_b5: Removing instruction b2_from_b1: @@ -5870,21 +5935,21 @@ Removing instruction init_squares_from_init_dist_screen: Removing instruction b1_from_init_dist_screen: Removing instruction b3: Removing instruction b11: -Removing instruction b7: -Removing instruction breturn: Removing instruction b9: Removing instruction b12: Removing instruction b13: -Removing instruction b5_from_b13: +Removing instruction b5: +Removing instruction b7: +Removing instruction breturn: Removing instruction bsearch16u_from_sqrt: Removing instruction b1: Removing instruction breturn: -Removing instruction b3_from_bsearch16u: +Removing instruction b4_from_bsearch16u: +Removing instruction b8: +Removing instruction b3: Removing instruction b5: Removing instruction b1: -Removing instruction b8: -Removing instruction b9: -Removing instruction b3_from_b7: +Removing instruction b4_from_b9: Removing instruction breturn: Removing instruction malloc_from_init_squares: Removing instruction b1_from_init_squares: @@ -5900,15 +5965,19 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Replacing jump to rts with rts in jmp b2 +Skipping double jump to breturn in beq b2 +Skipping double jump to breturn in bcc b2 +Replacing jump to rts with rts in jmp breturn Succesful ASM optimization Pass5DoubleJumpElimination Removing instruction jmp b1 +Removing instruction jmp b6 Removing instruction jmp b1 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: +Removing instruction b2: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE @@ -5952,9 +6021,10 @@ FINAL SYMBOL TABLE (const word*) SQUARES#1 SQUARES = (word*)(const void*) malloc::return#0 (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) (byte~) bsearch16u::$16 reg byte a 2002.0 -(word*~) bsearch16u::$2 $2 zp ZP_WORD:2 4.0 +(word*~) bsearch16u::$2 $2 zp ZP_WORD:6 4.0 (byte~) bsearch16u::$6 reg byte a 2002.0 (label) bsearch16u::@1 +(label) bsearch16u::@10 (label) bsearch16u::@2 (label) bsearch16u::@3 (label) bsearch16u::@4 @@ -5965,30 +6035,31 @@ FINAL SYMBOL TABLE (label) bsearch16u::@9 (label) bsearch16u::@return (word*) bsearch16u::items -(word*) bsearch16u::items#0 items zp ZP_WORD:2 1001.0 -(word*) bsearch16u::items#2 items zp ZP_WORD:2 334.33333333333337 -(word*) bsearch16u::items#8 items zp ZP_WORD:2 1501.5 +(word*) bsearch16u::items#0 items zp ZP_WORD:6 1001.0 +(word*) bsearch16u::items#10 items#10 zp ZP_WORD:4 429.0 +(word*) bsearch16u::items#11 items zp ZP_WORD:6 752.25 +(word*~) bsearch16u::items#16 items#16 zp ZP_WORD:4 2002.0 +(word*~) bsearch16u::items#18 items zp ZP_WORD:6 2002.0 (word) bsearch16u::key -(word) bsearch16u::key#0 key zp ZP_WORD:19 0.2857142857142857 +(word) bsearch16u::key#0 key zp ZP_WORD:20 0.25 (byte) bsearch16u::num -(byte) bsearch16u::num#0 reg byte x 2002.0 +(byte) bsearch16u::num#0 reg byte x 1001.0 (byte) bsearch16u::num#1 reg byte x 2002.0 -(byte) bsearch16u::num#3 reg byte x 556.1111111111111 +(byte) bsearch16u::num#10 reg byte x 444.8888888888889 (byte) bsearch16u::num#5 reg byte x 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:21 501.0 +(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:6 750.75 (signed word) bsearch16u::result -(signed word) bsearch16u::result#0 result zp ZP_WORD:23 1501.5 +(signed word) bsearch16u::result#0 result zp ZP_WORD:22 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 return zp ZP_WORD:2 2.0 -(word*) bsearch16u::return#2 return zp ZP_WORD:2 6.0 -(word*) bsearch16u::return#3 return zp ZP_WORD:2 4.0 -(word*~) bsearch16u::return#6 return zp ZP_WORD:2 4.0 +(word*) bsearch16u::return#1 return zp ZP_WORD:6 335.00000000000006 +(word*) bsearch16u::return#2 return zp ZP_WORD:6 6.0 +(word*) bsearch16u::return#3 return zp ZP_WORD:6 4.0 (dword()) clock() (label) clock::@return (dword) clock::return -(dword) clock::return#0 return zp ZP_DWORD:13 1.3333333333333333 -(dword) clock::return#2 return zp ZP_DWORD:13 4.0 +(dword) clock::return#0 return zp ZP_DWORD:14 1.3333333333333333 +(dword) clock::return#2 return zp ZP_DWORD:14 4.0 (void()) clock_start() (label) clock_start::@return (byte*) heap_head @@ -6014,37 +6085,37 @@ FINAL SYMBOL TABLE (byte) init_dist_screen::d (byte) init_dist_screen::d#0 reg byte a 126.25 (word) init_dist_screen::ds -(word) init_dist_screen::ds#0 ds zp ZP_WORD:19 202.0 +(word) init_dist_screen::ds#0 ds zp ZP_WORD:20 202.0 (byte*) init_dist_screen::screen (byte*) init_dist_screen::screen_bottomline -(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:9 7.333333333333333 -(byte*) init_dist_screen::screen_bottomline#11 screen_bottomline zp ZP_WORD:9 6.787878787878787 +(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:2 7.333333333333333 +(byte*) init_dist_screen::screen_bottomline#11 screen_bottomline zp ZP_WORD:2 6.787878787878788 (byte*) init_dist_screen::screen_topline -(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:4 5.5 -(byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:4 7.0 +(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:9 5.5 +(byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:9 7.0 (byte) init_dist_screen::x -(byte) init_dist_screen::x#1 x zp ZP_BYTE:6 101.0 -(byte) init_dist_screen::x#2 x zp ZP_BYTE:6 30.3 +(byte) init_dist_screen::x#1 x zp ZP_BYTE:11 101.0 +(byte) init_dist_screen::x#10 x zp ZP_BYTE:11 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 reg byte a 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:11 202.0 -(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:11 19.238095238095237 +(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:12 101.0 +(byte) init_dist_screen::xb#10 xb zp ZP_BYTE:12 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 reg byte a 303.0 (word) init_dist_screen::xds -(word) init_dist_screen::xds#0 xds zp ZP_WORD:19 202.0 +(word) init_dist_screen::xds#0 xds zp ZP_WORD:20 202.0 (byte) init_dist_screen::y -(byte) init_dist_screen::y#1 y zp ZP_BYTE:12 16.5 -(byte) init_dist_screen::y#10 y zp ZP_BYTE:12 0.9705882352941178 +(byte) init_dist_screen::y#1 y zp ZP_BYTE:13 16.5 +(byte) init_dist_screen::y#10 y zp ZP_BYTE:13 0.9705882352941178 (byte) init_dist_screen::y2 (byte) init_dist_screen::y2#0 reg byte a 22.0 (byte) init_dist_screen::yd (byte) init_dist_screen::yd#0 reg byte a 33.0 (word) init_dist_screen::yds -(word) init_dist_screen::yds#0 yds zp ZP_WORD:17 4.869565217391305 +(word) init_dist_screen::yds#0 yds zp ZP_WORD:18 4.869565217391305 (void()) init_font_hex((byte*) init_font_hex::charset) -(byte~) init_font_hex::$0 $0 zp ZP_BYTE:25 1001.0 +(byte~) init_font_hex::$0 $0 zp ZP_BYTE:24 1001.0 (byte~) init_font_hex::$1 reg byte a 2002.0 (byte~) init_font_hex::$2 reg byte a 2002.0 (label) init_font_hex::@1 @@ -6054,28 +6125,28 @@ FINAL SYMBOL TABLE (label) init_font_hex::@5 (label) init_font_hex::@return (byte) init_font_hex::c -(byte) init_font_hex::c#1 c zp ZP_BYTE:6 16.5 -(byte) init_font_hex::c#6 c zp ZP_BYTE:6 1.1578947368421053 +(byte) init_font_hex::c#1 c zp ZP_BYTE:11 16.5 +(byte) init_font_hex::c#6 c zp ZP_BYTE:11 1.1578947368421053 (byte) init_font_hex::c1 -(byte) init_font_hex::c1#1 c1 zp ZP_BYTE:11 151.5 -(byte) init_font_hex::c1#4 c1 zp ZP_BYTE:11 13.466666666666667 +(byte) init_font_hex::c1#1 c1 zp ZP_BYTE:12 151.5 +(byte) init_font_hex::c1#4 c1 zp ZP_BYTE:12 13.466666666666667 (byte*) init_font_hex::charset -(byte*) init_font_hex::charset#0 charset zp ZP_WORD:9 35.5 -(byte*) init_font_hex::charset#2 charset zp ZP_WORD:9 108.35714285714285 -(byte*) init_font_hex::charset#5 charset zp ZP_WORD:9 22.0 +(byte*) init_font_hex::charset#0 charset zp ZP_WORD:18 35.5 +(byte*) init_font_hex::charset#2 charset zp ZP_WORD:18 108.35714285714285 +(byte*) init_font_hex::charset#5 charset zp ZP_WORD:18 22.0 (byte) init_font_hex::i (byte) init_font_hex::i#1 reg byte x 1501.5 (byte) init_font_hex::i#2 reg byte x 667.3333333333334 (byte) init_font_hex::idx -(byte) init_font_hex::idx#2 idx zp ZP_BYTE:12 551.0 +(byte) init_font_hex::idx#2 idx zp ZP_BYTE:13 551.0 (byte) init_font_hex::idx#3 reg byte y 202.0 -(byte) init_font_hex::idx#5 idx zp ZP_BYTE:12 600.5999999999999 +(byte) init_font_hex::idx#5 idx zp ZP_BYTE:13 600.5999999999999 (byte*) init_font_hex::proto_hi -(byte*) init_font_hex::proto_hi#1 proto_hi zp ZP_WORD:4 7.333333333333333 -(byte*) init_font_hex::proto_hi#6 proto_hi zp ZP_WORD:4 56.83333333333334 +(byte*) init_font_hex::proto_hi#1 proto_hi zp ZP_WORD:9 7.333333333333333 +(byte*) init_font_hex::proto_hi#6 proto_hi zp ZP_WORD:9 56.83333333333334 (byte*) init_font_hex::proto_lo -(byte*) init_font_hex::proto_lo#1 proto_lo zp ZP_WORD:17 50.5 -(byte*) init_font_hex::proto_lo#4 proto_lo zp ZP_WORD:17 92.53846153846155 +(byte*) init_font_hex::proto_lo#1 proto_lo zp ZP_WORD:20 50.5 +(byte*) init_font_hex::proto_lo#4 proto_lo zp ZP_WORD:20 92.53846153846155 (void()) init_squares() (byte~) init_squares::$3 reg byte a 22.0 (byte~) init_squares::$4 reg byte a 22.0 @@ -6085,13 +6156,13 @@ FINAL SYMBOL TABLE (byte) init_squares::i#1 reg byte x 16.5 (byte) init_squares::i#2 reg byte x 5.5 (word) init_squares::sqr -(word) init_squares::sqr#1 sqr zp ZP_WORD:4 7.333333333333333 -(word) init_squares::sqr#2 sqr zp ZP_WORD:4 6.6000000000000005 +(word) init_squares::sqr#1 sqr zp ZP_WORD:6 7.333333333333333 +(word) init_squares::sqr#2 sqr zp ZP_WORD:6 6.6000000000000005 (word*) init_squares::squares (word*) init_squares::squares#1 squares zp ZP_WORD:9 3.6666666666666665 (word*) init_squares::squares#2 squares zp ZP_WORD:9 16.5 (void()) main() -(dword~) main::$4 $4 zp ZP_DWORD:13 4.0 +(dword~) main::$4 $4 zp ZP_DWORD:14 4.0 (label) main::@1 (label) main::@2 (label) main::@3 @@ -6103,7 +6174,7 @@ FINAL SYMBOL TABLE (byte*) main::BASE_SCREEN (const byte*) main::BASE_SCREEN#0 BASE_SCREEN = (byte*) 1024 (dword) main::cyclecount -(dword) main::cyclecount#0 cyclecount zp ZP_DWORD:13 4.0 +(dword) main::cyclecount#0 cyclecount zp ZP_DWORD:14 4.0 (label) main::toD0181 (word~) main::toD0181_$0 (number~) main::toD0181_$1 @@ -6146,19 +6217,19 @@ FINAL SYMBOL TABLE (label) print_byte_at::@1 (label) print_byte_at::@return (byte*) print_byte_at::at -(byte*) print_byte_at::at#0 at zp ZP_WORD:9 4.0 -(byte*) print_byte_at::at#1 at zp ZP_WORD:9 4.0 -(byte*) print_byte_at::at#2 at zp ZP_WORD:9 1.3333333333333333 +(byte*) print_byte_at::at#0 at zp ZP_WORD:2 4.0 +(byte*) print_byte_at::at#1 at zp ZP_WORD:2 4.0 +(byte*) print_byte_at::at#2 at zp ZP_WORD:2 1.3333333333333333 (byte) print_byte_at::b -(byte) print_byte_at::b#0 b zp ZP_BYTE:12 2.0 -(byte) print_byte_at::b#1 b zp ZP_BYTE:12 2.0 -(byte) print_byte_at::b#2 b zp ZP_BYTE:12 1.6 +(byte) print_byte_at::b#0 b zp ZP_BYTE:13 2.0 +(byte) print_byte_at::b#1 b zp ZP_BYTE:13 2.0 +(byte) print_byte_at::b#2 b zp ZP_BYTE:13 1.6 (void()) print_char_at((byte) print_char_at::ch , (byte*) print_char_at::at) (label) print_char_at::@return (byte*) print_char_at::at -(byte*) print_char_at::at#0 at zp ZP_WORD:2 4.0 -(byte*) print_char_at::at#1 at zp ZP_WORD:2 2.0 -(byte*) print_char_at::at#2 at zp ZP_WORD:2 6.0 +(byte*) print_char_at::at#0 at zp ZP_WORD:4 4.0 +(byte*) print_char_at::at#1 at zp ZP_WORD:4 2.0 +(byte*) print_char_at::at#2 at zp ZP_WORD:4 6.0 (byte) print_char_at::ch (byte) print_char_at::ch#0 reg byte x 2.0 (byte) print_char_at::ch#1 reg byte x 4.0 @@ -6168,81 +6239,81 @@ FINAL SYMBOL TABLE (label) print_dword_at::@return (byte*) print_dword_at::at (dword) print_dword_at::dw -(dword) print_dword_at::dw#0 dw zp ZP_DWORD:13 2.0 +(dword) print_dword_at::dw#0 dw zp ZP_DWORD:14 2.0 (byte[]) print_hextab (const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef" (void()) print_word_at((word) print_word_at::w , (byte*) print_word_at::at) (label) print_word_at::@1 (label) print_word_at::@return (byte*) print_word_at::at -(byte*) print_word_at::at#2 at zp ZP_WORD:9 0.8 +(byte*) print_word_at::at#2 at zp ZP_WORD:2 0.8 (word) print_word_at::w -(word) print_word_at::w#0 w zp ZP_WORD:4 4.0 -(word) print_word_at::w#1 w zp ZP_WORD:4 4.0 -(word) print_word_at::w#2 w zp ZP_WORD:4 2.0 +(word) print_word_at::w#0 w zp ZP_WORD:9 4.0 +(word) print_word_at::w#1 w zp ZP_WORD:9 4.0 +(word) print_word_at::w#2 w zp ZP_WORD:9 2.0 (word()) sqr((byte) sqr::val) (byte~) sqr::$0 reg byte a 4.0 (label) sqr::@return (word) sqr::return -(word) sqr::return#0 return zp ZP_WORD:19 28.5 -(word) sqr::return#2 return#2 zp ZP_WORD:17 22.0 -(word) sqr::return#3 return zp ZP_WORD:19 202.0 +(word) sqr::return#0 return zp ZP_WORD:20 28.5 +(word) sqr::return#2 return#2 zp ZP_WORD:18 22.0 +(word) sqr::return#3 return zp ZP_WORD:20 202.0 (byte) sqr::val (byte) sqr::val#0 reg byte a 22.0 (byte) sqr::val#1 reg byte a 202.0 (byte) sqr::val#2 reg byte a 114.0 (byte()) sqrt((word) sqrt::val) -(word~) sqrt::$1 $1 zp ZP_WORD:2 2.0 -(word~) sqrt::$3 $3 zp ZP_WORD:2 4.0 +(word~) sqrt::$1 $1 zp ZP_WORD:6 2.0 +(word~) sqrt::$3 $3 zp ZP_WORD:6 4.0 (label) sqrt::@1 (label) sqrt::@return (word*) sqrt::found -(word*) sqrt::found#0 found zp ZP_WORD:2 4.0 +(word*) sqrt::found#0 found zp ZP_WORD:6 4.0 (byte) sqrt::return (byte) sqrt::return#0 reg byte a 34.33333333333333 (byte) sqrt::return#2 reg byte a 202.0 (byte) sqrt::sq (word) sqrt::val -(word) sqrt::val#0 val zp ZP_WORD:19 103.0 +(word) sqrt::val#0 val zp ZP_WORD:20 103.0 reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] +zp ZP_WORD:2 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 print_word_at::at#2 print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -zp ZP_WORD:2 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] -reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +zp ZP_WORD:4 [ bsearch16u::items#10 bsearch16u::items#16 print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] +reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] +zp ZP_WORD:6 [ init_squares::sqr#2 init_squares::sqr#1 bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] -zp ZP_WORD:4 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] -zp ZP_BYTE:6 [ init_font_hex::c#6 init_font_hex::c#1 init_dist_screen::x#2 init_dist_screen::x#1 ] -zp ZP_WORD:9 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 init_squares::squares#2 init_squares::squares#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 print_word_at::at#2 print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] -zp ZP_BYTE:11 [ init_font_hex::c1#4 init_font_hex::c1#1 init_dist_screen::xb#2 init_dist_screen::xb#1 ] +zp ZP_WORD:9 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 init_squares::squares#2 init_squares::squares#1 init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] +zp ZP_BYTE:11 [ init_font_hex::c#6 init_font_hex::c#1 init_dist_screen::x#10 init_dist_screen::x#1 ] +zp ZP_BYTE:12 [ init_font_hex::c1#4 init_font_hex::c1#1 init_dist_screen::xb#10 init_dist_screen::xb#1 ] reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] -zp ZP_BYTE:12 [ init_font_hex::idx#5 init_font_hex::idx#2 init_dist_screen::y#10 init_dist_screen::y#1 print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] -zp ZP_DWORD:13 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_dword_at::dw#0 ] +zp ZP_BYTE:13 [ init_font_hex::idx#5 init_font_hex::idx#2 init_dist_screen::y#10 init_dist_screen::y#1 print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] +zp ZP_DWORD:14 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_dword_at::dw#0 ] reg byte a [ print_byte_at::$0 ] reg byte y [ print_byte_at::$2 ] reg byte a [ init_dist_screen::y2#0 ] -zp ZP_WORD:17 [ sqr::return#2 init_dist_screen::yds#0 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +zp ZP_WORD:18 [ sqr::return#2 init_dist_screen::yds#0 init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] reg byte a [ init_dist_screen::x2#0 ] -zp ZP_WORD:19 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] +zp ZP_WORD:20 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] reg byte a [ sqrt::return#2 ] reg byte a [ init_dist_screen::d#0 ] reg byte a [ sqrt::return#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] -zp ZP_WORD:21 [ bsearch16u::pivot#0 ] -zp ZP_WORD:23 [ bsearch16u::result#0 ] +zp ZP_WORD:22 [ bsearch16u::result#0 ] reg byte a [ sqr::$0 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] -zp ZP_BYTE:25 [ init_font_hex::$0 ] +zp ZP_BYTE:24 [ init_font_hex::$0 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] reg byte y [ init_font_hex::idx#3 ] FINAL ASSEMBLER -Score: 203637 +Score: 229879 // File Comments // Calculate the distance to the center of the screen - and show it using font-hex @@ -6287,11 +6358,11 @@ main: { .label BASE_CHARSET = $1000 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .const toD0182_return = (>(BASE_SCREEN&$3fff)*4)|(>BASE_CHARSET)/4&$f - .label _4 = $d - .label cyclecount = $d + .label _4 = $e + .label cyclecount = $e // init_font_hex(CHARSET) // [5] call init_font_hex - // [138] phi from main to init_font_hex [phi:main->init_font_hex] + // [139] phi from main to init_font_hex [phi:main->init_font_hex] jsr init_font_hex // [6] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -6350,9 +6421,9 @@ main: { } // print_dword_at // Print a dword as HEX at a specific position -// print_dword_at(dword zeropage($d) dw) +// print_dword_at(dword zeropage($e) dw) print_dword_at: { - .label dw = $d + .label dw = $e // print_word_at(>dw, at) // [21] (word) print_word_at::w#0 ← > (dword) print_dword_at::dw#0 -- vwuz1=_hi_vduz2 lda dw+2 @@ -6391,10 +6462,10 @@ print_dword_at: { } // print_word_at // Print a word as HEX at a specific position -// print_word_at(word zeropage(4) w, byte* zeropage(9) at) +// print_word_at(word zeropage(9) w, byte* zeropage(2) at) print_word_at: { - .label w = 4 - .label at = 9 + .label w = 9 + .label at = 2 // print_byte_at(>w, at) // [27] (byte) print_byte_at::b#0 ← > (word) print_word_at::w#2 -- vbuz1=_hi_vwuz2 lda w+1 @@ -6430,10 +6501,10 @@ print_word_at: { } // print_byte_at // Print a byte as HEX at a specific position -// print_byte_at(byte zeropage($c) b, byte* zeropage(9) at) +// print_byte_at(byte zeropage($d) b, byte* zeropage(2) at) print_byte_at: { - .label b = $c - .label at = 9 + .label b = $d + .label at = 2 // b>>4 // [35] (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#2 >> (byte) 4 -- vbuaa=vbuz1_ror_4 lda b @@ -6484,9 +6555,9 @@ print_byte_at: { } // print_char_at // Print a single char -// print_char_at(byte register(X) ch, byte* zeropage(2) at) +// print_char_at(byte register(X) ch, byte* zeropage(4) at) print_char_at: { - .label at = 2 + .label at = 4 // *(at) = ch // [45] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 -- _deref_pbuz1=vbuxx txa @@ -6501,7 +6572,7 @@ print_char_at: { // Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program). // This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start() clock: { - .label return = $d + .label return = $e // 0xffffffff - *CIA2_TIMER_AB // [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) -- vduz1=vduc1_minus__deref_pduc2 lda #<$ffffffff @@ -6526,17 +6597,17 @@ clock: { // Populates 1000 bytes (a screen) with values representing the distance to the center. // The actual value stored is distance*2 to increase precision init_dist_screen: { - .label yds = $11 - .label screen_topline = 4 - .label screen_bottomline = 9 - .label y = $c - .label xds = $13 - .label ds = $13 - .label x = 6 - .label xb = $b + .label yds = $12 + .label screen_topline = 9 + .label screen_bottomline = 2 + .label y = $d + .label xds = $14 + .label ds = $14 + .label x = $b + .label xb = $c // init_squares() // [50] call init_squares - // [119] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [120] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] jsr init_squares // [51] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1] // [51] phi (byte*) init_dist_screen::screen_bottomline#11 = (const byte*) SCREEN#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 @@ -6578,8 +6649,8 @@ init_dist_screen: { // sqr(yd) // [56] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 // [57] call sqr - // [115] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] - // [115] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [116] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [116] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // sqr(yd) // [58] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 @@ -6590,82 +6661,48 @@ init_dist_screen: { // init_dist_screen::@11 // yds = sqr(yd) // [59] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [60] phi from init_dist_screen::@11 to init_dist_screen::@5 [phi:init_dist_screen::@11->init_dist_screen::@5] - // [60] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@11->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [60] phi from init_dist_screen::@11 to init_dist_screen::@6 [phi:init_dist_screen::@11->init_dist_screen::@6] + // [60] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@11->init_dist_screen::@6#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [60] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [60] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@6#1] -- vbuz1=vbuc1 lda #0 sta x - // init_dist_screen::@5 - b5: - // for( byte x=0,xb=39; x<=19; x++, xb--) - // [61] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b6 - // init_dist_screen::@7 - // screen_topline += 40 - // [62] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - // screen_bottomline -= 40 - // [63] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - // for(byte y: 0..12) - // [64] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 - inc y - // [65] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1 - // init_dist_screen::@return - // } - // [66] return - rts + // [60] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6] + // [60] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy + // [60] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy // init_dist_screen::@6 b6: // x2 = x*2 - // [67] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // (x2>=39)?(x2-39):(39-x2) - // [68] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 + // [62] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 cmp #$27 bcs b8 // init_dist_screen::@9 - // [69] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [63] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [70] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] - // [70] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [64] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [64] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy // init_dist_screen::@10 b10: // sqr(xd) - // [71] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [72] call sqr - // [115] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] - // [115] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy + // [65] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [66] call sqr + // [116] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] + // [116] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr // sqr(xd) - // [73] (word) sqr::return#3 ← (word) sqr::return#0 + // [67] (word) sqr::return#3 ← (word) sqr::return#0 // init_dist_screen::@12 // xds = sqr(xd) - // [74] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 // ds = xds+yds - // [75] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [69] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 lda ds clc adc yds @@ -6674,36 +6711,67 @@ init_dist_screen: { adc yds+1 sta ds+1 // sqrt(ds) - // [76] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [77] call sqrt + // [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [71] call sqrt jsr sqrt - // [78] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // [72] (byte) sqrt::return#2 ← (byte) sqrt::return#0 // init_dist_screen::@13 // d = sqrt(ds) - // [79] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [73] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 // screen_topline[x] = d - // [80] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [74] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y // screen_bottomline[x] = d - // [81] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [75] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // screen_topline[xb] = d - // [82] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [76] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y // screen_bottomline[xb] = d - // [83] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [77] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [84] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [78] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 inc x - // [85] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [79] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 dec xb - // [60] phi from init_dist_screen::@13 to init_dist_screen::@5 [phi:init_dist_screen::@13->init_dist_screen::@5] - // [60] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@13->init_dist_screen::@5#0] -- register_copy - // [60] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@13->init_dist_screen::@5#1] -- register_copy - jmp b5 + // init_dist_screen::@5 + // [80] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b6 + // init_dist_screen::@7 + // screen_topline += 40 + // [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + // screen_bottomline -= 40 + // [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + // for(byte y: 0..12) + // [83] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + inc y + // [84] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1 + // init_dist_screen::@return + // } + // [85] return + rts // init_dist_screen::@8 b8: // (x2>=39)?(x2-39):(39-x2) @@ -6723,12 +6791,12 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($13) val) +// sqrt(word zeropage($14) val) sqrt: { - .label _1 = 2 - .label _3 = 2 - .label found = 2 - .label val = $13 + .label _1 = 6 + .label _3 = 6 + .label found = 6 + .label val = $14 // bsearch16u(val, SQUARES, NUM_SQUARES) // [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 // [89] call bsearch16u @@ -6765,78 +6833,42 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($13) key, word* zeropage(2) items, byte register(X) num) +// bsearch16u(word zeropage($14) key, word* zeropage(6) items, byte register(X) num) bsearch16u: { - .label _2 = 2 - .label pivot = $15 - .label result = $17 - .label return = 2 - .label items = 2 - .label key = $13 - // [97] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - // [97] phi (word*) bsearch16u::items#2 = (const word*) SQUARES#1 [phi:bsearch16u->bsearch16u::@3#0] -- pwuz1=pwuc1 + .label _2 = 6 + .label pivot = 6 + .label result = $16 + .label return = 6 + .label items = 6 + .label key = $14 + .label items_10 = 4 + .label items_16 = 4 + // [97] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4] + // [97] phi (word*) bsearch16u::items#10 = (const word*) SQUARES#1 [phi:bsearch16u->bsearch16u::@4#0] -- pwuz1=pwuc1 lda #SQUARES - sta items+1 - // [97] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + sta items_10+1 + // [97] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES - // bsearch16u::@3 - b3: - // while (num > 0) - // [98] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 - cpx #0 - bne b4 - // bsearch16u::@5 - // *items<=key?items:items-1 - // [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 - ldy #1 - lda (items),y - cmp key+1 - bne !+ - dey - lda (items),y - cmp key - beq b2 - !: - bcc b2 - // bsearch16u::@1 - // [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 - lda _2 - sec - sbc #<1*SIZEOF_WORD - sta _2 - lda _2+1 - sbc #>1*SIZEOF_WORD - sta _2+1 - // [101] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] - // [101] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy - // bsearch16u::@2 - b2: - // [102] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - // [102] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy - // bsearch16u::@return - // } - // [103] return - rts // bsearch16u::@4 b4: // num >> 1 - // [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + // [98] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuaa=vbuxx_ror_1 txa lsr // items + (num >> 1) - // [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [99] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + // [100] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa clc - adc items + adc items_10 sta pivot lda #0 - adc items+1 + adc items_10+1 sta pivot+1 // result = (signed int)key-(signed int)*pivot - // [107] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [101] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 sec lda key ldy #0 @@ -6847,66 +6879,112 @@ bsearch16u: { sbc (pivot),y sta result+1 // if (result == 0) - // [108] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [102] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 bne b6 lda result bne b6 - // bsearch16u::@8 - // [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 - lda pivot - sta return - lda pivot+1 - sta return+1 + // [103] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return] + // [103] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy + // bsearch16u::@return + breturn: + // } + // [104] return rts // bsearch16u::@6 b6: // if (result > 0) - // [110] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [105] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 lda result+1 - bmi b7 + bmi b10 bne !+ lda result - beq b7 + beq b10 !: - // bsearch16u::@9 + // bsearch16u::@8 // items = pivot+1 - // [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [106] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #1*SIZEOF_WORD clc - adc pivot + adc items sta items - lda #0 - adc pivot+1 - sta items+1 + bcc !+ + inc items+1 + !: // num--; - // [112] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx + // [107] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuxx=_dec_vbuxx dex - // [113] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - // [113] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [113] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [108] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7] + // [108] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#18 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy + // [108] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy // bsearch16u::@7 b7: // num >>= 1 - // [114] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [109] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [97] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - // [97] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [97] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy - jmp b3 + // bsearch16u::@3 + // while (num > 0) + // [110] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuxx_gt_0_then_la1 + cpx #0 + bne b9 + // bsearch16u::@5 + // *items<=key?items:items-1 + // [111] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + ldy #1 + lda (items),y + cmp key+1 + bne !+ + dey + lda (items),y + cmp key + beq breturn + !: + bcc breturn + // bsearch16u::@1 + // [112] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + lda _2 + sec + sbc #<1*SIZEOF_WORD + sta _2 + lda _2+1 + sbc #>1*SIZEOF_WORD + sta _2+1 + // [113] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [113] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // bsearch16u::@2 + rts + // bsearch16u::@9 + b9: + // [114] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 + lda items + sta items_16 + lda items+1 + sta items_16+1 + // [97] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4] + // [97] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy + // [97] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy + jmp b4 + // bsearch16u::@10 + b10: + // [115] (word*~) bsearch16u::items#18 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 + lda items_10 + sta items + lda items_10+1 + sta items+1 + jmp b7 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $13 - .label return_2 = $11 + .label return = $14 + .label return_2 = $12 // return SQUARES[val]; - // [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [117] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuc1_derefidx_vbuaa + // [118] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuc1_derefidx_vbuaa tay lda SQUARES,y sta return @@ -6914,7 +6992,7 @@ sqr: { sta return+1 // sqr::@return // } - // [118] return + // [119] return rts } // init_squares @@ -6922,31 +7000,31 @@ sqr: { // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { .label squares = 9 - .label sqr = 4 + .label sqr = 6 // malloc(NUM_SQUARES*sizeof(word)) - // [120] call malloc - // [130] phi from init_squares to malloc [phi:init_squares->malloc] + // [121] call malloc + // [131] phi from init_squares to malloc [phi:init_squares->malloc] jsr malloc - // [121] phi from init_squares to init_squares::@1 [phi:init_squares->init_squares::@1] - // [121] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares->init_squares::@1#0] -- vbuxx=vbuc1 + // [122] phi from init_squares to init_squares::@1 [phi:init_squares->init_squares::@1] + // [122] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 - // [121] phi (word*) init_squares::squares#2 = (const word*) SQUARES#1 [phi:init_squares->init_squares::@1#1] -- pwuz1=pwuc1 + // [122] phi (word*) init_squares::squares#2 = (const word*) SQUARES#1 [phi:init_squares->init_squares::@1#1] -- pwuz1=pwuc1 lda #SQUARES sta squares+1 - // [121] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vbuc1 + // [122] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vbuc1 txa sta sqr sta sqr+1 - // [121] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] - // [121] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [121] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [121] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [122] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [122] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [122] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [122] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy // init_squares::@1 b1: // *squares++ = sqr - // [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [123] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y @@ -6954,7 +7032,7 @@ init_squares: { lda sqr+1 sta (squares),y // *squares++ = sqr; - // [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [124] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -6963,15 +7041,15 @@ init_squares: { inc squares+1 !: // i*2 - // [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [125] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // i*2+1 - // [125] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [126] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 // sqr += i*2+1 - // [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa + // [127] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa clc adc sqr sta sqr @@ -6979,14 +7057,14 @@ init_squares: { inc sqr+1 !: // for( byte i: 0..NUM_SQUARES-1) - // [127] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx + // [128] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx - // [128] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 + // [129] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #NUM_SQUARES-1+1 bne b1 // init_squares::@return // } - // [129] return + // [130] return rts } // malloc @@ -6997,7 +7075,7 @@ malloc: { .label mem = HEAP_TOP-size .label return = mem // malloc::@return - // [131] return + // [132] return rts } // clock_start @@ -7005,16 +7083,16 @@ malloc: { // This uses CIA #2 Timer A+B on the C64 clock_start: { // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 + // [133] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #CIA_TIMER_CONTROL_CONTINUOUS sta CIA2_TIMER_A_CONTROL // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 + // [134] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A sta CIA2_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff - // [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 + // [135] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB lda #>$ffffffff @@ -7024,83 +7102,83 @@ clock_start: { lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 + // [136] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A sta CIA2_TIMER_B_CONTROL // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 + // [137] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START sta CIA2_TIMER_A_CONTROL // clock_start::@return // } - // [137] return + // [138] return rts } // init_font_hex // Make charset from proto chars -// init_font_hex(byte* zeropage(9) charset) +// init_font_hex(byte* zeropage($12) charset) init_font_hex: { - .label _0 = $19 - .label idx = $c - .label proto_lo = $11 - .label charset = 9 - .label c1 = $b - .label proto_hi = 4 - .label c = 6 - // [139] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] - // [139] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 + .label _0 = $18 + .label idx = $d + .label proto_lo = $14 + .label charset = $12 + .label c1 = $c + .label proto_hi = 9 + .label c = $b + // [140] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] + // [140] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 lda #0 sta c - // [139] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 + // [140] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta proto_hi+1 - // [139] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 + // [140] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 lda #CHARSET sta charset+1 - // [139] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] - // [139] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy - // [139] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy - // [139] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy + // [140] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] + // [140] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy + // [140] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy + // [140] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy // init_font_hex::@1 b1: - // [140] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] - // [140] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 + // [141] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] + // [141] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 lda #0 sta c1 - // [140] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 + // [141] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta proto_lo+1 - // [140] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy - // [140] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] - // [140] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy - // [140] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy - // [140] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy + // [141] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy + // [141] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] + // [141] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy + // [141] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy + // [141] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy // init_font_hex::@2 b2: // charset[idx++] = 0 - // [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [142] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 tay sta (charset),y - // [142] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] - // [142] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 + // [143] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] + // [143] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 lda #1 sta idx - // [142] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 + // [143] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 ldx #0 - // [142] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] - // [142] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy - // [142] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy + // [143] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] + // [143] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy + // [143] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy // init_font_hex::@3 b3: // proto_hi[i]<<4 - // [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 + // [144] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 txa tay lda (proto_hi),y @@ -7110,41 +7188,41 @@ init_font_hex: { asl sta _0 // proto_lo[i]<<1 - // [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 + // [145] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 txa tay lda (proto_lo),y asl // proto_hi[i]<<4 | proto_lo[i]<<1 - // [145] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa + // [146] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa ora _0 // charset[idx++] = proto_hi[i]<<4 | proto_lo[i]<<1 - // [146] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa + // [147] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa ldy idx sta (charset),y // charset[idx++] = proto_hi[i]<<4 | proto_lo[i]<<1; - // [147] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 + // [148] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 inc idx // for( byte i: 0..4) - // [148] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx + // [149] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx inx - // [149] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 + // [150] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne b3 // init_font_hex::@4 // charset[idx++] = 0 - // [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + // [151] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy idx sta (charset),y // charset[idx++] = 0; - // [151] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 + // [152] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 iny // charset[idx++] = 0 - // [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + // [153] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 sta (charset),y // proto_lo += 5 - // [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + // [154] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc proto_lo @@ -7153,7 +7231,7 @@ init_font_hex: { inc proto_lo+1 !: // charset += 8 - // [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [155] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc charset @@ -7162,15 +7240,15 @@ init_font_hex: { inc charset+1 !: // for( byte c: 0..15 ) - // [155] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 + // [156] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 inc c1 - // [156] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 + // [157] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp c1 bne b2 // init_font_hex::@5 // proto_hi += 5 - // [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + // [158] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc proto_hi @@ -7179,15 +7257,15 @@ init_font_hex: { inc proto_hi+1 !: // for( byte c: 0..15 ) - // [158] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 + // [159] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 inc c - // [159] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 + // [160] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp c bne b1 // init_font_hex::@return // } - // [160] return + // [161] return rts } // File Data diff --git a/src/test/ref/screen-center-distance.sym b/src/test/ref/screen-center-distance.sym index da28622db..8d1737dbe 100644 --- a/src/test/ref/screen-center-distance.sym +++ b/src/test/ref/screen-center-distance.sym @@ -38,9 +38,10 @@ (const word*) SQUARES#1 SQUARES = (word*)(const void*) malloc::return#0 (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) (byte~) bsearch16u::$16 reg byte a 2002.0 -(word*~) bsearch16u::$2 $2 zp ZP_WORD:2 4.0 +(word*~) bsearch16u::$2 $2 zp ZP_WORD:6 4.0 (byte~) bsearch16u::$6 reg byte a 2002.0 (label) bsearch16u::@1 +(label) bsearch16u::@10 (label) bsearch16u::@2 (label) bsearch16u::@3 (label) bsearch16u::@4 @@ -51,30 +52,31 @@ (label) bsearch16u::@9 (label) bsearch16u::@return (word*) bsearch16u::items -(word*) bsearch16u::items#0 items zp ZP_WORD:2 1001.0 -(word*) bsearch16u::items#2 items zp ZP_WORD:2 334.33333333333337 -(word*) bsearch16u::items#8 items zp ZP_WORD:2 1501.5 +(word*) bsearch16u::items#0 items zp ZP_WORD:6 1001.0 +(word*) bsearch16u::items#10 items#10 zp ZP_WORD:4 429.0 +(word*) bsearch16u::items#11 items zp ZP_WORD:6 752.25 +(word*~) bsearch16u::items#16 items#16 zp ZP_WORD:4 2002.0 +(word*~) bsearch16u::items#18 items zp ZP_WORD:6 2002.0 (word) bsearch16u::key -(word) bsearch16u::key#0 key zp ZP_WORD:19 0.2857142857142857 +(word) bsearch16u::key#0 key zp ZP_WORD:20 0.25 (byte) bsearch16u::num -(byte) bsearch16u::num#0 reg byte x 2002.0 +(byte) bsearch16u::num#0 reg byte x 1001.0 (byte) bsearch16u::num#1 reg byte x 2002.0 -(byte) bsearch16u::num#3 reg byte x 556.1111111111111 +(byte) bsearch16u::num#10 reg byte x 444.8888888888889 (byte) bsearch16u::num#5 reg byte x 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:21 501.0 +(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:6 750.75 (signed word) bsearch16u::result -(signed word) bsearch16u::result#0 result zp ZP_WORD:23 1501.5 +(signed word) bsearch16u::result#0 result zp ZP_WORD:22 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 return zp ZP_WORD:2 2.0 -(word*) bsearch16u::return#2 return zp ZP_WORD:2 6.0 -(word*) bsearch16u::return#3 return zp ZP_WORD:2 4.0 -(word*~) bsearch16u::return#6 return zp ZP_WORD:2 4.0 +(word*) bsearch16u::return#1 return zp ZP_WORD:6 335.00000000000006 +(word*) bsearch16u::return#2 return zp ZP_WORD:6 6.0 +(word*) bsearch16u::return#3 return zp ZP_WORD:6 4.0 (dword()) clock() (label) clock::@return (dword) clock::return -(dword) clock::return#0 return zp ZP_DWORD:13 1.3333333333333333 -(dword) clock::return#2 return zp ZP_DWORD:13 4.0 +(dword) clock::return#0 return zp ZP_DWORD:14 1.3333333333333333 +(dword) clock::return#2 return zp ZP_DWORD:14 4.0 (void()) clock_start() (label) clock_start::@return (byte*) heap_head @@ -100,37 +102,37 @@ (byte) init_dist_screen::d (byte) init_dist_screen::d#0 reg byte a 126.25 (word) init_dist_screen::ds -(word) init_dist_screen::ds#0 ds zp ZP_WORD:19 202.0 +(word) init_dist_screen::ds#0 ds zp ZP_WORD:20 202.0 (byte*) init_dist_screen::screen (byte*) init_dist_screen::screen_bottomline -(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:9 7.333333333333333 -(byte*) init_dist_screen::screen_bottomline#11 screen_bottomline zp ZP_WORD:9 6.787878787878787 +(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:2 7.333333333333333 +(byte*) init_dist_screen::screen_bottomline#11 screen_bottomline zp ZP_WORD:2 6.787878787878788 (byte*) init_dist_screen::screen_topline -(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:4 5.5 -(byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:4 7.0 +(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:9 5.5 +(byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:9 7.0 (byte) init_dist_screen::x -(byte) init_dist_screen::x#1 x zp ZP_BYTE:6 101.0 -(byte) init_dist_screen::x#2 x zp ZP_BYTE:6 30.3 +(byte) init_dist_screen::x#1 x zp ZP_BYTE:11 101.0 +(byte) init_dist_screen::x#10 x zp ZP_BYTE:11 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 reg byte a 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:11 202.0 -(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:11 19.238095238095237 +(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:12 101.0 +(byte) init_dist_screen::xb#10 xb zp ZP_BYTE:12 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 reg byte a 303.0 (word) init_dist_screen::xds -(word) init_dist_screen::xds#0 xds zp ZP_WORD:19 202.0 +(word) init_dist_screen::xds#0 xds zp ZP_WORD:20 202.0 (byte) init_dist_screen::y -(byte) init_dist_screen::y#1 y zp ZP_BYTE:12 16.5 -(byte) init_dist_screen::y#10 y zp ZP_BYTE:12 0.9705882352941178 +(byte) init_dist_screen::y#1 y zp ZP_BYTE:13 16.5 +(byte) init_dist_screen::y#10 y zp ZP_BYTE:13 0.9705882352941178 (byte) init_dist_screen::y2 (byte) init_dist_screen::y2#0 reg byte a 22.0 (byte) init_dist_screen::yd (byte) init_dist_screen::yd#0 reg byte a 33.0 (word) init_dist_screen::yds -(word) init_dist_screen::yds#0 yds zp ZP_WORD:17 4.869565217391305 +(word) init_dist_screen::yds#0 yds zp ZP_WORD:18 4.869565217391305 (void()) init_font_hex((byte*) init_font_hex::charset) -(byte~) init_font_hex::$0 $0 zp ZP_BYTE:25 1001.0 +(byte~) init_font_hex::$0 $0 zp ZP_BYTE:24 1001.0 (byte~) init_font_hex::$1 reg byte a 2002.0 (byte~) init_font_hex::$2 reg byte a 2002.0 (label) init_font_hex::@1 @@ -140,28 +142,28 @@ (label) init_font_hex::@5 (label) init_font_hex::@return (byte) init_font_hex::c -(byte) init_font_hex::c#1 c zp ZP_BYTE:6 16.5 -(byte) init_font_hex::c#6 c zp ZP_BYTE:6 1.1578947368421053 +(byte) init_font_hex::c#1 c zp ZP_BYTE:11 16.5 +(byte) init_font_hex::c#6 c zp ZP_BYTE:11 1.1578947368421053 (byte) init_font_hex::c1 -(byte) init_font_hex::c1#1 c1 zp ZP_BYTE:11 151.5 -(byte) init_font_hex::c1#4 c1 zp ZP_BYTE:11 13.466666666666667 +(byte) init_font_hex::c1#1 c1 zp ZP_BYTE:12 151.5 +(byte) init_font_hex::c1#4 c1 zp ZP_BYTE:12 13.466666666666667 (byte*) init_font_hex::charset -(byte*) init_font_hex::charset#0 charset zp ZP_WORD:9 35.5 -(byte*) init_font_hex::charset#2 charset zp ZP_WORD:9 108.35714285714285 -(byte*) init_font_hex::charset#5 charset zp ZP_WORD:9 22.0 +(byte*) init_font_hex::charset#0 charset zp ZP_WORD:18 35.5 +(byte*) init_font_hex::charset#2 charset zp ZP_WORD:18 108.35714285714285 +(byte*) init_font_hex::charset#5 charset zp ZP_WORD:18 22.0 (byte) init_font_hex::i (byte) init_font_hex::i#1 reg byte x 1501.5 (byte) init_font_hex::i#2 reg byte x 667.3333333333334 (byte) init_font_hex::idx -(byte) init_font_hex::idx#2 idx zp ZP_BYTE:12 551.0 +(byte) init_font_hex::idx#2 idx zp ZP_BYTE:13 551.0 (byte) init_font_hex::idx#3 reg byte y 202.0 -(byte) init_font_hex::idx#5 idx zp ZP_BYTE:12 600.5999999999999 +(byte) init_font_hex::idx#5 idx zp ZP_BYTE:13 600.5999999999999 (byte*) init_font_hex::proto_hi -(byte*) init_font_hex::proto_hi#1 proto_hi zp ZP_WORD:4 7.333333333333333 -(byte*) init_font_hex::proto_hi#6 proto_hi zp ZP_WORD:4 56.83333333333334 +(byte*) init_font_hex::proto_hi#1 proto_hi zp ZP_WORD:9 7.333333333333333 +(byte*) init_font_hex::proto_hi#6 proto_hi zp ZP_WORD:9 56.83333333333334 (byte*) init_font_hex::proto_lo -(byte*) init_font_hex::proto_lo#1 proto_lo zp ZP_WORD:17 50.5 -(byte*) init_font_hex::proto_lo#4 proto_lo zp ZP_WORD:17 92.53846153846155 +(byte*) init_font_hex::proto_lo#1 proto_lo zp ZP_WORD:20 50.5 +(byte*) init_font_hex::proto_lo#4 proto_lo zp ZP_WORD:20 92.53846153846155 (void()) init_squares() (byte~) init_squares::$3 reg byte a 22.0 (byte~) init_squares::$4 reg byte a 22.0 @@ -171,13 +173,13 @@ (byte) init_squares::i#1 reg byte x 16.5 (byte) init_squares::i#2 reg byte x 5.5 (word) init_squares::sqr -(word) init_squares::sqr#1 sqr zp ZP_WORD:4 7.333333333333333 -(word) init_squares::sqr#2 sqr zp ZP_WORD:4 6.6000000000000005 +(word) init_squares::sqr#1 sqr zp ZP_WORD:6 7.333333333333333 +(word) init_squares::sqr#2 sqr zp ZP_WORD:6 6.6000000000000005 (word*) init_squares::squares (word*) init_squares::squares#1 squares zp ZP_WORD:9 3.6666666666666665 (word*) init_squares::squares#2 squares zp ZP_WORD:9 16.5 (void()) main() -(dword~) main::$4 $4 zp ZP_DWORD:13 4.0 +(dword~) main::$4 $4 zp ZP_DWORD:14 4.0 (label) main::@1 (label) main::@2 (label) main::@3 @@ -189,7 +191,7 @@ (byte*) main::BASE_SCREEN (const byte*) main::BASE_SCREEN#0 BASE_SCREEN = (byte*) 1024 (dword) main::cyclecount -(dword) main::cyclecount#0 cyclecount zp ZP_DWORD:13 4.0 +(dword) main::cyclecount#0 cyclecount zp ZP_DWORD:14 4.0 (label) main::toD0181 (word~) main::toD0181_$0 (number~) main::toD0181_$1 @@ -232,19 +234,19 @@ (label) print_byte_at::@1 (label) print_byte_at::@return (byte*) print_byte_at::at -(byte*) print_byte_at::at#0 at zp ZP_WORD:9 4.0 -(byte*) print_byte_at::at#1 at zp ZP_WORD:9 4.0 -(byte*) print_byte_at::at#2 at zp ZP_WORD:9 1.3333333333333333 +(byte*) print_byte_at::at#0 at zp ZP_WORD:2 4.0 +(byte*) print_byte_at::at#1 at zp ZP_WORD:2 4.0 +(byte*) print_byte_at::at#2 at zp ZP_WORD:2 1.3333333333333333 (byte) print_byte_at::b -(byte) print_byte_at::b#0 b zp ZP_BYTE:12 2.0 -(byte) print_byte_at::b#1 b zp ZP_BYTE:12 2.0 -(byte) print_byte_at::b#2 b zp ZP_BYTE:12 1.6 +(byte) print_byte_at::b#0 b zp ZP_BYTE:13 2.0 +(byte) print_byte_at::b#1 b zp ZP_BYTE:13 2.0 +(byte) print_byte_at::b#2 b zp ZP_BYTE:13 1.6 (void()) print_char_at((byte) print_char_at::ch , (byte*) print_char_at::at) (label) print_char_at::@return (byte*) print_char_at::at -(byte*) print_char_at::at#0 at zp ZP_WORD:2 4.0 -(byte*) print_char_at::at#1 at zp ZP_WORD:2 2.0 -(byte*) print_char_at::at#2 at zp ZP_WORD:2 6.0 +(byte*) print_char_at::at#0 at zp ZP_WORD:4 4.0 +(byte*) print_char_at::at#1 at zp ZP_WORD:4 2.0 +(byte*) print_char_at::at#2 at zp ZP_WORD:4 6.0 (byte) print_char_at::ch (byte) print_char_at::ch#0 reg byte x 2.0 (byte) print_char_at::ch#1 reg byte x 4.0 @@ -254,74 +256,74 @@ (label) print_dword_at::@return (byte*) print_dword_at::at (dword) print_dword_at::dw -(dword) print_dword_at::dw#0 dw zp ZP_DWORD:13 2.0 +(dword) print_dword_at::dw#0 dw zp ZP_DWORD:14 2.0 (byte[]) print_hextab (const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef" (void()) print_word_at((word) print_word_at::w , (byte*) print_word_at::at) (label) print_word_at::@1 (label) print_word_at::@return (byte*) print_word_at::at -(byte*) print_word_at::at#2 at zp ZP_WORD:9 0.8 +(byte*) print_word_at::at#2 at zp ZP_WORD:2 0.8 (word) print_word_at::w -(word) print_word_at::w#0 w zp ZP_WORD:4 4.0 -(word) print_word_at::w#1 w zp ZP_WORD:4 4.0 -(word) print_word_at::w#2 w zp ZP_WORD:4 2.0 +(word) print_word_at::w#0 w zp ZP_WORD:9 4.0 +(word) print_word_at::w#1 w zp ZP_WORD:9 4.0 +(word) print_word_at::w#2 w zp ZP_WORD:9 2.0 (word()) sqr((byte) sqr::val) (byte~) sqr::$0 reg byte a 4.0 (label) sqr::@return (word) sqr::return -(word) sqr::return#0 return zp ZP_WORD:19 28.5 -(word) sqr::return#2 return#2 zp ZP_WORD:17 22.0 -(word) sqr::return#3 return zp ZP_WORD:19 202.0 +(word) sqr::return#0 return zp ZP_WORD:20 28.5 +(word) sqr::return#2 return#2 zp ZP_WORD:18 22.0 +(word) sqr::return#3 return zp ZP_WORD:20 202.0 (byte) sqr::val (byte) sqr::val#0 reg byte a 22.0 (byte) sqr::val#1 reg byte a 202.0 (byte) sqr::val#2 reg byte a 114.0 (byte()) sqrt((word) sqrt::val) -(word~) sqrt::$1 $1 zp ZP_WORD:2 2.0 -(word~) sqrt::$3 $3 zp ZP_WORD:2 4.0 +(word~) sqrt::$1 $1 zp ZP_WORD:6 2.0 +(word~) sqrt::$3 $3 zp ZP_WORD:6 4.0 (label) sqrt::@1 (label) sqrt::@return (word*) sqrt::found -(word*) sqrt::found#0 found zp ZP_WORD:2 4.0 +(word*) sqrt::found#0 found zp ZP_WORD:6 4.0 (byte) sqrt::return (byte) sqrt::return#0 reg byte a 34.33333333333333 (byte) sqrt::return#2 reg byte a 202.0 (byte) sqrt::sq (word) sqrt::val -(word) sqrt::val#0 val zp ZP_WORD:19 103.0 +(word) sqrt::val#0 val zp ZP_WORD:20 103.0 reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] +zp ZP_WORD:2 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 print_word_at::at#2 print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -zp ZP_WORD:2 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] -reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +zp ZP_WORD:4 [ bsearch16u::items#10 bsearch16u::items#16 print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] +reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] +zp ZP_WORD:6 [ init_squares::sqr#2 init_squares::sqr#1 bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#18 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] -zp ZP_WORD:4 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] -zp ZP_BYTE:6 [ init_font_hex::c#6 init_font_hex::c#1 init_dist_screen::x#2 init_dist_screen::x#1 ] -zp ZP_WORD:9 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 init_squares::squares#2 init_squares::squares#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#1 print_word_at::at#2 print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] -zp ZP_BYTE:11 [ init_font_hex::c1#4 init_font_hex::c1#1 init_dist_screen::xb#2 init_dist_screen::xb#1 ] +zp ZP_WORD:9 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 init_squares::squares#2 init_squares::squares#1 init_dist_screen::screen_topline#11 init_dist_screen::screen_topline#1 print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] +zp ZP_BYTE:11 [ init_font_hex::c#6 init_font_hex::c#1 init_dist_screen::x#10 init_dist_screen::x#1 ] +zp ZP_BYTE:12 [ init_font_hex::c1#4 init_font_hex::c1#1 init_dist_screen::xb#10 init_dist_screen::xb#1 ] reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] -zp ZP_BYTE:12 [ init_font_hex::idx#5 init_font_hex::idx#2 init_dist_screen::y#10 init_dist_screen::y#1 print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] -zp ZP_DWORD:13 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_dword_at::dw#0 ] +zp ZP_BYTE:13 [ init_font_hex::idx#5 init_font_hex::idx#2 init_dist_screen::y#10 init_dist_screen::y#1 print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] +zp ZP_DWORD:14 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_dword_at::dw#0 ] reg byte a [ print_byte_at::$0 ] reg byte y [ print_byte_at::$2 ] reg byte a [ init_dist_screen::y2#0 ] -zp ZP_WORD:17 [ sqr::return#2 init_dist_screen::yds#0 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +zp ZP_WORD:18 [ sqr::return#2 init_dist_screen::yds#0 init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] reg byte a [ init_dist_screen::x2#0 ] -zp ZP_WORD:19 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] +zp ZP_WORD:20 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] reg byte a [ sqrt::return#2 ] reg byte a [ init_dist_screen::d#0 ] reg byte a [ sqrt::return#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] -zp ZP_WORD:21 [ bsearch16u::pivot#0 ] -zp ZP_WORD:23 [ bsearch16u::result#0 ] +zp ZP_WORD:22 [ bsearch16u::result#0 ] reg byte a [ sqr::$0 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] -zp ZP_BYTE:25 [ init_font_hex::$0 ] +zp ZP_BYTE:24 [ init_font_hex::$0 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] reg byte y [ init_font_hex::idx#3 ] diff --git a/src/test/ref/screen-show-spiral-buckets.asm b/src/test/ref/screen-show-spiral-buckets.asm index ee8f5a091..027d5e654 100644 --- a/src/test/ref/screen-show-spiral-buckets.asm +++ b/src/test/ref/screen-show-spiral-buckets.asm @@ -24,17 +24,17 @@ .label heap_head = 2 .label SQUARES = 5 // Screen containing distance to center - .label SCREEN_DIST = $16 + .label SCREEN_DIST = $1c // Screen containing angle to center - .label SCREEN_ANGLE = $e + .label SCREEN_ANGLE = $10 // Array containing the bucket size for each of the distance buckets - .label BUCKET_SIZES = $10 + .label BUCKET_SIZES = $12 // Buckets containing screen indices for each distance from the center. // BUCKETS[dist] is an array of words containing screen indices. // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist] - .label BUCKETS = $12 + .label BUCKETS = $14 // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes) - .label BUCKET_IDX = $18 + .label BUCKET_IDX = $16 bbegin: lda #<$3e8 sta malloc.size @@ -88,12 +88,12 @@ bbegin: jsr main rts main: { - .label bucket = $14 - .label bucket_size = $1b - .label bucket_idx = $1a + .label bucket = $18 + .label bucket_size = $1f + .label bucket_idx = $1e .label offset = $a - .label fill = $16 - .label angle = $18 + .label fill = $1a + .label angle = $1c .label min_angle = 4 .label fill1 = 8 .label min_offset = 8 @@ -229,25 +229,25 @@ main: { jmp b8 } // Initialize buckets containing indices of chars on the screen with specific distances to the center. -// init_buckets(byte* zeropage($16) screen) +// init_buckets(byte* zeropage($1c) screen) init_buckets: { .label _5 = 5 - .label _9 = $22 - .label _10 = $1c - .label _12 = $20 - .label _13 = $22 - .label screen = $16 + .label _9 = $24 + .label _10 = $20 + .label _12 = $22 + .label _13 = $24 + .label screen = $1c .label dist = 8 .label i1 = $a - .label i2 = $14 - .label distance = $1a - .label bucket = $22 + .label i2 = $18 + .label distance = $1e + .label bucket = $24 .label dist_3 = 2 - .label i4 = $1e + .label i4 = $1a .label dist_5 = 2 .label _15 = 5 - .label _16 = $20 - .label _17 = $22 + .label _16 = $22 + .label _17 = $24 .label dist_8 = 2 ldy #0 // Init bucket sizes to 0 @@ -431,19 +431,19 @@ malloc: { } // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center -// init_angle_screen(byte* zeropage($1e) screen) +// init_angle_screen(byte* zeropage($1a) screen) init_angle_screen: { .label _11 = $a - .label screen = $1e - .label screen_topline = $14 - .label screen_bottomline = $1e - .label xw = $20 - .label yw = $22 + .label screen = $1a + .label screen_topline = $18 + .label screen_bottomline = $1a + .label xw = $22 + .label yw = $24 .label angle_w = $a - .label ang_w = $1b + .label ang_w = $1f .label x = 4 .label xb = 7 - .label y = $1a + .label y = $1e lda screen clc adc #<$28*$c @@ -465,29 +465,6 @@ init_angle_screen: { sta xb lda #0 sta x - b2: - lda x - cmp #$13+1 - bcc b3 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - inc y - lda #$d - cmp y - bne b1 - rts b3: lda x asl @@ -528,23 +505,44 @@ init_angle_screen: { sta (screen_bottomline),y inc x dec xb - jmp b2 + lda x + cmp #$13+1 + bcc b3 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + inc y + lda #$d + cmp y + bne b1 + rts } // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($20) x, signed word zeropage($22) y) +// atan2_16(signed word zeropage($22) x, signed word zeropage($24) y) atan2_16: { .label _2 = 5 .label _7 = 8 .label yi = 5 .label xi = 8 .label angle = $a - .label xd = $1c + .label xd = $e .label yd = $c .label return = $a - .label x = $20 - .label y = $22 + .label x = $22 + .label y = $24 lda y+1 bmi !b1+ jmp b1 @@ -726,13 +724,13 @@ atan2_16: { init_dist_screen: { .label screen = 8 .label screen_bottomline = $a - .label yds = $1c + .label yds = $20 .label screen_topline = 8 .label y = 7 - .label xds = $1e - .label ds = $1e - .label x = $1b - .label xb = $1a + .label xds = $22 + .label ds = $22 + .label x = $1f + .label xb = $1e jsr init_squares lda screen clc @@ -761,29 +759,6 @@ init_dist_screen: { sta xb lda #0 sta x - b5: - lda x - cmp #$13+1 - bcc b6 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - inc y - lda #$d - cmp y - bne b1 - rts b6: lda x asl @@ -810,7 +785,28 @@ init_dist_screen: { sta (screen_bottomline),y inc x dec xb - jmp b5 + lda x + cmp #$13+1 + bcc b6 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + inc y + lda #$d + cmp y + bne b1 + rts b8: sec sbc #$27 @@ -823,16 +819,16 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($1e) val) +// sqrt(word zeropage($22) val) sqrt: { - .label _1 = $c - .label _3 = $c - .label found = $c - .label val = $1e + .label _1 = $e + .label _3 = $e + .label found = $e + .label val = $22 lda SQUARES - sta bsearch16u.items + sta bsearch16u.items_1 lda SQUARES+1 - sta bsearch16u.items+1 + sta bsearch16u.items_1+1 jsr bsearch16u lda _3 sec @@ -851,46 +847,27 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($1e) key, word* zeropage($c) items, byte register(X) num) +// bsearch16u(word zeropage($22) key, word* zeropage($e) items, byte register(X) num) bsearch16u: { - .label _2 = $c - .label pivot = $20 - .label result = $22 - .label return = $c - .label items = $c - .label key = $1e + .label _2 = $e + .label pivot = $e + .label result = $24 + .label return = $e + .label items = $e + .label key = $22 + .label items_1 = $c + .label items_10 = $c + .label items_16 = $c ldx #NUM_SQUARES - b3: - cpx #0 - bne b4 - ldy #1 - lda (items),y - cmp key+1 - bne !+ - dey - lda (items),y - cmp key - beq b2 - !: - bcc b2 - lda _2 - sec - sbc #<1*SIZEOF_WORD - sta _2 - lda _2+1 - sbc #>1*SIZEOF_WORD - sta _2+1 - b2: - rts b4: txa lsr asl clc - adc items + adc items_10 sta pivot lda #0 - adc items+1 + adc items_10+1 sta pivot+1 sec lda key @@ -904,38 +881,66 @@ bsearch16u: { bne b6 lda result bne b6 - lda pivot - sta return - lda pivot+1 - sta return+1 + breturn: rts b6: lda result+1 - bmi b7 + bmi b10 bne !+ lda result - beq b7 + beq b10 !: lda #1*SIZEOF_WORD clc - adc pivot + adc items sta items - lda #0 - adc pivot+1 - sta items+1 + bcc !+ + inc items+1 + !: dex b7: txa lsr tax - jmp b3 + cpx #0 + bne b9 + ldy #1 + lda (items),y + cmp key+1 + bne !+ + dey + lda (items),y + cmp key + beq breturn + !: + bcc breturn + lda _2 + sec + sbc #<1*SIZEOF_WORD + sta _2 + lda _2+1 + sbc #>1*SIZEOF_WORD + sta _2+1 + rts + b9: + lda items + sta items_16 + lda items+1 + sta items_16+1 + jmp b4 + b10: + lda items_10 + sta items + lda items_10+1 + sta items+1 + jmp b7 } // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $1e - .label return_2 = $1c + .label return = $22 + .label return_2 = $20 asl tay lda (SQUARES),y @@ -948,8 +953,8 @@ sqr: { // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label squares = $14 - .label sqr = $1c + .label squares = $1a + .label sqr = $18 lda #NUM_SQUARES*SIZEOF_WORD diff --git a/src/test/ref/screen-show-spiral-buckets.cfg b/src/test/ref/screen-show-spiral-buckets.cfg index fd128dd4e..90aebedc3 100644 --- a/src/test/ref/screen-show-spiral-buckets.cfg +++ b/src/test/ref/screen-show-spiral-buckets.cfg @@ -190,46 +190,46 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an [99] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) [99] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) [99] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - to:init_angle_screen::@2 -init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [100] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [100] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [101] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 - to:init_angle_screen::@4 -init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 - to:init_angle_screen::@return -init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [106] return - to:@return -init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [114] call atan2_16 - [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + to:init_angle_screen::@3 +init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@2 + [100] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 ) + [100] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 ) + [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 + [102] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [104] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [108] call atan2_16 + [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [126] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [127] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [111] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 + [114] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 + [116] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 + [118] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 + [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 + [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 to:init_angle_screen::@2 +init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@5 + [122] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 + to:init_angle_screen::@4 +init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 + [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [126] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + to:init_angle_screen::@return +init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 + [127] return + to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@3 [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 @@ -352,50 +352,50 @@ init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_d to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@4 [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - to:init_dist_screen::@5 -init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@14 - [183] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 ) - [183] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 ) - [184] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 - to:init_dist_screen::@7 -init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 - [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 - [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 - [187] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [188] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 - to:init_dist_screen::@return -init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 - [189] return - to:@return -init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [191] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 + to:init_dist_screen::@6 +init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@5 + [183] (byte) init_dist_screen::xb#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#1 init_dist_screen::@12/(byte) $27 ) + [183] (byte) init_dist_screen::x#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#1 init_dist_screen::@12/(byte) 0 ) + [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 + [185] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 - [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9 - [193] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) - [194] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [195] call sqr - [196] (word) sqr::return#3 ← (word) sqr::return#0 + [187] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) + [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [189] call sqr + [190] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@13 init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@10 - [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [200] call sqrt - [201] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [194] call sqrt + [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@14 init_dist_screen::@14: scope:[init_dist_screen] from init_dist_screen::@13 - [202] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [207] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [208] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 + [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 to:init_dist_screen::@5 +init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@14 + [203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 + to:init_dist_screen::@7 +init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 + [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 + [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 + [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [207] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 + to:init_dist_screen::@return +init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 + [208] return + to:@return init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 [209] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@10 @@ -419,75 +419,78 @@ sqrt::@return: scope:[sqrt] from sqrt::@1 to:@return bsearch16u: scope:[bsearch16u] from sqrt [220] phi() + to:bsearch16u::@4 +bsearch16u::@4: scope:[bsearch16u] from bsearch16u bsearch16u::@9 + [221] (word*) bsearch16u::items#10 ← phi( bsearch16u::@9/(word*~) bsearch16u::items#16 bsearch16u/(word*) bsearch16u::items#1 ) + [221] (byte) bsearch16u::num#10 ← phi( bsearch16u::@9/(byte) bsearch16u::num#0 bsearch16u/(const byte) NUM_SQUARES#3 ) + [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 + [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 + [225] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 + to:bsearch16u::@return +bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@4 + [227] (word*) bsearch16u::return#1 ← phi( bsearch16u::@4/(word*) bsearch16u::pivot#0 bsearch16u::@2/(word*) bsearch16u::return#2 ) + [228] return + to:@return +bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 + [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 + to:bsearch16u::@8 +bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@6 + [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [231] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 + to:bsearch16u::@7 +bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@10 bsearch16u::@8 + [232] (word*) bsearch16u::items#11 ← phi( bsearch16u::@8/(word*) bsearch16u::items#0 bsearch16u::@10/(word*~) bsearch16u::items#19 ) + [232] (byte) bsearch16u::num#5 ← phi( bsearch16u::@8/(byte) bsearch16u::num#1 bsearch16u::@10/(byte) bsearch16u::num#10 ) + [233] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 to:bsearch16u::@3 -bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [221] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [221] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 +bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@7 + [234] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + [235] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD + [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD to:bsearch16u::@2 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 - [225] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [237] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#11 bsearch16u::@1/(word*~) bsearch16u::$2 ) to:bsearch16u::@return -bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 - [226] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) - [227] return - to:@return -bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 - to:bsearch16u::@8 -bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 - to:bsearch16u::@return -bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 - to:bsearch16u::@9 -bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 +bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@3 + [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 + to:bsearch16u::@4 +bsearch16u::@10: scope:[bsearch16u] from bsearch16u::@6 + [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 to:bsearch16u::@7 -bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [237] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [237] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 - to:bsearch16u::@3 sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 - [239] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) - [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 - [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) + [240] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) + [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 + [242] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) to:sqr::@return sqr::@return: scope:[sqr] from sqr - [242] return + [243] return to:@return init_squares: scope:[init_squares] from init_dist_screen - [243] phi() - [244] call malloc + [244] phi() + [245] call malloc to:init_squares::@2 init_squares::@2: scope:[init_squares] from init_squares - [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 + [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + [247] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 - [247] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) - [247] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [247] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) - [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 - [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD - [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 - [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 - [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 - [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 - [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 + [248] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) + [248] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) + [248] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) + [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 + [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD + [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 + [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 + [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 + [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 + [255] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 - [255] return + [256] return to:@return diff --git a/src/test/ref/screen-show-spiral-buckets.log b/src/test/ref/screen-show-spiral-buckets.log index a405361e5..6b9357589 100644 --- a/src/test/ref/screen-show-spiral-buckets.log +++ b/src/test/ref/screen-show-spiral-buckets.log @@ -2953,6 +2953,9 @@ Eliminating unused constant (const word*) SQUARES#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $3e8 in if((word) init_buckets::i1#1!=(number) $3e8) goto init_buckets::@3 Adding number conversion cast (unumber) $3e8 in if((word) init_buckets::i4#1!=(number) $3e8) goto init_buckets::@9 Adding number conversion cast (unumber) $13+1 in if((byte) init_angle_screen::x#2<(byte) $13+(number) 1) goto init_angle_screen::@3 @@ -2980,16 +2983,42 @@ Finalized unsigned number type (byte) $d Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [24] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD -Constant right-side identified [30] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 -Constant right-side identified [59] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 -Constant right-side identified [133] (byte*~) main::$20 ← (const byte*) COLS#0 + (word) $3e7 -Constant right-side identified [135] (word) malloc::size#3 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE -Constant right-side identified [140] (word) malloc::size#4 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_POINTER -Constant right-side identified [145] (word) malloc::size#5 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE -Constant right-side identified [150] (byte~) init_buckets::$0 ← (const byte) NUM_BUCKETS#0 - (byte) 1 -Constant right-side identified [160] (byte~) init_buckets::$3 ← (const byte) NUM_BUCKETS#0 - (byte) 1 -Constant right-side identified [172] (byte~) init_buckets::$7 ← (const byte) NUM_BUCKETS#0 - (byte) 1 +Alias (byte) bsearch16u::num#0 = (byte) bsearch16u::num#3 +Alias (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 +Alias (byte) bsearch16u::num#10 = (byte) bsearch16u::num#9 (byte) bsearch16u::num#11 +Alias (word*) bsearch16u::items#10 = (word*) bsearch16u::items#12 +Alias (word*) bsearch16u::items#11 = (word*) bsearch16u::items#14 (word*) bsearch16u::items#13 +Alias (byte) init_angle_screen::x#1 = (byte) init_angle_screen::x#2 +Alias (byte) init_angle_screen::xb#1 = (byte) init_angle_screen::xb#2 +Alias (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#6 +Alias (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#6 +Alias (byte) init_dist_screen::x#1 = (byte) init_dist_screen::x#2 +Alias (byte) init_dist_screen::xb#1 = (byte) init_dist_screen::xb#2 +Alias (byte) init_dist_screen::x#13 = (byte) init_dist_screen::x#9 (byte) init_dist_screen::x#14 +Alias (byte) init_dist_screen::xb#12 = (byte) init_dist_screen::xb#14 (byte) init_dist_screen::xb#13 +Alias (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#11 (byte) init_dist_screen::x#12 +Alias (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#11 (byte) init_dist_screen::xb#9 +Successful SSA optimization Pass2AliasElimination +Alias (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#13 +Alias (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#12 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) bsearch16u::num#12 (const byte) bsearch16u::num#2 +Identical Phi Values (word*) bsearch16u::items#15 (word*) bsearch16u::items#1 +Identical Phi Values (byte) init_angle_screen::x#7 (const byte) init_angle_screen::x#0 +Identical Phi Values (byte) init_angle_screen::xb#7 (const byte) init_angle_screen::xb#0 +Identical Phi Values (byte) init_dist_screen::x#15 (const byte) init_dist_screen::x#0 +Identical Phi Values (byte) init_dist_screen::xb#15 (const byte) init_dist_screen::xb#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [30] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD +Constant right-side identified [36] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 +Constant right-side identified [65] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 +Constant right-side identified [139] (byte*~) main::$20 ← (const byte*) COLS#0 + (word) $3e7 +Constant right-side identified [141] (word) malloc::size#3 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE +Constant right-side identified [146] (word) malloc::size#4 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_POINTER +Constant right-side identified [151] (word) malloc::size#5 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE +Constant right-side identified [156] (byte~) init_buckets::$0 ← (const byte) NUM_BUCKETS#0 - (byte) 1 +Constant right-side identified [166] (byte~) init_buckets::$3 ← (const byte) NUM_BUCKETS#0 - (byte) 1 +Constant right-side identified [178] (byte~) init_buckets::$7 ← (const byte) NUM_BUCKETS#0 - (byte) 1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD Constant (const byte) init_squares::$2 = NUM_SQUARES#3-1 @@ -3002,16 +3031,21 @@ Constant (const byte) init_buckets::$0 = NUM_BUCKETS#0-1 Constant (const byte) init_buckets::$3 = NUM_BUCKETS#0-1 Constant (const byte) init_buckets::$7 = NUM_BUCKETS#0-1 Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [37] init_squares::i#1 ← ++ init_squares::i#2 to ++ -Resolved ranged comparison value [38] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 -Resolved ranged next value [84] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ -Resolved ranged comparison value [85] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 -Resolved ranged next value [153] init_buckets::i#1 ← ++ init_buckets::i#2 to ++ -Resolved ranged comparison value [154] if(init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 to (const byte) init_buckets::$0+(number) 1 -Resolved ranged next value [170] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++ -Resolved ranged comparison value [171] if(init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 to (const byte) init_buckets::$3+(number) 1 -Resolved ranged next value [175] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++ -Resolved ranged comparison value [176] if(init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 to (const byte) init_buckets::$7+(number) 1 +Removing PHI-reference to removed block (bsearch16u::@6_1) in block bsearch16u::@8 +if() condition always true - replacing block destination [280] if((const byte) bsearch16u::num#2>(byte) 0) goto bsearch16u::@7 +if() condition always true - replacing block destination [282] if((const byte) init_angle_screen::x#0<(byte) $13+(byte) 1) goto init_angle_screen::@3 +if() condition always true - replacing block destination [284] if((const byte) init_dist_screen::x#0<(byte) $13+(byte) 1) goto init_dist_screen::@6 +Successful SSA optimization Pass2ConstantIfs +Resolved ranged next value [43] init_squares::i#1 ← ++ init_squares::i#2 to ++ +Resolved ranged comparison value [44] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 +Resolved ranged next value [90] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ +Resolved ranged comparison value [91] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 +Resolved ranged next value [159] init_buckets::i#1 ← ++ init_buckets::i#2 to ++ +Resolved ranged comparison value [160] if(init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 to (const byte) init_buckets::$0+(number) 1 +Resolved ranged next value [176] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++ +Resolved ranged comparison value [177] if(init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 to (const byte) init_buckets::$3+(number) 1 +Resolved ranged next value [181] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++ +Resolved ranged comparison value [182] if(init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 to (const byte) init_buckets::$7+(number) 1 Adding number conversion cast (unumber) init_squares::$2+1 in if((byte) init_squares::i#1!=(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) 1 in if((byte) init_squares::i#1!=(unumber)(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) atan2_16::$16+1 in if((byte) atan2_16::i#1==(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17 @@ -3040,6 +3074,8 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (word*) bsearch16u::items#11 = (word*) bsearch16u::items#2 +Successful SSA optimization Pass2AliasElimination Inlining Noop Cast [3] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 Inlining Noop Cast [10] (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#0 keeping bsearch16u::key#0 Inlining Noop Cast [11] (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0) keeping *(bsearch16u::pivot#0) @@ -3074,10 +3110,10 @@ Rewriting multiplication to use shift [154] (word) malloc::size#6 ← *((byte*~) Rewriting multiplication to use shift [158] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 * (const byte) SIZEOF_POINTER Rewriting multiplication to use shift [170] (word~) init_buckets::$13 ← (word~) init_buckets::$9 * (const byte) SIZEOF_POINTER Rewriting multiplication to use shift [174] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [186] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [186] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 * (byte) 2 Rewriting multiplication to use shift [190] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 * (byte) 2 Rewriting multiplication to use shift [217] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2 -Rewriting multiplication to use shift [228] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [228] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) malloc::size#1 Inlining constant with var siblings (const word) malloc::size#2 @@ -3140,7 +3176,8 @@ Constant inlined bsearch16u::$18 = (byte) 1*(const byte) SIZEOF_WORD Constant inlined init_squares::i#0 = (byte) 0 Constant inlined init_squares::$2 = (const byte) NUM_SQUARES#3-(byte) 1 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting bsearch16u::@18(between bsearch16u::@9 and bsearch16u::@10) +Added new block during phi lifting bsearch16u::@18(between bsearch16u::@6 and bsearch16u::@7) +Added new block during phi lifting bsearch16u::@19(between bsearch16u::@9 and bsearch16u::@10) Added new block during phi lifting init_squares::@4(between init_squares::@1 and init_squares::@1) Added new block during phi lifting atan2_16::@34(between atan2_16::@27 and atan2_16::@15) Added new block during phi lifting atan2_16::@35(between atan2_16::@15 and atan2_16::@17) @@ -3156,7 +3193,9 @@ Added new block during phi lifting init_buckets::@14(between init_buckets::@11 a Added new block during phi lifting init_buckets::@15(between init_buckets::@7 and init_buckets::@7) Added new block during phi lifting init_buckets::@16(between init_buckets::@9 and init_buckets::@9) Added new block during phi lifting init_angle_screen::@10(between init_angle_screen::@4 and init_angle_screen::@1) +Added new block during phi lifting init_angle_screen::@11(between init_angle_screen::@2 and init_angle_screen::@3) Added new block during phi lifting init_dist_screen::@23(between init_dist_screen::@7 and init_dist_screen::@1) +Added new block during phi lifting init_dist_screen::@24(between init_dist_screen::@5 and init_dist_screen::@6) Adding NOP phi() at start of @begin Adding NOP phi() at start of @8 Adding NOP phi() at start of @16 @@ -3171,15 +3210,18 @@ Adding NOP phi() at start of main::@28 Adding NOP phi() at start of init_buckets Adding NOP phi() at start of init_buckets::@4 Adding NOP phi() at start of init_buckets::@6 +Adding NOP phi() at start of init_angle_screen::@2_1 Adding NOP phi() at start of init_dist_screen +Adding NOP phi() at start of init_dist_screen::@5_1 +Adding NOP phi() at start of bsearch16u CALL GRAPH Calls in [] to malloc:5 malloc:8 malloc:11 malloc:14 malloc:17 main:20 Calls in [main] to init_dist_screen:25 init_angle_screen:27 init_buckets:29 Calls in [init_buckets] to malloc:88 -Calls in [init_angle_screen] to atan2_16:148 -Calls in [init_dist_screen] to init_squares:235 sqr:247 sqr:267 sqrt:272 -Calls in [sqrt] to bsearch16u:289 -Calls in [init_squares] to malloc:329 +Calls in [init_angle_screen] to atan2_16:140 +Calls in [init_dist_screen] to init_squares:236 sqr:248 sqr:260 sqrt:265 +Calls in [sqrt] to bsearch16u:291 +Calls in [init_squares] to malloc:332 Created 54 initial phi equivalence classes Coalesced [7] heap_head#85 ← heap_head#1 @@ -3211,72 +3253,72 @@ Coalesced [121] init_buckets::i#3 ← init_buckets::i#1 Not coalescing [124] heap_head#1 ← malloc::mem#0 Coalesced [128] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#0 Coalesced [129] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#0 -Coalesced [138] init_angle_screen::y#7 ← init_angle_screen::y#1 -Coalesced [139] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1 -Coalesced [140] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1 -Coalesced [162] init_angle_screen::x#5 ← init_angle_screen::x#1 -Coalesced [163] init_angle_screen::xb#5 ← init_angle_screen::xb#1 -Coalesced [166] atan2_16::yi#17 ← atan2_16::$2 -Coalesced [170] atan2_16::xi#14 ← atan2_16::$7 -Coalesced [172] atan2_16::yi#19 ← atan2_16::yi#0 -Coalesced [173] atan2_16::xi#16 ← atan2_16::xi#0 -Coalesced [176] atan2_16::angle#22 ← atan2_16::angle#12 -Coalesced [181] atan2_16::angle#27 ← atan2_16::angle#4 -Coalesced [185] atan2_16::return#5 ← atan2_16::angle#5 -Coalesced [188] atan2_16::return#6 ← atan2_16::angle#11 -Coalesced [189] atan2_16::angle#26 ← atan2_16::angle#1 -Not coalescing [190] atan2_16::shift#5 ← atan2_16::i#2 -Not coalescing [191] atan2_16::xd#10 ← atan2_16::xi#3 -Not coalescing [192] atan2_16::yd#10 ← atan2_16::yi#3 -Coalesced [198] atan2_16::yd#13 ← atan2_16::yd#2 -Coalesced [199] atan2_16::xd#13 ← atan2_16::xd#2 -Coalesced [206] atan2_16::yi#21 ← atan2_16::yi#2 -Coalesced [207] atan2_16::angle#25 ← atan2_16::angle#3 -Coalesced [208] atan2_16::xi#18 ← atan2_16::xi#2 -Coalesced [212] atan2_16::yi#18 ← atan2_16::yi#8 -Coalesced [213] atan2_16::xi#15 ← atan2_16::xi#8 -Coalesced [214] atan2_16::i#12 ← atan2_16::i#1 -Coalesced [215] atan2_16::angle#21 ← atan2_16::angle#13 -Coalesced (already) [216] atan2_16::angle#23 ← atan2_16::angle#13 -Coalesced [221] atan2_16::yi#20 ← atan2_16::yi#1 -Coalesced [222] atan2_16::angle#24 ← atan2_16::angle#2 -Coalesced [223] atan2_16::xi#17 ← atan2_16::xi#1 -Coalesced [224] atan2_16::yd#12 ← atan2_16::yd#3 -Coalesced [225] atan2_16::xd#12 ← atan2_16::xd#3 -Coalesced [229] atan2_16::shift#6 ← atan2_16::shift#1 -Coalesced [230] atan2_16::xd#11 ← atan2_16::xd#1 -Coalesced [231] atan2_16::yd#11 ← atan2_16::yd#1 -Not coalescing [232] atan2_16::xi#13 ← atan2_16::x#0 -Not coalescing [233] atan2_16::yi#16 ← atan2_16::y#0 -Coalesced [237] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0 -Coalesced [238] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0 -Coalesced [243] init_dist_screen::yd#2 ← init_dist_screen::$5 -Coalesced [246] sqr::val#4 ← sqr::val#0 -Coalesced [257] init_dist_screen::y#15 ← init_dist_screen::y#1 -Coalesced [258] init_dist_screen::screen_topline#16 ← init_dist_screen::screen_topline#1 -Coalesced [259] init_dist_screen::screen_bottomline#16 ← init_dist_screen::screen_bottomline#1 -Coalesced [263] init_dist_screen::xd#2 ← init_dist_screen::$14 -Coalesced [266] sqr::val#3 ← sqr::val#1 -Coalesced [281] init_dist_screen::x#9 ← init_dist_screen::x#1 -Coalesced [282] init_dist_screen::xb#9 ← init_dist_screen::xb#1 -Coalesced [284] init_dist_screen::xd#1 ← init_dist_screen::$16 -Coalesced [286] init_dist_screen::yd#1 ← init_dist_screen::$7 -Coalesced [296] bsearch16u::items#10 ← bsearch16u::items#1 -Coalesced [301] bsearch16u::return#9 ← bsearch16u::$2 -Coalesced [303] bsearch16u::return#7 ← bsearch16u::return#2 -Coalesced [306] bsearch16u::return#8 ← bsearch16u::items#2 -Not coalescing [312] bsearch16u::return#6 ← bsearch16u::pivot#0 -Coalesced [316] bsearch16u::num#10 ← bsearch16u::num#1 -Coalesced [317] bsearch16u::items#12 ← bsearch16u::items#0 -Coalesced [320] bsearch16u::num#9 ← bsearch16u::num#0 -Coalesced [321] bsearch16u::items#11 ← bsearch16u::items#8 -Coalesced [322] bsearch16u::num#11 ← bsearch16u::num#3 -Coalesced (already) [323] bsearch16u::items#13 ← bsearch16u::items#2 -Coalesced (already) [328] heap_head#89 ← heap_head#1 -Coalesced [332] init_squares::squares#4 ← init_squares::squares#0 -Coalesced [342] init_squares::sqr#3 ← init_squares::sqr#1 -Coalesced [343] init_squares::squares#3 ← init_squares::squares#1 -Coalesced [344] init_squares::i#3 ← init_squares::i#1 +Coalesced [160] init_angle_screen::y#7 ← init_angle_screen::y#1 +Coalesced [161] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1 +Coalesced [162] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1 +Coalesced [163] init_angle_screen::x#8 ← init_angle_screen::x#1 +Coalesced [164] init_angle_screen::xb#8 ← init_angle_screen::xb#1 +Coalesced [167] atan2_16::yi#17 ← atan2_16::$2 +Coalesced [171] atan2_16::xi#14 ← atan2_16::$7 +Coalesced [173] atan2_16::yi#19 ← atan2_16::yi#0 +Coalesced [174] atan2_16::xi#16 ← atan2_16::xi#0 +Coalesced [177] atan2_16::angle#22 ← atan2_16::angle#12 +Coalesced [182] atan2_16::angle#27 ← atan2_16::angle#4 +Coalesced [186] atan2_16::return#5 ← atan2_16::angle#5 +Coalesced [189] atan2_16::return#6 ← atan2_16::angle#11 +Coalesced [190] atan2_16::angle#26 ← atan2_16::angle#1 +Not coalescing [191] atan2_16::shift#5 ← atan2_16::i#2 +Not coalescing [192] atan2_16::xd#10 ← atan2_16::xi#3 +Not coalescing [193] atan2_16::yd#10 ← atan2_16::yi#3 +Coalesced [199] atan2_16::yd#13 ← atan2_16::yd#2 +Coalesced [200] atan2_16::xd#13 ← atan2_16::xd#2 +Coalesced [207] atan2_16::yi#21 ← atan2_16::yi#2 +Coalesced [208] atan2_16::angle#25 ← atan2_16::angle#3 +Coalesced [209] atan2_16::xi#18 ← atan2_16::xi#2 +Coalesced [213] atan2_16::yi#18 ← atan2_16::yi#8 +Coalesced [214] atan2_16::xi#15 ← atan2_16::xi#8 +Coalesced [215] atan2_16::i#12 ← atan2_16::i#1 +Coalesced [216] atan2_16::angle#21 ← atan2_16::angle#13 +Coalesced (already) [217] atan2_16::angle#23 ← atan2_16::angle#13 +Coalesced [222] atan2_16::yi#20 ← atan2_16::yi#1 +Coalesced [223] atan2_16::angle#24 ← atan2_16::angle#2 +Coalesced [224] atan2_16::xi#17 ← atan2_16::xi#1 +Coalesced [225] atan2_16::yd#12 ← atan2_16::yd#3 +Coalesced [226] atan2_16::xd#12 ← atan2_16::xd#3 +Coalesced [230] atan2_16::shift#6 ← atan2_16::shift#1 +Coalesced [231] atan2_16::xd#11 ← atan2_16::xd#1 +Coalesced [232] atan2_16::yd#11 ← atan2_16::yd#1 +Not coalescing [233] atan2_16::xi#13 ← atan2_16::x#0 +Not coalescing [234] atan2_16::yi#16 ← atan2_16::y#0 +Coalesced [238] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0 +Coalesced [239] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0 +Coalesced [244] init_dist_screen::yd#2 ← init_dist_screen::$5 +Coalesced [247] sqr::val#4 ← sqr::val#0 +Coalesced [256] init_dist_screen::xd#2 ← init_dist_screen::$14 +Coalesced [259] sqr::val#3 ← sqr::val#1 +Coalesced [280] init_dist_screen::y#15 ← init_dist_screen::y#1 +Coalesced [281] init_dist_screen::screen_topline#16 ← init_dist_screen::screen_topline#1 +Coalesced [282] init_dist_screen::screen_bottomline#16 ← init_dist_screen::screen_bottomline#1 +Coalesced [283] init_dist_screen::x#16 ← init_dist_screen::x#1 +Coalesced [284] init_dist_screen::xb#16 ← init_dist_screen::xb#1 +Coalesced [286] init_dist_screen::xd#1 ← init_dist_screen::$16 +Coalesced [288] init_dist_screen::yd#1 ← init_dist_screen::$7 +Coalesced [299] bsearch16u::items#17 ← bsearch16u::items#1 +Coalesced [306] bsearch16u::return#6 ← bsearch16u::pivot#0 +Coalesced [312] bsearch16u::num#14 ← bsearch16u::num#1 +Coalesced [313] bsearch16u::items#18 ← bsearch16u::items#0 +Coalesced [319] bsearch16u::return#9 ← bsearch16u::$2 +Coalesced [321] bsearch16u::return#7 ← bsearch16u::return#2 +Coalesced [322] bsearch16u::return#8 ← bsearch16u::items#11 +Coalesced [323] bsearch16u::num#13 ← bsearch16u::num#0 +Not coalescing [324] bsearch16u::items#16 ← bsearch16u::items#11 +Coalesced [325] bsearch16u::num#15 ← bsearch16u::num#10 +Not coalescing [326] bsearch16u::items#19 ← bsearch16u::items#10 +Coalesced (already) [331] heap_head#89 ← heap_head#1 +Coalesced [335] init_squares::squares#4 ← init_squares::squares#0 +Coalesced [345] init_squares::sqr#3 ← init_squares::sqr#1 +Coalesced [346] init_squares::squares#3 ← init_squares::squares#1 +Coalesced [347] init_squares::i#3 ← init_squares::i#1 Coalesced down to 45 phi equivalence classes Culled Empty Block (label) @8 Culled Empty Block (label) @16 @@ -3292,16 +3334,21 @@ Culled Empty Block (label) init_buckets::@15 Culled Empty Block (label) init_buckets::@14 Culled Empty Block (label) init_buckets::@13 Culled Empty Block (label) init_buckets::@12 +Culled Empty Block (label) init_angle_screen::@2_1 Culled Empty Block (label) init_angle_screen::@10 +Culled Empty Block (label) init_angle_screen::@11 Culled Empty Block (label) atan2_16::@35 Culled Empty Block (label) atan2_16::@39 Culled Empty Block (label) atan2_16::@38 Culled Empty Block (label) atan2_16::@34 Culled Empty Block (label) atan2_16::@36 Culled Empty Block (label) atan2_16::@37 +Culled Empty Block (label) init_dist_screen::@5_1 Culled Empty Block (label) init_dist_screen::@23 +Culled Empty Block (label) init_dist_screen::@24 +Culled Empty Block (label) bsearch16u::@6_1 +Culled Empty Block (label) bsearch16u::@13 Culled Empty Block (label) bsearch16u::@1 -Culled Empty Block (label) bsearch16u::@18 Culled Empty Block (label) init_squares::@4 Renumbering block @21 to @1 Renumbering block @22 to @2 @@ -3318,8 +3365,9 @@ Renumbering block bsearch16u::@7 to bsearch16u::@4 Renumbering block bsearch16u::@8 to bsearch16u::@5 Renumbering block bsearch16u::@9 to bsearch16u::@6 Renumbering block bsearch16u::@10 to bsearch16u::@7 -Renumbering block bsearch16u::@13 to bsearch16u::@8 -Renumbering block bsearch16u::@15 to bsearch16u::@9 +Renumbering block bsearch16u::@15 to bsearch16u::@8 +Renumbering block bsearch16u::@18 to bsearch16u::@9 +Renumbering block bsearch16u::@19 to bsearch16u::@10 Renumbering block init_squares::@3 to init_squares::@2 Renumbering block sqrt::@2 to sqrt::@1 Renumbering block atan2_16::@13 to atan2_16::@9 @@ -3565,46 +3613,46 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an [99] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) [99] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) [99] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - to:init_angle_screen::@2 -init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [100] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [100] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [101] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 - to:init_angle_screen::@4 -init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 - to:init_angle_screen::@return -init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [106] return - to:@return -init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [114] call atan2_16 - [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + to:init_angle_screen::@3 +init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@2 + [100] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 ) + [100] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 ) + [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 + [102] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [104] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [108] call atan2_16 + [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [126] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [127] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [111] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 + [114] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 + [116] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 + [118] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 + [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 + [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 to:init_angle_screen::@2 +init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@5 + [122] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 + to:init_angle_screen::@4 +init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 + [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [126] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + to:init_angle_screen::@return +init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 + [127] return + to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@3 [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 @@ -3727,50 +3775,50 @@ init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_d to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@4 [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - to:init_dist_screen::@5 -init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@14 - [183] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 ) - [183] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 ) - [184] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 - to:init_dist_screen::@7 -init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 - [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 - [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 - [187] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [188] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 - to:init_dist_screen::@return -init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 - [189] return - to:@return -init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [191] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 + to:init_dist_screen::@6 +init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@5 + [183] (byte) init_dist_screen::xb#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#1 init_dist_screen::@12/(byte) $27 ) + [183] (byte) init_dist_screen::x#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#1 init_dist_screen::@12/(byte) 0 ) + [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 + [185] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 - [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9 - [193] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) - [194] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [195] call sqr - [196] (word) sqr::return#3 ← (word) sqr::return#0 + [187] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) + [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [189] call sqr + [190] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@13 init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@10 - [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [200] call sqrt - [201] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [194] call sqrt + [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@14 init_dist_screen::@14: scope:[init_dist_screen] from init_dist_screen::@13 - [202] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [207] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [208] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 + [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 to:init_dist_screen::@5 +init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@14 + [203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 + to:init_dist_screen::@7 +init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 + [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 + [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 + [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [207] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 + to:init_dist_screen::@return +init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 + [208] return + to:@return init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 [209] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@10 @@ -3794,77 +3842,80 @@ sqrt::@return: scope:[sqrt] from sqrt::@1 to:@return bsearch16u: scope:[bsearch16u] from sqrt [220] phi() + to:bsearch16u::@4 +bsearch16u::@4: scope:[bsearch16u] from bsearch16u bsearch16u::@9 + [221] (word*) bsearch16u::items#10 ← phi( bsearch16u::@9/(word*~) bsearch16u::items#16 bsearch16u/(word*) bsearch16u::items#1 ) + [221] (byte) bsearch16u::num#10 ← phi( bsearch16u::@9/(byte) bsearch16u::num#0 bsearch16u/(const byte) NUM_SQUARES#3 ) + [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 + [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 + [225] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 + to:bsearch16u::@return +bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@4 + [227] (word*) bsearch16u::return#1 ← phi( bsearch16u::@4/(word*) bsearch16u::pivot#0 bsearch16u::@2/(word*) bsearch16u::return#2 ) + [228] return + to:@return +bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 + [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 + to:bsearch16u::@8 +bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@6 + [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [231] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 + to:bsearch16u::@7 +bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@10 bsearch16u::@8 + [232] (word*) bsearch16u::items#11 ← phi( bsearch16u::@8/(word*) bsearch16u::items#0 bsearch16u::@10/(word*~) bsearch16u::items#19 ) + [232] (byte) bsearch16u::num#5 ← phi( bsearch16u::@8/(byte) bsearch16u::num#1 bsearch16u::@10/(byte) bsearch16u::num#10 ) + [233] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 to:bsearch16u::@3 -bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [221] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [221] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 +bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@7 + [234] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + [235] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD + [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD to:bsearch16u::@2 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 - [225] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [237] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#11 bsearch16u::@1/(word*~) bsearch16u::$2 ) to:bsearch16u::@return -bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 - [226] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) - [227] return - to:@return -bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 - to:bsearch16u::@8 -bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 - to:bsearch16u::@return -bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 - to:bsearch16u::@9 -bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 +bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@3 + [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 + to:bsearch16u::@4 +bsearch16u::@10: scope:[bsearch16u] from bsearch16u::@6 + [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 to:bsearch16u::@7 -bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [237] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [237] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 - to:bsearch16u::@3 sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 - [239] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) - [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 - [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) + [240] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) + [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 + [242] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) to:sqr::@return sqr::@return: scope:[sqr] from sqr - [242] return + [243] return to:@return init_squares: scope:[init_squares] from init_dist_screen - [243] phi() - [244] call malloc + [244] phi() + [245] call malloc to:init_squares::@2 init_squares::@2: scope:[init_squares] from init_squares - [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 + [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + [247] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 - [247] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) - [247] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [247] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) - [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 - [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD - [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 - [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 - [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 - [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 - [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 + [248] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) + [248] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) + [248] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) + [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 + [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD + [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 + [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 + [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 + [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 + [255] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 - [255] return + [256] return to:@return null depth in calling loop Loop head: init_buckets::@4 tails: init_buckets::@8 blocks: init_buckets::@8 init_buckets::@4 in scope malloc @@ -3954,24 +4005,25 @@ VARIABLE REGISTER WEIGHTS (word*) bsearch16u::items (word*) bsearch16u::items#0 1001.0 (word*) bsearch16u::items#1 2.0 -(word*) bsearch16u::items#2 334.5555555555556 -(word*) bsearch16u::items#8 1501.5 +(word*) bsearch16u::items#10 429.2857142857143 +(word*) bsearch16u::items#11 752.25 +(word*~) bsearch16u::items#16 2002.0 +(word*~) bsearch16u::items#19 2002.0 (word) bsearch16u::key -(word) bsearch16u::key#0 0.26666666666666666 +(word) bsearch16u::key#0 0.23529411764705882 (byte) bsearch16u::num -(byte) bsearch16u::num#0 2002.0 +(byte) bsearch16u::num#0 1001.0 (byte) bsearch16u::num#1 2002.0 -(byte) bsearch16u::num#3 556.1111111111111 +(byte) bsearch16u::num#10 444.8888888888889 (byte) bsearch16u::num#5 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 501.0 +(word*) bsearch16u::pivot#0 750.75 (signed word) bsearch16u::result (signed word) bsearch16u::result#0 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 2.0 +(word*) bsearch16u::return#1 335.00000000000006 (word*) bsearch16u::return#2 6.0 (word*) bsearch16u::return#3 4.0 -(word*~) bsearch16u::return#6 4.0 (byte*) heap_head (byte*) heap_head#1 0.2446808510638298 (byte*) heap_head#18 23.0 @@ -3992,17 +4044,17 @@ VARIABLE REGISTER WEIGHTS (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#0 4.0 (byte*) init_angle_screen::screen_bottomline#1 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 9.04 +(byte*) init_angle_screen::screen_bottomline#6 9.040000000000001 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#0 2.0 (byte*) init_angle_screen::screen_topline#1 5.5 (byte*) init_angle_screen::screen_topline#6 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 101.0 -(byte) init_angle_screen::x#2 28.857142857142858 +(byte) init_angle_screen::x#5 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 202.0 -(byte) init_angle_screen::xb#2 18.363636363636363 +(byte) init_angle_screen::xb#1 101.0 +(byte) init_angle_screen::xb#5 19.238095238095237 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 33.666666666666664 (byte) init_angle_screen::y @@ -4068,12 +4120,12 @@ VARIABLE REGISTER WEIGHTS (byte*) init_dist_screen::screen_topline#11 7.0625 (byte) init_dist_screen::x (byte) init_dist_screen::x#1 101.0 -(byte) init_dist_screen::x#2 30.3 +(byte) init_dist_screen::x#10 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 202.0 -(byte) init_dist_screen::xb#2 19.238095238095237 +(byte) init_dist_screen::xb#1 101.0 +(byte) init_dist_screen::xb#10 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 303.0 (word) init_dist_screen::xds @@ -4178,8 +4230,8 @@ Initial phi equivalence classes [ init_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::x#2 init_angle_screen::x#1 ] -[ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +[ init_angle_screen::x#5 init_angle_screen::x#1 ] +[ init_angle_screen::xb#5 init_angle_screen::xb#1 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] [ atan2_16::i#2 atan2_16::i#1 ] @@ -4192,11 +4244,12 @@ Initial phi equivalence classes [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -[ init_dist_screen::x#2 init_dist_screen::x#1 ] -[ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +[ init_dist_screen::x#10 init_dist_screen::x#1 ] +[ init_dist_screen::xb#10 init_dist_screen::xb#1 ] [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +[ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] +[ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] +[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] [ sqr::val#2 sqr::val#1 sqr::val#0 ] [ init_squares::sqr#2 init_squares::sqr#1 ] [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] @@ -4261,7 +4314,6 @@ Added variable sqrt::$1 to zero page equivalence class [ sqrt::$1 ] Added variable sqrt::return#0 to zero page equivalence class [ sqrt::return#0 ] Added variable bsearch16u::$6 to zero page equivalence class [ bsearch16u::$6 ] Added variable bsearch16u::$16 to zero page equivalence class [ bsearch16u::$16 ] -Added variable bsearch16u::pivot#0 to zero page equivalence class [ bsearch16u::pivot#0 ] Added variable bsearch16u::result#0 to zero page equivalence class [ bsearch16u::result#0 ] Added variable sqr::$0 to zero page equivalence class [ sqr::$0 ] Added variable sqr::return#0 to zero page equivalence class [ sqr::return#0 ] @@ -4286,8 +4338,8 @@ Complete equivalence classes [ init_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::x#2 init_angle_screen::x#1 ] -[ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +[ init_angle_screen::x#5 init_angle_screen::x#1 ] +[ init_angle_screen::xb#5 init_angle_screen::xb#1 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] [ atan2_16::i#2 atan2_16::i#1 ] @@ -4300,11 +4352,12 @@ Complete equivalence classes [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -[ init_dist_screen::x#2 init_dist_screen::x#1 ] -[ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +[ init_dist_screen::x#10 init_dist_screen::x#1 ] +[ init_dist_screen::xb#10 init_dist_screen::xb#1 ] [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +[ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] +[ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] +[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] [ sqr::val#2 sqr::val#1 sqr::val#0 ] [ init_squares::sqr#2 init_squares::sqr#1 ] [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] @@ -4369,7 +4422,6 @@ Complete equivalence classes [ sqrt::return#0 ] [ bsearch16u::$6 ] [ bsearch16u::$16 ] -[ bsearch16u::pivot#0 ] [ bsearch16u::result#0 ] [ sqr::$0 ] [ sqr::return#0 ] @@ -4393,8 +4445,8 @@ Allocated zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] Allocated zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Allocated zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] Allocated zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] -Allocated zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Allocated zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Allocated zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Allocated zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] Allocated zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] Allocated zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] Allocated zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ] @@ -4407,76 +4459,76 @@ Allocated zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Allocated zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] Allocated zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] Allocated zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Allocated zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Allocated zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Allocated zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Allocated zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] Allocated zp ZP_BYTE:54 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -Allocated zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -Allocated zp ZP_BYTE:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Allocated zp ZP_BYTE:58 [ sqr::val#2 sqr::val#1 sqr::val#0 ] -Allocated zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] -Allocated zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] -Allocated zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] -Allocated zp ZP_WORD:64 [ SCREEN_DIST#0 ] -Allocated zp ZP_WORD:66 [ SCREEN_ANGLE#0 ] -Allocated zp ZP_WORD:68 [ BUCKET_SIZES#0 ] -Allocated zp ZP_WORD:70 [ BUCKETS#0 ] -Allocated zp ZP_WORD:72 [ BUCKET_IDX#0 ] -Allocated zp ZP_WORD:74 [ init_angle_screen::screen#0 ] -Allocated zp ZP_WORD:76 [ init_buckets::screen#0 ] -Allocated zp ZP_BYTE:78 [ main::$21 ] -Allocated zp ZP_WORD:79 [ main::bucket#0 ] -Allocated zp ZP_BYTE:81 [ main::bucket_size#0 ] -Allocated zp ZP_WORD:82 [ main::fill1#0 ] -Allocated zp ZP_BYTE:84 [ main::$22 ] -Allocated zp ZP_WORD:85 [ main::fill#0 ] -Allocated zp ZP_WORD:87 [ main::angle#0 ] -Allocated zp ZP_WORD:89 [ init_buckets::$15 ] -Allocated zp ZP_WORD:91 [ init_buckets::$5 ] -Allocated zp ZP_WORD:93 [ init_buckets::$12 ] -Allocated zp ZP_WORD:95 [ init_buckets::$16 ] -Allocated zp ZP_BYTE:97 [ init_buckets::distance#0 ] -Allocated zp ZP_WORD:98 [ init_buckets::$9 ] -Allocated zp ZP_WORD:100 [ init_buckets::$13 ] -Allocated zp ZP_WORD:102 [ init_buckets::$17 ] -Allocated zp ZP_WORD:104 [ init_buckets::bucket#0 ] -Allocated zp ZP_WORD:106 [ init_buckets::$10 ] -Allocated zp ZP_BYTE:108 [ init_buckets::$14 ] -Allocated zp ZP_WORD:109 [ malloc::mem#0 ] -Allocated zp ZP_BYTE:111 [ init_angle_screen::$3 ] -Allocated zp ZP_BYTE:112 [ init_angle_screen::$4 ] -Allocated zp ZP_WORD:113 [ init_angle_screen::xw#0 ] -Allocated zp ZP_BYTE:115 [ init_angle_screen::$7 ] -Allocated zp ZP_WORD:116 [ init_angle_screen::yw#0 ] -Allocated zp ZP_WORD:118 [ atan2_16::x#0 ] -Allocated zp ZP_WORD:120 [ atan2_16::y#0 ] -Allocated zp ZP_WORD:122 [ atan2_16::return#2 ] -Allocated zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] -Allocated zp ZP_WORD:126 [ init_angle_screen::$11 ] -Allocated zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] -Allocated zp ZP_BYTE:129 [ init_angle_screen::$13 ] -Allocated zp ZP_BYTE:130 [ init_angle_screen::$14 ] -Allocated zp ZP_BYTE:131 [ init_angle_screen::$15 ] -Allocated zp ZP_BYTE:132 [ atan2_16::$24 ] -Allocated zp ZP_BYTE:133 [ atan2_16::$23 ] -Allocated zp ZP_BYTE:134 [ init_dist_screen::y2#0 ] -Allocated zp ZP_WORD:135 [ sqr::return#2 ] -Allocated zp ZP_WORD:137 [ init_dist_screen::yds#0 ] -Allocated zp ZP_BYTE:139 [ init_dist_screen::x2#0 ] -Allocated zp ZP_WORD:140 [ sqr::return#3 ] -Allocated zp ZP_WORD:142 [ init_dist_screen::xds#0 ] -Allocated zp ZP_WORD:144 [ init_dist_screen::ds#0 ] -Allocated zp ZP_WORD:146 [ sqrt::val#0 ] -Allocated zp ZP_BYTE:148 [ sqrt::return#2 ] -Allocated zp ZP_BYTE:149 [ init_dist_screen::d#0 ] -Allocated zp ZP_WORD:150 [ bsearch16u::key#0 ] -Allocated zp ZP_WORD:152 [ bsearch16u::return#3 ] -Allocated zp ZP_WORD:154 [ sqrt::found#0 ] -Allocated zp ZP_WORD:156 [ sqrt::$3 ] -Allocated zp ZP_WORD:158 [ sqrt::$1 ] -Allocated zp ZP_BYTE:160 [ sqrt::return#0 ] -Allocated zp ZP_BYTE:161 [ bsearch16u::$6 ] -Allocated zp ZP_BYTE:162 [ bsearch16u::$16 ] -Allocated zp ZP_WORD:163 [ bsearch16u::pivot#0 ] +Allocated zp ZP_WORD:55 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] +Allocated zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] +Allocated zp ZP_BYTE:59 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] +Allocated zp ZP_BYTE:60 [ sqr::val#2 sqr::val#1 sqr::val#0 ] +Allocated zp ZP_WORD:61 [ init_squares::sqr#2 init_squares::sqr#1 ] +Allocated zp ZP_WORD:63 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] +Allocated zp ZP_BYTE:65 [ init_squares::i#2 init_squares::i#1 ] +Allocated zp ZP_WORD:66 [ SCREEN_DIST#0 ] +Allocated zp ZP_WORD:68 [ SCREEN_ANGLE#0 ] +Allocated zp ZP_WORD:70 [ BUCKET_SIZES#0 ] +Allocated zp ZP_WORD:72 [ BUCKETS#0 ] +Allocated zp ZP_WORD:74 [ BUCKET_IDX#0 ] +Allocated zp ZP_WORD:76 [ init_angle_screen::screen#0 ] +Allocated zp ZP_WORD:78 [ init_buckets::screen#0 ] +Allocated zp ZP_BYTE:80 [ main::$21 ] +Allocated zp ZP_WORD:81 [ main::bucket#0 ] +Allocated zp ZP_BYTE:83 [ main::bucket_size#0 ] +Allocated zp ZP_WORD:84 [ main::fill1#0 ] +Allocated zp ZP_BYTE:86 [ main::$22 ] +Allocated zp ZP_WORD:87 [ main::fill#0 ] +Allocated zp ZP_WORD:89 [ main::angle#0 ] +Allocated zp ZP_WORD:91 [ init_buckets::$15 ] +Allocated zp ZP_WORD:93 [ init_buckets::$5 ] +Allocated zp ZP_WORD:95 [ init_buckets::$12 ] +Allocated zp ZP_WORD:97 [ init_buckets::$16 ] +Allocated zp ZP_BYTE:99 [ init_buckets::distance#0 ] +Allocated zp ZP_WORD:100 [ init_buckets::$9 ] +Allocated zp ZP_WORD:102 [ init_buckets::$13 ] +Allocated zp ZP_WORD:104 [ init_buckets::$17 ] +Allocated zp ZP_WORD:106 [ init_buckets::bucket#0 ] +Allocated zp ZP_WORD:108 [ init_buckets::$10 ] +Allocated zp ZP_BYTE:110 [ init_buckets::$14 ] +Allocated zp ZP_WORD:111 [ malloc::mem#0 ] +Allocated zp ZP_BYTE:113 [ init_angle_screen::$3 ] +Allocated zp ZP_BYTE:114 [ init_angle_screen::$4 ] +Allocated zp ZP_WORD:115 [ init_angle_screen::xw#0 ] +Allocated zp ZP_BYTE:117 [ init_angle_screen::$7 ] +Allocated zp ZP_WORD:118 [ init_angle_screen::yw#0 ] +Allocated zp ZP_WORD:120 [ atan2_16::x#0 ] +Allocated zp ZP_WORD:122 [ atan2_16::y#0 ] +Allocated zp ZP_WORD:124 [ atan2_16::return#2 ] +Allocated zp ZP_WORD:126 [ init_angle_screen::angle_w#0 ] +Allocated zp ZP_WORD:128 [ init_angle_screen::$11 ] +Allocated zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] +Allocated zp ZP_BYTE:131 [ init_angle_screen::$13 ] +Allocated zp ZP_BYTE:132 [ init_angle_screen::$14 ] +Allocated zp ZP_BYTE:133 [ init_angle_screen::$15 ] +Allocated zp ZP_BYTE:134 [ atan2_16::$24 ] +Allocated zp ZP_BYTE:135 [ atan2_16::$23 ] +Allocated zp ZP_BYTE:136 [ init_dist_screen::y2#0 ] +Allocated zp ZP_WORD:137 [ sqr::return#2 ] +Allocated zp ZP_WORD:139 [ init_dist_screen::yds#0 ] +Allocated zp ZP_BYTE:141 [ init_dist_screen::x2#0 ] +Allocated zp ZP_WORD:142 [ sqr::return#3 ] +Allocated zp ZP_WORD:144 [ init_dist_screen::xds#0 ] +Allocated zp ZP_WORD:146 [ init_dist_screen::ds#0 ] +Allocated zp ZP_WORD:148 [ sqrt::val#0 ] +Allocated zp ZP_BYTE:150 [ sqrt::return#2 ] +Allocated zp ZP_BYTE:151 [ init_dist_screen::d#0 ] +Allocated zp ZP_WORD:152 [ bsearch16u::key#0 ] +Allocated zp ZP_WORD:154 [ bsearch16u::return#3 ] +Allocated zp ZP_WORD:156 [ sqrt::found#0 ] +Allocated zp ZP_WORD:158 [ sqrt::$3 ] +Allocated zp ZP_WORD:160 [ sqrt::$1 ] +Allocated zp ZP_BYTE:162 [ sqrt::return#0 ] +Allocated zp ZP_BYTE:163 [ bsearch16u::$6 ] +Allocated zp ZP_BYTE:164 [ bsearch16u::$16 ] Allocated zp ZP_WORD:165 [ bsearch16u::result#0 ] Allocated zp ZP_BYTE:167 [ sqr::$0 ] Allocated zp ZP_WORD:168 [ sqr::return#0 ] @@ -4515,17 +4567,17 @@ Target platform is c64basic .label heap_head = $15 .label SQUARES = $aa // Screen containing distance to center - .label SCREEN_DIST = $40 + .label SCREEN_DIST = $42 // Screen containing angle to center - .label SCREEN_ANGLE = $42 + .label SCREEN_ANGLE = $44 // Array containing the bucket size for each of the distance buckets - .label BUCKET_SIZES = $44 + .label BUCKET_SIZES = $46 // Buckets containing screen indices for each distance from the center. // BUCKETS[dist] is an array of words containing screen indices. // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist] - .label BUCKETS = $46 + .label BUCKETS = $48 // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes) - .label BUCKET_IDX = $48 + .label BUCKET_IDX = $4a // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -4646,17 +4698,17 @@ bend_from_b3: bend: // main main: { - .label _21 = $4e - .label _22 = $54 - .label bucket = $4f - .label bucket_size = $51 + .label _21 = $50 + .label _22 = $56 + .label bucket = $51 + .label bucket_size = $53 .label bucket_idx = 2 .label offset = 7 - .label fill = $55 + .label fill = $57 .label i = 3 - .label angle = $57 + .label angle = $59 .label min_angle = 6 - .label fill1 = $52 + .label fill1 = $54 .label min_offset = 4 .label min_offset_5 = 7 .label min_offset_9 = 7 @@ -4902,28 +4954,28 @@ main: { } // init_buckets // Initialize buckets containing indices of chars on the screen with specific distances to the center. -// init_buckets(byte* zeropage($4c) screen) +// init_buckets(byte* zeropage($4e) screen) init_buckets: { - .label _5 = $5b - .label _9 = $62 - .label _10 = $6a - .label _12 = $5d - .label _13 = $64 - .label _14 = $6c - .label screen = $4c + .label _5 = $5d + .label _9 = $64 + .label _10 = $6c + .label _12 = $5f + .label _13 = $66 + .label _14 = $6e + .label screen = $4e .label i = 9 .label dist = $a .label i1 = $c .label i2 = $e .label i3 = $10 - .label distance = $61 - .label bucket = $68 + .label distance = $63 + .label bucket = $6a .label dist_3 = $11 .label i4 = $13 .label dist_5 = $11 - .label _15 = $59 - .label _16 = $5f - .label _17 = $66 + .label _15 = $5b + .label _16 = $61 + .label _17 = $68 .label dist_8 = $11 // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] b1_from_init_buckets: @@ -5208,7 +5260,7 @@ init_buckets: { // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. // malloc(word zeropage($17) size) malloc: { - .label mem = $6d + .label mem = $6f .label size = $17 // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz3 lda heap_head @@ -5232,22 +5284,22 @@ malloc: { // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center -// init_angle_screen(byte* zeropage($4a) screen) +// init_angle_screen(byte* zeropage($4c) screen) init_angle_screen: { - .label _3 = $6f - .label _4 = $70 - .label _7 = $73 - .label _11 = $7e - .label _13 = $81 - .label _14 = $82 - .label _15 = $83 - .label screen = $4a + .label _3 = $71 + .label _4 = $72 + .label _7 = $75 + .label _11 = $80 + .label _13 = $83 + .label _14 = $84 + .label _15 = $85 + .label screen = $4c .label screen_topline = $1a .label screen_bottomline = $1c - .label xw = $71 - .label yw = $74 - .label angle_w = $7c - .label ang_w = $80 + .label xw = $73 + .label yw = $76 + .label angle_w = $7e + .label ang_w = $82 .label x = $1e .label xb = $1f .label y = $19 @@ -5283,89 +5335,58 @@ init_angle_screen: { jmp b1 // init_angle_screen::@1 b1: - // [100] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - b2_from_b1: - // [100] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [100] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + b3_from_b1: + // [100] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [100] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [100] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b2 - // init_angle_screen::@2 - b2: - // [101] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - jmp b4 - // init_angle_screen::@4 - b4: - // [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b4 - jmp breturn - // init_angle_screen::@return - breturn: - // [106] return - rts + jmp b3 + // [100] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + b3_from_b2: + // [100] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [100] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy + jmp b3 // init_angle_screen::@3 b3: - // [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta _3 - // [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 + // [102] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc _3 sta _4 - // [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _4 ldy #0 sta xw+1 sty xw - // [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [104] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda y asl sta _7 - // [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _7 ldy #0 sta yw+1 sty yw - // [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 + // [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 lda xw sta atan2_16.x lda xw+1 sta atan2_16.x+1 - // [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 + // [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 lda yw sta atan2_16.y lda yw+1 sta atan2_16.y+1 - // [114] call atan2_16 + // [108] call atan2_16 jsr atan2_16 - // [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 + // [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 lda atan2_16.return sta atan2_16.return_2 lda atan2_16.return+1 @@ -5373,12 +5394,12 @@ init_angle_screen: { jmp b5 // init_angle_screen::@5 b5: - // [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 + // [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 lda atan2_16.return_2 sta angle_w lda atan2_16.return_2+1 sta angle_w+1 - // [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 + // [111] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 lda #$80 clc adc angle_w @@ -5386,60 +5407,92 @@ init_angle_screen: { lda #0 adc angle_w+1 sta _11+1 - // [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w - // [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 + // [114] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 lda ang_w eor #$ff clc adc #1 sta _13 - // [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 + // [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 lda _13 ldy xb sta (screen_topline),y - // [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 + // [116] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 lax ang_w axs #-[$80] stx _14 - // [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 + // [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 lda _14 ldy x sta (screen_topline),y - // [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 + // [118] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$80 sec sbc ang_w sta _15 - // [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 + // [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 lda _15 ldy x sta (screen_bottomline),y - // [126] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [127] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [100] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - b2_from_b5: - // [100] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [100] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp b2 + // init_angle_screen::@2 + b2: + // [122] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3_from_b2 + jmp b4 + // init_angle_screen::@4 + b4: + // [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [126] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b4 + jmp breturn + // init_angle_screen::@return + breturn: + // [127] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($76) x, signed word zeropage($78) y) +// atan2_16(signed word zeropage($78) x, signed word zeropage($7a) y) atan2_16: { .label _2 = $20 .label _7 = $22 - .label _23 = $85 - .label _24 = $84 + .label _23 = $87 + .label _24 = $86 .label yi = $20 .label xi = $22 .label angle = $27 @@ -5450,9 +5503,9 @@ atan2_16: { .label angle_3 = $25 .label i = $24 .label return = $27 - .label x = $76 - .label y = $78 - .label return_2 = $7a + .label x = $78 + .label y = $7a + .label return_2 = $7c .label angle_6 = $25 .label angle_12 = $25 .label angle_13 = $25 @@ -5777,20 +5830,20 @@ init_dist_screen: { .label _16 = $36 .label screen = $2f .label screen_bottomline = $31 - .label y2 = $86 + .label y2 = $88 .label yd = $33 - .label yds = $89 - .label x2 = $8b + .label yds = $8b + .label x2 = $8d .label screen_topline = $2f .label y = $2e .label xd = $36 - .label xds = $8e - .label ds = $90 - .label d = $95 + .label xds = $90 + .label ds = $92 + .label d = $97 .label x = $34 .label xb = $35 // [172] call init_squares - // [243] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [244] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares jmp b11 @@ -5847,9 +5900,9 @@ init_dist_screen: { lda yd sta sqr.val // [180] call sqr - // [239] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [240] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from_b4: - // [239] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [240] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // [181] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return @@ -5864,85 +5917,54 @@ init_dist_screen: { sta yds lda sqr.return_2+1 sta yds+1 - // [183] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - b5_from_b12: - // [183] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [183] phi from init_dist_screen::@12 to init_dist_screen::@6 [phi:init_dist_screen::@12->init_dist_screen::@6] + b6_from_b12: + // [183] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@6#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [183] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [183] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@6#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b5 - // init_dist_screen::@5 - b5: - // [184] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b6 - jmp b7 - // init_dist_screen::@7 - b7: - // [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - // [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - // [187] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 - inc y - // [188] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b7 - jmp breturn - // init_dist_screen::@return - breturn: - // [189] return - rts + jmp b6 + // [183] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6] + b6_from_b5: + // [183] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy + // [183] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy + jmp b6 // init_dist_screen::@6 b6: - // [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta x2 - // [191] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuz1_ge_vbuc1_then_la1 + // [185] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuz1_ge_vbuc1_then_la1 lda x2 cmp #$27 bcs b8 jmp b9 // init_dist_screen::@9 b9: - // [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 + // [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc x2 sta _14 - // [193] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [187] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] b10_from_b8: b10_from_b9: - // [193] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [187] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy jmp b10 // init_dist_screen::@10 b10: - // [194] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 + // [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 lda xd sta sqr.val - // [195] call sqr - // [239] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] + // [189] call sqr + // [240] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] sqr_from_b10: - // [239] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy + // [240] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr - // [196] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [190] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return sta sqr.return_3 lda sqr.return+1 @@ -5950,12 +5972,12 @@ init_dist_screen: { jmp b13 // init_dist_screen::@13 b13: - // [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 + // [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 lda sqr.return_3 sta xds lda sqr.return_3+1 sta xds+1 - // [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 + // [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 lda xds clc adc yds @@ -5963,47 +5985,79 @@ init_dist_screen: { lda xds+1 adc yds+1 sta ds+1 - // [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 + // [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 lda ds sta sqrt.val lda ds+1 sta sqrt.val+1 - // [200] call sqrt + // [194] call sqrt jsr sqrt - // [201] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 + // [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 lda sqrt.return sta sqrt.return_2 jmp b14 // init_dist_screen::@14 b14: - // [202] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 + // [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 lda sqrt.return_2 sta d - // [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy x sta (screen_topline),y - // [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy x sta (screen_bottomline),y - // [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy xb sta (screen_topline),y - // [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy xb sta (screen_bottomline),y - // [207] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 inc x - // [208] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 dec xb - // [183] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] - b5_from_b14: - // [183] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy - // [183] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy jmp b5 + // init_dist_screen::@5 + b5: + // [203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b6_from_b5 + jmp b7 + // init_dist_screen::@7 + b7: + // [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + // [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + // [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + inc y + // [207] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b7 + jmp breturn + // init_dist_screen::@return + breturn: + // [208] return + rts // init_dist_screen::@8 b8: // [209] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 @@ -6023,14 +6077,14 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($92) val) +// sqrt(word zeropage($94) val) sqrt: { - .label _1 = $9e - .label _3 = $9c - .label found = $9a - .label return = $a0 - .label val = $92 - .label return_2 = $94 + .label _1 = $a0 + .label _3 = $9e + .label found = $9c + .label return = $a2 + .label val = $94 + .label return_2 = $96 // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 lda val sta bsearch16u.key @@ -6038,9 +6092,9 @@ sqrt: { sta bsearch16u.key+1 // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES - sta bsearch16u.items + sta bsearch16u.items_1 lda SQUARES+1 - sta bsearch16u.items+1 + sta bsearch16u.items_1+1 // [213] call bsearch16u // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: @@ -6088,34 +6142,112 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($96) key, word* zeropage($37) items, byte zeropage($39) num) +// bsearch16u(word zeropage($98) key, word* zeropage($39) items, byte zeropage($3b) num) bsearch16u: { - .label _2 = $37 - .label _6 = $a1 - .label _16 = $a2 - .label pivot = $a3 + .label _2 = $39 + .label _6 = $a3 + .label _16 = $a4 + .label pivot = $39 .label result = $a5 - .label return = $37 - .label num = $39 - .label items = $37 - .label key = $96 - .label return_3 = $98 - // [221] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - b3_from_bsearch16u: - // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [221] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 + .label return = $39 + .label num = $3b + .label items = $39 + .label key = $98 + .label items_1 = $37 + .label return_3 = $9a + .label items_10 = $37 + .label items_16 = $37 + // [221] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4] + b4_from_bsearch16u: + // [221] phi (word*) bsearch16u::items#10 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@4#0] -- register_copy + // [221] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuz1=vbuc1 lda #NUM_SQUARES sta num + jmp b4 + // bsearch16u::@4 + b4: + // [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuz1=vbuz2_ror_1 + lda num + lsr + sta _6 + // [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda _6 + asl + sta _16 + // [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 + lda _16 + clc + adc items_10 + sta pivot + lda #0 + adc items_10+1 + sta pivot+1 + // [225] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + sec + lda key + ldy #0 + sbc (pivot),y + sta result + lda key+1 + iny + sbc (pivot),y + sta result+1 + // [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + lda result+1 + bne b6 + lda result + bne b6 + // [227] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return] + breturn_from_b2: + breturn_from_b4: + // [227] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy + jmp breturn + // bsearch16u::@return + breturn: + // [228] return + rts + // bsearch16u::@6 + b6: + // [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 + lda result+1 + bmi b10 + bne !+ + lda result + beq b10 + !: + jmp b8 + // bsearch16u::@8 + b8: + // [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + lda #1*SIZEOF_WORD + clc + adc items + sta items + bcc !+ + inc items+1 + !: + // [231] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuz1=_dec_vbuz1 + dec num + // [232] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7] + b7_from_b10: + b7_from_b8: + // [232] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#19 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy + // [232] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy + jmp b7 + // bsearch16u::@7 + b7: + // [233] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + lsr num jmp b3 // bsearch16u::@3 b3: - // [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 + // [234] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuz1_gt_0_then_la1 lda num - bne b4 + bne b9 jmp b5 // bsearch16u::@5 b5: - // [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [235] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp key+1 @@ -6129,7 +6261,7 @@ bsearch16u: { jmp b1 // bsearch16u::@1 b1: - // [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -6137,117 +6269,50 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [225] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [237] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] b2_from_b1: b2_from_b5: - // [225] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [237] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp b2 // bsearch16u::@2 b2: - // [226] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - breturn_from_b2: - breturn_from_b8: - // [226] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy - jmp breturn - // bsearch16u::@return - breturn: - // [227] return - rts - // bsearch16u::@4 - b4: - // [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 - lda num - lsr - sta _6 - // [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 - lda _6 - asl - sta _16 - // [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 - lda _16 - clc - adc items - sta pivot - lda #0 - adc items+1 - sta pivot+1 - // [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 - sec - lda key - ldy #0 - sbc (pivot),y - sta result - lda key+1 - iny - sbc (pivot),y - sta result+1 - // [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 - lda result+1 - bne b6 - lda result - bne b6 - jmp b8 - // bsearch16u::@8 - b8: - // [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 - lda pivot - sta return - lda pivot+1 - sta return+1 - jmp breturn_from_b8 - // bsearch16u::@6 - b6: - // [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 - lda result+1 - bmi b7_from_b6 - bne !+ - lda result - beq b7_from_b6 - !: - jmp b9 + jmp breturn_from_b2 // bsearch16u::@9 b9: - // [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 - lda #1*SIZEOF_WORD - clc - adc pivot + // [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 + lda items + sta items_16 + lda items+1 + sta items_16+1 + // [221] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4] + b4_from_b9: + // [221] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy + // [221] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy + jmp b4 + // bsearch16u::@10 + b10: + // [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 + lda items_10 sta items - lda #0 - adc pivot+1 + lda items_10+1 sta items+1 - // [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 - dec num - // [237] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - b7_from_b6: - b7_from_b9: - // [237] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [237] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy - jmp b7 - // bsearch16u::@7 - b7: - // [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 - lsr num - // [221] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - b3_from_b7: - // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [221] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy - jmp b3 + jmp b7_from_b10 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() -// sqr(byte zeropage($3a) val) +// sqr(byte zeropage($3c) val) sqr: { .label _0 = $a7 .label return = $a8 - .label val = $3a - .label return_2 = $87 - .label return_3 = $8c - // [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + .label val = $3c + .label return_2 = $89 + .label return_3 = $8e + // [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda val asl sta _0 - // [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 + // [242] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 ldy _0 lda (SQUARES),y sta return @@ -6257,7 +6322,7 @@ sqr: { jmp breturn // sqr::@return breturn: - // [242] return + // [243] return rts } // init_squares @@ -6266,10 +6331,10 @@ sqr: { init_squares: { .label _3 = $ac .label _4 = $ad - .label squares = $3d - .label sqr = $3b - .label i = $3f - // [244] call malloc + .label squares = $3f + .label sqr = $3d + .label i = $41 + // [245] call malloc // [93] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: // [93] phi (word) malloc::size#7 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 @@ -6282,44 +6347,44 @@ init_squares: { jmp b2 // init_squares::@2 b2: - // [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + // [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda malloc.mem sta SQUARES lda malloc.mem+1 sta SQUARES+1 - // [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [247] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta squares lda SQUARES+1 sta squares+1 - // [247] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [248] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] b1_from_b2: - // [247] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 + // [248] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 lda #0 sta i - // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [247] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [248] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [248] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 lda #<0 sta sqr lda #>0 sta sqr+1 jmp b1 - // [247] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [248] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] b1_from_b1: - // [247] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [247] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [248] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [248] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [248] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy jmp b1 // init_squares::@1 b1: - // [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y iny lda sqr+1 sta (squares),y - // [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -6327,15 +6392,15 @@ init_squares: { bcc !+ inc squares+1 !: - // [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _3 - // [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy _3 iny sty _4 - // [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 + // [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 lda _4 clc adc sqr @@ -6343,16 +6408,16 @@ init_squares: { bcc !+ inc sqr+1 !: - // [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 + // [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 inc i - // [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 + // [255] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_SQUARES-1+1 cmp i bne b1_from_b1 jmp breturn // init_squares::@return breturn: - // [255] return + // [256] return rts } // File Data @@ -6381,11 +6446,11 @@ Statement [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREE Statement [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a Statement [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y Statement [41] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$22 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$22 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:81 [ main::bucket_size#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:83 [ main::bucket_size#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] Statement [42] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:81 [ main::bucket_size#0 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:83 [ main::bucket_size#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] Statement [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ) always clobbers reg byte a @@ -6413,125 +6478,126 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:16 [ i Statement [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y Statement [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:97 [ init_buckets::distance#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:99 [ init_buckets::distance#0 ] Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a Statement [83] (word**~) init_buckets::$17 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:97 [ init_buckets::distance#0 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:99 [ init_buckets::distance#0 ] Statement [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a Statement [86] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a reg byte y Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y Statement [88] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a -Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a -Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:245 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:245 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Statement [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a Statement [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Statement [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Statement [102] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] -Statement [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] -Statement [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Statement [104] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [111] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] +Statement [114] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] +Statement [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [116] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [118] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ] -Statement [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -Statement [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a Statement [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Statement [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a Statement [181] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a Statement [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a -Statement [196] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y +Statement [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Statement [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a +Statement [190] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:59 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] +Statement [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [225] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:195 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:195 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] -Statement [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:59 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] +Statement [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [235] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y +Statement [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a +Statement [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ) always clobbers reg byte a +Statement [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [242] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [247] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:65 [ init_squares::i#2 init_squares::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:65 [ init_squares::i#2 init_squares::i#1 ] +Statement [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a Statement [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a @@ -6580,100 +6646,101 @@ Statement [86] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (b Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y Statement [88] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a -Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a -Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:245 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:245 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Statement [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a Statement [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [102] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [104] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [111] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [114] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [116] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [118] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a Statement [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a Statement [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a Statement [181] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a Statement [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a -Statement [196] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:149 [ init_dist_screen::d#0 ] -Statement [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y -Statement [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Statement [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Statement [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Statement [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:195 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:195 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Statement [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a +Statement [190] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:151 [ init_dist_screen::d#0 ] +Statement [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 ] ) always clobbers reg byte y +Statement [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [225] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [235] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y +Statement [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a +Statement [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ) always clobbers reg byte a +Statement [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [242] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [247] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a Statement [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a @@ -6722,99 +6789,100 @@ Statement [86] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (b Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y Statement [88] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a -Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a -Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:245 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:245 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Statement [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a Statement [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [102] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [104] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [111] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [114] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [116] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [118] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a Statement [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a Statement [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a Statement [181] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a Statement [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a -Statement [196] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y -Statement [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Statement [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Statement [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Statement [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:195 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:195 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Statement [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a +Statement [190] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 ] ) always clobbers reg byte y +Statement [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [225] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [235] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y +Statement [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a +Statement [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ) always clobbers reg byte a +Statement [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [242] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [247] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] : zp ZP_BYTE:2 , reg byte x , Potential registers zp ZP_BYTE:3 [ main::i#2 main::i#1 ] : zp ZP_BYTE:3 , reg byte x , Potential registers zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 ] : zp ZP_WORD:4 , @@ -6832,8 +6900,8 @@ Potential registers zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] : zp ZP_WORD Potential registers zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp ZP_BYTE:25 , reg byte x , Potential registers zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:26 , Potential registers zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:28 , -Potential registers zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp ZP_BYTE:30 , reg byte x , -Potential registers zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp ZP_BYTE:31 , reg byte x , +Potential registers zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] : zp ZP_BYTE:30 , reg byte x , +Potential registers zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] : zp ZP_BYTE:31 , reg byte x , Potential registers zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp ZP_WORD:32 , Potential registers zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp ZP_WORD:34 , Potential registers zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:36 , reg byte x , reg byte y , @@ -6846,76 +6914,76 @@ Potential registers zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 Potential registers zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] : zp ZP_WORD:47 , Potential registers zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] : zp ZP_WORD:49 , Potential registers zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp ZP_BYTE:51 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp ZP_BYTE:52 , reg byte x , -Potential registers zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp ZP_BYTE:53 , reg byte x , +Potential registers zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] : zp ZP_BYTE:52 , reg byte x , +Potential registers zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] : zp ZP_BYTE:53 , reg byte x , Potential registers zp ZP_BYTE:54 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] : zp ZP_WORD:55 , -Potential registers zp ZP_BYTE:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] : zp ZP_BYTE:57 , reg byte x , -Potential registers zp ZP_BYTE:58 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:59 , -Potential registers zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp ZP_WORD:61 , -Potential registers zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:63 , reg byte x , -Potential registers zp ZP_WORD:64 [ SCREEN_DIST#0 ] : zp ZP_WORD:64 , -Potential registers zp ZP_WORD:66 [ SCREEN_ANGLE#0 ] : zp ZP_WORD:66 , -Potential registers zp ZP_WORD:68 [ BUCKET_SIZES#0 ] : zp ZP_WORD:68 , -Potential registers zp ZP_WORD:70 [ BUCKETS#0 ] : zp ZP_WORD:70 , -Potential registers zp ZP_WORD:72 [ BUCKET_IDX#0 ] : zp ZP_WORD:72 , -Potential registers zp ZP_WORD:74 [ init_angle_screen::screen#0 ] : zp ZP_WORD:74 , -Potential registers zp ZP_WORD:76 [ init_buckets::screen#0 ] : zp ZP_WORD:76 , -Potential registers zp ZP_BYTE:78 [ main::$21 ] : zp ZP_BYTE:78 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:79 [ main::bucket#0 ] : zp ZP_WORD:79 , -Potential registers zp ZP_BYTE:81 [ main::bucket_size#0 ] : zp ZP_BYTE:81 , reg byte x , -Potential registers zp ZP_WORD:82 [ main::fill1#0 ] : zp ZP_WORD:82 , -Potential registers zp ZP_BYTE:84 [ main::$22 ] : zp ZP_BYTE:84 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:85 [ main::fill#0 ] : zp ZP_WORD:85 , -Potential registers zp ZP_WORD:87 [ main::angle#0 ] : zp ZP_WORD:87 , -Potential registers zp ZP_WORD:89 [ init_buckets::$15 ] : zp ZP_WORD:89 , -Potential registers zp ZP_WORD:91 [ init_buckets::$5 ] : zp ZP_WORD:91 , -Potential registers zp ZP_WORD:93 [ init_buckets::$12 ] : zp ZP_WORD:93 , -Potential registers zp ZP_WORD:95 [ init_buckets::$16 ] : zp ZP_WORD:95 , -Potential registers zp ZP_BYTE:97 [ init_buckets::distance#0 ] : zp ZP_BYTE:97 , reg byte x , -Potential registers zp ZP_WORD:98 [ init_buckets::$9 ] : zp ZP_WORD:98 , -Potential registers zp ZP_WORD:100 [ init_buckets::$13 ] : zp ZP_WORD:100 , -Potential registers zp ZP_WORD:102 [ init_buckets::$17 ] : zp ZP_WORD:102 , -Potential registers zp ZP_WORD:104 [ init_buckets::bucket#0 ] : zp ZP_WORD:104 , -Potential registers zp ZP_WORD:106 [ init_buckets::$10 ] : zp ZP_WORD:106 , -Potential registers zp ZP_BYTE:108 [ init_buckets::$14 ] : zp ZP_BYTE:108 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:109 [ malloc::mem#0 ] : zp ZP_WORD:109 , -Potential registers zp ZP_BYTE:111 [ init_angle_screen::$3 ] : zp ZP_BYTE:111 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:112 [ init_angle_screen::$4 ] : zp ZP_BYTE:112 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:113 [ init_angle_screen::xw#0 ] : zp ZP_WORD:113 , -Potential registers zp ZP_BYTE:115 [ init_angle_screen::$7 ] : zp ZP_BYTE:115 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:116 [ init_angle_screen::yw#0 ] : zp ZP_WORD:116 , -Potential registers zp ZP_WORD:118 [ atan2_16::x#0 ] : zp ZP_WORD:118 , -Potential registers zp ZP_WORD:120 [ atan2_16::y#0 ] : zp ZP_WORD:120 , -Potential registers zp ZP_WORD:122 [ atan2_16::return#2 ] : zp ZP_WORD:122 , -Potential registers zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:124 , -Potential registers zp ZP_WORD:126 [ init_angle_screen::$11 ] : zp ZP_WORD:126 , -Potential registers zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:128 , reg byte x , -Potential registers zp ZP_BYTE:129 [ init_angle_screen::$13 ] : zp ZP_BYTE:129 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:130 [ init_angle_screen::$14 ] : zp ZP_BYTE:130 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:131 [ init_angle_screen::$15 ] : zp ZP_BYTE:131 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:132 [ atan2_16::$24 ] : zp ZP_BYTE:132 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:133 [ atan2_16::$23 ] : zp ZP_BYTE:133 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:134 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:134 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:135 [ sqr::return#2 ] : zp ZP_WORD:135 , -Potential registers zp ZP_WORD:137 [ init_dist_screen::yds#0 ] : zp ZP_WORD:137 , -Potential registers zp ZP_BYTE:139 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:139 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:140 [ sqr::return#3 ] : zp ZP_WORD:140 , -Potential registers zp ZP_WORD:142 [ init_dist_screen::xds#0 ] : zp ZP_WORD:142 , -Potential registers zp ZP_WORD:144 [ init_dist_screen::ds#0 ] : zp ZP_WORD:144 , -Potential registers zp ZP_WORD:146 [ sqrt::val#0 ] : zp ZP_WORD:146 , -Potential registers zp ZP_BYTE:148 [ sqrt::return#2 ] : zp ZP_BYTE:148 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:149 [ init_dist_screen::d#0 ] : zp ZP_BYTE:149 , reg byte a , reg byte x , -Potential registers zp ZP_WORD:150 [ bsearch16u::key#0 ] : zp ZP_WORD:150 , -Potential registers zp ZP_WORD:152 [ bsearch16u::return#3 ] : zp ZP_WORD:152 , -Potential registers zp ZP_WORD:154 [ sqrt::found#0 ] : zp ZP_WORD:154 , -Potential registers zp ZP_WORD:156 [ sqrt::$3 ] : zp ZP_WORD:156 , -Potential registers zp ZP_WORD:158 [ sqrt::$1 ] : zp ZP_WORD:158 , -Potential registers zp ZP_BYTE:160 [ sqrt::return#0 ] : zp ZP_BYTE:160 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:161 [ bsearch16u::$6 ] : zp ZP_BYTE:161 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:162 [ bsearch16u::$16 ] : zp ZP_BYTE:162 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:163 [ bsearch16u::pivot#0 ] : zp ZP_WORD:163 , +Potential registers zp ZP_WORD:55 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] : zp ZP_WORD:55 , +Potential registers zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] : zp ZP_WORD:57 , +Potential registers zp ZP_BYTE:59 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] : zp ZP_BYTE:59 , reg byte x , +Potential registers zp ZP_BYTE:60 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp ZP_BYTE:60 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:61 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:61 , +Potential registers zp ZP_WORD:63 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp ZP_WORD:63 , +Potential registers zp ZP_BYTE:65 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:65 , reg byte x , +Potential registers zp ZP_WORD:66 [ SCREEN_DIST#0 ] : zp ZP_WORD:66 , +Potential registers zp ZP_WORD:68 [ SCREEN_ANGLE#0 ] : zp ZP_WORD:68 , +Potential registers zp ZP_WORD:70 [ BUCKET_SIZES#0 ] : zp ZP_WORD:70 , +Potential registers zp ZP_WORD:72 [ BUCKETS#0 ] : zp ZP_WORD:72 , +Potential registers zp ZP_WORD:74 [ BUCKET_IDX#0 ] : zp ZP_WORD:74 , +Potential registers zp ZP_WORD:76 [ init_angle_screen::screen#0 ] : zp ZP_WORD:76 , +Potential registers zp ZP_WORD:78 [ init_buckets::screen#0 ] : zp ZP_WORD:78 , +Potential registers zp ZP_BYTE:80 [ main::$21 ] : zp ZP_BYTE:80 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:81 [ main::bucket#0 ] : zp ZP_WORD:81 , +Potential registers zp ZP_BYTE:83 [ main::bucket_size#0 ] : zp ZP_BYTE:83 , reg byte x , +Potential registers zp ZP_WORD:84 [ main::fill1#0 ] : zp ZP_WORD:84 , +Potential registers zp ZP_BYTE:86 [ main::$22 ] : zp ZP_BYTE:86 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:87 [ main::fill#0 ] : zp ZP_WORD:87 , +Potential registers zp ZP_WORD:89 [ main::angle#0 ] : zp ZP_WORD:89 , +Potential registers zp ZP_WORD:91 [ init_buckets::$15 ] : zp ZP_WORD:91 , +Potential registers zp ZP_WORD:93 [ init_buckets::$5 ] : zp ZP_WORD:93 , +Potential registers zp ZP_WORD:95 [ init_buckets::$12 ] : zp ZP_WORD:95 , +Potential registers zp ZP_WORD:97 [ init_buckets::$16 ] : zp ZP_WORD:97 , +Potential registers zp ZP_BYTE:99 [ init_buckets::distance#0 ] : zp ZP_BYTE:99 , reg byte x , +Potential registers zp ZP_WORD:100 [ init_buckets::$9 ] : zp ZP_WORD:100 , +Potential registers zp ZP_WORD:102 [ init_buckets::$13 ] : zp ZP_WORD:102 , +Potential registers zp ZP_WORD:104 [ init_buckets::$17 ] : zp ZP_WORD:104 , +Potential registers zp ZP_WORD:106 [ init_buckets::bucket#0 ] : zp ZP_WORD:106 , +Potential registers zp ZP_WORD:108 [ init_buckets::$10 ] : zp ZP_WORD:108 , +Potential registers zp ZP_BYTE:110 [ init_buckets::$14 ] : zp ZP_BYTE:110 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:111 [ malloc::mem#0 ] : zp ZP_WORD:111 , +Potential registers zp ZP_BYTE:113 [ init_angle_screen::$3 ] : zp ZP_BYTE:113 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:114 [ init_angle_screen::$4 ] : zp ZP_BYTE:114 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:115 [ init_angle_screen::xw#0 ] : zp ZP_WORD:115 , +Potential registers zp ZP_BYTE:117 [ init_angle_screen::$7 ] : zp ZP_BYTE:117 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:118 [ init_angle_screen::yw#0 ] : zp ZP_WORD:118 , +Potential registers zp ZP_WORD:120 [ atan2_16::x#0 ] : zp ZP_WORD:120 , +Potential registers zp ZP_WORD:122 [ atan2_16::y#0 ] : zp ZP_WORD:122 , +Potential registers zp ZP_WORD:124 [ atan2_16::return#2 ] : zp ZP_WORD:124 , +Potential registers zp ZP_WORD:126 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:126 , +Potential registers zp ZP_WORD:128 [ init_angle_screen::$11 ] : zp ZP_WORD:128 , +Potential registers zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:130 , reg byte x , +Potential registers zp ZP_BYTE:131 [ init_angle_screen::$13 ] : zp ZP_BYTE:131 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:132 [ init_angle_screen::$14 ] : zp ZP_BYTE:132 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:133 [ init_angle_screen::$15 ] : zp ZP_BYTE:133 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:134 [ atan2_16::$24 ] : zp ZP_BYTE:134 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:135 [ atan2_16::$23 ] : zp ZP_BYTE:135 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:136 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:136 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:137 [ sqr::return#2 ] : zp ZP_WORD:137 , +Potential registers zp ZP_WORD:139 [ init_dist_screen::yds#0 ] : zp ZP_WORD:139 , +Potential registers zp ZP_BYTE:141 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:141 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:142 [ sqr::return#3 ] : zp ZP_WORD:142 , +Potential registers zp ZP_WORD:144 [ init_dist_screen::xds#0 ] : zp ZP_WORD:144 , +Potential registers zp ZP_WORD:146 [ init_dist_screen::ds#0 ] : zp ZP_WORD:146 , +Potential registers zp ZP_WORD:148 [ sqrt::val#0 ] : zp ZP_WORD:148 , +Potential registers zp ZP_BYTE:150 [ sqrt::return#2 ] : zp ZP_BYTE:150 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:151 [ init_dist_screen::d#0 ] : zp ZP_BYTE:151 , reg byte a , reg byte x , +Potential registers zp ZP_WORD:152 [ bsearch16u::key#0 ] : zp ZP_WORD:152 , +Potential registers zp ZP_WORD:154 [ bsearch16u::return#3 ] : zp ZP_WORD:154 , +Potential registers zp ZP_WORD:156 [ sqrt::found#0 ] : zp ZP_WORD:156 , +Potential registers zp ZP_WORD:158 [ sqrt::$3 ] : zp ZP_WORD:158 , +Potential registers zp ZP_WORD:160 [ sqrt::$1 ] : zp ZP_WORD:160 , +Potential registers zp ZP_BYTE:162 [ sqrt::return#0 ] : zp ZP_BYTE:162 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:163 [ bsearch16u::$6 ] : zp ZP_BYTE:163 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:164 [ bsearch16u::$16 ] : zp ZP_BYTE:164 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:165 [ bsearch16u::result#0 ] : zp ZP_WORD:165 , Potential registers zp ZP_BYTE:167 [ sqr::$0 ] : zp ZP_BYTE:167 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:168 [ sqr::return#0 ] : zp ZP_WORD:168 , @@ -6924,143 +6992,141 @@ Potential registers zp ZP_BYTE:172 [ init_squares::$3 ] : zp ZP_BYTE:172 , reg b Potential registers zp ZP_BYTE:173 [ init_squares::$4 ] : zp ZP_BYTE:173 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:132 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:133 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:122 [ atan2_16::return#2 ] 50: zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:118 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:120 [ atan2_16::y#0 ] -Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp ZP_BYTE:161 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:162 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:165 [ bsearch16u::result#0 ] 501: zp ZP_WORD:163 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:152 [ bsearch16u::return#3 ] 0.27: zp ZP_WORD:150 [ bsearch16u::key#0 ] -Uplift Scope [init_angle_screen] 220.36: zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 202: zp ZP_BYTE:111 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:112 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:115 [ init_angle_screen::$7 ] 202: zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:126 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:129 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:130 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:131 [ init_angle_screen::$15 ] 129.86: zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 84.17: zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:116 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:113 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:74 [ init_angle_screen::screen#0 ] -Uplift Scope [main] 673.33: zp ZP_WORD:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] 377.07: zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] 238.11: zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 ] 202: zp ZP_BYTE:84 [ main::$22 ] 202: zp ZP_WORD:85 [ main::fill#0 ] 151.5: zp ZP_WORD:87 [ main::angle#0 ] 134.67: zp ZP_BYTE:3 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:78 [ main::$21 ] 22: zp ZP_WORD:82 [ main::fill1#0 ] 13.64: zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 7.69: zp ZP_BYTE:81 [ main::bucket_size#0 ] 6.59: zp ZP_WORD:79 [ main::bucket#0 ] -Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:54 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 221.24: zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 202: zp ZP_BYTE:139 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:142 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:144 [ init_dist_screen::ds#0 ] 131.3: zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:149 [ init_dist_screen::d#0 ] 77: zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:134 [ init_dist_screen::y2#0 ] 18.18: zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] 17.47: zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:137 [ init_dist_screen::yds#0 ] -Uplift Scope [sqr] 338: zp ZP_BYTE:58 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 202: zp ZP_WORD:140 [ sqr::return#3 ] 28.5: zp ZP_WORD:168 [ sqr::return#0 ] 22: zp ZP_WORD:135 [ sqr::return#2 ] 4: zp ZP_BYTE:167 [ sqr::$0 ] -Uplift Scope [init_buckets] 34.33: zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] 33: zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ] 33: zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] 23.83: zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] 22: zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] 22: zp ZP_WORD:89 [ init_buckets::$15 ] 22: zp ZP_WORD:93 [ init_buckets::$12 ] 22: zp ZP_WORD:95 [ init_buckets::$16 ] 22: zp ZP_WORD:98 [ init_buckets::$9 ] 22: zp ZP_WORD:100 [ init_buckets::$13 ] 22: zp ZP_WORD:102 [ init_buckets::$17 ] 22: zp ZP_BYTE:108 [ init_buckets::$14 ] 18.5: zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] 15.93: zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] 11: zp ZP_WORD:106 [ init_buckets::$10 ] 7.33: zp ZP_WORD:104 [ init_buckets::bucket#0 ] 5.5: zp ZP_BYTE:97 [ init_buckets::distance#0 ] 3.67: zp ZP_WORD:91 [ init_buckets::$5 ] 0.43: zp ZP_WORD:76 [ init_buckets::screen#0 ] -Uplift Scope [sqrt] 202: zp ZP_BYTE:148 [ sqrt::return#2 ] 103: zp ZP_WORD:146 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:160 [ sqrt::return#0 ] 4: zp ZP_WORD:154 [ sqrt::found#0 ] 4: zp ZP_WORD:156 [ sqrt::$3 ] 2: zp ZP_WORD:158 [ sqrt::$1 ] -Uplift Scope [init_squares] 25.17: zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:172 [ init_squares::$3 ] 22: zp ZP_BYTE:173 [ init_squares::$4 ] 13.93: zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] -Uplift Scope [malloc] 35: zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] 0.4: zp ZP_WORD:109 [ malloc::mem#0 ] -Uplift Scope [] 23.24: zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] 0.12: zp ZP_WORD:64 [ SCREEN_DIST#0 ] 0.05: zp ZP_WORD:66 [ SCREEN_ANGLE#0 ] 0.04: zp ZP_WORD:72 [ BUCKET_IDX#0 ] 0.03: zp ZP_WORD:170 [ SQUARES#1 ] 0.03: zp ZP_WORD:70 [ BUCKETS#0 ] 0.02: zp ZP_WORD:68 [ BUCKET_SIZES#0 ] +Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:134 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:135 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:124 [ atan2_16::return#2 ] 50: zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:120 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:122 [ atan2_16::y#0 ] +Uplift Scope [bsearch16u] 6,450.89: zp ZP_BYTE:59 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] 4,851: zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] 2,433.29: zp ZP_WORD:55 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] 2,002: zp ZP_BYTE:163 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:164 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:165 [ bsearch16u::result#0 ] 4: zp ZP_WORD:154 [ bsearch16u::return#3 ] 0.24: zp ZP_WORD:152 [ bsearch16u::key#0 ] +Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:113 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:114 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:117 [ init_angle_screen::$7 ] 202: zp ZP_WORD:126 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:128 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:131 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:132 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:133 [ init_angle_screen::$15 ] 126.25: zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:118 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:115 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:76 [ init_angle_screen::screen#0 ] +Uplift Scope [main] 673.33: zp ZP_WORD:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] 377.07: zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] 238.11: zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 ] 202: zp ZP_BYTE:86 [ main::$22 ] 202: zp ZP_WORD:87 [ main::fill#0 ] 151.5: zp ZP_WORD:89 [ main::angle#0 ] 134.67: zp ZP_BYTE:3 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:80 [ main::$21 ] 22: zp ZP_WORD:84 [ main::fill1#0 ] 13.64: zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 7.69: zp ZP_BYTE:83 [ main::bucket_size#0 ] 6.59: zp ZP_WORD:81 [ main::bucket#0 ] +Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:54 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 202: zp ZP_BYTE:141 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:144 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:146 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:151 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:136 [ init_dist_screen::y2#0 ] 18.18: zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] 17.47: zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:139 [ init_dist_screen::yds#0 ] +Uplift Scope [sqr] 338: zp ZP_BYTE:60 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 202: zp ZP_WORD:142 [ sqr::return#3 ] 28.5: zp ZP_WORD:168 [ sqr::return#0 ] 22: zp ZP_WORD:137 [ sqr::return#2 ] 4: zp ZP_BYTE:167 [ sqr::$0 ] +Uplift Scope [init_buckets] 34.33: zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] 33: zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ] 33: zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] 23.83: zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] 22: zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] 22: zp ZP_WORD:91 [ init_buckets::$15 ] 22: zp ZP_WORD:95 [ init_buckets::$12 ] 22: zp ZP_WORD:97 [ init_buckets::$16 ] 22: zp ZP_WORD:100 [ init_buckets::$9 ] 22: zp ZP_WORD:102 [ init_buckets::$13 ] 22: zp ZP_WORD:104 [ init_buckets::$17 ] 22: zp ZP_BYTE:110 [ init_buckets::$14 ] 18.5: zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] 15.93: zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] 11: zp ZP_WORD:108 [ init_buckets::$10 ] 7.33: zp ZP_WORD:106 [ init_buckets::bucket#0 ] 5.5: zp ZP_BYTE:99 [ init_buckets::distance#0 ] 3.67: zp ZP_WORD:93 [ init_buckets::$5 ] 0.43: zp ZP_WORD:78 [ init_buckets::screen#0 ] +Uplift Scope [sqrt] 202: zp ZP_BYTE:150 [ sqrt::return#2 ] 103: zp ZP_WORD:148 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:162 [ sqrt::return#0 ] 4: zp ZP_WORD:156 [ sqrt::found#0 ] 4: zp ZP_WORD:158 [ sqrt::$3 ] 2: zp ZP_WORD:160 [ sqrt::$1 ] +Uplift Scope [init_squares] 25.17: zp ZP_WORD:63 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:65 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:172 [ init_squares::$3 ] 22: zp ZP_BYTE:173 [ init_squares::$4 ] 13.93: zp ZP_WORD:61 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplift Scope [malloc] 35: zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] 0.4: zp ZP_WORD:111 [ malloc::mem#0 ] +Uplift Scope [] 23.24: zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] 0.12: zp ZP_WORD:66 [ SCREEN_DIST#0 ] 0.05: zp ZP_WORD:68 [ SCREEN_ANGLE#0 ] 0.04: zp ZP_WORD:74 [ BUCKET_IDX#0 ] 0.03: zp ZP_WORD:170 [ SQUARES#1 ] 0.03: zp ZP_WORD:72 [ BUCKETS#0 ] 0.02: zp ZP_WORD:70 [ BUCKET_SIZES#0 ] Uplift Scope [RADIX] -Uplifting [atan2_16] best 1253979 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:122 [ atan2_16::return#2 ] zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:118 [ atan2_16::x#0 ] zp ZP_WORD:120 [ atan2_16::y#0 ] +Uplifting [atan2_16] best 1281094 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:124 [ atan2_16::return#2 ] zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:120 [ atan2_16::x#0 ] zp ZP_WORD:122 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [bsearch16u] best 1234979 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:165 [ bsearch16u::result#0 ] zp ZP_WORD:163 [ bsearch16u::pivot#0 ] zp ZP_WORD:152 [ bsearch16u::return#3 ] zp ZP_WORD:150 [ bsearch16u::key#0 ] -Uplifting [init_angle_screen] best 1233379 combination zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:126 [ init_angle_screen::$11 ] zp ZP_BYTE:129 [ init_angle_screen::$13 ] zp ZP_BYTE:130 [ init_angle_screen::$14 ] zp ZP_BYTE:131 [ init_angle_screen::$15 ] zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:116 [ init_angle_screen::yw#0 ] zp ZP_WORD:113 [ init_angle_screen::xw#0 ] zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:74 [ init_angle_screen::screen#0 ] +Uplifting [bsearch16u] best 1262094 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] zp ZP_WORD:55 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:165 [ bsearch16u::result#0 ] zp ZP_WORD:154 [ bsearch16u::return#3 ] zp ZP_WORD:152 [ bsearch16u::key#0 ] +Uplifting [init_angle_screen] best 1259894 combination reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:126 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:128 [ init_angle_screen::$11 ] reg byte a [ init_angle_screen::$13 ] zp ZP_BYTE:132 [ init_angle_screen::$14 ] zp ZP_BYTE:133 [ init_angle_screen::$15 ] zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:118 [ init_angle_screen::yw#0 ] zp ZP_WORD:115 [ init_angle_screen::xw#0 ] zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:76 [ init_angle_screen::screen#0 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [main] best 1231939 combination zp ZP_WORD:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 ] reg byte a [ main::$22 ] zp ZP_WORD:85 [ main::fill#0 ] zp ZP_WORD:87 [ main::angle#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$21 ] zp ZP_WORD:82 [ main::fill1#0 ] zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] zp ZP_BYTE:81 [ main::bucket_size#0 ] zp ZP_WORD:79 [ main::bucket#0 ] +Uplifting [main] best 1258454 combination zp ZP_WORD:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 ] reg byte a [ main::$22 ] zp ZP_WORD:87 [ main::fill#0 ] zp ZP_WORD:89 [ main::angle#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$21 ] zp ZP_WORD:84 [ main::fill1#0 ] zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] zp ZP_BYTE:83 [ main::bucket_size#0 ] zp ZP_WORD:81 [ main::bucket#0 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [init_dist_screen] best 1228739 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:142 [ init_dist_screen::xds#0 ] zp ZP_WORD:144 [ init_dist_screen::ds#0 ] zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:134 [ init_dist_screen::y2#0 ] zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp ZP_WORD:137 [ init_dist_screen::yds#0 ] +Uplifting [init_dist_screen] best 1255254 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:144 [ init_dist_screen::xds#0 ] zp ZP_WORD:146 [ init_dist_screen::ds#0 ] zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:136 [ init_dist_screen::y2#0 ] zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp ZP_WORD:139 [ init_dist_screen::yds#0 ] Limited combination testing to 100 combinations of 6144 possible. -Uplifting [sqr] best 1228402 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp ZP_WORD:140 [ sqr::return#3 ] zp ZP_WORD:168 [ sqr::return#0 ] zp ZP_WORD:135 [ sqr::return#2 ] reg byte a [ sqr::$0 ] -Uplifting [init_buckets] best 1228122 combination zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] reg byte y [ init_buckets::i#2 init_buckets::i#1 ] reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ] zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] zp ZP_WORD:89 [ init_buckets::$15 ] zp ZP_WORD:93 [ init_buckets::$12 ] zp ZP_WORD:95 [ init_buckets::$16 ] zp ZP_WORD:98 [ init_buckets::$9 ] zp ZP_WORD:100 [ init_buckets::$13 ] zp ZP_WORD:102 [ init_buckets::$17 ] reg byte a [ init_buckets::$14 ] zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] zp ZP_WORD:106 [ init_buckets::$10 ] zp ZP_WORD:104 [ init_buckets::bucket#0 ] zp ZP_BYTE:97 [ init_buckets::distance#0 ] zp ZP_WORD:91 [ init_buckets::$5 ] zp ZP_WORD:76 [ init_buckets::screen#0 ] -Uplifting [sqrt] best 1227219 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:146 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:154 [ sqrt::found#0 ] zp ZP_WORD:156 [ sqrt::$3 ] zp ZP_WORD:158 [ sqrt::$1 ] -Uplifting [init_squares] best 1227019 combination zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] -Uplifting [malloc] best 1227019 combination zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] zp ZP_WORD:109 [ malloc::mem#0 ] -Uplifting [] best 1227019 combination zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] zp ZP_WORD:64 [ SCREEN_DIST#0 ] zp ZP_WORD:66 [ SCREEN_ANGLE#0 ] zp ZP_WORD:72 [ BUCKET_IDX#0 ] zp ZP_WORD:170 [ SQUARES#1 ] zp ZP_WORD:70 [ BUCKETS#0 ] zp ZP_WORD:68 [ BUCKET_SIZES#0 ] -Uplifting [RADIX] best 1227019 combination +Uplifting [sqr] best 1254917 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp ZP_WORD:142 [ sqr::return#3 ] zp ZP_WORD:168 [ sqr::return#0 ] zp ZP_WORD:137 [ sqr::return#2 ] reg byte a [ sqr::$0 ] +Uplifting [init_buckets] best 1254637 combination zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] reg byte y [ init_buckets::i#2 init_buckets::i#1 ] reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ] zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] zp ZP_WORD:91 [ init_buckets::$15 ] zp ZP_WORD:95 [ init_buckets::$12 ] zp ZP_WORD:97 [ init_buckets::$16 ] zp ZP_WORD:100 [ init_buckets::$9 ] zp ZP_WORD:102 [ init_buckets::$13 ] zp ZP_WORD:104 [ init_buckets::$17 ] reg byte a [ init_buckets::$14 ] zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] zp ZP_WORD:108 [ init_buckets::$10 ] zp ZP_WORD:106 [ init_buckets::bucket#0 ] zp ZP_BYTE:99 [ init_buckets::distance#0 ] zp ZP_WORD:93 [ init_buckets::$5 ] zp ZP_WORD:78 [ init_buckets::screen#0 ] +Uplifting [sqrt] best 1253734 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:148 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:156 [ sqrt::found#0 ] zp ZP_WORD:158 [ sqrt::$3 ] zp ZP_WORD:160 [ sqrt::$1 ] +Uplifting [init_squares] best 1253534 combination zp ZP_WORD:63 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp ZP_WORD:61 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplifting [malloc] best 1253534 combination zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] zp ZP_WORD:111 [ malloc::mem#0 ] +Uplifting [] best 1253534 combination zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] zp ZP_WORD:66 [ SCREEN_DIST#0 ] zp ZP_WORD:68 [ SCREEN_ANGLE#0 ] zp ZP_WORD:74 [ BUCKET_IDX#0 ] zp ZP_WORD:170 [ SQUARES#1 ] zp ZP_WORD:72 [ BUCKETS#0 ] zp ZP_WORD:70 [ BUCKET_SIZES#0 ] +Uplifting [RADIX] best 1253534 combination Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] -Uplifting [main] best 1227019 combination zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Uplifting [init_dist_screen] best 1227019 combination zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Uplifting [init_angle_screen] best 1227019 combination zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:129 [ init_angle_screen::$13 ] -Uplifting [init_angle_screen] best 1226419 combination reg byte a [ init_angle_screen::$13 ] -Attempting to uplift remaining variables inzp ZP_BYTE:130 [ init_angle_screen::$14 ] -Uplifting [init_angle_screen] best 1226019 combination reg byte a [ init_angle_screen::$14 ] -Attempting to uplift remaining variables inzp ZP_BYTE:131 [ init_angle_screen::$15 ] -Uplifting [init_angle_screen] best 1225419 combination reg byte a [ init_angle_screen::$15 ] -Attempting to uplift remaining variables inzp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Uplifting [init_dist_screen] best 1225419 combination zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Uplifting [init_angle_screen] best 1225419 combination zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] -Uplifting [init_angle_screen] best 1225419 combination zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] +Uplifting [main] best 1253534 combination zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:132 [ init_angle_screen::$14 ] +Uplifting [init_angle_screen] best 1253134 combination reg byte a [ init_angle_screen::$14 ] +Attempting to uplift remaining variables inzp ZP_BYTE:133 [ init_angle_screen::$15 ] +Uplifting [init_angle_screen] best 1252534 combination reg byte a [ init_angle_screen::$15 ] +Attempting to uplift remaining variables inzp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Uplifting [init_dist_screen] best 1252534 combination zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Uplifting [init_angle_screen] best 1252534 combination zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Uplifting [init_dist_screen] best 1252534 combination zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Uplifting [init_angle_screen] best 1252534 combination zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1252534 combination zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Uplifting [init_dist_screen] best 1225349 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Attempting to uplift remaining variables inzp ZP_BYTE:134 [ init_dist_screen::y2#0 ] -Uplifting [init_dist_screen] best 1225249 combination reg byte a [ init_dist_screen::y2#0 ] +Uplifting [init_dist_screen] best 1252464 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] +Attempting to uplift remaining variables inzp ZP_BYTE:136 [ init_dist_screen::y2#0 ] +Uplifting [init_dist_screen] best 1252364 combination reg byte a [ init_dist_screen::y2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Uplifting [init_angle_screen] best 1225249 combination zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] +Uplifting [init_angle_screen] best 1252364 combination zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Uplifting [init_dist_screen] best 1225249 combination zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +Uplifting [init_dist_screen] best 1252364 combination zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] -Uplifting [main] best 1225249 combination zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:81 [ main::bucket_size#0 ] -Uplifting [main] best 1225249 combination zp ZP_BYTE:81 [ main::bucket_size#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:97 [ init_buckets::distance#0 ] -Uplifting [init_buckets] best 1225249 combination zp ZP_BYTE:97 [ init_buckets::distance#0 ] -Coalescing zero page register [ zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 ] ] with [ zp ZP_WORD:82 [ main::fill1#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] ] with [ zp ZP_WORD:89 [ init_buckets::$15 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 ] ] with [ zp ZP_WORD:109 [ malloc::mem#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:74 [ init_angle_screen::screen#0 ] ] - score: 1 +Uplifting [main] best 1252364 combination zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:83 [ main::bucket_size#0 ] +Uplifting [main] best 1252364 combination zp ZP_BYTE:83 [ main::bucket_size#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:99 [ init_buckets::distance#0 ] +Uplifting [init_buckets] best 1252364 combination zp ZP_BYTE:99 [ init_buckets::distance#0 ] +Coalescing zero page register [ zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 ] ] with [ zp ZP_WORD:84 [ main::fill1#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] ] with [ zp ZP_WORD:91 [ init_buckets::$15 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 ] ] with [ zp ZP_WORD:111 [ malloc::mem#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:76 [ init_angle_screen::screen#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] ] with [ zp ZP_WORD:152 [ bsearch16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:64 [ SCREEN_DIST#0 ] ] with [ zp ZP_WORD:76 [ init_buckets::screen#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:93 [ init_buckets::$12 ] ] with [ zp ZP_WORD:95 [ init_buckets::$16 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:98 [ init_buckets::$9 ] ] with [ zp ZP_WORD:100 [ init_buckets::$13 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:102 [ init_buckets::$17 ] ] with [ zp ZP_WORD:104 [ init_buckets::bucket#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:113 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:118 [ atan2_16::x#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:116 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:120 [ atan2_16::y#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:122 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:135 [ sqr::return#2 ] ] with [ zp ZP_WORD:137 [ init_dist_screen::yds#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:140 [ sqr::return#3 ] ] with [ zp ZP_WORD:142 [ init_dist_screen::xds#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:140 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:168 [ sqr::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:144 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:146 [ sqrt::val#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:154 [ sqrt::found#0 ] ] with [ zp ZP_WORD:156 [ sqrt::$3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 ] ] with [ zp ZP_WORD:91 [ init_buckets::$5 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] ] with [ zp ZP_WORD:154 [ bsearch16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:66 [ SCREEN_DIST#0 ] ] with [ zp ZP_WORD:78 [ init_buckets::screen#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:95 [ init_buckets::$12 ] ] with [ zp ZP_WORD:97 [ init_buckets::$16 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:100 [ init_buckets::$9 ] ] with [ zp ZP_WORD:102 [ init_buckets::$13 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:104 [ init_buckets::$17 ] ] with [ zp ZP_WORD:106 [ init_buckets::bucket#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:115 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:120 [ atan2_16::x#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:118 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:122 [ atan2_16::y#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:124 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:126 [ init_angle_screen::angle_w#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:137 [ sqr::return#2 ] ] with [ zp ZP_WORD:139 [ init_dist_screen::yds#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:142 [ sqr::return#3 ] ] with [ zp ZP_WORD:144 [ init_dist_screen::xds#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:142 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:168 [ sqr::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:146 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:148 [ sqrt::val#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:156 [ sqrt::found#0 ] ] with [ zp ZP_WORD:158 [ sqrt::$3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 ] ] with [ zp ZP_WORD:93 [ init_buckets::$5 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 ] ] with [ zp ZP_WORD:170 [ SQUARES#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp ZP_WORD:122 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp ZP_WORD:154 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:98 [ init_buckets::$9 init_buckets::$13 ] ] with [ zp ZP_WORD:102 [ init_buckets::$17 init_buckets::bucket#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:140 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:144 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp ZP_WORD:126 [ init_angle_screen::$11 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:158 [ sqrt::$1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:140 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:150 [ bsearch16u::key#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp ZP_WORD:124 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 ] ] with [ zp ZP_WORD:156 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:100 [ init_buckets::$9 init_buckets::$13 ] ] with [ zp ZP_WORD:104 [ init_buckets::$17 init_buckets::bucket#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:142 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:146 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp ZP_WORD:128 [ init_angle_screen::$11 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:160 [ sqrt::$1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:142 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:152 [ bsearch16u::key#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] ] with [ zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 main::fill1#0 ] ] Coalescing zero page register [ zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] ] with [ zp ZP_WORD:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] ] Coalescing zero page register [ zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] ] with [ zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] ] Coalescing zero page register [ zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] ] Coalescing zero page register [ zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ] with [ zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] ] Coalescing zero page register [ zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ] with [ zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] with [ zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] ] with [ zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] ] Coalescing zero page register [ zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] with [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] ] with [ zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] ] with [ zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] ] Coalescing zero page register [ zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] ] with [ zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] Coalescing zero page register [ zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] ] -Coalescing zero page register [ zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] with [ zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ] -Coalescing zero page register [ zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] ] with [ zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] ] -Coalescing zero page register [ zp ZP_WORD:79 [ main::bucket#0 ] ] with [ zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ] -Coalescing zero page register [ zp ZP_BYTE:81 [ main::bucket_size#0 ] ] with [ zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] ] -Coalescing zero page register [ zp ZP_WORD:85 [ main::fill#0 ] ] with [ zp ZP_WORD:64 [ SCREEN_DIST#0 init_buckets::screen#0 ] ] -Coalescing zero page register [ zp ZP_WORD:87 [ main::angle#0 ] ] with [ zp ZP_WORD:72 [ BUCKET_IDX#0 ] ] -Coalescing zero page register [ zp ZP_BYTE:97 [ init_buckets::distance#0 ] ] with [ zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] ] -Coalescing zero page register [ zp ZP_WORD:113 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] with [ zp ZP_WORD:93 [ init_buckets::$12 init_buckets::$16 ] ] -Coalescing zero page register [ zp ZP_WORD:116 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] with [ zp ZP_WORD:98 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] ] -Coalescing zero page register [ zp ZP_WORD:135 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ zp ZP_WORD:106 [ init_buckets::$10 ] ] +Coalescing zero page register [ zp ZP_WORD:55 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] ] with [ zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ] +Coalescing zero page register [ zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] with [ zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] ] +Coalescing zero page register [ zp ZP_WORD:81 [ main::bucket#0 ] ] with [ zp ZP_WORD:61 [ init_squares::sqr#2 init_squares::sqr#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:83 [ main::bucket_size#0 ] ] with [ zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] ] +Coalescing zero page register [ zp ZP_WORD:87 [ main::fill#0 ] ] with [ zp ZP_WORD:63 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ] +Coalescing zero page register [ zp ZP_WORD:89 [ main::angle#0 ] ] with [ zp ZP_WORD:66 [ SCREEN_DIST#0 init_buckets::screen#0 ] ] +Coalescing zero page register [ zp ZP_BYTE:99 [ init_buckets::distance#0 ] ] with [ zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] ] +Coalescing zero page register [ zp ZP_WORD:115 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] with [ zp ZP_WORD:95 [ init_buckets::$12 init_buckets::$16 ] ] +Coalescing zero page register [ zp ZP_WORD:118 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] with [ zp ZP_WORD:100 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] ] +Coalescing zero page register [ zp ZP_WORD:137 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ zp ZP_WORD:108 [ init_buckets::$10 ] ] Coalescing zero page register [ zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] with [ zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 main::min_offset#2 main::min_offset#8 main::fill1#0 ] ] Coalescing zero page register [ zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] ] with [ zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] ] -Coalescing zero page register [ zp ZP_WORD:79 [ main::bucket#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ] with [ zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 init_buckets::i2#2 init_buckets::i2#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:97 [ init_buckets::distance#0 init_dist_screen::xb#2 init_dist_screen::xb#1 ] ] with [ zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] ] with [ zp ZP_BYTE:81 [ main::bucket_size#0 init_dist_screen::x#2 init_dist_screen::x#1 ] ] -Coalescing zero page register [ zp ZP_WORD:135 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$10 ] ] with [ zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] ] -Coalescing zero page register [ zp ZP_WORD:140 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] ] with [ zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_buckets::i4#2 init_buckets::i4#1 ] ] -Coalescing zero page register [ zp ZP_WORD:163 [ bsearch16u::pivot#0 ] ] with [ zp ZP_WORD:113 [ init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ] ] -Coalescing zero page register [ zp ZP_WORD:165 [ bsearch16u::result#0 ] ] with [ zp ZP_WORD:116 [ init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] ] +Coalescing zero page register [ zp ZP_WORD:81 [ main::bucket#0 init_squares::sqr#2 init_squares::sqr#1 ] ] with [ zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 init_buckets::i2#2 init_buckets::i2#1 ] ] +Coalescing zero page register [ zp ZP_WORD:87 [ main::fill#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ] with [ zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_buckets::i4#2 init_buckets::i4#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:99 [ init_buckets::distance#0 init_dist_screen::xb#10 init_dist_screen::xb#1 ] ] with [ zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] ] with [ zp ZP_BYTE:83 [ main::bucket_size#0 init_dist_screen::x#10 init_dist_screen::x#1 ] ] +Coalescing zero page register [ zp ZP_WORD:142 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] ] with [ zp ZP_WORD:115 [ init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ] ] +Coalescing zero page register [ zp ZP_WORD:165 [ bsearch16u::result#0 ] ] with [ zp ZP_WORD:118 [ init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] ] Allocated (was zp ZP_WORD:21) zp ZP_WORD:2 [ heap_head#18 heap_head#1 init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] -Allocated (was zp ZP_BYTE:30) zp ZP_BYTE:4 [ init_angle_screen::x#2 init_angle_screen::x#1 main::min_angle#2 main::min_angle#5 main::min_angle#1 ] +Allocated (was zp ZP_BYTE:30) zp ZP_BYTE:4 [ init_angle_screen::x#5 init_angle_screen::x#1 main::min_angle#2 main::min_angle#5 main::min_angle#1 ] Allocated (was zp ZP_WORD:32) zp ZP_WORD:5 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ] -Allocated (was zp ZP_BYTE:46) zp ZP_BYTE:7 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Allocated (was zp ZP_BYTE:46) zp ZP_BYTE:7 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ] Allocated (was zp ZP_WORD:47) zp ZP_WORD:8 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 main::min_offset#2 main::min_offset#8 main::fill1#0 ] Allocated (was zp ZP_WORD:49) zp ZP_WORD:10 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 init_buckets::i1#2 init_buckets::i1#1 main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] -Allocated (was zp ZP_WORD:55) zp ZP_WORD:12 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -Allocated (was zp ZP_WORD:66) zp ZP_WORD:14 [ SCREEN_ANGLE#0 ] -Allocated (was zp ZP_WORD:68) zp ZP_WORD:16 [ BUCKET_SIZES#0 ] -Allocated (was zp ZP_WORD:70) zp ZP_WORD:18 [ BUCKETS#0 ] -Allocated (was zp ZP_WORD:79) zp ZP_WORD:20 [ main::bucket#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 init_buckets::i2#2 init_buckets::i2#1 ] -Allocated (was zp ZP_WORD:85) zp ZP_WORD:22 [ main::fill#0 SCREEN_DIST#0 init_buckets::screen#0 ] -Allocated (was zp ZP_WORD:87) zp ZP_WORD:24 [ main::angle#0 BUCKET_IDX#0 ] -Allocated (was zp ZP_BYTE:97) zp ZP_BYTE:26 [ init_buckets::distance#0 init_dist_screen::xb#2 init_dist_screen::xb#1 init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ] -Allocated (was zp ZP_BYTE:128) zp ZP_BYTE:27 [ init_angle_screen::ang_w#0 main::bucket_size#0 init_dist_screen::x#2 init_dist_screen::x#1 ] -Allocated (was zp ZP_WORD:135) zp ZP_WORD:28 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$10 init_squares::sqr#2 init_squares::sqr#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -Allocated (was zp ZP_WORD:140) zp ZP_WORD:30 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_buckets::i4#2 init_buckets::i4#1 ] -Allocated (was zp ZP_WORD:163) zp ZP_WORD:32 [ bsearch16u::pivot#0 init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ] -Allocated (was zp ZP_WORD:165) zp ZP_WORD:34 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] +Allocated (was zp ZP_WORD:55) zp ZP_WORD:12 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] +Allocated (was zp ZP_WORD:57) zp ZP_WORD:14 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +Allocated (was zp ZP_WORD:68) zp ZP_WORD:16 [ SCREEN_ANGLE#0 ] +Allocated (was zp ZP_WORD:70) zp ZP_WORD:18 [ BUCKET_SIZES#0 ] +Allocated (was zp ZP_WORD:72) zp ZP_WORD:20 [ BUCKETS#0 ] +Allocated (was zp ZP_WORD:74) zp ZP_WORD:22 [ BUCKET_IDX#0 ] +Allocated (was zp ZP_WORD:81) zp ZP_WORD:24 [ main::bucket#0 init_squares::sqr#2 init_squares::sqr#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 init_buckets::i2#2 init_buckets::i2#1 ] +Allocated (was zp ZP_WORD:87) zp ZP_WORD:26 [ main::fill#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_buckets::i4#2 init_buckets::i4#1 ] +Allocated (was zp ZP_WORD:89) zp ZP_WORD:28 [ main::angle#0 SCREEN_DIST#0 init_buckets::screen#0 ] +Allocated (was zp ZP_BYTE:99) zp ZP_BYTE:30 [ init_buckets::distance#0 init_dist_screen::xb#10 init_dist_screen::xb#1 init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ] +Allocated (was zp ZP_BYTE:130) zp ZP_BYTE:31 [ init_angle_screen::ang_w#0 main::bucket_size#0 init_dist_screen::x#10 init_dist_screen::x#1 ] +Allocated (was zp ZP_WORD:137) zp ZP_WORD:32 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$10 ] +Allocated (was zp ZP_WORD:142) zp ZP_WORD:34 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ] +Allocated (was zp ZP_WORD:165) zp ZP_WORD:36 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -7092,17 +7158,17 @@ ASSEMBLER BEFORE OPTIMIZATION .label heap_head = 2 .label SQUARES = 5 // Screen containing distance to center - .label SCREEN_DIST = $16 + .label SCREEN_DIST = $1c // Screen containing angle to center - .label SCREEN_ANGLE = $e + .label SCREEN_ANGLE = $10 // Array containing the bucket size for each of the distance buckets - .label BUCKET_SIZES = $10 + .label BUCKET_SIZES = $12 // Buckets containing screen indices for each distance from the center. // BUCKETS[dist] is an array of words containing screen indices. // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist] - .label BUCKETS = $12 + .label BUCKETS = $14 // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes) - .label BUCKET_IDX = $18 + .label BUCKET_IDX = $16 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -7223,12 +7289,12 @@ bend_from_b3: bend: // main main: { - .label bucket = $14 - .label bucket_size = $1b - .label bucket_idx = $1a + .label bucket = $18 + .label bucket_size = $1f + .label bucket_idx = $1e .label offset = $a - .label fill = $16 - .label angle = $18 + .label fill = $1a + .label angle = $1c .label min_angle = 4 .label fill1 = 8 .label min_offset = 8 @@ -7468,25 +7534,25 @@ main: { } // init_buckets // Initialize buckets containing indices of chars on the screen with specific distances to the center. -// init_buckets(byte* zeropage($16) screen) +// init_buckets(byte* zeropage($1c) screen) init_buckets: { .label _5 = 5 - .label _9 = $22 - .label _10 = $1c - .label _12 = $20 - .label _13 = $22 - .label screen = $16 + .label _9 = $24 + .label _10 = $20 + .label _12 = $22 + .label _13 = $24 + .label screen = $1c .label dist = 8 .label i1 = $a - .label i2 = $14 - .label distance = $1a - .label bucket = $22 + .label i2 = $18 + .label distance = $1e + .label bucket = $24 .label dist_3 = 2 - .label i4 = $1e + .label i4 = $1a .label dist_5 = 2 .label _15 = 5 - .label _16 = $20 - .label _17 = $22 + .label _16 = $22 + .label _17 = $24 .label dist_8 = 2 // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] b1_from_init_buckets: @@ -7782,19 +7848,19 @@ malloc: { // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center -// init_angle_screen(byte* zeropage($1e) screen) +// init_angle_screen(byte* zeropage($1a) screen) init_angle_screen: { .label _11 = $a - .label screen = $1e - .label screen_topline = $14 - .label screen_bottomline = $1e - .label xw = $20 - .label yw = $22 + .label screen = $1a + .label screen_topline = $18 + .label screen_bottomline = $1a + .label xw = $22 + .label yw = $24 .label angle_w = $a - .label ang_w = $1b + .label ang_w = $1f .label x = 4 .label xb = 7 - .label y = $1a + .label y = $1e // [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda screen clc @@ -7827,81 +7893,50 @@ init_angle_screen: { jmp b1 // init_angle_screen::@1 b1: - // [100] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - b2_from_b1: - // [100] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [100] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + b3_from_b1: + // [100] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [100] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [100] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b2 - // init_angle_screen::@2 - b2: - // [101] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - jmp b4 - // init_angle_screen::@4 - b4: - // [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b4 - jmp breturn - // init_angle_screen::@return - breturn: - // [106] return - rts + jmp b3 + // [100] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + b3_from_b2: + // [100] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [100] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy + jmp b3 // init_angle_screen::@3 b3: - // [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [102] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw - // [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [104] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl - // [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta yw+1 sty yw - // [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [114] call atan2_16 + // [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [108] call atan2_16 jsr atan2_16 - // [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 jmp b5 // init_angle_screen::@5 b5: - // [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - // [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [111] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _11 @@ -7909,61 +7944,93 @@ init_angle_screen: { bcc !+ inc _11+1 !: - // [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w - // [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [114] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 lda ang_w eor #$ff clc adc #1 - // [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y - // [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [116] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w - // [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y - // [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [118] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w - // [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_bottomline),y - // [126] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [127] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [100] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - b2_from_b5: - // [100] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [100] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp b2 + // init_angle_screen::@2 + b2: + // [122] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3_from_b2 + jmp b4 + // init_angle_screen::@4 + b4: + // [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [126] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b4 + jmp breturn + // init_angle_screen::@return + breturn: + // [127] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($20) x, signed word zeropage($22) y) +// atan2_16(signed word zeropage($22) x, signed word zeropage($24) y) atan2_16: { .label _2 = 5 .label _7 = 8 .label yi = 5 .label xi = 8 .label angle = $a - .label xd = $1c + .label xd = $e .label yd = $c .label return = $a - .label x = $20 - .label y = $22 + .label x = $22 + .label y = $24 // [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda y+1 bpl b1 @@ -8271,15 +8338,15 @@ atan2_16: { init_dist_screen: { .label screen = 8 .label screen_bottomline = $a - .label yds = $1c + .label yds = $20 .label screen_topline = 8 .label y = 7 - .label xds = $1e - .label ds = $1e - .label x = $1b - .label xb = $1a + .label xds = $22 + .label ds = $22 + .label x = $1f + .label xb = $1e // [172] call init_squares - // [243] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [244] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares jmp b11 @@ -8331,9 +8398,9 @@ init_dist_screen: { b4: // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 // [180] call sqr - // [239] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [240] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from_b4: - // [239] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [240] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // [181] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return @@ -8344,85 +8411,54 @@ init_dist_screen: { // init_dist_screen::@12 b12: // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [183] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - b5_from_b12: - // [183] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [183] phi from init_dist_screen::@12 to init_dist_screen::@6 [phi:init_dist_screen::@12->init_dist_screen::@6] + b6_from_b12: + // [183] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@6#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [183] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [183] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@6#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b5 - // init_dist_screen::@5 - b5: - // [184] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b6 - jmp b7 - // init_dist_screen::@7 - b7: - // [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - // [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - // [187] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 - inc y - // [188] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b7 - jmp breturn - // init_dist_screen::@return - breturn: - // [189] return - rts + jmp b6 + // [183] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6] + b6_from_b5: + // [183] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy + // [183] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy + jmp b6 // init_dist_screen::@6 b6: - // [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [191] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 + // [185] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 cmp #$27 bcs b8 jmp b9 // init_dist_screen::@9 b9: - // [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [193] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [187] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] b10_from_b8: b10_from_b9: - // [193] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [187] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy jmp b10 // init_dist_screen::@10 b10: - // [194] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [195] call sqr - // [239] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] + // [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [189] call sqr + // [240] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] sqr_from_b10: - // [239] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy + // [240] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr - // [196] (word) sqr::return#3 ← (word) sqr::return#0 + // [190] (word) sqr::return#3 ← (word) sqr::return#0 jmp b13 // init_dist_screen::@13 b13: - // [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - // [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 lda ds clc adc yds @@ -8430,35 +8466,67 @@ init_dist_screen: { lda ds+1 adc yds+1 sta ds+1 - // [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [200] call sqrt + // [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [194] call sqrt jsr sqrt - // [201] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 jmp b14 // init_dist_screen::@14 b14: - // [202] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - // [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y - // [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_bottomline),y - // [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y - // [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_bottomline),y - // [207] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 inc x - // [208] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 dec xb - // [183] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] - b5_from_b14: - // [183] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy - // [183] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy jmp b5 + // init_dist_screen::@5 + b5: + // [203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b6_from_b5 + jmp b7 + // init_dist_screen::@7 + b7: + // [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + // [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + // [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + inc y + // [207] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b7 + jmp breturn + // init_dist_screen::@return + breturn: + // [208] return + rts // init_dist_screen::@8 b8: // [209] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 @@ -8476,18 +8544,18 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($1e) val) +// sqrt(word zeropage($22) val) sqrt: { - .label _1 = $c - .label _3 = $c - .label found = $c - .label val = $1e + .label _1 = $e + .label _3 = $e + .label found = $e + .label val = $22 // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES - sta bsearch16u.items + sta bsearch16u.items_1 lda SQUARES+1 - sta bsearch16u.items+1 + sta bsearch16u.items_1+1 // [213] call bsearch16u // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: @@ -8522,29 +8590,105 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($1e) key, word* zeropage($c) items, byte register(X) num) +// bsearch16u(word zeropage($22) key, word* zeropage($e) items, byte register(X) num) bsearch16u: { - .label _2 = $c - .label pivot = $20 - .label result = $22 - .label return = $c - .label items = $c - .label key = $1e - // [221] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - b3_from_bsearch16u: - // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [221] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + .label _2 = $e + .label pivot = $e + .label result = $24 + .label return = $e + .label items = $e + .label key = $22 + .label items_1 = $c + .label items_10 = $c + .label items_16 = $c + // [221] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4] + b4_from_bsearch16u: + // [221] phi (word*) bsearch16u::items#10 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@4#0] -- register_copy + // [221] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES + jmp b4 + // bsearch16u::@4 + b4: + // [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + txa + lsr + // [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + asl + // [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + clc + adc items_10 + sta pivot + lda #0 + adc items_10+1 + sta pivot+1 + // [225] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + sec + lda key + ldy #0 + sbc (pivot),y + sta result + lda key+1 + iny + sbc (pivot),y + sta result+1 + // [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + lda result+1 + bne b6 + lda result + bne b6 + // [227] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return] + breturn_from_b2: + breturn_from_b4: + // [227] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy + jmp breturn + // bsearch16u::@return + breturn: + // [228] return + rts + // bsearch16u::@6 + b6: + // [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 + lda result+1 + bmi b10 + bne !+ + lda result + beq b10 + !: + jmp b8 + // bsearch16u::@8 + b8: + // [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + lda #1*SIZEOF_WORD + clc + adc items + sta items + bcc !+ + inc items+1 + !: + // [231] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuxx=_dec_vbuxx + dex + // [232] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7] + b7_from_b10: + b7_from_b8: + // [232] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#19 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy + // [232] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy + jmp b7 + // bsearch16u::@7 + b7: + // [233] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + txa + lsr + tax jmp b3 // bsearch16u::@3 b3: - // [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 + // [234] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuxx_gt_0_then_la1 cpx #0 - bne b4 + bne b9 jmp b5 // bsearch16u::@5 b5: - // [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [235] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp key+1 @@ -8558,7 +8702,7 @@ bsearch16u: { jmp b1 // bsearch16u::@1 b1: - // [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -8566,110 +8710,45 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [225] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [237] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] b2_from_b1: b2_from_b5: - // [225] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [237] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp b2 // bsearch16u::@2 b2: - // [226] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - breturn_from_b2: - breturn_from_b8: - // [226] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy - jmp breturn - // bsearch16u::@return - breturn: - // [227] return - rts - // bsearch16u::@4 - b4: - // [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 - txa - lsr - // [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 - asl - // [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa - clc - adc items - sta pivot - lda #0 - adc items+1 - sta pivot+1 - // [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 - sec - lda key - ldy #0 - sbc (pivot),y - sta result - lda key+1 - iny - sbc (pivot),y - sta result+1 - // [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 - lda result+1 - bne b6 - lda result - bne b6 - jmp b8 - // bsearch16u::@8 - b8: - // [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 - lda pivot - sta return - lda pivot+1 - sta return+1 - jmp breturn_from_b8 - // bsearch16u::@6 - b6: - // [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 - lda result+1 - bmi b7_from_b6 - bne !+ - lda result - beq b7_from_b6 - !: - jmp b9 + jmp breturn_from_b2 // bsearch16u::@9 b9: - // [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 - lda #1*SIZEOF_WORD - clc - adc pivot + // [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 + lda items + sta items_16 + lda items+1 + sta items_16+1 + // [221] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4] + b4_from_b9: + // [221] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy + // [221] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy + jmp b4 + // bsearch16u::@10 + b10: + // [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 + lda items_10 sta items - lda #0 - adc pivot+1 + lda items_10+1 sta items+1 - // [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx - dex - // [237] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - b7_from_b6: - b7_from_b9: - // [237] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [237] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy - jmp b7 - // bsearch16u::@7 - b7: - // [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 - txa - lsr - tax - // [221] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - b3_from_b7: - // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [221] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy - jmp b3 + jmp b7_from_b10 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $1e - .label return_2 = $1c - // [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 + .label return = $22 + .label return_2 = $20 + // [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa + // [242] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (SQUARES),y sta return @@ -8679,16 +8758,16 @@ sqr: { jmp breturn // sqr::@return breturn: - // [242] return + // [243] return rts } // init_squares // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label squares = $14 - .label sqr = $1c - // [244] call malloc + .label squares = $1a + .label sqr = $18 + // [245] call malloc // [93] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: // [93] phi (word) malloc::size#7 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 @@ -8701,39 +8780,39 @@ init_squares: { jmp b2 // init_squares::@2 b2: - // [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - // [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + // [247] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta squares lda SQUARES+1 sta squares+1 - // [247] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [248] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] b1_from_b2: - // [247] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 + // [248] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 - // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [247] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [248] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [248] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 lda #<0 sta sqr lda #>0 sta sqr+1 jmp b1 - // [247] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [248] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] b1_from_b1: - // [247] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [247] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [248] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [248] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [248] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy jmp b1 // init_squares::@1 b1: - // [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y iny lda sqr+1 sta (squares),y - // [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -8741,28 +8820,28 @@ init_squares: { bcc !+ inc squares+1 !: - // [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 - // [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa + // [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa clc adc sqr sta sqr bcc !+ inc sqr+1 !: - // [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx + // [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx - // [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 + // [255] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #NUM_SQUARES-1+1 bne b1_from_b1 jmp breturn // init_squares::@return breturn: - // [255] return + // [256] return rts } // File Data @@ -8806,10 +8885,11 @@ Removing instruction jmp b7 Removing instruction jmp breturn Removing instruction jmp breturn Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b4 Removing instruction jmp breturn -Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp b5 @@ -8832,24 +8912,25 @@ Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b4 Removing instruction jmp b12 -Removing instruction jmp b5 -Removing instruction jmp b7 -Removing instruction jmp breturn +Removing instruction jmp b6 Removing instruction jmp b9 Removing instruction jmp b10 Removing instruction jmp b13 Removing instruction jmp b14 +Removing instruction jmp b5 +Removing instruction jmp b7 +Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn +Removing instruction jmp b4 +Removing instruction jmp breturn +Removing instruction jmp b8 +Removing instruction jmp b7 Removing instruction jmp b3 Removing instruction jmp b5 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp breturn -Removing instruction jmp b8 -Removing instruction jmp b9 -Removing instruction jmp b7 -Removing instruction jmp breturn Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn @@ -8886,6 +8967,7 @@ Replacing label b4_from_b8 with b4 Replacing label b5_from_b5 with b5 Replacing label b7_from_b7 with b7 Replacing label b7_from_b7 with b7 +Replacing label b3_from_b2 with b3 Replacing label b1_from_b4 with b1 Replacing label b7_from_b12 with b7 Replacing label b8_from_b7 with b8 @@ -8895,14 +8977,14 @@ Replacing label b19_from_b18 with b19 Replacing label b13_from_b14 with b13 Replacing label b6_from_b4 with b6 Replacing label b3_from_b1 with b3 +Replacing label b6_from_b5 with b6 Replacing label b1_from_b7 with b1 Replacing label b10_from_b8 with b10 Replacing label b4_from_b2 with b4 Replacing label b2_from_b5 with b2 Replacing label b2_from_b5 with b2 -Replacing label breturn_from_b8 with b2 -Replacing label b7_from_b6 with b7 -Replacing label b7_from_b6 with b7 +Replacing label breturn_from_b2 with breturn +Replacing label b7_from_b10 with b7 Replacing label b1_from_b1 with b1 Removing instruction b1_from_bbegin: Removing instruction b1: @@ -8923,7 +9005,8 @@ Removing instruction b4_from_b8: Removing instruction b5_from_b5: Removing instruction b7_from_b7: Removing instruction b1_from_b4: -Removing instruction b2_from_b1: +Removing instruction b3_from_b1: +Removing instruction b3_from_b2: Removing instruction b3_from_b1: Removing instruction b3_from_b2: Removing instruction b6_from_b4: @@ -8946,17 +9029,17 @@ Removing instruction b1_from_b7: Removing instruction b4_from_b2: Removing instruction b4_from_b3: Removing instruction sqr_from_b4: -Removing instruction b5_from_b12: +Removing instruction b6_from_b12: +Removing instruction b6_from_b5: Removing instruction b10_from_b8: Removing instruction b10_from_b9: Removing instruction sqr_from_b10: +Removing instruction breturn_from_b2: +Removing instruction breturn_from_b4: +Removing instruction b7_from_b10: +Removing instruction b7_from_b8: Removing instruction b2_from_b1: Removing instruction b2_from_b5: -Removing instruction breturn_from_b2: -Removing instruction breturn_from_b8: -Removing instruction breturn: -Removing instruction b7_from_b6: -Removing instruction b7_from_b9: Removing instruction b1_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction b4: @@ -8994,10 +9077,10 @@ Removing instruction b7_from_b6: Removing instruction breturn: Removing instruction breturn: Removing instruction b1_from_init_angle_screen: +Removing instruction b5: +Removing instruction b2: Removing instruction b4: Removing instruction breturn: -Removing instruction b5: -Removing instruction b2_from_b5: Removing instruction b2: Removing instruction b5: Removing instruction b21: @@ -9011,21 +9094,21 @@ Removing instruction b11: Removing instruction b1_from_b11: Removing instruction b3: Removing instruction b12: -Removing instruction b7: -Removing instruction breturn: Removing instruction b9: Removing instruction b13: Removing instruction b14: -Removing instruction b5_from_b14: +Removing instruction b5: +Removing instruction b7: +Removing instruction breturn: Removing instruction bsearch16u_from_sqrt: Removing instruction b1: Removing instruction breturn: -Removing instruction b3_from_bsearch16u: +Removing instruction b4_from_bsearch16u: +Removing instruction b8: +Removing instruction b3: Removing instruction b5: Removing instruction b1: -Removing instruction b8: -Removing instruction b9: -Removing instruction b3_from_b7: +Removing instruction b4_from_b9: Removing instruction breturn: Removing instruction malloc_from_init_squares: Removing instruction b2: @@ -9033,7 +9116,9 @@ Removing instruction b1_from_b2: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination Skipping double jump to b2 in jmp b1_from_b12 -Replacing jump to rts with rts in jmp b2 +Skipping double jump to breturn in beq b2 +Skipping double jump to breturn in bcc b2 +Replacing jump to rts with rts in jmp breturn Succesful ASM optimization Pass5DoubleJumpElimination Relabelling long label b1_from_b12 to b1 Succesful ASM optimization Pass5RelabelLongLabels @@ -9045,16 +9130,19 @@ Removing instruction jmp b4 Removing instruction jmp b5 Removing instruction jmp b7 Removing instruction jmp b1 +Removing instruction jmp b3 Removing instruction jmp b1 +Removing instruction jmp b6 Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction b1: +Removing instruction b2: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [654] beq b12 to bne -Fixing long branch [548] bpl b1 to bmi -Fixing long branch [560] bpl b4 to bmi +Fixing long branch [652] beq b12 to bne +Fixing long branch [546] bpl b1 to bmi +Fixing long branch [558] bpl b4 to bmi FINAL SYMBOL TABLE (label) @1 @@ -9070,11 +9158,11 @@ FINAL SYMBOL TABLE (byte*) BORDERCOL (const byte*) BORDERCOL#0 BORDERCOL = (byte*) 53280 (word*[]) BUCKETS -(void*) BUCKETS#0 BUCKETS zp ZP_WORD:18 0.02531645569620253 +(void*) BUCKETS#0 BUCKETS zp ZP_WORD:20 0.02531645569620253 (byte[]) BUCKET_IDX -(void*) BUCKET_IDX#0 BUCKET_IDX zp ZP_WORD:24 0.0425531914893617 +(void*) BUCKET_IDX#0 BUCKET_IDX zp ZP_WORD:22 0.0425531914893617 (byte[]) BUCKET_SIZES -(void*) BUCKET_SIZES#0 BUCKET_SIZES zp ZP_WORD:16 0.024691358024691357 +(void*) BUCKET_SIZES#0 BUCKET_SIZES zp ZP_WORD:18 0.024691358024691357 (byte*) COLS (const byte*) COLS#0 COLS = (byte*) 55296 (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16 @@ -9098,9 +9186,9 @@ FINAL SYMBOL TABLE (byte*) RASTER (const byte*) RASTER#0 RASTER = (byte*) 53266 (byte[]) SCREEN_ANGLE -(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:14 0.045454545454545456 +(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:16 0.045454545454545456 (byte[]) SCREEN_DIST -(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:22 0.125 +(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:28 0.125 (byte*) SCREEN_FILL (const byte*) SCREEN_FILL#0 SCREEN_FILL = (byte*) 1024 (const byte) SIZEOF_BYTE SIZEOF_BYTE = (byte) 1 @@ -9156,13 +9244,13 @@ FINAL SYMBOL TABLE (byte) atan2_16::shift#2 reg byte y 8001.25 (byte~) atan2_16::shift#5 reg byte y 667.3333333333334 (signed word) atan2_16::x -(signed word) atan2_16::x#0 x zp ZP_WORD:32 2.8684210526315796 +(signed word) atan2_16::x#0 x zp ZP_WORD:34 2.8684210526315796 (signed word) atan2_16::xd -(signed word) atan2_16::xd#1 xd zp ZP_WORD:28 6667.333333333333 -(signed word~) atan2_16::xd#10 xd zp ZP_WORD:28 1001.0 -(signed word) atan2_16::xd#2 xd zp ZP_WORD:28 1001.0 -(signed word) atan2_16::xd#3 xd zp ZP_WORD:28 7668.333333333332 -(signed word) atan2_16::xd#5 xd zp ZP_WORD:28 1001.0 +(signed word) atan2_16::xd#1 xd zp ZP_WORD:14 6667.333333333333 +(signed word~) atan2_16::xd#10 xd zp ZP_WORD:14 1001.0 +(signed word) atan2_16::xd#2 xd zp ZP_WORD:14 1001.0 +(signed word) atan2_16::xd#3 xd zp ZP_WORD:14 7668.333333333332 +(signed word) atan2_16::xd#5 xd zp ZP_WORD:14 1001.0 (signed word) atan2_16::xi (signed word) atan2_16::xi#0 xi zp ZP_WORD:8 6.0 (signed word) atan2_16::xi#1 xi zp ZP_WORD:8 500.5 @@ -9171,7 +9259,7 @@ FINAL SYMBOL TABLE (signed word) atan2_16::xi#3 xi zp ZP_WORD:8 267.0666666666667 (signed word) atan2_16::xi#8 xi zp ZP_WORD:8 1001.0 (signed word) atan2_16::y -(signed word) atan2_16::y#0 y zp ZP_WORD:34 2.724999999999999 +(signed word) atan2_16::y#0 y zp ZP_WORD:36 2.724999999999999 (signed word) atan2_16::yd (signed word) atan2_16::yd#1 yd zp ZP_WORD:12 10001.0 (signed word~) atan2_16::yd#10 yd zp ZP_WORD:12 2002.0 @@ -9187,9 +9275,10 @@ FINAL SYMBOL TABLE (signed word) atan2_16::yi#8 yi zp ZP_WORD:5 1001.0 (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) (byte~) bsearch16u::$16 reg byte a 2002.0 -(word*~) bsearch16u::$2 $2 zp ZP_WORD:12 4.0 +(word*~) bsearch16u::$2 $2 zp ZP_WORD:14 4.0 (byte~) bsearch16u::$6 reg byte a 2002.0 (label) bsearch16u::@1 +(label) bsearch16u::@10 (label) bsearch16u::@2 (label) bsearch16u::@3 (label) bsearch16u::@4 @@ -9200,26 +9289,27 @@ FINAL SYMBOL TABLE (label) bsearch16u::@9 (label) bsearch16u::@return (word*) bsearch16u::items -(word*) bsearch16u::items#0 items zp ZP_WORD:12 1001.0 -(word*) bsearch16u::items#1 items zp ZP_WORD:12 2.0 -(word*) bsearch16u::items#2 items zp ZP_WORD:12 334.5555555555556 -(word*) bsearch16u::items#8 items zp ZP_WORD:12 1501.5 +(word*) bsearch16u::items#0 items zp ZP_WORD:14 1001.0 +(word*) bsearch16u::items#1 items#1 zp ZP_WORD:12 2.0 +(word*) bsearch16u::items#10 items#10 zp ZP_WORD:12 429.2857142857143 +(word*) bsearch16u::items#11 items zp ZP_WORD:14 752.25 +(word*~) bsearch16u::items#16 items#16 zp ZP_WORD:12 2002.0 +(word*~) bsearch16u::items#19 items zp ZP_WORD:14 2002.0 (word) bsearch16u::key -(word) bsearch16u::key#0 key zp ZP_WORD:30 0.26666666666666666 +(word) bsearch16u::key#0 key zp ZP_WORD:34 0.23529411764705882 (byte) bsearch16u::num -(byte) bsearch16u::num#0 reg byte x 2002.0 +(byte) bsearch16u::num#0 reg byte x 1001.0 (byte) bsearch16u::num#1 reg byte x 2002.0 -(byte) bsearch16u::num#3 reg byte x 556.1111111111111 +(byte) bsearch16u::num#10 reg byte x 444.8888888888889 (byte) bsearch16u::num#5 reg byte x 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:32 501.0 +(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:14 750.75 (signed word) bsearch16u::result -(signed word) bsearch16u::result#0 result zp ZP_WORD:34 1501.5 +(signed word) bsearch16u::result#0 result zp ZP_WORD:36 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 return zp ZP_WORD:12 2.0 -(word*) bsearch16u::return#2 return zp ZP_WORD:12 6.0 -(word*) bsearch16u::return#3 return zp ZP_WORD:12 4.0 -(word*~) bsearch16u::return#6 return zp ZP_WORD:12 4.0 +(word*) bsearch16u::return#1 return zp ZP_WORD:14 335.00000000000006 +(word*) bsearch16u::return#2 return zp ZP_WORD:14 6.0 +(word*) bsearch16u::return#3 return zp ZP_WORD:14 4.0 (byte*) heap_head (byte*) heap_head#1 heap_head zp ZP_WORD:2 0.2446808510638298 (byte*) heap_head#18 heap_head zp ZP_WORD:2 23.0 @@ -9238,42 +9328,42 @@ FINAL SYMBOL TABLE (label) init_angle_screen::@5 (label) init_angle_screen::@return (byte) init_angle_screen::ang_w -(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:27 84.16666666666666 +(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:31 84.16666666666666 (word) init_angle_screen::angle_w (word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:10 202.0 (byte*) init_angle_screen::screen -(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:30 3.0 +(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:26 3.0 (byte*) init_angle_screen::screen_bottomline -(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:30 4.0 -(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:30 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:30 9.04 +(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:26 4.0 +(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:26 7.333333333333333 +(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:26 9.040000000000001 (byte*) init_angle_screen::screen_topline -(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:20 2.0 -(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:20 5.5 -(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:20 9.416666666666666 +(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:24 2.0 +(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:24 5.5 +(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:24 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 x zp ZP_BYTE:4 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:4 28.857142857142858 +(byte) init_angle_screen::x#5 x zp ZP_BYTE:4 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:7 202.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:7 18.363636363636363 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:7 101.0 +(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:7 19.238095238095237 (signed word) init_angle_screen::xw -(word) init_angle_screen::xw#0 xw zp ZP_WORD:32 33.666666666666664 +(word) init_angle_screen::xw#0 xw zp ZP_WORD:34 33.666666666666664 (byte) init_angle_screen::y -(byte) init_angle_screen::y#1 y zp ZP_BYTE:26 16.5 -(byte) init_angle_screen::y#5 y zp ZP_BYTE:26 4.730769230769231 +(byte) init_angle_screen::y#1 y zp ZP_BYTE:30 16.5 +(byte) init_angle_screen::y#5 y zp ZP_BYTE:30 4.730769230769231 (signed word) init_angle_screen::yw -(word) init_angle_screen::yw#0 yw zp ZP_WORD:34 50.5 +(word) init_angle_screen::yw#0 yw zp ZP_WORD:36 50.5 (void()) init_buckets((byte*) init_buckets::screen) -(word~) init_buckets::$10 $10 zp ZP_WORD:28 11.0 -(word~) init_buckets::$12 $12 zp ZP_WORD:32 22.0 -(word~) init_buckets::$13 $13 zp ZP_WORD:34 22.0 +(word~) init_buckets::$10 $10 zp ZP_WORD:32 11.0 +(word~) init_buckets::$12 $12 zp ZP_WORD:34 22.0 +(word~) init_buckets::$13 $13 zp ZP_WORD:36 22.0 (byte~) init_buckets::$14 reg byte a 22.0 (byte*~) init_buckets::$15 $15 zp ZP_WORD:5 22.0 -(word**~) init_buckets::$16 $16 zp ZP_WORD:32 22.0 -(word**~) init_buckets::$17 $17 zp ZP_WORD:34 22.0 +(word**~) init_buckets::$16 $16 zp ZP_WORD:34 22.0 +(word**~) init_buckets::$17 $17 zp ZP_WORD:36 22.0 (void*~) init_buckets::$5 $5 zp ZP_WORD:5 3.6666666666666665 -(word~) init_buckets::$9 $9 zp ZP_WORD:34 22.0 +(word~) init_buckets::$9 $9 zp ZP_WORD:36 22.0 (label) init_buckets::@1 (label) init_buckets::@2 (label) init_buckets::@3 @@ -9284,7 +9374,7 @@ FINAL SYMBOL TABLE (label) init_buckets::@8 (label) init_buckets::@return (word*) init_buckets::bucket -(word*) init_buckets::bucket#0 bucket zp ZP_WORD:34 7.333333333333333 +(word*) init_buckets::bucket#0 bucket zp ZP_WORD:36 7.333333333333333 (byte*) init_buckets::dist (byte*) init_buckets::dist#1 dist zp ZP_WORD:8 7.333333333333333 (byte*) init_buckets::dist#3 dist#3 zp ZP_WORD:2 7.333333333333333 @@ -9293,7 +9383,7 @@ FINAL SYMBOL TABLE (byte*~) init_buckets::dist#6 dist zp ZP_WORD:8 4.0 (byte*~) init_buckets::dist#8 dist#8 zp ZP_WORD:2 4.0 (byte) init_buckets::distance -(byte) init_buckets::distance#0 distance zp ZP_BYTE:26 5.5 +(byte) init_buckets::distance#0 distance zp ZP_BYTE:30 5.5 (byte) init_buckets::i (byte) init_buckets::i#1 reg byte y 16.5 (byte) init_buckets::i#2 reg byte y 16.5 @@ -9301,16 +9391,16 @@ FINAL SYMBOL TABLE (word) init_buckets::i1#1 i1 zp ZP_WORD:10 16.5 (word) init_buckets::i1#2 i1 zp ZP_WORD:10 7.333333333333333 (word) init_buckets::i2 -(word) init_buckets::i2#1 i2 zp ZP_WORD:20 16.5 -(word) init_buckets::i2#2 i2 zp ZP_WORD:20 5.5 +(word) init_buckets::i2#1 i2 zp ZP_WORD:24 16.5 +(word) init_buckets::i2#2 i2 zp ZP_WORD:24 5.5 (byte) init_buckets::i3 (byte) init_buckets::i3#1 reg byte y 16.5 (byte) init_buckets::i3#2 reg byte y 16.5 (word) init_buckets::i4 -(word) init_buckets::i4#1 i4 zp ZP_WORD:30 16.5 -(word) init_buckets::i4#2 i4 zp ZP_WORD:30 2.0 +(word) init_buckets::i4#1 i4 zp ZP_WORD:26 16.5 +(word) init_buckets::i4#2 i4 zp ZP_WORD:26 2.0 (byte*) init_buckets::screen -(byte*) init_buckets::screen#0 screen zp ZP_WORD:22 0.42500000000000004 +(byte*) init_buckets::screen#0 screen zp ZP_WORD:28 0.42500000000000004 (void()) init_dist_screen((byte*) init_dist_screen::screen) (byte~) init_dist_screen::$14 reg byte a 202.0 (byte~) init_dist_screen::$16 reg byte a 202.0 @@ -9334,7 +9424,7 @@ FINAL SYMBOL TABLE (byte) init_dist_screen::d (byte) init_dist_screen::d#0 reg byte a 126.25 (word) init_dist_screen::ds -(word) init_dist_screen::ds#0 ds zp ZP_WORD:30 202.0 +(word) init_dist_screen::ds#0 ds zp ZP_WORD:34 202.0 (byte*) init_dist_screen::screen (byte*) init_dist_screen::screen#0 screen zp ZP_WORD:8 1.5 (byte*) init_dist_screen::screen_bottomline @@ -9345,17 +9435,17 @@ FINAL SYMBOL TABLE (byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:8 5.5 (byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:8 7.0625 (byte) init_dist_screen::x -(byte) init_dist_screen::x#1 x zp ZP_BYTE:27 101.0 -(byte) init_dist_screen::x#2 x zp ZP_BYTE:27 30.3 +(byte) init_dist_screen::x#1 x zp ZP_BYTE:31 101.0 +(byte) init_dist_screen::x#10 x zp ZP_BYTE:31 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 reg byte a 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:26 202.0 -(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:26 19.238095238095237 +(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:30 101.0 +(byte) init_dist_screen::xb#10 xb zp ZP_BYTE:30 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 reg byte a 303.0 (word) init_dist_screen::xds -(word) init_dist_screen::xds#0 xds zp ZP_WORD:30 202.0 +(word) init_dist_screen::xds#0 xds zp ZP_WORD:34 202.0 (byte) init_dist_screen::y (byte) init_dist_screen::y#1 y zp ZP_BYTE:7 16.5 (byte) init_dist_screen::y#10 y zp ZP_BYTE:7 0.9705882352941178 @@ -9364,7 +9454,7 @@ FINAL SYMBOL TABLE (byte) init_dist_screen::yd (byte) init_dist_screen::yd#0 reg byte a 33.0 (word) init_dist_screen::yds -(word) init_dist_screen::yds#0 yds zp ZP_WORD:28 4.869565217391305 +(word) init_dist_screen::yds#0 yds zp ZP_WORD:32 4.869565217391305 (void()) init_squares() (byte~) init_squares::$3 reg byte a 22.0 (byte~) init_squares::$4 reg byte a 22.0 @@ -9375,12 +9465,12 @@ FINAL SYMBOL TABLE (byte) init_squares::i#1 reg byte x 16.5 (byte) init_squares::i#2 reg byte x 5.5 (word) init_squares::sqr -(word) init_squares::sqr#1 sqr zp ZP_WORD:28 7.333333333333333 -(word) init_squares::sqr#2 sqr zp ZP_WORD:28 6.6000000000000005 +(word) init_squares::sqr#1 sqr zp ZP_WORD:24 7.333333333333333 +(word) init_squares::sqr#2 sqr zp ZP_WORD:24 6.6000000000000005 (word*) init_squares::squares -(word*) init_squares::squares#0 squares zp ZP_WORD:20 4.0 -(word*) init_squares::squares#1 squares zp ZP_WORD:20 3.6666666666666665 -(word*) init_squares::squares#2 squares zp ZP_WORD:20 17.5 +(word*) init_squares::squares#0 squares zp ZP_WORD:26 4.0 +(word*) init_squares::squares#1 squares zp ZP_WORD:26 3.6666666666666665 +(word*) init_squares::squares#2 squares zp ZP_WORD:26 17.5 (void()) main() (byte~) main::$21 reg byte a 22.0 (byte~) main::$22 reg byte a 202.0 @@ -9403,16 +9493,16 @@ FINAL SYMBOL TABLE (label) main::@8 (label) main::@9 (byte*) main::angle -(byte*) main::angle#0 angle zp ZP_WORD:24 151.5 +(byte*) main::angle#0 angle zp ZP_WORD:28 151.5 (word[]) main::bucket -(word[]) main::bucket#0 bucket zp ZP_WORD:20 6.588235294117648 +(word[]) main::bucket#0 bucket zp ZP_WORD:24 6.588235294117648 (byte) main::bucket_idx -(byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:26 11.0 -(byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:26 2.64 +(byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:30 11.0 +(byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:30 2.64 (byte) main::bucket_size -(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:27 7.6875 +(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:31 7.6875 (byte*) main::fill -(byte*) main::fill#0 fill zp ZP_WORD:22 202.0 +(byte*) main::fill#0 fill zp ZP_WORD:26 202.0 (byte*) main::fill1 (byte*) main::fill1#0 fill1 zp ZP_WORD:8 22.0 (byte) main::i @@ -9442,81 +9532,82 @@ FINAL SYMBOL TABLE (byte~) sqr::$0 reg byte a 4.0 (label) sqr::@return (word) sqr::return -(word) sqr::return#0 return zp ZP_WORD:30 28.5 -(word) sqr::return#2 return#2 zp ZP_WORD:28 22.0 -(word) sqr::return#3 return zp ZP_WORD:30 202.0 +(word) sqr::return#0 return zp ZP_WORD:34 28.5 +(word) sqr::return#2 return#2 zp ZP_WORD:32 22.0 +(word) sqr::return#3 return zp ZP_WORD:34 202.0 (byte) sqr::val (byte) sqr::val#0 reg byte a 22.0 (byte) sqr::val#1 reg byte a 202.0 (byte) sqr::val#2 reg byte a 114.0 (byte()) sqrt((word) sqrt::val) -(word~) sqrt::$1 $1 zp ZP_WORD:12 2.0 -(word~) sqrt::$3 $3 zp ZP_WORD:12 4.0 +(word~) sqrt::$1 $1 zp ZP_WORD:14 2.0 +(word~) sqrt::$3 $3 zp ZP_WORD:14 4.0 (label) sqrt::@1 (label) sqrt::@return (word*) sqrt::found -(word*) sqrt::found#0 found zp ZP_WORD:12 4.0 +(word*) sqrt::found#0 found zp ZP_WORD:14 4.0 (byte) sqrt::return (byte) sqrt::return#0 reg byte a 34.33333333333333 (byte) sqrt::return#2 reg byte a 202.0 (byte) sqrt::sq (word) sqrt::val -(word) sqrt::val#0 val zp ZP_WORD:30 103.0 +(word) sqrt::val#0 val zp ZP_WORD:34 103.0 reg byte x [ main::i#2 main::i#1 ] reg byte y [ init_buckets::i#2 init_buckets::i#1 ] reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ] zp ZP_WORD:2 [ heap_head#18 heap_head#1 init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] -zp ZP_BYTE:4 [ init_angle_screen::x#2 init_angle_screen::x#1 main::min_angle#2 main::min_angle#5 main::min_angle#1 ] +zp ZP_BYTE:4 [ init_angle_screen::x#5 init_angle_screen::x#1 main::min_angle#2 main::min_angle#5 main::min_angle#1 ] zp ZP_WORD:5 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -zp ZP_BYTE:7 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ] +zp ZP_BYTE:7 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ] zp ZP_WORD:8 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 main::min_offset#2 main::min_offset#8 main::fill1#0 ] zp ZP_WORD:10 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 init_buckets::i1#2 init_buckets::i1#1 main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -zp ZP_WORD:12 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +zp ZP_WORD:12 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] +zp ZP_WORD:14 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] -zp ZP_WORD:14 [ SCREEN_ANGLE#0 ] -zp ZP_WORD:16 [ BUCKET_SIZES#0 ] -zp ZP_WORD:18 [ BUCKETS#0 ] +zp ZP_WORD:16 [ SCREEN_ANGLE#0 ] +zp ZP_WORD:18 [ BUCKET_SIZES#0 ] +zp ZP_WORD:20 [ BUCKETS#0 ] +zp ZP_WORD:22 [ BUCKET_IDX#0 ] reg byte a [ main::$21 ] -zp ZP_WORD:20 [ main::bucket#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 init_buckets::i2#2 init_buckets::i2#1 ] +zp ZP_WORD:24 [ main::bucket#0 init_squares::sqr#2 init_squares::sqr#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 init_buckets::i2#2 init_buckets::i2#1 ] reg byte a [ main::$22 ] -zp ZP_WORD:22 [ main::fill#0 SCREEN_DIST#0 init_buckets::screen#0 ] -zp ZP_WORD:24 [ main::angle#0 BUCKET_IDX#0 ] -zp ZP_BYTE:26 [ init_buckets::distance#0 init_dist_screen::xb#2 init_dist_screen::xb#1 init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ] +zp ZP_WORD:26 [ main::fill#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_buckets::i4#2 init_buckets::i4#1 ] +zp ZP_WORD:28 [ main::angle#0 SCREEN_DIST#0 init_buckets::screen#0 ] +zp ZP_BYTE:30 [ init_buckets::distance#0 init_dist_screen::xb#10 init_dist_screen::xb#1 init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ] reg byte a [ init_buckets::$14 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] -zp ZP_BYTE:27 [ init_angle_screen::ang_w#0 main::bucket_size#0 init_dist_screen::x#2 init_dist_screen::x#1 ] +zp ZP_BYTE:31 [ init_angle_screen::ang_w#0 main::bucket_size#0 init_dist_screen::x#10 init_dist_screen::x#1 ] reg byte a [ init_angle_screen::$13 ] reg byte a [ init_angle_screen::$14 ] reg byte a [ init_angle_screen::$15 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte a [ init_dist_screen::y2#0 ] -zp ZP_WORD:28 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$10 init_squares::sqr#2 init_squares::sqr#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +zp ZP_WORD:32 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$10 ] reg byte a [ init_dist_screen::x2#0 ] -zp ZP_WORD:30 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_buckets::i4#2 init_buckets::i4#1 ] +zp ZP_WORD:34 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ] reg byte a [ sqrt::return#2 ] reg byte a [ init_dist_screen::d#0 ] reg byte a [ sqrt::return#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] -zp ZP_WORD:32 [ bsearch16u::pivot#0 init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ] -zp ZP_WORD:34 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] +zp ZP_WORD:36 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] reg byte a [ sqr::$0 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] FINAL ASSEMBLER -Score: 1116684 +Score: 1142626 // File Comments // Fill screen using a spiral based on distance-to-center / angle-to-center @@ -9547,17 +9638,17 @@ Score: 1116684 .label heap_head = 2 .label SQUARES = 5 // Screen containing distance to center - .label SCREEN_DIST = $16 + .label SCREEN_DIST = $1c // Screen containing angle to center - .label SCREEN_ANGLE = $e + .label SCREEN_ANGLE = $10 // Array containing the bucket size for each of the distance buckets - .label BUCKET_SIZES = $10 + .label BUCKET_SIZES = $12 // Buckets containing screen indices for each distance from the center. // BUCKETS[dist] is an array of words containing screen indices. // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist] - .label BUCKETS = $12 + .label BUCKETS = $14 // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes) - .label BUCKET_IDX = $18 + .label BUCKET_IDX = $16 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -9661,12 +9752,12 @@ bbegin: // @end // main main: { - .label bucket = $14 - .label bucket_size = $1b - .label bucket_idx = $1a + .label bucket = $18 + .label bucket_size = $1f + .label bucket_idx = $1e .label offset = $a - .label fill = $16 - .label angle = $18 + .label fill = $1a + .label angle = $1c .label min_angle = 4 .label fill1 = 8 .label min_offset = 8 @@ -9898,25 +9989,25 @@ main: { } // init_buckets // Initialize buckets containing indices of chars on the screen with specific distances to the center. -// init_buckets(byte* zeropage($16) screen) +// init_buckets(byte* zeropage($1c) screen) init_buckets: { .label _5 = 5 - .label _9 = $22 - .label _10 = $1c - .label _12 = $20 - .label _13 = $22 - .label screen = $16 + .label _9 = $24 + .label _10 = $20 + .label _12 = $22 + .label _13 = $24 + .label screen = $1c .label dist = 8 .label i1 = $a - .label i2 = $14 - .label distance = $1a - .label bucket = $22 + .label i2 = $18 + .label distance = $1e + .label bucket = $24 .label dist_3 = 2 - .label i4 = $1e + .label i4 = $1a .label dist_5 = 2 .label _15 = 5 - .label _16 = $20 - .label _17 = $22 + .label _16 = $22 + .label _17 = $24 .label dist_8 = 2 // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] // [54] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1 @@ -10199,19 +10290,19 @@ malloc: { // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center -// init_angle_screen(byte* zeropage($1e) screen) +// init_angle_screen(byte* zeropage($1a) screen) init_angle_screen: { .label _11 = $a - .label screen = $1e - .label screen_topline = $14 - .label screen_bottomline = $1e - .label xw = $20 - .label yw = $22 + .label screen = $1a + .label screen_topline = $18 + .label screen_bottomline = $1a + .label xw = $22 + .label yw = $24 .label angle_w = $a - .label ang_w = $1b + .label ang_w = $1f .label x = 4 .label xb = 7 - .label y = $1a + .label y = $1e // screen_topline = screen+40*12 // [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda screen @@ -10242,85 +10333,51 @@ init_angle_screen: { // [99] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy // init_angle_screen::@1 b1: - // [100] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - // [100] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [100] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + // [100] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [100] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [100] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - // init_angle_screen::@2 - b2: - // for( byte x=0,xb=39; x<=19; x++, xb--) - // [101] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - // init_angle_screen::@4 - // screen_topline -= 40 - // [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // screen_bottomline += 40 - // [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // for(byte y: 0..12) - // [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1 - // init_angle_screen::@return - // } - // [106] return - rts + // [100] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + // [100] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [100] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy // init_angle_screen::@3 b3: // x*2 - // [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // 39-x*2 - // [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [102] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // (word){ 39-x*2, 0 } - // [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw // y*2 - // [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [104] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl // (word){ y*2, 0 } - // [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 sta yw+1 sty yw // atan2_16(xw, yw) - // [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [114] call atan2_16 + // [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [108] call atan2_16 jsr atan2_16 - // [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 // init_angle_screen::@5 // angle_w = atan2_16(xw, yw) - // [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 // angle_w+0x0080 - // [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [111] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _11 @@ -10329,64 +10386,95 @@ init_angle_screen: { inc _11+1 !: // ang_w = >(angle_w+0x0080) - // [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w // screen_bottomline[xb] = ang_w - // [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 ldy xb sta (screen_bottomline),y // -ang_w - // [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [114] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 eor #$ff clc adc #1 // screen_topline[xb] = -ang_w - // [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_topline),y // 0x80+ang_w - // [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [116] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w // screen_topline[x] = 0x80+ang_w - // [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y // 0x80-ang_w - // [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [118] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w // screen_bottomline[x] = 0x80-ang_w - // [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [126] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [127] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [100] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - // [100] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [100] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy - jmp b2 + // init_angle_screen::@2 + // [122] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3 + // init_angle_screen::@4 + // screen_topline -= 40 + // [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // screen_bottomline += 40 + // [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // for(byte y: 0..12) + // [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [126] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1 + // init_angle_screen::@return + // } + // [127] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($20) x, signed word zeropage($22) y) +// atan2_16(signed word zeropage($22) x, signed word zeropage($24) y) atan2_16: { .label _2 = 5 .label _7 = 8 .label yi = 5 .label xi = 8 .label angle = $a - .label xd = $1c + .label xd = $e .label yd = $c .label return = $a - .label x = $20 - .label y = $22 + .label x = $22 + .label y = $24 // (y>=0)?y:-y // [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda y+1 @@ -10680,16 +10768,16 @@ atan2_16: { init_dist_screen: { .label screen = 8 .label screen_bottomline = $a - .label yds = $1c + .label yds = $20 .label screen_topline = 8 .label y = 7 - .label xds = $1e - .label ds = $1e - .label x = $1b - .label xb = $1a + .label xds = $22 + .label ds = $22 + .label x = $1f + .label xb = $1e // init_squares() // [172] call init_squares - // [243] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [244] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] jsr init_squares // init_dist_screen::@11 // screen_bottomline = screen+40*24 @@ -10733,8 +10821,8 @@ init_dist_screen: { // sqr(yd) // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 // [180] call sqr - // [239] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] - // [239] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [240] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [240] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // sqr(yd) // [181] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 @@ -10745,82 +10833,48 @@ init_dist_screen: { // init_dist_screen::@12 // yds = sqr(yd) // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [183] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - // [183] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [183] phi from init_dist_screen::@12 to init_dist_screen::@6 [phi:init_dist_screen::@12->init_dist_screen::@6] + // [183] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@6#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [183] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [183] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@6#1] -- vbuz1=vbuc1 lda #0 sta x - // init_dist_screen::@5 - b5: - // for( byte x=0,xb=39; x<=19; x++, xb--) - // [184] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b6 - // init_dist_screen::@7 - // screen_topline += 40 - // [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - // screen_bottomline -= 40 - // [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - // for(byte y: 0..12) - // [187] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 - inc y - // [188] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1 - // init_dist_screen::@return - // } - // [189] return - rts + // [183] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6] + // [183] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy + // [183] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy // init_dist_screen::@6 b6: // x2 = x*2 - // [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // (x2>=39)?(x2-39):(39-x2) - // [191] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 + // [185] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 cmp #$27 bcs b8 // init_dist_screen::@9 - // [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [193] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] - // [193] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [187] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [187] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy // init_dist_screen::@10 b10: // sqr(xd) - // [194] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [195] call sqr - // [239] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] - // [239] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy + // [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [189] call sqr + // [240] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] + // [240] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr // sqr(xd) - // [196] (word) sqr::return#3 ← (word) sqr::return#0 + // [190] (word) sqr::return#3 ← (word) sqr::return#0 // init_dist_screen::@13 // xds = sqr(xd) - // [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 // ds = xds+yds - // [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 lda ds clc adc yds @@ -10829,36 +10883,67 @@ init_dist_screen: { adc yds+1 sta ds+1 // sqrt(ds) - // [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [200] call sqrt + // [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [194] call sqrt jsr sqrt - // [201] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 // init_dist_screen::@14 // d = sqrt(ds) - // [202] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 // screen_topline[x] = d - // [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y // screen_bottomline[x] = d - // [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // screen_topline[xb] = d - // [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y // screen_bottomline[xb] = d - // [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [207] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 inc x - // [208] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 dec xb - // [183] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] - // [183] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy - // [183] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy - jmp b5 + // init_dist_screen::@5 + // [203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b6 + // init_dist_screen::@7 + // screen_topline += 40 + // [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + // screen_bottomline -= 40 + // [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + // for(byte y: 0..12) + // [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + inc y + // [207] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1 + // init_dist_screen::@return + // } + // [208] return + rts // init_dist_screen::@8 b8: // (x2>=39)?(x2-39):(39-x2) @@ -10878,19 +10963,19 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($1e) val) +// sqrt(word zeropage($22) val) sqrt: { - .label _1 = $c - .label _3 = $c - .label found = $c - .label val = $1e + .label _1 = $e + .label _3 = $e + .label found = $e + .label val = $22 // bsearch16u(val, SQUARES, NUM_SQUARES) // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES - sta bsearch16u.items + sta bsearch16u.items_1 lda SQUARES+1 - sta bsearch16u.items+1 + sta bsearch16u.items_1+1 // [213] call bsearch16u // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] jsr bsearch16u @@ -10925,74 +11010,39 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($1e) key, word* zeropage($c) items, byte register(X) num) +// bsearch16u(word zeropage($22) key, word* zeropage($e) items, byte register(X) num) bsearch16u: { - .label _2 = $c - .label pivot = $20 - .label result = $22 - .label return = $c - .label items = $c - .label key = $1e - // [221] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [221] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + .label _2 = $e + .label pivot = $e + .label result = $24 + .label return = $e + .label items = $e + .label key = $22 + .label items_1 = $c + .label items_10 = $c + .label items_16 = $c + // [221] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4] + // [221] phi (word*) bsearch16u::items#10 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@4#0] -- register_copy + // [221] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES - // bsearch16u::@3 - b3: - // while (num > 0) - // [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 - cpx #0 - bne b4 - // bsearch16u::@5 - // *items<=key?items:items-1 - // [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 - ldy #1 - lda (items),y - cmp key+1 - bne !+ - dey - lda (items),y - cmp key - beq b2 - !: - bcc b2 - // bsearch16u::@1 - // [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 - lda _2 - sec - sbc #<1*SIZEOF_WORD - sta _2 - lda _2+1 - sbc #>1*SIZEOF_WORD - sta _2+1 - // [225] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] - // [225] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy - // bsearch16u::@2 - b2: - // [226] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - // [226] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy - // bsearch16u::@return - // } - // [227] return - rts // bsearch16u::@4 b4: // num >> 1 - // [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + // [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuaa=vbuxx_ror_1 txa lsr // items + (num >> 1) - // [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + // [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa clc - adc items + adc items_10 sta pivot lda #0 - adc items+1 + adc items_10+1 sta pivot+1 // result = (signed int)key-(signed int)*pivot - // [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [225] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 sec lda key ldy #0 @@ -11003,66 +11053,112 @@ bsearch16u: { sbc (pivot),y sta result+1 // if (result == 0) - // [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 bne b6 lda result bne b6 - // bsearch16u::@8 - // [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 - lda pivot - sta return - lda pivot+1 - sta return+1 + // [227] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return] + // [227] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy + // bsearch16u::@return + breturn: + // } + // [228] return rts // bsearch16u::@6 b6: // if (result > 0) - // [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 lda result+1 - bmi b7 + bmi b10 bne !+ lda result - beq b7 + beq b10 !: - // bsearch16u::@9 + // bsearch16u::@8 // items = pivot+1 - // [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #1*SIZEOF_WORD clc - adc pivot + adc items sta items - lda #0 - adc pivot+1 - sta items+1 + bcc !+ + inc items+1 + !: // num--; - // [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx + // [231] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuxx=_dec_vbuxx dex - // [237] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - // [237] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [237] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [232] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7] + // [232] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#19 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy + // [232] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy // bsearch16u::@7 b7: // num >>= 1 - // [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [233] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [221] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [221] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy - jmp b3 + // bsearch16u::@3 + // while (num > 0) + // [234] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuxx_gt_0_then_la1 + cpx #0 + bne b9 + // bsearch16u::@5 + // *items<=key?items:items-1 + // [235] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + ldy #1 + lda (items),y + cmp key+1 + bne !+ + dey + lda (items),y + cmp key + beq breturn + !: + bcc breturn + // bsearch16u::@1 + // [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + lda _2 + sec + sbc #<1*SIZEOF_WORD + sta _2 + lda _2+1 + sbc #>1*SIZEOF_WORD + sta _2+1 + // [237] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [237] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // bsearch16u::@2 + rts + // bsearch16u::@9 + b9: + // [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 + lda items + sta items_16 + lda items+1 + sta items_16+1 + // [221] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4] + // [221] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy + // [221] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy + jmp b4 + // bsearch16u::@10 + b10: + // [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 + lda items_10 + sta items + lda items_10+1 + sta items+1 + jmp b7 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $1e - .label return_2 = $1c + .label return = $22 + .label return_2 = $20 // return SQUARES[val]; - // [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa + // [242] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (SQUARES),y sta return @@ -11071,17 +11167,17 @@ sqr: { sta return+1 // sqr::@return // } - // [242] return + // [243] return rts } // init_squares // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label squares = $14 - .label sqr = $1c + .label squares = $1a + .label sqr = $18 // malloc(NUM_SQUARES*sizeof(word)) - // [244] call malloc + // [245] call malloc // [93] phi from init_squares to malloc [phi:init_squares->malloc] // [93] phi (word) malloc::size#7 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #init_squares::@1] - // [247] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 + // [248] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [248] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 - // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [247] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [248] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [248] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 txa sta sqr sta sqr+1 - // [247] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] - // [247] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [247] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [248] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [248] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [248] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [248] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy // init_squares::@1 b1: // *squares++ = sqr - // [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y @@ -11122,7 +11218,7 @@ init_squares: { lda sqr+1 sta (squares),y // *squares++ = sqr; - // [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -11131,15 +11227,15 @@ init_squares: { inc squares+1 !: // i*2 - // [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // i*2+1 - // [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 // sqr += i*2+1 - // [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa + // [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa clc adc sqr sta sqr @@ -11147,14 +11243,14 @@ init_squares: { inc sqr+1 !: // for( byte i: 0..NUM_SQUARES-1) - // [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx + // [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx - // [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 + // [255] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #NUM_SQUARES-1+1 bne b1 // init_squares::@return // } - // [255] return + // [256] return rts } // File Data diff --git a/src/test/ref/screen-show-spiral-buckets.sym b/src/test/ref/screen-show-spiral-buckets.sym index 19ad1caef..9b0156bd1 100644 --- a/src/test/ref/screen-show-spiral-buckets.sym +++ b/src/test/ref/screen-show-spiral-buckets.sym @@ -11,11 +11,11 @@ (byte*) BORDERCOL (const byte*) BORDERCOL#0 BORDERCOL = (byte*) 53280 (word*[]) BUCKETS -(void*) BUCKETS#0 BUCKETS zp ZP_WORD:18 0.02531645569620253 +(void*) BUCKETS#0 BUCKETS zp ZP_WORD:20 0.02531645569620253 (byte[]) BUCKET_IDX -(void*) BUCKET_IDX#0 BUCKET_IDX zp ZP_WORD:24 0.0425531914893617 +(void*) BUCKET_IDX#0 BUCKET_IDX zp ZP_WORD:22 0.0425531914893617 (byte[]) BUCKET_SIZES -(void*) BUCKET_SIZES#0 BUCKET_SIZES zp ZP_WORD:16 0.024691358024691357 +(void*) BUCKET_SIZES#0 BUCKET_SIZES zp ZP_WORD:18 0.024691358024691357 (byte*) COLS (const byte*) COLS#0 COLS = (byte*) 55296 (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16 @@ -39,9 +39,9 @@ (byte*) RASTER (const byte*) RASTER#0 RASTER = (byte*) 53266 (byte[]) SCREEN_ANGLE -(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:14 0.045454545454545456 +(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:16 0.045454545454545456 (byte[]) SCREEN_DIST -(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:22 0.125 +(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:28 0.125 (byte*) SCREEN_FILL (const byte*) SCREEN_FILL#0 SCREEN_FILL = (byte*) 1024 (const byte) SIZEOF_BYTE SIZEOF_BYTE = (byte) 1 @@ -97,13 +97,13 @@ (byte) atan2_16::shift#2 reg byte y 8001.25 (byte~) atan2_16::shift#5 reg byte y 667.3333333333334 (signed word) atan2_16::x -(signed word) atan2_16::x#0 x zp ZP_WORD:32 2.8684210526315796 +(signed word) atan2_16::x#0 x zp ZP_WORD:34 2.8684210526315796 (signed word) atan2_16::xd -(signed word) atan2_16::xd#1 xd zp ZP_WORD:28 6667.333333333333 -(signed word~) atan2_16::xd#10 xd zp ZP_WORD:28 1001.0 -(signed word) atan2_16::xd#2 xd zp ZP_WORD:28 1001.0 -(signed word) atan2_16::xd#3 xd zp ZP_WORD:28 7668.333333333332 -(signed word) atan2_16::xd#5 xd zp ZP_WORD:28 1001.0 +(signed word) atan2_16::xd#1 xd zp ZP_WORD:14 6667.333333333333 +(signed word~) atan2_16::xd#10 xd zp ZP_WORD:14 1001.0 +(signed word) atan2_16::xd#2 xd zp ZP_WORD:14 1001.0 +(signed word) atan2_16::xd#3 xd zp ZP_WORD:14 7668.333333333332 +(signed word) atan2_16::xd#5 xd zp ZP_WORD:14 1001.0 (signed word) atan2_16::xi (signed word) atan2_16::xi#0 xi zp ZP_WORD:8 6.0 (signed word) atan2_16::xi#1 xi zp ZP_WORD:8 500.5 @@ -112,7 +112,7 @@ (signed word) atan2_16::xi#3 xi zp ZP_WORD:8 267.0666666666667 (signed word) atan2_16::xi#8 xi zp ZP_WORD:8 1001.0 (signed word) atan2_16::y -(signed word) atan2_16::y#0 y zp ZP_WORD:34 2.724999999999999 +(signed word) atan2_16::y#0 y zp ZP_WORD:36 2.724999999999999 (signed word) atan2_16::yd (signed word) atan2_16::yd#1 yd zp ZP_WORD:12 10001.0 (signed word~) atan2_16::yd#10 yd zp ZP_WORD:12 2002.0 @@ -128,9 +128,10 @@ (signed word) atan2_16::yi#8 yi zp ZP_WORD:5 1001.0 (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) (byte~) bsearch16u::$16 reg byte a 2002.0 -(word*~) bsearch16u::$2 $2 zp ZP_WORD:12 4.0 +(word*~) bsearch16u::$2 $2 zp ZP_WORD:14 4.0 (byte~) bsearch16u::$6 reg byte a 2002.0 (label) bsearch16u::@1 +(label) bsearch16u::@10 (label) bsearch16u::@2 (label) bsearch16u::@3 (label) bsearch16u::@4 @@ -141,26 +142,27 @@ (label) bsearch16u::@9 (label) bsearch16u::@return (word*) bsearch16u::items -(word*) bsearch16u::items#0 items zp ZP_WORD:12 1001.0 -(word*) bsearch16u::items#1 items zp ZP_WORD:12 2.0 -(word*) bsearch16u::items#2 items zp ZP_WORD:12 334.5555555555556 -(word*) bsearch16u::items#8 items zp ZP_WORD:12 1501.5 +(word*) bsearch16u::items#0 items zp ZP_WORD:14 1001.0 +(word*) bsearch16u::items#1 items#1 zp ZP_WORD:12 2.0 +(word*) bsearch16u::items#10 items#10 zp ZP_WORD:12 429.2857142857143 +(word*) bsearch16u::items#11 items zp ZP_WORD:14 752.25 +(word*~) bsearch16u::items#16 items#16 zp ZP_WORD:12 2002.0 +(word*~) bsearch16u::items#19 items zp ZP_WORD:14 2002.0 (word) bsearch16u::key -(word) bsearch16u::key#0 key zp ZP_WORD:30 0.26666666666666666 +(word) bsearch16u::key#0 key zp ZP_WORD:34 0.23529411764705882 (byte) bsearch16u::num -(byte) bsearch16u::num#0 reg byte x 2002.0 +(byte) bsearch16u::num#0 reg byte x 1001.0 (byte) bsearch16u::num#1 reg byte x 2002.0 -(byte) bsearch16u::num#3 reg byte x 556.1111111111111 +(byte) bsearch16u::num#10 reg byte x 444.8888888888889 (byte) bsearch16u::num#5 reg byte x 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:32 501.0 +(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:14 750.75 (signed word) bsearch16u::result -(signed word) bsearch16u::result#0 result zp ZP_WORD:34 1501.5 +(signed word) bsearch16u::result#0 result zp ZP_WORD:36 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 return zp ZP_WORD:12 2.0 -(word*) bsearch16u::return#2 return zp ZP_WORD:12 6.0 -(word*) bsearch16u::return#3 return zp ZP_WORD:12 4.0 -(word*~) bsearch16u::return#6 return zp ZP_WORD:12 4.0 +(word*) bsearch16u::return#1 return zp ZP_WORD:14 335.00000000000006 +(word*) bsearch16u::return#2 return zp ZP_WORD:14 6.0 +(word*) bsearch16u::return#3 return zp ZP_WORD:14 4.0 (byte*) heap_head (byte*) heap_head#1 heap_head zp ZP_WORD:2 0.2446808510638298 (byte*) heap_head#18 heap_head zp ZP_WORD:2 23.0 @@ -179,42 +181,42 @@ (label) init_angle_screen::@5 (label) init_angle_screen::@return (byte) init_angle_screen::ang_w -(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:27 84.16666666666666 +(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:31 84.16666666666666 (word) init_angle_screen::angle_w (word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:10 202.0 (byte*) init_angle_screen::screen -(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:30 3.0 +(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:26 3.0 (byte*) init_angle_screen::screen_bottomline -(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:30 4.0 -(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:30 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:30 9.04 +(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:26 4.0 +(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:26 7.333333333333333 +(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:26 9.040000000000001 (byte*) init_angle_screen::screen_topline -(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:20 2.0 -(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:20 5.5 -(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:20 9.416666666666666 +(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:24 2.0 +(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:24 5.5 +(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:24 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 x zp ZP_BYTE:4 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:4 28.857142857142858 +(byte) init_angle_screen::x#5 x zp ZP_BYTE:4 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:7 202.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:7 18.363636363636363 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:7 101.0 +(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:7 19.238095238095237 (signed word) init_angle_screen::xw -(word) init_angle_screen::xw#0 xw zp ZP_WORD:32 33.666666666666664 +(word) init_angle_screen::xw#0 xw zp ZP_WORD:34 33.666666666666664 (byte) init_angle_screen::y -(byte) init_angle_screen::y#1 y zp ZP_BYTE:26 16.5 -(byte) init_angle_screen::y#5 y zp ZP_BYTE:26 4.730769230769231 +(byte) init_angle_screen::y#1 y zp ZP_BYTE:30 16.5 +(byte) init_angle_screen::y#5 y zp ZP_BYTE:30 4.730769230769231 (signed word) init_angle_screen::yw -(word) init_angle_screen::yw#0 yw zp ZP_WORD:34 50.5 +(word) init_angle_screen::yw#0 yw zp ZP_WORD:36 50.5 (void()) init_buckets((byte*) init_buckets::screen) -(word~) init_buckets::$10 $10 zp ZP_WORD:28 11.0 -(word~) init_buckets::$12 $12 zp ZP_WORD:32 22.0 -(word~) init_buckets::$13 $13 zp ZP_WORD:34 22.0 +(word~) init_buckets::$10 $10 zp ZP_WORD:32 11.0 +(word~) init_buckets::$12 $12 zp ZP_WORD:34 22.0 +(word~) init_buckets::$13 $13 zp ZP_WORD:36 22.0 (byte~) init_buckets::$14 reg byte a 22.0 (byte*~) init_buckets::$15 $15 zp ZP_WORD:5 22.0 -(word**~) init_buckets::$16 $16 zp ZP_WORD:32 22.0 -(word**~) init_buckets::$17 $17 zp ZP_WORD:34 22.0 +(word**~) init_buckets::$16 $16 zp ZP_WORD:34 22.0 +(word**~) init_buckets::$17 $17 zp ZP_WORD:36 22.0 (void*~) init_buckets::$5 $5 zp ZP_WORD:5 3.6666666666666665 -(word~) init_buckets::$9 $9 zp ZP_WORD:34 22.0 +(word~) init_buckets::$9 $9 zp ZP_WORD:36 22.0 (label) init_buckets::@1 (label) init_buckets::@2 (label) init_buckets::@3 @@ -225,7 +227,7 @@ (label) init_buckets::@8 (label) init_buckets::@return (word*) init_buckets::bucket -(word*) init_buckets::bucket#0 bucket zp ZP_WORD:34 7.333333333333333 +(word*) init_buckets::bucket#0 bucket zp ZP_WORD:36 7.333333333333333 (byte*) init_buckets::dist (byte*) init_buckets::dist#1 dist zp ZP_WORD:8 7.333333333333333 (byte*) init_buckets::dist#3 dist#3 zp ZP_WORD:2 7.333333333333333 @@ -234,7 +236,7 @@ (byte*~) init_buckets::dist#6 dist zp ZP_WORD:8 4.0 (byte*~) init_buckets::dist#8 dist#8 zp ZP_WORD:2 4.0 (byte) init_buckets::distance -(byte) init_buckets::distance#0 distance zp ZP_BYTE:26 5.5 +(byte) init_buckets::distance#0 distance zp ZP_BYTE:30 5.5 (byte) init_buckets::i (byte) init_buckets::i#1 reg byte y 16.5 (byte) init_buckets::i#2 reg byte y 16.5 @@ -242,16 +244,16 @@ (word) init_buckets::i1#1 i1 zp ZP_WORD:10 16.5 (word) init_buckets::i1#2 i1 zp ZP_WORD:10 7.333333333333333 (word) init_buckets::i2 -(word) init_buckets::i2#1 i2 zp ZP_WORD:20 16.5 -(word) init_buckets::i2#2 i2 zp ZP_WORD:20 5.5 +(word) init_buckets::i2#1 i2 zp ZP_WORD:24 16.5 +(word) init_buckets::i2#2 i2 zp ZP_WORD:24 5.5 (byte) init_buckets::i3 (byte) init_buckets::i3#1 reg byte y 16.5 (byte) init_buckets::i3#2 reg byte y 16.5 (word) init_buckets::i4 -(word) init_buckets::i4#1 i4 zp ZP_WORD:30 16.5 -(word) init_buckets::i4#2 i4 zp ZP_WORD:30 2.0 +(word) init_buckets::i4#1 i4 zp ZP_WORD:26 16.5 +(word) init_buckets::i4#2 i4 zp ZP_WORD:26 2.0 (byte*) init_buckets::screen -(byte*) init_buckets::screen#0 screen zp ZP_WORD:22 0.42500000000000004 +(byte*) init_buckets::screen#0 screen zp ZP_WORD:28 0.42500000000000004 (void()) init_dist_screen((byte*) init_dist_screen::screen) (byte~) init_dist_screen::$14 reg byte a 202.0 (byte~) init_dist_screen::$16 reg byte a 202.0 @@ -275,7 +277,7 @@ (byte) init_dist_screen::d (byte) init_dist_screen::d#0 reg byte a 126.25 (word) init_dist_screen::ds -(word) init_dist_screen::ds#0 ds zp ZP_WORD:30 202.0 +(word) init_dist_screen::ds#0 ds zp ZP_WORD:34 202.0 (byte*) init_dist_screen::screen (byte*) init_dist_screen::screen#0 screen zp ZP_WORD:8 1.5 (byte*) init_dist_screen::screen_bottomline @@ -286,17 +288,17 @@ (byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:8 5.5 (byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:8 7.0625 (byte) init_dist_screen::x -(byte) init_dist_screen::x#1 x zp ZP_BYTE:27 101.0 -(byte) init_dist_screen::x#2 x zp ZP_BYTE:27 30.3 +(byte) init_dist_screen::x#1 x zp ZP_BYTE:31 101.0 +(byte) init_dist_screen::x#10 x zp ZP_BYTE:31 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 reg byte a 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:26 202.0 -(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:26 19.238095238095237 +(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:30 101.0 +(byte) init_dist_screen::xb#10 xb zp ZP_BYTE:30 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 reg byte a 303.0 (word) init_dist_screen::xds -(word) init_dist_screen::xds#0 xds zp ZP_WORD:30 202.0 +(word) init_dist_screen::xds#0 xds zp ZP_WORD:34 202.0 (byte) init_dist_screen::y (byte) init_dist_screen::y#1 y zp ZP_BYTE:7 16.5 (byte) init_dist_screen::y#10 y zp ZP_BYTE:7 0.9705882352941178 @@ -305,7 +307,7 @@ (byte) init_dist_screen::yd (byte) init_dist_screen::yd#0 reg byte a 33.0 (word) init_dist_screen::yds -(word) init_dist_screen::yds#0 yds zp ZP_WORD:28 4.869565217391305 +(word) init_dist_screen::yds#0 yds zp ZP_WORD:32 4.869565217391305 (void()) init_squares() (byte~) init_squares::$3 reg byte a 22.0 (byte~) init_squares::$4 reg byte a 22.0 @@ -316,12 +318,12 @@ (byte) init_squares::i#1 reg byte x 16.5 (byte) init_squares::i#2 reg byte x 5.5 (word) init_squares::sqr -(word) init_squares::sqr#1 sqr zp ZP_WORD:28 7.333333333333333 -(word) init_squares::sqr#2 sqr zp ZP_WORD:28 6.6000000000000005 +(word) init_squares::sqr#1 sqr zp ZP_WORD:24 7.333333333333333 +(word) init_squares::sqr#2 sqr zp ZP_WORD:24 6.6000000000000005 (word*) init_squares::squares -(word*) init_squares::squares#0 squares zp ZP_WORD:20 4.0 -(word*) init_squares::squares#1 squares zp ZP_WORD:20 3.6666666666666665 -(word*) init_squares::squares#2 squares zp ZP_WORD:20 17.5 +(word*) init_squares::squares#0 squares zp ZP_WORD:26 4.0 +(word*) init_squares::squares#1 squares zp ZP_WORD:26 3.6666666666666665 +(word*) init_squares::squares#2 squares zp ZP_WORD:26 17.5 (void()) main() (byte~) main::$21 reg byte a 22.0 (byte~) main::$22 reg byte a 202.0 @@ -344,16 +346,16 @@ (label) main::@8 (label) main::@9 (byte*) main::angle -(byte*) main::angle#0 angle zp ZP_WORD:24 151.5 +(byte*) main::angle#0 angle zp ZP_WORD:28 151.5 (word[]) main::bucket -(word[]) main::bucket#0 bucket zp ZP_WORD:20 6.588235294117648 +(word[]) main::bucket#0 bucket zp ZP_WORD:24 6.588235294117648 (byte) main::bucket_idx -(byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:26 11.0 -(byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:26 2.64 +(byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:30 11.0 +(byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:30 2.64 (byte) main::bucket_size -(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:27 7.6875 +(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:31 7.6875 (byte*) main::fill -(byte*) main::fill#0 fill zp ZP_WORD:22 202.0 +(byte*) main::fill#0 fill zp ZP_WORD:26 202.0 (byte*) main::fill1 (byte*) main::fill1#0 fill1 zp ZP_WORD:8 22.0 (byte) main::i @@ -383,74 +385,75 @@ (byte~) sqr::$0 reg byte a 4.0 (label) sqr::@return (word) sqr::return -(word) sqr::return#0 return zp ZP_WORD:30 28.5 -(word) sqr::return#2 return#2 zp ZP_WORD:28 22.0 -(word) sqr::return#3 return zp ZP_WORD:30 202.0 +(word) sqr::return#0 return zp ZP_WORD:34 28.5 +(word) sqr::return#2 return#2 zp ZP_WORD:32 22.0 +(word) sqr::return#3 return zp ZP_WORD:34 202.0 (byte) sqr::val (byte) sqr::val#0 reg byte a 22.0 (byte) sqr::val#1 reg byte a 202.0 (byte) sqr::val#2 reg byte a 114.0 (byte()) sqrt((word) sqrt::val) -(word~) sqrt::$1 $1 zp ZP_WORD:12 2.0 -(word~) sqrt::$3 $3 zp ZP_WORD:12 4.0 +(word~) sqrt::$1 $1 zp ZP_WORD:14 2.0 +(word~) sqrt::$3 $3 zp ZP_WORD:14 4.0 (label) sqrt::@1 (label) sqrt::@return (word*) sqrt::found -(word*) sqrt::found#0 found zp ZP_WORD:12 4.0 +(word*) sqrt::found#0 found zp ZP_WORD:14 4.0 (byte) sqrt::return (byte) sqrt::return#0 reg byte a 34.33333333333333 (byte) sqrt::return#2 reg byte a 202.0 (byte) sqrt::sq (word) sqrt::val -(word) sqrt::val#0 val zp ZP_WORD:30 103.0 +(word) sqrt::val#0 val zp ZP_WORD:34 103.0 reg byte x [ main::i#2 main::i#1 ] reg byte y [ init_buckets::i#2 init_buckets::i#1 ] reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ] zp ZP_WORD:2 [ heap_head#18 heap_head#1 init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] -zp ZP_BYTE:4 [ init_angle_screen::x#2 init_angle_screen::x#1 main::min_angle#2 main::min_angle#5 main::min_angle#1 ] +zp ZP_BYTE:4 [ init_angle_screen::x#5 init_angle_screen::x#1 main::min_angle#2 main::min_angle#5 main::min_angle#1 ] zp ZP_WORD:5 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -zp ZP_BYTE:7 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ] +zp ZP_BYTE:7 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ] zp ZP_WORD:8 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 main::min_offset#2 main::min_offset#8 main::fill1#0 ] zp ZP_WORD:10 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 init_buckets::i1#2 init_buckets::i1#1 main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -zp ZP_WORD:12 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +zp ZP_WORD:12 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] +zp ZP_WORD:14 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] -zp ZP_WORD:14 [ SCREEN_ANGLE#0 ] -zp ZP_WORD:16 [ BUCKET_SIZES#0 ] -zp ZP_WORD:18 [ BUCKETS#0 ] +zp ZP_WORD:16 [ SCREEN_ANGLE#0 ] +zp ZP_WORD:18 [ BUCKET_SIZES#0 ] +zp ZP_WORD:20 [ BUCKETS#0 ] +zp ZP_WORD:22 [ BUCKET_IDX#0 ] reg byte a [ main::$21 ] -zp ZP_WORD:20 [ main::bucket#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 init_buckets::i2#2 init_buckets::i2#1 ] +zp ZP_WORD:24 [ main::bucket#0 init_squares::sqr#2 init_squares::sqr#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 init_buckets::i2#2 init_buckets::i2#1 ] reg byte a [ main::$22 ] -zp ZP_WORD:22 [ main::fill#0 SCREEN_DIST#0 init_buckets::screen#0 ] -zp ZP_WORD:24 [ main::angle#0 BUCKET_IDX#0 ] -zp ZP_BYTE:26 [ init_buckets::distance#0 init_dist_screen::xb#2 init_dist_screen::xb#1 init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ] +zp ZP_WORD:26 [ main::fill#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_buckets::i4#2 init_buckets::i4#1 ] +zp ZP_WORD:28 [ main::angle#0 SCREEN_DIST#0 init_buckets::screen#0 ] +zp ZP_BYTE:30 [ init_buckets::distance#0 init_dist_screen::xb#10 init_dist_screen::xb#1 init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ] reg byte a [ init_buckets::$14 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] -zp ZP_BYTE:27 [ init_angle_screen::ang_w#0 main::bucket_size#0 init_dist_screen::x#2 init_dist_screen::x#1 ] +zp ZP_BYTE:31 [ init_angle_screen::ang_w#0 main::bucket_size#0 init_dist_screen::x#10 init_dist_screen::x#1 ] reg byte a [ init_angle_screen::$13 ] reg byte a [ init_angle_screen::$14 ] reg byte a [ init_angle_screen::$15 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte a [ init_dist_screen::y2#0 ] -zp ZP_WORD:28 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$10 init_squares::sqr#2 init_squares::sqr#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +zp ZP_WORD:32 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$10 ] reg byte a [ init_dist_screen::x2#0 ] -zp ZP_WORD:30 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_buckets::i4#2 init_buckets::i4#1 ] +zp ZP_WORD:34 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ] reg byte a [ sqrt::return#2 ] reg byte a [ init_dist_screen::d#0 ] reg byte a [ sqrt::return#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] -zp ZP_WORD:32 [ bsearch16u::pivot#0 init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ] -zp ZP_WORD:34 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] +zp ZP_WORD:36 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] reg byte a [ sqr::$0 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] diff --git a/src/test/ref/screen-show-spiral.asm b/src/test/ref/screen-show-spiral.asm index 847c0bcab..0725bac6e 100644 --- a/src/test/ref/screen-show-spiral.asm +++ b/src/test/ref/screen-show-spiral.asm @@ -12,12 +12,12 @@ // Char to fill with .const FILL_CHAR = '@' .const NUM_SQUARES = $30 - .label heap_head = $f - .label SQUARES = $11 + .label heap_head = $d + .label SQUARES = $13 // Screen containing distance to center - .label SCREEN_DIST = $b + .label SCREEN_DIST = $f // Screen containing angle to center - .label SCREEN_ANGLE = $d + .label SCREEN_ANGLE = $11 bbegin: lda #<$3e8 sta malloc.size @@ -44,15 +44,15 @@ bbegin: jsr main rts main: { - .label dist = 9 - .label angle = $14 - .label fill = 7 - .label dist_angle = $1a - .label min_dist_angle = $16 - .label min_dist_angle_3 = $1a - .label min_fill = $18 - .label min_dist_angle_7 = $1a - .label min_dist_angle_8 = $1a + .label dist = $b + .label angle = $d + .label fill = 9 + .label dist_angle = 2 + .label min_dist_angle = $18 + .label min_dist_angle_3 = 2 + .label min_fill = $1a + .label min_dist_angle_7 = 2 + .label min_dist_angle_8 = 2 lda SCREEN_DIST sta init_dist_screen.screen lda SCREEN_DIST+1 @@ -161,19 +161,19 @@ main: { } // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center -// init_angle_screen(byte* zeropage(9) screen) +// init_angle_screen(byte* zeropage($b) screen) init_angle_screen: { - .label _11 = $18 - .label screen = 9 - .label screen_topline = 7 - .label screen_bottomline = 9 - .label xw = $f - .label yw = $11 - .label angle_w = $18 - .label ang_w = $13 - .label x = 5 - .label xb = 6 - .label y = 2 + .label _11 = $1a + .label screen = $b + .label screen_topline = 9 + .label screen_bottomline = $b + .label xw = $13 + .label yw = $16 + .label angle_w = $1a + .label ang_w = $15 + .label x = 7 + .label xb = 8 + .label y = 4 lda screen clc adc #<$28*$c @@ -195,29 +195,6 @@ init_angle_screen: { sta xb lda #0 sta x - b2: - lda x - cmp #$13+1 - bcc b3 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - inc y - lda #$d - cmp y - bne b1 - rts b3: lda x asl @@ -258,23 +235,44 @@ init_angle_screen: { sta (screen_bottomline),y inc x dec xb - jmp b2 + lda x + cmp #$13+1 + bcc b3 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + inc y + lda #$d + cmp y + bne b1 + rts } // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($f) x, signed word zeropage($11) y) +// atan2_16(signed word zeropage($13) x, signed word zeropage($16) y) atan2_16: { - .label _2 = $14 - .label _7 = $16 - .label yi = $14 - .label xi = $16 - .label angle = $18 - .label xd = 3 - .label yd = $1a - .label return = $18 - .label x = $f - .label y = $11 + .label _2 = $d + .label _7 = $18 + .label yi = $d + .label xi = $18 + .label angle = $1a + .label xd = 5 + .label yd = 2 + .label return = $1a + .label x = $13 + .label y = $16 lda y+1 bmi !b1+ jmp b1 @@ -451,17 +449,17 @@ atan2_16: { } // Populates 1000 bytes (a screen) with values representing the distance to the center. // The actual value stored is distance*2 to increase precision -// init_dist_screen(byte* zeropage(3) screen) +// init_dist_screen(byte* zeropage(5) screen) init_dist_screen: { - .label screen = 3 - .label screen_bottomline = 7 - .label yds = $14 - .label screen_topline = 3 - .label y = 2 - .label xds = $16 - .label ds = $16 - .label x = 5 - .label xb = 6 + .label screen = 5 + .label screen_bottomline = 9 + .label yds = $16 + .label screen_topline = 5 + .label y = 4 + .label xds = $18 + .label ds = $18 + .label x = 7 + .label xb = 8 jsr init_squares lda screen clc @@ -490,29 +488,6 @@ init_dist_screen: { sta xb lda #0 sta x - b5: - lda x - cmp #$13+1 - bcc b6 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - inc y - lda #$d - cmp y - bne b1 - rts b6: lda x asl @@ -539,7 +514,28 @@ init_dist_screen: { sta (screen_bottomline),y inc x dec xb - jmp b5 + lda x + cmp #$13+1 + bcc b6 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + inc y + lda #$d + cmp y + bne b1 + rts b8: sec sbc #$27 @@ -552,16 +548,16 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($16) val) +// sqrt(word zeropage($18) val) sqrt: { - .label _1 = 9 - .label _3 = 9 - .label found = 9 - .label val = $16 + .label _1 = $d + .label _3 = $d + .label found = $d + .label val = $18 lda SQUARES - sta bsearch16u.items + sta bsearch16u.items_1 lda SQUARES+1 - sta bsearch16u.items+1 + sta bsearch16u.items_1+1 jsr bsearch16u lda _3 sec @@ -580,46 +576,27 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($16) key, word* zeropage(9) items, byte register(X) num) +// bsearch16u(word zeropage($18) key, word* zeropage($d) items, byte register(X) num) bsearch16u: { - .label _2 = 9 - .label pivot = $18 + .label _2 = $d + .label pivot = $d .label result = $1a - .label return = 9 - .label items = 9 - .label key = $16 + .label return = $d + .label items = $d + .label key = $18 + .label items_1 = $b + .label items_10 = $b + .label items_16 = $b ldx #NUM_SQUARES - b3: - cpx #0 - bne b4 - ldy #1 - lda (items),y - cmp key+1 - bne !+ - dey - lda (items),y - cmp key - beq b2 - !: - bcc b2 - lda _2 - sec - sbc #<1*SIZEOF_WORD - sta _2 - lda _2+1 - sbc #>1*SIZEOF_WORD - sta _2+1 - b2: - rts b4: txa lsr asl clc - adc items + adc items_10 sta pivot lda #0 - adc items+1 + adc items_10+1 sta pivot+1 sec lda key @@ -633,38 +610,66 @@ bsearch16u: { bne b6 lda result bne b6 - lda pivot - sta return - lda pivot+1 - sta return+1 + breturn: rts b6: lda result+1 - bmi b7 + bmi b10 bne !+ lda result - beq b7 + beq b10 !: lda #1*SIZEOF_WORD clc - adc pivot + adc items sta items - lda #0 - adc pivot+1 - sta items+1 + bcc !+ + inc items+1 + !: dex b7: txa lsr tax - jmp b3 + cpx #0 + bne b9 + ldy #1 + lda (items),y + cmp key+1 + bne !+ + dey + lda (items),y + cmp key + beq breturn + !: + bcc breturn + lda _2 + sec + sbc #<1*SIZEOF_WORD + sta _2 + lda _2+1 + sbc #>1*SIZEOF_WORD + sta _2+1 + rts + b9: + lda items + sta items_16 + lda items+1 + sta items_16+1 + jmp b4 + b10: + lda items_10 + sta items + lda items_10+1 + sta items+1 + jmp b7 } // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $16 - .label return_2 = $14 + .label return = $18 + .label return_2 = $16 asl tay lda (SQUARES),y @@ -677,8 +682,8 @@ sqr: { // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label squares = 9 - .label sqr = 7 + .label squares = $b + .label sqr = 9 lda #NUM_SQUARES*SIZEOF_WORD @@ -723,10 +728,10 @@ init_squares: { } // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. -// malloc(word zeropage($11) size) +// malloc(word zeropage($13) size) malloc: { - .label mem = $11 - .label size = $11 + .label mem = $13 + .label size = $13 lda heap_head sec sbc mem diff --git a/src/test/ref/screen-show-spiral.cfg b/src/test/ref/screen-show-spiral.cfg index 7742cac6e..663a28a6e 100644 --- a/src/test/ref/screen-show-spiral.cfg +++ b/src/test/ref/screen-show-spiral.cfg @@ -79,46 +79,46 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an [33] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) [33] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) [33] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - to:init_angle_screen::@2 -init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [34] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [34] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [35] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 - to:init_angle_screen::@4 -init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [37] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [38] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [39] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 - to:init_angle_screen::@return -init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [40] return - to:@return -init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [42] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [43] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [46] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [47] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [48] call atan2_16 - [49] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + to:init_angle_screen::@3 +init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@2 + [34] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 ) + [34] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 ) + [35] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 + [36] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [37] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [38] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [39] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [40] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [41] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [42] call atan2_16 + [43] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [50] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [56] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [58] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [60] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [61] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [44] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [45] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [46] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [47] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 + [48] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [49] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 + [50] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [51] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 + [52] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 + [54] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 + [55] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 to:init_angle_screen::@2 +init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@5 + [56] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 + to:init_angle_screen::@4 +init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 + [57] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [58] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [59] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [60] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + to:init_angle_screen::@return +init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 + [61] return + to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@3 [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 @@ -241,50 +241,50 @@ init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_d to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@4 [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - to:init_dist_screen::@5 -init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@14 - [117] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 ) - [117] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 ) - [118] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 - to:init_dist_screen::@7 -init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 - [119] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 - [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 - [121] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [122] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 - to:init_dist_screen::@return -init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 - [123] return - to:@return -init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [124] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [125] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 + to:init_dist_screen::@6 +init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@5 + [117] (byte) init_dist_screen::xb#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#1 init_dist_screen::@12/(byte) $27 ) + [117] (byte) init_dist_screen::x#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#1 init_dist_screen::@12/(byte) 0 ) + [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 + [119] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 - [126] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [120] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9 - [127] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) - [128] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [129] call sqr - [130] (word) sqr::return#3 ← (word) sqr::return#0 + [121] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) + [122] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [123] call sqr + [124] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@13 init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@10 - [131] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [132] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [133] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [134] call sqrt - [135] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [126] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [128] call sqrt + [129] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@14 init_dist_screen::@14: scope:[init_dist_screen] from init_dist_screen::@13 - [136] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [137] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [138] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [139] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [140] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [141] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [142] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [130] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [131] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [132] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [133] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [134] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [135] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 + [136] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 to:init_dist_screen::@5 +init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@14 + [137] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 + to:init_dist_screen::@7 +init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 + [138] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 + [139] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 + [140] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [141] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 + to:init_dist_screen::@return +init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 + [142] return + to:@return init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 [143] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@10 @@ -308,84 +308,87 @@ sqrt::@return: scope:[sqrt] from sqrt::@1 to:@return bsearch16u: scope:[bsearch16u] from sqrt [154] phi() + to:bsearch16u::@4 +bsearch16u::@4: scope:[bsearch16u] from bsearch16u bsearch16u::@9 + [155] (word*) bsearch16u::items#10 ← phi( bsearch16u::@9/(word*~) bsearch16u::items#16 bsearch16u/(word*) bsearch16u::items#1 ) + [155] (byte) bsearch16u::num#10 ← phi( bsearch16u::@9/(byte) bsearch16u::num#0 bsearch16u/(const byte) NUM_SQUARES#3 ) + [156] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 + [157] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [158] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 + [159] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [160] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 + to:bsearch16u::@return +bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@4 + [161] (word*) bsearch16u::return#1 ← phi( bsearch16u::@4/(word*) bsearch16u::pivot#0 bsearch16u::@2/(word*) bsearch16u::return#2 ) + [162] return + to:@return +bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 + [163] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 + to:bsearch16u::@8 +bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@6 + [164] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [165] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 + to:bsearch16u::@7 +bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@10 bsearch16u::@8 + [166] (word*) bsearch16u::items#11 ← phi( bsearch16u::@8/(word*) bsearch16u::items#0 bsearch16u::@10/(word*~) bsearch16u::items#19 ) + [166] (byte) bsearch16u::num#5 ← phi( bsearch16u::@8/(byte) bsearch16u::num#1 bsearch16u::@10/(byte) bsearch16u::num#10 ) + [167] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 to:bsearch16u::@3 -bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [155] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [155] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [156] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 +bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@7 + [168] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + [169] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD + [170] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD to:bsearch16u::@2 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 - [159] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [171] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#11 bsearch16u::@1/(word*~) bsearch16u::$2 ) to:bsearch16u::@return -bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 - [160] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) - [161] return - to:@return -bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [165] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 - to:bsearch16u::@8 -bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 - to:bsearch16u::@return -bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [168] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 - to:bsearch16u::@9 -bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 +bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@3 + [172] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 + to:bsearch16u::@4 +bsearch16u::@10: scope:[bsearch16u] from bsearch16u::@6 + [173] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 to:bsearch16u::@7 -bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [171] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [171] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 - to:bsearch16u::@3 sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 - [173] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) - [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 - [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) + [174] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) + [175] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 + [176] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) to:sqr::@return sqr::@return: scope:[sqr] from sqr - [176] return + [177] return to:@return init_squares: scope:[init_squares] from init_dist_screen - [177] phi() - [178] call malloc + [178] phi() + [179] call malloc to:init_squares::@2 init_squares::@2: scope:[init_squares] from init_squares - [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 + [180] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + [181] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 - [181] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) - [181] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [181] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) - [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 - [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD - [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 - [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 - [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 - [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 - [188] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 + [182] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) + [182] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) + [182] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) + [183] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 + [184] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD + [185] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 + [186] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 + [187] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 + [188] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 + [189] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 - [189] return + [190] return to:@return malloc: scope:[malloc] from @1 @3 init_squares - [190] (word) malloc::size#3 ← phi( @1/(word) $3e8 @3/(word) $3e8 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) - [190] (byte*) heap_head#12 ← phi( @1/(const byte*) HEAP_TOP#0 @3/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) - [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 - [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 + [191] (word) malloc::size#3 ← phi( @1/(word) $3e8 @3/(word) $3e8 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) + [191] (byte*) heap_head#12 ← phi( @1/(const byte*) HEAP_TOP#0 @3/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) + [192] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 + [193] (byte*) heap_head#1 ← (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc - [193] return + [194] return to:@return diff --git a/src/test/ref/screen-show-spiral.log b/src/test/ref/screen-show-spiral.log index c09755677..6ec5d3f2c 100644 --- a/src/test/ref/screen-show-spiral.log +++ b/src/test/ref/screen-show-spiral.log @@ -2350,6 +2350,9 @@ Rewriting conditional comparison [339] if((byte) init_dist_screen::x#2<=(byte) $ Eliminating unused constant (const byte) NUM_SQUARES#0 Eliminating unused constant (const word*) SQUARES#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $13+1 in if((byte) init_angle_screen::x#2<(byte) $13+(number) 1) goto init_angle_screen::@3 Adding number conversion cast (unumber) 1 in if((byte) init_angle_screen::x#2<(unumber)(byte) $13+(number) 1) goto init_angle_screen::@3 Adding number conversion cast (unumber) $d in if((byte) init_angle_screen::y#1!=(number) $d) goto init_angle_screen::@1 @@ -2371,20 +2374,51 @@ Finalized unsigned number type (byte) $d Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [24] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD -Constant right-side identified [30] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 -Constant right-side identified [59] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 -Constant right-side identified [112] (byte*~) main::$6 ← (const byte*) SCREEN_FILL#0 + (word) $3e8 +Alias (byte) bsearch16u::num#0 = (byte) bsearch16u::num#3 +Alias (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 +Alias (byte) bsearch16u::num#10 = (byte) bsearch16u::num#9 (byte) bsearch16u::num#11 +Alias (word*) bsearch16u::items#10 = (word*) bsearch16u::items#12 +Alias (word*) bsearch16u::items#11 = (word*) bsearch16u::items#14 (word*) bsearch16u::items#13 +Alias (byte) init_angle_screen::x#1 = (byte) init_angle_screen::x#2 +Alias (byte) init_angle_screen::xb#1 = (byte) init_angle_screen::xb#2 +Alias (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#6 +Alias (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#6 +Alias (byte) init_dist_screen::x#1 = (byte) init_dist_screen::x#2 +Alias (byte) init_dist_screen::xb#1 = (byte) init_dist_screen::xb#2 +Alias (byte) init_dist_screen::x#13 = (byte) init_dist_screen::x#9 (byte) init_dist_screen::x#14 +Alias (byte) init_dist_screen::xb#12 = (byte) init_dist_screen::xb#14 (byte) init_dist_screen::xb#13 +Alias (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#11 (byte) init_dist_screen::x#12 +Alias (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#11 (byte) init_dist_screen::xb#9 +Successful SSA optimization Pass2AliasElimination +Alias (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#13 +Alias (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#12 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) bsearch16u::num#12 (const byte) bsearch16u::num#2 +Identical Phi Values (word*) bsearch16u::items#15 (word*) bsearch16u::items#1 +Identical Phi Values (byte) init_angle_screen::x#7 (const byte) init_angle_screen::x#0 +Identical Phi Values (byte) init_angle_screen::xb#7 (const byte) init_angle_screen::xb#0 +Identical Phi Values (byte) init_dist_screen::x#15 (const byte) init_dist_screen::x#0 +Identical Phi Values (byte) init_dist_screen::xb#15 (const byte) init_dist_screen::xb#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [30] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD +Constant right-side identified [36] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 +Constant right-side identified [65] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 +Constant right-side identified [118] (byte*~) main::$6 ← (const byte*) SCREEN_FILL#0 + (word) $3e8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD Constant (const byte) init_squares::$2 = NUM_SQUARES#3-1 Constant (const byte) atan2_16::$16 = CORDIC_ITERATIONS_16#0-1 Constant (const byte*) main::$6 = SCREEN_FILL#0+$3e8 Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [37] init_squares::i#1 ← ++ init_squares::i#2 to ++ -Resolved ranged comparison value [38] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 -Resolved ranged next value [84] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ -Resolved ranged comparison value [85] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 +Removing PHI-reference to removed block (bsearch16u::@6_1) in block bsearch16u::@8 +if() condition always true - replacing block destination [208] if((const byte) bsearch16u::num#2>(byte) 0) goto bsearch16u::@7 +if() condition always true - replacing block destination [210] if((const byte) init_angle_screen::x#0<(byte) $13+(byte) 1) goto init_angle_screen::@3 +if() condition always true - replacing block destination [212] if((const byte) init_dist_screen::x#0<(byte) $13+(byte) 1) goto init_dist_screen::@6 +Successful SSA optimization Pass2ConstantIfs +Resolved ranged next value [43] init_squares::i#1 ← ++ init_squares::i#2 to ++ +Resolved ranged comparison value [44] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 +Resolved ranged next value [90] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ +Resolved ranged comparison value [91] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 Adding number conversion cast (unumber) init_squares::$2+1 in if((byte) init_squares::i#1!=(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) 1 in if((byte) init_squares::i#1!=(unumber)(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) atan2_16::$16+1 in if((byte) atan2_16::i#1==(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17 @@ -2398,6 +2432,8 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (word*) bsearch16u::items#11 = (word*) bsearch16u::items#2 +Successful SSA optimization Pass2AliasElimination Inlining Noop Cast [3] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 Inlining Noop Cast [10] (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#0 keeping bsearch16u::key#0 Inlining Noop Cast [11] (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0) keeping *(bsearch16u::pivot#0) @@ -2419,10 +2455,10 @@ Rewriting division to use shift [48] (word~) sqrt::$1 ← (word~) sqrt::$3 / (co Rewriting division to use shift [60] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2 Rewriting multiplication to use shift [74] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD Rewriting multiplication to use shift [78] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [120] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [120] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 * (byte) 2 Rewriting multiplication to use shift [124] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 * (byte) 2 Rewriting multiplication to use shift [151] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2 -Rewriting multiplication to use shift [162] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [162] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) malloc::size#1 Inlining constant with var siblings (const word) malloc::size#2 @@ -2464,7 +2500,8 @@ Constant inlined main::$6 = (const byte*) SCREEN_FILL#0+(word) $3e8 Constant inlined init_squares::$2 = (const byte) NUM_SQUARES#3-(byte) 1 Constant inlined atan2_16::$16 = (const byte) CORDIC_ITERATIONS_16#0-(byte) 1 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting bsearch16u::@18(between bsearch16u::@9 and bsearch16u::@10) +Added new block during phi lifting bsearch16u::@18(between bsearch16u::@6 and bsearch16u::@7) +Added new block during phi lifting bsearch16u::@19(between bsearch16u::@9 and bsearch16u::@10) Added new block during phi lifting init_squares::@4(between init_squares::@1 and init_squares::@1) Added new block during phi lifting atan2_16::@34(between atan2_16::@27 and atan2_16::@15) Added new block during phi lifting atan2_16::@35(between atan2_16::@15 and atan2_16::@17) @@ -2476,7 +2513,9 @@ Added new block during phi lifting main::@19(between main::@5 and main::@4) Added new block during phi lifting main::@20(between main::@4 and main::@5) Added new block during phi lifting main::@21(between main::@7 and main::@5) Added new block during phi lifting init_angle_screen::@10(between init_angle_screen::@4 and init_angle_screen::@1) +Added new block during phi lifting init_angle_screen::@11(between init_angle_screen::@2 and init_angle_screen::@3) Added new block during phi lifting init_dist_screen::@23(between init_dist_screen::@7 and init_dist_screen::@1) +Added new block during phi lifting init_dist_screen::@24(between init_dist_screen::@5 and init_dist_screen::@6) Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @12 @@ -2487,14 +2526,17 @@ Adding NOP phi() at start of @23 Adding NOP phi() at start of @end Adding NOP phi() at start of main::@18 Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of init_angle_screen::@2_1 Adding NOP phi() at start of init_dist_screen +Adding NOP phi() at start of init_dist_screen::@5_1 +Adding NOP phi() at start of bsearch16u CALL GRAPH Calls in [] to malloc:5 malloc:8 main:11 Calls in [main] to init_dist_screen:15 init_angle_screen:17 -Calls in [init_angle_screen] to atan2_16:69 -Calls in [init_dist_screen] to init_squares:156 sqr:168 sqr:188 sqrt:193 -Calls in [sqrt] to bsearch16u:210 -Calls in [init_squares] to malloc:250 +Calls in [init_angle_screen] to atan2_16:61 +Calls in [init_dist_screen] to init_squares:157 sqr:169 sqr:181 sqrt:186 +Calls in [sqrt] to bsearch16u:212 +Calls in [init_squares] to malloc:253 Created 48 initial phi equivalence classes Coalesced [7] heap_head#53 ← heap_head#1 @@ -2513,73 +2555,73 @@ Not coalescing [45] main::min_dist_angle#7 ← main::min_dist_angle#2 Coalesced (already) [46] main::min_fill#8 ← main::min_fill#5 Coalesced [49] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#0 Coalesced [50] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#0 -Coalesced [59] init_angle_screen::y#7 ← init_angle_screen::y#1 -Coalesced [60] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1 -Coalesced [61] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1 -Coalesced [83] init_angle_screen::x#5 ← init_angle_screen::x#1 -Coalesced [84] init_angle_screen::xb#5 ← init_angle_screen::xb#1 -Coalesced [87] atan2_16::yi#17 ← atan2_16::$2 -Coalesced [91] atan2_16::xi#14 ← atan2_16::$7 -Coalesced [93] atan2_16::yi#19 ← atan2_16::yi#0 -Coalesced [94] atan2_16::xi#16 ← atan2_16::xi#0 -Coalesced [97] atan2_16::angle#22 ← atan2_16::angle#12 -Coalesced [102] atan2_16::angle#27 ← atan2_16::angle#4 -Coalesced [106] atan2_16::return#5 ← atan2_16::angle#5 -Coalesced [109] atan2_16::return#6 ← atan2_16::angle#11 -Coalesced [110] atan2_16::angle#26 ← atan2_16::angle#1 -Not coalescing [111] atan2_16::shift#5 ← atan2_16::i#2 -Not coalescing [112] atan2_16::xd#10 ← atan2_16::xi#3 -Not coalescing [113] atan2_16::yd#10 ← atan2_16::yi#3 -Coalesced [119] atan2_16::yd#13 ← atan2_16::yd#2 -Coalesced [120] atan2_16::xd#13 ← atan2_16::xd#2 -Coalesced [127] atan2_16::yi#21 ← atan2_16::yi#2 -Coalesced [128] atan2_16::angle#25 ← atan2_16::angle#3 -Coalesced [129] atan2_16::xi#18 ← atan2_16::xi#2 -Coalesced [133] atan2_16::yi#18 ← atan2_16::yi#8 -Coalesced [134] atan2_16::xi#15 ← atan2_16::xi#8 -Coalesced [135] atan2_16::i#12 ← atan2_16::i#1 -Coalesced [136] atan2_16::angle#21 ← atan2_16::angle#13 -Coalesced (already) [137] atan2_16::angle#23 ← atan2_16::angle#13 -Coalesced [142] atan2_16::yi#20 ← atan2_16::yi#1 -Coalesced [143] atan2_16::angle#24 ← atan2_16::angle#2 -Coalesced [144] atan2_16::xi#17 ← atan2_16::xi#1 -Coalesced [145] atan2_16::yd#12 ← atan2_16::yd#3 -Coalesced [146] atan2_16::xd#12 ← atan2_16::xd#3 -Coalesced [150] atan2_16::shift#6 ← atan2_16::shift#1 -Coalesced [151] atan2_16::xd#11 ← atan2_16::xd#1 -Coalesced [152] atan2_16::yd#11 ← atan2_16::yd#1 -Not coalescing [153] atan2_16::xi#13 ← atan2_16::x#0 -Not coalescing [154] atan2_16::yi#16 ← atan2_16::y#0 -Coalesced [158] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0 -Coalesced [159] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0 -Coalesced [164] init_dist_screen::yd#2 ← init_dist_screen::$5 -Coalesced [167] sqr::val#4 ← sqr::val#0 -Coalesced [178] init_dist_screen::y#15 ← init_dist_screen::y#1 -Coalesced [179] init_dist_screen::screen_topline#16 ← init_dist_screen::screen_topline#1 -Coalesced [180] init_dist_screen::screen_bottomline#16 ← init_dist_screen::screen_bottomline#1 -Coalesced [184] init_dist_screen::xd#2 ← init_dist_screen::$14 -Coalesced [187] sqr::val#3 ← sqr::val#1 -Coalesced [202] init_dist_screen::x#9 ← init_dist_screen::x#1 -Coalesced [203] init_dist_screen::xb#9 ← init_dist_screen::xb#1 -Coalesced [205] init_dist_screen::xd#1 ← init_dist_screen::$16 -Coalesced [207] init_dist_screen::yd#1 ← init_dist_screen::$7 -Coalesced [217] bsearch16u::items#10 ← bsearch16u::items#1 -Coalesced [222] bsearch16u::return#9 ← bsearch16u::$2 -Coalesced [224] bsearch16u::return#7 ← bsearch16u::return#2 -Coalesced [227] bsearch16u::return#8 ← bsearch16u::items#2 -Not coalescing [233] bsearch16u::return#6 ← bsearch16u::pivot#0 -Coalesced [237] bsearch16u::num#10 ← bsearch16u::num#1 -Coalesced [238] bsearch16u::items#12 ← bsearch16u::items#0 -Coalesced [241] bsearch16u::num#9 ← bsearch16u::num#0 -Coalesced [242] bsearch16u::items#11 ← bsearch16u::items#8 -Coalesced [243] bsearch16u::num#11 ← bsearch16u::num#3 -Coalesced (already) [244] bsearch16u::items#13 ← bsearch16u::items#2 -Coalesced (already) [249] heap_head#54 ← heap_head#1 -Coalesced [253] init_squares::squares#4 ← init_squares::squares#0 -Coalesced [263] init_squares::sqr#3 ← init_squares::sqr#1 -Coalesced [264] init_squares::squares#3 ← init_squares::squares#1 -Coalesced [265] init_squares::i#3 ← init_squares::i#1 -Not coalescing [268] heap_head#1 ← malloc::mem#0 +Coalesced [81] init_angle_screen::y#7 ← init_angle_screen::y#1 +Coalesced [82] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1 +Coalesced [83] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1 +Coalesced [84] init_angle_screen::x#8 ← init_angle_screen::x#1 +Coalesced [85] init_angle_screen::xb#8 ← init_angle_screen::xb#1 +Coalesced [88] atan2_16::yi#17 ← atan2_16::$2 +Coalesced [92] atan2_16::xi#14 ← atan2_16::$7 +Coalesced [94] atan2_16::yi#19 ← atan2_16::yi#0 +Coalesced [95] atan2_16::xi#16 ← atan2_16::xi#0 +Coalesced [98] atan2_16::angle#22 ← atan2_16::angle#12 +Coalesced [103] atan2_16::angle#27 ← atan2_16::angle#4 +Coalesced [107] atan2_16::return#5 ← atan2_16::angle#5 +Coalesced [110] atan2_16::return#6 ← atan2_16::angle#11 +Coalesced [111] atan2_16::angle#26 ← atan2_16::angle#1 +Not coalescing [112] atan2_16::shift#5 ← atan2_16::i#2 +Not coalescing [113] atan2_16::xd#10 ← atan2_16::xi#3 +Not coalescing [114] atan2_16::yd#10 ← atan2_16::yi#3 +Coalesced [120] atan2_16::yd#13 ← atan2_16::yd#2 +Coalesced [121] atan2_16::xd#13 ← atan2_16::xd#2 +Coalesced [128] atan2_16::yi#21 ← atan2_16::yi#2 +Coalesced [129] atan2_16::angle#25 ← atan2_16::angle#3 +Coalesced [130] atan2_16::xi#18 ← atan2_16::xi#2 +Coalesced [134] atan2_16::yi#18 ← atan2_16::yi#8 +Coalesced [135] atan2_16::xi#15 ← atan2_16::xi#8 +Coalesced [136] atan2_16::i#12 ← atan2_16::i#1 +Coalesced [137] atan2_16::angle#21 ← atan2_16::angle#13 +Coalesced (already) [138] atan2_16::angle#23 ← atan2_16::angle#13 +Coalesced [143] atan2_16::yi#20 ← atan2_16::yi#1 +Coalesced [144] atan2_16::angle#24 ← atan2_16::angle#2 +Coalesced [145] atan2_16::xi#17 ← atan2_16::xi#1 +Coalesced [146] atan2_16::yd#12 ← atan2_16::yd#3 +Coalesced [147] atan2_16::xd#12 ← atan2_16::xd#3 +Coalesced [151] atan2_16::shift#6 ← atan2_16::shift#1 +Coalesced [152] atan2_16::xd#11 ← atan2_16::xd#1 +Coalesced [153] atan2_16::yd#11 ← atan2_16::yd#1 +Not coalescing [154] atan2_16::xi#13 ← atan2_16::x#0 +Not coalescing [155] atan2_16::yi#16 ← atan2_16::y#0 +Coalesced [159] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0 +Coalesced [160] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0 +Coalesced [165] init_dist_screen::yd#2 ← init_dist_screen::$5 +Coalesced [168] sqr::val#4 ← sqr::val#0 +Coalesced [177] init_dist_screen::xd#2 ← init_dist_screen::$14 +Coalesced [180] sqr::val#3 ← sqr::val#1 +Coalesced [201] init_dist_screen::y#15 ← init_dist_screen::y#1 +Coalesced [202] init_dist_screen::screen_topline#16 ← init_dist_screen::screen_topline#1 +Coalesced [203] init_dist_screen::screen_bottomline#16 ← init_dist_screen::screen_bottomline#1 +Coalesced [204] init_dist_screen::x#16 ← init_dist_screen::x#1 +Coalesced [205] init_dist_screen::xb#16 ← init_dist_screen::xb#1 +Coalesced [207] init_dist_screen::xd#1 ← init_dist_screen::$16 +Coalesced [209] init_dist_screen::yd#1 ← init_dist_screen::$7 +Coalesced [220] bsearch16u::items#17 ← bsearch16u::items#1 +Coalesced [227] bsearch16u::return#6 ← bsearch16u::pivot#0 +Coalesced [233] bsearch16u::num#14 ← bsearch16u::num#1 +Coalesced [234] bsearch16u::items#18 ← bsearch16u::items#0 +Coalesced [240] bsearch16u::return#9 ← bsearch16u::$2 +Coalesced [242] bsearch16u::return#7 ← bsearch16u::return#2 +Coalesced [243] bsearch16u::return#8 ← bsearch16u::items#11 +Coalesced [244] bsearch16u::num#13 ← bsearch16u::num#0 +Not coalescing [245] bsearch16u::items#16 ← bsearch16u::items#11 +Coalesced [246] bsearch16u::num#15 ← bsearch16u::num#10 +Not coalescing [247] bsearch16u::items#19 ← bsearch16u::items#10 +Coalesced (already) [252] heap_head#54 ← heap_head#1 +Coalesced [256] init_squares::squares#4 ← init_squares::squares#0 +Coalesced [266] init_squares::sqr#3 ← init_squares::sqr#1 +Coalesced [267] init_squares::squares#3 ← init_squares::squares#1 +Coalesced [268] init_squares::i#3 ← init_squares::i#1 +Not coalescing [271] heap_head#1 ← malloc::mem#0 Coalesced down to 38 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @12 @@ -2587,16 +2629,21 @@ Culled Empty Block (label) @15 Culled Empty Block (label) @23 Culled Empty Block (label) main::@18 Culled Empty Block (label) main::@1 +Culled Empty Block (label) init_angle_screen::@2_1 Culled Empty Block (label) init_angle_screen::@10 +Culled Empty Block (label) init_angle_screen::@11 Culled Empty Block (label) atan2_16::@35 Culled Empty Block (label) atan2_16::@39 Culled Empty Block (label) atan2_16::@38 Culled Empty Block (label) atan2_16::@34 Culled Empty Block (label) atan2_16::@36 Culled Empty Block (label) atan2_16::@37 +Culled Empty Block (label) init_dist_screen::@5_1 Culled Empty Block (label) init_dist_screen::@23 +Culled Empty Block (label) init_dist_screen::@24 +Culled Empty Block (label) bsearch16u::@6_1 +Culled Empty Block (label) bsearch16u::@13 Culled Empty Block (label) bsearch16u::@1 -Culled Empty Block (label) bsearch16u::@18 Culled Empty Block (label) init_squares::@4 Renumbering block @17 to @1 Renumbering block @20 to @2 @@ -2609,8 +2656,9 @@ Renumbering block bsearch16u::@7 to bsearch16u::@4 Renumbering block bsearch16u::@8 to bsearch16u::@5 Renumbering block bsearch16u::@9 to bsearch16u::@6 Renumbering block bsearch16u::@10 to bsearch16u::@7 -Renumbering block bsearch16u::@13 to bsearch16u::@8 -Renumbering block bsearch16u::@15 to bsearch16u::@9 +Renumbering block bsearch16u::@15 to bsearch16u::@8 +Renumbering block bsearch16u::@18 to bsearch16u::@9 +Renumbering block bsearch16u::@19 to bsearch16u::@10 Renumbering block init_squares::@3 to init_squares::@2 Renumbering block sqrt::@2 to sqrt::@1 Renumbering block atan2_16::@13 to atan2_16::@9 @@ -2732,46 +2780,46 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an [33] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) [33] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) [33] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - to:init_angle_screen::@2 -init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [34] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [34] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [35] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 - to:init_angle_screen::@4 -init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [37] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [38] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [39] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 - to:init_angle_screen::@return -init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [40] return - to:@return -init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [42] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [43] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [46] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [47] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [48] call atan2_16 - [49] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + to:init_angle_screen::@3 +init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@2 + [34] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 ) + [34] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 ) + [35] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 + [36] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [37] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [38] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [39] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [40] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [41] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [42] call atan2_16 + [43] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [50] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [56] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [58] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [60] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [61] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [44] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [45] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [46] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [47] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 + [48] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [49] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 + [50] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [51] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 + [52] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 + [54] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 + [55] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 to:init_angle_screen::@2 +init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@5 + [56] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 + to:init_angle_screen::@4 +init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 + [57] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [58] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [59] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [60] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + to:init_angle_screen::@return +init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 + [61] return + to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@3 [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 @@ -2894,50 +2942,50 @@ init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_d to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@4 [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - to:init_dist_screen::@5 -init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@14 - [117] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 ) - [117] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 ) - [118] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 - to:init_dist_screen::@7 -init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 - [119] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 - [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 - [121] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [122] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 - to:init_dist_screen::@return -init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 - [123] return - to:@return -init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [124] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [125] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 + to:init_dist_screen::@6 +init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@5 + [117] (byte) init_dist_screen::xb#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#1 init_dist_screen::@12/(byte) $27 ) + [117] (byte) init_dist_screen::x#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#1 init_dist_screen::@12/(byte) 0 ) + [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 + [119] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 - [126] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [120] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9 - [127] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) - [128] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [129] call sqr - [130] (word) sqr::return#3 ← (word) sqr::return#0 + [121] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) + [122] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [123] call sqr + [124] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@13 init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@10 - [131] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [132] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [133] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [134] call sqrt - [135] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [126] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [128] call sqrt + [129] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@14 init_dist_screen::@14: scope:[init_dist_screen] from init_dist_screen::@13 - [136] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [137] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [138] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [139] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [140] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [141] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [142] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [130] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [131] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [132] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 + [133] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [134] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 + [135] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 + [136] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 to:init_dist_screen::@5 +init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@14 + [137] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 + to:init_dist_screen::@7 +init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 + [138] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 + [139] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 + [140] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [141] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 + to:init_dist_screen::@return +init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 + [142] return + to:@return init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 [143] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@10 @@ -2961,86 +3009,89 @@ sqrt::@return: scope:[sqrt] from sqrt::@1 to:@return bsearch16u: scope:[bsearch16u] from sqrt [154] phi() + to:bsearch16u::@4 +bsearch16u::@4: scope:[bsearch16u] from bsearch16u bsearch16u::@9 + [155] (word*) bsearch16u::items#10 ← phi( bsearch16u::@9/(word*~) bsearch16u::items#16 bsearch16u/(word*) bsearch16u::items#1 ) + [155] (byte) bsearch16u::num#10 ← phi( bsearch16u::@9/(byte) bsearch16u::num#0 bsearch16u/(const byte) NUM_SQUARES#3 ) + [156] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 + [157] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [158] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 + [159] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [160] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 + to:bsearch16u::@return +bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@4 + [161] (word*) bsearch16u::return#1 ← phi( bsearch16u::@4/(word*) bsearch16u::pivot#0 bsearch16u::@2/(word*) bsearch16u::return#2 ) + [162] return + to:@return +bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 + [163] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 + to:bsearch16u::@8 +bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@6 + [164] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [165] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 + to:bsearch16u::@7 +bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@10 bsearch16u::@8 + [166] (word*) bsearch16u::items#11 ← phi( bsearch16u::@8/(word*) bsearch16u::items#0 bsearch16u::@10/(word*~) bsearch16u::items#19 ) + [166] (byte) bsearch16u::num#5 ← phi( bsearch16u::@8/(byte) bsearch16u::num#1 bsearch16u::@10/(byte) bsearch16u::num#10 ) + [167] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 to:bsearch16u::@3 -bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [155] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [155] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [156] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 +bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@7 + [168] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + [169] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD + [170] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD to:bsearch16u::@2 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 - [159] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [171] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#11 bsearch16u::@1/(word*~) bsearch16u::$2 ) to:bsearch16u::@return -bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 - [160] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) - [161] return - to:@return -bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [165] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 - to:bsearch16u::@8 -bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 - to:bsearch16u::@return -bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [168] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 - to:bsearch16u::@9 -bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 +bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@3 + [172] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 + to:bsearch16u::@4 +bsearch16u::@10: scope:[bsearch16u] from bsearch16u::@6 + [173] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 to:bsearch16u::@7 -bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [171] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [171] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 - to:bsearch16u::@3 sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 - [173] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) - [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 - [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) + [174] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) + [175] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 + [176] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) to:sqr::@return sqr::@return: scope:[sqr] from sqr - [176] return + [177] return to:@return init_squares: scope:[init_squares] from init_dist_screen - [177] phi() - [178] call malloc + [178] phi() + [179] call malloc to:init_squares::@2 init_squares::@2: scope:[init_squares] from init_squares - [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 + [180] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + [181] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 - [181] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) - [181] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [181] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) - [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 - [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD - [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 - [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 - [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 - [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 - [188] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 + [182] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) + [182] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) + [182] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) + [183] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 + [184] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD + [185] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 + [186] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 + [187] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 + [188] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 + [189] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 - [189] return + [190] return to:@return malloc: scope:[malloc] from @1 @3 init_squares - [190] (word) malloc::size#3 ← phi( @1/(word) $3e8 @3/(word) $3e8 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) - [190] (byte*) heap_head#12 ← phi( @1/(const byte*) HEAP_TOP#0 @3/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) - [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 - [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 + [191] (word) malloc::size#3 ← phi( @1/(word) $3e8 @3/(word) $3e8 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) + [191] (byte*) heap_head#12 ← phi( @1/(const byte*) HEAP_TOP#0 @3/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) + [192] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 + [193] (byte*) heap_head#1 ← (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc - [193] return + [194] return to:@return @@ -3119,24 +3170,25 @@ VARIABLE REGISTER WEIGHTS (word*) bsearch16u::items (word*) bsearch16u::items#0 1001.0 (word*) bsearch16u::items#1 2.0 -(word*) bsearch16u::items#2 334.5555555555556 -(word*) bsearch16u::items#8 1501.5 +(word*) bsearch16u::items#10 429.2857142857143 +(word*) bsearch16u::items#11 752.25 +(word*~) bsearch16u::items#16 2002.0 +(word*~) bsearch16u::items#19 2002.0 (word) bsearch16u::key -(word) bsearch16u::key#0 0.26666666666666666 +(word) bsearch16u::key#0 0.23529411764705882 (byte) bsearch16u::num -(byte) bsearch16u::num#0 2002.0 +(byte) bsearch16u::num#0 1001.0 (byte) bsearch16u::num#1 2002.0 -(byte) bsearch16u::num#3 556.1111111111111 +(byte) bsearch16u::num#10 444.8888888888889 (byte) bsearch16u::num#5 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 501.0 +(word*) bsearch16u::pivot#0 750.75 (signed word) bsearch16u::result (signed word) bsearch16u::result#0 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 2.0 +(word*) bsearch16u::return#1 335.00000000000006 (word*) bsearch16u::return#2 6.0 (word*) bsearch16u::return#3 4.0 -(word*~) bsearch16u::return#6 4.0 (byte*) heap_head (byte*) heap_head#1 0.6000000000000001 (byte*) heap_head#12 6.0 @@ -3157,17 +3209,17 @@ VARIABLE REGISTER WEIGHTS (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#0 4.0 (byte*) init_angle_screen::screen_bottomline#1 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 9.04 +(byte*) init_angle_screen::screen_bottomline#6 9.040000000000001 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#0 2.0 (byte*) init_angle_screen::screen_topline#1 5.5 (byte*) init_angle_screen::screen_topline#6 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 101.0 -(byte) init_angle_screen::x#2 28.857142857142858 +(byte) init_angle_screen::x#5 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 202.0 -(byte) init_angle_screen::xb#2 18.363636363636363 +(byte) init_angle_screen::xb#1 101.0 +(byte) init_angle_screen::xb#5 19.238095238095237 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 33.666666666666664 (byte) init_angle_screen::y @@ -3195,12 +3247,12 @@ VARIABLE REGISTER WEIGHTS (byte*) init_dist_screen::screen_topline#11 7.0625 (byte) init_dist_screen::x (byte) init_dist_screen::x#1 101.0 -(byte) init_dist_screen::x#2 30.3 +(byte) init_dist_screen::x#10 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 202.0 -(byte) init_dist_screen::xb#2 19.238095238095237 +(byte) init_dist_screen::xb#1 101.0 +(byte) init_dist_screen::xb#10 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 303.0 (word) init_dist_screen::xds @@ -3289,8 +3341,8 @@ Initial phi equivalence classes [ init_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::x#2 init_angle_screen::x#1 ] -[ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +[ init_angle_screen::x#5 init_angle_screen::x#1 ] +[ init_angle_screen::xb#5 init_angle_screen::xb#1 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] [ atan2_16::i#2 atan2_16::i#1 ] @@ -3303,11 +3355,12 @@ Initial phi equivalence classes [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -[ init_dist_screen::x#2 init_dist_screen::x#1 ] -[ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +[ init_dist_screen::x#10 init_dist_screen::x#1 ] +[ init_dist_screen::xb#10 init_dist_screen::xb#1 ] [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +[ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] +[ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] +[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] [ sqr::val#2 sqr::val#1 sqr::val#0 ] [ init_squares::sqr#2 init_squares::sqr#1 ] [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] @@ -3351,7 +3404,6 @@ Added variable sqrt::$1 to zero page equivalence class [ sqrt::$1 ] Added variable sqrt::return#0 to zero page equivalence class [ sqrt::return#0 ] Added variable bsearch16u::$6 to zero page equivalence class [ bsearch16u::$6 ] Added variable bsearch16u::$16 to zero page equivalence class [ bsearch16u::$16 ] -Added variable bsearch16u::pivot#0 to zero page equivalence class [ bsearch16u::pivot#0 ] Added variable bsearch16u::result#0 to zero page equivalence class [ bsearch16u::result#0 ] Added variable sqr::$0 to zero page equivalence class [ sqr::$0 ] Added variable sqr::return#0 to zero page equivalence class [ sqr::return#0 ] @@ -3369,8 +3421,8 @@ Complete equivalence classes [ init_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::x#2 init_angle_screen::x#1 ] -[ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +[ init_angle_screen::x#5 init_angle_screen::x#1 ] +[ init_angle_screen::xb#5 init_angle_screen::xb#1 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] [ atan2_16::i#2 atan2_16::i#1 ] @@ -3383,11 +3435,12 @@ Complete equivalence classes [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -[ init_dist_screen::x#2 init_dist_screen::x#1 ] -[ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +[ init_dist_screen::x#10 init_dist_screen::x#1 ] +[ init_dist_screen::xb#10 init_dist_screen::xb#1 ] [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +[ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] +[ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] +[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] [ sqr::val#2 sqr::val#1 sqr::val#0 ] [ init_squares::sqr#2 init_squares::sqr#1 ] [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] @@ -3431,7 +3484,6 @@ Complete equivalence classes [ sqrt::return#0 ] [ bsearch16u::$6 ] [ bsearch16u::$16 ] -[ bsearch16u::pivot#0 ] [ bsearch16u::result#0 ] [ sqr::$0 ] [ sqr::return#0 ] @@ -3448,8 +3500,8 @@ Allocated zp ZP_WORD:12 [ main::min_dist_angle#3 main::min_dist_angle#7 main::mi Allocated zp ZP_BYTE:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Allocated zp ZP_WORD:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] Allocated zp ZP_WORD:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] -Allocated zp ZP_BYTE:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Allocated zp ZP_BYTE:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Allocated zp ZP_BYTE:19 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Allocated zp ZP_BYTE:20 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] Allocated zp ZP_WORD:21 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] Allocated zp ZP_WORD:23 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] Allocated zp ZP_BYTE:25 [ atan2_16::i#2 atan2_16::i#1 ] @@ -3462,55 +3514,55 @@ Allocated zp ZP_BYTE:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Allocated zp ZP_WORD:36 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] Allocated zp ZP_WORD:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] Allocated zp ZP_BYTE:40 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Allocated zp ZP_BYTE:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Allocated zp ZP_BYTE:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Allocated zp ZP_BYTE:41 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Allocated zp ZP_BYTE:42 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] Allocated zp ZP_BYTE:43 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -Allocated zp ZP_WORD:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -Allocated zp ZP_BYTE:46 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Allocated zp ZP_BYTE:47 [ sqr::val#2 sqr::val#1 sqr::val#0 ] -Allocated zp ZP_WORD:48 [ init_squares::sqr#2 init_squares::sqr#1 ] -Allocated zp ZP_WORD:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] -Allocated zp ZP_BYTE:52 [ init_squares::i#2 init_squares::i#1 ] -Allocated zp ZP_WORD:53 [ heap_head#12 heap_head#1 ] -Allocated zp ZP_WORD:55 [ malloc::size#3 ] -Allocated zp ZP_WORD:57 [ SCREEN_DIST#0 ] -Allocated zp ZP_WORD:59 [ SCREEN_ANGLE#0 ] -Allocated zp ZP_WORD:61 [ init_angle_screen::screen#0 ] -Allocated zp ZP_BYTE:63 [ init_angle_screen::$3 ] -Allocated zp ZP_BYTE:64 [ init_angle_screen::$4 ] -Allocated zp ZP_WORD:65 [ init_angle_screen::xw#0 ] -Allocated zp ZP_BYTE:67 [ init_angle_screen::$7 ] -Allocated zp ZP_WORD:68 [ init_angle_screen::yw#0 ] -Allocated zp ZP_WORD:70 [ atan2_16::x#0 ] -Allocated zp ZP_WORD:72 [ atan2_16::y#0 ] -Allocated zp ZP_WORD:74 [ atan2_16::return#2 ] -Allocated zp ZP_WORD:76 [ init_angle_screen::angle_w#0 ] -Allocated zp ZP_WORD:78 [ init_angle_screen::$11 ] -Allocated zp ZP_BYTE:80 [ init_angle_screen::ang_w#0 ] -Allocated zp ZP_BYTE:81 [ init_angle_screen::$13 ] -Allocated zp ZP_BYTE:82 [ init_angle_screen::$14 ] -Allocated zp ZP_BYTE:83 [ init_angle_screen::$15 ] -Allocated zp ZP_BYTE:84 [ atan2_16::$24 ] -Allocated zp ZP_BYTE:85 [ atan2_16::$23 ] -Allocated zp ZP_BYTE:86 [ init_dist_screen::y2#0 ] -Allocated zp ZP_WORD:87 [ sqr::return#2 ] -Allocated zp ZP_WORD:89 [ init_dist_screen::yds#0 ] -Allocated zp ZP_BYTE:91 [ init_dist_screen::x2#0 ] -Allocated zp ZP_WORD:92 [ sqr::return#3 ] -Allocated zp ZP_WORD:94 [ init_dist_screen::xds#0 ] -Allocated zp ZP_WORD:96 [ init_dist_screen::ds#0 ] -Allocated zp ZP_WORD:98 [ sqrt::val#0 ] -Allocated zp ZP_BYTE:100 [ sqrt::return#2 ] -Allocated zp ZP_BYTE:101 [ init_dist_screen::d#0 ] -Allocated zp ZP_WORD:102 [ bsearch16u::key#0 ] -Allocated zp ZP_WORD:104 [ bsearch16u::return#3 ] -Allocated zp ZP_WORD:106 [ sqrt::found#0 ] -Allocated zp ZP_WORD:108 [ sqrt::$3 ] -Allocated zp ZP_WORD:110 [ sqrt::$1 ] -Allocated zp ZP_BYTE:112 [ sqrt::return#0 ] -Allocated zp ZP_BYTE:113 [ bsearch16u::$6 ] -Allocated zp ZP_BYTE:114 [ bsearch16u::$16 ] -Allocated zp ZP_WORD:115 [ bsearch16u::pivot#0 ] +Allocated zp ZP_WORD:44 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] +Allocated zp ZP_WORD:46 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] +Allocated zp ZP_BYTE:48 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] +Allocated zp ZP_BYTE:49 [ sqr::val#2 sqr::val#1 sqr::val#0 ] +Allocated zp ZP_WORD:50 [ init_squares::sqr#2 init_squares::sqr#1 ] +Allocated zp ZP_WORD:52 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] +Allocated zp ZP_BYTE:54 [ init_squares::i#2 init_squares::i#1 ] +Allocated zp ZP_WORD:55 [ heap_head#12 heap_head#1 ] +Allocated zp ZP_WORD:57 [ malloc::size#3 ] +Allocated zp ZP_WORD:59 [ SCREEN_DIST#0 ] +Allocated zp ZP_WORD:61 [ SCREEN_ANGLE#0 ] +Allocated zp ZP_WORD:63 [ init_angle_screen::screen#0 ] +Allocated zp ZP_BYTE:65 [ init_angle_screen::$3 ] +Allocated zp ZP_BYTE:66 [ init_angle_screen::$4 ] +Allocated zp ZP_WORD:67 [ init_angle_screen::xw#0 ] +Allocated zp ZP_BYTE:69 [ init_angle_screen::$7 ] +Allocated zp ZP_WORD:70 [ init_angle_screen::yw#0 ] +Allocated zp ZP_WORD:72 [ atan2_16::x#0 ] +Allocated zp ZP_WORD:74 [ atan2_16::y#0 ] +Allocated zp ZP_WORD:76 [ atan2_16::return#2 ] +Allocated zp ZP_WORD:78 [ init_angle_screen::angle_w#0 ] +Allocated zp ZP_WORD:80 [ init_angle_screen::$11 ] +Allocated zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] +Allocated zp ZP_BYTE:83 [ init_angle_screen::$13 ] +Allocated zp ZP_BYTE:84 [ init_angle_screen::$14 ] +Allocated zp ZP_BYTE:85 [ init_angle_screen::$15 ] +Allocated zp ZP_BYTE:86 [ atan2_16::$24 ] +Allocated zp ZP_BYTE:87 [ atan2_16::$23 ] +Allocated zp ZP_BYTE:88 [ init_dist_screen::y2#0 ] +Allocated zp ZP_WORD:89 [ sqr::return#2 ] +Allocated zp ZP_WORD:91 [ init_dist_screen::yds#0 ] +Allocated zp ZP_BYTE:93 [ init_dist_screen::x2#0 ] +Allocated zp ZP_WORD:94 [ sqr::return#3 ] +Allocated zp ZP_WORD:96 [ init_dist_screen::xds#0 ] +Allocated zp ZP_WORD:98 [ init_dist_screen::ds#0 ] +Allocated zp ZP_WORD:100 [ sqrt::val#0 ] +Allocated zp ZP_BYTE:102 [ sqrt::return#2 ] +Allocated zp ZP_BYTE:103 [ init_dist_screen::d#0 ] +Allocated zp ZP_WORD:104 [ bsearch16u::key#0 ] +Allocated zp ZP_WORD:106 [ bsearch16u::return#3 ] +Allocated zp ZP_WORD:108 [ sqrt::found#0 ] +Allocated zp ZP_WORD:110 [ sqrt::$3 ] +Allocated zp ZP_WORD:112 [ sqrt::$1 ] +Allocated zp ZP_BYTE:114 [ sqrt::return#0 ] +Allocated zp ZP_BYTE:115 [ bsearch16u::$6 ] +Allocated zp ZP_BYTE:116 [ bsearch16u::$16 ] Allocated zp ZP_WORD:117 [ bsearch16u::result#0 ] Allocated zp ZP_BYTE:119 [ sqr::$0 ] Allocated zp ZP_WORD:120 [ sqr::return#0 ] @@ -3538,12 +3590,12 @@ Target platform is c64basic // Char to fill with .const FILL_CHAR = '@' .const NUM_SQUARES = $30 - .label heap_head = $35 + .label heap_head = $37 .label SQUARES = $7a // Screen containing distance to center - .label SCREEN_DIST = $39 + .label SCREEN_DIST = $3b // Screen containing angle to center - .label SCREEN_ANGLE = $3b + .label SCREEN_ANGLE = $3d // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -3552,14 +3604,14 @@ b1_from_bbegin: // @1 b1: // [2] call malloc - // [190] phi from @1 to malloc [phi:@1->malloc] + // [191] phi from @1 to malloc [phi:@1->malloc] malloc_from_b1: - // [190] phi (word) malloc::size#3 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 + // [191] phi (word) malloc::size#3 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta malloc.size lda #>$3e8 sta malloc.size+1 - // [190] phi (byte*) heap_head#12 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 + // [191] phi (byte*) heap_head#12 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -3574,14 +3626,14 @@ b3: lda malloc.mem+1 sta SCREEN_DIST+1 // [4] call malloc - // [190] phi from @3 to malloc [phi:@3->malloc] + // [191] phi from @3 to malloc [phi:@3->malloc] malloc_from_b3: - // [190] phi (word) malloc::size#3 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 + // [191] phi (word) malloc::size#3 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta malloc.size lda #>$3e8 sta malloc.size+1 - // [190] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy + // [191] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy jsr malloc jmp b4 // @4 @@ -3791,22 +3843,22 @@ main: { // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center -// init_angle_screen(byte* zeropage($3d) screen) +// init_angle_screen(byte* zeropage($3f) screen) init_angle_screen: { - .label _3 = $3f - .label _4 = $40 - .label _7 = $43 - .label _11 = $4e - .label _13 = $51 - .label _14 = $52 - .label _15 = $53 - .label screen = $3d + .label _3 = $41 + .label _4 = $42 + .label _7 = $45 + .label _11 = $50 + .label _13 = $53 + .label _14 = $54 + .label _15 = $55 + .label screen = $3f .label screen_topline = $f .label screen_bottomline = $11 - .label xw = $41 - .label yw = $44 - .label angle_w = $4c - .label ang_w = $50 + .label xw = $43 + .label yw = $46 + .label angle_w = $4e + .label ang_w = $52 .label x = $13 .label xb = $14 .label y = $e @@ -3842,89 +3894,58 @@ init_angle_screen: { jmp b1 // init_angle_screen::@1 b1: - // [34] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - b2_from_b1: - // [34] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [34] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + b3_from_b1: + // [34] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [34] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [34] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b2 - // init_angle_screen::@2 - b2: - // [35] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - jmp b4 - // init_angle_screen::@4 - b4: - // [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // [37] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // [38] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [39] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b4 - jmp breturn - // init_angle_screen::@return - breturn: - // [40] return - rts + jmp b3 + // [34] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + b3_from_b2: + // [34] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [34] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy + jmp b3 // init_angle_screen::@3 b3: - // [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [35] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta _3 - // [42] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 + // [36] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc _3 sta _4 - // [43] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [37] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _4 ldy #0 sta xw+1 sty xw - // [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [38] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda y asl sta _7 - // [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [39] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _7 ldy #0 sta yw+1 sty yw - // [46] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 + // [40] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 lda xw sta atan2_16.x lda xw+1 sta atan2_16.x+1 - // [47] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 + // [41] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 lda yw sta atan2_16.y lda yw+1 sta atan2_16.y+1 - // [48] call atan2_16 + // [42] call atan2_16 jsr atan2_16 - // [49] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 + // [43] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 lda atan2_16.return sta atan2_16.return_2 lda atan2_16.return+1 @@ -3932,12 +3953,12 @@ init_angle_screen: { jmp b5 // init_angle_screen::@5 b5: - // [50] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 + // [44] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 lda atan2_16.return_2 sta angle_w lda atan2_16.return_2+1 sta angle_w+1 - // [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 + // [45] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 lda #$80 clc adc angle_w @@ -3945,60 +3966,92 @@ init_angle_screen: { lda #0 adc angle_w+1 sta _11+1 - // [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [46] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w - // [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [47] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 + // [48] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 lda ang_w eor #$ff clc adc #1 sta _13 - // [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 + // [49] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 lda _13 ldy xb sta (screen_topline),y - // [56] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 + // [50] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 lax ang_w axs #-[$80] stx _14 - // [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 + // [51] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 lda _14 ldy x sta (screen_topline),y - // [58] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 + // [52] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$80 sec sbc ang_w sta _15 - // [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 + // [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 lda _15 ldy x sta (screen_bottomline),y - // [60] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [54] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [61] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [55] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [34] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - b2_from_b5: - // [34] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [34] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp b2 + // init_angle_screen::@2 + b2: + // [56] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3_from_b2 + jmp b4 + // init_angle_screen::@4 + b4: + // [57] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // [58] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // [59] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [60] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b4 + jmp breturn + // init_angle_screen::@return + breturn: + // [61] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($46) x, signed word zeropage($48) y) +// atan2_16(signed word zeropage($48) x, signed word zeropage($4a) y) atan2_16: { .label _2 = $15 .label _7 = $17 - .label _23 = $55 - .label _24 = $54 + .label _23 = $57 + .label _24 = $56 .label yi = $15 .label xi = $17 .label angle = $1c @@ -4009,9 +4062,9 @@ atan2_16: { .label angle_3 = $1a .label i = $19 .label return = $1c - .label x = $46 - .label y = $48 - .label return_2 = $4a + .label x = $48 + .label y = $4a + .label return_2 = $4c .label angle_6 = $1a .label angle_12 = $1a .label angle_13 = $1a @@ -4335,20 +4388,20 @@ init_dist_screen: { .label _16 = $2b .label screen = $24 .label screen_bottomline = $26 - .label y2 = $56 + .label y2 = $58 .label yd = $28 - .label yds = $59 - .label x2 = $5b + .label yds = $5b + .label x2 = $5d .label screen_topline = $24 .label y = $23 .label xd = $2b - .label xds = $5e - .label ds = $60 - .label d = $65 + .label xds = $60 + .label ds = $62 + .label d = $67 .label x = $29 .label xb = $2a // [106] call init_squares - // [177] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [178] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares jmp b11 @@ -4405,9 +4458,9 @@ init_dist_screen: { lda yd sta sqr.val // [114] call sqr - // [173] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [174] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from_b4: - // [173] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [174] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // [115] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return @@ -4422,85 +4475,54 @@ init_dist_screen: { sta yds lda sqr.return_2+1 sta yds+1 - // [117] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - b5_from_b12: - // [117] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [117] phi from init_dist_screen::@12 to init_dist_screen::@6 [phi:init_dist_screen::@12->init_dist_screen::@6] + b6_from_b12: + // [117] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@6#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [117] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [117] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@6#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b5 - // init_dist_screen::@5 - b5: - // [118] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b6 - jmp b7 - // init_dist_screen::@7 - b7: - // [119] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - // [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - // [121] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 - inc y - // [122] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b7 - jmp breturn - // init_dist_screen::@return - breturn: - // [123] return - rts + jmp b6 + // [117] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6] + b6_from_b5: + // [117] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy + // [117] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy + jmp b6 // init_dist_screen::@6 b6: - // [124] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta x2 - // [125] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuz1_ge_vbuc1_then_la1 + // [119] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuz1_ge_vbuc1_then_la1 lda x2 cmp #$27 bcs b8 jmp b9 // init_dist_screen::@9 b9: - // [126] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 + // [120] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc x2 sta _14 - // [127] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [121] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] b10_from_b8: b10_from_b9: - // [127] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [121] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy jmp b10 // init_dist_screen::@10 b10: - // [128] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 + // [122] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 lda xd sta sqr.val - // [129] call sqr - // [173] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] + // [123] call sqr + // [174] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] sqr_from_b10: - // [173] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy + // [174] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr - // [130] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [124] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return sta sqr.return_3 lda sqr.return+1 @@ -4508,12 +4530,12 @@ init_dist_screen: { jmp b13 // init_dist_screen::@13 b13: - // [131] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 + // [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 lda sqr.return_3 sta xds lda sqr.return_3+1 sta xds+1 - // [132] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 + // [126] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 lda xds clc adc yds @@ -4521,47 +4543,79 @@ init_dist_screen: { lda xds+1 adc yds+1 sta ds+1 - // [133] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 + // [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 lda ds sta sqrt.val lda ds+1 sta sqrt.val+1 - // [134] call sqrt + // [128] call sqrt jsr sqrt - // [135] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 + // [129] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 lda sqrt.return sta sqrt.return_2 jmp b14 // init_dist_screen::@14 b14: - // [136] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 + // [130] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 lda sqrt.return_2 sta d - // [137] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [131] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy x sta (screen_topline),y - // [138] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [132] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy x sta (screen_bottomline),y - // [139] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [133] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy xb sta (screen_topline),y - // [140] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [134] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy xb sta (screen_bottomline),y - // [141] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [135] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 inc x - // [142] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [136] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 dec xb - // [117] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] - b5_from_b14: - // [117] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy - // [117] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy jmp b5 + // init_dist_screen::@5 + b5: + // [137] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b6_from_b5 + jmp b7 + // init_dist_screen::@7 + b7: + // [138] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + // [139] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + // [140] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + inc y + // [141] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b7 + jmp breturn + // init_dist_screen::@return + breturn: + // [142] return + rts // init_dist_screen::@8 b8: // [143] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 @@ -4581,14 +4635,14 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($62) val) +// sqrt(word zeropage($64) val) sqrt: { - .label _1 = $6e - .label _3 = $6c - .label found = $6a - .label return = $70 - .label val = $62 - .label return_2 = $64 + .label _1 = $70 + .label _3 = $6e + .label found = $6c + .label return = $72 + .label val = $64 + .label return_2 = $66 // [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 lda val sta bsearch16u.key @@ -4596,9 +4650,9 @@ sqrt: { sta bsearch16u.key+1 // [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES - sta bsearch16u.items + sta bsearch16u.items_1 lda SQUARES+1 - sta bsearch16u.items+1 + sta bsearch16u.items_1+1 // [147] call bsearch16u // [154] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: @@ -4646,34 +4700,112 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($66) key, word* zeropage($2c) items, byte zeropage($2e) num) +// bsearch16u(word zeropage($68) key, word* zeropage($2e) items, byte zeropage($30) num) bsearch16u: { - .label _2 = $2c - .label _6 = $71 - .label _16 = $72 - .label pivot = $73 + .label _2 = $2e + .label _6 = $73 + .label _16 = $74 + .label pivot = $2e .label result = $75 - .label return = $2c - .label num = $2e - .label items = $2c - .label key = $66 - .label return_3 = $68 - // [155] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - b3_from_bsearch16u: - // [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [155] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 + .label return = $2e + .label num = $30 + .label items = $2e + .label key = $68 + .label items_1 = $2c + .label return_3 = $6a + .label items_10 = $2c + .label items_16 = $2c + // [155] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4] + b4_from_bsearch16u: + // [155] phi (word*) bsearch16u::items#10 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@4#0] -- register_copy + // [155] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuz1=vbuc1 lda #NUM_SQUARES sta num + jmp b4 + // bsearch16u::@4 + b4: + // [156] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuz1=vbuz2_ror_1 + lda num + lsr + sta _6 + // [157] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda _6 + asl + sta _16 + // [158] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 + lda _16 + clc + adc items_10 + sta pivot + lda #0 + adc items_10+1 + sta pivot+1 + // [159] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + sec + lda key + ldy #0 + sbc (pivot),y + sta result + lda key+1 + iny + sbc (pivot),y + sta result+1 + // [160] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + lda result+1 + bne b6 + lda result + bne b6 + // [161] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return] + breturn_from_b2: + breturn_from_b4: + // [161] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy + jmp breturn + // bsearch16u::@return + breturn: + // [162] return + rts + // bsearch16u::@6 + b6: + // [163] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 + lda result+1 + bmi b10 + bne !+ + lda result + beq b10 + !: + jmp b8 + // bsearch16u::@8 + b8: + // [164] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + lda #1*SIZEOF_WORD + clc + adc items + sta items + bcc !+ + inc items+1 + !: + // [165] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuz1=_dec_vbuz1 + dec num + // [166] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7] + b7_from_b10: + b7_from_b8: + // [166] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#19 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy + // [166] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy + jmp b7 + // bsearch16u::@7 + b7: + // [167] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + lsr num jmp b3 // bsearch16u::@3 b3: - // [156] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 + // [168] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuz1_gt_0_then_la1 lda num - bne b4 + bne b9 jmp b5 // bsearch16u::@5 b5: - // [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [169] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp key+1 @@ -4687,7 +4819,7 @@ bsearch16u: { jmp b1 // bsearch16u::@1 b1: - // [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [170] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -4695,117 +4827,50 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [159] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [171] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] b2_from_b1: b2_from_b5: - // [159] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [171] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp b2 // bsearch16u::@2 b2: - // [160] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - breturn_from_b2: - breturn_from_b8: - // [160] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy - jmp breturn - // bsearch16u::@return - breturn: - // [161] return - rts - // bsearch16u::@4 - b4: - // [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 - lda num - lsr - sta _6 - // [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 - lda _6 - asl - sta _16 - // [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 - lda _16 - clc - adc items - sta pivot - lda #0 - adc items+1 - sta pivot+1 - // [165] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 - sec - lda key - ldy #0 - sbc (pivot),y - sta result - lda key+1 - iny - sbc (pivot),y - sta result+1 - // [166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 - lda result+1 - bne b6 - lda result - bne b6 - jmp b8 - // bsearch16u::@8 - b8: - // [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 - lda pivot - sta return - lda pivot+1 - sta return+1 - jmp breturn_from_b8 - // bsearch16u::@6 - b6: - // [168] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 - lda result+1 - bmi b7_from_b6 - bne !+ - lda result - beq b7_from_b6 - !: - jmp b9 + jmp breturn_from_b2 // bsearch16u::@9 b9: - // [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 - lda #1*SIZEOF_WORD - clc - adc pivot + // [172] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 + lda items + sta items_16 + lda items+1 + sta items_16+1 + // [155] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4] + b4_from_b9: + // [155] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy + // [155] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy + jmp b4 + // bsearch16u::@10 + b10: + // [173] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 + lda items_10 sta items - lda #0 - adc pivot+1 + lda items_10+1 sta items+1 - // [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 - dec num - // [171] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - b7_from_b6: - b7_from_b9: - // [171] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [171] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy - jmp b7 - // bsearch16u::@7 - b7: - // [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 - lsr num - // [155] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - b3_from_b7: - // [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [155] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy - jmp b3 + jmp b7_from_b10 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() -// sqr(byte zeropage($2f) val) +// sqr(byte zeropage($31) val) sqr: { .label _0 = $77 .label return = $78 - .label val = $2f - .label return_2 = $57 - .label return_3 = $5c - // [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + .label val = $31 + .label return_2 = $59 + .label return_3 = $5e + // [175] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda val asl sta _0 - // [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 + // [176] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 ldy _0 lda (SQUARES),y sta return @@ -4815,7 +4880,7 @@ sqr: { jmp breturn // sqr::@return breturn: - // [176] return + // [177] return rts } // init_squares @@ -4824,60 +4889,60 @@ sqr: { init_squares: { .label _3 = $7c .label _4 = $7d - .label squares = $32 - .label sqr = $30 - .label i = $34 - // [178] call malloc - // [190] phi from init_squares to malloc [phi:init_squares->malloc] + .label squares = $34 + .label sqr = $32 + .label i = $36 + // [179] call malloc + // [191] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: - // [190] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 + // [191] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #NUM_SQUARES*SIZEOF_WORD sta malloc.size+1 - // [190] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy + // [191] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy jsr malloc jmp b2 // init_squares::@2 b2: - // [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + // [180] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda malloc.mem sta SQUARES lda malloc.mem+1 sta SQUARES+1 - // [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [181] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta squares lda SQUARES+1 sta squares+1 - // [181] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [182] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] b1_from_b2: - // [181] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 + // [182] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 lda #0 sta i - // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [181] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [182] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [182] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 lda #<0 sta sqr lda #>0 sta sqr+1 jmp b1 - // [181] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [182] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] b1_from_b1: - // [181] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [181] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [182] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [182] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [182] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy jmp b1 // init_squares::@1 b1: - // [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [183] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y iny lda sqr+1 sta (squares),y - // [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [184] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -4885,15 +4950,15 @@ init_squares: { bcc !+ inc squares+1 !: - // [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [185] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _3 - // [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [186] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy _3 iny sty _4 - // [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 + // [187] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 lda _4 clc adc sqr @@ -4901,26 +4966,26 @@ init_squares: { bcc !+ inc sqr+1 !: - // [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 + // [188] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 inc i - // [188] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 + // [189] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_SQUARES-1+1 cmp i bne b1_from_b1 jmp breturn // init_squares::@return breturn: - // [189] return + // [190] return rts } // malloc // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. -// malloc(word zeropage($37) size) +// malloc(word zeropage($39) size) malloc: { .label mem = $7e - .label size = $37 - // [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz3 + .label size = $39 + // [192] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz3 lda heap_head sec sbc size @@ -4928,7 +4993,7 @@ malloc: { lda heap_head+1 sbc size+1 sta mem+1 - // [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [193] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda mem sta heap_head lda mem+1 @@ -4936,7 +5001,7 @@ malloc: { jmp breturn // malloc::@return breturn: - // [193] return + // [194] return rts } // File Data @@ -4965,113 +5030,114 @@ Statement [29] (word~) main::min_dist_angle#8 ← (word) main::min_dist_angle#2 Statement [30] (word~) main::min_dist_angle#7 ← (word) main::min_dist_angle#2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#7 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#7 ] ) always clobbers reg byte a Statement [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a Statement [32] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [35] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Statement [37] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [42] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [43] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Statement [36] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [37] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [46] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [47] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [49] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [50] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:80 [ init_angle_screen::ang_w#0 ] -Statement [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:80 [ init_angle_screen::ang_w#0 ] -Statement [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [56] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [58] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [65] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [66] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [69] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:19 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Statement [38] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [39] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [40] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [41] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [43] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [44] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [45] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [46] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [47] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] +Statement [48] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] +Statement [49] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [50] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [51] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [52] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [57] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [58] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [65] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [66] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [69] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ atan2_16::i#2 atan2_16::i#1 ] -Statement [71] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [72] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [80] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [71] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [72] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [80] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -Statement [81] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [85] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [86] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [88] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [89] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [90] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [91] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [92] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [96] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [97] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [98] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [99] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [100] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [101] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [103] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [104] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [81] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [85] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [86] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [88] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [89] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [90] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [91] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [92] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [96] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [97] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [98] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [99] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [100] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [101] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [103] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [104] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [107] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a Statement [109] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Statement [111] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a Statement [115] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a Statement [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [119] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [124] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [126] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a -Statement [130] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [131] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [132] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [133] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y +Statement [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:42 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Statement [120] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a +Statement [124] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [126] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [138] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [139] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [156] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:48 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] +Statement [157] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [158] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [159] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:46 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [165] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:46 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [168] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:129 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:129 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ init_squares::i#2 init_squares::i#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:52 [ init_squares::i#2 init_squares::i#1 ] -Statement [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a -Statement [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:41 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:42 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:48 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] +Statement [160] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [163] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [164] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [169] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y +Statement [170] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [172] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a +Statement [173] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ) always clobbers reg byte a +Statement [175] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:123 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [176] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:123 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [180] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [181] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [183] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:54 [ init_squares::i#2 init_squares::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:54 [ init_squares::i#2 init_squares::i#1 ] +Statement [184] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [185] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [187] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [192] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:106::malloc:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [193] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:106::malloc:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a Statement [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a @@ -5090,98 +5156,99 @@ Statement [29] (word~) main::min_dist_angle#8 ← (word) main::min_dist_angle#2 Statement [30] (word~) main::min_dist_angle#7 ← (word) main::min_dist_angle#2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#7 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#7 ] ) always clobbers reg byte a Statement [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a Statement [32] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [37] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [42] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [43] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [46] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [47] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [49] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [50] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [56] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [58] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [65] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [66] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [69] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [71] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [72] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [80] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [81] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [85] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [86] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [88] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [89] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [90] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [91] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [92] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [96] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [97] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [98] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [99] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [100] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [101] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [103] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [104] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [35] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [36] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [37] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [38] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [39] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [40] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [41] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [43] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [44] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [45] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [46] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [47] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [48] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [49] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [50] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [51] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [52] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [57] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [58] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [65] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [66] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [69] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [71] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [72] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [80] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [81] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [85] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [86] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [88] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [89] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [90] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [91] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [92] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [96] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [97] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [98] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [99] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [100] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [101] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [103] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [104] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [107] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a Statement [109] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a Statement [111] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a Statement [115] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a Statement [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [119] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [124] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [126] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a -Statement [130] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [131] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [132] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [133] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [137] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:101 [ init_dist_screen::d#0 ] -Statement [138] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [139] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [140] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y -Statement [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Statement [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Statement [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [165] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Statement [166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [168] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:129 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:129 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Statement [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a -Statement [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [120] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a +Statement [124] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [126] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [131] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:103 [ init_dist_screen::d#0 ] +Statement [132] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [133] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [134] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 ] ) always clobbers reg byte y +Statement [138] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [139] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [156] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [157] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [158] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [159] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [160] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [163] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [164] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [169] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y +Statement [170] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [172] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a +Statement [173] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ) always clobbers reg byte a +Statement [175] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:123 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [176] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:123 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [180] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [181] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [183] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [184] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [185] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [187] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [192] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:106::malloc:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [193] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:106::malloc:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a Statement [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a @@ -5200,97 +5267,98 @@ Statement [29] (word~) main::min_dist_angle#8 ← (word) main::min_dist_angle#2 Statement [30] (word~) main::min_dist_angle#7 ← (word) main::min_dist_angle#2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#7 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#7 ] ) always clobbers reg byte a Statement [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a Statement [32] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [37] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [42] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [43] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [46] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [47] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [49] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [50] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [56] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [58] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [65] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [66] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [69] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [71] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [72] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [80] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [81] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [85] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [86] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [88] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [89] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [90] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [91] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [92] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [96] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [97] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [98] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [99] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [100] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [101] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [103] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [104] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [35] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [36] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [37] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [38] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [39] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [40] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [41] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [43] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [44] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [45] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [46] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [47] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [48] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [49] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [50] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [51] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [52] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y +Statement [57] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [58] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [65] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [66] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [69] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [71] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [72] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [80] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [81] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [85] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [86] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [88] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [89] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [90] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [91] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [92] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [96] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [97] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [98] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [99] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [100] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [101] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [103] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [104] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:12::atan2_16:42 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [107] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a Statement [109] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a Statement [111] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a Statement [115] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a Statement [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [119] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [124] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [126] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a -Statement [130] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [131] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [132] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [133] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [137] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [138] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [139] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [140] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y -Statement [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Statement [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Statement [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [165] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Statement [166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [168] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:129 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:129 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Statement [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a -Statement [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [120] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a +Statement [124] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [126] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [131] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [132] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [133] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [134] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 ] ) always clobbers reg byte y +Statement [138] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [139] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [156] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [157] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [158] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [159] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [160] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [163] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [164] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [169] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y +Statement [170] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [172] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a +Statement [173] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ( main:7::init_dist_screen:10::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ) always clobbers reg byte a +Statement [175] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:123 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [176] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:123 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#10 init_dist_screen::xb#10 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [180] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [181] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [183] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [184] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [185] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [187] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [192] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:106::malloc:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [193] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:106::malloc:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ main::fill#2 main::fill#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:4 [ main::dist#2 main::dist#0 main::dist#1 ] : zp ZP_WORD:4 , Potential registers zp ZP_WORD:6 [ main::angle#2 main::angle#0 main::angle#1 ] : zp ZP_WORD:6 , @@ -5300,8 +5368,8 @@ Potential registers zp ZP_WORD:12 [ main::min_dist_angle#3 main::min_dist_angle# Potential registers zp ZP_BYTE:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp ZP_BYTE:14 , reg byte x , Potential registers zp ZP_WORD:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:15 , Potential registers zp ZP_WORD:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:17 , -Potential registers zp ZP_BYTE:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp ZP_BYTE:19 , reg byte x , -Potential registers zp ZP_BYTE:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp ZP_BYTE:20 , reg byte x , +Potential registers zp ZP_BYTE:19 [ init_angle_screen::x#5 init_angle_screen::x#1 ] : zp ZP_BYTE:19 , reg byte x , +Potential registers zp ZP_BYTE:20 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] : zp ZP_BYTE:20 , reg byte x , Potential registers zp ZP_WORD:21 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp ZP_WORD:21 , Potential registers zp ZP_WORD:23 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp ZP_WORD:23 , Potential registers zp ZP_BYTE:25 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , @@ -5314,55 +5382,55 @@ Potential registers zp ZP_BYTE:35 [ init_dist_screen::y#10 init_dist_screen::y#1 Potential registers zp ZP_WORD:36 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] : zp ZP_WORD:36 , Potential registers zp ZP_WORD:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] : zp ZP_WORD:38 , Potential registers zp ZP_BYTE:40 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp ZP_BYTE:40 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp ZP_BYTE:41 , reg byte x , -Potential registers zp ZP_BYTE:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp ZP_BYTE:42 , reg byte x , +Potential registers zp ZP_BYTE:41 [ init_dist_screen::x#10 init_dist_screen::x#1 ] : zp ZP_BYTE:41 , reg byte x , +Potential registers zp ZP_BYTE:42 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] : zp ZP_BYTE:42 , reg byte x , Potential registers zp ZP_BYTE:43 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] : zp ZP_BYTE:43 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] : zp ZP_WORD:44 , -Potential registers zp ZP_BYTE:46 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] : zp ZP_BYTE:46 , reg byte x , -Potential registers zp ZP_BYTE:47 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp ZP_BYTE:47 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:48 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:48 , -Potential registers zp ZP_WORD:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp ZP_WORD:50 , -Potential registers zp ZP_BYTE:52 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:52 , reg byte x , -Potential registers zp ZP_WORD:53 [ heap_head#12 heap_head#1 ] : zp ZP_WORD:53 , -Potential registers zp ZP_WORD:55 [ malloc::size#3 ] : zp ZP_WORD:55 , -Potential registers zp ZP_WORD:57 [ SCREEN_DIST#0 ] : zp ZP_WORD:57 , -Potential registers zp ZP_WORD:59 [ SCREEN_ANGLE#0 ] : zp ZP_WORD:59 , -Potential registers zp ZP_WORD:61 [ init_angle_screen::screen#0 ] : zp ZP_WORD:61 , -Potential registers zp ZP_BYTE:63 [ init_angle_screen::$3 ] : zp ZP_BYTE:63 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:64 [ init_angle_screen::$4 ] : zp ZP_BYTE:64 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:65 [ init_angle_screen::xw#0 ] : zp ZP_WORD:65 , -Potential registers zp ZP_BYTE:67 [ init_angle_screen::$7 ] : zp ZP_BYTE:67 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:68 [ init_angle_screen::yw#0 ] : zp ZP_WORD:68 , -Potential registers zp ZP_WORD:70 [ atan2_16::x#0 ] : zp ZP_WORD:70 , -Potential registers zp ZP_WORD:72 [ atan2_16::y#0 ] : zp ZP_WORD:72 , -Potential registers zp ZP_WORD:74 [ atan2_16::return#2 ] : zp ZP_WORD:74 , -Potential registers zp ZP_WORD:76 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:76 , -Potential registers zp ZP_WORD:78 [ init_angle_screen::$11 ] : zp ZP_WORD:78 , -Potential registers zp ZP_BYTE:80 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:80 , reg byte x , -Potential registers zp ZP_BYTE:81 [ init_angle_screen::$13 ] : zp ZP_BYTE:81 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:82 [ init_angle_screen::$14 ] : zp ZP_BYTE:82 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:83 [ init_angle_screen::$15 ] : zp ZP_BYTE:83 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:84 [ atan2_16::$24 ] : zp ZP_BYTE:84 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:85 [ atan2_16::$23 ] : zp ZP_BYTE:85 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:86 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:86 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:87 [ sqr::return#2 ] : zp ZP_WORD:87 , -Potential registers zp ZP_WORD:89 [ init_dist_screen::yds#0 ] : zp ZP_WORD:89 , -Potential registers zp ZP_BYTE:91 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:91 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:92 [ sqr::return#3 ] : zp ZP_WORD:92 , -Potential registers zp ZP_WORD:94 [ init_dist_screen::xds#0 ] : zp ZP_WORD:94 , -Potential registers zp ZP_WORD:96 [ init_dist_screen::ds#0 ] : zp ZP_WORD:96 , -Potential registers zp ZP_WORD:98 [ sqrt::val#0 ] : zp ZP_WORD:98 , -Potential registers zp ZP_BYTE:100 [ sqrt::return#2 ] : zp ZP_BYTE:100 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:101 [ init_dist_screen::d#0 ] : zp ZP_BYTE:101 , reg byte a , reg byte x , -Potential registers zp ZP_WORD:102 [ bsearch16u::key#0 ] : zp ZP_WORD:102 , -Potential registers zp ZP_WORD:104 [ bsearch16u::return#3 ] : zp ZP_WORD:104 , -Potential registers zp ZP_WORD:106 [ sqrt::found#0 ] : zp ZP_WORD:106 , -Potential registers zp ZP_WORD:108 [ sqrt::$3 ] : zp ZP_WORD:108 , -Potential registers zp ZP_WORD:110 [ sqrt::$1 ] : zp ZP_WORD:110 , -Potential registers zp ZP_BYTE:112 [ sqrt::return#0 ] : zp ZP_BYTE:112 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:113 [ bsearch16u::$6 ] : zp ZP_BYTE:113 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:114 [ bsearch16u::$16 ] : zp ZP_BYTE:114 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:115 [ bsearch16u::pivot#0 ] : zp ZP_WORD:115 , +Potential registers zp ZP_WORD:44 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] : zp ZP_WORD:44 , +Potential registers zp ZP_WORD:46 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] : zp ZP_WORD:46 , +Potential registers zp ZP_BYTE:48 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] : zp ZP_BYTE:48 , reg byte x , +Potential registers zp ZP_BYTE:49 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp ZP_BYTE:49 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:50 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:50 , +Potential registers zp ZP_WORD:52 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp ZP_WORD:52 , +Potential registers zp ZP_BYTE:54 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:54 , reg byte x , +Potential registers zp ZP_WORD:55 [ heap_head#12 heap_head#1 ] : zp ZP_WORD:55 , +Potential registers zp ZP_WORD:57 [ malloc::size#3 ] : zp ZP_WORD:57 , +Potential registers zp ZP_WORD:59 [ SCREEN_DIST#0 ] : zp ZP_WORD:59 , +Potential registers zp ZP_WORD:61 [ SCREEN_ANGLE#0 ] : zp ZP_WORD:61 , +Potential registers zp ZP_WORD:63 [ init_angle_screen::screen#0 ] : zp ZP_WORD:63 , +Potential registers zp ZP_BYTE:65 [ init_angle_screen::$3 ] : zp ZP_BYTE:65 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:66 [ init_angle_screen::$4 ] : zp ZP_BYTE:66 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:67 [ init_angle_screen::xw#0 ] : zp ZP_WORD:67 , +Potential registers zp ZP_BYTE:69 [ init_angle_screen::$7 ] : zp ZP_BYTE:69 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:70 [ init_angle_screen::yw#0 ] : zp ZP_WORD:70 , +Potential registers zp ZP_WORD:72 [ atan2_16::x#0 ] : zp ZP_WORD:72 , +Potential registers zp ZP_WORD:74 [ atan2_16::y#0 ] : zp ZP_WORD:74 , +Potential registers zp ZP_WORD:76 [ atan2_16::return#2 ] : zp ZP_WORD:76 , +Potential registers zp ZP_WORD:78 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:78 , +Potential registers zp ZP_WORD:80 [ init_angle_screen::$11 ] : zp ZP_WORD:80 , +Potential registers zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:82 , reg byte x , +Potential registers zp ZP_BYTE:83 [ init_angle_screen::$13 ] : zp ZP_BYTE:83 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:84 [ init_angle_screen::$14 ] : zp ZP_BYTE:84 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:85 [ init_angle_screen::$15 ] : zp ZP_BYTE:85 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:86 [ atan2_16::$24 ] : zp ZP_BYTE:86 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:87 [ atan2_16::$23 ] : zp ZP_BYTE:87 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:88 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:88 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:89 [ sqr::return#2 ] : zp ZP_WORD:89 , +Potential registers zp ZP_WORD:91 [ init_dist_screen::yds#0 ] : zp ZP_WORD:91 , +Potential registers zp ZP_BYTE:93 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:93 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:94 [ sqr::return#3 ] : zp ZP_WORD:94 , +Potential registers zp ZP_WORD:96 [ init_dist_screen::xds#0 ] : zp ZP_WORD:96 , +Potential registers zp ZP_WORD:98 [ init_dist_screen::ds#0 ] : zp ZP_WORD:98 , +Potential registers zp ZP_WORD:100 [ sqrt::val#0 ] : zp ZP_WORD:100 , +Potential registers zp ZP_BYTE:102 [ sqrt::return#2 ] : zp ZP_BYTE:102 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:103 [ init_dist_screen::d#0 ] : zp ZP_BYTE:103 , reg byte a , reg byte x , +Potential registers zp ZP_WORD:104 [ bsearch16u::key#0 ] : zp ZP_WORD:104 , +Potential registers zp ZP_WORD:106 [ bsearch16u::return#3 ] : zp ZP_WORD:106 , +Potential registers zp ZP_WORD:108 [ sqrt::found#0 ] : zp ZP_WORD:108 , +Potential registers zp ZP_WORD:110 [ sqrt::$3 ] : zp ZP_WORD:110 , +Potential registers zp ZP_WORD:112 [ sqrt::$1 ] : zp ZP_WORD:112 , +Potential registers zp ZP_BYTE:114 [ sqrt::return#0 ] : zp ZP_BYTE:114 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:115 [ bsearch16u::$6 ] : zp ZP_BYTE:115 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:116 [ bsearch16u::$16 ] : zp ZP_BYTE:116 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:117 [ bsearch16u::result#0 ] : zp ZP_WORD:117 , Potential registers zp ZP_BYTE:119 [ sqr::$0 ] : zp ZP_BYTE:119 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:120 [ sqr::return#0 ] : zp ZP_WORD:120 , @@ -5372,75 +5440,73 @@ Potential registers zp ZP_BYTE:125 [ init_squares::$4 ] : zp ZP_BYTE:125 , reg b Potential registers zp ZP_WORD:126 [ malloc::mem#0 ] : zp ZP_WORD:126 , REGISTER UPLIFT SCOPES -Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:30 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:31 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:33 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:21 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:23 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:84 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:85 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:25 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:74 [ atan2_16::return#2 ] 50: zp ZP_WORD:28 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:70 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:72 [ atan2_16::y#0 ] -Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:46 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp ZP_WORD:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp ZP_BYTE:113 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:114 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:117 [ bsearch16u::result#0 ] 501: zp ZP_WORD:115 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:104 [ bsearch16u::return#3 ] 0.27: zp ZP_WORD:102 [ bsearch16u::key#0 ] -Uplift Scope [init_angle_screen] 220.36: zp ZP_BYTE:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 202: zp ZP_BYTE:63 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:64 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:67 [ init_angle_screen::$7 ] 202: zp ZP_WORD:76 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:78 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:81 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:82 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:83 [ init_angle_screen::$15 ] 129.86: zp ZP_BYTE:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 84.17: zp ZP_BYTE:80 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:68 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:65 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:61 [ init_angle_screen::screen#0 ] -Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:43 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 221.24: zp ZP_BYTE:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 202: zp ZP_BYTE:91 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:94 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:96 [ init_dist_screen::ds#0 ] 131.3: zp ZP_BYTE:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:101 [ init_dist_screen::d#0 ] 77: zp ZP_BYTE:40 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:86 [ init_dist_screen::y2#0 ] 18.18: zp ZP_WORD:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] 17.47: zp ZP_BYTE:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp ZP_WORD:36 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:89 [ init_dist_screen::yds#0 ] +Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:30 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:31 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:33 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:21 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:23 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:86 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:87 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:25 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:76 [ atan2_16::return#2 ] 50: zp ZP_WORD:28 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:72 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:74 [ atan2_16::y#0 ] +Uplift Scope [bsearch16u] 6,450.89: zp ZP_BYTE:48 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] 4,851: zp ZP_WORD:46 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] 2,433.29: zp ZP_WORD:44 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] 2,002: zp ZP_BYTE:115 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:116 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:117 [ bsearch16u::result#0 ] 4: zp ZP_WORD:106 [ bsearch16u::return#3 ] 0.24: zp ZP_WORD:104 [ bsearch16u::key#0 ] +Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:65 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:66 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:69 [ init_angle_screen::$7 ] 202: zp ZP_WORD:78 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:80 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:83 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:84 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:85 [ init_angle_screen::$15 ] 126.25: zp ZP_BYTE:19 [ init_angle_screen::x#5 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:20 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:70 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:67 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:63 [ init_angle_screen::screen#0 ] +Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:43 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 202: zp ZP_BYTE:93 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:96 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:98 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:41 [ init_dist_screen::x#10 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:103 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:42 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:40 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:88 [ init_dist_screen::y2#0 ] 18.18: zp ZP_WORD:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] 17.47: zp ZP_BYTE:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp ZP_WORD:36 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:91 [ init_dist_screen::yds#0 ] Uplift Scope [main] 588: zp ZP_WORD:12 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] 311.79: zp ZP_WORD:10 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ] 303: zp ZP_WORD:8 [ main::min_dist_angle#2 main::min_dist_angle#6 ] 141.4: zp ZP_WORD:2 [ main::fill#2 main::fill#1 ] 107.39: zp ZP_WORD:6 [ main::angle#2 main::angle#0 main::angle#1 ] 90.65: zp ZP_WORD:4 [ main::dist#2 main::dist#0 main::dist#1 ] -Uplift Scope [sqr] 338: zp ZP_BYTE:47 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 202: zp ZP_WORD:92 [ sqr::return#3 ] 28.5: zp ZP_WORD:120 [ sqr::return#0 ] 22: zp ZP_WORD:87 [ sqr::return#2 ] 4: zp ZP_BYTE:119 [ sqr::$0 ] -Uplift Scope [sqrt] 202: zp ZP_BYTE:100 [ sqrt::return#2 ] 103: zp ZP_WORD:98 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:112 [ sqrt::return#0 ] 4: zp ZP_WORD:106 [ sqrt::found#0 ] 4: zp ZP_WORD:108 [ sqrt::$3 ] 2: zp ZP_WORD:110 [ sqrt::$1 ] -Uplift Scope [init_squares] 25.17: zp ZP_WORD:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:52 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:124 [ init_squares::$3 ] 22: zp ZP_BYTE:125 [ init_squares::$4 ] 13.93: zp ZP_WORD:48 [ init_squares::sqr#2 init_squares::sqr#1 ] -Uplift Scope [] 6.6: zp ZP_WORD:53 [ heap_head#12 heap_head#1 ] 0.09: zp ZP_WORD:59 [ SCREEN_ANGLE#0 ] 0.08: zp ZP_WORD:57 [ SCREEN_DIST#0 ] 0.03: zp ZP_WORD:122 [ SQUARES#1 ] -Uplift Scope [malloc] 2: zp ZP_WORD:55 [ malloc::size#3 ] 0.67: zp ZP_WORD:126 [ malloc::mem#0 ] +Uplift Scope [sqr] 338: zp ZP_BYTE:49 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 202: zp ZP_WORD:94 [ sqr::return#3 ] 28.5: zp ZP_WORD:120 [ sqr::return#0 ] 22: zp ZP_WORD:89 [ sqr::return#2 ] 4: zp ZP_BYTE:119 [ sqr::$0 ] +Uplift Scope [sqrt] 202: zp ZP_BYTE:102 [ sqrt::return#2 ] 103: zp ZP_WORD:100 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:114 [ sqrt::return#0 ] 4: zp ZP_WORD:108 [ sqrt::found#0 ] 4: zp ZP_WORD:110 [ sqrt::$3 ] 2: zp ZP_WORD:112 [ sqrt::$1 ] +Uplift Scope [init_squares] 25.17: zp ZP_WORD:52 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:54 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:124 [ init_squares::$3 ] 22: zp ZP_BYTE:125 [ init_squares::$4 ] 13.93: zp ZP_WORD:50 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplift Scope [] 6.6: zp ZP_WORD:55 [ heap_head#12 heap_head#1 ] 0.09: zp ZP_WORD:61 [ SCREEN_ANGLE#0 ] 0.08: zp ZP_WORD:59 [ SCREEN_DIST#0 ] 0.03: zp ZP_WORD:122 [ SQUARES#1 ] +Uplift Scope [malloc] 2: zp ZP_WORD:57 [ malloc::size#3 ] 0.67: zp ZP_WORD:126 [ malloc::mem#0 ] Uplift Scope [RADIX] -Uplifting [atan2_16] best 1247286 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:31 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:33 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:21 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:23 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:74 [ atan2_16::return#2 ] zp ZP_WORD:28 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:70 [ atan2_16::x#0 ] zp ZP_WORD:72 [ atan2_16::y#0 ] +Uplifting [atan2_16] best 1274401 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:31 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:33 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:21 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:23 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:76 [ atan2_16::return#2 ] zp ZP_WORD:28 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:72 [ atan2_16::x#0 ] zp ZP_WORD:74 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [bsearch16u] best 1228286 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp ZP_WORD:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:117 [ bsearch16u::result#0 ] zp ZP_WORD:115 [ bsearch16u::pivot#0 ] zp ZP_WORD:104 [ bsearch16u::return#3 ] zp ZP_WORD:102 [ bsearch16u::key#0 ] -Uplifting [init_angle_screen] best 1226686 combination zp ZP_BYTE:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:76 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:78 [ init_angle_screen::$11 ] zp ZP_BYTE:81 [ init_angle_screen::$13 ] zp ZP_BYTE:82 [ init_angle_screen::$14 ] zp ZP_BYTE:83 [ init_angle_screen::$15 ] zp ZP_BYTE:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:80 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:68 [ init_angle_screen::yw#0 ] zp ZP_WORD:65 [ init_angle_screen::xw#0 ] zp ZP_BYTE:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:61 [ init_angle_screen::screen#0 ] +Uplifting [bsearch16u] best 1255401 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] zp ZP_WORD:46 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] zp ZP_WORD:44 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:117 [ bsearch16u::result#0 ] zp ZP_WORD:106 [ bsearch16u::return#3 ] zp ZP_WORD:104 [ bsearch16u::key#0 ] +Uplifting [init_angle_screen] best 1253201 combination reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:78 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:80 [ init_angle_screen::$11 ] reg byte a [ init_angle_screen::$13 ] zp ZP_BYTE:84 [ init_angle_screen::$14 ] zp ZP_BYTE:85 [ init_angle_screen::$15 ] zp ZP_BYTE:19 [ init_angle_screen::x#5 init_angle_screen::x#1 ] zp ZP_BYTE:20 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:70 [ init_angle_screen::yw#0 ] zp ZP_WORD:67 [ init_angle_screen::xw#0 ] zp ZP_BYTE:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:63 [ init_angle_screen::screen#0 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [init_dist_screen] best 1223486 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] zp ZP_BYTE:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:94 [ init_dist_screen::xds#0 ] zp ZP_WORD:96 [ init_dist_screen::ds#0 ] zp ZP_BYTE:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:40 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:86 [ init_dist_screen::y2#0 ] zp ZP_WORD:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp ZP_BYTE:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:36 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp ZP_WORD:89 [ init_dist_screen::yds#0 ] +Uplifting [init_dist_screen] best 1250001 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:96 [ init_dist_screen::xds#0 ] zp ZP_WORD:98 [ init_dist_screen::ds#0 ] zp ZP_BYTE:41 [ init_dist_screen::x#10 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:42 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] zp ZP_BYTE:40 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:88 [ init_dist_screen::y2#0 ] zp ZP_WORD:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp ZP_BYTE:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:36 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp ZP_WORD:91 [ init_dist_screen::yds#0 ] Limited combination testing to 100 combinations of 6144 possible. -Uplifting [main] best 1223486 combination zp ZP_WORD:12 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] zp ZP_WORD:10 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ] zp ZP_WORD:8 [ main::min_dist_angle#2 main::min_dist_angle#6 ] zp ZP_WORD:2 [ main::fill#2 main::fill#1 ] zp ZP_WORD:6 [ main::angle#2 main::angle#0 main::angle#1 ] zp ZP_WORD:4 [ main::dist#2 main::dist#0 main::dist#1 ] -Uplifting [sqr] best 1223149 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp ZP_WORD:92 [ sqr::return#3 ] zp ZP_WORD:120 [ sqr::return#0 ] zp ZP_WORD:87 [ sqr::return#2 ] reg byte a [ sqr::$0 ] -Uplifting [sqrt] best 1222246 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:98 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:106 [ sqrt::found#0 ] zp ZP_WORD:108 [ sqrt::$3 ] zp ZP_WORD:110 [ sqrt::$1 ] -Uplifting [init_squares] best 1222046 combination zp ZP_WORD:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp ZP_WORD:48 [ init_squares::sqr#2 init_squares::sqr#1 ] -Uplifting [] best 1222046 combination zp ZP_WORD:53 [ heap_head#12 heap_head#1 ] zp ZP_WORD:59 [ SCREEN_ANGLE#0 ] zp ZP_WORD:57 [ SCREEN_DIST#0 ] zp ZP_WORD:122 [ SQUARES#1 ] -Uplifting [malloc] best 1222046 combination zp ZP_WORD:55 [ malloc::size#3 ] zp ZP_WORD:126 [ malloc::mem#0 ] -Uplifting [RADIX] best 1222046 combination -Attempting to uplift remaining variables inzp ZP_BYTE:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Uplifting [init_dist_screen] best 1222046 combination zp ZP_BYTE:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Uplifting [init_angle_screen] best 1222046 combination zp ZP_BYTE:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:81 [ init_angle_screen::$13 ] -Uplifting [init_angle_screen] best 1221446 combination reg byte a [ init_angle_screen::$13 ] -Attempting to uplift remaining variables inzp ZP_BYTE:82 [ init_angle_screen::$14 ] -Uplifting [init_angle_screen] best 1221046 combination reg byte a [ init_angle_screen::$14 ] -Attempting to uplift remaining variables inzp ZP_BYTE:83 [ init_angle_screen::$15 ] -Uplifting [init_angle_screen] best 1220446 combination reg byte a [ init_angle_screen::$15 ] -Attempting to uplift remaining variables inzp ZP_BYTE:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Uplifting [init_dist_screen] best 1220446 combination zp ZP_BYTE:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Uplifting [init_angle_screen] best 1220446 combination zp ZP_BYTE:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:80 [ init_angle_screen::ang_w#0 ] -Uplifting [init_angle_screen] best 1220446 combination zp ZP_BYTE:80 [ init_angle_screen::ang_w#0 ] +Uplifting [main] best 1250001 combination zp ZP_WORD:12 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] zp ZP_WORD:10 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ] zp ZP_WORD:8 [ main::min_dist_angle#2 main::min_dist_angle#6 ] zp ZP_WORD:2 [ main::fill#2 main::fill#1 ] zp ZP_WORD:6 [ main::angle#2 main::angle#0 main::angle#1 ] zp ZP_WORD:4 [ main::dist#2 main::dist#0 main::dist#1 ] +Uplifting [sqr] best 1249664 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp ZP_WORD:94 [ sqr::return#3 ] zp ZP_WORD:120 [ sqr::return#0 ] zp ZP_WORD:89 [ sqr::return#2 ] reg byte a [ sqr::$0 ] +Uplifting [sqrt] best 1248761 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:100 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:108 [ sqrt::found#0 ] zp ZP_WORD:110 [ sqrt::$3 ] zp ZP_WORD:112 [ sqrt::$1 ] +Uplifting [init_squares] best 1248561 combination zp ZP_WORD:52 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp ZP_WORD:50 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplifting [] best 1248561 combination zp ZP_WORD:55 [ heap_head#12 heap_head#1 ] zp ZP_WORD:61 [ SCREEN_ANGLE#0 ] zp ZP_WORD:59 [ SCREEN_DIST#0 ] zp ZP_WORD:122 [ SQUARES#1 ] +Uplifting [malloc] best 1248561 combination zp ZP_WORD:57 [ malloc::size#3 ] zp ZP_WORD:126 [ malloc::mem#0 ] +Uplifting [RADIX] best 1248561 combination +Attempting to uplift remaining variables inzp ZP_BYTE:84 [ init_angle_screen::$14 ] +Uplifting [init_angle_screen] best 1248161 combination reg byte a [ init_angle_screen::$14 ] +Attempting to uplift remaining variables inzp ZP_BYTE:85 [ init_angle_screen::$15 ] +Uplifting [init_angle_screen] best 1247561 combination reg byte a [ init_angle_screen::$15 ] +Attempting to uplift remaining variables inzp ZP_BYTE:41 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Uplifting [init_dist_screen] best 1247561 combination zp ZP_BYTE:41 [ init_dist_screen::x#10 init_dist_screen::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:19 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Uplifting [init_angle_screen] best 1247561 combination zp ZP_BYTE:19 [ init_angle_screen::x#5 init_angle_screen::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:42 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Uplifting [init_dist_screen] best 1247561 combination zp ZP_BYTE:42 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:20 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Uplifting [init_angle_screen] best 1247561 combination zp ZP_BYTE:20 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1247561 combination zp ZP_BYTE:82 [ init_angle_screen::ang_w#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:40 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Uplifting [init_dist_screen] best 1220376 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Attempting to uplift remaining variables inzp ZP_BYTE:86 [ init_dist_screen::y2#0 ] -Uplifting [init_dist_screen] best 1220276 combination reg byte a [ init_dist_screen::y2#0 ] +Uplifting [init_dist_screen] best 1247491 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] +Attempting to uplift remaining variables inzp ZP_BYTE:88 [ init_dist_screen::y2#0 ] +Uplifting [init_dist_screen] best 1247391 combination reg byte a [ init_dist_screen::y2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Uplifting [init_angle_screen] best 1220276 combination zp ZP_BYTE:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] +Uplifting [init_angle_screen] best 1247391 combination zp ZP_BYTE:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Uplifting [init_dist_screen] best 1220276 combination zp ZP_BYTE:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Coalescing zero page register [ zp ZP_WORD:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:61 [ init_angle_screen::screen#0 ] ] - score: 1 +Uplifting [init_dist_screen] best 1247391 combination zp ZP_BYTE:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +Coalescing zero page register [ zp ZP_WORD:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:63 [ init_angle_screen::screen#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:28 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] ] with [ zp ZP_WORD:104 [ bsearch16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:55 [ malloc::size#3 ] ] with [ zp ZP_WORD:126 [ malloc::mem#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:65 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:70 [ atan2_16::x#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:68 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:72 [ atan2_16::y#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:74 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:76 [ init_angle_screen::angle_w#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:87 [ sqr::return#2 ] ] with [ zp ZP_WORD:89 [ init_dist_screen::yds#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:92 [ sqr::return#3 ] ] with [ zp ZP_WORD:94 [ init_dist_screen::xds#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:92 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:120 [ sqr::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:96 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:98 [ sqrt::val#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:106 [ sqrt::found#0 ] ] with [ zp ZP_WORD:108 [ sqrt::$3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp ZP_WORD:74 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp ZP_WORD:106 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:55 [ malloc::size#3 malloc::mem#0 ] ] with [ zp ZP_WORD:122 [ SQUARES#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:92 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:96 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp ZP_WORD:78 [ init_angle_screen::$11 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:110 [ sqrt::$1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:92 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:102 [ bsearch16u::key#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:46 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] ] with [ zp ZP_WORD:106 [ bsearch16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:57 [ malloc::size#3 ] ] with [ zp ZP_WORD:126 [ malloc::mem#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:67 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:72 [ atan2_16::x#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:70 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:74 [ atan2_16::y#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:76 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:78 [ init_angle_screen::angle_w#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:89 [ sqr::return#2 ] ] with [ zp ZP_WORD:91 [ init_dist_screen::yds#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:94 [ sqr::return#3 ] ] with [ zp ZP_WORD:96 [ init_dist_screen::xds#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:94 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:120 [ sqr::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:98 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:100 [ sqrt::val#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:108 [ sqrt::found#0 ] ] with [ zp ZP_WORD:110 [ sqrt::$3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp ZP_WORD:76 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:46 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 ] ] with [ zp ZP_WORD:108 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:57 [ malloc::size#3 malloc::mem#0 ] ] with [ zp ZP_WORD:122 [ SQUARES#1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:94 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:98 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp ZP_WORD:80 [ init_angle_screen::$11 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:46 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:112 [ sqrt::$1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:94 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:104 [ bsearch16u::key#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ] with [ zp ZP_WORD:2 [ main::fill#2 main::fill#1 ] ] Coalescing zero page register [ zp ZP_WORD:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ] with [ zp ZP_WORD:4 [ main::dist#2 main::dist#0 main::dist#1 ] ] Coalescing zero page register [ zp ZP_WORD:21 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] with [ zp ZP_WORD:6 [ main::angle#2 main::angle#0 main::angle#1 ] ] @@ -5449,33 +5515,33 @@ Coalescing zero page register [ zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angl Coalescing zero page register [ zp ZP_WORD:31 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ] with [ zp ZP_WORD:12 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] ] Coalescing zero page register [ zp ZP_BYTE:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] ] with [ zp ZP_BYTE:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] Coalescing zero page register [ zp ZP_WORD:36 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] ] with [ zp ZP_WORD:33 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] ] -Coalescing zero page register [ zp ZP_BYTE:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] ] with [ zp ZP_BYTE:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] ] with [ zp ZP_BYTE:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] -Coalescing zero page register [ zp ZP_WORD:48 [ init_squares::sqr#2 init_squares::sqr#1 ] ] with [ zp ZP_WORD:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] ] -Coalescing zero page register [ zp ZP_WORD:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ] with [ zp ZP_WORD:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] -Coalescing zero page register [ zp ZP_WORD:65 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] with [ zp ZP_WORD:53 [ heap_head#12 heap_head#1 ] ] -Coalescing zero page register [ zp ZP_WORD:68 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] with [ zp ZP_WORD:55 [ malloc::size#3 malloc::mem#0 SQUARES#1 ] ] -Coalescing zero page register [ zp ZP_WORD:48 [ init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 main::fill#2 main::fill#1 ] ] -Coalescing zero page register [ zp ZP_WORD:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] with [ zp ZP_WORD:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 main::dist#2 main::dist#0 main::dist#1 ] ] -Coalescing zero page register [ zp ZP_WORD:87 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ zp ZP_WORD:21 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 main::angle#2 main::angle#0 main::angle#1 ] ] -Coalescing zero page register [ zp ZP_WORD:92 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] ] with [ zp ZP_WORD:23 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 main::min_dist_angle#2 main::min_dist_angle#6 ] ] -Coalescing zero page register [ zp ZP_WORD:115 [ bsearch16u::pivot#0 ] ] with [ zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 main::min_fill#5 main::min_fill#2 main::min_fill#10 ] ] -Coalescing zero page register [ zp ZP_WORD:117 [ bsearch16u::result#0 ] ] with [ zp ZP_WORD:31 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] ] -Allocated (was zp ZP_BYTE:35) zp ZP_BYTE:2 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::y#5 init_angle_screen::y#1 ] -Allocated (was zp ZP_WORD:36) zp ZP_WORD:3 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -Allocated (was zp ZP_BYTE:41) zp ZP_BYTE:5 [ init_dist_screen::x#2 init_dist_screen::x#1 init_angle_screen::x#2 init_angle_screen::x#1 ] -Allocated (was zp ZP_BYTE:42) zp ZP_BYTE:6 [ init_dist_screen::xb#2 init_dist_screen::xb#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Allocated (was zp ZP_WORD:48) zp ZP_WORD:7 [ init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 main::fill#2 main::fill#1 ] -Allocated (was zp ZP_WORD:50) zp ZP_WORD:9 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 main::dist#2 main::dist#0 main::dist#1 ] -Allocated (was zp ZP_WORD:57) zp ZP_WORD:11 [ SCREEN_DIST#0 ] -Allocated (was zp ZP_WORD:59) zp ZP_WORD:13 [ SCREEN_ANGLE#0 ] -Allocated (was zp ZP_WORD:65) zp ZP_WORD:15 [ init_angle_screen::xw#0 atan2_16::x#0 heap_head#12 heap_head#1 ] -Allocated (was zp ZP_WORD:68) zp ZP_WORD:17 [ init_angle_screen::yw#0 atan2_16::y#0 malloc::size#3 malloc::mem#0 SQUARES#1 ] -Allocated (was zp ZP_BYTE:80) zp ZP_BYTE:19 [ init_angle_screen::ang_w#0 ] -Allocated (was zp ZP_WORD:87) zp ZP_WORD:20 [ sqr::return#2 init_dist_screen::yds#0 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 main::angle#2 main::angle#0 main::angle#1 ] -Allocated (was zp ZP_WORD:92) zp ZP_WORD:22 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 main::min_dist_angle#2 main::min_dist_angle#6 ] -Allocated (was zp ZP_WORD:115) zp ZP_WORD:24 [ bsearch16u::pivot#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 main::min_fill#5 main::min_fill#2 main::min_fill#10 ] -Allocated (was zp ZP_WORD:117) zp ZP_WORD:26 [ bsearch16u::result#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] +Coalescing zero page register [ zp ZP_BYTE:41 [ init_dist_screen::x#10 init_dist_screen::x#1 ] ] with [ zp ZP_BYTE:19 [ init_angle_screen::x#5 init_angle_screen::x#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:42 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] ] with [ zp ZP_BYTE:20 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] ] +Coalescing zero page register [ zp ZP_WORD:50 [ init_squares::sqr#2 init_squares::sqr#1 ] ] with [ zp ZP_WORD:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] ] +Coalescing zero page register [ zp ZP_WORD:52 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ] with [ zp ZP_WORD:44 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] ] +Coalescing zero page register [ zp ZP_WORD:55 [ heap_head#12 heap_head#1 ] ] with [ zp ZP_WORD:46 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] +Coalescing zero page register [ zp ZP_WORD:67 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] with [ zp ZP_WORD:57 [ malloc::size#3 malloc::mem#0 SQUARES#1 ] ] +Coalescing zero page register [ zp ZP_WORD:89 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ zp ZP_WORD:70 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] +Coalescing zero page register [ zp ZP_WORD:50 [ init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 main::fill#2 main::fill#1 ] ] +Coalescing zero page register [ zp ZP_WORD:52 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] ] with [ zp ZP_WORD:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 main::dist#2 main::dist#0 main::dist#1 ] ] +Coalescing zero page register [ zp ZP_WORD:55 [ heap_head#12 heap_head#1 bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] with [ zp ZP_WORD:21 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 main::angle#2 main::angle#0 main::angle#1 ] ] +Coalescing zero page register [ zp ZP_WORD:94 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] ] with [ zp ZP_WORD:23 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 main::min_dist_angle#2 main::min_dist_angle#6 ] ] +Coalescing zero page register [ zp ZP_WORD:117 [ bsearch16u::result#0 ] ] with [ zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 main::min_fill#5 main::min_fill#2 main::min_fill#10 ] ] +Allocated (was zp ZP_WORD:31) zp ZP_WORD:2 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] +Allocated (was zp ZP_BYTE:35) zp ZP_BYTE:4 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::y#5 init_angle_screen::y#1 ] +Allocated (was zp ZP_WORD:36) zp ZP_WORD:5 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +Allocated (was zp ZP_BYTE:41) zp ZP_BYTE:7 [ init_dist_screen::x#10 init_dist_screen::x#1 init_angle_screen::x#5 init_angle_screen::x#1 ] +Allocated (was zp ZP_BYTE:42) zp ZP_BYTE:8 [ init_dist_screen::xb#10 init_dist_screen::xb#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ] +Allocated (was zp ZP_WORD:50) zp ZP_WORD:9 [ init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 main::fill#2 main::fill#1 ] +Allocated (was zp ZP_WORD:52) zp ZP_WORD:11 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 main::dist#2 main::dist#0 main::dist#1 ] +Allocated (was zp ZP_WORD:55) zp ZP_WORD:13 [ heap_head#12 heap_head#1 bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 main::angle#2 main::angle#0 main::angle#1 ] +Allocated (was zp ZP_WORD:59) zp ZP_WORD:15 [ SCREEN_DIST#0 ] +Allocated (was zp ZP_WORD:61) zp ZP_WORD:17 [ SCREEN_ANGLE#0 ] +Allocated (was zp ZP_WORD:67) zp ZP_WORD:19 [ init_angle_screen::xw#0 atan2_16::x#0 malloc::size#3 malloc::mem#0 SQUARES#1 ] +Allocated (was zp ZP_BYTE:82) zp ZP_BYTE:21 [ init_angle_screen::ang_w#0 ] +Allocated (was zp ZP_WORD:89) zp ZP_WORD:22 [ sqr::return#2 init_dist_screen::yds#0 init_angle_screen::yw#0 atan2_16::y#0 ] +Allocated (was zp ZP_WORD:94) zp ZP_WORD:24 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 main::min_dist_angle#2 main::min_dist_angle#6 ] +Allocated (was zp ZP_WORD:117) zp ZP_WORD:26 [ bsearch16u::result#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 main::min_fill#5 main::min_fill#2 main::min_fill#10 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -5495,12 +5561,12 @@ ASSEMBLER BEFORE OPTIMIZATION // Char to fill with .const FILL_CHAR = '@' .const NUM_SQUARES = $30 - .label heap_head = $f - .label SQUARES = $11 + .label heap_head = $d + .label SQUARES = $13 // Screen containing distance to center - .label SCREEN_DIST = $b + .label SCREEN_DIST = $f // Screen containing angle to center - .label SCREEN_ANGLE = $d + .label SCREEN_ANGLE = $11 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -5509,14 +5575,14 @@ b1_from_bbegin: // @1 b1: // [2] call malloc - // [190] phi from @1 to malloc [phi:@1->malloc] + // [191] phi from @1 to malloc [phi:@1->malloc] malloc_from_b1: - // [190] phi (word) malloc::size#3 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 + // [191] phi (word) malloc::size#3 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta malloc.size lda #>$3e8 sta malloc.size+1 - // [190] phi (byte*) heap_head#12 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 + // [191] phi (byte*) heap_head#12 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -5531,14 +5597,14 @@ b3: lda malloc.mem+1 sta SCREEN_DIST+1 // [4] call malloc - // [190] phi from @3 to malloc [phi:@3->malloc] + // [191] phi from @3 to malloc [phi:@3->malloc] malloc_from_b3: - // [190] phi (word) malloc::size#3 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 + // [191] phi (word) malloc::size#3 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta malloc.size lda #>$3e8 sta malloc.size+1 - // [190] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy + // [191] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy jsr malloc jmp b4 // @4 @@ -5562,15 +5628,15 @@ bend_from_b2: bend: // main main: { - .label dist = 9 - .label angle = $14 - .label fill = 7 - .label dist_angle = $1a - .label min_dist_angle = $16 - .label min_dist_angle_3 = $1a - .label min_fill = $18 - .label min_dist_angle_7 = $1a - .label min_dist_angle_8 = $1a + .label dist = $b + .label angle = $d + .label fill = 9 + .label dist_angle = 2 + .label min_dist_angle = $18 + .label min_dist_angle_3 = 2 + .label min_fill = $1a + .label min_dist_angle_7 = 2 + .label min_dist_angle_8 = 2 // [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 lda SCREEN_DIST sta init_dist_screen.screen @@ -5748,19 +5814,19 @@ main: { // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center -// init_angle_screen(byte* zeropage(9) screen) +// init_angle_screen(byte* zeropage($b) screen) init_angle_screen: { - .label _11 = $18 - .label screen = 9 - .label screen_topline = 7 - .label screen_bottomline = 9 - .label xw = $f - .label yw = $11 - .label angle_w = $18 - .label ang_w = $13 - .label x = 5 - .label xb = 6 - .label y = 2 + .label _11 = $1a + .label screen = $b + .label screen_topline = 9 + .label screen_bottomline = $b + .label xw = $13 + .label yw = $16 + .label angle_w = $1a + .label ang_w = $15 + .label x = 7 + .label xb = 8 + .label y = 4 // [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda screen clc @@ -5793,81 +5859,50 @@ init_angle_screen: { jmp b1 // init_angle_screen::@1 b1: - // [34] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - b2_from_b1: - // [34] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [34] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + b3_from_b1: + // [34] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [34] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [34] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b2 - // init_angle_screen::@2 - b2: - // [35] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - jmp b4 - // init_angle_screen::@4 - b4: - // [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // [37] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // [38] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [39] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b4 - jmp breturn - // init_angle_screen::@return - breturn: - // [40] return - rts + jmp b3 + // [34] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + b3_from_b2: + // [34] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [34] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy + jmp b3 // init_angle_screen::@3 b3: - // [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [35] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [42] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [36] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [43] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [37] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw - // [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [38] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl - // [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [39] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta yw+1 sty yw - // [46] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [47] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [48] call atan2_16 + // [40] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [41] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [42] call atan2_16 jsr atan2_16 - // [49] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [43] (word) atan2_16::return#2 ← (word) atan2_16::return#0 jmp b5 // init_angle_screen::@5 b5: - // [50] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - // [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [44] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [45] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _11 @@ -5875,61 +5910,93 @@ init_angle_screen: { bcc !+ inc _11+1 !: - // [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [46] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w - // [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [47] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [48] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 lda ang_w eor #$ff clc adc #1 - // [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [49] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y - // [56] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [50] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w - // [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [51] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y - // [58] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [52] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w - // [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_bottomline),y - // [60] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [54] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [61] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [55] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [34] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - b2_from_b5: - // [34] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [34] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp b2 + // init_angle_screen::@2 + b2: + // [56] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3_from_b2 + jmp b4 + // init_angle_screen::@4 + b4: + // [57] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // [58] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // [59] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [60] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b4 + jmp breturn + // init_angle_screen::@return + breturn: + // [61] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($f) x, signed word zeropage($11) y) +// atan2_16(signed word zeropage($13) x, signed word zeropage($16) y) atan2_16: { - .label _2 = $14 - .label _7 = $16 - .label yi = $14 - .label xi = $16 - .label angle = $18 - .label xd = 3 - .label yd = $1a - .label return = $18 - .label x = $f - .label y = $11 + .label _2 = $d + .label _7 = $18 + .label yi = $d + .label xi = $18 + .label angle = $1a + .label xd = 5 + .label yd = 2 + .label return = $1a + .label x = $13 + .label y = $16 // [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda y+1 bpl b1 @@ -6232,19 +6299,19 @@ atan2_16: { // init_dist_screen // Populates 1000 bytes (a screen) with values representing the distance to the center. // The actual value stored is distance*2 to increase precision -// init_dist_screen(byte* zeropage(3) screen) +// init_dist_screen(byte* zeropage(5) screen) init_dist_screen: { - .label screen = 3 - .label screen_bottomline = 7 - .label yds = $14 - .label screen_topline = 3 - .label y = 2 - .label xds = $16 - .label ds = $16 - .label x = 5 - .label xb = 6 + .label screen = 5 + .label screen_bottomline = 9 + .label yds = $16 + .label screen_topline = 5 + .label y = 4 + .label xds = $18 + .label ds = $18 + .label x = 7 + .label xb = 8 // [106] call init_squares - // [177] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [178] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares jmp b11 @@ -6296,9 +6363,9 @@ init_dist_screen: { b4: // [113] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 // [114] call sqr - // [173] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [174] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from_b4: - // [173] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [174] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // [115] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return @@ -6309,85 +6376,54 @@ init_dist_screen: { // init_dist_screen::@12 b12: // [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [117] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - b5_from_b12: - // [117] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [117] phi from init_dist_screen::@12 to init_dist_screen::@6 [phi:init_dist_screen::@12->init_dist_screen::@6] + b6_from_b12: + // [117] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@6#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [117] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [117] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@6#1] -- vbuz1=vbuc1 lda #0 sta x - jmp b5 - // init_dist_screen::@5 - b5: - // [118] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b6 - jmp b7 - // init_dist_screen::@7 - b7: - // [119] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - // [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - // [121] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 - inc y - // [122] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1_from_b7 - jmp breturn - // init_dist_screen::@return - breturn: - // [123] return - rts + jmp b6 + // [117] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6] + b6_from_b5: + // [117] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy + // [117] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy + jmp b6 // init_dist_screen::@6 b6: - // [124] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [125] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 + // [119] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 cmp #$27 bcs b8 jmp b9 // init_dist_screen::@9 b9: - // [126] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [120] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [127] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [121] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] b10_from_b8: b10_from_b9: - // [127] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [121] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy jmp b10 // init_dist_screen::@10 b10: - // [128] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [129] call sqr - // [173] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] + // [122] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [123] call sqr + // [174] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] sqr_from_b10: - // [173] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy + // [174] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr - // [130] (word) sqr::return#3 ← (word) sqr::return#0 + // [124] (word) sqr::return#3 ← (word) sqr::return#0 jmp b13 // init_dist_screen::@13 b13: - // [131] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - // [132] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [126] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 lda ds clc adc yds @@ -6395,35 +6431,67 @@ init_dist_screen: { lda ds+1 adc yds+1 sta ds+1 - // [133] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [134] call sqrt + // [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [128] call sqrt jsr sqrt - // [135] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // [129] (byte) sqrt::return#2 ← (byte) sqrt::return#0 jmp b14 // init_dist_screen::@14 b14: - // [136] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - // [137] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [130] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [131] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y - // [138] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [132] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_bottomline),y - // [139] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [133] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y - // [140] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [134] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_bottomline),y - // [141] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [135] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 inc x - // [142] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [136] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 dec xb - // [117] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] - b5_from_b14: - // [117] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy - // [117] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy jmp b5 + // init_dist_screen::@5 + b5: + // [137] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b6_from_b5 + jmp b7 + // init_dist_screen::@7 + b7: + // [138] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + // [139] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + // [140] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + inc y + // [141] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1_from_b7 + jmp breturn + // init_dist_screen::@return + breturn: + // [142] return + rts // init_dist_screen::@8 b8: // [143] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 @@ -6441,18 +6509,18 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($16) val) +// sqrt(word zeropage($18) val) sqrt: { - .label _1 = 9 - .label _3 = 9 - .label found = 9 - .label val = $16 + .label _1 = $d + .label _3 = $d + .label found = $d + .label val = $18 // [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 // [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES - sta bsearch16u.items + sta bsearch16u.items_1 lda SQUARES+1 - sta bsearch16u.items+1 + sta bsearch16u.items_1+1 // [147] call bsearch16u // [154] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: @@ -6487,29 +6555,105 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($16) key, word* zeropage(9) items, byte register(X) num) +// bsearch16u(word zeropage($18) key, word* zeropage($d) items, byte register(X) num) bsearch16u: { - .label _2 = 9 - .label pivot = $18 + .label _2 = $d + .label pivot = $d .label result = $1a - .label return = 9 - .label items = 9 - .label key = $16 - // [155] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - b3_from_bsearch16u: - // [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [155] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + .label return = $d + .label items = $d + .label key = $18 + .label items_1 = $b + .label items_10 = $b + .label items_16 = $b + // [155] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4] + b4_from_bsearch16u: + // [155] phi (word*) bsearch16u::items#10 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@4#0] -- register_copy + // [155] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES + jmp b4 + // bsearch16u::@4 + b4: + // [156] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + txa + lsr + // [157] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + asl + // [158] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + clc + adc items_10 + sta pivot + lda #0 + adc items_10+1 + sta pivot+1 + // [159] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + sec + lda key + ldy #0 + sbc (pivot),y + sta result + lda key+1 + iny + sbc (pivot),y + sta result+1 + // [160] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + lda result+1 + bne b6 + lda result + bne b6 + // [161] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return] + breturn_from_b2: + breturn_from_b4: + // [161] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy + jmp breturn + // bsearch16u::@return + breturn: + // [162] return + rts + // bsearch16u::@6 + b6: + // [163] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 + lda result+1 + bmi b10 + bne !+ + lda result + beq b10 + !: + jmp b8 + // bsearch16u::@8 + b8: + // [164] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + lda #1*SIZEOF_WORD + clc + adc items + sta items + bcc !+ + inc items+1 + !: + // [165] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuxx=_dec_vbuxx + dex + // [166] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7] + b7_from_b10: + b7_from_b8: + // [166] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#19 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy + // [166] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy + jmp b7 + // bsearch16u::@7 + b7: + // [167] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + txa + lsr + tax jmp b3 // bsearch16u::@3 b3: - // [156] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 + // [168] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuxx_gt_0_then_la1 cpx #0 - bne b4 + bne b9 jmp b5 // bsearch16u::@5 b5: - // [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [169] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp key+1 @@ -6523,7 +6667,7 @@ bsearch16u: { jmp b1 // bsearch16u::@1 b1: - // [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [170] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -6531,110 +6675,45 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [159] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [171] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] b2_from_b1: b2_from_b5: - // [159] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [171] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp b2 // bsearch16u::@2 b2: - // [160] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - breturn_from_b2: - breturn_from_b8: - // [160] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy - jmp breturn - // bsearch16u::@return - breturn: - // [161] return - rts - // bsearch16u::@4 - b4: - // [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 - txa - lsr - // [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 - asl - // [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa - clc - adc items - sta pivot - lda #0 - adc items+1 - sta pivot+1 - // [165] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 - sec - lda key - ldy #0 - sbc (pivot),y - sta result - lda key+1 - iny - sbc (pivot),y - sta result+1 - // [166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 - lda result+1 - bne b6 - lda result - bne b6 - jmp b8 - // bsearch16u::@8 - b8: - // [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 - lda pivot - sta return - lda pivot+1 - sta return+1 - jmp breturn_from_b8 - // bsearch16u::@6 - b6: - // [168] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 - lda result+1 - bmi b7_from_b6 - bne !+ - lda result - beq b7_from_b6 - !: - jmp b9 + jmp breturn_from_b2 // bsearch16u::@9 b9: - // [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 - lda #1*SIZEOF_WORD - clc - adc pivot + // [172] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 + lda items + sta items_16 + lda items+1 + sta items_16+1 + // [155] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4] + b4_from_b9: + // [155] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy + // [155] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy + jmp b4 + // bsearch16u::@10 + b10: + // [173] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 + lda items_10 sta items - lda #0 - adc pivot+1 + lda items_10+1 sta items+1 - // [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx - dex - // [171] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - b7_from_b6: - b7_from_b9: - // [171] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [171] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy - jmp b7 - // bsearch16u::@7 - b7: - // [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 - txa - lsr - tax - // [155] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - b3_from_b7: - // [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [155] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy - jmp b3 + jmp b7_from_b10 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $16 - .label return_2 = $14 - // [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 + .label return = $18 + .label return_2 = $16 + // [175] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa + // [176] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (SQUARES),y sta return @@ -6644,61 +6723,61 @@ sqr: { jmp breturn // sqr::@return breturn: - // [176] return + // [177] return rts } // init_squares // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label squares = 9 - .label sqr = 7 - // [178] call malloc - // [190] phi from init_squares to malloc [phi:init_squares->malloc] + .label squares = $b + .label sqr = 9 + // [179] call malloc + // [191] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: - // [190] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 + // [191] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #NUM_SQUARES*SIZEOF_WORD sta malloc.size+1 - // [190] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy + // [191] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy jsr malloc jmp b2 // init_squares::@2 b2: - // [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - // [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [180] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + // [181] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta squares lda SQUARES+1 sta squares+1 - // [181] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [182] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] b1_from_b2: - // [181] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 + // [182] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 - // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [181] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [182] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [182] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 lda #<0 sta sqr lda #>0 sta sqr+1 jmp b1 - // [181] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [182] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] b1_from_b1: - // [181] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [181] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [182] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [182] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [182] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy jmp b1 // init_squares::@1 b1: - // [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [183] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y iny lda sqr+1 sta (squares),y - // [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [184] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -6706,38 +6785,38 @@ init_squares: { bcc !+ inc squares+1 !: - // [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [185] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [186] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 - // [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa + // [187] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa clc adc sqr sta sqr bcc !+ inc sqr+1 !: - // [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx + // [188] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx - // [188] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 + // [189] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #NUM_SQUARES-1+1 bne b1_from_b1 jmp breturn // init_squares::@return breturn: - // [189] return + // [190] return rts } // malloc // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. -// malloc(word zeropage($11) size) +// malloc(word zeropage($13) size) malloc: { - .label mem = $11 - .label size = $11 - // [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz1 + .label mem = $13 + .label size = $13 + // [192] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz1 lda heap_head sec sbc mem @@ -6745,7 +6824,7 @@ malloc: { lda heap_head+1 sbc mem+1 sta mem+1 - // [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [193] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda mem sta heap_head lda mem+1 @@ -6753,7 +6832,7 @@ malloc: { jmp breturn // malloc::@return breturn: - // [193] return + // [194] return rts } // File Data @@ -6778,10 +6857,11 @@ Removing instruction jmp b3 Removing instruction jmp b6 Removing instruction jmp breturn Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b4 Removing instruction jmp breturn -Removing instruction jmp b5 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp b5 @@ -6804,24 +6884,25 @@ Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b4 Removing instruction jmp b12 -Removing instruction jmp b5 -Removing instruction jmp b7 -Removing instruction jmp breturn +Removing instruction jmp b6 Removing instruction jmp b9 Removing instruction jmp b10 Removing instruction jmp b13 Removing instruction jmp b14 +Removing instruction jmp b5 +Removing instruction jmp b7 +Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn +Removing instruction jmp b4 +Removing instruction jmp breturn +Removing instruction jmp b8 +Removing instruction jmp b7 Removing instruction jmp b3 Removing instruction jmp b5 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp breturn -Removing instruction jmp b8 -Removing instruction jmp b9 -Removing instruction jmp b7 -Removing instruction jmp breturn Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn @@ -6842,6 +6923,7 @@ Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b3_from_b11 with b3 Replacing label b3_from_b10 with b3 +Replacing label b3_from_b2 with b3 Replacing label b1_from_b4 with b1 Replacing label b7_from_b12 with b7 Replacing label b8_from_b7 with b8 @@ -6851,14 +6933,14 @@ Replacing label b19_from_b18 with b19 Replacing label b13_from_b14 with b13 Replacing label b6_from_b4 with b6 Replacing label b3_from_b1 with b3 +Replacing label b6_from_b5 with b6 Replacing label b1_from_b7 with b1 Replacing label b10_from_b8 with b10 Replacing label b4_from_b2 with b4 Replacing label b2_from_b5 with b2 Replacing label b2_from_b5 with b2 -Replacing label breturn_from_b8 with b2 -Replacing label b7_from_b6 with b7 -Replacing label b7_from_b6 with b7 +Replacing label breturn_from_b2 with breturn +Replacing label b7_from_b10 with b7 Replacing label b1_from_b1 with b1 Removing instruction b1_from_bbegin: Removing instruction b1: @@ -6869,7 +6951,8 @@ Removing instruction b3_from_b10: Removing instruction b3_from_b11: Removing instruction b3_from_b5: Removing instruction b1_from_b4: -Removing instruction b2_from_b1: +Removing instruction b3_from_b1: +Removing instruction b3_from_b2: Removing instruction b3_from_b1: Removing instruction b3_from_b2: Removing instruction b6_from_b4: @@ -6892,17 +6975,17 @@ Removing instruction b1_from_b7: Removing instruction b4_from_b2: Removing instruction b4_from_b3: Removing instruction sqr_from_b4: -Removing instruction b5_from_b12: +Removing instruction b6_from_b12: +Removing instruction b6_from_b5: Removing instruction b10_from_b8: Removing instruction b10_from_b9: Removing instruction sqr_from_b10: +Removing instruction breturn_from_b2: +Removing instruction breturn_from_b4: +Removing instruction b7_from_b10: +Removing instruction b7_from_b8: Removing instruction b2_from_b1: Removing instruction b2_from_b5: -Removing instruction breturn_from_b2: -Removing instruction breturn_from_b8: -Removing instruction breturn: -Removing instruction b7_from_b6: -Removing instruction b7_from_b9: Removing instruction b1_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction b3: @@ -6919,10 +7002,10 @@ Removing instruction b6: Removing instruction breturn: Removing instruction b2_from_b9: Removing instruction b1_from_init_angle_screen: +Removing instruction b5: +Removing instruction b2: Removing instruction b4: Removing instruction breturn: -Removing instruction b5: -Removing instruction b2_from_b5: Removing instruction b2: Removing instruction b5: Removing instruction b21: @@ -6936,21 +7019,21 @@ Removing instruction b11: Removing instruction b1_from_b11: Removing instruction b3: Removing instruction b12: -Removing instruction b7: -Removing instruction breturn: Removing instruction b9: Removing instruction b13: Removing instruction b14: -Removing instruction b5_from_b14: +Removing instruction b5: +Removing instruction b7: +Removing instruction breturn: Removing instruction bsearch16u_from_sqrt: Removing instruction b1: Removing instruction breturn: -Removing instruction b3_from_bsearch16u: +Removing instruction b4_from_bsearch16u: +Removing instruction b8: +Removing instruction b3: Removing instruction b5: Removing instruction b1: -Removing instruction b8: -Removing instruction b9: -Removing instruction b3_from_b7: +Removing instruction b4_from_b9: Removing instruction breturn: Removing instruction malloc_from_init_squares: Removing instruction b2: @@ -6958,19 +7041,25 @@ Removing instruction b1_from_b2: Removing instruction breturn: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Replacing jump to rts with rts in jmp b2 +Skipping double jump to breturn in beq b2 +Skipping double jump to breturn in bcc b2 +Replacing jump to rts with rts in jmp breturn Succesful ASM optimization Pass5DoubleJumpElimination Adding RTS to root block Succesful ASM optimization Pass5AddMainRts Removing instruction jmp b1 +Removing instruction jmp b3 Removing instruction jmp b1 +Removing instruction jmp b6 Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [384] beq b12 to bne -Fixing long branch [278] bpl b1 to bmi -Fixing long branch [290] bpl b4 to bmi +Removing instruction b2: +Succesful ASM optimization Pass5UnusedLabelElimination +Fixing long branch [382] beq b12 to bne +Fixing long branch [276] bpl b1 to bmi +Fixing long branch [288] bpl b4 to bmi FINAL SYMBOL TABLE (label) @1 @@ -6996,19 +7085,19 @@ FINAL SYMBOL TABLE (const byte) RADIX::HEXADECIMAL HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL OCTAL = (number) 8 (byte*) SCREEN_ANGLE -(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:13 0.08695652173913043 +(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:17 0.08695652173913043 (byte*) SCREEN_DIST -(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:11 0.08 +(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:15 0.08 (byte*) SCREEN_FILL (const byte*) SCREEN_FILL#0 SCREEN_FILL = (byte*) 1024 (const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2 (word*) SQUARES -(void*) SQUARES#1 SQUARES zp ZP_WORD:17 0.03225806451612903 +(void*) SQUARES#1 SQUARES zp ZP_WORD:19 0.03225806451612903 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) -(signed word~) atan2_16::$2 $2 zp ZP_WORD:20 4.0 +(signed word~) atan2_16::$2 $2 zp ZP_WORD:13 4.0 (byte~) atan2_16::$23 reg byte a 2002.0 (byte~) atan2_16::$24 reg byte a 2002.0 -(signed word~) atan2_16::$7 $7 zp ZP_WORD:22 4.0 +(signed word~) atan2_16::$7 $7 zp ZP_WORD:24 4.0 (label) atan2_16::@1 (label) atan2_16::@10 (label) atan2_16::@11 @@ -7032,60 +7121,61 @@ FINAL SYMBOL TABLE (label) atan2_16::@9 (label) atan2_16::@return (word) atan2_16::angle -(word) atan2_16::angle#1 angle zp ZP_WORD:24 3.0 -(word) atan2_16::angle#11 angle zp ZP_WORD:24 4.0 -(word) atan2_16::angle#12 angle zp ZP_WORD:24 190.66666666666666 -(word) atan2_16::angle#13 angle zp ZP_WORD:24 1334.6666666666667 -(word) atan2_16::angle#2 angle zp ZP_WORD:24 2002.0 -(word) atan2_16::angle#3 angle zp ZP_WORD:24 2002.0 -(word) atan2_16::angle#4 angle zp ZP_WORD:24 4.0 -(word) atan2_16::angle#5 angle zp ZP_WORD:24 4.0 -(word) atan2_16::angle#6 angle zp ZP_WORD:24 2004.0 +(word) atan2_16::angle#1 angle zp ZP_WORD:26 3.0 +(word) atan2_16::angle#11 angle zp ZP_WORD:26 4.0 +(word) atan2_16::angle#12 angle zp ZP_WORD:26 190.66666666666666 +(word) atan2_16::angle#13 angle zp ZP_WORD:26 1334.6666666666667 +(word) atan2_16::angle#2 angle zp ZP_WORD:26 2002.0 +(word) atan2_16::angle#3 angle zp ZP_WORD:26 2002.0 +(word) atan2_16::angle#4 angle zp ZP_WORD:26 4.0 +(word) atan2_16::angle#5 angle zp ZP_WORD:26 4.0 +(word) atan2_16::angle#6 angle zp ZP_WORD:26 2004.0 (byte) atan2_16::i (byte) atan2_16::i#1 reg byte x 1501.5 (byte) atan2_16::i#2 reg byte x 208.54166666666669 (word) atan2_16::return -(word) atan2_16::return#0 return zp ZP_WORD:24 34.99999999999999 -(word) atan2_16::return#2 return zp ZP_WORD:24 202.0 +(word) atan2_16::return#0 return zp ZP_WORD:26 34.99999999999999 +(word) atan2_16::return#2 return zp ZP_WORD:26 202.0 (byte) atan2_16::shift (byte) atan2_16::shift#1 reg byte y 20002.0 (byte) atan2_16::shift#2 reg byte y 8001.25 (byte~) atan2_16::shift#5 reg byte y 667.3333333333334 (signed word) atan2_16::x -(signed word) atan2_16::x#0 x zp ZP_WORD:15 2.8684210526315796 +(signed word) atan2_16::x#0 x zp ZP_WORD:19 2.8684210526315796 (signed word) atan2_16::xd -(signed word) atan2_16::xd#1 xd zp ZP_WORD:3 6667.333333333333 -(signed word~) atan2_16::xd#10 xd zp ZP_WORD:3 1001.0 -(signed word) atan2_16::xd#2 xd zp ZP_WORD:3 1001.0 -(signed word) atan2_16::xd#3 xd zp ZP_WORD:3 7668.333333333332 -(signed word) atan2_16::xd#5 xd zp ZP_WORD:3 1001.0 +(signed word) atan2_16::xd#1 xd zp ZP_WORD:5 6667.333333333333 +(signed word~) atan2_16::xd#10 xd zp ZP_WORD:5 1001.0 +(signed word) atan2_16::xd#2 xd zp ZP_WORD:5 1001.0 +(signed word) atan2_16::xd#3 xd zp ZP_WORD:5 7668.333333333332 +(signed word) atan2_16::xd#5 xd zp ZP_WORD:5 1001.0 (signed word) atan2_16::xi -(signed word) atan2_16::xi#0 xi zp ZP_WORD:22 6.0 -(signed word) atan2_16::xi#1 xi zp ZP_WORD:22 500.5 -(signed word~) atan2_16::xi#13 xi zp ZP_WORD:22 4.0 -(signed word) atan2_16::xi#2 xi zp ZP_WORD:22 500.5 -(signed word) atan2_16::xi#3 xi zp ZP_WORD:22 267.0666666666667 -(signed word) atan2_16::xi#8 xi zp ZP_WORD:22 1001.0 +(signed word) atan2_16::xi#0 xi zp ZP_WORD:24 6.0 +(signed word) atan2_16::xi#1 xi zp ZP_WORD:24 500.5 +(signed word~) atan2_16::xi#13 xi zp ZP_WORD:24 4.0 +(signed word) atan2_16::xi#2 xi zp ZP_WORD:24 500.5 +(signed word) atan2_16::xi#3 xi zp ZP_WORD:24 267.0666666666667 +(signed word) atan2_16::xi#8 xi zp ZP_WORD:24 1001.0 (signed word) atan2_16::y -(signed word) atan2_16::y#0 y zp ZP_WORD:17 2.724999999999999 +(signed word) atan2_16::y#0 y zp ZP_WORD:22 2.724999999999999 (signed word) atan2_16::yd -(signed word) atan2_16::yd#1 yd zp ZP_WORD:26 10001.0 -(signed word~) atan2_16::yd#10 yd zp ZP_WORD:26 2002.0 -(signed word) atan2_16::yd#2 yd zp ZP_WORD:26 2002.0 -(signed word) atan2_16::yd#3 yd zp ZP_WORD:26 4601.0 -(signed word) atan2_16::yd#5 yd zp ZP_WORD:26 2002.0 +(signed word) atan2_16::yd#1 yd zp ZP_WORD:2 10001.0 +(signed word~) atan2_16::yd#10 yd zp ZP_WORD:2 2002.0 +(signed word) atan2_16::yd#2 yd zp ZP_WORD:2 2002.0 +(signed word) atan2_16::yd#3 yd zp ZP_WORD:2 4601.0 +(signed word) atan2_16::yd#5 yd zp ZP_WORD:2 2002.0 (signed word) atan2_16::yi -(signed word) atan2_16::yi#0 yi zp ZP_WORD:20 1.2000000000000002 -(signed word) atan2_16::yi#1 yi zp ZP_WORD:20 667.3333333333334 -(signed word~) atan2_16::yi#16 yi zp ZP_WORD:20 4.0 -(signed word) atan2_16::yi#2 yi zp ZP_WORD:20 667.3333333333334 -(signed word) atan2_16::yi#3 yi zp ZP_WORD:20 353.4117647058823 -(signed word) atan2_16::yi#8 yi zp ZP_WORD:20 1001.0 +(signed word) atan2_16::yi#0 yi zp ZP_WORD:13 1.2000000000000002 +(signed word) atan2_16::yi#1 yi zp ZP_WORD:13 667.3333333333334 +(signed word~) atan2_16::yi#16 yi zp ZP_WORD:13 4.0 +(signed word) atan2_16::yi#2 yi zp ZP_WORD:13 667.3333333333334 +(signed word) atan2_16::yi#3 yi zp ZP_WORD:13 353.4117647058823 +(signed word) atan2_16::yi#8 yi zp ZP_WORD:13 1001.0 (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) (byte~) bsearch16u::$16 reg byte a 2002.0 -(word*~) bsearch16u::$2 $2 zp ZP_WORD:9 4.0 +(word*~) bsearch16u::$2 $2 zp ZP_WORD:13 4.0 (byte~) bsearch16u::$6 reg byte a 2002.0 (label) bsearch16u::@1 +(label) bsearch16u::@10 (label) bsearch16u::@2 (label) bsearch16u::@3 (label) bsearch16u::@4 @@ -7096,31 +7186,32 @@ FINAL SYMBOL TABLE (label) bsearch16u::@9 (label) bsearch16u::@return (word*) bsearch16u::items -(word*) bsearch16u::items#0 items zp ZP_WORD:9 1001.0 -(word*) bsearch16u::items#1 items zp ZP_WORD:9 2.0 -(word*) bsearch16u::items#2 items zp ZP_WORD:9 334.5555555555556 -(word*) bsearch16u::items#8 items zp ZP_WORD:9 1501.5 +(word*) bsearch16u::items#0 items zp ZP_WORD:13 1001.0 +(word*) bsearch16u::items#1 items#1 zp ZP_WORD:11 2.0 +(word*) bsearch16u::items#10 items#10 zp ZP_WORD:11 429.2857142857143 +(word*) bsearch16u::items#11 items zp ZP_WORD:13 752.25 +(word*~) bsearch16u::items#16 items#16 zp ZP_WORD:11 2002.0 +(word*~) bsearch16u::items#19 items zp ZP_WORD:13 2002.0 (word) bsearch16u::key -(word) bsearch16u::key#0 key zp ZP_WORD:22 0.26666666666666666 +(word) bsearch16u::key#0 key zp ZP_WORD:24 0.23529411764705882 (byte) bsearch16u::num -(byte) bsearch16u::num#0 reg byte x 2002.0 +(byte) bsearch16u::num#0 reg byte x 1001.0 (byte) bsearch16u::num#1 reg byte x 2002.0 -(byte) bsearch16u::num#3 reg byte x 556.1111111111111 +(byte) bsearch16u::num#10 reg byte x 444.8888888888889 (byte) bsearch16u::num#5 reg byte x 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:24 501.0 +(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:13 750.75 (signed word) bsearch16u::result (signed word) bsearch16u::result#0 result zp ZP_WORD:26 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 return zp ZP_WORD:9 2.0 -(word*) bsearch16u::return#2 return zp ZP_WORD:9 6.0 -(word*) bsearch16u::return#3 return zp ZP_WORD:9 4.0 -(word*~) bsearch16u::return#6 return zp ZP_WORD:9 4.0 +(word*) bsearch16u::return#1 return zp ZP_WORD:13 335.00000000000006 +(word*) bsearch16u::return#2 return zp ZP_WORD:13 6.0 +(word*) bsearch16u::return#3 return zp ZP_WORD:13 4.0 (byte*) heap_head -(byte*) heap_head#1 heap_head zp ZP_WORD:15 0.6000000000000001 -(byte*) heap_head#12 heap_head zp ZP_WORD:15 6.0 +(byte*) heap_head#1 heap_head zp ZP_WORD:13 0.6000000000000001 +(byte*) heap_head#12 heap_head zp ZP_WORD:13 6.0 (void()) init_angle_screen((byte*) init_angle_screen::screen) -(word~) init_angle_screen::$11 $11 zp ZP_WORD:24 202.0 +(word~) init_angle_screen::$11 $11 zp ZP_WORD:26 202.0 (byte~) init_angle_screen::$13 reg byte a 202.0 (byte~) init_angle_screen::$14 reg byte a 202.0 (byte~) init_angle_screen::$15 reg byte a 202.0 @@ -7134,32 +7225,32 @@ FINAL SYMBOL TABLE (label) init_angle_screen::@5 (label) init_angle_screen::@return (byte) init_angle_screen::ang_w -(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:19 84.16666666666666 +(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:21 84.16666666666666 (word) init_angle_screen::angle_w -(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:24 202.0 +(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:26 202.0 (byte*) init_angle_screen::screen -(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:9 3.0 +(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:11 3.0 (byte*) init_angle_screen::screen_bottomline -(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:9 4.0 -(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:9 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:9 9.04 +(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:11 4.0 +(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:11 7.333333333333333 +(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:11 9.040000000000001 (byte*) init_angle_screen::screen_topline -(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:7 2.0 -(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:7 5.5 -(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:7 9.416666666666666 +(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:9 2.0 +(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:9 5.5 +(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:9 9.416666666666666 (byte) init_angle_screen::x -(byte) init_angle_screen::x#1 x zp ZP_BYTE:5 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:5 28.857142857142858 +(byte) init_angle_screen::x#1 x zp ZP_BYTE:7 101.0 +(byte) init_angle_screen::x#5 x zp ZP_BYTE:7 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:6 202.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:6 18.363636363636363 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:8 101.0 +(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:8 19.238095238095237 (signed word) init_angle_screen::xw -(word) init_angle_screen::xw#0 xw zp ZP_WORD:15 33.666666666666664 +(word) init_angle_screen::xw#0 xw zp ZP_WORD:19 33.666666666666664 (byte) init_angle_screen::y -(byte) init_angle_screen::y#1 y zp ZP_BYTE:2 16.5 -(byte) init_angle_screen::y#5 y zp ZP_BYTE:2 4.730769230769231 +(byte) init_angle_screen::y#1 y zp ZP_BYTE:4 16.5 +(byte) init_angle_screen::y#5 y zp ZP_BYTE:4 4.730769230769231 (signed word) init_angle_screen::yw -(word) init_angle_screen::yw#0 yw zp ZP_WORD:17 50.5 +(word) init_angle_screen::yw#0 yw zp ZP_WORD:22 50.5 (void()) init_dist_screen((byte*) init_dist_screen::screen) (byte~) init_dist_screen::$14 reg byte a 202.0 (byte~) init_dist_screen::$16 reg byte a 202.0 @@ -7183,37 +7274,37 @@ FINAL SYMBOL TABLE (byte) init_dist_screen::d (byte) init_dist_screen::d#0 reg byte a 126.25 (word) init_dist_screen::ds -(word) init_dist_screen::ds#0 ds zp ZP_WORD:22 202.0 +(word) init_dist_screen::ds#0 ds zp ZP_WORD:24 202.0 (byte*) init_dist_screen::screen -(byte*) init_dist_screen::screen#0 screen zp ZP_WORD:3 1.5 +(byte*) init_dist_screen::screen#0 screen zp ZP_WORD:5 1.5 (byte*) init_dist_screen::screen_bottomline -(byte*) init_dist_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:7 4.0 -(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:7 7.333333333333333 -(byte*) init_dist_screen::screen_bottomline#11 screen_bottomline zp ZP_WORD:7 6.848484848484849 +(byte*) init_dist_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:9 4.0 +(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:9 7.333333333333333 +(byte*) init_dist_screen::screen_bottomline#11 screen_bottomline zp ZP_WORD:9 6.848484848484849 (byte*) init_dist_screen::screen_topline -(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:3 5.5 -(byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:3 7.0625 +(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:5 5.5 +(byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:5 7.0625 (byte) init_dist_screen::x -(byte) init_dist_screen::x#1 x zp ZP_BYTE:5 101.0 -(byte) init_dist_screen::x#2 x zp ZP_BYTE:5 30.3 +(byte) init_dist_screen::x#1 x zp ZP_BYTE:7 101.0 +(byte) init_dist_screen::x#10 x zp ZP_BYTE:7 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 reg byte a 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:6 202.0 -(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:6 19.238095238095237 +(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:8 101.0 +(byte) init_dist_screen::xb#10 xb zp ZP_BYTE:8 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 reg byte a 303.0 (word) init_dist_screen::xds -(word) init_dist_screen::xds#0 xds zp ZP_WORD:22 202.0 +(word) init_dist_screen::xds#0 xds zp ZP_WORD:24 202.0 (byte) init_dist_screen::y -(byte) init_dist_screen::y#1 y zp ZP_BYTE:2 16.5 -(byte) init_dist_screen::y#10 y zp ZP_BYTE:2 0.9705882352941178 +(byte) init_dist_screen::y#1 y zp ZP_BYTE:4 16.5 +(byte) init_dist_screen::y#10 y zp ZP_BYTE:4 0.9705882352941178 (byte) init_dist_screen::y2 (byte) init_dist_screen::y2#0 reg byte a 22.0 (byte) init_dist_screen::yd (byte) init_dist_screen::yd#0 reg byte a 33.0 (word) init_dist_screen::yds -(word) init_dist_screen::yds#0 yds zp ZP_WORD:20 4.869565217391305 +(word) init_dist_screen::yds#0 yds zp ZP_WORD:22 4.869565217391305 (void()) init_squares() (byte~) init_squares::$3 reg byte a 22.0 (byte~) init_squares::$4 reg byte a 22.0 @@ -7224,12 +7315,12 @@ FINAL SYMBOL TABLE (byte) init_squares::i#1 reg byte x 16.5 (byte) init_squares::i#2 reg byte x 5.5 (word) init_squares::sqr -(word) init_squares::sqr#1 sqr zp ZP_WORD:7 7.333333333333333 -(word) init_squares::sqr#2 sqr zp ZP_WORD:7 6.6000000000000005 +(word) init_squares::sqr#1 sqr zp ZP_WORD:9 7.333333333333333 +(word) init_squares::sqr#2 sqr zp ZP_WORD:9 6.6000000000000005 (word*) init_squares::squares -(word*) init_squares::squares#0 squares zp ZP_WORD:9 4.0 -(word*) init_squares::squares#1 squares zp ZP_WORD:9 3.6666666666666665 -(word*) init_squares::squares#2 squares zp ZP_WORD:9 17.5 +(word*) init_squares::squares#0 squares zp ZP_WORD:11 4.0 +(word*) init_squares::squares#1 squares zp ZP_WORD:11 3.6666666666666665 +(word*) init_squares::squares#2 squares zp ZP_WORD:11 17.5 (void()) main() (label) main::@1 (label) main::@10 @@ -7244,104 +7335,104 @@ FINAL SYMBOL TABLE (label) main::@9 (label) main::@return (byte*) main::angle -(byte*) main::angle#0 angle zp ZP_WORD:20 22.0 -(byte*) main::angle#1 angle zp ZP_WORD:20 50.5 -(byte*) main::angle#2 angle zp ZP_WORD:20 34.888888888888886 +(byte*) main::angle#0 angle zp ZP_WORD:13 22.0 +(byte*) main::angle#1 angle zp ZP_WORD:13 50.5 +(byte*) main::angle#2 angle zp ZP_WORD:13 34.888888888888886 (byte*) main::dist -(byte*) main::dist#0 dist zp ZP_WORD:9 11.0 -(byte*) main::dist#1 dist zp ZP_WORD:9 40.4 -(byte*) main::dist#2 dist zp ZP_WORD:9 39.25 +(byte*) main::dist#0 dist zp ZP_WORD:11 11.0 +(byte*) main::dist#1 dist zp ZP_WORD:11 40.4 +(byte*) main::dist#2 dist zp ZP_WORD:11 39.25 (word) main::dist_angle -(word) main::dist_angle#0 dist_angle zp ZP_WORD:26 101.0 +(word) main::dist_angle#0 dist_angle zp ZP_WORD:2 101.0 (byte*) main::fill -(byte*) main::fill#1 fill zp ZP_WORD:7 101.0 -(byte*) main::fill#2 fill zp ZP_WORD:7 40.4 +(byte*) main::fill#1 fill zp ZP_WORD:9 101.0 +(byte*) main::fill#2 fill zp ZP_WORD:9 40.4 (word) main::min_dist_angle -(word) main::min_dist_angle#2 min_dist_angle zp ZP_WORD:22 101.0 -(word) main::min_dist_angle#3 min_dist_angle#3 zp ZP_WORD:26 83.0 -(word~) main::min_dist_angle#6 min_dist_angle zp ZP_WORD:22 202.0 -(word~) main::min_dist_angle#7 min_dist_angle#7 zp ZP_WORD:26 202.0 -(word~) main::min_dist_angle#8 min_dist_angle#8 zp ZP_WORD:26 202.0 +(word) main::min_dist_angle#2 min_dist_angle zp ZP_WORD:24 101.0 +(word) main::min_dist_angle#3 min_dist_angle#3 zp ZP_WORD:2 83.0 +(word~) main::min_dist_angle#6 min_dist_angle zp ZP_WORD:24 202.0 +(word~) main::min_dist_angle#7 min_dist_angle#7 zp ZP_WORD:2 202.0 +(word~) main::min_dist_angle#8 min_dist_angle#8 zp ZP_WORD:2 202.0 (byte*) main::min_fill -(byte*~) main::min_fill#10 min_fill zp ZP_WORD:24 202.0 -(byte*) main::min_fill#2 min_fill zp ZP_WORD:24 59.285714285714285 -(byte*) main::min_fill#5 min_fill zp ZP_WORD:24 50.5 +(byte*~) main::min_fill#10 min_fill zp ZP_WORD:26 202.0 +(byte*) main::min_fill#2 min_fill zp ZP_WORD:26 59.285714285714285 +(byte*) main::min_fill#5 min_fill zp ZP_WORD:26 50.5 (void*()) malloc((word) malloc::size) (label) malloc::@return (byte*) malloc::mem -(byte*) malloc::mem#0 mem zp ZP_WORD:17 0.6666666666666666 +(byte*) malloc::mem#0 mem zp ZP_WORD:19 0.6666666666666666 (void*) malloc::return (word) malloc::size -(word) malloc::size#3 size zp ZP_WORD:17 2.0 +(word) malloc::size#3 size zp ZP_WORD:19 2.0 (word()) sqr((byte) sqr::val) (byte~) sqr::$0 reg byte a 4.0 (label) sqr::@return (word) sqr::return -(word) sqr::return#0 return zp ZP_WORD:22 28.5 -(word) sqr::return#2 return#2 zp ZP_WORD:20 22.0 -(word) sqr::return#3 return zp ZP_WORD:22 202.0 +(word) sqr::return#0 return zp ZP_WORD:24 28.5 +(word) sqr::return#2 return#2 zp ZP_WORD:22 22.0 +(word) sqr::return#3 return zp ZP_WORD:24 202.0 (byte) sqr::val (byte) sqr::val#0 reg byte a 22.0 (byte) sqr::val#1 reg byte a 202.0 (byte) sqr::val#2 reg byte a 114.0 (byte()) sqrt((word) sqrt::val) -(word~) sqrt::$1 $1 zp ZP_WORD:9 2.0 -(word~) sqrt::$3 $3 zp ZP_WORD:9 4.0 +(word~) sqrt::$1 $1 zp ZP_WORD:13 2.0 +(word~) sqrt::$3 $3 zp ZP_WORD:13 4.0 (label) sqrt::@1 (label) sqrt::@return (word*) sqrt::found -(word*) sqrt::found#0 found zp ZP_WORD:9 4.0 +(word*) sqrt::found#0 found zp ZP_WORD:13 4.0 (byte) sqrt::return (byte) sqrt::return#0 reg byte a 34.33333333333333 (byte) sqrt::return#2 reg byte a 202.0 (byte) sqrt::sq (word) sqrt::val -(word) sqrt::val#0 val zp ZP_WORD:22 103.0 +(word) sqrt::val#0 val zp ZP_WORD:24 103.0 reg byte x [ atan2_16::i#2 atan2_16::i#1 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -zp ZP_BYTE:2 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::y#5 init_angle_screen::y#1 ] -zp ZP_WORD:3 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +zp ZP_WORD:2 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] +zp ZP_BYTE:4 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::y#5 init_angle_screen::y#1 ] +zp ZP_WORD:5 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -zp ZP_BYTE:5 [ init_dist_screen::x#2 init_dist_screen::x#1 init_angle_screen::x#2 init_angle_screen::x#1 ] -zp ZP_BYTE:6 [ init_dist_screen::xb#2 init_dist_screen::xb#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ] +zp ZP_BYTE:7 [ init_dist_screen::x#10 init_dist_screen::x#1 init_angle_screen::x#5 init_angle_screen::x#1 ] +zp ZP_BYTE:8 [ init_dist_screen::xb#10 init_dist_screen::xb#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ] reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] -zp ZP_WORD:7 [ init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 main::fill#2 main::fill#1 ] -zp ZP_WORD:9 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 main::dist#2 main::dist#0 main::dist#1 ] +zp ZP_WORD:9 [ init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 main::fill#2 main::fill#1 ] +zp ZP_WORD:11 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 main::dist#2 main::dist#0 main::dist#1 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] -zp ZP_WORD:11 [ SCREEN_DIST#0 ] -zp ZP_WORD:13 [ SCREEN_ANGLE#0 ] +zp ZP_WORD:13 [ heap_head#12 heap_head#1 bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 main::angle#2 main::angle#0 main::angle#1 ] +zp ZP_WORD:15 [ SCREEN_DIST#0 ] +zp ZP_WORD:17 [ SCREEN_ANGLE#0 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] -zp ZP_WORD:15 [ init_angle_screen::xw#0 atan2_16::x#0 heap_head#12 heap_head#1 ] +zp ZP_WORD:19 [ init_angle_screen::xw#0 atan2_16::x#0 malloc::size#3 malloc::mem#0 SQUARES#1 ] reg byte a [ init_angle_screen::$7 ] -zp ZP_WORD:17 [ init_angle_screen::yw#0 atan2_16::y#0 malloc::size#3 malloc::mem#0 SQUARES#1 ] -zp ZP_BYTE:19 [ init_angle_screen::ang_w#0 ] +zp ZP_BYTE:21 [ init_angle_screen::ang_w#0 ] reg byte a [ init_angle_screen::$13 ] reg byte a [ init_angle_screen::$14 ] reg byte a [ init_angle_screen::$15 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte a [ init_dist_screen::y2#0 ] -zp ZP_WORD:20 [ sqr::return#2 init_dist_screen::yds#0 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 main::angle#2 main::angle#0 main::angle#1 ] +zp ZP_WORD:22 [ sqr::return#2 init_dist_screen::yds#0 init_angle_screen::yw#0 atan2_16::y#0 ] reg byte a [ init_dist_screen::x2#0 ] -zp ZP_WORD:22 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 main::min_dist_angle#2 main::min_dist_angle#6 ] +zp ZP_WORD:24 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 main::min_dist_angle#2 main::min_dist_angle#6 ] reg byte a [ sqrt::return#2 ] reg byte a [ init_dist_screen::d#0 ] reg byte a [ sqrt::return#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] -zp ZP_WORD:24 [ bsearch16u::pivot#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 main::min_fill#5 main::min_fill#2 main::min_fill#10 ] -zp ZP_WORD:26 [ bsearch16u::result#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] +zp ZP_WORD:26 [ bsearch16u::result#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 main::min_fill#5 main::min_fill#2 main::min_fill#10 ] reg byte a [ sqr::$0 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] FINAL ASSEMBLER -Score: 1112746 +Score: 1138688 // File Comments // Fill screen using a spiral based on distance-to-center / angle-to-center @@ -7360,25 +7451,25 @@ Score: 1112746 // Char to fill with .const FILL_CHAR = '@' .const NUM_SQUARES = $30 - .label heap_head = $f - .label SQUARES = $11 + .label heap_head = $d + .label SQUARES = $13 // Screen containing distance to center - .label SCREEN_DIST = $b + .label SCREEN_DIST = $f // Screen containing angle to center - .label SCREEN_ANGLE = $d + .label SCREEN_ANGLE = $11 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] // @1 // malloc(1000) // [2] call malloc - // [190] phi from @1 to malloc [phi:@1->malloc] - // [190] phi (word) malloc::size#3 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 + // [191] phi from @1 to malloc [phi:@1->malloc] + // [191] phi (word) malloc::size#3 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta malloc.size lda #>$3e8 sta malloc.size+1 - // [190] phi (byte*) heap_head#12 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 + // [191] phi (byte*) heap_head#12 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -7392,13 +7483,13 @@ bbegin: lda malloc.mem+1 sta SCREEN_DIST+1 // [4] call malloc - // [190] phi from @3 to malloc [phi:@3->malloc] - // [190] phi (word) malloc::size#3 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 + // [191] phi from @3 to malloc [phi:@3->malloc] + // [191] phi (word) malloc::size#3 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta malloc.size lda #>$3e8 sta malloc.size+1 - // [190] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy + // [191] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy jsr malloc // @4 // malloc(1000) @@ -7416,15 +7507,15 @@ bbegin: // @end // main main: { - .label dist = 9 - .label angle = $14 - .label fill = 7 - .label dist_angle = $1a - .label min_dist_angle = $16 - .label min_dist_angle_3 = $1a - .label min_fill = $18 - .label min_dist_angle_7 = $1a - .label min_dist_angle_8 = $1a + .label dist = $b + .label angle = $d + .label fill = 9 + .label dist_angle = 2 + .label min_dist_angle = $18 + .label min_dist_angle_3 = 2 + .label min_fill = $1a + .label min_dist_angle_7 = 2 + .label min_dist_angle_8 = 2 // init_dist_screen(SCREEN_DIST) // [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 lda SCREEN_DIST @@ -7596,19 +7687,19 @@ main: { // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center -// init_angle_screen(byte* zeropage(9) screen) +// init_angle_screen(byte* zeropage($b) screen) init_angle_screen: { - .label _11 = $18 - .label screen = 9 - .label screen_topline = 7 - .label screen_bottomline = 9 - .label xw = $f - .label yw = $11 - .label angle_w = $18 - .label ang_w = $13 - .label x = 5 - .label xb = 6 - .label y = 2 + .label _11 = $1a + .label screen = $b + .label screen_topline = 9 + .label screen_bottomline = $b + .label xw = $13 + .label yw = $16 + .label angle_w = $1a + .label ang_w = $15 + .label x = 7 + .label xb = 8 + .label y = 4 // screen_topline = screen+40*12 // [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda screen @@ -7639,85 +7730,51 @@ init_angle_screen: { // [33] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy // init_angle_screen::@1 b1: - // [34] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - // [34] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [34] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3] + // [34] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [34] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [34] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 lda #0 sta x - // init_angle_screen::@2 - b2: - // for( byte x=0,xb=39; x<=19; x++, xb--) - // [35] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b3 - // init_angle_screen::@4 - // screen_topline -= 40 - // [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_topline - sec - sbc #<$28 - sta screen_topline - lda screen_topline+1 - sbc #>$28 - sta screen_topline+1 - // screen_bottomline += 40 - // [37] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_bottomline - sta screen_bottomline - bcc !+ - inc screen_bottomline+1 - !: - // for(byte y: 0..12) - // [38] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 - inc y - // [39] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1 - // init_angle_screen::@return - // } - // [40] return - rts + // [34] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3] + // [34] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy + // [34] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy // init_angle_screen::@3 b3: // x*2 - // [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [35] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // 39-x*2 - // [42] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [36] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // (word){ 39-x*2, 0 } - // [43] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [37] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw // y*2 - // [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [38] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl // (word){ y*2, 0 } - // [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [39] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 sta yw+1 sty yw // atan2_16(xw, yw) - // [46] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [47] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [48] call atan2_16 + // [40] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [41] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [42] call atan2_16 jsr atan2_16 - // [49] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [43] (word) atan2_16::return#2 ← (word) atan2_16::return#0 // init_angle_screen::@5 // angle_w = atan2_16(xw, yw) - // [50] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [44] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 // angle_w+0x0080 - // [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [45] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _11 @@ -7726,64 +7783,95 @@ init_angle_screen: { inc _11+1 !: // ang_w = >(angle_w+0x0080) - // [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [46] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda _11+1 sta ang_w // screen_bottomline[xb] = ang_w - // [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [47] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 ldy xb sta (screen_bottomline),y // -ang_w - // [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [48] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 eor #$ff clc adc #1 // screen_topline[xb] = -ang_w - // [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [49] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_topline),y // 0x80+ang_w - // [56] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [50] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w // screen_topline[x] = 0x80+ang_w - // [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [51] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y // 0x80-ang_w - // [58] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [52] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w // screen_bottomline[x] = 0x80-ang_w - // [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [60] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [54] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 inc x - // [61] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [55] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 dec xb - // [34] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - // [34] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [34] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy - jmp b2 + // init_angle_screen::@2 + // [56] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b3 + // init_angle_screen::@4 + // screen_topline -= 40 + // [57] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_topline + sec + sbc #<$28 + sta screen_topline + lda screen_topline+1 + sbc #>$28 + sta screen_topline+1 + // screen_bottomline += 40 + // [58] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_bottomline + sta screen_bottomline + bcc !+ + inc screen_bottomline+1 + !: + // for(byte y: 0..12) + // [59] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + inc y + // [60] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1 + // init_angle_screen::@return + // } + // [61] return + rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($f) x, signed word zeropage($11) y) +// atan2_16(signed word zeropage($13) x, signed word zeropage($16) y) atan2_16: { - .label _2 = $14 - .label _7 = $16 - .label yi = $14 - .label xi = $16 - .label angle = $18 - .label xd = 3 - .label yd = $1a - .label return = $18 - .label x = $f - .label y = $11 + .label _2 = $d + .label _7 = $18 + .label yi = $d + .label xi = $18 + .label angle = $1a + .label xd = 5 + .label yd = 2 + .label return = $1a + .label x = $13 + .label y = $16 // (y>=0)?y:-y // [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda y+1 @@ -8072,20 +8160,20 @@ atan2_16: { // init_dist_screen // Populates 1000 bytes (a screen) with values representing the distance to the center. // The actual value stored is distance*2 to increase precision -// init_dist_screen(byte* zeropage(3) screen) +// init_dist_screen(byte* zeropage(5) screen) init_dist_screen: { - .label screen = 3 - .label screen_bottomline = 7 - .label yds = $14 - .label screen_topline = 3 - .label y = 2 - .label xds = $16 - .label ds = $16 - .label x = 5 - .label xb = 6 + .label screen = 5 + .label screen_bottomline = 9 + .label yds = $16 + .label screen_topline = 5 + .label y = 4 + .label xds = $18 + .label ds = $18 + .label x = 7 + .label xb = 8 // init_squares() // [106] call init_squares - // [177] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [178] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] jsr init_squares // init_dist_screen::@11 // screen_bottomline = screen+40*24 @@ -8129,8 +8217,8 @@ init_dist_screen: { // sqr(yd) // [113] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 // [114] call sqr - // [173] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] - // [173] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [174] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [174] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // sqr(yd) // [115] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 @@ -8141,82 +8229,48 @@ init_dist_screen: { // init_dist_screen::@12 // yds = sqr(yd) // [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [117] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - // [117] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [117] phi from init_dist_screen::@12 to init_dist_screen::@6 [phi:init_dist_screen::@12->init_dist_screen::@6] + // [117] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@6#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [117] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [117] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@6#1] -- vbuz1=vbuc1 lda #0 sta x - // init_dist_screen::@5 - b5: - // for( byte x=0,xb=39; x<=19; x++, xb--) - // [118] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 - lda x - cmp #$13+1 - bcc b6 - // init_dist_screen::@7 - // screen_topline += 40 - // [119] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc screen_topline - sta screen_topline - bcc !+ - inc screen_topline+1 - !: - // screen_bottomline -= 40 - // [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda screen_bottomline - sec - sbc #<$28 - sta screen_bottomline - lda screen_bottomline+1 - sbc #>$28 - sta screen_bottomline+1 - // for(byte y: 0..12) - // [121] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 - inc y - // [122] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$d - cmp y - bne b1 - // init_dist_screen::@return - // } - // [123] return - rts + // [117] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6] + // [117] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy + // [117] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy // init_dist_screen::@6 b6: // x2 = x*2 - // [124] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // (x2>=39)?(x2-39):(39-x2) - // [125] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 + // [119] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 cmp #$27 bcs b8 // init_dist_screen::@9 - // [126] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [120] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [127] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] - // [127] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [121] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [121] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy // init_dist_screen::@10 b10: // sqr(xd) - // [128] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [129] call sqr - // [173] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] - // [173] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy + // [122] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [123] call sqr + // [174] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] + // [174] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr // sqr(xd) - // [130] (word) sqr::return#3 ← (word) sqr::return#0 + // [124] (word) sqr::return#3 ← (word) sqr::return#0 // init_dist_screen::@13 // xds = sqr(xd) - // [131] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 // ds = xds+yds - // [132] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [126] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 lda ds clc adc yds @@ -8225,36 +8279,67 @@ init_dist_screen: { adc yds+1 sta ds+1 // sqrt(ds) - // [133] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [134] call sqrt + // [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [128] call sqrt jsr sqrt - // [135] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // [129] (byte) sqrt::return#2 ← (byte) sqrt::return#0 // init_dist_screen::@14 // d = sqrt(ds) - // [136] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [130] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 // screen_topline[x] = d - // [137] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [131] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y // screen_bottomline[x] = d - // [138] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [132] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // screen_topline[xb] = d - // [139] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [133] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y // screen_bottomline[xb] = d - // [140] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [134] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [141] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [135] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 inc x - // [142] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [136] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 dec xb - // [117] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] - // [117] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy - // [117] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy - jmp b5 + // init_dist_screen::@5 + // [137] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + lda x + cmp #$13+1 + bcc b6 + // init_dist_screen::@7 + // screen_topline += 40 + // [138] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc screen_topline + sta screen_topline + bcc !+ + inc screen_topline+1 + !: + // screen_bottomline -= 40 + // [139] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda screen_bottomline + sec + sbc #<$28 + sta screen_bottomline + lda screen_bottomline+1 + sbc #>$28 + sta screen_bottomline+1 + // for(byte y: 0..12) + // [140] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + inc y + // [141] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$d + cmp y + bne b1 + // init_dist_screen::@return + // } + // [142] return + rts // init_dist_screen::@8 b8: // (x2>=39)?(x2-39):(39-x2) @@ -8274,19 +8359,19 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($16) val) +// sqrt(word zeropage($18) val) sqrt: { - .label _1 = 9 - .label _3 = 9 - .label found = 9 - .label val = $16 + .label _1 = $d + .label _3 = $d + .label found = $d + .label val = $18 // bsearch16u(val, SQUARES, NUM_SQUARES) // [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 // [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES - sta bsearch16u.items + sta bsearch16u.items_1 lda SQUARES+1 - sta bsearch16u.items+1 + sta bsearch16u.items_1+1 // [147] call bsearch16u // [154] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] jsr bsearch16u @@ -8321,74 +8406,39 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($16) key, word* zeropage(9) items, byte register(X) num) +// bsearch16u(word zeropage($18) key, word* zeropage($d) items, byte register(X) num) bsearch16u: { - .label _2 = 9 - .label pivot = $18 + .label _2 = $d + .label pivot = $d .label result = $1a - .label return = 9 - .label items = 9 - .label key = $16 - // [155] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - // [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [155] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + .label return = $d + .label items = $d + .label key = $18 + .label items_1 = $b + .label items_10 = $b + .label items_16 = $b + // [155] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4] + // [155] phi (word*) bsearch16u::items#10 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@4#0] -- register_copy + // [155] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES - // bsearch16u::@3 - b3: - // while (num > 0) - // [156] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 - cpx #0 - bne b4 - // bsearch16u::@5 - // *items<=key?items:items-1 - // [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 - ldy #1 - lda (items),y - cmp key+1 - bne !+ - dey - lda (items),y - cmp key - beq b2 - !: - bcc b2 - // bsearch16u::@1 - // [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 - lda _2 - sec - sbc #<1*SIZEOF_WORD - sta _2 - lda _2+1 - sbc #>1*SIZEOF_WORD - sta _2+1 - // [159] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] - // [159] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy - // bsearch16u::@2 - b2: - // [160] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - // [160] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy - // bsearch16u::@return - // } - // [161] return - rts // bsearch16u::@4 b4: // num >> 1 - // [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + // [156] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuaa=vbuxx_ror_1 txa lsr // items + (num >> 1) - // [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [157] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + // [158] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa clc - adc items + adc items_10 sta pivot lda #0 - adc items+1 + adc items_10+1 sta pivot+1 // result = (signed int)key-(signed int)*pivot - // [165] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [159] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 sec lda key ldy #0 @@ -8399,66 +8449,112 @@ bsearch16u: { sbc (pivot),y sta result+1 // if (result == 0) - // [166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [160] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 bne b6 lda result bne b6 - // bsearch16u::@8 - // [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 - lda pivot - sta return - lda pivot+1 - sta return+1 + // [161] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return] + // [161] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy + // bsearch16u::@return + breturn: + // } + // [162] return rts // bsearch16u::@6 b6: // if (result > 0) - // [168] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [163] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 lda result+1 - bmi b7 + bmi b10 bne !+ lda result - beq b7 + beq b10 !: - // bsearch16u::@9 + // bsearch16u::@8 // items = pivot+1 - // [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [164] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #1*SIZEOF_WORD clc - adc pivot + adc items sta items - lda #0 - adc pivot+1 - sta items+1 + bcc !+ + inc items+1 + !: // num--; - // [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx + // [165] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuxx=_dec_vbuxx dex - // [171] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - // [171] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [171] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [166] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7] + // [166] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#19 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy + // [166] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy // bsearch16u::@7 b7: // num >>= 1 - // [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [167] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [155] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - // [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [155] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy - jmp b3 + // bsearch16u::@3 + // while (num > 0) + // [168] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuxx_gt_0_then_la1 + cpx #0 + bne b9 + // bsearch16u::@5 + // *items<=key?items:items-1 + // [169] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + ldy #1 + lda (items),y + cmp key+1 + bne !+ + dey + lda (items),y + cmp key + beq breturn + !: + bcc breturn + // bsearch16u::@1 + // [170] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + lda _2 + sec + sbc #<1*SIZEOF_WORD + sta _2 + lda _2+1 + sbc #>1*SIZEOF_WORD + sta _2+1 + // [171] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [171] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // bsearch16u::@2 + rts + // bsearch16u::@9 + b9: + // [172] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 + lda items + sta items_16 + lda items+1 + sta items_16+1 + // [155] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4] + // [155] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy + // [155] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy + jmp b4 + // bsearch16u::@10 + b10: + // [173] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 + lda items_10 + sta items + lda items_10+1 + sta items+1 + jmp b7 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $16 - .label return_2 = $14 + .label return = $18 + .label return_2 = $16 // return SQUARES[val]; - // [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [175] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa + // [176] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (SQUARES),y sta return @@ -8467,50 +8563,50 @@ sqr: { sta return+1 // sqr::@return // } - // [176] return + // [177] return rts } // init_squares // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label squares = 9 - .label sqr = 7 + .label squares = $b + .label sqr = 9 // malloc(NUM_SQUARES*sizeof(word)) - // [178] call malloc - // [190] phi from init_squares to malloc [phi:init_squares->malloc] - // [190] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 + // [179] call malloc + // [191] phi from init_squares to malloc [phi:init_squares->malloc] + // [191] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #NUM_SQUARES*SIZEOF_WORD sta malloc.size+1 - // [190] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy + // [191] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy jsr malloc // init_squares::@2 // malloc(NUM_SQUARES*sizeof(word)) - // [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + // [180] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 // squares = SQUARES - // [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [181] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta squares lda SQUARES+1 sta squares+1 - // [181] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] - // [181] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 + // [182] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [182] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 - // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [181] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [182] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [182] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 txa sta sqr sta sqr+1 - // [181] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] - // [181] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [181] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [182] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [182] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [182] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [182] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy // init_squares::@1 b1: // *squares++ = sqr - // [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [183] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y @@ -8518,7 +8614,7 @@ init_squares: { lda sqr+1 sta (squares),y // *squares++ = sqr; - // [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [184] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -8527,15 +8623,15 @@ init_squares: { inc squares+1 !: // i*2 - // [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [185] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // i*2+1 - // [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [186] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 // sqr += i*2+1 - // [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa + // [187] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa clc adc sqr sta sqr @@ -8543,25 +8639,25 @@ init_squares: { inc sqr+1 !: // for( byte i: 0..NUM_SQUARES-1) - // [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx + // [188] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx - // [188] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 + // [189] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #NUM_SQUARES-1+1 bne b1 // init_squares::@return // } - // [189] return + // [190] return rts } // malloc // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. -// malloc(word zeropage($11) size) +// malloc(word zeropage($13) size) malloc: { - .label mem = $11 - .label size = $11 + .label mem = $13 + .label size = $13 // mem = heap_head-size - // [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz1 + // [192] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz1 lda heap_head sec sbc mem @@ -8570,14 +8666,14 @@ malloc: { sbc mem+1 sta mem+1 // heap_head = mem - // [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [193] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda mem sta heap_head lda mem+1 sta heap_head+1 // malloc::@return // } - // [193] return + // [194] return rts } // File Data diff --git a/src/test/ref/screen-show-spiral.sym b/src/test/ref/screen-show-spiral.sym index 9ffc0135b..0f28189e3 100644 --- a/src/test/ref/screen-show-spiral.sym +++ b/src/test/ref/screen-show-spiral.sym @@ -21,19 +21,19 @@ (const byte) RADIX::HEXADECIMAL HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL OCTAL = (number) 8 (byte*) SCREEN_ANGLE -(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:13 0.08695652173913043 +(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:17 0.08695652173913043 (byte*) SCREEN_DIST -(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:11 0.08 +(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:15 0.08 (byte*) SCREEN_FILL (const byte*) SCREEN_FILL#0 SCREEN_FILL = (byte*) 1024 (const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2 (word*) SQUARES -(void*) SQUARES#1 SQUARES zp ZP_WORD:17 0.03225806451612903 +(void*) SQUARES#1 SQUARES zp ZP_WORD:19 0.03225806451612903 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) -(signed word~) atan2_16::$2 $2 zp ZP_WORD:20 4.0 +(signed word~) atan2_16::$2 $2 zp ZP_WORD:13 4.0 (byte~) atan2_16::$23 reg byte a 2002.0 (byte~) atan2_16::$24 reg byte a 2002.0 -(signed word~) atan2_16::$7 $7 zp ZP_WORD:22 4.0 +(signed word~) atan2_16::$7 $7 zp ZP_WORD:24 4.0 (label) atan2_16::@1 (label) atan2_16::@10 (label) atan2_16::@11 @@ -57,60 +57,61 @@ (label) atan2_16::@9 (label) atan2_16::@return (word) atan2_16::angle -(word) atan2_16::angle#1 angle zp ZP_WORD:24 3.0 -(word) atan2_16::angle#11 angle zp ZP_WORD:24 4.0 -(word) atan2_16::angle#12 angle zp ZP_WORD:24 190.66666666666666 -(word) atan2_16::angle#13 angle zp ZP_WORD:24 1334.6666666666667 -(word) atan2_16::angle#2 angle zp ZP_WORD:24 2002.0 -(word) atan2_16::angle#3 angle zp ZP_WORD:24 2002.0 -(word) atan2_16::angle#4 angle zp ZP_WORD:24 4.0 -(word) atan2_16::angle#5 angle zp ZP_WORD:24 4.0 -(word) atan2_16::angle#6 angle zp ZP_WORD:24 2004.0 +(word) atan2_16::angle#1 angle zp ZP_WORD:26 3.0 +(word) atan2_16::angle#11 angle zp ZP_WORD:26 4.0 +(word) atan2_16::angle#12 angle zp ZP_WORD:26 190.66666666666666 +(word) atan2_16::angle#13 angle zp ZP_WORD:26 1334.6666666666667 +(word) atan2_16::angle#2 angle zp ZP_WORD:26 2002.0 +(word) atan2_16::angle#3 angle zp ZP_WORD:26 2002.0 +(word) atan2_16::angle#4 angle zp ZP_WORD:26 4.0 +(word) atan2_16::angle#5 angle zp ZP_WORD:26 4.0 +(word) atan2_16::angle#6 angle zp ZP_WORD:26 2004.0 (byte) atan2_16::i (byte) atan2_16::i#1 reg byte x 1501.5 (byte) atan2_16::i#2 reg byte x 208.54166666666669 (word) atan2_16::return -(word) atan2_16::return#0 return zp ZP_WORD:24 34.99999999999999 -(word) atan2_16::return#2 return zp ZP_WORD:24 202.0 +(word) atan2_16::return#0 return zp ZP_WORD:26 34.99999999999999 +(word) atan2_16::return#2 return zp ZP_WORD:26 202.0 (byte) atan2_16::shift (byte) atan2_16::shift#1 reg byte y 20002.0 (byte) atan2_16::shift#2 reg byte y 8001.25 (byte~) atan2_16::shift#5 reg byte y 667.3333333333334 (signed word) atan2_16::x -(signed word) atan2_16::x#0 x zp ZP_WORD:15 2.8684210526315796 +(signed word) atan2_16::x#0 x zp ZP_WORD:19 2.8684210526315796 (signed word) atan2_16::xd -(signed word) atan2_16::xd#1 xd zp ZP_WORD:3 6667.333333333333 -(signed word~) atan2_16::xd#10 xd zp ZP_WORD:3 1001.0 -(signed word) atan2_16::xd#2 xd zp ZP_WORD:3 1001.0 -(signed word) atan2_16::xd#3 xd zp ZP_WORD:3 7668.333333333332 -(signed word) atan2_16::xd#5 xd zp ZP_WORD:3 1001.0 +(signed word) atan2_16::xd#1 xd zp ZP_WORD:5 6667.333333333333 +(signed word~) atan2_16::xd#10 xd zp ZP_WORD:5 1001.0 +(signed word) atan2_16::xd#2 xd zp ZP_WORD:5 1001.0 +(signed word) atan2_16::xd#3 xd zp ZP_WORD:5 7668.333333333332 +(signed word) atan2_16::xd#5 xd zp ZP_WORD:5 1001.0 (signed word) atan2_16::xi -(signed word) atan2_16::xi#0 xi zp ZP_WORD:22 6.0 -(signed word) atan2_16::xi#1 xi zp ZP_WORD:22 500.5 -(signed word~) atan2_16::xi#13 xi zp ZP_WORD:22 4.0 -(signed word) atan2_16::xi#2 xi zp ZP_WORD:22 500.5 -(signed word) atan2_16::xi#3 xi zp ZP_WORD:22 267.0666666666667 -(signed word) atan2_16::xi#8 xi zp ZP_WORD:22 1001.0 +(signed word) atan2_16::xi#0 xi zp ZP_WORD:24 6.0 +(signed word) atan2_16::xi#1 xi zp ZP_WORD:24 500.5 +(signed word~) atan2_16::xi#13 xi zp ZP_WORD:24 4.0 +(signed word) atan2_16::xi#2 xi zp ZP_WORD:24 500.5 +(signed word) atan2_16::xi#3 xi zp ZP_WORD:24 267.0666666666667 +(signed word) atan2_16::xi#8 xi zp ZP_WORD:24 1001.0 (signed word) atan2_16::y -(signed word) atan2_16::y#0 y zp ZP_WORD:17 2.724999999999999 +(signed word) atan2_16::y#0 y zp ZP_WORD:22 2.724999999999999 (signed word) atan2_16::yd -(signed word) atan2_16::yd#1 yd zp ZP_WORD:26 10001.0 -(signed word~) atan2_16::yd#10 yd zp ZP_WORD:26 2002.0 -(signed word) atan2_16::yd#2 yd zp ZP_WORD:26 2002.0 -(signed word) atan2_16::yd#3 yd zp ZP_WORD:26 4601.0 -(signed word) atan2_16::yd#5 yd zp ZP_WORD:26 2002.0 +(signed word) atan2_16::yd#1 yd zp ZP_WORD:2 10001.0 +(signed word~) atan2_16::yd#10 yd zp ZP_WORD:2 2002.0 +(signed word) atan2_16::yd#2 yd zp ZP_WORD:2 2002.0 +(signed word) atan2_16::yd#3 yd zp ZP_WORD:2 4601.0 +(signed word) atan2_16::yd#5 yd zp ZP_WORD:2 2002.0 (signed word) atan2_16::yi -(signed word) atan2_16::yi#0 yi zp ZP_WORD:20 1.2000000000000002 -(signed word) atan2_16::yi#1 yi zp ZP_WORD:20 667.3333333333334 -(signed word~) atan2_16::yi#16 yi zp ZP_WORD:20 4.0 -(signed word) atan2_16::yi#2 yi zp ZP_WORD:20 667.3333333333334 -(signed word) atan2_16::yi#3 yi zp ZP_WORD:20 353.4117647058823 -(signed word) atan2_16::yi#8 yi zp ZP_WORD:20 1001.0 +(signed word) atan2_16::yi#0 yi zp ZP_WORD:13 1.2000000000000002 +(signed word) atan2_16::yi#1 yi zp ZP_WORD:13 667.3333333333334 +(signed word~) atan2_16::yi#16 yi zp ZP_WORD:13 4.0 +(signed word) atan2_16::yi#2 yi zp ZP_WORD:13 667.3333333333334 +(signed word) atan2_16::yi#3 yi zp ZP_WORD:13 353.4117647058823 +(signed word) atan2_16::yi#8 yi zp ZP_WORD:13 1001.0 (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) (byte~) bsearch16u::$16 reg byte a 2002.0 -(word*~) bsearch16u::$2 $2 zp ZP_WORD:9 4.0 +(word*~) bsearch16u::$2 $2 zp ZP_WORD:13 4.0 (byte~) bsearch16u::$6 reg byte a 2002.0 (label) bsearch16u::@1 +(label) bsearch16u::@10 (label) bsearch16u::@2 (label) bsearch16u::@3 (label) bsearch16u::@4 @@ -121,31 +122,32 @@ (label) bsearch16u::@9 (label) bsearch16u::@return (word*) bsearch16u::items -(word*) bsearch16u::items#0 items zp ZP_WORD:9 1001.0 -(word*) bsearch16u::items#1 items zp ZP_WORD:9 2.0 -(word*) bsearch16u::items#2 items zp ZP_WORD:9 334.5555555555556 -(word*) bsearch16u::items#8 items zp ZP_WORD:9 1501.5 +(word*) bsearch16u::items#0 items zp ZP_WORD:13 1001.0 +(word*) bsearch16u::items#1 items#1 zp ZP_WORD:11 2.0 +(word*) bsearch16u::items#10 items#10 zp ZP_WORD:11 429.2857142857143 +(word*) bsearch16u::items#11 items zp ZP_WORD:13 752.25 +(word*~) bsearch16u::items#16 items#16 zp ZP_WORD:11 2002.0 +(word*~) bsearch16u::items#19 items zp ZP_WORD:13 2002.0 (word) bsearch16u::key -(word) bsearch16u::key#0 key zp ZP_WORD:22 0.26666666666666666 +(word) bsearch16u::key#0 key zp ZP_WORD:24 0.23529411764705882 (byte) bsearch16u::num -(byte) bsearch16u::num#0 reg byte x 2002.0 +(byte) bsearch16u::num#0 reg byte x 1001.0 (byte) bsearch16u::num#1 reg byte x 2002.0 -(byte) bsearch16u::num#3 reg byte x 556.1111111111111 +(byte) bsearch16u::num#10 reg byte x 444.8888888888889 (byte) bsearch16u::num#5 reg byte x 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:24 501.0 +(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:13 750.75 (signed word) bsearch16u::result (signed word) bsearch16u::result#0 result zp ZP_WORD:26 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 return zp ZP_WORD:9 2.0 -(word*) bsearch16u::return#2 return zp ZP_WORD:9 6.0 -(word*) bsearch16u::return#3 return zp ZP_WORD:9 4.0 -(word*~) bsearch16u::return#6 return zp ZP_WORD:9 4.0 +(word*) bsearch16u::return#1 return zp ZP_WORD:13 335.00000000000006 +(word*) bsearch16u::return#2 return zp ZP_WORD:13 6.0 +(word*) bsearch16u::return#3 return zp ZP_WORD:13 4.0 (byte*) heap_head -(byte*) heap_head#1 heap_head zp ZP_WORD:15 0.6000000000000001 -(byte*) heap_head#12 heap_head zp ZP_WORD:15 6.0 +(byte*) heap_head#1 heap_head zp ZP_WORD:13 0.6000000000000001 +(byte*) heap_head#12 heap_head zp ZP_WORD:13 6.0 (void()) init_angle_screen((byte*) init_angle_screen::screen) -(word~) init_angle_screen::$11 $11 zp ZP_WORD:24 202.0 +(word~) init_angle_screen::$11 $11 zp ZP_WORD:26 202.0 (byte~) init_angle_screen::$13 reg byte a 202.0 (byte~) init_angle_screen::$14 reg byte a 202.0 (byte~) init_angle_screen::$15 reg byte a 202.0 @@ -159,32 +161,32 @@ (label) init_angle_screen::@5 (label) init_angle_screen::@return (byte) init_angle_screen::ang_w -(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:19 84.16666666666666 +(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:21 84.16666666666666 (word) init_angle_screen::angle_w -(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:24 202.0 +(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:26 202.0 (byte*) init_angle_screen::screen -(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:9 3.0 +(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:11 3.0 (byte*) init_angle_screen::screen_bottomline -(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:9 4.0 -(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:9 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:9 9.04 +(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:11 4.0 +(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:11 7.333333333333333 +(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:11 9.040000000000001 (byte*) init_angle_screen::screen_topline -(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:7 2.0 -(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:7 5.5 -(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:7 9.416666666666666 +(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:9 2.0 +(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:9 5.5 +(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:9 9.416666666666666 (byte) init_angle_screen::x -(byte) init_angle_screen::x#1 x zp ZP_BYTE:5 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:5 28.857142857142858 +(byte) init_angle_screen::x#1 x zp ZP_BYTE:7 101.0 +(byte) init_angle_screen::x#5 x zp ZP_BYTE:7 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:6 202.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:6 18.363636363636363 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:8 101.0 +(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:8 19.238095238095237 (signed word) init_angle_screen::xw -(word) init_angle_screen::xw#0 xw zp ZP_WORD:15 33.666666666666664 +(word) init_angle_screen::xw#0 xw zp ZP_WORD:19 33.666666666666664 (byte) init_angle_screen::y -(byte) init_angle_screen::y#1 y zp ZP_BYTE:2 16.5 -(byte) init_angle_screen::y#5 y zp ZP_BYTE:2 4.730769230769231 +(byte) init_angle_screen::y#1 y zp ZP_BYTE:4 16.5 +(byte) init_angle_screen::y#5 y zp ZP_BYTE:4 4.730769230769231 (signed word) init_angle_screen::yw -(word) init_angle_screen::yw#0 yw zp ZP_WORD:17 50.5 +(word) init_angle_screen::yw#0 yw zp ZP_WORD:22 50.5 (void()) init_dist_screen((byte*) init_dist_screen::screen) (byte~) init_dist_screen::$14 reg byte a 202.0 (byte~) init_dist_screen::$16 reg byte a 202.0 @@ -208,37 +210,37 @@ (byte) init_dist_screen::d (byte) init_dist_screen::d#0 reg byte a 126.25 (word) init_dist_screen::ds -(word) init_dist_screen::ds#0 ds zp ZP_WORD:22 202.0 +(word) init_dist_screen::ds#0 ds zp ZP_WORD:24 202.0 (byte*) init_dist_screen::screen -(byte*) init_dist_screen::screen#0 screen zp ZP_WORD:3 1.5 +(byte*) init_dist_screen::screen#0 screen zp ZP_WORD:5 1.5 (byte*) init_dist_screen::screen_bottomline -(byte*) init_dist_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:7 4.0 -(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:7 7.333333333333333 -(byte*) init_dist_screen::screen_bottomline#11 screen_bottomline zp ZP_WORD:7 6.848484848484849 +(byte*) init_dist_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:9 4.0 +(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:9 7.333333333333333 +(byte*) init_dist_screen::screen_bottomline#11 screen_bottomline zp ZP_WORD:9 6.848484848484849 (byte*) init_dist_screen::screen_topline -(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:3 5.5 -(byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:3 7.0625 +(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:5 5.5 +(byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:5 7.0625 (byte) init_dist_screen::x -(byte) init_dist_screen::x#1 x zp ZP_BYTE:5 101.0 -(byte) init_dist_screen::x#2 x zp ZP_BYTE:5 30.3 +(byte) init_dist_screen::x#1 x zp ZP_BYTE:7 101.0 +(byte) init_dist_screen::x#10 x zp ZP_BYTE:7 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 reg byte a 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:6 202.0 -(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:6 19.238095238095237 +(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:8 101.0 +(byte) init_dist_screen::xb#10 xb zp ZP_BYTE:8 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 reg byte a 303.0 (word) init_dist_screen::xds -(word) init_dist_screen::xds#0 xds zp ZP_WORD:22 202.0 +(word) init_dist_screen::xds#0 xds zp ZP_WORD:24 202.0 (byte) init_dist_screen::y -(byte) init_dist_screen::y#1 y zp ZP_BYTE:2 16.5 -(byte) init_dist_screen::y#10 y zp ZP_BYTE:2 0.9705882352941178 +(byte) init_dist_screen::y#1 y zp ZP_BYTE:4 16.5 +(byte) init_dist_screen::y#10 y zp ZP_BYTE:4 0.9705882352941178 (byte) init_dist_screen::y2 (byte) init_dist_screen::y2#0 reg byte a 22.0 (byte) init_dist_screen::yd (byte) init_dist_screen::yd#0 reg byte a 33.0 (word) init_dist_screen::yds -(word) init_dist_screen::yds#0 yds zp ZP_WORD:20 4.869565217391305 +(word) init_dist_screen::yds#0 yds zp ZP_WORD:22 4.869565217391305 (void()) init_squares() (byte~) init_squares::$3 reg byte a 22.0 (byte~) init_squares::$4 reg byte a 22.0 @@ -249,12 +251,12 @@ (byte) init_squares::i#1 reg byte x 16.5 (byte) init_squares::i#2 reg byte x 5.5 (word) init_squares::sqr -(word) init_squares::sqr#1 sqr zp ZP_WORD:7 7.333333333333333 -(word) init_squares::sqr#2 sqr zp ZP_WORD:7 6.6000000000000005 +(word) init_squares::sqr#1 sqr zp ZP_WORD:9 7.333333333333333 +(word) init_squares::sqr#2 sqr zp ZP_WORD:9 6.6000000000000005 (word*) init_squares::squares -(word*) init_squares::squares#0 squares zp ZP_WORD:9 4.0 -(word*) init_squares::squares#1 squares zp ZP_WORD:9 3.6666666666666665 -(word*) init_squares::squares#2 squares zp ZP_WORD:9 17.5 +(word*) init_squares::squares#0 squares zp ZP_WORD:11 4.0 +(word*) init_squares::squares#1 squares zp ZP_WORD:11 3.6666666666666665 +(word*) init_squares::squares#2 squares zp ZP_WORD:11 17.5 (void()) main() (label) main::@1 (label) main::@10 @@ -269,97 +271,97 @@ (label) main::@9 (label) main::@return (byte*) main::angle -(byte*) main::angle#0 angle zp ZP_WORD:20 22.0 -(byte*) main::angle#1 angle zp ZP_WORD:20 50.5 -(byte*) main::angle#2 angle zp ZP_WORD:20 34.888888888888886 +(byte*) main::angle#0 angle zp ZP_WORD:13 22.0 +(byte*) main::angle#1 angle zp ZP_WORD:13 50.5 +(byte*) main::angle#2 angle zp ZP_WORD:13 34.888888888888886 (byte*) main::dist -(byte*) main::dist#0 dist zp ZP_WORD:9 11.0 -(byte*) main::dist#1 dist zp ZP_WORD:9 40.4 -(byte*) main::dist#2 dist zp ZP_WORD:9 39.25 +(byte*) main::dist#0 dist zp ZP_WORD:11 11.0 +(byte*) main::dist#1 dist zp ZP_WORD:11 40.4 +(byte*) main::dist#2 dist zp ZP_WORD:11 39.25 (word) main::dist_angle -(word) main::dist_angle#0 dist_angle zp ZP_WORD:26 101.0 +(word) main::dist_angle#0 dist_angle zp ZP_WORD:2 101.0 (byte*) main::fill -(byte*) main::fill#1 fill zp ZP_WORD:7 101.0 -(byte*) main::fill#2 fill zp ZP_WORD:7 40.4 +(byte*) main::fill#1 fill zp ZP_WORD:9 101.0 +(byte*) main::fill#2 fill zp ZP_WORD:9 40.4 (word) main::min_dist_angle -(word) main::min_dist_angle#2 min_dist_angle zp ZP_WORD:22 101.0 -(word) main::min_dist_angle#3 min_dist_angle#3 zp ZP_WORD:26 83.0 -(word~) main::min_dist_angle#6 min_dist_angle zp ZP_WORD:22 202.0 -(word~) main::min_dist_angle#7 min_dist_angle#7 zp ZP_WORD:26 202.0 -(word~) main::min_dist_angle#8 min_dist_angle#8 zp ZP_WORD:26 202.0 +(word) main::min_dist_angle#2 min_dist_angle zp ZP_WORD:24 101.0 +(word) main::min_dist_angle#3 min_dist_angle#3 zp ZP_WORD:2 83.0 +(word~) main::min_dist_angle#6 min_dist_angle zp ZP_WORD:24 202.0 +(word~) main::min_dist_angle#7 min_dist_angle#7 zp ZP_WORD:2 202.0 +(word~) main::min_dist_angle#8 min_dist_angle#8 zp ZP_WORD:2 202.0 (byte*) main::min_fill -(byte*~) main::min_fill#10 min_fill zp ZP_WORD:24 202.0 -(byte*) main::min_fill#2 min_fill zp ZP_WORD:24 59.285714285714285 -(byte*) main::min_fill#5 min_fill zp ZP_WORD:24 50.5 +(byte*~) main::min_fill#10 min_fill zp ZP_WORD:26 202.0 +(byte*) main::min_fill#2 min_fill zp ZP_WORD:26 59.285714285714285 +(byte*) main::min_fill#5 min_fill zp ZP_WORD:26 50.5 (void*()) malloc((word) malloc::size) (label) malloc::@return (byte*) malloc::mem -(byte*) malloc::mem#0 mem zp ZP_WORD:17 0.6666666666666666 +(byte*) malloc::mem#0 mem zp ZP_WORD:19 0.6666666666666666 (void*) malloc::return (word) malloc::size -(word) malloc::size#3 size zp ZP_WORD:17 2.0 +(word) malloc::size#3 size zp ZP_WORD:19 2.0 (word()) sqr((byte) sqr::val) (byte~) sqr::$0 reg byte a 4.0 (label) sqr::@return (word) sqr::return -(word) sqr::return#0 return zp ZP_WORD:22 28.5 -(word) sqr::return#2 return#2 zp ZP_WORD:20 22.0 -(word) sqr::return#3 return zp ZP_WORD:22 202.0 +(word) sqr::return#0 return zp ZP_WORD:24 28.5 +(word) sqr::return#2 return#2 zp ZP_WORD:22 22.0 +(word) sqr::return#3 return zp ZP_WORD:24 202.0 (byte) sqr::val (byte) sqr::val#0 reg byte a 22.0 (byte) sqr::val#1 reg byte a 202.0 (byte) sqr::val#2 reg byte a 114.0 (byte()) sqrt((word) sqrt::val) -(word~) sqrt::$1 $1 zp ZP_WORD:9 2.0 -(word~) sqrt::$3 $3 zp ZP_WORD:9 4.0 +(word~) sqrt::$1 $1 zp ZP_WORD:13 2.0 +(word~) sqrt::$3 $3 zp ZP_WORD:13 4.0 (label) sqrt::@1 (label) sqrt::@return (word*) sqrt::found -(word*) sqrt::found#0 found zp ZP_WORD:9 4.0 +(word*) sqrt::found#0 found zp ZP_WORD:13 4.0 (byte) sqrt::return (byte) sqrt::return#0 reg byte a 34.33333333333333 (byte) sqrt::return#2 reg byte a 202.0 (byte) sqrt::sq (word) sqrt::val -(word) sqrt::val#0 val zp ZP_WORD:22 103.0 +(word) sqrt::val#0 val zp ZP_WORD:24 103.0 reg byte x [ atan2_16::i#2 atan2_16::i#1 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -zp ZP_BYTE:2 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::y#5 init_angle_screen::y#1 ] -zp ZP_WORD:3 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +zp ZP_WORD:2 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] +zp ZP_BYTE:4 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::y#5 init_angle_screen::y#1 ] +zp ZP_WORD:5 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -zp ZP_BYTE:5 [ init_dist_screen::x#2 init_dist_screen::x#1 init_angle_screen::x#2 init_angle_screen::x#1 ] -zp ZP_BYTE:6 [ init_dist_screen::xb#2 init_dist_screen::xb#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ] +zp ZP_BYTE:7 [ init_dist_screen::x#10 init_dist_screen::x#1 init_angle_screen::x#5 init_angle_screen::x#1 ] +zp ZP_BYTE:8 [ init_dist_screen::xb#10 init_dist_screen::xb#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ] reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] -reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] -zp ZP_WORD:7 [ init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 main::fill#2 main::fill#1 ] -zp ZP_WORD:9 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 main::dist#2 main::dist#0 main::dist#1 ] +zp ZP_WORD:9 [ init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 main::fill#2 main::fill#1 ] +zp ZP_WORD:11 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 main::dist#2 main::dist#0 main::dist#1 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] -zp ZP_WORD:11 [ SCREEN_DIST#0 ] -zp ZP_WORD:13 [ SCREEN_ANGLE#0 ] +zp ZP_WORD:13 [ heap_head#12 heap_head#1 bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 main::angle#2 main::angle#0 main::angle#1 ] +zp ZP_WORD:15 [ SCREEN_DIST#0 ] +zp ZP_WORD:17 [ SCREEN_ANGLE#0 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] -zp ZP_WORD:15 [ init_angle_screen::xw#0 atan2_16::x#0 heap_head#12 heap_head#1 ] +zp ZP_WORD:19 [ init_angle_screen::xw#0 atan2_16::x#0 malloc::size#3 malloc::mem#0 SQUARES#1 ] reg byte a [ init_angle_screen::$7 ] -zp ZP_WORD:17 [ init_angle_screen::yw#0 atan2_16::y#0 malloc::size#3 malloc::mem#0 SQUARES#1 ] -zp ZP_BYTE:19 [ init_angle_screen::ang_w#0 ] +zp ZP_BYTE:21 [ init_angle_screen::ang_w#0 ] reg byte a [ init_angle_screen::$13 ] reg byte a [ init_angle_screen::$14 ] reg byte a [ init_angle_screen::$15 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte a [ init_dist_screen::y2#0 ] -zp ZP_WORD:20 [ sqr::return#2 init_dist_screen::yds#0 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 main::angle#2 main::angle#0 main::angle#1 ] +zp ZP_WORD:22 [ sqr::return#2 init_dist_screen::yds#0 init_angle_screen::yw#0 atan2_16::y#0 ] reg byte a [ init_dist_screen::x2#0 ] -zp ZP_WORD:22 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 main::min_dist_angle#2 main::min_dist_angle#6 ] +zp ZP_WORD:24 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 main::min_dist_angle#2 main::min_dist_angle#6 ] reg byte a [ sqrt::return#2 ] reg byte a [ init_dist_screen::d#0 ] reg byte a [ sqrt::return#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] -zp ZP_WORD:24 [ bsearch16u::pivot#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 main::min_fill#5 main::min_fill#2 main::min_fill#10 ] -zp ZP_WORD:26 [ bsearch16u::result#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] +zp ZP_WORD:26 [ bsearch16u::result#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 main::min_fill#5 main::min_fill#2 main::min_fill#10 ] reg byte a [ sqr::$0 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] diff --git a/src/test/ref/semi-struct-1.asm b/src/test/ref/semi-struct-1.asm index 89575cf92..e41597776 100644 --- a/src/test/ref/semi-struct-1.asm +++ b/src/test/ref/semi-struct-1.asm @@ -159,14 +159,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [56] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [56] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [56] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [57] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [56] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [59] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [57] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [60] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [58] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [56] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [56] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [59] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [56] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [56] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [56] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [57] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [56] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [59] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [57] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [60] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [58] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [56] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [56] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [59] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [56] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [56] phi from memset to memset::@2 [phi:memset->memset::@2] + // [56] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [56] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [56] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [57] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [57] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [58] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [59] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -3186,24 +3217,8 @@ memset: { bne b2 // memset::@return // } - // [58] return + // [60] return rts - // memset::@2 - b2: - // *dst = c - // [59] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [60] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [56] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [56] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // init_points // Initialize points diff --git a/src/test/ref/semi-struct-1.sym b/src/test/ref/semi-struct-1.sym index c4897acbe..60efcfdb0 100644 --- a/src/test/ref/semi-struct-1.sym +++ b/src/test/ref/semi-struct-1.sym @@ -49,8 +49,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:4 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:4 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:4 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:4 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -137,7 +137,7 @@ reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] zp ZP_WORD:2 [ print_str::str#2 print_str::str#0 ] -zp ZP_WORD:4 [ memset::dst#2 memset::dst#1 print_line_cursor#11 print_line_cursor#24 print_line_cursor#1 ] +zp ZP_WORD:4 [ memset::dst#4 memset::dst#1 print_line_cursor#11 print_line_cursor#24 print_line_cursor#1 ] reg byte x [ init_points::i#10 init_points::i#1 ] zp ZP_BYTE:6 [ init_points::pos#10 init_points::pos#2 print_points::i#10 print_points::i#1 ] reg byte y [ print_points::getPoint1_$0#0 ] diff --git a/src/test/ref/semi-struct-2.asm b/src/test/ref/semi-struct-2.asm index 70ceadee9..2ae407f56 100644 --- a/src/test/ref/semi-struct-2.asm +++ b/src/test/ref/semi-struct-2.asm @@ -218,14 +218,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [69] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [69] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [69] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [70] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [69] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [72] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [70] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [73] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [71] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [69] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [69] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [72] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [69] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [69] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [69] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [70] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [69] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [72] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [70] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [73] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [71] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [69] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [69] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [72] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b16 with b1 Replacing label b3_from_b23 with b3 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Replacing label b1_from_b2 with b1 Replacing label b1_from_b2 with b1 Replacing label b3_from_b2 with b3 @@ -9325,6 +9341,7 @@ Removing instruction b3_from_b23: Removing instruction keyboard_key_pressed_from_b3: Removing instruction b4_from_b23: Removing instruction print_cls_from_b4: +Removing instruction b2_from_b1: Removing instruction b1_from_print_str: Removing instruction b1_from_b2: Removing instruction b1_from_print_ln: @@ -9420,9 +9437,9 @@ Removing instruction b4: Removing instruction breturn: Removing instruction memset_from_print_cls: Removing instruction breturn: -Removing instruction b1_from_memset: +Removing instruction b2_from_memset: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Removing instruction b1: Removing instruction breturn: Removing instruction breturn: @@ -9538,6 +9555,8 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -9744,8 +9763,8 @@ FINAL SYMBOL TABLE (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:10 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:10 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:10 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:10 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -10014,7 +10033,7 @@ reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] zp ZP_WORD:8 [ initEntry::$1 print_line_cursor#1 mul8u::mb#2 mul8u::mb#1 ] -zp ZP_WORD:10 [ initEntry::$3 print_word::w#5 print_word::w#7 print_word::w#8 print_word::w#2 print_word::w#10 print_word::w#4 print_line_cursor#32 print_line_cursor#63 print_line_cursor#157 print_line_cursor#158 print_line_cursor#159 print_line_cursor#160 print_line_cursor#161 print_line_cursor#162 print_line_cursor#163 print_line_cursor#164 print_line_cursor#165 print_line_cursor#166 print_line_cursor#167 print_line_cursor#168 print_line_cursor#169 print_line_cursor#170 print_line_cursor#171 print_line_cursor#172 print_line_cursor#173 print_line_cursor#175 print_str::str#18 print_str::str#20 print_str::str#0 memset::dst#2 memset::dst#1 ] +zp ZP_WORD:10 [ initEntry::$3 print_word::w#5 print_word::w#7 print_word::w#8 print_word::w#2 print_word::w#10 print_word::w#4 print_line_cursor#32 print_line_cursor#63 print_line_cursor#157 print_line_cursor#158 print_line_cursor#159 print_line_cursor#160 print_line_cursor#161 print_line_cursor#162 print_line_cursor#163 print_line_cursor#164 print_line_cursor#165 print_line_cursor#166 print_line_cursor#167 print_line_cursor#168 print_line_cursor#169 print_line_cursor#170 print_line_cursor#171 print_line_cursor#172 print_line_cursor#173 print_line_cursor#175 print_str::str#18 print_str::str#20 print_str::str#0 memset::dst#4 memset::dst#1 ] zp ZP_WORD:12 [ initEntry::$5 ] zp ZP_WORD:14 [ initEntry::$7 ] reg byte a [ initEntry::$9 ] @@ -10030,7 +10049,7 @@ reg byte a [ mul8u::$1 ] FINAL ASSEMBLER -Score: 4108 +Score: 4078 // File Comments // Implementing a semi-struct without the struct keyword by using pointer math and inline functions @@ -10433,16 +10452,29 @@ memset: { .label str = $400 .label end = str+num .label dst = $a - // [69] phi from memset to memset::@1 [phi:memset->memset::@1] - // [69] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [69] phi from memset to memset::@2 [phi:memset->memset::@2] + // [69] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [69] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [69] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [70] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [70] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [71] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [72] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -10451,24 +10483,8 @@ memset: { bne b2 // memset::@return // } - // [71] return + // [73] return rts - // memset::@2 - b2: - // *dst = c - // [72] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [73] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [69] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [69] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // keyboard_key_pressed // Determines whether a specific key is currently pressed by accessing the matrix directly diff --git a/src/test/ref/semi-struct-2.sym b/src/test/ref/semi-struct-2.sym index 0329c90a2..64bb08c31 100644 --- a/src/test/ref/semi-struct-2.sym +++ b/src/test/ref/semi-struct-2.sym @@ -200,8 +200,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:10 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:10 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:10 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:10 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -470,7 +470,7 @@ reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] zp ZP_WORD:8 [ initEntry::$1 print_line_cursor#1 mul8u::mb#2 mul8u::mb#1 ] -zp ZP_WORD:10 [ initEntry::$3 print_word::w#5 print_word::w#7 print_word::w#8 print_word::w#2 print_word::w#10 print_word::w#4 print_line_cursor#32 print_line_cursor#63 print_line_cursor#157 print_line_cursor#158 print_line_cursor#159 print_line_cursor#160 print_line_cursor#161 print_line_cursor#162 print_line_cursor#163 print_line_cursor#164 print_line_cursor#165 print_line_cursor#166 print_line_cursor#167 print_line_cursor#168 print_line_cursor#169 print_line_cursor#170 print_line_cursor#171 print_line_cursor#172 print_line_cursor#173 print_line_cursor#175 print_str::str#18 print_str::str#20 print_str::str#0 memset::dst#2 memset::dst#1 ] +zp ZP_WORD:10 [ initEntry::$3 print_word::w#5 print_word::w#7 print_word::w#8 print_word::w#2 print_word::w#10 print_word::w#4 print_line_cursor#32 print_line_cursor#63 print_line_cursor#157 print_line_cursor#158 print_line_cursor#159 print_line_cursor#160 print_line_cursor#161 print_line_cursor#162 print_line_cursor#163 print_line_cursor#164 print_line_cursor#165 print_line_cursor#166 print_line_cursor#167 print_line_cursor#168 print_line_cursor#169 print_line_cursor#170 print_line_cursor#171 print_line_cursor#172 print_line_cursor#173 print_line_cursor#175 print_str::str#18 print_str::str#20 print_str::str#0 memset::dst#4 memset::dst#1 ] zp ZP_WORD:12 [ initEntry::$5 ] zp ZP_WORD:14 [ initEntry::$7 ] reg byte a [ initEntry::$9 ] diff --git a/src/test/ref/sequence-locality-0.asm b/src/test/ref/sequence-locality-0.asm index ae4c47c52..fe440b513 100644 --- a/src/test/ref/sequence-locality-0.asm +++ b/src/test/ref/sequence-locality-0.asm @@ -4,24 +4,26 @@ .pc = $80d "Program" main: { .label screen = $400 - ldy #0 ldx #0 - b1: - cpx #5+1 - bcs b2 - txa + ldy #0 + b4: + tya sec sbc #5 - sta screen,y - iny - b3: + sta screen,x inx - cpx #$b + b3: + iny + cpy #$b bne b1 rts + b1: + cpy #5+1 + bcs b2 + jmp b4 b2: - txa - sta screen,y - iny + tya + sta screen,x + inx jmp b3 } diff --git a/src/test/ref/sequence-locality-0.cfg b/src/test/ref/sequence-locality-0.cfg index 4e8a13740..874884416 100644 --- a/src/test/ref/sequence-locality-0.cfg +++ b/src/test/ref/sequence-locality-0.cfg @@ -9,26 +9,27 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@3 - [5] (byte) main::idx#3 ← phi( main/(byte) 0 main::@3/(byte) main::idx#6 ) - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@3/(byte) main::i#1 ) - [6] if((byte) main::i#2>=(byte) 5+(byte) 1) goto main::@2 to:main::@4 -main::@4: scope:[main] from main::@1 - [7] (byte~) main::$1 ← (byte) main::i#2 - (byte) 5 - [8] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte~) main::$1 - [9] (byte) main::idx#2 ← ++ (byte) main::idx#3 +main::@4: scope:[main] from main main::@1 + [5] (byte) main::idx#8 ← phi( main::@1/(byte) main::idx#3 main/(byte) 0 ) + [5] (byte) main::i#7 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] (byte~) main::$1 ← (byte) main::i#7 - (byte) 5 + [7] *((const byte*) main::screen#0 + (byte) main::idx#8) ← (byte~) main::$1 + [8] (byte) main::idx#2 ← ++ (byte) main::idx#8 to:main::@3 main::@3: scope:[main] from main::@2 main::@4 - [10] (byte) main::idx#6 ← phi( main::@2/(byte) main::idx#1 main::@4/(byte) main::idx#2 ) - [11] (byte) main::i#1 ← ++ (byte) main::i#2 - [12] if((byte) main::i#1!=(byte) $b) goto main::@1 + [9] (byte) main::i#8 ← phi( main::@2/(byte) main::i#1 main::@4/(byte) main::i#7 ) + [9] (byte) main::idx#3 ← phi( main::@2/(byte) main::idx#1 main::@4/(byte) main::idx#2 ) + [10] (byte) main::i#1 ← ++ (byte) main::i#8 + [11] if((byte) main::i#1!=(byte) $b) goto main::@1 to:main::@return main::@return: scope:[main] from main::@3 - [13] return + [12] return to:@return +main::@1: scope:[main] from main::@3 + [13] if((byte) main::i#1>=(byte) 5+(byte) 1) goto main::@2 + to:main::@4 main::@2: scope:[main] from main::@1 - [14] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte) main::i#2 + [14] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte) main::i#1 [15] (byte) main::idx#1 ← ++ (byte) main::idx#3 to:main::@3 diff --git a/src/test/ref/sequence-locality-0.log b/src/test/ref/sequence-locality-0.log index eedd03f78..d759a9d03 100644 --- a/src/test/ref/sequence-locality-0.log +++ b/src/test/ref/sequence-locality-0.log @@ -110,6 +110,7 @@ Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [14] main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value [16] if(main::i#1!=rangelast(0,$a)) goto main::@1 to (number) $b Rewriting conditional comparison [5] if((byte) main::i#2>(byte) 5) goto main::@2 +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 5+1 in if((byte) main::i#2>=(byte) 5+(number) 1) goto main::@2 Adding number conversion cast (unumber) 1 in if((byte) main::i#2>=(unumber)(byte) 5+(number) 1) goto main::@2 Adding number conversion cast (unumber) $b in if((byte) main::i#1!=(number) $b) goto main::@1 @@ -121,27 +122,44 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $b Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::i#1 = (byte) main::i#2 +Alias (byte) main::idx#3 = (byte) main::idx#6 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#9 (const byte) main::i#0 +Identical Phi Values (byte) main::idx#9 (const byte) main::idx#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (main::@1_1) in block main::@2 +Removing PHI-reference to removed block (main::@1_1) in block main::@2 +if() condition always false - eliminating [15] if((const byte) main::i#0>=(byte) 5+(byte) 1) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Alias (byte) main::i#1 = (byte) main::i#6 +Alias (byte) main::idx#3 = (byte) main::idx#7 +Successful SSA optimization Pass2AliasElimination Inlining constant with var siblings (const byte) main::idx#0 Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Constant inlined main::idx#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@7(between main::@3 and main::@1) +Added new block during phi lifting main::@7(between main::@1 and main::@4) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 -Created 3 initial phi equivalence classes -Coalesced [11] main::idx#9 ← main::idx#2 -Coalesced [16] main::i#6 ← main::i#1 -Coalesced [17] main::idx#7 ← main::idx#6 -Coalesced [20] main::idx#8 ← main::idx#1 +Created 4 initial phi equivalence classes +Coalesced [11] main::idx#12 ← main::idx#2 +Coalesced [12] main::i#12 ← main::i#7 +Coalesced [18] main::i#10 ← main::i#1 +Coalesced [19] main::idx#10 ← main::idx#3 +Coalesced [22] main::idx#11 ← main::idx#1 +Coalesced (already) [23] main::i#11 ← main::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 @@ -160,27 +178,28 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@3 - [5] (byte) main::idx#3 ← phi( main/(byte) 0 main::@3/(byte) main::idx#6 ) - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@3/(byte) main::i#1 ) - [6] if((byte) main::i#2>=(byte) 5+(byte) 1) goto main::@2 to:main::@4 -main::@4: scope:[main] from main::@1 - [7] (byte~) main::$1 ← (byte) main::i#2 - (byte) 5 - [8] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte~) main::$1 - [9] (byte) main::idx#2 ← ++ (byte) main::idx#3 +main::@4: scope:[main] from main main::@1 + [5] (byte) main::idx#8 ← phi( main::@1/(byte) main::idx#3 main/(byte) 0 ) + [5] (byte) main::i#7 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] (byte~) main::$1 ← (byte) main::i#7 - (byte) 5 + [7] *((const byte*) main::screen#0 + (byte) main::idx#8) ← (byte~) main::$1 + [8] (byte) main::idx#2 ← ++ (byte) main::idx#8 to:main::@3 main::@3: scope:[main] from main::@2 main::@4 - [10] (byte) main::idx#6 ← phi( main::@2/(byte) main::idx#1 main::@4/(byte) main::idx#2 ) - [11] (byte) main::i#1 ← ++ (byte) main::i#2 - [12] if((byte) main::i#1!=(byte) $b) goto main::@1 + [9] (byte) main::i#8 ← phi( main::@2/(byte) main::i#1 main::@4/(byte) main::i#7 ) + [9] (byte) main::idx#3 ← phi( main::@2/(byte) main::idx#1 main::@4/(byte) main::idx#2 ) + [10] (byte) main::i#1 ← ++ (byte) main::i#8 + [11] if((byte) main::i#1!=(byte) $b) goto main::@1 to:main::@return main::@return: scope:[main] from main::@3 - [13] return + [12] return to:@return +main::@1: scope:[main] from main::@3 + [13] if((byte) main::i#1>=(byte) 5+(byte) 1) goto main::@2 + to:main::@4 main::@2: scope:[main] from main::@1 - [14] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte) main::i#2 + [14] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte) main::i#1 [15] (byte) main::idx#1 ← ++ (byte) main::idx#3 to:main::@3 @@ -189,25 +208,26 @@ VARIABLE REGISTER WEIGHTS (void()) main() (byte~) main::$1 22.0 (byte) main::i -(byte) main::i#1 16.5 -(byte) main::i#2 6.875 +(byte) main::i#1 121.2 +(byte) main::i#7 30.75 +(byte) main::i#8 213.0 (byte) main::idx -(byte) main::idx#1 22.0 +(byte) main::idx#1 202.0 (byte) main::idx#2 22.0 -(byte) main::idx#3 11.0 -(byte) main::idx#6 11.0 +(byte) main::idx#3 83.0 +(byte) main::idx#8 40.99999999999999 (byte*) main::screen Initial phi equivalence classes -[ main::i#2 main::i#1 ] -[ main::idx#3 main::idx#6 main::idx#1 main::idx#2 ] +[ main::idx#8 main::idx#3 main::idx#1 main::idx#2 ] +[ main::i#8 main::i#7 main::i#1 ] Added variable main::$1 to zero page equivalence class [ main::$1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ main::idx#3 main::idx#6 main::idx#1 main::idx#2 ] +[ main::idx#8 main::idx#3 main::idx#1 main::idx#2 ] +[ main::i#8 main::i#7 main::i#1 ] [ main::$1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::idx#3 main::idx#6 main::idx#1 main::idx#2 ] +Allocated zp ZP_BYTE:2 [ main::idx#8 main::idx#3 main::idx#1 main::idx#2 ] +Allocated zp ZP_BYTE:3 [ main::i#8 main::i#7 main::i#1 ] Allocated zp ZP_BYTE:4 [ main::$1 ] INITIAL ASM @@ -239,62 +259,62 @@ bend: main: { .label screen = $400 .label _1 = 4 - .label idx = 3 - .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::idx#3 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + .label idx = 2 + .label i = 3 + // [5] phi from main to main::@4 [phi:main->main::@4] + b4_from_main: + // [5] phi (byte) main::idx#8 = (byte) 0 [phi:main->main::@4#0] -- vbuz1=vbuc1 lda #0 sta idx - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::i#7 = (byte) 0 [phi:main->main::@4#1] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - b1_from_b3: - // [5] phi (byte) main::idx#3 = (byte) main::idx#6 [phi:main::@3->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@1#1] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2>=(byte) 5+(byte) 1) goto main::@2 -- vbuz1_ge_vbuc1_then_la1 - lda i - cmp #5+1 - bcs b2 jmp b4 // main::@4 b4: - // [7] (byte~) main::$1 ← (byte) main::i#2 - (byte) 5 -- vbuz1=vbuz2_minus_vbuc1 + // [6] (byte~) main::$1 ← (byte) main::i#7 - (byte) 5 -- vbuz1=vbuz2_minus_vbuc1 lax i axs #5 stx _1 - // [8] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte~) main::$1 -- pbuc1_derefidx_vbuz1=vbuz2 + // [7] *((const byte*) main::screen#0 + (byte) main::idx#8) ← (byte~) main::$1 -- pbuc1_derefidx_vbuz1=vbuz2 lda _1 ldy idx sta screen,y - // [9] (byte) main::idx#2 ← ++ (byte) main::idx#3 -- vbuz1=_inc_vbuz1 + // [8] (byte) main::idx#2 ← ++ (byte) main::idx#8 -- vbuz1=_inc_vbuz1 inc idx - // [10] phi from main::@2 main::@4 to main::@3 [phi:main::@2/main::@4->main::@3] + // [9] phi from main::@2 main::@4 to main::@3 [phi:main::@2/main::@4->main::@3] b3_from_b2: b3_from_b4: - // [10] phi (byte) main::idx#6 = (byte) main::idx#1 [phi:main::@2/main::@4->main::@3#0] -- register_copy + // [9] phi (byte) main::i#8 = (byte) main::i#1 [phi:main::@2/main::@4->main::@3#0] -- register_copy + // [9] phi (byte) main::idx#3 = (byte) main::idx#1 [phi:main::@2/main::@4->main::@3#1] -- register_copy jmp b3 // main::@3 b3: - // [11] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [10] (byte) main::i#1 ← ++ (byte) main::i#8 -- vbuz1=_inc_vbuz1 inc i - // [12] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + // [11] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$b cmp i - bne b1_from_b3 + bne b1 jmp breturn // main::@return breturn: - // [13] return + // [12] return rts + // main::@1 + b1: + // [13] if((byte) main::i#1>=(byte) 5+(byte) 1) goto main::@2 -- vbuz1_ge_vbuc1_then_la1 + lda i + cmp #5+1 + bcs b2 + // [5] phi from main::@1 to main::@4 [phi:main::@1->main::@4] + b4_from_b1: + // [5] phi (byte) main::idx#8 = (byte) main::idx#3 [phi:main::@1->main::@4#0] -- register_copy + // [5] phi (byte) main::i#7 = (byte) main::i#1 [phi:main::@1->main::@4#1] -- register_copy + jmp b4 // main::@2 b2: - // [14] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [14] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte) main::i#1 -- pbuc1_derefidx_vbuz1=vbuz2 lda i ldy idx sta screen,y @@ -305,16 +325,16 @@ main: { // File Data 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::idx#3 main::idx#6 main::idx#1 main::idx#2 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::idx#8 main::idx#3 main::idx#1 main::idx#2 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::i#8 main::i#7 main::i#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:4 [ main::$1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 66: zp ZP_BYTE:3 [ main::idx#3 main::idx#6 main::idx#1 main::idx#2 ] 23.38: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:4 [ main::$1 ] +Uplift Scope [main] 364.95: zp ZP_BYTE:3 [ main::i#8 main::i#7 main::i#1 ] 348: zp ZP_BYTE:2 [ main::idx#8 main::idx#3 main::idx#1 main::idx#2 ] 22: zp ZP_BYTE:4 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 568 combination reg byte y [ main::idx#3 main::idx#6 main::idx#1 main::idx#2 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$1 ] -Uplifting [] best 568 combination +Uplifting [main] best 3148 combination reg byte y [ main::i#8 main::i#7 main::i#1 ] reg byte x [ main::idx#8 main::idx#3 main::idx#1 main::idx#2 ] reg byte a [ main::$1 ] +Uplifting [] best 3148 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -343,58 +363,58 @@ bend: // main main: { .label screen = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::idx#3 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 - ldy #0 - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi from main to main::@4 [phi:main->main::@4] + b4_from_main: + // [5] phi (byte) main::idx#8 = (byte) 0 [phi:main->main::@4#0] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - b1_from_b3: - // [5] phi (byte) main::idx#3 = (byte) main::idx#6 [phi:main::@3->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@1#1] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2>=(byte) 5+(byte) 1) goto main::@2 -- vbuxx_ge_vbuc1_then_la1 - cpx #5+1 - bcs b2 + // [5] phi (byte) main::i#7 = (byte) 0 [phi:main->main::@4#1] -- vbuyy=vbuc1 + ldy #0 jmp b4 // main::@4 b4: - // [7] (byte~) main::$1 ← (byte) main::i#2 - (byte) 5 -- vbuaa=vbuxx_minus_vbuc1 - txa + // [6] (byte~) main::$1 ← (byte) main::i#7 - (byte) 5 -- vbuaa=vbuyy_minus_vbuc1 + tya sec sbc #5 - // [8] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte~) main::$1 -- pbuc1_derefidx_vbuyy=vbuaa - sta screen,y - // [9] (byte) main::idx#2 ← ++ (byte) main::idx#3 -- vbuyy=_inc_vbuyy - iny - // [10] phi from main::@2 main::@4 to main::@3 [phi:main::@2/main::@4->main::@3] + // [7] *((const byte*) main::screen#0 + (byte) main::idx#8) ← (byte~) main::$1 -- pbuc1_derefidx_vbuxx=vbuaa + sta screen,x + // [8] (byte) main::idx#2 ← ++ (byte) main::idx#8 -- vbuxx=_inc_vbuxx + inx + // [9] phi from main::@2 main::@4 to main::@3 [phi:main::@2/main::@4->main::@3] b3_from_b2: b3_from_b4: - // [10] phi (byte) main::idx#6 = (byte) main::idx#1 [phi:main::@2/main::@4->main::@3#0] -- register_copy + // [9] phi (byte) main::i#8 = (byte) main::i#1 [phi:main::@2/main::@4->main::@3#0] -- register_copy + // [9] phi (byte) main::idx#3 = (byte) main::idx#1 [phi:main::@2/main::@4->main::@3#1] -- register_copy jmp b3 // main::@3 b3: - // [11] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [12] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #$b - bne b1_from_b3 + // [10] (byte) main::i#1 ← ++ (byte) main::i#8 -- vbuyy=_inc_vbuyy + iny + // [11] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #$b + bne b1 jmp breturn // main::@return breturn: - // [13] return + // [12] return rts + // main::@1 + b1: + // [13] if((byte) main::i#1>=(byte) 5+(byte) 1) goto main::@2 -- vbuyy_ge_vbuc1_then_la1 + cpy #5+1 + bcs b2 + // [5] phi from main::@1 to main::@4 [phi:main::@1->main::@4] + b4_from_b1: + // [5] phi (byte) main::idx#8 = (byte) main::idx#3 [phi:main::@1->main::@4#0] -- register_copy + // [5] phi (byte) main::i#7 = (byte) main::i#1 [phi:main::@1->main::@4#1] -- register_copy + jmp b4 // main::@2 b2: - // [14] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte) main::i#2 -- pbuc1_derefidx_vbuyy=vbuxx - txa - sta screen,y - // [15] (byte) main::idx#1 ← ++ (byte) main::idx#3 -- vbuyy=_inc_vbuyy - iny + // [14] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte) main::i#1 -- pbuc1_derefidx_vbuxx=vbuyy + tya + sta screen,x + // [15] (byte) main::idx#1 ← ++ (byte) main::idx#3 -- vbuxx=_inc_vbuxx + inx jmp b3_from_b2 } // File Data @@ -402,31 +422,26 @@ main: { ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 Removing instruction jmp b4 Removing instruction jmp b3 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination -Replacing label b1_from_b3 with b1 Replacing label b3_from_b2 with b3 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b1_from_b3: Removing instruction b3_from_b2: Removing instruction b3_from_b4: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b4: +Removing instruction b4_from_main: Removing instruction breturn: +Removing instruction b4_from_b1: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Removing instruction jmp b1 -Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -442,23 +457,24 @@ FINAL SYMBOL TABLE (label) main::@4 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 6.875 +(byte) main::i#1 reg byte y 121.2 +(byte) main::i#7 reg byte y 30.75 +(byte) main::i#8 reg byte y 213.0 (byte) main::idx -(byte) main::idx#1 reg byte y 22.0 -(byte) main::idx#2 reg byte y 22.0 -(byte) main::idx#3 reg byte y 11.0 -(byte) main::idx#6 reg byte y 11.0 +(byte) main::idx#1 reg byte x 202.0 +(byte) main::idx#2 reg byte x 22.0 +(byte) main::idx#3 reg byte x 83.0 +(byte) main::idx#8 reg byte x 40.99999999999999 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -reg byte x [ main::i#2 main::i#1 ] -reg byte y [ main::idx#3 main::idx#6 main::idx#1 main::idx#2 ] +reg byte x [ main::idx#8 main::idx#3 main::idx#1 main::idx#2 ] +reg byte y [ main::i#8 main::i#7 main::i#1 ] reg byte a [ main::$1 ] FINAL ASSEMBLER -Score: 406 +Score: 2506 // File Comments // Tests statement sequence locality of if(cond) { stmt1; } else { stmt2; } @@ -477,55 +493,58 @@ Score: 406 // main main: { .label screen = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::idx#3 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 - ldy #0 - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [5] phi from main to main::@4 [phi:main->main::@4] + // [5] phi (byte) main::idx#8 = (byte) 0 [phi:main->main::@4#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - // [5] phi (byte) main::idx#3 = (byte) main::idx#6 [phi:main::@3->main::@1#0] -- register_copy - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@1#1] -- register_copy - // main::@1 - b1: - // if(i>5) - // [6] if((byte) main::i#2>=(byte) 5+(byte) 1) goto main::@2 -- vbuxx_ge_vbuc1_then_la1 - cpx #5+1 - bcs b2 + // [5] phi (byte) main::i#7 = (byte) 0 [phi:main->main::@4#1] -- vbuyy=vbuc1 + ldy #0 // main::@4 + b4: // i-5 - // [7] (byte~) main::$1 ← (byte) main::i#2 - (byte) 5 -- vbuaa=vbuxx_minus_vbuc1 - txa + // [6] (byte~) main::$1 ← (byte) main::i#7 - (byte) 5 -- vbuaa=vbuyy_minus_vbuc1 + tya sec sbc #5 // screen[idx++] = i-5 - // [8] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte~) main::$1 -- pbuc1_derefidx_vbuyy=vbuaa - sta screen,y + // [7] *((const byte*) main::screen#0 + (byte) main::idx#8) ← (byte~) main::$1 -- pbuc1_derefidx_vbuxx=vbuaa + sta screen,x // screen[idx++] = i-5; - // [9] (byte) main::idx#2 ← ++ (byte) main::idx#3 -- vbuyy=_inc_vbuyy - iny - // [10] phi from main::@2 main::@4 to main::@3 [phi:main::@2/main::@4->main::@3] - // [10] phi (byte) main::idx#6 = (byte) main::idx#1 [phi:main::@2/main::@4->main::@3#0] -- register_copy + // [8] (byte) main::idx#2 ← ++ (byte) main::idx#8 -- vbuxx=_inc_vbuxx + inx + // [9] phi from main::@2 main::@4 to main::@3 [phi:main::@2/main::@4->main::@3] + // [9] phi (byte) main::i#8 = (byte) main::i#1 [phi:main::@2/main::@4->main::@3#0] -- register_copy + // [9] phi (byte) main::idx#3 = (byte) main::idx#1 [phi:main::@2/main::@4->main::@3#1] -- register_copy // main::@3 b3: // for(byte i: 0..10) - // [11] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [12] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #$b + // [10] (byte) main::i#1 ← ++ (byte) main::i#8 -- vbuyy=_inc_vbuyy + iny + // [11] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #$b bne b1 // main::@return // } - // [13] return + // [12] return rts + // main::@1 + b1: + // if(i>5) + // [13] if((byte) main::i#1>=(byte) 5+(byte) 1) goto main::@2 -- vbuyy_ge_vbuc1_then_la1 + cpy #5+1 + bcs b2 + // [5] phi from main::@1 to main::@4 [phi:main::@1->main::@4] + // [5] phi (byte) main::idx#8 = (byte) main::idx#3 [phi:main::@1->main::@4#0] -- register_copy + // [5] phi (byte) main::i#7 = (byte) main::i#1 [phi:main::@1->main::@4#1] -- register_copy + jmp b4 // main::@2 b2: // screen[idx++] = i - // [14] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte) main::i#2 -- pbuc1_derefidx_vbuyy=vbuxx - txa - sta screen,y + // [14] *((const byte*) main::screen#0 + (byte) main::idx#3) ← (byte) main::i#1 -- pbuc1_derefidx_vbuxx=vbuyy + tya + sta screen,x // screen[idx++] = i; - // [15] (byte) main::idx#1 ← ++ (byte) main::idx#3 -- vbuyy=_inc_vbuyy - iny + // [15] (byte) main::idx#1 ← ++ (byte) main::idx#3 -- vbuxx=_inc_vbuxx + inx jmp b3 } // File Data diff --git a/src/test/ref/sequence-locality-0.sym b/src/test/ref/sequence-locality-0.sym index 68c1bbfaa..7434f4789 100644 --- a/src/test/ref/sequence-locality-0.sym +++ b/src/test/ref/sequence-locality-0.sym @@ -9,16 +9,17 @@ (label) main::@4 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 6.875 +(byte) main::i#1 reg byte y 121.2 +(byte) main::i#7 reg byte y 30.75 +(byte) main::i#8 reg byte y 213.0 (byte) main::idx -(byte) main::idx#1 reg byte y 22.0 -(byte) main::idx#2 reg byte y 22.0 -(byte) main::idx#3 reg byte y 11.0 -(byte) main::idx#6 reg byte y 11.0 +(byte) main::idx#1 reg byte x 202.0 +(byte) main::idx#2 reg byte x 22.0 +(byte) main::idx#3 reg byte x 83.0 +(byte) main::idx#8 reg byte x 40.99999999999999 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -reg byte x [ main::i#2 main::i#1 ] -reg byte y [ main::idx#3 main::idx#6 main::idx#1 main::idx#2 ] +reg byte x [ main::idx#8 main::idx#3 main::idx#1 main::idx#2 ] +reg byte y [ main::i#8 main::i#7 main::i#1 ] reg byte a [ main::$1 ] diff --git a/src/test/ref/sequence-locality-1.asm b/src/test/ref/sequence-locality-1.asm index eba966a73..73f5b6b13 100644 --- a/src/test/ref/sequence-locality-1.asm +++ b/src/test/ref/sequence-locality-1.asm @@ -6,11 +6,7 @@ main: { .label screen = $400 ldx #0 ldy #0 - b1: - cpy #5+1 - bcc b4 - tya - asl + txa b2: sta screen,x inx @@ -18,6 +14,12 @@ main: { cpy #$b bne b1 rts + b1: + cpy #5+1 + bcc b4 + tya + asl + jmp b2 b4: tya jmp b2 diff --git a/src/test/ref/sequence-locality-1.cfg b/src/test/ref/sequence-locality-1.cfg index 78aa952a3..8297f9f47 100644 --- a/src/test/ref/sequence-locality-1.cfg +++ b/src/test/ref/sequence-locality-1.cfg @@ -9,25 +9,25 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::idx#2 ← phi( main/(byte) 0 main::@2/(byte) main::idx#1 ) - [5] (byte) main::i#3 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#3<(byte) 5+(byte) 1) goto main::@4 - to:main::@3 -main::@3: scope:[main] from main::@1 - [7] (byte) main::j#1 ← (byte) main::i#3 + (byte) main::i#3 to:main::@2 -main::@2: scope:[main] from main::@3 main::@4 - [8] (byte) main::j#2 ← phi( main::@4/(byte~) main::j#4 main::@3/(byte) main::j#1 ) - [9] *((const byte*) main::screen#0 + (byte) main::idx#2) ← (byte) main::j#2 - [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 - [11] (byte) main::i#1 ← ++ (byte) main::i#3 - [12] if((byte) main::i#1!=(byte) $b) goto main::@1 +main::@2: scope:[main] from main main::@3 main::@4 + [5] (byte) main::idx#5 ← phi( main::@4/(byte) main::idx#1 main/(byte) 0 main::@3/(byte) main::idx#1 ) + [5] (byte) main::i#5 ← phi( main::@4/(byte) main::i#1 main/(byte) 0 main::@3/(byte) main::i#1 ) + [5] (byte) main::j#2 ← phi( main::@4/(byte~) main::j#4 main/(byte) 0 main::@3/(byte) main::j#1 ) + [6] *((const byte*) main::screen#0 + (byte) main::idx#5) ← (byte) main::j#2 + [7] (byte) main::idx#1 ← ++ (byte) main::idx#5 + [8] (byte) main::i#1 ← ++ (byte) main::i#5 + [9] if((byte) main::i#1!=(byte) $b) goto main::@1 to:main::@return main::@return: scope:[main] from main::@2 - [13] return + [10] return to:@return -main::@4: scope:[main] from main::@1 - [14] (byte~) main::j#4 ← (byte) main::i#3 +main::@1: scope:[main] from main::@2 + [11] if((byte) main::i#1<(byte) 5+(byte) 1) goto main::@4 + to:main::@3 +main::@3: scope:[main] from main::@1 + [12] (byte) main::j#1 ← (byte) main::i#1 + (byte) main::i#1 + to:main::@2 +main::@4: scope:[main] from main::@1 + [13] (byte~) main::j#4 ← (byte) main::i#1 to:main::@2 diff --git a/src/test/ref/sequence-locality-1.log b/src/test/ref/sequence-locality-1.log index 2039b4c40..7468c3c0f 100644 --- a/src/test/ref/sequence-locality-1.log +++ b/src/test/ref/sequence-locality-1.log @@ -106,6 +106,7 @@ Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [11] main::i#1 ← ++ main::i#3 to ++ Resolved ranged comparison value [13] if(main::i#1!=rangelast(0,$a)) goto main::@1 to (number) $b Rewriting conditional comparison [7] if((byte) main::i#3<=(byte) 5) goto main::@2 +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 5+1 in if((byte) main::i#3<(byte) 5+(number) 1) goto main::@2 Adding number conversion cast (unumber) 1 in if((byte) main::i#3<(unumber)(byte) 5+(number) 1) goto main::@2 Adding number conversion cast (unumber) $b in if((byte) main::i#1!=(number) $b) goto main::@1 @@ -117,30 +118,45 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $b Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::i#1 = (byte) main::i#3 +Alias (byte) main::idx#1 = (byte) main::idx#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#7 (const byte) main::i#0 +Identical Phi Values (byte) main::idx#7 (const byte) main::idx#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (main::@1_1) in block main::@3 +Removing PHI-reference to removed block (main::@1_1) in block main::@3 +if() condition always true - replacing block destination [12] if((const byte) main::i#0<(byte) 5+(byte) 1) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Alias (byte) main::i#1 = (byte) main::i#6 +Alias (byte) main::idx#1 = (byte) main::idx#6 +Successful SSA optimization Pass2AliasElimination Inlining constant with var siblings (const byte) main::idx#0 Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 Constant inlined main::idx#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@5(between main::@2 and main::@1) -Added new block during phi lifting main::@6(between main::@1 and main::@2) +Added new block during phi lifting main::@5(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 3 initial phi equivalence classes -Coalesced [9] main::j#5 ← main::j#1 -Coalesced [16] main::i#5 ← main::i#1 -Coalesced [17] main::idx#5 ← main::idx#1 -Not coalescing [18] main::j#4 ← main::i#3 +Coalesced [15] main::j#5 ← main::j#1 +Coalesced [16] main::i#9 ← main::i#1 +Coalesced [17] main::idx#9 ← main::idx#1 +Not coalescing [18] main::j#4 ← main::i#1 +Coalesced (already) [19] main::i#8 ← main::i#1 +Coalesced (already) [20] main::idx#8 ← main::idx#1 Coalesced down to 3 phi equivalence classes Culled Empty Block (label) @2 -Culled Empty Block (label) main::@5 -Renumbering block main::@6 to main::@4 +Culled Empty Block (label) main::@1_1 +Renumbering block main::@5 to main::@4 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -158,38 +174,38 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::idx#2 ← phi( main/(byte) 0 main::@2/(byte) main::idx#1 ) - [5] (byte) main::i#3 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#3<(byte) 5+(byte) 1) goto main::@4 - to:main::@3 -main::@3: scope:[main] from main::@1 - [7] (byte) main::j#1 ← (byte) main::i#3 + (byte) main::i#3 to:main::@2 -main::@2: scope:[main] from main::@3 main::@4 - [8] (byte) main::j#2 ← phi( main::@4/(byte~) main::j#4 main::@3/(byte) main::j#1 ) - [9] *((const byte*) main::screen#0 + (byte) main::idx#2) ← (byte) main::j#2 - [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 - [11] (byte) main::i#1 ← ++ (byte) main::i#3 - [12] if((byte) main::i#1!=(byte) $b) goto main::@1 +main::@2: scope:[main] from main main::@3 main::@4 + [5] (byte) main::idx#5 ← phi( main::@4/(byte) main::idx#1 main/(byte) 0 main::@3/(byte) main::idx#1 ) + [5] (byte) main::i#5 ← phi( main::@4/(byte) main::i#1 main/(byte) 0 main::@3/(byte) main::i#1 ) + [5] (byte) main::j#2 ← phi( main::@4/(byte~) main::j#4 main/(byte) 0 main::@3/(byte) main::j#1 ) + [6] *((const byte*) main::screen#0 + (byte) main::idx#5) ← (byte) main::j#2 + [7] (byte) main::idx#1 ← ++ (byte) main::idx#5 + [8] (byte) main::i#1 ← ++ (byte) main::i#5 + [9] if((byte) main::i#1!=(byte) $b) goto main::@1 to:main::@return main::@return: scope:[main] from main::@2 - [13] return + [10] return to:@return +main::@1: scope:[main] from main::@2 + [11] if((byte) main::i#1<(byte) 5+(byte) 1) goto main::@4 + to:main::@3 +main::@3: scope:[main] from main::@1 + [12] (byte) main::j#1 ← (byte) main::i#1 + (byte) main::i#1 + to:main::@2 main::@4: scope:[main] from main::@1 - [14] (byte~) main::j#4 ← (byte) main::i#3 + [13] (byte~) main::j#4 ← (byte) main::i#1 to:main::@2 VARIABLE REGISTER WEIGHTS (void()) main() (byte) main::i -(byte) main::i#1 16.5 -(byte) main::i#3 9.428571428571429 +(byte) main::i#1 17.599999999999998 +(byte) main::i#5 11.0 (byte) main::idx -(byte) main::idx#1 7.333333333333333 -(byte) main::idx#2 5.5 +(byte) main::idx#1 5.5 +(byte) main::idx#5 22.0 (byte) main::j (byte) main::j#1 22.0 (byte) main::j#2 33.0 @@ -197,16 +213,16 @@ VARIABLE REGISTER WEIGHTS (byte*) main::screen Initial phi equivalence classes -[ main::i#3 main::i#1 ] -[ main::idx#2 main::idx#1 ] [ main::j#2 main::j#4 main::j#1 ] +[ main::i#5 main::i#1 ] +[ main::idx#5 main::idx#1 ] Complete equivalence classes -[ main::i#3 main::i#1 ] -[ main::idx#2 main::idx#1 ] [ main::j#2 main::j#4 main::j#1 ] -Allocated zp ZP_BYTE:2 [ main::i#3 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::idx#2 main::idx#1 ] -Allocated zp ZP_BYTE:4 [ main::j#2 main::j#4 main::j#1 ] +[ main::i#5 main::i#1 ] +[ main::idx#5 main::idx#1 ] +Allocated zp ZP_BYTE:2 [ main::j#2 main::j#4 main::j#1 ] +Allocated zp ZP_BYTE:3 [ main::i#5 main::i#1 ] +Allocated zp ZP_BYTE:4 [ main::idx#5 main::idx#1 ] INITIAL ASM Target platform is c64basic @@ -236,63 +252,63 @@ bend: // main main: { .label screen = $400 - .label idx = 3 - .label i = 2 - .label j = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::idx#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + .label idx = 4 + .label i = 3 + .label j = 2 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::idx#5 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta idx - // [5] phi (byte) main::i#3 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) main::i#5 = (byte) 0 [phi:main->main::@2#1] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::idx#2 = (byte) main::idx#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#3 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 + // [5] phi (byte) main::j#2 = (byte) 0 [phi:main->main::@2#2] -- vbuz1=vbuc1 + lda #0 + sta j + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) main::screen#0 + (byte) main::idx#5) ← (byte) main::j#2 -- pbuc1_derefidx_vbuz1=vbuz2 + lda j + ldy idx + sta screen,y + // [7] (byte) main::idx#1 ← ++ (byte) main::idx#5 -- vbuz1=_inc_vbuz1 + inc idx + // [8] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuz1=_inc_vbuz1 + inc i + // [9] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$b + cmp i + bne b1 + jmp breturn + // main::@return + breturn: + // [10] return + rts // main::@1 b1: - // [6] if((byte) main::i#3<(byte) 5+(byte) 1) goto main::@4 -- vbuz1_lt_vbuc1_then_la1 + // [11] if((byte) main::i#1<(byte) 5+(byte) 1) goto main::@4 -- vbuz1_lt_vbuc1_then_la1 lda i cmp #5+1 bcc b4 jmp b3 // main::@3 b3: - // [7] (byte) main::j#1 ← (byte) main::i#3 + (byte) main::i#3 -- vbuz1=vbuz2_plus_vbuz2 + // [12] (byte) main::j#1 ← (byte) main::i#1 + (byte) main::i#1 -- vbuz1=vbuz2_plus_vbuz2 lda i asl sta j - // [8] phi from main::@3 main::@4 to main::@2 [phi:main::@3/main::@4->main::@2] + // [5] phi from main::@3 main::@4 to main::@2 [phi:main::@3/main::@4->main::@2] b2_from_b3: b2_from_b4: - // [8] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@3/main::@4->main::@2#0] -- register_copy + // [5] phi (byte) main::idx#5 = (byte) main::idx#1 [phi:main::@3/main::@4->main::@2#0] -- register_copy + // [5] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@3/main::@4->main::@2#1] -- register_copy + // [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@3/main::@4->main::@2#2] -- register_copy jmp b2 - // main::@2 - b2: - // [9] *((const byte*) main::screen#0 + (byte) main::idx#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuz1=vbuz2 - lda j - ldy idx - sta screen,y - // [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 -- vbuz1=_inc_vbuz1 - inc idx - // [11] (byte) main::i#1 ← ++ (byte) main::i#3 -- vbuz1=_inc_vbuz1 - inc i - // [12] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #$b - cmp i - bne b1_from_b2 - jmp breturn - // main::@return - breturn: - // [13] return - rts // main::@4 b4: - // [14] (byte~) main::j#4 ← (byte) main::i#3 -- vbuz1=vbuz2 + // [13] (byte~) main::j#4 ← (byte) main::i#1 -- vbuz1=vbuz2 lda i sta j jmp b2_from_b4 @@ -300,20 +316,20 @@ main: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [7] (byte) main::j#1 ← (byte) main::i#3 + (byte) main::i#3 [ main::i#3 main::idx#2 main::j#1 ] ( main:2 [ main::i#3 main::idx#2 main::j#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#3 main::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::idx#2 main::idx#1 ] -Statement [7] (byte) main::j#1 ← (byte) main::i#3 + (byte) main::i#3 [ main::i#3 main::idx#2 main::j#1 ] ( main:2 [ main::i#3 main::idx#2 main::j#1 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#3 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ main::idx#2 main::idx#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:4 [ main::j#2 main::j#4 main::j#1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , +Statement [12] (byte) main::j#1 ← (byte) main::i#1 + (byte) main::i#1 [ main::j#1 main::i#1 main::idx#1 ] ( main:2 [ main::j#1 main::i#1 main::idx#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::i#5 main::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::idx#5 main::idx#1 ] +Statement [12] (byte) main::j#1 ← (byte) main::i#1 + (byte) main::i#1 [ main::j#1 main::i#1 main::idx#1 ] ( main:2 [ main::j#1 main::i#1 main::idx#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::j#2 main::j#4 main::j#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::i#5 main::i#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ main::idx#5 main::idx#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 77: zp ZP_BYTE:4 [ main::j#2 main::j#4 main::j#1 ] 25.93: zp ZP_BYTE:2 [ main::i#3 main::i#1 ] 12.83: zp ZP_BYTE:3 [ main::idx#2 main::idx#1 ] +Uplift Scope [main] 77: zp ZP_BYTE:2 [ main::j#2 main::j#4 main::j#1 ] 28.6: zp ZP_BYTE:3 [ main::i#5 main::i#1 ] 27.5: zp ZP_BYTE:4 [ main::idx#5 main::idx#1 ] Uplift Scope [] -Uplifting [main] best 478 combination reg byte a [ main::j#2 main::j#4 main::j#1 ] reg byte y [ main::i#3 main::i#1 ] reg byte x [ main::idx#2 main::idx#1 ] -Uplifting [] best 478 combination +Uplifting [main] best 468 combination reg byte a [ main::j#2 main::j#4 main::j#1 ] reg byte y [ main::i#5 main::i#1 ] reg byte x [ main::idx#5 main::idx#1 ] +Uplifting [] best 468 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -342,53 +358,52 @@ bend: // main main: { .label screen = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::idx#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::idx#5 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi (byte) main::i#3 = (byte) 0 [phi:main->main::@1#1] -- vbuyy=vbuc1 + // [5] phi (byte) main::i#5 = (byte) 0 [phi:main->main::@2#1] -- vbuyy=vbuc1 ldy #0 - jmp b1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::idx#2 = (byte) main::idx#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#3 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 + // [5] phi (byte) main::j#2 = (byte) 0 [phi:main->main::@2#2] -- vbuaa=vbuc1 + lda #0 + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) main::screen#0 + (byte) main::idx#5) ← (byte) main::j#2 -- pbuc1_derefidx_vbuxx=vbuaa + sta screen,x + // [7] (byte) main::idx#1 ← ++ (byte) main::idx#5 -- vbuxx=_inc_vbuxx + inx + // [8] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuyy=_inc_vbuyy + iny + // [9] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #$b + bne b1 + jmp breturn + // main::@return + breturn: + // [10] return + rts // main::@1 b1: - // [6] if((byte) main::i#3<(byte) 5+(byte) 1) goto main::@4 -- vbuyy_lt_vbuc1_then_la1 + // [11] if((byte) main::i#1<(byte) 5+(byte) 1) goto main::@4 -- vbuyy_lt_vbuc1_then_la1 cpy #5+1 bcc b4 jmp b3 // main::@3 b3: - // [7] (byte) main::j#1 ← (byte) main::i#3 + (byte) main::i#3 -- vbuaa=vbuyy_plus_vbuyy + // [12] (byte) main::j#1 ← (byte) main::i#1 + (byte) main::i#1 -- vbuaa=vbuyy_plus_vbuyy tya asl - // [8] phi from main::@3 main::@4 to main::@2 [phi:main::@3/main::@4->main::@2] + // [5] phi from main::@3 main::@4 to main::@2 [phi:main::@3/main::@4->main::@2] b2_from_b3: b2_from_b4: - // [8] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@3/main::@4->main::@2#0] -- register_copy + // [5] phi (byte) main::idx#5 = (byte) main::idx#1 [phi:main::@3/main::@4->main::@2#0] -- register_copy + // [5] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@3/main::@4->main::@2#1] -- register_copy + // [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@3/main::@4->main::@2#2] -- register_copy jmp b2 - // main::@2 - b2: - // [9] *((const byte*) main::screen#0 + (byte) main::idx#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuxx=vbuaa - sta screen,x - // [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 -- vbuxx=_inc_vbuxx - inx - // [11] (byte) main::i#1 ← ++ (byte) main::i#3 -- vbuyy=_inc_vbuyy - iny - // [12] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 - cpy #$b - bne b1_from_b2 - jmp breturn - // main::@return - breturn: - // [13] return - rts // main::@4 b4: - // [14] (byte~) main::j#4 ← (byte) main::i#3 -- vbuaa=vbuyy + // [13] (byte~) main::j#4 ← (byte) main::i#1 -- vbuaa=vbuyy tya jmp b2_from_b4 } @@ -397,32 +412,31 @@ main: { ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 -Removing instruction jmp b3 Removing instruction jmp b2 Removing instruction jmp breturn +Removing instruction jmp b3 Succesful ASM optimization Pass5NextJumpElimination -Replacing label b1_from_b2 with b1 -Replacing label b2_from_b4 with b2 +Replacing instruction lda #0 with TXA Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b1_from_b2: Removing instruction b2_from_b3: -Removing instruction b2_from_b4: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b3: +Removing instruction b2_from_main: Removing instruction breturn: +Removing instruction b3: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Removing instruction jmp b1 -Succesful ASM optimization Pass5NextJumpElimination +Skipping double jump to b2 in jmp b2_from_b4 +Succesful ASM optimization Pass5DoubleJumpElimination +Relabelling long label b2_from_b4 to b3 +Succesful ASM optimization Pass5RelabelLongLabels Removing instruction bbegin: +Removing instruction b3: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE @@ -436,11 +450,11 @@ FINAL SYMBOL TABLE (label) main::@4 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte y 16.5 -(byte) main::i#3 reg byte y 9.428571428571429 +(byte) main::i#1 reg byte y 17.599999999999998 +(byte) main::i#5 reg byte y 11.0 (byte) main::idx -(byte) main::idx#1 reg byte x 7.333333333333333 -(byte) main::idx#2 reg byte x 5.5 +(byte) main::idx#1 reg byte x 5.5 +(byte) main::idx#5 reg byte x 22.0 (byte) main::j (byte) main::j#1 reg byte a 22.0 (byte) main::j#2 reg byte a 33.0 @@ -448,13 +462,13 @@ FINAL SYMBOL TABLE (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -reg byte y [ main::i#3 main::i#1 ] -reg byte x [ main::idx#2 main::idx#1 ] reg byte a [ main::j#2 main::j#4 main::j#1 ] +reg byte y [ main::i#5 main::i#1 ] +reg byte x [ main::idx#5 main::idx#1 ] FINAL ASSEMBLER -Score: 316 +Score: 366 // File Comments // Tests statement sequence locality of if(cond) { stmt1; } else { stmt2; } @@ -473,48 +487,50 @@ Score: 316 // main main: { .label screen = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::idx#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::idx#5 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi (byte) main::i#3 = (byte) 0 [phi:main->main::@1#1] -- vbuyy=vbuc1 + // [5] phi (byte) main::i#5 = (byte) 0 [phi:main->main::@2#1] -- vbuyy=vbuc1 ldy #0 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::idx#2 = (byte) main::idx#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (byte) main::i#3 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - // main::@1 - b1: - // if(i>5) - // [6] if((byte) main::i#3<(byte) 5+(byte) 1) goto main::@4 -- vbuyy_lt_vbuc1_then_la1 - cpy #5+1 - bcc b4 - // main::@3 - // j += i - // [7] (byte) main::j#1 ← (byte) main::i#3 + (byte) main::i#3 -- vbuaa=vbuyy_plus_vbuyy - tya - asl - // [8] phi from main::@3 main::@4 to main::@2 [phi:main::@3/main::@4->main::@2] - // [8] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@3/main::@4->main::@2#0] -- register_copy + // [5] phi (byte) main::j#2 = (byte) 0 [phi:main->main::@2#2] -- vbuaa=vbuc1 + txa // main::@2 b2: // screen[idx++] = j - // [9] *((const byte*) main::screen#0 + (byte) main::idx#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuxx=vbuaa + // [6] *((const byte*) main::screen#0 + (byte) main::idx#5) ← (byte) main::j#2 -- pbuc1_derefidx_vbuxx=vbuaa sta screen,x // screen[idx++] = j; - // [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 -- vbuxx=_inc_vbuxx + // [7] (byte) main::idx#1 ← ++ (byte) main::idx#5 -- vbuxx=_inc_vbuxx inx // for(byte i: 0..10) - // [11] (byte) main::i#1 ← ++ (byte) main::i#3 -- vbuyy=_inc_vbuyy + // [8] (byte) main::i#1 ← ++ (byte) main::i#5 -- vbuyy=_inc_vbuyy iny - // [12] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 + // [9] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #$b bne b1 // main::@return // } - // [13] return + // [10] return rts + // main::@1 + b1: + // if(i>5) + // [11] if((byte) main::i#1<(byte) 5+(byte) 1) goto main::@4 -- vbuyy_lt_vbuc1_then_la1 + cpy #5+1 + bcc b4 + // main::@3 + // j += i + // [12] (byte) main::j#1 ← (byte) main::i#1 + (byte) main::i#1 -- vbuaa=vbuyy_plus_vbuyy + tya + asl + // [5] phi from main::@3 main::@4 to main::@2 [phi:main::@3/main::@4->main::@2] + // [5] phi (byte) main::idx#5 = (byte) main::idx#1 [phi:main::@3/main::@4->main::@2#0] -- register_copy + // [5] phi (byte) main::i#5 = (byte) main::i#1 [phi:main::@3/main::@4->main::@2#1] -- register_copy + // [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@3/main::@4->main::@2#2] -- register_copy + jmp b2 // main::@4 b4: - // [14] (byte~) main::j#4 ← (byte) main::i#3 -- vbuaa=vbuyy + // [13] (byte~) main::j#4 ← (byte) main::i#1 -- vbuaa=vbuyy tya jmp b2 } diff --git a/src/test/ref/sequence-locality-1.sym b/src/test/ref/sequence-locality-1.sym index 450b6f3bd..ea8911ecd 100644 --- a/src/test/ref/sequence-locality-1.sym +++ b/src/test/ref/sequence-locality-1.sym @@ -8,11 +8,11 @@ (label) main::@4 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte y 16.5 -(byte) main::i#3 reg byte y 9.428571428571429 +(byte) main::i#1 reg byte y 17.599999999999998 +(byte) main::i#5 reg byte y 11.0 (byte) main::idx -(byte) main::idx#1 reg byte x 7.333333333333333 -(byte) main::idx#2 reg byte x 5.5 +(byte) main::idx#1 reg byte x 5.5 +(byte) main::idx#5 reg byte x 22.0 (byte) main::j (byte) main::j#1 reg byte a 22.0 (byte) main::j#2 reg byte a 33.0 @@ -20,6 +20,6 @@ (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -reg byte y [ main::i#3 main::i#1 ] -reg byte x [ main::idx#2 main::idx#1 ] reg byte a [ main::j#2 main::j#4 main::j#1 ] +reg byte y [ main::i#5 main::i#1 ] +reg byte x [ main::idx#5 main::idx#1 ] diff --git a/src/test/ref/sieve-min.asm b/src/test/ref/sieve-min.asm index 9aa354bf6..841230aab 100644 --- a/src/test/ref/sieve-min.asm +++ b/src/test/ref/sieve-min.asm @@ -9,81 +9,31 @@ .label sieve = $1000 .label print_char_cursor = 8 main: { - .label i = 8 .label sieve_i = $a - .label j = 4 - .label s = 6 - .label i_3 = 2 - .label i_10 = 2 + .label j = 2 + .label s = 4 + .label i = 6 + .label i_12 = 8 .label _18 = $c + .label i_17 = 8 jsr memset lda #sieve+2 sta sieve_i+1 lda #<2 - sta i + sta i_17 lda #>2 - sta i+1 - b1: - lda i+1 - cmp #>SQRT_COUNT - bcc b2 - bne !+ - lda i - cmp #$400 - sta print_char_cursor+1 - lda #<2 - sta i_10 - lda #>2 - sta i_10+1 - b7: - lda i_10+1 - cmp #>$4c7 - bcc b8 - bne !+ - lda i_10 - cmp #<$4c7 - bcc b8 - !: - b11: - inc SCREEN+$3e7 - jmp b11 - b8: - lda i_10 - clc - adc #sieve - sta _18+1 - ldy #0 - lda (_18),y - cmp #0 - bne b9 - jsr print_word - lda #' ' - jsr print_char - b9: - inc i_3 - bne !+ - inc i_3+1 - !: - jmp b7 + sta i_17+1 b2: ldy #0 lda (sieve_i),y cmp #0 bne b3 - lda i + lda i_17 asl sta j - lda i+1 + lda i_17+1 rol sta j+1 lda j @@ -103,32 +53,78 @@ main: { bcc b5 !: b3: - inc i + inc i_12 bne !+ - inc i+1 + inc i_12+1 !: inc sieve_i bne !+ inc sieve_i+1 !: - jmp b1 + lda i_12+1 + cmp #>SQRT_COUNT + bcc b2 + bne !+ + lda i_12 + cmp #$400 + sta print_char_cursor+1 + lda #<2 + sta i + lda #>2 + sta i+1 + b8: + lda i + clc + adc #sieve + sta _18+1 + ldy #0 + lda (_18),y + cmp #0 + bne b9 + jsr print_word + lda #' ' + jsr print_char + b9: + inc i + bne !+ + inc i+1 + !: + lda i+1 + cmp #>$4c7 + bcc b8 + bne !+ + lda i + cmp #<$4c7 + bcc b8 + !: + b11: + inc SCREEN+$3e7 + jmp b11 b5: lda #1 ldy #0 sta (s),y lda s clc - adc i + adc i_17 sta s lda s+1 - adc i+1 + adc i_17+1 sta s+1 lda j clc - adc i + adc i_17 sta j lda j+1 - adc i+1 + adc i_17+1 sta j+1 jmp b4 } @@ -144,9 +140,9 @@ print_char: { rts } // Print a word as HEX -// print_word(word zeropage(2) w) +// print_word(word zeropage(6) w) print_word: { - .label w = 2 + .label w = 6 lda w+1 tax jsr print_byte @@ -182,14 +178,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #> (byte) 4 [40] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) @@ -98,15 +98,15 @@ print_byte::@return: scope:[print_byte] from print_byte::@1 to:@return memset: scope:[memset] from main [46] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [47] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [48] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [49] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [47] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [48] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [50] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [49] return + [51] return to:@return -memset::@2: scope:[memset] from memset::@1 - [50] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [51] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 diff --git a/src/test/ref/sieve-min.log b/src/test/ref/sieve-min.log index 71899436c..17ba81d07 100644 --- a/src/test/ref/sieve-min.log +++ b/src/test/ref/sieve-min.log @@ -711,8 +711,34 @@ Eliminating unused variable (void*) memset::return#2 and assignment [27] (void*) Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks -Constant right-side identified [27] (byte*) main::sieve_i#0 ← (const byte*) sieve#0 + (const word) main::i#0 -Constant right-side identified [49] (byte*~) main::$15 ← (const byte*) SCREEN#0 + (word) $3e7 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (word) main::i#12 = (word) main::i#2 +Alias (byte*) main::sieve_i#1 = (byte*) main::sieve_i#2 +Alias (word) main::i#17 = (word) main::i#19 +Alias (byte*) main::sieve_i#11 = (byte*) main::sieve_i#8 +Alias (word) main::i#18 = (word) main::i#20 +Alias (byte*) main::sieve_i#10 = (byte*) main::sieve_i#12 +Alias (word) main::i#10 = (word) main::i#3 +Alias (byte*) print_char_cursor#27 = (byte*) print_char_cursor#35 +Alias (word) main::i#22 = (word) main::i#24 (word) main::i#26 (word) main::i#25 +Alias (byte*) print_char_cursor#46 = (byte*) print_char_cursor#47 +Alias (byte*) main::sieve_i#0 = (byte*) main::sieve_i#13 +Successful SSA optimization Pass2AliasElimination +Alias (word) main::i#22 = (word) main::i#23 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) print_char_cursor#45 (byte*) print_char_cursor#46 +Identical Phi Values (word) main::i#18 (word) main::i#17 +Identical Phi Values (byte*) main::sieve_i#10 (byte*) main::sieve_i#11 +Identical Phi Values (word) main::i#21 (const word) main::i#0 +Identical Phi Values (word) main::i#27 (const word) main::i#1 +Identical Phi Values (byte*) print_char_cursor#48 (const byte*) print_char_cursor#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (word) main::i#16 (word) main::i#17 +Identical Phi Values (byte*) main::sieve_i#9 (byte*) main::sieve_i#11 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [28] (byte*) main::sieve_i#0 ← (const byte*) sieve#0 + (const word) main::i#0 +Constant right-side identified [60] (byte*~) main::$15 ← (const byte*) SCREEN#0 + (word) $3e7 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const void*) memset::str#0 = (void*)sieve#0 Constant (const byte*) main::sieve_i#0 = sieve#0+main::i#0 @@ -721,6 +747,9 @@ Successful SSA optimization Pass2ConstantIdentification Constant value identified (byte*)memset::str#0 in [0] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0 Constant value identified (byte*)memset::str#0 in [2] (byte*) memset::dst#0 ← (byte*)(const void*) memset::str#0 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [64] if((const word) main::i#0<(const byte) SQRT_COUNT#0) goto main::@2 +if() condition always true - replacing block destination [66] if((const word) main::i#1<(word) $4c7) goto main::@16 +Successful SSA optimization Pass2ConstantIfs Constant (const byte*) memset::$2 = (byte*)memset::str#0 Constant (const byte*) memset::dst#0 = (byte*)memset::str#0 Successful SSA optimization Pass2ConstantIdentification @@ -728,7 +757,14 @@ Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memse Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Successful SSA optimization Pass2ConstantIdentification -Rewriting multiplication to use shift [28] (word) main::j#0 ← (word) main::i#12 * (byte) 2 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) memset::dst#1 = (byte*) memset::dst#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) memset::dst#5 (const byte*) memset::dst#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [49] if((const byte*) memset::dst#0!=(const byte*) memset::end#0) goto memset::@5 +Successful SSA optimization Pass2ConstantIfs +Rewriting multiplication to use shift [28] (word) main::j#0 ← (word) main::i#17 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte*) memset::dst#0 Inlining constant with var siblings (const byte) print_char::ch#2 @@ -747,7 +783,10 @@ Constant inlined main::i#1 = (byte) 2 Constant inlined $1 = (const byte[]) print_hextab#0 Constant inlined main::sieve_i#0 = (const byte*) sieve#0+(byte) 2 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@32(between main::@16 and main::@18) +Added new block during phi lifting memset::@10(between memset::@4 and memset::@5) +Added new block during phi lifting main::@32(between main::@1 and main::@2) +Added new block during phi lifting main::@33(between main::@15 and main::@16) +Added new block during phi lifting main::@34(between main::@16 and main::@18) Adding NOP phi() at start of @begin Adding NOP phi() at start of @26 Adding NOP phi() at start of @43 @@ -757,54 +796,63 @@ Adding NOP phi() at start of @52 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@29 +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of main::@15_1 Adding NOP phi() at start of main::@23 Adding NOP phi() at start of print_word::@2 Adding NOP phi() at start of print_byte::@2 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@4_1 Adding NOP phi() at start of memset::@1 CALL GRAPH Calls in [] to main:5 -Calls in [main] to memset:9 print_word:21 print_char:23 -Calls in [print_word] to print_byte:53 print_byte:57 -Calls in [print_byte] to print_char:65 print_char:70 +Calls in [main] to memset:9 print_word:29 print_char:31 +Calls in [print_word] to print_byte:55 print_byte:59 +Calls in [print_byte] to print_char:67 print_char:72 Created 12 initial phi equivalence classes -Coalesced [22] print_char_cursor#47 ← print_char_cursor#20 -Coalesced [24] print_char_cursor#52 ← print_char_cursor#20 -Coalesced [27] main::i#17 ← main::i#3 -Coalesced [28] print_char_cursor#50 ← print_char_cursor#35 -Coalesced (already) [29] print_char_cursor#51 ← print_char_cursor#27 -Coalesced [33] main::j#4 ← main::j#0 -Coalesced [34] main::s#4 ← main::s#0 -Coalesced [39] main::i#16 ← main::i#2 -Coalesced [40] main::sieve_i#8 ← main::sieve_i#1 -Coalesced [44] main::j#5 ← main::j#1 -Coalesced [45] main::s#5 ← main::s#1 -Coalesced [51] print_byte::b#4 ← print_byte::b#0 -Coalesced [52] print_char_cursor#45 ← print_char_cursor#27 -Coalesced [55] print_byte::b#5 ← print_byte::b#1 -Coalesced (already) [56] print_char_cursor#46 ← print_char_cursor#20 -Coalesced [63] print_char::ch#4 ← print_char::ch#0 -Coalesced (already) [64] print_char_cursor#48 ← print_char_cursor#26 -Coalesced [68] print_char::ch#5 ← print_char::ch#1 -Coalesced (already) [69] print_char_cursor#49 ← print_char_cursor#20 -Coalesced [81] memset::dst#4 ← memset::dst#1 +Coalesced [16] main::j#4 ← main::j#0 +Coalesced [17] main::s#4 ← main::s#0 +Coalesced [30] print_char_cursor#51 ← print_char_cursor#20 +Coalesced [32] print_char_cursor#56 ← print_char_cursor#20 +Coalesced [38] main::i#29 ← main::i#10 +Coalesced [39] print_char_cursor#54 ← print_char_cursor#27 +Coalesced (already) [40] print_char_cursor#55 ← print_char_cursor#46 +Coalesced [41] main::i#28 ← main::i#12 +Coalesced [42] main::sieve_i#14 ← main::sieve_i#1 +Coalesced [46] main::j#5 ← main::j#1 +Coalesced [47] main::s#5 ← main::s#1 +Coalesced [53] print_byte::b#4 ← print_byte::b#0 +Coalesced [54] print_char_cursor#49 ← print_char_cursor#46 +Coalesced [57] print_byte::b#5 ← print_byte::b#1 +Coalesced (already) [58] print_char_cursor#50 ← print_char_cursor#20 +Coalesced [65] print_char::ch#4 ← print_char::ch#0 +Coalesced (already) [66] print_char_cursor#52 ← print_char_cursor#26 +Coalesced [70] print_char::ch#5 ← print_char::ch#1 +Coalesced (already) [71] print_char_cursor#53 ← print_char_cursor#20 +Coalesced [84] memset::dst#6 ← memset::dst#1 Coalesced down to 9 phi equivalence classes Culled Empty Block (label) @26 Culled Empty Block (label) @43 Culled Empty Block (label) @50 Culled Empty Block (label) @52 Culled Empty Block (label) main::@29 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@3 -Culled Empty Block (label) main::@23 +Culled Empty Block (label) main::@15_1 Culled Empty Block (label) main::@31 +Culled Empty Block (label) main::@23 +Culled Empty Block (label) main::@33 +Culled Empty Block (label) main::@34 Culled Empty Block (label) main::@32 Culled Empty Block (label) print_word::@2 Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@4_1 Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@10 Renumbering block @51 to @1 Renumbering block memset::@4 to memset::@1 Renumbering block memset::@5 to memset::@2 @@ -838,56 +886,56 @@ FINAL CONTROL FLOW GRAPH main: scope:[main] from @1 [4] phi() [5] call memset - to:main::@1 -main::@1: scope:[main] from main main::@3 - [6] (byte*) main::sieve_i#2 ← phi( main/(const byte*) sieve#0+(byte) 2 main::@3/(byte*) main::sieve_i#1 ) - [6] (word) main::i#12 ← phi( main/(byte) 2 main::@3/(word) main::i#2 ) - [7] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 - to:main::@7 -main::@7: scope:[main] from main::@1 main::@9 - [8] (byte*) print_char_cursor#27 ← phi( main::@9/(byte*) print_char_cursor#35 main::@1/(byte*) 1024 ) - [8] (word) main::i#10 ← phi( main::@9/(word) main::i#3 main::@1/(byte) 2 ) - [9] if((word) main::i#10<(word) $4c7) goto main::@8 - to:main::@11 -main::@11: scope:[main] from main::@11 main::@7 - [10] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) - to:main::@11 -main::@8: scope:[main] from main::@7 - [11] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#10 - [12] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 - to:main::@10 -main::@10: scope:[main] from main::@8 - [13] (word) print_word::w#0 ← (word) main::i#10 - [14] call print_word - to:main::@12 -main::@12: scope:[main] from main::@10 - [15] phi() - [16] call print_char - to:main::@9 -main::@9: scope:[main] from main::@12 main::@8 - [17] (byte*) print_char_cursor#35 ← phi( main::@8/(byte*) print_char_cursor#27 main::@12/(byte*) print_char_cursor#20 ) - [18] (word) main::i#3 ← ++ (word) main::i#10 - to:main::@7 -main::@2: scope:[main] from main::@1 - [19] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@3 + to:main::@2 +main::@2: scope:[main] from main main::@1 + [6] (byte*) main::sieve_i#11 ← phi( main::@1/(byte*) main::sieve_i#1 main/(const byte*) sieve#0+(byte) 2 ) + [6] (word) main::i#17 ← phi( main::@1/(word) main::i#12 main/(byte) 2 ) + [7] if((byte) 0!=*((byte*) main::sieve_i#11)) goto main::@3 to:main::@6 main::@6: scope:[main] from main::@2 - [20] (word) main::j#0 ← (word) main::i#12 << (byte) 1 - [21] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 + [8] (word) main::j#0 ← (word) main::i#17 << (byte) 1 + [9] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 to:main::@4 main::@4: scope:[main] from main::@5 main::@6 - [22] (byte*) main::s#2 ← phi( main::@6/(byte*) main::s#0 main::@5/(byte*) main::s#1 ) - [22] (word) main::j#2 ← phi( main::@6/(word) main::j#0 main::@5/(word) main::j#1 ) - [23] if((word) main::j#2<(const word) COUNT#0) goto main::@5 + [10] (byte*) main::s#2 ← phi( main::@6/(byte*) main::s#0 main::@5/(byte*) main::s#1 ) + [10] (word) main::j#2 ← phi( main::@6/(word) main::j#0 main::@5/(word) main::j#1 ) + [11] if((word) main::j#2<(const word) COUNT#0) goto main::@5 to:main::@3 main::@3: scope:[main] from main::@2 main::@4 - [24] (word) main::i#2 ← ++ (word) main::i#12 - [25] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#2 + [12] (word) main::i#12 ← ++ (word) main::i#17 + [13] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#11 to:main::@1 +main::@1: scope:[main] from main::@3 + [14] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 + to:main::@8 +main::@8: scope:[main] from main::@1 main::@7 + [15] (byte*) print_char_cursor#46 ← phi( main::@7/(byte*) print_char_cursor#27 main::@1/(byte*) 1024 ) + [15] (word) main::i#22 ← phi( main::@7/(word) main::i#10 main::@1/(byte) 2 ) + [16] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#22 + [17] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 + to:main::@10 +main::@10: scope:[main] from main::@8 + [18] (word) print_word::w#0 ← (word) main::i#22 + [19] call print_word + to:main::@12 +main::@12: scope:[main] from main::@10 + [20] phi() + [21] call print_char + to:main::@9 +main::@9: scope:[main] from main::@12 main::@8 + [22] (byte*) print_char_cursor#27 ← phi( main::@8/(byte*) print_char_cursor#46 main::@12/(byte*) print_char_cursor#20 ) + [23] (word) main::i#10 ← ++ (word) main::i#22 + to:main::@7 +main::@7: scope:[main] from main::@9 + [24] if((word) main::i#10<(word) $4c7) goto main::@8 + to:main::@11 +main::@11: scope:[main] from main::@11 main::@7 + [25] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) + to:main::@11 main::@5: scope:[main] from main::@4 [26] *((byte*) main::s#2) ← (byte) 1 - [27] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#12 - [28] (word) main::j#1 ← (word) main::j#2 + (word) main::i#12 + [27] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 + [28] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 to:main::@4 print_char: scope:[print_char] from main::@12 print_byte print_byte::@1 [29] (byte*) print_char_cursor#19 ← phi( main::@12/(byte*) print_char_cursor#20 print_byte/(byte*) print_char_cursor#26 print_byte::@1/(byte*) print_char_cursor#20 ) @@ -910,7 +958,7 @@ print_word::@return: scope:[print_word] from print_word::@1 [37] return to:@return print_byte: scope:[print_byte] from print_word print_word::@1 - [38] (byte*) print_char_cursor#26 ← phi( print_word/(byte*) print_char_cursor#27 print_word::@1/(byte*) print_char_cursor#20 ) + [38] (byte*) print_char_cursor#26 ← phi( print_word/(byte*) print_char_cursor#46 print_word::@1/(byte*) print_char_cursor#20 ) [38] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [39] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [40] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) @@ -926,18 +974,18 @@ print_byte::@return: scope:[print_byte] from print_byte::@1 to:@return memset: scope:[memset] from main [46] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [47] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [48] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [49] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [47] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [48] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [50] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [49] return + [51] return to:@return -memset::@2: scope:[memset] from memset::@1 - [50] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [51] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 VARIABLE REGISTER WEIGHTS @@ -947,10 +995,10 @@ VARIABLE REGISTER WEIGHTS (void()) main() (byte*~) main::$18 22.0 (word) main::i -(word) main::i#10 6.111111111111112 -(word) main::i#12 24.6 -(word) main::i#2 11.0 -(word) main::i#3 22.0 +(word) main::i#10 16.5 +(word) main::i#12 11.0 +(word) main::i#17 26.11111111111111 +(word) main::i#22 5.5 (word) main::j (word) main::j#0 16.5 (word) main::j#1 202.0 @@ -960,13 +1008,13 @@ VARIABLE REGISTER WEIGHTS (byte*) main::s#1 101.0 (byte*) main::s#2 104.66666666666666 (byte*) main::sieve_i -(byte*) main::sieve_i#1 22.0 -(byte*) main::sieve_i#2 3.0 +(byte*) main::sieve_i#1 11.0 +(byte*) main::sieve_i#11 3.3000000000000003 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst -(byte*) memset::dst#1 22.0 -(byte*) memset::dst#2 14.666666666666666 +(byte*) memset::dst#1 16.5 +(byte*) memset::dst#4 16.5 (byte*) memset::end (word) memset::num (void*) memset::return @@ -987,8 +1035,8 @@ VARIABLE REGISTER WEIGHTS (byte*) print_char_cursor#19 9.5 (byte*) print_char_cursor#20 1.9999999999999998 (byte*) print_char_cursor#26 2.0 -(byte*) print_char_cursor#27 4.0 -(byte*) print_char_cursor#35 16.5 +(byte*) print_char_cursor#27 11.0 +(byte*) print_char_cursor#46 4.800000000000001 (byte[]) print_hextab (byte*) print_line_cursor (byte*) print_screen @@ -998,42 +1046,42 @@ VARIABLE REGISTER WEIGHTS (byte*) sieve Initial phi equivalence classes -[ main::i#12 main::i#2 ] -[ main::sieve_i#2 main::sieve_i#1 ] -[ main::i#10 main::i#3 ] +[ main::i#17 main::i#12 ] +[ main::sieve_i#11 main::sieve_i#1 ] [ main::j#2 main::j#0 main::j#1 ] [ main::s#2 main::s#0 main::s#1 ] +[ main::i#22 main::i#10 ] [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] -[ print_char_cursor#19 print_char_cursor#27 print_char_cursor#35 print_char_cursor#20 print_char_cursor#26 ] +[ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ] [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -[ memset::dst#2 memset::dst#1 ] +[ memset::dst#4 memset::dst#1 ] Added variable main::$18 to zero page equivalence class [ main::$18 ] Added variable print_word::w#0 to zero page equivalence class [ print_word::w#0 ] Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] Complete equivalence classes -[ main::i#12 main::i#2 ] -[ main::sieve_i#2 main::sieve_i#1 ] -[ main::i#10 main::i#3 ] +[ main::i#17 main::i#12 ] +[ main::sieve_i#11 main::sieve_i#1 ] [ main::j#2 main::j#0 main::j#1 ] [ main::s#2 main::s#0 main::s#1 ] +[ main::i#22 main::i#10 ] [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] -[ print_char_cursor#19 print_char_cursor#27 print_char_cursor#35 print_char_cursor#20 print_char_cursor#26 ] +[ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ] [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -[ memset::dst#2 memset::dst#1 ] +[ memset::dst#4 memset::dst#1 ] [ main::$18 ] [ print_word::w#0 ] [ print_byte::$0 ] [ print_byte::$2 ] -Allocated zp ZP_WORD:2 [ main::i#12 main::i#2 ] -Allocated zp ZP_WORD:4 [ main::sieve_i#2 main::sieve_i#1 ] -Allocated zp ZP_WORD:6 [ main::i#10 main::i#3 ] -Allocated zp ZP_WORD:8 [ main::j#2 main::j#0 main::j#1 ] -Allocated zp ZP_WORD:10 [ main::s#2 main::s#0 main::s#1 ] +Allocated zp ZP_WORD:2 [ main::i#17 main::i#12 ] +Allocated zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] +Allocated zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] +Allocated zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] +Allocated zp ZP_WORD:10 [ main::i#22 main::i#10 ] Allocated zp ZP_BYTE:12 [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] -Allocated zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#27 print_char_cursor#35 print_char_cursor#20 print_char_cursor#26 ] +Allocated zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ] Allocated zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Allocated zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] +Allocated zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ] Allocated zp ZP_WORD:18 [ main::$18 ] Allocated zp ZP_WORD:20 [ print_word::w#0 ] Allocated zp ZP_BYTE:22 [ print_byte::$0 ] @@ -1072,129 +1120,38 @@ bend_from_b1: bend: // main main: { - .label i = 2 .label sieve_i = 4 - .label j = 8 - .label s = $a - .label i_3 = 6 - .label i_10 = 6 + .label j = 6 + .label s = 8 + .label i = $a + .label i_12 = 2 .label _18 = $12 + .label i_17 = 2 // [5] call memset // [46] phi from main to memset [phi:main->memset] memset_from_main: jsr memset - // [6] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [6] phi (byte*) main::sieve_i#2 = (const byte*) sieve#0+(byte) 2 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [6] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [6] phi (byte*) main::sieve_i#11 = (const byte*) sieve#0+(byte) 2 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #sieve+2 sta sieve_i+1 - // [6] phi (word) main::i#12 = (byte) 2 [phi:main->main::@1#1] -- vwuz1=vbuc1 + // [6] phi (word) main::i#17 = (byte) 2 [phi:main->main::@2#1] -- vwuz1=vbuc1 lda #<2 - sta i + sta i_17 lda #>2 - sta i+1 - jmp b1 - // main::@1 - b1: - // [7] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 -- vwuz1_lt_vbuc1_then_la1 - lda i+1 - cmp #>SQRT_COUNT - bcc b2 - bne !+ - lda i - cmp #main::@7] - b7_from_b1: - // [8] phi (byte*) print_char_cursor#27 = (byte*) 1024 [phi:main::@1->main::@7#0] -- pbuz1=pbuc1 - lda #<$400 - sta print_char_cursor - lda #>$400 - sta print_char_cursor+1 - // [8] phi (word) main::i#10 = (byte) 2 [phi:main::@1->main::@7#1] -- vwuz1=vbuc1 - lda #<2 - sta i_10 - lda #>2 - sta i_10+1 - jmp b7 - // main::@7 - b7: - // [9] if((word) main::i#10<(word) $4c7) goto main::@8 -- vwuz1_lt_vwuc1_then_la1 - lda i_10+1 - cmp #>$4c7 - bcc b8 - bne !+ - lda i_10 - cmp #<$4c7 - bcc b8 - !: - jmp b11 - // main::@11 - b11: - // [10] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 - inc SCREEN+$3e7 - jmp b11 - // main::@8 - b8: - // [11] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#10 -- pbuz1=pbuc1_plus_vwuz2 - lda i_10 - clc - adc #sieve - sta _18+1 - // [12] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 -- vbuc1_neq__deref_pbuz1_then_la1 - ldy #0 - lda (_18),y - cmp #0 - bne b9_from_b8 - jmp b10 - // main::@10 - b10: - // [13] (word) print_word::w#0 ← (word) main::i#10 -- vwuz1=vwuz2 - lda i_10 - sta print_word.w - lda i_10+1 - sta print_word.w+1 - // [14] call print_word - jsr print_word - // [15] phi from main::@10 to main::@12 [phi:main::@10->main::@12] - b12_from_b10: - jmp b12 - // main::@12 - b12: - // [16] call print_char - // [29] phi from main::@12 to print_char [phi:main::@12->print_char] - print_char_from_b12: - // [29] phi (byte*) print_char_cursor#19 = (byte*) print_char_cursor#20 [phi:main::@12->print_char#0] -- register_copy - // [29] phi (byte) print_char::ch#3 = (byte) ' ' [phi:main::@12->print_char#1] -- vbuz1=vbuc1 - lda #' ' - sta print_char.ch - jsr print_char - // [17] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] - b9_from_b12: - b9_from_b8: - // [17] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#20 [phi:main::@12/main::@8->main::@9#0] -- register_copy - jmp b9 - // main::@9 - b9: - // [18] (word) main::i#3 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 - inc i_3 - bne !+ - inc i_3+1 - !: - // [8] phi from main::@9 to main::@7 [phi:main::@9->main::@7] - b7_from_b9: - // [8] phi (byte*) print_char_cursor#27 = (byte*) print_char_cursor#35 [phi:main::@9->main::@7#0] -- register_copy - // [8] phi (word) main::i#10 = (word) main::i#3 [phi:main::@9->main::@7#1] -- register_copy - jmp b7 + sta i_17+1 + jmp b2 + // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [6] phi (byte*) main::sieve_i#11 = (byte*) main::sieve_i#1 [phi:main::@1->main::@2#0] -- register_copy + // [6] phi (word) main::i#17 = (word) main::i#12 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 // main::@2 b2: - // [19] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@3 -- vbuc1_neq__deref_pbuz1_then_la1 + // [7] if((byte) 0!=*((byte*) main::sieve_i#11)) goto main::@3 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (sieve_i),y cmp #0 @@ -1202,14 +1159,14 @@ main: { jmp b6 // main::@6 b6: - // [20] (word) main::j#0 ← (word) main::i#12 << (byte) 1 -- vwuz1=vwuz2_rol_1 - lda i + // [8] (word) main::j#0 ← (word) main::i#17 << (byte) 1 -- vwuz1=vwuz2_rol_1 + lda i_17 asl sta j - lda i+1 + lda i_17+1 rol sta j+1 - // [21] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 -- pbuz1=pbuc1_plus_vwuz2 + // [9] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 -- pbuz1=pbuc1_plus_vwuz2 lda j clc adc #sieve sta s+1 - // [22] phi from main::@5 main::@6 to main::@4 [phi:main::@5/main::@6->main::@4] + // [10] phi from main::@5 main::@6 to main::@4 [phi:main::@5/main::@6->main::@4] b4_from_b5: b4_from_b6: - // [22] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@5/main::@6->main::@4#0] -- register_copy - // [22] phi (word) main::j#2 = (word) main::j#1 [phi:main::@5/main::@6->main::@4#1] -- register_copy + // [10] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@5/main::@6->main::@4#0] -- register_copy + // [10] phi (word) main::j#2 = (word) main::j#1 [phi:main::@5/main::@6->main::@4#1] -- register_copy jmp b4 // main::@4 b4: - // [23] if((word) main::j#2<(const word) COUNT#0) goto main::@5 -- vwuz1_lt_vwuc1_then_la1 + // [11] if((word) main::j#2<(const word) COUNT#0) goto main::@5 -- vwuz1_lt_vwuc1_then_la1 lda j+1 cmp #>COUNT bcc b5 @@ -1237,42 +1194,135 @@ main: { jmp b3 // main::@3 b3: - // [24] (word) main::i#2 ← ++ (word) main::i#12 -- vwuz1=_inc_vwuz1 - inc i + // [12] (word) main::i#12 ← ++ (word) main::i#17 -- vwuz1=_inc_vwuz1 + inc i_12 bne !+ - inc i+1 + inc i_12+1 !: - // [25] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#2 -- pbuz1=_inc_pbuz1 + // [13] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#11 -- pbuz1=_inc_pbuz1 inc sieve_i bne !+ inc sieve_i+1 !: - // [6] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - b1_from_b3: - // [6] phi (byte*) main::sieve_i#2 = (byte*) main::sieve_i#1 [phi:main::@3->main::@1#0] -- register_copy - // [6] phi (word) main::i#12 = (word) main::i#2 [phi:main::@3->main::@1#1] -- register_copy jmp b1 + // main::@1 + b1: + // [14] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 -- vwuz1_lt_vbuc1_then_la1 + lda i_12+1 + cmp #>SQRT_COUNT + bcc b2_from_b1 + bne !+ + lda i_12 + cmp #main::@8] + b8_from_b1: + // [15] phi (byte*) print_char_cursor#46 = (byte*) 1024 [phi:main::@1->main::@8#0] -- pbuz1=pbuc1 + lda #<$400 + sta print_char_cursor + lda #>$400 + sta print_char_cursor+1 + // [15] phi (word) main::i#22 = (byte) 2 [phi:main::@1->main::@8#1] -- vwuz1=vbuc1 + lda #<2 + sta i + lda #>2 + sta i+1 + jmp b8 + // [15] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + b8_from_b7: + // [15] phi (byte*) print_char_cursor#46 = (byte*) print_char_cursor#27 [phi:main::@7->main::@8#0] -- register_copy + // [15] phi (word) main::i#22 = (word) main::i#10 [phi:main::@7->main::@8#1] -- register_copy + jmp b8 + // main::@8 + b8: + // [16] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2 + lda i + clc + adc #sieve + sta _18+1 + // [17] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 -- vbuc1_neq__deref_pbuz1_then_la1 + ldy #0 + lda (_18),y + cmp #0 + bne b9_from_b8 + jmp b10 + // main::@10 + b10: + // [18] (word) print_word::w#0 ← (word) main::i#22 -- vwuz1=vwuz2 + lda i + sta print_word.w + lda i+1 + sta print_word.w+1 + // [19] call print_word + jsr print_word + // [20] phi from main::@10 to main::@12 [phi:main::@10->main::@12] + b12_from_b10: + jmp b12 + // main::@12 + b12: + // [21] call print_char + // [29] phi from main::@12 to print_char [phi:main::@12->print_char] + print_char_from_b12: + // [29] phi (byte*) print_char_cursor#19 = (byte*) print_char_cursor#20 [phi:main::@12->print_char#0] -- register_copy + // [29] phi (byte) print_char::ch#3 = (byte) ' ' [phi:main::@12->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + // [22] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] + b9_from_b12: + b9_from_b8: + // [22] phi (byte*) print_char_cursor#27 = (byte*) print_char_cursor#20 [phi:main::@12/main::@8->main::@9#0] -- register_copy + jmp b9 + // main::@9 + b9: + // [23] (word) main::i#10 ← ++ (word) main::i#22 -- vwuz1=_inc_vwuz1 + inc i + bne !+ + inc i+1 + !: + jmp b7 + // main::@7 + b7: + // [24] if((word) main::i#10<(word) $4c7) goto main::@8 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>$4c7 + bcc b8_from_b7 + bne !+ + lda i + cmp #<$4c7 + bcc b8_from_b7 + !: + jmp b11 + // main::@11 + b11: + // [25] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + inc SCREEN+$3e7 + jmp b11 // main::@5 b5: // [26] *((byte*) main::s#2) ← (byte) 1 -- _deref_pbuz1=vbuc1 lda #1 ldy #0 sta (s),y - // [27] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#12 -- pbuz1=pbuz1_plus_vwuz2 + // [27] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 -- pbuz1=pbuz1_plus_vwuz2 lda s clc - adc i + adc i_17 sta s lda s+1 - adc i+1 + adc i_17+1 sta s+1 - // [28] (word) main::j#1 ← (word) main::j#2 + (word) main::i#12 -- vwuz1=vwuz1_plus_vwuz2 + // [28] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 -- vwuz1=vwuz1_plus_vwuz2 lda j clc - adc i + adc i_17 sta j lda j+1 - adc i+1 + adc i_17+1 sta j+1 jmp b4_from_b5 } @@ -1307,7 +1357,7 @@ print_word: { // [34] call print_byte // [38] phi from print_word to print_byte [phi:print_word->print_byte] print_byte_from_print_word: - // [38] phi (byte*) print_char_cursor#26 = (byte*) print_char_cursor#27 [phi:print_word->print_byte#0] -- register_copy + // [38] phi (byte*) print_char_cursor#26 = (byte*) print_char_cursor#46 [phi:print_word->print_byte#0] -- register_copy // [38] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy jsr print_byte jmp b1 @@ -1382,126 +1432,127 @@ memset: { .label str = sieve .label end = str+COUNT .label dst = $10 - // [47] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [47] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [47] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [47] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [48] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [47] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [50] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [48] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [51] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [49] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [47] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [47] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [50] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp # (word) print_word::w#0 [ print_char_cursor#27 print_word::w#0 print_byte::b#0 ] ( main:2::print_word:14 [ main::i#10 print_char_cursor#27 print_word::w#0 print_byte::b#0 ] ) always clobbers reg byte a -Statement [35] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#20 print_byte::b#1 ] ( main:2::print_word:14 [ main::i#10 print_char_cursor#20 print_byte::b#1 ] ) always clobbers reg byte a -Statement [39] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#26 print_byte::b#2 print_byte::$0 ] ( main:2::print_word:14::print_byte:34 [ main::i#10 print_word::w#0 print_char_cursor#26 print_byte::b#2 print_byte::$0 ] main:2::print_word:14::print_byte:36 [ main::i#10 print_char_cursor#26 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a +Statement [33] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_char_cursor#46 print_word::w#0 print_byte::b#0 ] ( main:2::print_word:19 [ main::i#22 print_char_cursor#46 print_word::w#0 print_byte::b#0 ] ) always clobbers reg byte a +Statement [35] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#20 print_byte::b#1 ] ( main:2::print_word:19 [ main::i#22 print_char_cursor#20 print_byte::b#1 ] ) always clobbers reg byte a +Statement [39] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#26 print_byte::b#2 print_byte::$0 ] ( main:2::print_word:19::print_byte:34 [ main::i#22 print_word::w#0 print_char_cursor#26 print_byte::b#2 print_byte::$0 ] main:2::print_word:19::print_byte:36 [ main::i#22 print_char_cursor#26 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Statement [42] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#20 print_byte::$2 ] ( main:2::print_word:14::print_byte:34 [ main::i#10 print_word::w#0 print_char_cursor#20 print_byte::$2 ] main:2::print_word:14::print_byte:36 [ main::i#10 print_char_cursor#20 print_byte::$2 ] ) always clobbers reg byte a -Statement [48] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::memset:5 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [50] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::memset:5 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [7] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 [ main::i#12 main::sieve_i#2 ] ( main:2 [ main::i#12 main::sieve_i#2 ] ) always clobbers reg byte a -Statement [9] if((word) main::i#10<(word) $4c7) goto main::@8 [ main::i#10 print_char_cursor#27 ] ( main:2 [ main::i#10 print_char_cursor#27 ] ) always clobbers reg byte a -Statement [11] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#10 [ main::i#10 print_char_cursor#27 main::$18 ] ( main:2 [ main::i#10 print_char_cursor#27 main::$18 ] ) always clobbers reg byte a -Statement [12] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 [ main::i#10 print_char_cursor#27 ] ( main:2 [ main::i#10 print_char_cursor#27 ] ) always clobbers reg byte a reg byte y -Statement [13] (word) print_word::w#0 ← (word) main::i#10 [ main::i#10 print_char_cursor#27 print_word::w#0 ] ( main:2 [ main::i#10 print_char_cursor#27 print_word::w#0 ] ) always clobbers reg byte a -Statement [19] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@3 [ main::i#12 main::sieve_i#2 ] ( main:2 [ main::i#12 main::sieve_i#2 ] ) always clobbers reg byte a reg byte y -Statement [20] (word) main::j#0 ← (word) main::i#12 << (byte) 1 [ main::i#12 main::sieve_i#2 main::j#0 ] ( main:2 [ main::i#12 main::sieve_i#2 main::j#0 ] ) always clobbers reg byte a -Statement [21] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 [ main::i#12 main::sieve_i#2 main::j#0 main::s#0 ] ( main:2 [ main::i#12 main::sieve_i#2 main::j#0 main::s#0 ] ) always clobbers reg byte a -Statement [23] if((word) main::j#2<(const word) COUNT#0) goto main::@5 [ main::i#12 main::sieve_i#2 main::j#2 main::s#2 ] ( main:2 [ main::i#12 main::sieve_i#2 main::j#2 main::s#2 ] ) always clobbers reg byte a -Statement [26] *((byte*) main::s#2) ← (byte) 1 [ main::i#12 main::sieve_i#2 main::j#2 main::s#2 ] ( main:2 [ main::i#12 main::sieve_i#2 main::j#2 main::s#2 ] ) always clobbers reg byte a reg byte y -Statement [27] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#12 [ main::i#12 main::sieve_i#2 main::j#2 main::s#1 ] ( main:2 [ main::i#12 main::sieve_i#2 main::j#2 main::s#1 ] ) always clobbers reg byte a -Statement [28] (word) main::j#1 ← (word) main::j#2 + (word) main::i#12 [ main::i#12 main::sieve_i#2 main::j#1 main::s#1 ] ( main:2 [ main::i#12 main::sieve_i#2 main::j#1 main::s#1 ] ) always clobbers reg byte a -Statement [30] *((byte*) print_char_cursor#19) ← (byte) print_char::ch#3 [ print_char_cursor#19 ] ( main:2::print_char:16 [ main::i#10 print_char_cursor#19 ] main:2::print_word:14::print_byte:34::print_char:41 [ main::i#10 print_word::w#0 print_byte::b#2 print_char_cursor#19 ] main:2::print_word:14::print_byte:36::print_char:41 [ main::i#10 print_byte::b#2 print_char_cursor#19 ] main:2::print_word:14::print_byte:34::print_char:44 [ main::i#10 print_word::w#0 print_char_cursor#19 ] main:2::print_word:14::print_byte:36::print_char:44 [ main::i#10 print_char_cursor#19 ] ) always clobbers reg byte y -Statement [33] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_char_cursor#27 print_word::w#0 print_byte::b#0 ] ( main:2::print_word:14 [ main::i#10 print_char_cursor#27 print_word::w#0 print_byte::b#0 ] ) always clobbers reg byte a -Statement [35] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#20 print_byte::b#1 ] ( main:2::print_word:14 [ main::i#10 print_char_cursor#20 print_byte::b#1 ] ) always clobbers reg byte a -Statement [39] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#26 print_byte::b#2 print_byte::$0 ] ( main:2::print_word:14::print_byte:34 [ main::i#10 print_word::w#0 print_char_cursor#26 print_byte::b#2 print_byte::$0 ] main:2::print_word:14::print_byte:36 [ main::i#10 print_char_cursor#26 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a -Statement [42] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#20 print_byte::$2 ] ( main:2::print_word:14::print_byte:34 [ main::i#10 print_word::w#0 print_char_cursor#20 print_byte::$2 ] main:2::print_word:14::print_byte:36 [ main::i#10 print_char_cursor#20 print_byte::$2 ] ) always clobbers reg byte a -Statement [48] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::memset:5 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [50] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::memset:5 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_WORD:2 [ main::i#12 main::i#2 ] : zp ZP_WORD:2 , -Potential registers zp ZP_WORD:4 [ main::sieve_i#2 main::sieve_i#1 ] : zp ZP_WORD:4 , -Potential registers zp ZP_WORD:6 [ main::i#10 main::i#3 ] : zp ZP_WORD:6 , -Potential registers zp ZP_WORD:8 [ main::j#2 main::j#0 main::j#1 ] : zp ZP_WORD:8 , -Potential registers zp ZP_WORD:10 [ main::s#2 main::s#0 main::s#1 ] : zp ZP_WORD:10 , +Statement [42] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#20 print_byte::$2 ] ( main:2::print_word:19::print_byte:34 [ main::i#22 print_word::w#0 print_char_cursor#20 print_byte::$2 ] main:2::print_word:19::print_byte:36 [ main::i#22 print_char_cursor#20 print_byte::$2 ] ) always clobbers reg byte a +Statement [48] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::memset:5 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [50] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::memset:5 [ memset::dst#1 ] ) always clobbers reg byte a +Statement [7] if((byte) 0!=*((byte*) main::sieve_i#11)) goto main::@3 [ main::i#17 main::sieve_i#11 ] ( main:2 [ main::i#17 main::sieve_i#11 ] ) always clobbers reg byte a reg byte y +Statement [8] (word) main::j#0 ← (word) main::i#17 << (byte) 1 [ main::i#17 main::sieve_i#11 main::j#0 ] ( main:2 [ main::i#17 main::sieve_i#11 main::j#0 ] ) always clobbers reg byte a +Statement [9] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 [ main::i#17 main::sieve_i#11 main::j#0 main::s#0 ] ( main:2 [ main::i#17 main::sieve_i#11 main::j#0 main::s#0 ] ) always clobbers reg byte a +Statement [11] if((word) main::j#2<(const word) COUNT#0) goto main::@5 [ main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ( main:2 [ main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ) always clobbers reg byte a +Statement [14] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 [ main::i#12 main::sieve_i#1 ] ( main:2 [ main::i#12 main::sieve_i#1 ] ) always clobbers reg byte a +Statement [16] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#22 [ main::i#22 print_char_cursor#46 main::$18 ] ( main:2 [ main::i#22 print_char_cursor#46 main::$18 ] ) always clobbers reg byte a +Statement [17] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 [ main::i#22 print_char_cursor#46 ] ( main:2 [ main::i#22 print_char_cursor#46 ] ) always clobbers reg byte a reg byte y +Statement [18] (word) print_word::w#0 ← (word) main::i#22 [ main::i#22 print_char_cursor#46 print_word::w#0 ] ( main:2 [ main::i#22 print_char_cursor#46 print_word::w#0 ] ) always clobbers reg byte a +Statement [24] if((word) main::i#10<(word) $4c7) goto main::@8 [ main::i#10 print_char_cursor#27 ] ( main:2 [ main::i#10 print_char_cursor#27 ] ) always clobbers reg byte a +Statement [26] *((byte*) main::s#2) ← (byte) 1 [ main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ( main:2 [ main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ) always clobbers reg byte a reg byte y +Statement [27] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 [ main::i#17 main::sieve_i#11 main::j#2 main::s#1 ] ( main:2 [ main::i#17 main::sieve_i#11 main::j#2 main::s#1 ] ) always clobbers reg byte a +Statement [28] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 [ main::i#17 main::sieve_i#11 main::j#1 main::s#1 ] ( main:2 [ main::i#17 main::sieve_i#11 main::j#1 main::s#1 ] ) always clobbers reg byte a +Statement [30] *((byte*) print_char_cursor#19) ← (byte) print_char::ch#3 [ print_char_cursor#19 ] ( main:2::print_char:21 [ main::i#22 print_char_cursor#19 ] main:2::print_word:19::print_byte:34::print_char:41 [ main::i#22 print_word::w#0 print_byte::b#2 print_char_cursor#19 ] main:2::print_word:19::print_byte:36::print_char:41 [ main::i#22 print_byte::b#2 print_char_cursor#19 ] main:2::print_word:19::print_byte:34::print_char:44 [ main::i#22 print_word::w#0 print_char_cursor#19 ] main:2::print_word:19::print_byte:36::print_char:44 [ main::i#22 print_char_cursor#19 ] ) always clobbers reg byte y +Statement [33] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_char_cursor#46 print_word::w#0 print_byte::b#0 ] ( main:2::print_word:19 [ main::i#22 print_char_cursor#46 print_word::w#0 print_byte::b#0 ] ) always clobbers reg byte a +Statement [35] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#20 print_byte::b#1 ] ( main:2::print_word:19 [ main::i#22 print_char_cursor#20 print_byte::b#1 ] ) always clobbers reg byte a +Statement [39] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#26 print_byte::b#2 print_byte::$0 ] ( main:2::print_word:19::print_byte:34 [ main::i#22 print_word::w#0 print_char_cursor#26 print_byte::b#2 print_byte::$0 ] main:2::print_word:19::print_byte:36 [ main::i#22 print_char_cursor#26 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a +Statement [42] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#20 print_byte::$2 ] ( main:2::print_word:19::print_byte:34 [ main::i#22 print_word::w#0 print_char_cursor#20 print_byte::$2 ] main:2::print_word:19::print_byte:36 [ main::i#22 print_char_cursor#20 print_byte::$2 ] ) always clobbers reg byte a +Statement [48] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::memset:5 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [50] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::memset:5 [ memset::dst#1 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ main::i#17 main::i#12 ] : zp ZP_WORD:2 , +Potential registers zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] : zp ZP_WORD:4 , +Potential registers zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] : zp ZP_WORD:6 , +Potential registers zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] : zp ZP_WORD:8 , +Potential registers zp ZP_WORD:10 [ main::i#22 main::i#10 ] : zp ZP_WORD:10 , Potential registers zp ZP_BYTE:12 [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#27 print_char_cursor#35 print_char_cursor#20 print_char_cursor#26 ] : zp ZP_WORD:13 , +Potential registers zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ] : zp ZP_WORD:13 , Potential registers zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:15 , reg byte x , -Potential registers zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:16 , +Potential registers zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:16 , Potential registers zp ZP_WORD:18 [ main::$18 ] : zp ZP_WORD:18 , Potential registers zp ZP_WORD:20 [ print_word::w#0 ] : zp ZP_WORD:20 , Potential registers zp ZP_BYTE:22 [ print_byte::$0 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:23 [ print_byte::$2 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 297: zp ZP_WORD:8 [ main::j#2 main::j#0 main::j#1 ] 227.67: zp ZP_WORD:10 [ main::s#2 main::s#0 main::s#1 ] 35.6: zp ZP_WORD:2 [ main::i#12 main::i#2 ] 28.11: zp ZP_WORD:6 [ main::i#10 main::i#3 ] 25: zp ZP_WORD:4 [ main::sieve_i#2 main::sieve_i#1 ] 22: zp ZP_WORD:18 [ main::$18 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] -Uplift Scope [] 34: zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#27 print_char_cursor#35 print_char_cursor#20 print_char_cursor#26 ] +Uplift Scope [main] 297: zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] 227.67: zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] 37.11: zp ZP_WORD:2 [ main::i#17 main::i#12 ] 22: zp ZP_WORD:10 [ main::i#22 main::i#10 ] 22: zp ZP_WORD:18 [ main::$18 ] 14.3: zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] +Uplift Scope [memset] 33: zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ] +Uplift Scope [] 29.3: zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ] Uplift Scope [print_byte] 10: zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:22 [ print_byte::$0 ] 4: zp ZP_BYTE:23 [ print_byte::$2 ] Uplift Scope [print_char] 14: zp ZP_BYTE:12 [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] Uplift Scope [print_word] 5: zp ZP_WORD:20 [ print_word::w#0 ] Uplift Scope [RADIX] -Uplifting [main] best 10809 combination zp ZP_WORD:8 [ main::j#2 main::j#0 main::j#1 ] zp ZP_WORD:10 [ main::s#2 main::s#0 main::s#1 ] zp ZP_WORD:2 [ main::i#12 main::i#2 ] zp ZP_WORD:6 [ main::i#10 main::i#3 ] zp ZP_WORD:4 [ main::sieve_i#2 main::sieve_i#1 ] zp ZP_WORD:18 [ main::$18 ] -Uplifting [memset] best 10809 combination zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] -Uplifting [] best 10809 combination zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#27 print_char_cursor#35 print_char_cursor#20 print_char_cursor#26 ] -Uplifting [print_byte] best 10795 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -Uplifting [print_char] best 10783 combination reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] -Uplifting [print_word] best 10783 combination zp ZP_WORD:20 [ print_word::w#0 ] -Uplifting [RADIX] best 10783 combination -Coalescing zero page register [ zp ZP_WORD:6 [ main::i#10 main::i#3 ] ] with [ zp ZP_WORD:20 [ print_word::w#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#27 print_char_cursor#35 print_char_cursor#20 print_char_cursor#26 ] ] with [ zp ZP_WORD:2 [ main::i#12 main::i#2 ] ] -Coalescing zero page register [ zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:4 [ main::sieve_i#2 main::sieve_i#1 ] ] -Allocated (was zp ZP_WORD:6) zp ZP_WORD:2 [ main::i#10 main::i#3 print_word::w#0 ] -Allocated (was zp ZP_WORD:8) zp ZP_WORD:4 [ main::j#2 main::j#0 main::j#1 ] -Allocated (was zp ZP_WORD:10) zp ZP_WORD:6 [ main::s#2 main::s#0 main::s#1 ] -Allocated (was zp ZP_WORD:13) zp ZP_WORD:8 [ print_char_cursor#19 print_char_cursor#27 print_char_cursor#35 print_char_cursor#20 print_char_cursor#26 main::i#12 main::i#2 ] -Allocated (was zp ZP_WORD:16) zp ZP_WORD:10 [ memset::dst#2 memset::dst#1 main::sieve_i#2 main::sieve_i#1 ] +Uplifting [main] best 10899 combination zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] zp ZP_WORD:2 [ main::i#17 main::i#12 ] zp ZP_WORD:10 [ main::i#22 main::i#10 ] zp ZP_WORD:18 [ main::$18 ] zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] +Uplifting [memset] best 10899 combination zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ] +Uplifting [] best 10899 combination zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ] +Uplifting [print_byte] best 10885 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [print_char] best 10873 combination reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] +Uplifting [print_word] best 10873 combination zp ZP_WORD:20 [ print_word::w#0 ] +Uplifting [RADIX] best 10873 combination +Coalescing zero page register [ zp ZP_WORD:10 [ main::i#22 main::i#10 ] ] with [ zp ZP_WORD:20 [ print_word::w#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ] ] with [ zp ZP_WORD:2 [ main::i#17 main::i#12 ] ] +Coalescing zero page register [ zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] ] +Allocated (was zp ZP_WORD:6) zp ZP_WORD:2 [ main::j#2 main::j#0 main::j#1 ] +Allocated (was zp ZP_WORD:8) zp ZP_WORD:4 [ main::s#2 main::s#0 main::s#1 ] +Allocated (was zp ZP_WORD:10) zp ZP_WORD:6 [ main::i#22 main::i#10 print_word::w#0 ] +Allocated (was zp ZP_WORD:13) zp ZP_WORD:8 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 main::i#17 main::i#12 ] +Allocated (was zp ZP_WORD:16) zp ZP_WORD:10 [ memset::dst#4 memset::dst#1 main::sieve_i#11 main::sieve_i#1 ] Allocated (was zp ZP_WORD:18) zp ZP_WORD:12 [ main::$18 ] ASSEMBLER BEFORE OPTIMIZATION @@ -1536,124 +1587,38 @@ bend_from_b1: bend: // main main: { - .label i = 8 .label sieve_i = $a - .label j = 4 - .label s = 6 - .label i_3 = 2 - .label i_10 = 2 + .label j = 2 + .label s = 4 + .label i = 6 + .label i_12 = 8 .label _18 = $c + .label i_17 = 8 // [5] call memset // [46] phi from main to memset [phi:main->memset] memset_from_main: jsr memset - // [6] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [6] phi (byte*) main::sieve_i#2 = (const byte*) sieve#0+(byte) 2 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [6] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [6] phi (byte*) main::sieve_i#11 = (const byte*) sieve#0+(byte) 2 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #sieve+2 sta sieve_i+1 - // [6] phi (word) main::i#12 = (byte) 2 [phi:main->main::@1#1] -- vwuz1=vbuc1 + // [6] phi (word) main::i#17 = (byte) 2 [phi:main->main::@2#1] -- vwuz1=vbuc1 lda #<2 - sta i + sta i_17 lda #>2 - sta i+1 - jmp b1 - // main::@1 - b1: - // [7] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 -- vwuz1_lt_vbuc1_then_la1 - lda i+1 - cmp #>SQRT_COUNT - bcc b2 - bne !+ - lda i - cmp #main::@7] - b7_from_b1: - // [8] phi (byte*) print_char_cursor#27 = (byte*) 1024 [phi:main::@1->main::@7#0] -- pbuz1=pbuc1 - lda #<$400 - sta print_char_cursor - lda #>$400 - sta print_char_cursor+1 - // [8] phi (word) main::i#10 = (byte) 2 [phi:main::@1->main::@7#1] -- vwuz1=vbuc1 - lda #<2 - sta i_10 - lda #>2 - sta i_10+1 - jmp b7 - // main::@7 - b7: - // [9] if((word) main::i#10<(word) $4c7) goto main::@8 -- vwuz1_lt_vwuc1_then_la1 - lda i_10+1 - cmp #>$4c7 - bcc b8 - bne !+ - lda i_10 - cmp #<$4c7 - bcc b8 - !: - jmp b11 - // main::@11 - b11: - // [10] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 - inc SCREEN+$3e7 - jmp b11 - // main::@8 - b8: - // [11] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#10 -- pbuz1=pbuc1_plus_vwuz2 - lda i_10 - clc - adc #sieve - sta _18+1 - // [12] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 -- vbuc1_neq__deref_pbuz1_then_la1 - ldy #0 - lda (_18),y - cmp #0 - bne b9_from_b8 - jmp b10 - // main::@10 - b10: - // [13] (word) print_word::w#0 ← (word) main::i#10 - // [14] call print_word - jsr print_word - // [15] phi from main::@10 to main::@12 [phi:main::@10->main::@12] - b12_from_b10: - jmp b12 - // main::@12 - b12: - // [16] call print_char - // [29] phi from main::@12 to print_char [phi:main::@12->print_char] - print_char_from_b12: - // [29] phi (byte*) print_char_cursor#19 = (byte*) print_char_cursor#20 [phi:main::@12->print_char#0] -- register_copy - // [29] phi (byte) print_char::ch#3 = (byte) ' ' [phi:main::@12->print_char#1] -- vbuaa=vbuc1 - lda #' ' - jsr print_char - // [17] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] - b9_from_b12: - b9_from_b8: - // [17] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#20 [phi:main::@12/main::@8->main::@9#0] -- register_copy - jmp b9 - // main::@9 - b9: - // [18] (word) main::i#3 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 - inc i_3 - bne !+ - inc i_3+1 - !: - // [8] phi from main::@9 to main::@7 [phi:main::@9->main::@7] - b7_from_b9: - // [8] phi (byte*) print_char_cursor#27 = (byte*) print_char_cursor#35 [phi:main::@9->main::@7#0] -- register_copy - // [8] phi (word) main::i#10 = (word) main::i#3 [phi:main::@9->main::@7#1] -- register_copy - jmp b7 + sta i_17+1 + jmp b2 + // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [6] phi (byte*) main::sieve_i#11 = (byte*) main::sieve_i#1 [phi:main::@1->main::@2#0] -- register_copy + // [6] phi (word) main::i#17 = (word) main::i#12 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 // main::@2 b2: - // [19] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@3 -- vbuc1_neq__deref_pbuz1_then_la1 + // [7] if((byte) 0!=*((byte*) main::sieve_i#11)) goto main::@3 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (sieve_i),y cmp #0 @@ -1661,14 +1626,14 @@ main: { jmp b6 // main::@6 b6: - // [20] (word) main::j#0 ← (word) main::i#12 << (byte) 1 -- vwuz1=vwuz2_rol_1 - lda i + // [8] (word) main::j#0 ← (word) main::i#17 << (byte) 1 -- vwuz1=vwuz2_rol_1 + lda i_17 asl sta j - lda i+1 + lda i_17+1 rol sta j+1 - // [21] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 -- pbuz1=pbuc1_plus_vwuz2 + // [9] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 -- pbuz1=pbuc1_plus_vwuz2 lda j clc adc #sieve sta s+1 - // [22] phi from main::@5 main::@6 to main::@4 [phi:main::@5/main::@6->main::@4] + // [10] phi from main::@5 main::@6 to main::@4 [phi:main::@5/main::@6->main::@4] b4_from_b5: b4_from_b6: - // [22] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@5/main::@6->main::@4#0] -- register_copy - // [22] phi (word) main::j#2 = (word) main::j#1 [phi:main::@5/main::@6->main::@4#1] -- register_copy + // [10] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@5/main::@6->main::@4#0] -- register_copy + // [10] phi (word) main::j#2 = (word) main::j#1 [phi:main::@5/main::@6->main::@4#1] -- register_copy jmp b4 // main::@4 b4: - // [23] if((word) main::j#2<(const word) COUNT#0) goto main::@5 -- vwuz1_lt_vwuc1_then_la1 + // [11] if((word) main::j#2<(const word) COUNT#0) goto main::@5 -- vwuz1_lt_vwuc1_then_la1 lda j+1 cmp #>COUNT bcc b5 @@ -1696,42 +1661,130 @@ main: { jmp b3 // main::@3 b3: - // [24] (word) main::i#2 ← ++ (word) main::i#12 -- vwuz1=_inc_vwuz1 - inc i + // [12] (word) main::i#12 ← ++ (word) main::i#17 -- vwuz1=_inc_vwuz1 + inc i_12 bne !+ - inc i+1 + inc i_12+1 !: - // [25] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#2 -- pbuz1=_inc_pbuz1 + // [13] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#11 -- pbuz1=_inc_pbuz1 inc sieve_i bne !+ inc sieve_i+1 !: - // [6] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - b1_from_b3: - // [6] phi (byte*) main::sieve_i#2 = (byte*) main::sieve_i#1 [phi:main::@3->main::@1#0] -- register_copy - // [6] phi (word) main::i#12 = (word) main::i#2 [phi:main::@3->main::@1#1] -- register_copy jmp b1 + // main::@1 + b1: + // [14] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 -- vwuz1_lt_vbuc1_then_la1 + lda i_12+1 + cmp #>SQRT_COUNT + bcc b2_from_b1 + bne !+ + lda i_12 + cmp #main::@8] + b8_from_b1: + // [15] phi (byte*) print_char_cursor#46 = (byte*) 1024 [phi:main::@1->main::@8#0] -- pbuz1=pbuc1 + lda #<$400 + sta print_char_cursor + lda #>$400 + sta print_char_cursor+1 + // [15] phi (word) main::i#22 = (byte) 2 [phi:main::@1->main::@8#1] -- vwuz1=vbuc1 + lda #<2 + sta i + lda #>2 + sta i+1 + jmp b8 + // [15] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + b8_from_b7: + // [15] phi (byte*) print_char_cursor#46 = (byte*) print_char_cursor#27 [phi:main::@7->main::@8#0] -- register_copy + // [15] phi (word) main::i#22 = (word) main::i#10 [phi:main::@7->main::@8#1] -- register_copy + jmp b8 + // main::@8 + b8: + // [16] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2 + lda i + clc + adc #sieve + sta _18+1 + // [17] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 -- vbuc1_neq__deref_pbuz1_then_la1 + ldy #0 + lda (_18),y + cmp #0 + bne b9_from_b8 + jmp b10 + // main::@10 + b10: + // [18] (word) print_word::w#0 ← (word) main::i#22 + // [19] call print_word + jsr print_word + // [20] phi from main::@10 to main::@12 [phi:main::@10->main::@12] + b12_from_b10: + jmp b12 + // main::@12 + b12: + // [21] call print_char + // [29] phi from main::@12 to print_char [phi:main::@12->print_char] + print_char_from_b12: + // [29] phi (byte*) print_char_cursor#19 = (byte*) print_char_cursor#20 [phi:main::@12->print_char#0] -- register_copy + // [29] phi (byte) print_char::ch#3 = (byte) ' ' [phi:main::@12->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + // [22] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] + b9_from_b12: + b9_from_b8: + // [22] phi (byte*) print_char_cursor#27 = (byte*) print_char_cursor#20 [phi:main::@12/main::@8->main::@9#0] -- register_copy + jmp b9 + // main::@9 + b9: + // [23] (word) main::i#10 ← ++ (word) main::i#22 -- vwuz1=_inc_vwuz1 + inc i + bne !+ + inc i+1 + !: + jmp b7 + // main::@7 + b7: + // [24] if((word) main::i#10<(word) $4c7) goto main::@8 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>$4c7 + bcc b8_from_b7 + bne !+ + lda i + cmp #<$4c7 + bcc b8_from_b7 + !: + jmp b11 + // main::@11 + b11: + // [25] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + inc SCREEN+$3e7 + jmp b11 // main::@5 b5: // [26] *((byte*) main::s#2) ← (byte) 1 -- _deref_pbuz1=vbuc1 lda #1 ldy #0 sta (s),y - // [27] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#12 -- pbuz1=pbuz1_plus_vwuz2 + // [27] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 -- pbuz1=pbuz1_plus_vwuz2 lda s clc - adc i + adc i_17 sta s lda s+1 - adc i+1 + adc i_17+1 sta s+1 - // [28] (word) main::j#1 ← (word) main::j#2 + (word) main::i#12 -- vwuz1=vwuz1_plus_vwuz2 + // [28] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 -- vwuz1=vwuz1_plus_vwuz2 lda j clc - adc i + adc i_17 sta j lda j+1 - adc i+1 + adc i_17+1 sta j+1 jmp b4_from_b5 } @@ -1755,16 +1808,16 @@ print_char: { } // print_word // Print a word as HEX -// print_word(word zeropage(2) w) +// print_word(word zeropage(6) w) print_word: { - .label w = 2 + .label w = 6 // [33] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuxx=_hi_vwuz1 lda w+1 tax // [34] call print_byte // [38] phi from print_word to print_byte [phi:print_word->print_byte] print_byte_from_print_word: - // [38] phi (byte*) print_char_cursor#26 = (byte*) print_char_cursor#27 [phi:print_word->print_byte#0] -- register_copy + // [38] phi (byte*) print_char_cursor#26 = (byte*) print_char_cursor#46 [phi:print_word->print_byte#0] -- register_copy // [38] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy jsr print_byte jmp b1 @@ -1831,43 +1884,44 @@ memset: { .label str = sieve .label end = str+COUNT .label dst = $a - // [47] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [47] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [47] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [47] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [48] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [47] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [50] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [48] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [51] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [49] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [47] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [47] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [50] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset] jsr memset - // [6] phi from main to main::@1 [phi:main->main::@1] - // [6] phi (byte*) main::sieve_i#2 = (const byte*) sieve#0+(byte) 2 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [6] phi from main to main::@2 [phi:main->main::@2] + // [6] phi (byte*) main::sieve_i#11 = (const byte*) sieve#0+(byte) 2 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #sieve+2 sta sieve_i+1 - // [6] phi (word) main::i#12 = (byte) 2 [phi:main->main::@1#1] -- vwuz1=vbuc1 + // [6] phi (word) main::i#17 = (byte) 2 [phi:main->main::@2#1] -- vwuz1=vbuc1 lda #<2 - sta i + sta i_17 lda #>2 - sta i+1 - // main::@1 - b1: - // while (i < SQRT_COUNT) - // [7] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 -- vwuz1_lt_vbuc1_then_la1 - lda i+1 - cmp #>SQRT_COUNT - bcc b2 - bne !+ - lda i - cmp #main::@7] - // [8] phi (byte*) print_char_cursor#27 = (byte*) 1024 [phi:main::@1->main::@7#0] -- pbuz1=pbuc1 - lda #<$400 - sta print_char_cursor - lda #>$400 - sta print_char_cursor+1 - // [8] phi (word) main::i#10 = (byte) 2 [phi:main::@1->main::@7#1] -- vwuz1=vbuc1 - lda #<2 - sta i_10 - lda #>2 - sta i_10+1 - // main::@7 - b7: - // for (i = 2; i < 0x04c7; ++i) - // [9] if((word) main::i#10<(word) $4c7) goto main::@8 -- vwuz1_lt_vwuc1_then_la1 - lda i_10+1 - cmp #>$4c7 - bcc b8 - bne !+ - lda i_10 - cmp #<$4c7 - bcc b8 - !: - // main::@11 - b11: - // (*(SCREEN+999))++; - // [10] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 - inc SCREEN+$3e7 - jmp b11 - // main::@8 - b8: - // if (!sieve[i]) - // [11] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#10 -- pbuz1=pbuc1_plus_vwuz2 - lda i_10 - clc - adc #sieve - sta _18+1 - // [12] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 -- vbuc1_neq__deref_pbuz1_then_la1 - ldy #0 - lda (_18),y - cmp #0 - bne b9 - // main::@10 - // print_word(i) - // [13] (word) print_word::w#0 ← (word) main::i#10 - // [14] call print_word - jsr print_word - // [15] phi from main::@10 to main::@12 [phi:main::@10->main::@12] - // main::@12 - // print_char(' ') - // [16] call print_char - // [29] phi from main::@12 to print_char [phi:main::@12->print_char] - // [29] phi (byte*) print_char_cursor#19 = (byte*) print_char_cursor#20 [phi:main::@12->print_char#0] -- register_copy - // [29] phi (byte) print_char::ch#3 = (byte) ' ' [phi:main::@12->print_char#1] -- vbuaa=vbuc1 - lda #' ' - jsr print_char - // [17] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] - // [17] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#20 [phi:main::@12/main::@8->main::@9#0] -- register_copy - // main::@9 - b9: - // for (i = 2; i < 0x04c7; ++i) - // [18] (word) main::i#3 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 - inc i_3 - bne !+ - inc i_3+1 - !: - // [8] phi from main::@9 to main::@7 [phi:main::@9->main::@7] - // [8] phi (byte*) print_char_cursor#27 = (byte*) print_char_cursor#35 [phi:main::@9->main::@7#0] -- register_copy - // [8] phi (word) main::i#10 = (word) main::i#3 [phi:main::@9->main::@7#1] -- register_copy - jmp b7 + sta i_17+1 + // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [6] phi (byte*) main::sieve_i#11 = (byte*) main::sieve_i#1 [phi:main::@1->main::@2#0] -- register_copy + // [6] phi (word) main::i#17 = (word) main::i#12 [phi:main::@1->main::@2#1] -- register_copy // main::@2 b2: // if (!*sieve_i) - // [19] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@3 -- vbuc1_neq__deref_pbuz1_then_la1 + // [7] if((byte) 0!=*((byte*) main::sieve_i#11)) goto main::@3 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (sieve_i),y cmp #0 bne b3 // main::@6 // j = i*2 - // [20] (word) main::j#0 ← (word) main::i#12 << (byte) 1 -- vwuz1=vwuz2_rol_1 - lda i + // [8] (word) main::j#0 ← (word) main::i#17 << (byte) 1 -- vwuz1=vwuz2_rol_1 + lda i_17 asl sta j - lda i+1 + lda i_17+1 rol sta j+1 // s = &sieve[j] - // [21] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 -- pbuz1=pbuc1_plus_vwuz2 + // [9] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 -- pbuz1=pbuc1_plus_vwuz2 lda j clc adc #sieve sta s+1 - // [22] phi from main::@5 main::@6 to main::@4 [phi:main::@5/main::@6->main::@4] - // [22] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@5/main::@6->main::@4#0] -- register_copy - // [22] phi (word) main::j#2 = (word) main::j#1 [phi:main::@5/main::@6->main::@4#1] -- register_copy + // [10] phi from main::@5 main::@6 to main::@4 [phi:main::@5/main::@6->main::@4] + // [10] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@5/main::@6->main::@4#0] -- register_copy + // [10] phi (word) main::j#2 = (word) main::j#1 [phi:main::@5/main::@6->main::@4#1] -- register_copy // main::@4 b4: // while (j < COUNT) - // [23] if((word) main::j#2<(const word) COUNT#0) goto main::@5 -- vwuz1_lt_vwuc1_then_la1 + // [11] if((word) main::j#2<(const word) COUNT#0) goto main::@5 -- vwuz1_lt_vwuc1_then_la1 lda j+1 cmp #>COUNT bcc b5 @@ -2213,21 +2201,98 @@ main: { // main::@3 b3: // i++; - // [24] (word) main::i#2 ← ++ (word) main::i#12 -- vwuz1=_inc_vwuz1 - inc i + // [12] (word) main::i#12 ← ++ (word) main::i#17 -- vwuz1=_inc_vwuz1 + inc i_12 bne !+ - inc i+1 + inc i_12+1 !: // sieve_i++; - // [25] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#2 -- pbuz1=_inc_pbuz1 + // [13] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#11 -- pbuz1=_inc_pbuz1 inc sieve_i bne !+ inc sieve_i+1 !: - // [6] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - // [6] phi (byte*) main::sieve_i#2 = (byte*) main::sieve_i#1 [phi:main::@3->main::@1#0] -- register_copy - // [6] phi (word) main::i#12 = (word) main::i#2 [phi:main::@3->main::@1#1] -- register_copy - jmp b1 + // main::@1 + // while (i < SQRT_COUNT) + // [14] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 -- vwuz1_lt_vbuc1_then_la1 + lda i_12+1 + cmp #>SQRT_COUNT + bcc b2 + bne !+ + lda i_12 + cmp #main::@8] + // [15] phi (byte*) print_char_cursor#46 = (byte*) 1024 [phi:main::@1->main::@8#0] -- pbuz1=pbuc1 + lda #<$400 + sta print_char_cursor + lda #>$400 + sta print_char_cursor+1 + // [15] phi (word) main::i#22 = (byte) 2 [phi:main::@1->main::@8#1] -- vwuz1=vbuc1 + lda #<2 + sta i + lda #>2 + sta i+1 + // [15] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + // [15] phi (byte*) print_char_cursor#46 = (byte*) print_char_cursor#27 [phi:main::@7->main::@8#0] -- register_copy + // [15] phi (word) main::i#22 = (word) main::i#10 [phi:main::@7->main::@8#1] -- register_copy + // main::@8 + b8: + // if (!sieve[i]) + // [16] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2 + lda i + clc + adc #sieve + sta _18+1 + // [17] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 -- vbuc1_neq__deref_pbuz1_then_la1 + ldy #0 + lda (_18),y + cmp #0 + bne b9 + // main::@10 + // print_word(i) + // [18] (word) print_word::w#0 ← (word) main::i#22 + // [19] call print_word + jsr print_word + // [20] phi from main::@10 to main::@12 [phi:main::@10->main::@12] + // main::@12 + // print_char(' ') + // [21] call print_char + // [29] phi from main::@12 to print_char [phi:main::@12->print_char] + // [29] phi (byte*) print_char_cursor#19 = (byte*) print_char_cursor#20 [phi:main::@12->print_char#0] -- register_copy + // [29] phi (byte) print_char::ch#3 = (byte) ' ' [phi:main::@12->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + // [22] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] + // [22] phi (byte*) print_char_cursor#27 = (byte*) print_char_cursor#20 [phi:main::@12/main::@8->main::@9#0] -- register_copy + // main::@9 + b9: + // for (i = 2; i < 0x04c7; ++i) + // [23] (word) main::i#10 ← ++ (word) main::i#22 -- vwuz1=_inc_vwuz1 + inc i + bne !+ + inc i+1 + !: + // main::@7 + // [24] if((word) main::i#10<(word) $4c7) goto main::@8 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>$4c7 + bcc b8 + bne !+ + lda i + cmp #<$4c7 + bcc b8 + !: + // main::@11 + b11: + // (*(SCREEN+999))++; + // [25] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + inc SCREEN+$3e7 + jmp b11 // main::@5 b5: // *s = 1 @@ -2236,22 +2301,22 @@ main: { ldy #0 sta (s),y // s += i - // [27] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#12 -- pbuz1=pbuz1_plus_vwuz2 + // [27] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 -- pbuz1=pbuz1_plus_vwuz2 lda s clc - adc i + adc i_17 sta s lda s+1 - adc i+1 + adc i_17+1 sta s+1 // j += i - // [28] (word) main::j#1 ← (word) main::j#2 + (word) main::i#12 -- vwuz1=vwuz1_plus_vwuz2 + // [28] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 -- vwuz1=vwuz1_plus_vwuz2 lda j clc - adc i + adc i_17 sta j lda j+1 - adc i+1 + adc i_17+1 sta j+1 jmp b4 } @@ -2276,16 +2341,16 @@ print_char: { } // print_word // Print a word as HEX -// print_word(word zeropage(2) w) +// print_word(word zeropage(6) w) print_word: { - .label w = 2 + .label w = 6 // print_byte(>w) // [33] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuxx=_hi_vwuz1 lda w+1 tax // [34] call print_byte // [38] phi from print_word to print_byte [phi:print_word->print_byte] - // [38] phi (byte*) print_char_cursor#26 = (byte*) print_char_cursor#27 [phi:print_word->print_byte#0] -- register_copy + // [38] phi (byte*) print_char_cursor#26 = (byte*) print_char_cursor#46 [phi:print_word->print_byte#0] -- register_copy // [38] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy jsr print_byte // print_word::@1 @@ -2348,16 +2413,29 @@ memset: { .label str = sieve .label end = str+COUNT .label dst = $a - // [47] phi from memset to memset::@1 [phi:memset->memset::@1] - // [47] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [47] phi from memset to memset::@2 [phi:memset->memset::@2] + // [47] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [47] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [47] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [48] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [48] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [49] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [50] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -2366,24 +2444,8 @@ memset: { bne b2 // memset::@return // } - // [49] return + // [51] return rts - // memset::@2 - b2: - // *dst = c - // [50] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [51] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [47] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [47] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sieve-min.sym b/src/test/ref/sieve-min.sym index 7af544b4f..5e7129d5d 100644 --- a/src/test/ref/sieve-min.sym +++ b/src/test/ref/sieve-min.sym @@ -26,21 +26,21 @@ (label) main::@8 (label) main::@9 (word) main::i -(word) main::i#10 i#10 zp ZP_WORD:2 6.111111111111112 -(word) main::i#12 i zp ZP_WORD:8 24.6 -(word) main::i#2 i zp ZP_WORD:8 11.0 -(word) main::i#3 i#3 zp ZP_WORD:2 22.0 +(word) main::i#10 i zp ZP_WORD:6 16.5 +(word) main::i#12 i#12 zp ZP_WORD:8 11.0 +(word) main::i#17 i#17 zp ZP_WORD:8 26.11111111111111 +(word) main::i#22 i zp ZP_WORD:6 5.5 (word) main::j -(word) main::j#0 j zp ZP_WORD:4 16.5 -(word) main::j#1 j zp ZP_WORD:4 202.0 -(word) main::j#2 j zp ZP_WORD:4 78.5 +(word) main::j#0 j zp ZP_WORD:2 16.5 +(word) main::j#1 j zp ZP_WORD:2 202.0 +(word) main::j#2 j zp ZP_WORD:2 78.5 (byte*) main::s -(byte*) main::s#0 s zp ZP_WORD:6 22.0 -(byte*) main::s#1 s zp ZP_WORD:6 101.0 -(byte*) main::s#2 s zp ZP_WORD:6 104.66666666666666 +(byte*) main::s#0 s zp ZP_WORD:4 22.0 +(byte*) main::s#1 s zp ZP_WORD:4 101.0 +(byte*) main::s#2 s zp ZP_WORD:4 104.66666666666666 (byte*) main::sieve_i -(byte*) main::sieve_i#1 sieve_i zp ZP_WORD:10 22.0 -(byte*) main::sieve_i#2 sieve_i zp ZP_WORD:10 3.0 +(byte*) main::sieve_i#1 sieve_i zp ZP_WORD:10 11.0 +(byte*) main::sieve_i#11 sieve_i zp ZP_WORD:10 3.3000000000000003 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -48,8 +48,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) 0 (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:10 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:10 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:10 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:10 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) COUNT#0 (word) memset::num @@ -75,8 +75,8 @@ (byte*) print_char_cursor#19 print_char_cursor zp ZP_WORD:8 9.5 (byte*) print_char_cursor#20 print_char_cursor zp ZP_WORD:8 1.9999999999999998 (byte*) print_char_cursor#26 print_char_cursor zp ZP_WORD:8 2.0 -(byte*) print_char_cursor#27 print_char_cursor zp ZP_WORD:8 4.0 -(byte*) print_char_cursor#35 print_char_cursor zp ZP_WORD:8 16.5 +(byte*) print_char_cursor#27 print_char_cursor zp ZP_WORD:8 11.0 +(byte*) print_char_cursor#46 print_char_cursor zp ZP_WORD:8 4.800000000000001 (byte[]) print_hextab (const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef" (byte*) print_line_cursor @@ -85,17 +85,17 @@ (label) print_word::@1 (label) print_word::@return (word) print_word::w -(word) print_word::w#0 w zp ZP_WORD:2 5.0 +(word) print_word::w#0 w zp ZP_WORD:6 5.0 (byte*) sieve (const byte*) sieve#0 sieve = (byte*) 4096 -zp ZP_WORD:2 [ main::i#10 main::i#3 print_word::w#0 ] -zp ZP_WORD:4 [ main::j#2 main::j#0 main::j#1 ] -zp ZP_WORD:6 [ main::s#2 main::s#0 main::s#1 ] +zp ZP_WORD:2 [ main::j#2 main::j#0 main::j#1 ] +zp ZP_WORD:4 [ main::s#2 main::s#0 main::s#1 ] +zp ZP_WORD:6 [ main::i#22 main::i#10 print_word::w#0 ] reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] -zp ZP_WORD:8 [ print_char_cursor#19 print_char_cursor#27 print_char_cursor#35 print_char_cursor#20 print_char_cursor#26 main::i#12 main::i#2 ] +zp ZP_WORD:8 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 main::i#17 main::i#12 ] reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -zp ZP_WORD:10 [ memset::dst#2 memset::dst#1 main::sieve_i#2 main::sieve_i#1 ] +zp ZP_WORD:10 [ memset::dst#4 memset::dst#1 main::sieve_i#11 main::sieve_i#1 ] zp ZP_WORD:12 [ main::$18 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] diff --git a/src/test/ref/sieve.asm b/src/test/ref/sieve.asm index 6e7a095fc..575a996f8 100644 --- a/src/test/ref/sieve.asm +++ b/src/test/ref/sieve.asm @@ -29,26 +29,25 @@ .label sieve = $1000 // Clock cycles per second (on a C64 PAL) .const CLOCKS_PER_SEC = CLOCKS_PER_FRAME*FRAMES_PER_SEC - .label rem16u = $f - .label print_char_cursor = $11 - .label print_line_cursor = 6 - .label print_char_cursor_10 = 6 - .label print_char_cursor_62 = 6 - .label print_char_cursor_78 = 6 + .label rem16u = $d + .label print_char_cursor = $f + .label print_line_cursor = 4 + .label print_char_cursor_90 = 4 + .label print_char_cursor_104 = 4 main: { .label toD0181_gfx = $1800 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>toD0181_gfx)/4&$f - .label _10 = 9 - .label _14 = $15 - .label cyclecount = 9 - .label sec100s = $d - .label i = $11 - .label sieve_i = $f - .label j = 2 - .label s = 4 - .label i_3 = $d - .label i_10 = $d - .label _38 = $13 + .label _10 = 7 + .label _14 = $13 + .label cyclecount = 7 + .label sec100s = $b + .label sieve_i = $d + .label j = $11 + .label s = 2 + .label i = $b + .label i_12 = $f + .label _38 = $17 + .label i_17 = $f //Show lower case font lda #toD0181_return sta D018 @@ -98,21 +97,56 @@ main: { lda #>sieve+2 sta sieve_i+1 lda #<2 - sta i + sta i_17 lda #>2 - sta i+1 - b1: - lda i+1 - cmp #>SQRT_COUNT - bcs !b2+ - jmp b2 - !b2: + sta i_17+1 + b2: + ldy #0 + lda (sieve_i),y + cmp #0 + bne b4 + lda i_17 + asl + sta j + lda i_17+1 + rol + sta j+1 + lda j + clc + adc #sieve + sta s+1 + b5: + lda j+1 + cmp #>COUNT + bcs !b6+ + jmp b6 + !b6: bne !+ - lda i + lda j + cmp #SQRT_COUNT + bcc b2 + bne !+ + lda i_12 cmp #2 - sta i_10+1 - b8: - lda i_10+1 - cmp #>$514 - bcc b9 - bne !+ - lda i_10 - cmp #<$514 - bcc b9 - !: - lda print_char_cursor_62 + sta i+1 + b9: + lda i + clc + adc #sieve + sta _38+1 + ldy #0 + lda (_38),y + cmp #0 + bne b30 + lda print_char_cursor_90 sta print_char_cursor - lda print_char_cursor_62+1 + lda print_char_cursor_90+1 sta print_char_cursor+1 + jsr print_word_decimal + jsr print_char + b11: + inc i + bne !+ + inc i+1 + !: + lda i+1 + cmp #>$514 + bcc b29 + bne !+ + lda i + cmp #<$514 + bcc b29 + !: lda #str4 @@ -175,84 +227,35 @@ main: { b13: inc SCREEN+$3e7 jmp b13 - b9: - lda i_10 - clc - adc #sieve - sta _38+1 - ldy #0 - lda (_38),y - cmp #0 - bne b11 - lda print_char_cursor_62 + b29: + lda print_char_cursor + sta print_char_cursor_104 + lda print_char_cursor+1 + sta print_char_cursor_104+1 + jmp b9 + b30: + lda print_char_cursor_90 sta print_char_cursor - lda print_char_cursor_62+1 + lda print_char_cursor_90+1 sta print_char_cursor+1 - jsr print_word_decimal - jsr print_char - b11: - inc i_3 - bne !+ - inc i_3+1 - !: - jmp b8 - b2: - ldy #0 - lda (sieve_i),y - cmp #0 - bne b4 - lda i - asl - sta j - lda i+1 - rol - sta j+1 - lda j - clc - adc #sieve - sta s+1 - b5: - lda j+1 - cmp #>COUNT - bcc b6 - bne !+ - lda j - cmp #decimal_digits - sta print_str.str+1 - jsr print_str - rts -} // Print a zero-terminated string -// print_str(byte* zeropage($f) str) +// print_str(byte* zeropage($d) str) print_str: { - .label str = $f + .label str = $d b1: ldy #0 lda (str),y @@ -316,18 +288,50 @@ print_str: { !: jmp b1 } +// Print a single char +print_char: { + .const ch = ' ' + lda #ch + ldy #0 + sta (print_char_cursor),y + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + rts +} +// Print a word as DECIMAL +// print_word_decimal(word zeropage($b) w) +print_word_decimal: { + .label w = $b + lda w + sta utoa.value + lda w+1 + sta utoa.value+1 + jsr utoa + lda #decimal_digits + sta print_str.str+1 + jsr print_str + rts +} // Converts unsigned number value to a string representing it in RADIX format. // If the leading digits are zero they are not included in the string. // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// utoa(word zeropage(2) value, byte* zeropage(4) buffer) +// utoa(word zeropage($11) value, byte* zeropage(2) buffer) utoa: { .const max_digits = 5 - .label digit_value = $19 - .label buffer = 4 - .label digit = 8 - .label value = 2 + .label digit_value = $d + .label buffer = 2 + .label digit = 6 + .label value = $11 + lda RADIX_DECIMAL_VALUES + sta digit_value + lda RADIX_DECIMAL_VALUES+1 + sta digit_value+1 lda #decimal_digits @@ -335,7 +339,17 @@ utoa: { ldx #0 txa sta digit - b1: + b7: + lda digit_value+1 + cmp value+1 + bne !+ + lda digit_value + cmp value + beq b5 + !: + bcc b5 + b4: + inc digit lda digit cmp #max_digits-1 bcc b2 @@ -362,16 +376,7 @@ utoa: { sta digit_value+1 cpx #0 bne b5 - cmp value+1 - bne !+ - lda digit_value - cmp value - beq b5 - !: - bcc b5 - b4: - inc digit - jmp b1 + jmp b7 b5: jsr utoa_append inc buffer @@ -389,12 +394,12 @@ utoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// utoa_append(byte* zeropage(4) buffer, word zeropage(2) value, word zeropage($19) sub) +// utoa_append(byte* zeropage(2) buffer, word zeropage($11) value, word zeropage($d) sub) utoa_append: { - .label buffer = 4 - .label value = 2 - .label sub = $19 - .label return = 2 + .label buffer = 2 + .label value = $11 + .label sub = $d + .label return = $11 ldx #0 b1: lda sub+1 @@ -441,9 +446,9 @@ print_ln: { rts } // Print a dword as DECIMAL -// print_dword_decimal(dword zeropage(9) w) +// print_dword_decimal(dword zeropage(7) w) print_dword_decimal: { - .label w = 9 + .label w = 7 jsr ultoa lda #decimal_digits_long @@ -471,7 +484,25 @@ ultoa: { ldx #0 txa sta digit - b1: + b7: + lda value+3 + cmp digit_value+3 + bcc !+ + bne b5 + lda value+2 + cmp digit_value+2 + bcc !+ + bne b5 + lda value+1 + cmp digit_value+1 + bcc !+ + bne b5 + lda value + cmp digit_value + bcs b5 + !: + b4: + inc digit lda digit cmp #max_digits-1 bcc b2 @@ -503,25 +534,7 @@ ultoa: { sta digit_value+3 cpx #0 bne b5 - lda value+3 - cmp digit_value+3 - bcc !+ - bne b5 - lda value+2 - cmp digit_value+2 - bcc !+ - bne b5 - lda value+1 - cmp digit_value+1 - bcc !+ - bne b5 - lda value - cmp digit_value - bcs b5 - !: - b4: - inc digit - jmp b1 + jmp b7 b5: jsr ultoa_append inc buffer @@ -539,12 +552,12 @@ ultoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// ultoa_append(byte* zeropage($d) buffer, dword zeropage(9) value, dword zeropage($15) sub) +// ultoa_append(byte* zeropage($b) buffer, dword zeropage(7) value, dword zeropage($13) sub) ultoa_append: { - .label buffer = $d - .label value = 9 - .label sub = $15 - .label return = 9 + .label buffer = $b + .label value = 7 + .label sub = $13 + .label return = 7 ldx #0 b1: lda value+3 @@ -586,13 +599,13 @@ ultoa_append: { } // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division -// div32u16u(dword zeropage(9) dividend) +// div32u16u(dword zeropage(7) dividend) div32u16u: { .label divisor = CLOCKS_PER_SEC/$64 - .label quotient_hi = $19 - .label quotient_lo = $13 - .label return = $15 - .label dividend = 9 + .label quotient_hi = $17 + .label quotient_lo = $11 + .label return = $13 + .label dividend = 7 lda dividend+2 sta divr16u.dividend lda dividend+3 @@ -624,12 +637,12 @@ div32u16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zeropage($11) dividend, word zeropage($f) rem) +// divr16u(word zeropage($f) dividend, word zeropage($d) rem) divr16u: { - .label rem = $f - .label dividend = $11 - .label quotient = $13 - .label return = $13 + .label rem = $d + .label dividend = $f + .label quotient = $11 + .label return = $11 ldx #0 txa sta quotient @@ -677,7 +690,7 @@ divr16u: { // Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program). // This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start() clock: { - .label return = 9 + .label return = 7 lda #<$ffffffff sec sbc CIA2_TIMER_AB diff --git a/src/test/ref/sieve.cfg b/src/test/ref/sieve.cfg index 162d6d8ce..6ddbdad1d 100644 --- a/src/test/ref/sieve.cfg +++ b/src/test/ref/sieve.cfg @@ -26,7 +26,7 @@ main::@16: scope:[main] from main::@15 [11] call print_ln to:main::@17 main::@17: scope:[main] from main::@16 - [12] (byte*~) print_char_cursor#90 ← (byte*) print_line_cursor#1 + [12] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 [13] call print_str to:main::@18 main::@18: scope:[main] from main::@17 @@ -44,378 +44,402 @@ main::@20: scope:[main] from main::@19 main::@21: scope:[main] from main::@20 [20] phi() [21] call clock_start - to:main::@1 -main::@1: scope:[main] from main::@21 main::@4 - [22] (byte*) main::sieve_i#2 ← phi( main::@21/(const byte*) sieve#0+(byte) 2 main::@4/(byte*) main::sieve_i#1 ) - [22] (word) main::i#12 ← phi( main::@21/(byte) 2 main::@4/(word) main::i#2 ) - [23] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [24] phi() - [25] call clock - [26] (dword) clock::return#2 ← (dword) clock::return#0 - to:main::@22 -main::@22: scope:[main] from main::@3 - [27] (dword~) main::$10 ← (dword) clock::return#2 - [28] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 - [29] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 - [30] call div32u16u - [31] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 - to:main::@23 -main::@23: scope:[main] from main::@22 - [32] (dword~) main::$14 ← (dword) div32u16u::return#2 - [33] (word) main::sec100s#0 ← (word)(dword~) main::$14 - [34] (byte*~) print_char_cursor#91 ← (byte*) print_line_cursor#1 - [35] call print_str - to:main::@24 -main::@24: scope:[main] from main::@23 - [36] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 - [37] call print_word_decimal - to:main::@25 -main::@25: scope:[main] from main::@24 - [38] phi() - [39] call print_str - to:main::@26 -main::@26: scope:[main] from main::@25 - [40] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 - [41] call print_dword_decimal - to:main::@27 -main::@27: scope:[main] from main::@26 - [42] phi() - [43] call print_ln - to:main::@8 -main::@8: scope:[main] from main::@11 main::@27 - [44] (byte*) print_char_cursor#62 ← phi( main::@11/(byte*) print_char_cursor#78 main::@27/(byte*) print_line_cursor#1 ) - [44] (word) main::i#10 ← phi( main::@11/(word) main::i#3 main::@27/(byte) 2 ) - [45] if((word) main::i#10<(word) $514) goto main::@9 - to:main::@10 -main::@10: scope:[main] from main::@8 - [46] (byte*~) print_char_cursor#89 ← (byte*) print_char_cursor#62 - [47] call print_str - to:main::@13 -main::@13: scope:[main] from main::@10 main::@13 - [48] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) - to:main::@13 -main::@9: scope:[main] from main::@8 - [49] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#10 - [50] if((byte) 0!=*((byte*~) main::$38)) goto main::@11 - to:main::@12 -main::@12: scope:[main] from main::@9 - [51] (word) print_word_decimal::w#2 ← (word) main::i#10 - [52] (byte*~) print_char_cursor#97 ← (byte*) print_char_cursor#62 - [53] call print_word_decimal - to:main::@28 -main::@28: scope:[main] from main::@12 - [54] phi() - [55] call print_char - to:main::@11 -main::@11: scope:[main] from main::@28 main::@9 - [56] (byte*) print_char_cursor#78 ← phi( main::@9/(byte*) print_char_cursor#62 main::@28/(byte*) print_char_cursor#10 ) - [57] (word) main::i#3 ← ++ (word) main::i#10 - to:main::@8 -main::@2: scope:[main] from main::@1 - [58] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@4 + to:main::@2 +main::@2: scope:[main] from main::@1 main::@21 + [22] (byte*) main::sieve_i#11 ← phi( main::@1/(byte*) main::sieve_i#1 main::@21/(const byte*) sieve#0+(byte) 2 ) + [22] (word) main::i#17 ← phi( main::@1/(word) main::i#12 main::@21/(byte) 2 ) + [23] if((byte) 0!=*((byte*) main::sieve_i#11)) goto main::@4 to:main::@7 main::@7: scope:[main] from main::@2 - [59] (word) main::j#0 ← (word) main::i#12 << (byte) 1 - [60] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 + [24] (word) main::j#0 ← (word) main::i#17 << (byte) 1 + [25] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 to:main::@5 main::@5: scope:[main] from main::@6 main::@7 - [61] (byte*) main::s#2 ← phi( main::@7/(byte*) main::s#0 main::@6/(byte*) main::s#1 ) - [61] (word) main::j#2 ← phi( main::@7/(word) main::j#0 main::@6/(word) main::j#1 ) - [62] if((word) main::j#2<(const word) COUNT#0) goto main::@6 + [26] (byte*) main::s#2 ← phi( main::@7/(byte*) main::s#0 main::@6/(byte*) main::s#1 ) + [26] (word) main::j#2 ← phi( main::@7/(word) main::j#0 main::@6/(word) main::j#1 ) + [27] if((word) main::j#2<(const word) COUNT#0) goto main::@6 to:main::@4 main::@4: scope:[main] from main::@2 main::@5 - [63] (word) main::i#2 ← ++ (word) main::i#12 - [64] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#2 + [28] (word) main::i#12 ← ++ (word) main::i#17 + [29] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#11 to:main::@1 +main::@1: scope:[main] from main::@4 + [30] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [31] phi() + [32] call clock + [33] (dword) clock::return#2 ← (dword) clock::return#0 + to:main::@22 +main::@22: scope:[main] from main::@3 + [34] (dword~) main::$10 ← (dword) clock::return#2 + [35] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 + [36] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 + [37] call div32u16u + [38] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 + to:main::@23 +main::@23: scope:[main] from main::@22 + [39] (dword~) main::$14 ← (dword) div32u16u::return#2 + [40] (word) main::sec100s#0 ← (word)(dword~) main::$14 + [41] (byte*~) print_char_cursor#95 ← (byte*) print_line_cursor#1 + [42] call print_str + to:main::@24 +main::@24: scope:[main] from main::@23 + [43] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 + [44] call print_word_decimal + to:main::@25 +main::@25: scope:[main] from main::@24 + [45] phi() + [46] call print_str + to:main::@26 +main::@26: scope:[main] from main::@25 + [47] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 + [48] call print_dword_decimal + to:main::@27 +main::@27: scope:[main] from main::@26 + [49] phi() + [50] call print_ln + to:main::@9 +main::@9: scope:[main] from main::@27 main::@29 + [51] (byte*) print_char_cursor#90 ← phi( main::@29/(byte*~) print_char_cursor#104 main::@27/(byte*) print_line_cursor#1 ) + [51] (word) main::i#22 ← phi( main::@29/(word) main::i#10 main::@27/(byte) 2 ) + [52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22 + [53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30 + to:main::@12 +main::@12: scope:[main] from main::@9 + [54] (word) print_word_decimal::w#2 ← (word) main::i#22 + [55] (byte*~) print_char_cursor#101 ← (byte*) print_char_cursor#90 + [56] call print_word_decimal + to:main::@28 +main::@28: scope:[main] from main::@12 + [57] phi() + [58] call print_char + to:main::@11 +main::@11: scope:[main] from main::@28 main::@30 + [59] (byte*) print_char_cursor#62 ← phi( main::@30/(byte*~) print_char_cursor#106 main::@28/(byte*) print_char_cursor#10 ) + [60] (word) main::i#10 ← ++ (word) main::i#22 + to:main::@8 +main::@8: scope:[main] from main::@11 + [61] if((word) main::i#10<(word) $514) goto main::@29 + to:main::@10 +main::@10: scope:[main] from main::@8 + [62] phi() + [63] call print_str + to:main::@13 +main::@13: scope:[main] from main::@10 main::@13 + [64] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) + to:main::@13 +main::@29: scope:[main] from main::@8 + [65] (byte*~) print_char_cursor#104 ← (byte*) print_char_cursor#62 + to:main::@9 +main::@30: scope:[main] from main::@9 + [66] (byte*~) print_char_cursor#106 ← (byte*) print_char_cursor#90 + to:main::@11 main::@6: scope:[main] from main::@5 - [65] *((byte*) main::s#2) ← (byte) 1 - [66] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#12 - [67] (word) main::j#1 ← (word) main::j#2 + (word) main::i#12 + [67] *((byte*) main::s#2) ← (byte) 1 + [68] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 + [69] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 to:main::@5 -print_char: scope:[print_char] from main::@28 - [68] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 - [69] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#2 - to:print_char::@return -print_char::@return: scope:[print_char] from print_char - [70] return - to:@return -print_word_decimal: scope:[print_word_decimal] from main::@12 main::@18 main::@24 - [71] (byte*) print_char_cursor#58 ← phi( main::@12/(byte*~) print_char_cursor#97 main::@18/(byte*) print_char_cursor#2 main::@24/(byte*) print_char_cursor#2 ) - [71] (word) print_word_decimal::w#3 ← phi( main::@12/(word) print_word_decimal::w#2 main::@18/(const word) COUNT#0 main::@24/(word) print_word_decimal::w#1 ) - [72] (word) utoa::value#1 ← (word) print_word_decimal::w#3 - [73] call utoa - to:print_word_decimal::@1 -print_word_decimal::@1: scope:[print_word_decimal] from print_word_decimal - [74] phi() - [75] call print_str - to:print_word_decimal::@return -print_word_decimal::@return: scope:[print_word_decimal] from print_word_decimal::@1 - [76] return - to:@return print_str: scope:[print_str] from main::@10 main::@15 main::@17 main::@23 main::@25 print_dword_decimal::@1 print_word_decimal::@1 - [77] (byte*) print_char_cursor#66 ← phi( main::@10/(byte*~) print_char_cursor#89 main::@15/(byte*) 1024 main::@17/(byte*~) print_char_cursor#90 main::@23/(byte*~) print_char_cursor#91 main::@25/(byte*) print_char_cursor#2 print_dword_decimal::@1/(byte*) print_char_cursor#2 print_word_decimal::@1/(byte*) print_char_cursor#58 ) - [77] (byte*) print_str::str#10 ← phi( main::@10/(const string) main::str4 main::@15/(const string) main::str main::@17/(const string) main::str1 main::@23/(const string) main::str2 main::@25/(const string) main::str3 print_dword_decimal::@1/(const byte[$b]) decimal_digits_long#0 print_word_decimal::@1/(const byte[6]) decimal_digits#0 ) + [70] (byte*) print_char_cursor#66 ← phi( main::@10/(byte*) print_char_cursor#62 main::@15/(byte*) 1024 main::@17/(byte*~) print_char_cursor#94 main::@23/(byte*~) print_char_cursor#95 main::@25/(byte*) print_char_cursor#2 print_dword_decimal::@1/(byte*) print_char_cursor#2 print_word_decimal::@1/(byte*) print_char_cursor#58 ) + [70] (byte*) print_str::str#10 ← phi( main::@10/(const string) main::str4 main::@15/(const string) main::str main::@17/(const string) main::str1 main::@23/(const string) main::str2 main::@25/(const string) main::str3 print_dword_decimal::@1/(const byte[$b]) decimal_digits_long#0 print_word_decimal::@1/(const byte[6]) decimal_digits#0 ) to:print_str::@1 print_str::@1: scope:[print_str] from print_str print_str::@2 - [78] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#66 print_str::@2/(byte*) print_char_cursor#1 ) - [78] (byte*) print_str::str#8 ← phi( print_str/(byte*) print_str::str#10 print_str::@2/(byte*) print_str::str#0 ) - [79] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 + [71] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#66 print_str::@2/(byte*) print_char_cursor#1 ) + [71] (byte*) print_str::str#8 ← phi( print_str/(byte*) print_str::str#10 print_str::@2/(byte*) print_str::str#0 ) + [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 - [80] return + [73] return to:@return print_str::@2: scope:[print_str] from print_str::@1 - [81] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) - [82] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 - [83] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#8 + [74] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) + [75] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 + [76] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#8 to:print_str::@1 -utoa: scope:[utoa] from print_word_decimal - [84] phi() - to:utoa::@1 -utoa::@1: scope:[utoa] from utoa utoa::@4 - [85] (byte*) utoa::buffer#11 ← phi( utoa::@4/(byte*) utoa::buffer#14 utoa/(const byte[6]) decimal_digits#0 ) - [85] (byte) utoa::started#2 ← phi( utoa::@4/(byte) utoa::started#4 utoa/(byte) 0 ) - [85] (word) utoa::value#2 ← phi( utoa::@4/(word) utoa::value#6 utoa/(word) utoa::value#1 ) - [85] (byte) utoa::digit#2 ← phi( utoa::@4/(byte) utoa::digit#1 utoa/(byte) 0 ) - [86] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 - to:utoa::@3 -utoa::@3: scope:[utoa] from utoa::@1 - [87] (byte~) utoa::$4 ← (byte)(word) utoa::value#2 - [88] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) - [89] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 - [90] *((byte*) utoa::buffer#3) ← (byte) 0 - to:utoa::@return -utoa::@return: scope:[utoa] from utoa::@3 - [91] return +print_char: scope:[print_char] from main::@28 + [77] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 + [78] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#2 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [79] return to:@return -utoa::@2: scope:[utoa] from utoa::@1 - [92] (byte~) utoa::$11 ← (byte) utoa::digit#2 << (byte) 1 - [93] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) - [94] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 +print_word_decimal: scope:[print_word_decimal] from main::@12 main::@18 main::@24 + [80] (byte*) print_char_cursor#58 ← phi( main::@12/(byte*~) print_char_cursor#101 main::@18/(byte*) print_char_cursor#2 main::@24/(byte*) print_char_cursor#2 ) + [80] (word) print_word_decimal::w#3 ← phi( main::@12/(word) print_word_decimal::w#2 main::@18/(const word) COUNT#0 main::@24/(word) print_word_decimal::w#1 ) + [81] (word) utoa::value#1 ← (word) print_word_decimal::w#3 + [82] call utoa + to:print_word_decimal::@1 +print_word_decimal::@1: scope:[print_word_decimal] from print_word_decimal + [83] phi() + [84] call print_str + to:print_word_decimal::@return +print_word_decimal::@return: scope:[print_word_decimal] from print_word_decimal::@1 + [85] return + to:@return +utoa: scope:[utoa] from print_word_decimal + [86] phi() + to:utoa::@19_1 +utoa::@19_1: scope:[utoa] from utoa + [87] (word) utoa::digit_value#4 ← *((const word[]) RADIX_DECIMAL_VALUES#0) to:utoa::@7 -utoa::@7: scope:[utoa] from utoa::@2 - [95] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 +utoa::@7: scope:[utoa] from utoa::@19_1 utoa::@2 + [88] (word) utoa::digit_value#3 ← phi( utoa::@2/(word) utoa::digit_value#0 utoa::@19_1/(word) utoa::digit_value#4 ) + [88] (byte*) utoa::buffer#28 ← phi( utoa::@2/(byte*) utoa::buffer#11 utoa::@19_1/(const byte[6]) decimal_digits#0 ) + [88] (byte) utoa::started#8 ← phi( utoa::@2/(byte) utoa::started#2 utoa::@19_1/(byte) 0 ) + [88] (word) utoa::value#21 ← phi( utoa::@2/(word) utoa::value#16 utoa::@19_1/(word) utoa::value#1 ) + [88] (byte) utoa::digit#15 ← phi( utoa::@2/(byte) utoa::digit#1 utoa::@19_1/(byte) 0 ) + [89] if((word) utoa::value#21>=(word) utoa::digit_value#3) goto utoa::@5 to:utoa::@4 utoa::@4: scope:[utoa] from utoa::@6 utoa::@7 - [96] (byte*) utoa::buffer#14 ← phi( utoa::@7/(byte*) utoa::buffer#11 utoa::@6/(byte*) utoa::buffer#4 ) - [96] (byte) utoa::started#4 ← phi( utoa::@7/(byte) utoa::started#2 utoa::@6/(byte) 1 ) - [96] (word) utoa::value#6 ← phi( utoa::@7/(word) utoa::value#2 utoa::@6/(word) utoa::value#0 ) - [97] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 + [90] (byte) utoa::digit#13 ← phi( utoa::@6/(byte) utoa::digit#14 utoa::@7/(byte) utoa::digit#15 ) + [90] (byte*) utoa::buffer#11 ← phi( utoa::@7/(byte*) utoa::buffer#28 utoa::@6/(byte*) utoa::buffer#4 ) + [90] (byte) utoa::started#2 ← phi( utoa::@7/(byte) utoa::started#8 utoa::@6/(byte) 1 ) + [90] (word) utoa::value#16 ← phi( utoa::@7/(word) utoa::value#21 utoa::@6/(word) utoa::value#0 ) + [91] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#13 to:utoa::@1 +utoa::@1: scope:[utoa] from utoa::@4 + [92] if((byte) utoa::digit#1<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 + to:utoa::@3 +utoa::@3: scope:[utoa] from utoa::@1 + [93] (byte~) utoa::$4 ← (byte)(word) utoa::value#16 + [94] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) + [95] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 + [96] *((byte*) utoa::buffer#3) ← (byte) 0 + to:utoa::@return +utoa::@return: scope:[utoa] from utoa::@3 + [97] return + to:@return +utoa::@2: scope:[utoa] from utoa::@1 + [98] (byte~) utoa::$11 ← (byte) utoa::digit#1 << (byte) 1 + [99] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) + [100] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 + to:utoa::@7 utoa::@5: scope:[utoa] from utoa::@2 utoa::@7 - [98] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 - [99] (word) utoa_append::value#0 ← (word) utoa::value#2 - [100] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 - [101] call utoa_append - [102] (word) utoa_append::return#0 ← (word) utoa_append::value#2 + [101] (word) utoa::digit_value#2 ← phi( utoa::@2/(word) utoa::digit_value#0 utoa::@7/(word) utoa::digit_value#3 ) + [101] (byte*) utoa::buffer#29 ← phi( utoa::@2/(byte*) utoa::buffer#11 utoa::@7/(byte*) utoa::buffer#28 ) + [101] (word) utoa::value#22 ← phi( utoa::@2/(word) utoa::value#16 utoa::@7/(word) utoa::value#21 ) + [101] (byte) utoa::digit#14 ← phi( utoa::@2/(byte) utoa::digit#1 utoa::@7/(byte) utoa::digit#15 ) + [102] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#29 + [103] (word) utoa_append::value#0 ← (word) utoa::value#22 + [104] (word) utoa_append::sub#0 ← (word) utoa::digit_value#2 + [105] call utoa_append + [106] (word) utoa_append::return#0 ← (word) utoa_append::value#2 to:utoa::@6 utoa::@6: scope:[utoa] from utoa::@5 - [103] (word) utoa::value#0 ← (word) utoa_append::return#0 - [104] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 + [107] (word) utoa::value#0 ← (word) utoa_append::return#0 + [108] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#29 to:utoa::@4 utoa_append: scope:[utoa_append] from utoa::@5 - [105] phi() + [109] phi() to:utoa_append::@1 utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 - [106] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 ) - [106] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 ) - [107] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 + [110] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 ) + [110] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 ) + [111] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 to:utoa_append::@3 utoa_append::@3: scope:[utoa_append] from utoa_append::@1 - [108] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) + [112] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) to:utoa_append::@return utoa_append::@return: scope:[utoa_append] from utoa_append::@3 - [109] return + [113] return to:@return utoa_append::@2: scope:[utoa_append] from utoa_append::@1 - [110] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 - [111] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 + [114] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 + [115] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 to:utoa_append::@1 print_ln: scope:[print_ln] from main::@16 main::@19 main::@27 - [112] (byte*) print_line_cursor#21 ← phi( main::@16/(byte*) 1024 main::@19/(byte*) print_line_cursor#1 main::@27/(byte*) print_line_cursor#1 ) + [116] (byte*) print_line_cursor#21 ← phi( main::@16/(byte*) 1024 main::@19/(byte*) print_line_cursor#1 main::@27/(byte*) print_line_cursor#1 ) to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 - [113] (byte*) print_line_cursor#11 ← phi( print_ln/(byte*) print_line_cursor#21 print_ln::@1/(byte*) print_line_cursor#1 ) - [114] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 - [115] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 + [117] (byte*) print_line_cursor#11 ← phi( print_ln/(byte*) print_line_cursor#21 print_ln::@1/(byte*) print_line_cursor#1 ) + [118] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 + [119] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 to:print_ln::@return print_ln::@return: scope:[print_ln] from print_ln::@1 - [116] return + [120] return to:@return print_dword_decimal: scope:[print_dword_decimal] from main::@26 - [117] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 - [118] call ultoa + [121] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 + [122] call ultoa to:print_dword_decimal::@1 print_dword_decimal::@1: scope:[print_dword_decimal] from print_dword_decimal - [119] phi() - [120] call print_str + [123] phi() + [124] call print_str to:print_dword_decimal::@return print_dword_decimal::@return: scope:[print_dword_decimal] from print_dword_decimal::@1 - [121] return + [125] return to:@return ultoa: scope:[ultoa] from print_dword_decimal - [122] phi() - to:ultoa::@1 -ultoa::@1: scope:[ultoa] from ultoa ultoa::@4 - [123] (byte*) ultoa::buffer#11 ← phi( ultoa::@4/(byte*) ultoa::buffer#14 ultoa/(const byte[$b]) decimal_digits_long#0 ) - [123] (byte) ultoa::started#2 ← phi( ultoa::@4/(byte) ultoa::started#4 ultoa/(byte) 0 ) - [123] (dword) ultoa::value#2 ← phi( ultoa::@4/(dword) ultoa::value#6 ultoa/(dword) ultoa::value#1 ) - [123] (byte) ultoa::digit#2 ← phi( ultoa::@4/(byte) ultoa::digit#1 ultoa/(byte) 0 ) - [124] if((byte) ultoa::digit#2<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 - to:ultoa::@3 -ultoa::@3: scope:[ultoa] from ultoa::@1 - [125] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#2 - [126] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) - [127] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 - [128] *((byte*) ultoa::buffer#3) ← (byte) 0 - to:ultoa::@return -ultoa::@return: scope:[ultoa] from ultoa::@3 - [129] return - to:@return -ultoa::@2: scope:[ultoa] from ultoa::@1 - [130] (byte~) ultoa::$11 ← (byte) ultoa::digit#2 << (byte) 2 - [131] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) - [132] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 + [126] phi() + to:ultoa::@19_1 +ultoa::@19_1: scope:[ultoa] from ultoa + [127] (dword) ultoa::digit_value#4 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0) to:ultoa::@7 -ultoa::@7: scope:[ultoa] from ultoa::@2 - [133] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 +ultoa::@7: scope:[ultoa] from ultoa::@19_1 ultoa::@2 + [128] (dword) ultoa::digit_value#3 ← phi( ultoa::@2/(dword) ultoa::digit_value#0 ultoa::@19_1/(dword) ultoa::digit_value#4 ) + [128] (byte*) ultoa::buffer#28 ← phi( ultoa::@2/(byte*) ultoa::buffer#11 ultoa::@19_1/(const byte[$b]) decimal_digits_long#0 ) + [128] (byte) ultoa::started#8 ← phi( ultoa::@2/(byte) ultoa::started#2 ultoa::@19_1/(byte) 0 ) + [128] (dword) ultoa::value#21 ← phi( ultoa::@2/(dword) ultoa::value#16 ultoa::@19_1/(dword) ultoa::value#1 ) + [128] (byte) ultoa::digit#15 ← phi( ultoa::@2/(byte) ultoa::digit#1 ultoa::@19_1/(byte) 0 ) + [129] if((dword) ultoa::value#21>=(dword) ultoa::digit_value#3) goto ultoa::@5 to:ultoa::@4 ultoa::@4: scope:[ultoa] from ultoa::@6 ultoa::@7 - [134] (byte*) ultoa::buffer#14 ← phi( ultoa::@7/(byte*) ultoa::buffer#11 ultoa::@6/(byte*) ultoa::buffer#4 ) - [134] (byte) ultoa::started#4 ← phi( ultoa::@7/(byte) ultoa::started#2 ultoa::@6/(byte) 1 ) - [134] (dword) ultoa::value#6 ← phi( ultoa::@7/(dword) ultoa::value#2 ultoa::@6/(dword) ultoa::value#0 ) - [135] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#2 + [130] (byte) ultoa::digit#13 ← phi( ultoa::@6/(byte) ultoa::digit#14 ultoa::@7/(byte) ultoa::digit#15 ) + [130] (byte*) ultoa::buffer#11 ← phi( ultoa::@7/(byte*) ultoa::buffer#28 ultoa::@6/(byte*) ultoa::buffer#4 ) + [130] (byte) ultoa::started#2 ← phi( ultoa::@7/(byte) ultoa::started#8 ultoa::@6/(byte) 1 ) + [130] (dword) ultoa::value#16 ← phi( ultoa::@7/(dword) ultoa::value#21 ultoa::@6/(dword) ultoa::value#0 ) + [131] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#13 to:ultoa::@1 +ultoa::@1: scope:[ultoa] from ultoa::@4 + [132] if((byte) ultoa::digit#1<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 + to:ultoa::@3 +ultoa::@3: scope:[ultoa] from ultoa::@1 + [133] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#16 + [134] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) + [135] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 + [136] *((byte*) ultoa::buffer#3) ← (byte) 0 + to:ultoa::@return +ultoa::@return: scope:[ultoa] from ultoa::@3 + [137] return + to:@return +ultoa::@2: scope:[ultoa] from ultoa::@1 + [138] (byte~) ultoa::$11 ← (byte) ultoa::digit#1 << (byte) 2 + [139] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) + [140] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 + to:ultoa::@7 ultoa::@5: scope:[ultoa] from ultoa::@2 ultoa::@7 - [136] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 - [137] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 - [138] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 - [139] call ultoa_append - [140] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 + [141] (dword) ultoa::digit_value#2 ← phi( ultoa::@2/(dword) ultoa::digit_value#0 ultoa::@7/(dword) ultoa::digit_value#3 ) + [141] (byte*) ultoa::buffer#29 ← phi( ultoa::@2/(byte*) ultoa::buffer#11 ultoa::@7/(byte*) ultoa::buffer#28 ) + [141] (dword) ultoa::value#22 ← phi( ultoa::@2/(dword) ultoa::value#16 ultoa::@7/(dword) ultoa::value#21 ) + [141] (byte) ultoa::digit#14 ← phi( ultoa::@2/(byte) ultoa::digit#1 ultoa::@7/(byte) ultoa::digit#15 ) + [142] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#29 + [143] (dword) ultoa_append::value#0 ← (dword) ultoa::value#22 + [144] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#2 + [145] call ultoa_append + [146] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 to:ultoa::@6 ultoa::@6: scope:[ultoa] from ultoa::@5 - [141] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 - [142] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 + [147] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 + [148] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#29 to:ultoa::@4 ultoa_append: scope:[ultoa_append] from ultoa::@5 - [143] phi() + [149] phi() to:ultoa_append::@1 ultoa_append::@1: scope:[ultoa_append] from ultoa_append ultoa_append::@2 - [144] (byte) ultoa_append::digit#2 ← phi( ultoa_append/(byte) 0 ultoa_append::@2/(byte) ultoa_append::digit#1 ) - [144] (dword) ultoa_append::value#2 ← phi( ultoa_append/(dword) ultoa_append::value#0 ultoa_append::@2/(dword) ultoa_append::value#1 ) - [145] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 + [150] (byte) ultoa_append::digit#2 ← phi( ultoa_append/(byte) 0 ultoa_append::@2/(byte) ultoa_append::digit#1 ) + [150] (dword) ultoa_append::value#2 ← phi( ultoa_append/(dword) ultoa_append::value#0 ultoa_append::@2/(dword) ultoa_append::value#1 ) + [151] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 to:ultoa_append::@3 ultoa_append::@3: scope:[ultoa_append] from ultoa_append::@1 - [146] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) + [152] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) to:ultoa_append::@return ultoa_append::@return: scope:[ultoa_append] from ultoa_append::@3 - [147] return + [153] return to:@return ultoa_append::@2: scope:[ultoa_append] from ultoa_append::@1 - [148] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 - [149] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 + [154] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 + [155] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 to:ultoa_append::@1 div32u16u: scope:[div32u16u] from main::@22 - [150] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 - [151] call divr16u - [152] (word) divr16u::return#2 ← (word) divr16u::return#0 + [156] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 + [157] call divr16u + [158] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div32u16u::@1 div32u16u::@1: scope:[div32u16u] from div32u16u - [153] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 - [154] (word) divr16u::dividend#2 ← < (dword) div32u16u::dividend#0 - [155] (word) divr16u::rem#4 ← (word) rem16u#1 - [156] call divr16u - [157] (word) divr16u::return#3 ← (word) divr16u::return#0 + [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 + [160] (word) divr16u::dividend#2 ← < (dword) div32u16u::dividend#0 + [161] (word) divr16u::rem#4 ← (word) rem16u#1 + [162] call divr16u + [163] (word) divr16u::return#3 ← (word) divr16u::return#0 to:div32u16u::@2 div32u16u::@2: scope:[div32u16u] from div32u16u::@1 - [158] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - [159] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 + [164] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + [165] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@2 - [160] return + [166] return to:@return divr16u: scope:[divr16u] from div32u16u div32u16u::@1 - [161] (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@1/(word) divr16u::dividend#2 ) - [161] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) + [167] (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@1/(word) divr16u::dividend#2 ) + [167] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [162] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [162] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) - [162] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) - [162] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) - [163] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 - [164] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 - [165] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 - [166] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 + [168] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) + [168] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [168] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) + [168] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) + [169] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 + [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 + [171] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 + [172] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [167] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 + [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [168] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) - [169] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 - [170] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 - [171] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 + [174] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) + [175] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 + [176] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 + [177] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [172] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 - [173] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 + [178] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 + [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [174] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - [174] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) - [175] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 - [176] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 + [180] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) + [180] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) + [181] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 + [182] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 - [177] (word) rem16u#1 ← (word) divr16u::rem#11 + [183] (word) rem16u#1 ← (word) divr16u::rem#11 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - [178] return + [184] return to:@return clock: scope:[clock] from main::@3 - [179] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) + [185] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) to:clock::@return clock::@return: scope:[clock] from clock - [180] return - to:@return -clock_start: scope:[clock_start] from main::@21 - [181] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 - [182] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 - [183] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff - [184] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 - [185] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 - to:clock_start::@return -clock_start::@return: scope:[clock_start] from clock_start [186] return to:@return +clock_start: scope:[clock_start] from main::@21 + [187] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 + [188] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 + [189] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff + [190] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 + [191] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 + to:clock_start::@return +clock_start::@return: scope:[clock_start] from clock_start + [192] return + to:@return memset: scope:[memset] from main::@20 print_cls - [187] (byte) memset::c#4 ← phi( main::@20/(byte) 0 print_cls/(byte) ' ' ) - [187] (void*) memset::str#3 ← phi( main::@20/(void*)(const byte*) sieve#0 print_cls/(void*)(byte*) 1024 ) - [187] (word) memset::num#2 ← phi( main::@20/(const word) COUNT#0 print_cls/(word) $3e8 ) - [188] if((word) memset::num#2<=(byte) 0) goto memset::@return + [193] (byte) memset::c#4 ← phi( main::@20/(byte) 0 print_cls/(byte) ' ' ) + [193] (void*) memset::str#3 ← phi( main::@20/(void*)(const byte*) sieve#0 print_cls/(void*)(byte*) 1024 ) + [193] (word) memset::num#2 ← phi( main::@20/(const word) COUNT#0 print_cls/(word) $3e8 ) + [194] if((word) memset::num#2<=(byte) 0) goto memset::@return to:memset::@1 memset::@1: scope:[memset] from memset - [189] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 - [190] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 + [195] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 + [196] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [191] (byte*) memset::dst#2 ← phi( memset::@1/(byte*~) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) - [192] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + [197] (byte*) memset::dst#2 ← phi( memset::@1/(byte*~) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [198] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset memset::@2 - [193] return + [199] return to:@return memset::@3: scope:[memset] from memset::@2 - [194] *((byte*) memset::dst#2) ← (byte) memset::c#4 - [195] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [200] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [201] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@2 print_cls: scope:[print_cls] from main::@14 - [196] phi() - [197] call memset + [202] phi() + [203] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [198] return + [204] return to:@return diff --git a/src/test/ref/sieve.log b/src/test/ref/sieve.log index ed59759bc..5a62c0d35 100644 --- a/src/test/ref/sieve.log +++ b/src/test/ref/sieve.log @@ -2982,6 +2982,8 @@ Removing unused block ultoa::@4 Removing unused block ultoa::@12 Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $10 in if((byte) divr16u::i#1!=(number) $10) goto divr16u::@1 Adding number conversion cast (unumber) 0 in (bool~) utoa::$12 ← (number) 0 != (byte) utoa::started#2 Adding number conversion cast (unumber) 0 in (bool~) ultoa::$12 ← (number) 0 != (byte) ultoa::started#2 @@ -2996,22 +2998,43 @@ Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) clock_start::$1 = (byte~) clock_start::$0 (byte~) clock_start::$2 Alias (byte~) clock_start::$6 = (byte~) clock_start::$4 (byte~) clock_start::$7 +Alias (word) main::i#12 = (word) main::i#2 +Alias (byte*) main::sieve_i#1 = (byte*) main::sieve_i#2 +Alias (word) main::i#17 = (word) main::i#19 +Alias (byte*) main::sieve_i#11 = (byte*) main::sieve_i#8 +Alias (word) main::i#18 = (word) main::i#20 +Alias (byte*) main::sieve_i#10 = (byte*) main::sieve_i#12 +Alias (word) main::i#10 = (word) main::i#3 +Alias (byte*) print_char_cursor#62 = (byte*) print_char_cursor#78 +Alias (word) main::i#22 = (word) main::i#24 (word) main::i#26 (word) main::i#25 +Alias (byte*) print_char_cursor#90 = (byte*) print_char_cursor#91 +Alias (byte*) main::sieve_i#0 = (byte*) main::sieve_i#13 +Successful SSA optimization Pass2AliasElimination +Alias (word) main::i#22 = (word) main::i#23 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) utoa::max_digits#7 (const byte) utoa::max_digits#1 Identical Phi Values (word*) utoa::digit_values#8 (const word*) utoa::digit_values#1 Identical Phi Values (byte) ultoa::max_digits#7 (const byte) ultoa::max_digits#1 Identical Phi Values (dword*) ultoa::digit_values#8 (const dword*) ultoa::digit_values#1 +Identical Phi Values (word) main::i#18 (word) main::i#17 +Identical Phi Values (byte*) main::sieve_i#10 (byte*) main::sieve_i#11 +Identical Phi Values (word) main::i#21 (const word) main::i#0 +Identical Phi Values (word) main::i#27 (const word) main::i#1 +Identical Phi Values (byte*) print_char_cursor#92 (byte*) print_line_cursor#1 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (word) main::i#16 (word) main::i#17 +Identical Phi Values (byte*) main::sieve_i#9 (byte*) main::sieve_i#11 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) utoa::$12 [67] if((byte) 0!=(byte) utoa::started#2) goto utoa::@24 Simple Condition (bool~) ultoa::$12 [96] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@24 -Simple Condition (bool~) utoa::$7 [206] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@24 -Simple Condition (bool~) ultoa::$7 [207] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@24 +Simple Condition (bool~) utoa::$7 [216] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@24 +Simple Condition (bool~) ultoa::$7 [217] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@24 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [10] (dword) CLOCKS_PER_SEC#0 ← (const word) CLOCKS_PER_FRAME#0 * (const byte) FRAMES_PER_SEC#0 Constant right-side identified [61] (byte~) utoa::$5 ← (const byte) utoa::max_digits#1 - (byte) 1 Constant right-side identified [90] (byte~) ultoa::$5 ← (const byte) ultoa::max_digits#1 - (byte) 1 Constant right-side identified [162] (byte*) main::sieve_i#0 ← (const byte*) sieve#0 + (const word) main::i#0 -Constant right-side identified [203] (byte*~) main::$35 ← (const byte*) SCREEN#0 + (word) $3e7 +Constant right-side identified [213] (byte*~) main::$35 ← (const byte*) SCREEN#0 + (word) $3e7 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const dword) CLOCKS_PER_SEC#0 = CLOCKS_PER_FRAME#0*FRAMES_PER_SEC#0 Constant (const byte) clock_start::$1 = CIA_TIMER_CONTROL_CONTINUOUS#0 @@ -3025,6 +3048,10 @@ Constant (const void*) memset::str#1 = (void*)sieve#0 Constant (const byte*) main::sieve_i#0 = sieve#0+main::i#0 Constant (const byte*) main::$35 = SCREEN#0+$3e7 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [219] if((const word) main::i#0<(const byte) SQRT_COUNT#0) goto main::@2 +Removing PHI-reference to removed block (main::@15_1) in block main::@17 +if() condition always true - replacing block destination [221] if((const word) main::i#1<(word) $514) goto main::@16 +Successful SSA optimization Pass2ConstantIfs Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 in [17] (byte~) clock_start::$3 ← (const byte) clock_start::$1 | (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) utoa::max_digits#2 @@ -3047,10 +3074,53 @@ Eliminating unused constant (const dword[]) RADIX_BINARY_VALUES_LONG#0 Eliminating unused constant (const dword[]) RADIX_OCTAL_VALUES_LONG#0 Eliminating unused constant (const dword[]) RADIX_HEXADECIMAL_VALUES_LONG#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) utoa::digit#1 = (byte) utoa::digit#2 +Alias (word) utoa::value#2 = (word) utoa::value#6 +Alias (byte) utoa::started#2 = (byte) utoa::started#4 +Alias (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 +Alias (byte) utoa::digit#11 = (byte) utoa::digit#9 +Alias (byte*) utoa::buffer#24 = (byte*) utoa::buffer#25 +Alias (byte) ultoa::digit#1 = (byte) ultoa::digit#2 +Alias (dword) ultoa::value#2 = (dword) ultoa::value#6 +Alias (byte) ultoa::started#2 = (byte) ultoa::started#4 +Alias (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#14 +Alias (byte) ultoa::digit#11 = (byte) ultoa::digit#9 +Alias (byte*) ultoa::buffer#24 = (byte*) ultoa::buffer#25 +Alias (byte*) print_char_cursor#62 = (byte*) print_char_cursor#89 +Alias (byte) utoa::digit#10 = (byte) utoa::digit#7 +Alias (word) utoa::value#17 = (word) utoa::value#19 +Alias (byte) utoa::started#5 = (byte) utoa::started#6 +Alias (byte*) utoa::buffer#23 = (byte*) utoa::buffer#26 +Alias (byte) ultoa::digit#10 = (byte) ultoa::digit#7 +Alias (dword) ultoa::value#17 = (dword) ultoa::value#19 +Alias (byte) ultoa::started#5 = (byte) ultoa::started#6 +Alias (byte*) ultoa::buffer#23 = (byte*) ultoa::buffer#26 +Successful SSA optimization Pass2AliasElimination +Alias (byte) utoa::digit#10 = (byte) utoa::digit#11 +Alias (word) utoa::value#17 = (word) utoa::value#18 +Alias (byte*) utoa::buffer#23 = (byte*) utoa::buffer#24 +Alias (byte) ultoa::digit#10 = (byte) ultoa::digit#11 +Alias (dword) ultoa::value#17 = (dword) ultoa::value#18 +Alias (byte*) ultoa::buffer#23 = (byte*) ultoa::buffer#24 +Successful SSA optimization Pass2AliasElimination +Alias (byte) utoa::digit#10 = (byte) utoa::digit#8 +Alias (byte) ultoa::digit#10 = (byte) ultoa::digit#8 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) utoa::digit#12 (const byte) utoa::digit#0 +Identical Phi Values (word) utoa::value#20 (word) utoa::value#1 +Identical Phi Values (byte) utoa::started#7 (const byte) utoa::started#0 +Identical Phi Values (byte*) utoa::buffer#27 (const byte*) utoa::buffer#5 +Identical Phi Values (byte) ultoa::digit#12 (const byte) ultoa::digit#0 +Identical Phi Values (dword) ultoa::value#20 (dword) ultoa::value#1 +Identical Phi Values (byte) ultoa::started#7 (const byte) ultoa::started#0 +Identical Phi Values (byte*) ultoa::buffer#27 (const byte*) ultoa::buffer#5 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [16] (byte~) clock_start::$5 ← (const byte) clock_start::$6 | (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -Constant right-side identified [127] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff -Constant right-side identified [130] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 -Constant right-side identified [150] (dword~) main::$12 ← (const dword) CLOCKS_PER_SEC#0 / (byte) $64 +Constant right-side identified [135] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff +Constant right-side identified [138] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 +Constant right-side identified [158] (dword~) main::$12 ← (const dword) CLOCKS_PER_SEC#0 / (byte) $64 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) clock_start::$3 = CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 Constant (const byte) clock_start::$5 = clock_start::$6|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 @@ -3058,18 +3128,73 @@ Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&$3fff Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0 Constant (const dword) main::$12 = CLOCKS_PER_SEC#0/$64 Successful SSA optimization Pass2ConstantIdentification -Constant value identified (word)main::$12 in [151] (word) div32u16u::divisor#0 ← (word)(const dword) main::$12 +Constant value identified (word)main::$12 in [159] (word) div32u16u::divisor#0 ← (word)(const dword) main::$12 Successful SSA optimization Pass2ConstantValues -Constant right-side identified [125] (word~) main::toD0181_$2#0 ← (const word) main::toD0181_$1#0 * (byte) 4 -Constant right-side identified [127] (byte~) main::toD0181_$6#0 ← (const byte) main::toD0181_$5#0 / (byte) 4 +Removing PHI-reference to removed block (utoa::@18_1) in block utoa::@20 +Removing PHI-reference to removed block (utoa::@18_1) in block utoa::@20 +if() condition always true - replacing block destination [199] if((const byte) utoa::digit#0<(const byte) utoa::$5) goto utoa::@19 +Removing PHI-reference to removed block (ultoa::@18_1) in block ultoa::@20 +Removing PHI-reference to removed block (ultoa::@18_1) in block ultoa::@20 +if() condition always true - replacing block destination [201] if((const byte) ultoa::digit#0<(const byte) ultoa::$5) goto ultoa::@19 +Successful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) utoa::digit#1 = (byte) utoa::digit#10 +Alias (word) utoa::value#16 = (word) utoa::value#17 (word) utoa::value#2 +Alias (byte) utoa::started#2 = (byte) utoa::started#5 +Alias (byte*) utoa::buffer#11 = (byte*) utoa::buffer#23 (byte*) utoa::buffer#22 +Alias (byte) utoa::digit#14 = (byte) utoa::digit#16 +Alias (byte*) utoa::buffer#29 = (byte*) utoa::buffer#30 +Alias (byte) ultoa::digit#1 = (byte) ultoa::digit#10 +Alias (dword) ultoa::value#16 = (dword) ultoa::value#17 (dword) ultoa::value#2 +Alias (byte) ultoa::started#2 = (byte) ultoa::started#5 +Alias (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#23 (byte*) ultoa::buffer#22 +Alias (byte) ultoa::digit#14 = (byte) ultoa::digit#16 +Alias (byte*) ultoa::buffer#29 = (byte*) ultoa::buffer#30 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) utoa::digit#17 (const byte) utoa::digit#0 +Identical Phi Values (word) utoa::value#23 (word) utoa::value#1 +Identical Phi Values (byte) utoa::started#9 (const byte) utoa::started#0 +Identical Phi Values (byte*) utoa::buffer#31 (const byte*) utoa::buffer#5 +Identical Phi Values (byte) ultoa::digit#17 (const byte) ultoa::digit#0 +Identical Phi Values (dword) ultoa::value#23 (dword) ultoa::value#1 +Identical Phi Values (byte) ultoa::started#9 (const byte) ultoa::started#0 +Identical Phi Values (byte*) ultoa::buffer#31 (const byte*) ultoa::buffer#5 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [131] (word~) main::toD0181_$2#0 ← (const word) main::toD0181_$1#0 * (byte) 4 +Constant right-side identified [133] (byte~) main::toD0181_$6#0 ← (const byte) main::toD0181_$5#0 / (byte) 4 +Constant right-side identified [191] (byte~) utoa::$13 ← (const byte) utoa::digit#0 * (const byte) SIZEOF_WORD +Constant right-side identified [195] (byte~) ultoa::$13 ← (const byte) ultoa::digit#0 * (const byte) SIZEOF_DWORD Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) main::toD0181_$2#0 = main::toD0181_$1#0*4 Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0/4 Constant (const word) div32u16u::divisor#0 = (word)main::$12 +Constant (const byte) utoa::$13 = utoa::digit#0*SIZEOF_WORD +Constant (const byte) ultoa::$13 = ultoa::digit#0*SIZEOF_DWORD Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::divisor#0 = div32u16u::divisor#0 Constant (const word) divr16u::divisor#1 = div32u16u::divisor#0 Successful SSA optimization Pass2ConstantIdentification +Removing PHI-reference to removed block (utoa::@19_1) in block utoa::@24 +Removing PHI-reference to removed block (utoa::@19_1) in block utoa::@24 +Removing PHI-reference to removed block (utoa::@19_1) in block utoa::@24 +Removing PHI-reference to removed block (utoa::@19_1) in block utoa::@24 +if() condition always false - eliminating [193] if((byte) 0!=(const byte) utoa::started#0) goto utoa::@24 +Removing PHI-reference to removed block (ultoa::@19_1) in block ultoa::@24 +Removing PHI-reference to removed block (ultoa::@19_1) in block ultoa::@24 +Removing PHI-reference to removed block (ultoa::@19_1) in block ultoa::@24 +Removing PHI-reference to removed block (ultoa::@19_1) in block ultoa::@24 +if() condition always false - eliminating [197] if((byte) 0!=(const byte) ultoa::started#0) goto ultoa::@24 +Successful SSA optimization Pass2ConstantIfs +Simplifying constant evaluating to zero (const byte) utoa::digit#0*(const byte) SIZEOF_WORD in +Simplifying constant evaluating to zero (const byte) ultoa::digit#0*(const byte) SIZEOF_DWORD in +Successful SSA optimization PassNSimplifyConstantZero +Simplifying expression containing zero utoa::digit_values#1 in [192] (word) utoa::digit_value#4 ← *((const word*) utoa::digit_values#1 + (const byte) utoa::$13) +Simplifying expression containing zero ultoa::digit_values#1 in [196] (dword) ultoa::digit_value#4 ← *((const dword*) ultoa::digit_values#1 + (const byte) ultoa::$13) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant (const byte) utoa::$13 +Eliminating unused constant (const byte) ultoa::$13 +Successful SSA optimization PassNEliminateUnusedVars Constant right-side identified [123] (byte~) main::toD0181_$3#0 ← > (const word) main::toD0181_$2#0 Constant right-side identified [124] (byte~) main::toD0181_$7#0 ← (const byte) main::toD0181_$6#0 & (byte) $f Successful SSA optimization Pass2ConstantRValueConsolidation @@ -3083,9 +3208,9 @@ Successful SSA optimization Pass2ConstantIdentification Inlining Noop Cast [2] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3 Inlining Noop Cast [4] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 Successful SSA optimization Pass2NopCastInlining -Rewriting multiplication to use shift [50] (byte~) utoa::$11 ← (byte) utoa::digit#2 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [75] (byte~) ultoa::$11 ← (byte) ultoa::digit#2 * (const byte) SIZEOF_DWORD -Rewriting multiplication to use shift [153] (word) main::j#0 ← (word) main::i#12 * (byte) 2 +Rewriting multiplication to use shift [49] (byte~) utoa::$11 ← (byte) utoa::digit#1 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [74] (byte~) ultoa::$11 ← (byte) ultoa::digit#1 * (const byte) SIZEOF_DWORD +Rewriting multiplication to use shift [153] (word) main::j#0 ← (word) main::i#17 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte) memset::c#0 Inlining constant with var siblings (const word) memset::num#0 @@ -3183,9 +3308,17 @@ Added new block during phi lifting divr16u::@8(between divr16u::@3 and divr16u:: Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u::@2) Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3) Added new block during phi lifting utoa::@28(between utoa::@27 and utoa::@21) +Added new block during phi lifting utoa::@29(between utoa::@19 and utoa::@24) +Added new block during phi lifting utoa::@30(between utoa::@27 and utoa::@24) Added new block during phi lifting ultoa::@28(between ultoa::@27 and ultoa::@21) +Added new block during phi lifting ultoa::@29(between ultoa::@19 and ultoa::@24) +Added new block during phi lifting ultoa::@30(between ultoa::@27 and ultoa::@24) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) -Added new block during phi lifting main::@48(between main::@16 and main::@18) +Added new block during phi lifting main::@48(between main::@1 and main::@2) +Added new block during phi lifting main::@49(between main::@15 and main::@16) +Added new block during phi lifting main::@50(between main::@16 and main::@18) +Added new block during phi lifting utoa::@31(between utoa::@19 and utoa::@27) +Added new block during phi lifting ultoa::@31(between ultoa::@19 and ultoa::@27) Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @8 @@ -3207,104 +3340,134 @@ Adding NOP phi() at start of main::@31 Adding NOP phi() at start of main::@35 Adding NOP phi() at start of main::@36 Adding NOP phi() at start of main::@37 +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of main::@44 +Adding NOP phi() at start of main::@46 Adding NOP phi() at start of main::@45 Adding NOP phi() at start of main::@23 -Adding NOP phi() at start of main::@46 Adding NOP phi() at start of print_word_decimal::@2 Adding NOP phi() at start of utoa Adding NOP phi() at start of utoa::@1 +Adding NOP phi() at start of utoa::@8 +Adding NOP phi() at start of utoa::@18_1 Adding NOP phi() at start of print_ln::@2 Adding NOP phi() at start of print_dword_decimal::@2 Adding NOP phi() at start of ultoa Adding NOP phi() at start of ultoa::@1 +Adding NOP phi() at start of ultoa::@8 +Adding NOP phi() at start of ultoa::@18_1 Adding NOP phi() at start of memset::@1 Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 CALL GRAPH Calls in [] to main:11 -Calls in [main] to print_cls:18 print_str:20 print_ln:22 print_str:24 print_word_decimal:26 print_ln:28 memset:30 clock_start:32 clock:37 div32u16u:42 print_str:47 print_word_decimal:51 print_str:53 print_dword_decimal:55 print_ln:57 print_str:62 print_word_decimal:71 print_char:73 -Calls in [print_word_decimal] to utoa:101 print_str:103 -Calls in [utoa] to utoa_append:143 -Calls in [print_dword_decimal] to ultoa:167 print_str:169 -Calls in [ultoa] to ultoa_append:198 -Calls in [div32u16u] to divr16u:215 divr16u:222 -Calls in [print_cls] to memset:277 +Calls in [main] to print_cls:18 print_str:20 print_ln:22 print_str:24 print_word_decimal:26 print_ln:28 memset:30 clock_start:32 clock:47 div32u16u:52 print_str:57 print_word_decimal:61 print_str:63 print_dword_decimal:65 print_ln:67 print_word_decimal:76 print_char:78 print_str:84 +Calls in [print_word_decimal] to utoa:114 print_str:116 +Calls in [utoa] to utoa_append:156 +Calls in [print_dword_decimal] to ultoa:185 print_str:187 +Calls in [ultoa] to ultoa_append:227 +Calls in [div32u16u] to divr16u:249 divr16u:256 +Calls in [print_cls] to memset:311 -Created 46 initial phi equivalence classes -Not coalescing [23] print_char_cursor#90 ← print_line_cursor#1 -Coalesced [25] print_char_cursor#98 ← print_char_cursor#2 +Created 58 initial phi equivalence classes +Not coalescing [23] print_char_cursor#94 ← print_line_cursor#1 +Coalesced [25] print_char_cursor#102 ← print_char_cursor#2 Coalesced [27] print_line_cursor#58 ← print_line_cursor#1 -Not coalescing [46] print_char_cursor#91 ← print_line_cursor#1 -Coalesced [49] print_word_decimal::w#5 ← print_word_decimal::w#1 -Coalesced (already) [50] print_char_cursor#99 ← print_char_cursor#2 -Coalesced [52] print_char_cursor#92 ← print_char_cursor#2 -Coalesced (already) [56] print_line_cursor#59 ← print_line_cursor#1 -Coalesced [58] print_char_cursor#101 ← print_line_cursor#1 -Not coalescing [61] print_char_cursor#89 ← print_char_cursor#62 -Coalesced [69] print_word_decimal::w#4 ← print_word_decimal::w#2 -Not coalescing [70] print_char_cursor#97 ← print_char_cursor#62 -Coalesced [74] print_char_cursor#103 ← print_char_cursor#10 -Coalesced [77] main::i#17 ← main::i#3 -Coalesced [78] print_char_cursor#100 ← print_char_cursor#78 -Coalesced (already) [79] print_char_cursor#102 ← print_char_cursor#62 -Coalesced [83] main::j#4 ← main::j#0 -Coalesced [84] main::s#4 ← main::s#0 -Coalesced [89] main::i#16 ← main::i#2 -Coalesced [90] main::sieve_i#8 ← main::sieve_i#1 -Coalesced [94] main::j#5 ← main::j#1 -Coalesced [95] main::s#5 ← main::s#1 -Coalesced (already) [102] print_char_cursor#94 ← print_char_cursor#58 -Coalesced [107] print_str::str#11 ← print_str::str#10 -Coalesced (already) [108] print_char_cursor#95 ← print_char_cursor#66 -Coalesced [115] print_str::str#12 ← print_str::str#0 -Coalesced [116] print_char_cursor#96 ← print_char_cursor#1 -Coalesced [119] utoa::value#17 ← utoa::value#1 -Coalesced [131] utoa::value#18 ← utoa::value#2 -Coalesced [132] utoa::started#6 ← utoa::started#2 -Coalesced [133] utoa::buffer#23 ← utoa::buffer#11 -Coalesced [136] utoa::digit#7 ← utoa::digit#1 -Coalesced (already) [137] utoa::value#16 ← utoa::value#6 -Coalesced (already) [138] utoa::started#5 ← utoa::started#4 -Coalesced (already) [139] utoa::buffer#22 ← utoa::buffer#14 -Coalesced [147] utoa::value#19 ← utoa::value#0 -Coalesced [148] utoa::buffer#24 ← utoa::buffer#4 -Coalesced [149] utoa_append::value#6 ← utoa_append::value#0 -Coalesced [156] utoa_append::value#7 ← utoa_append::value#1 -Coalesced [157] utoa_append::digit#5 ← utoa_append::digit#1 -Coalesced [159] print_line_cursor#60 ← print_line_cursor#21 -Coalesced (already) [165] print_line_cursor#61 ← print_line_cursor#1 -Coalesced (already) [168] print_char_cursor#93 ← print_char_cursor#2 -Coalesced [174] ultoa::value#17 ← ultoa::value#1 -Coalesced [186] ultoa::value#18 ← ultoa::value#2 -Coalesced [187] ultoa::started#6 ← ultoa::started#2 -Coalesced [188] ultoa::buffer#23 ← ultoa::buffer#11 -Coalesced [191] ultoa::digit#7 ← ultoa::digit#1 -Coalesced (already) [192] ultoa::value#16 ← ultoa::value#6 -Coalesced (already) [193] ultoa::started#5 ← ultoa::started#4 -Coalesced (already) [194] ultoa::buffer#22 ← ultoa::buffer#14 -Coalesced [202] ultoa::value#19 ← ultoa::value#0 -Coalesced [203] ultoa::buffer#24 ← ultoa::buffer#4 -Coalesced [204] ultoa_append::value#6 ← ultoa_append::value#0 -Coalesced [211] ultoa_append::value#7 ← ultoa_append::value#1 -Coalesced [212] ultoa_append::digit#5 ← ultoa_append::digit#1 -Coalesced [214] divr16u::dividend#9 ← divr16u::dividend#1 -Coalesced [220] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [221] divr16u::dividend#10 ← divr16u::dividend#2 -Coalesced [228] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [229] divr16u::dividend#11 ← divr16u::dividend#5 -Coalesced [236] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [243] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [244] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [250] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [251] divr16u::dividend#12 ← divr16u::dividend#0 -Coalesced [252] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [253] divr16u::i#7 ← divr16u::i#1 -Coalesced [254] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [255] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [256] divr16u::rem#15 ← divr16u::rem#0 -Coalesced [275] memset::dst#5 ← memset::dst#1 -Coalesced down to 29 phi equivalence classes +Coalesced [39] main::j#4 ← main::j#0 +Coalesced [40] main::s#4 ← main::s#0 +Not coalescing [56] print_char_cursor#95 ← print_line_cursor#1 +Coalesced [59] print_word_decimal::w#5 ← print_word_decimal::w#1 +Coalesced (already) [60] print_char_cursor#103 ← print_char_cursor#2 +Coalesced [62] print_char_cursor#96 ← print_char_cursor#2 +Coalesced (already) [66] print_line_cursor#59 ← print_line_cursor#1 +Coalesced [69] print_char_cursor#105 ← print_line_cursor#1 +Coalesced [74] print_word_decimal::w#4 ← print_word_decimal::w#2 +Not coalescing [75] print_char_cursor#101 ← print_char_cursor#90 +Coalesced [79] print_char_cursor#107 ← print_char_cursor#10 +Coalesced [83] print_char_cursor#93 ← print_char_cursor#62 +Coalesced [88] main::i#29 ← main::i#10 +Not coalescing [89] print_char_cursor#104 ← print_char_cursor#62 +Not coalescing [90] print_char_cursor#106 ← print_char_cursor#90 +Coalesced [91] main::i#28 ← main::i#12 +Coalesced [92] main::sieve_i#14 ← main::sieve_i#1 +Coalesced [96] main::j#5 ← main::j#1 +Coalesced [97] main::s#5 ← main::s#1 +Coalesced [99] print_str::str#11 ← print_str::str#10 +Coalesced (already) [100] print_char_cursor#99 ← print_char_cursor#66 +Coalesced [107] print_str::str#12 ← print_str::str#0 +Coalesced [108] print_char_cursor#100 ← print_char_cursor#1 +Coalesced (already) [115] print_char_cursor#98 ← print_char_cursor#58 +Coalesced [124] utoa::value#29 ← utoa::value#1 +Coalesced [125] utoa::digit_value#8 ← utoa::digit_value#4 +Coalesced [128] utoa::value#24 ← utoa::value#21 +Coalesced [129] utoa::started#10 ← utoa::started#8 +Coalesced [130] utoa::buffer#32 ← utoa::buffer#28 +Coalesced [131] utoa::digit#19 ← utoa::digit#15 +Coalesced [143] utoa::digit#22 ← utoa::digit#1 +Coalesced (already) [144] utoa::value#28 ← utoa::value#16 +Coalesced (already) [145] utoa::started#11 ← utoa::started#2 +Coalesced (already) [146] utoa::buffer#36 ← utoa::buffer#11 +Coalesced [147] utoa::digit_value#7 ← utoa::digit_value#0 +Coalesced [148] utoa::digit#20 ← utoa::digit#1 +Coalesced [149] utoa::value#26 ← utoa::value#16 +Coalesced [150] utoa::buffer#34 ← utoa::buffer#11 +Coalesced [151] utoa::digit_value#5 ← utoa::digit_value#0 +Coalesced [160] utoa::value#25 ← utoa::value#0 +Coalesced [161] utoa::buffer#33 ← utoa::buffer#4 +Coalesced (already) [162] utoa::digit#18 ← utoa::digit#14 +Coalesced (already) [163] utoa::digit#21 ← utoa::digit#15 +Coalesced (already) [164] utoa::value#27 ← utoa::value#21 +Coalesced (already) [165] utoa::buffer#35 ← utoa::buffer#28 +Coalesced (already) [166] utoa::digit_value#6 ← utoa::digit_value#3 +Coalesced [167] utoa_append::value#6 ← utoa_append::value#0 +Coalesced [174] utoa_append::value#7 ← utoa_append::value#1 +Coalesced [175] utoa_append::digit#5 ← utoa_append::digit#1 +Coalesced [177] print_line_cursor#60 ← print_line_cursor#21 +Coalesced (already) [183] print_line_cursor#61 ← print_line_cursor#1 +Coalesced (already) [186] print_char_cursor#97 ← print_char_cursor#2 +Coalesced [195] ultoa::value#29 ← ultoa::value#1 +Coalesced [196] ultoa::digit_value#8 ← ultoa::digit_value#4 +Coalesced [199] ultoa::value#24 ← ultoa::value#21 +Coalesced [200] ultoa::started#10 ← ultoa::started#8 +Coalesced [201] ultoa::buffer#32 ← ultoa::buffer#28 +Coalesced [202] ultoa::digit#19 ← ultoa::digit#15 +Coalesced [214] ultoa::digit#22 ← ultoa::digit#1 +Coalesced (already) [215] ultoa::value#28 ← ultoa::value#16 +Coalesced (already) [216] ultoa::started#11 ← ultoa::started#2 +Coalesced (already) [217] ultoa::buffer#36 ← ultoa::buffer#11 +Coalesced [218] ultoa::digit_value#7 ← ultoa::digit_value#0 +Coalesced [219] ultoa::digit#20 ← ultoa::digit#1 +Coalesced [220] ultoa::value#26 ← ultoa::value#16 +Coalesced [221] ultoa::buffer#34 ← ultoa::buffer#11 +Coalesced [222] ultoa::digit_value#5 ← ultoa::digit_value#0 +Coalesced [231] ultoa::value#25 ← ultoa::value#0 +Coalesced [232] ultoa::buffer#33 ← ultoa::buffer#4 +Coalesced (already) [233] ultoa::digit#18 ← ultoa::digit#14 +Coalesced (already) [234] ultoa::digit#21 ← ultoa::digit#15 +Coalesced (already) [235] ultoa::value#27 ← ultoa::value#21 +Coalesced (already) [236] ultoa::buffer#35 ← ultoa::buffer#28 +Coalesced (already) [237] ultoa::digit_value#6 ← ultoa::digit_value#3 +Coalesced [238] ultoa_append::value#6 ← ultoa_append::value#0 +Coalesced [245] ultoa_append::value#7 ← ultoa_append::value#1 +Coalesced [246] ultoa_append::digit#5 ← ultoa_append::digit#1 +Coalesced [248] divr16u::dividend#9 ← divr16u::dividend#1 +Coalesced [254] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [255] divr16u::dividend#10 ← divr16u::dividend#2 +Coalesced [262] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [263] divr16u::dividend#11 ← divr16u::dividend#5 +Coalesced [270] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [277] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [278] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [284] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [285] divr16u::dividend#12 ← divr16u::dividend#0 +Coalesced [286] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [287] divr16u::i#7 ← divr16u::i#1 +Coalesced [288] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [289] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [290] divr16u::rem#15 ← divr16u::rem#0 +Coalesced [309] memset::dst#5 ← memset::dst#1 +Coalesced down to 31 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @8 Culled Empty Block (label) @12 @@ -3317,21 +3480,31 @@ Culled Empty Block (label) @50 Culled Empty Block (label) @52 Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@37 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@44 +Culled Empty Block (label) main::@15_1 +Culled Empty Block (label) main::@47 Culled Empty Block (label) main::@45 Culled Empty Block (label) main::@23 -Culled Empty Block (label) main::@47 Culled Empty Block (label) main::@48 Culled Empty Block (label) print_word_decimal::@2 Culled Empty Block (label) utoa::@1 Culled Empty Block (label) utoa::@8 +Culled Empty Block (label) utoa::@18_1 Culled Empty Block (label) utoa::@28 +Culled Empty Block (label) utoa::@31 +Culled Empty Block (label) utoa::@29 +Culled Empty Block (label) utoa::@30 Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) print_ln::@3 Culled Empty Block (label) print_dword_decimal::@2 Culled Empty Block (label) ultoa::@1 Culled Empty Block (label) ultoa::@8 +Culled Empty Block (label) ultoa::@18_1 Culled Empty Block (label) ultoa::@28 +Culled Empty Block (label) ultoa::@31 +Culled Empty Block (label) ultoa::@29 +Culled Empty Block (label) ultoa::@30 Culled Empty Block (label) divr16u::@8 Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@9 @@ -3379,6 +3552,8 @@ Renumbering block main::@41 to main::@25 Renumbering block main::@42 to main::@26 Renumbering block main::@43 to main::@27 Renumbering block main::@46 to main::@28 +Renumbering block main::@49 to main::@29 +Renumbering block main::@50 to main::@30 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -3394,6 +3569,7 @@ Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::@25 Adding NOP phi() at start of main::@27 Adding NOP phi() at start of main::@28 +Adding NOP phi() at start of main::@10 Adding NOP phi() at start of print_word_decimal::@1 Adding NOP phi() at start of utoa Adding NOP phi() at start of utoa_append @@ -3431,7 +3607,7 @@ main::@16: scope:[main] from main::@15 [11] call print_ln to:main::@17 main::@17: scope:[main] from main::@16 - [12] (byte*~) print_char_cursor#90 ← (byte*) print_line_cursor#1 + [12] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 [13] call print_str to:main::@18 main::@18: scope:[main] from main::@17 @@ -3449,380 +3625,404 @@ main::@20: scope:[main] from main::@19 main::@21: scope:[main] from main::@20 [20] phi() [21] call clock_start - to:main::@1 -main::@1: scope:[main] from main::@21 main::@4 - [22] (byte*) main::sieve_i#2 ← phi( main::@21/(const byte*) sieve#0+(byte) 2 main::@4/(byte*) main::sieve_i#1 ) - [22] (word) main::i#12 ← phi( main::@21/(byte) 2 main::@4/(word) main::i#2 ) - [23] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [24] phi() - [25] call clock - [26] (dword) clock::return#2 ← (dword) clock::return#0 - to:main::@22 -main::@22: scope:[main] from main::@3 - [27] (dword~) main::$10 ← (dword) clock::return#2 - [28] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 - [29] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 - [30] call div32u16u - [31] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 - to:main::@23 -main::@23: scope:[main] from main::@22 - [32] (dword~) main::$14 ← (dword) div32u16u::return#2 - [33] (word) main::sec100s#0 ← (word)(dword~) main::$14 - [34] (byte*~) print_char_cursor#91 ← (byte*) print_line_cursor#1 - [35] call print_str - to:main::@24 -main::@24: scope:[main] from main::@23 - [36] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 - [37] call print_word_decimal - to:main::@25 -main::@25: scope:[main] from main::@24 - [38] phi() - [39] call print_str - to:main::@26 -main::@26: scope:[main] from main::@25 - [40] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 - [41] call print_dword_decimal - to:main::@27 -main::@27: scope:[main] from main::@26 - [42] phi() - [43] call print_ln - to:main::@8 -main::@8: scope:[main] from main::@11 main::@27 - [44] (byte*) print_char_cursor#62 ← phi( main::@11/(byte*) print_char_cursor#78 main::@27/(byte*) print_line_cursor#1 ) - [44] (word) main::i#10 ← phi( main::@11/(word) main::i#3 main::@27/(byte) 2 ) - [45] if((word) main::i#10<(word) $514) goto main::@9 - to:main::@10 -main::@10: scope:[main] from main::@8 - [46] (byte*~) print_char_cursor#89 ← (byte*) print_char_cursor#62 - [47] call print_str - to:main::@13 -main::@13: scope:[main] from main::@10 main::@13 - [48] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) - to:main::@13 -main::@9: scope:[main] from main::@8 - [49] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#10 - [50] if((byte) 0!=*((byte*~) main::$38)) goto main::@11 - to:main::@12 -main::@12: scope:[main] from main::@9 - [51] (word) print_word_decimal::w#2 ← (word) main::i#10 - [52] (byte*~) print_char_cursor#97 ← (byte*) print_char_cursor#62 - [53] call print_word_decimal - to:main::@28 -main::@28: scope:[main] from main::@12 - [54] phi() - [55] call print_char - to:main::@11 -main::@11: scope:[main] from main::@28 main::@9 - [56] (byte*) print_char_cursor#78 ← phi( main::@9/(byte*) print_char_cursor#62 main::@28/(byte*) print_char_cursor#10 ) - [57] (word) main::i#3 ← ++ (word) main::i#10 - to:main::@8 -main::@2: scope:[main] from main::@1 - [58] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@4 + to:main::@2 +main::@2: scope:[main] from main::@1 main::@21 + [22] (byte*) main::sieve_i#11 ← phi( main::@1/(byte*) main::sieve_i#1 main::@21/(const byte*) sieve#0+(byte) 2 ) + [22] (word) main::i#17 ← phi( main::@1/(word) main::i#12 main::@21/(byte) 2 ) + [23] if((byte) 0!=*((byte*) main::sieve_i#11)) goto main::@4 to:main::@7 main::@7: scope:[main] from main::@2 - [59] (word) main::j#0 ← (word) main::i#12 << (byte) 1 - [60] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 + [24] (word) main::j#0 ← (word) main::i#17 << (byte) 1 + [25] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 to:main::@5 main::@5: scope:[main] from main::@6 main::@7 - [61] (byte*) main::s#2 ← phi( main::@7/(byte*) main::s#0 main::@6/(byte*) main::s#1 ) - [61] (word) main::j#2 ← phi( main::@7/(word) main::j#0 main::@6/(word) main::j#1 ) - [62] if((word) main::j#2<(const word) COUNT#0) goto main::@6 + [26] (byte*) main::s#2 ← phi( main::@7/(byte*) main::s#0 main::@6/(byte*) main::s#1 ) + [26] (word) main::j#2 ← phi( main::@7/(word) main::j#0 main::@6/(word) main::j#1 ) + [27] if((word) main::j#2<(const word) COUNT#0) goto main::@6 to:main::@4 main::@4: scope:[main] from main::@2 main::@5 - [63] (word) main::i#2 ← ++ (word) main::i#12 - [64] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#2 + [28] (word) main::i#12 ← ++ (word) main::i#17 + [29] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#11 to:main::@1 +main::@1: scope:[main] from main::@4 + [30] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [31] phi() + [32] call clock + [33] (dword) clock::return#2 ← (dword) clock::return#0 + to:main::@22 +main::@22: scope:[main] from main::@3 + [34] (dword~) main::$10 ← (dword) clock::return#2 + [35] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 + [36] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 + [37] call div32u16u + [38] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 + to:main::@23 +main::@23: scope:[main] from main::@22 + [39] (dword~) main::$14 ← (dword) div32u16u::return#2 + [40] (word) main::sec100s#0 ← (word)(dword~) main::$14 + [41] (byte*~) print_char_cursor#95 ← (byte*) print_line_cursor#1 + [42] call print_str + to:main::@24 +main::@24: scope:[main] from main::@23 + [43] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 + [44] call print_word_decimal + to:main::@25 +main::@25: scope:[main] from main::@24 + [45] phi() + [46] call print_str + to:main::@26 +main::@26: scope:[main] from main::@25 + [47] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 + [48] call print_dword_decimal + to:main::@27 +main::@27: scope:[main] from main::@26 + [49] phi() + [50] call print_ln + to:main::@9 +main::@9: scope:[main] from main::@27 main::@29 + [51] (byte*) print_char_cursor#90 ← phi( main::@29/(byte*~) print_char_cursor#104 main::@27/(byte*) print_line_cursor#1 ) + [51] (word) main::i#22 ← phi( main::@29/(word) main::i#10 main::@27/(byte) 2 ) + [52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22 + [53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30 + to:main::@12 +main::@12: scope:[main] from main::@9 + [54] (word) print_word_decimal::w#2 ← (word) main::i#22 + [55] (byte*~) print_char_cursor#101 ← (byte*) print_char_cursor#90 + [56] call print_word_decimal + to:main::@28 +main::@28: scope:[main] from main::@12 + [57] phi() + [58] call print_char + to:main::@11 +main::@11: scope:[main] from main::@28 main::@30 + [59] (byte*) print_char_cursor#62 ← phi( main::@30/(byte*~) print_char_cursor#106 main::@28/(byte*) print_char_cursor#10 ) + [60] (word) main::i#10 ← ++ (word) main::i#22 + to:main::@8 +main::@8: scope:[main] from main::@11 + [61] if((word) main::i#10<(word) $514) goto main::@29 + to:main::@10 +main::@10: scope:[main] from main::@8 + [62] phi() + [63] call print_str + to:main::@13 +main::@13: scope:[main] from main::@10 main::@13 + [64] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) + to:main::@13 +main::@29: scope:[main] from main::@8 + [65] (byte*~) print_char_cursor#104 ← (byte*) print_char_cursor#62 + to:main::@9 +main::@30: scope:[main] from main::@9 + [66] (byte*~) print_char_cursor#106 ← (byte*) print_char_cursor#90 + to:main::@11 main::@6: scope:[main] from main::@5 - [65] *((byte*) main::s#2) ← (byte) 1 - [66] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#12 - [67] (word) main::j#1 ← (word) main::j#2 + (word) main::i#12 + [67] *((byte*) main::s#2) ← (byte) 1 + [68] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 + [69] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 to:main::@5 -print_char: scope:[print_char] from main::@28 - [68] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 - [69] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#2 - to:print_char::@return -print_char::@return: scope:[print_char] from print_char - [70] return - to:@return -print_word_decimal: scope:[print_word_decimal] from main::@12 main::@18 main::@24 - [71] (byte*) print_char_cursor#58 ← phi( main::@12/(byte*~) print_char_cursor#97 main::@18/(byte*) print_char_cursor#2 main::@24/(byte*) print_char_cursor#2 ) - [71] (word) print_word_decimal::w#3 ← phi( main::@12/(word) print_word_decimal::w#2 main::@18/(const word) COUNT#0 main::@24/(word) print_word_decimal::w#1 ) - [72] (word) utoa::value#1 ← (word) print_word_decimal::w#3 - [73] call utoa - to:print_word_decimal::@1 -print_word_decimal::@1: scope:[print_word_decimal] from print_word_decimal - [74] phi() - [75] call print_str - to:print_word_decimal::@return -print_word_decimal::@return: scope:[print_word_decimal] from print_word_decimal::@1 - [76] return - to:@return print_str: scope:[print_str] from main::@10 main::@15 main::@17 main::@23 main::@25 print_dword_decimal::@1 print_word_decimal::@1 - [77] (byte*) print_char_cursor#66 ← phi( main::@10/(byte*~) print_char_cursor#89 main::@15/(byte*) 1024 main::@17/(byte*~) print_char_cursor#90 main::@23/(byte*~) print_char_cursor#91 main::@25/(byte*) print_char_cursor#2 print_dword_decimal::@1/(byte*) print_char_cursor#2 print_word_decimal::@1/(byte*) print_char_cursor#58 ) - [77] (byte*) print_str::str#10 ← phi( main::@10/(const string) main::str4 main::@15/(const string) main::str main::@17/(const string) main::str1 main::@23/(const string) main::str2 main::@25/(const string) main::str3 print_dword_decimal::@1/(const byte[$b]) decimal_digits_long#0 print_word_decimal::@1/(const byte[6]) decimal_digits#0 ) + [70] (byte*) print_char_cursor#66 ← phi( main::@10/(byte*) print_char_cursor#62 main::@15/(byte*) 1024 main::@17/(byte*~) print_char_cursor#94 main::@23/(byte*~) print_char_cursor#95 main::@25/(byte*) print_char_cursor#2 print_dword_decimal::@1/(byte*) print_char_cursor#2 print_word_decimal::@1/(byte*) print_char_cursor#58 ) + [70] (byte*) print_str::str#10 ← phi( main::@10/(const string) main::str4 main::@15/(const string) main::str main::@17/(const string) main::str1 main::@23/(const string) main::str2 main::@25/(const string) main::str3 print_dword_decimal::@1/(const byte[$b]) decimal_digits_long#0 print_word_decimal::@1/(const byte[6]) decimal_digits#0 ) to:print_str::@1 print_str::@1: scope:[print_str] from print_str print_str::@2 - [78] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#66 print_str::@2/(byte*) print_char_cursor#1 ) - [78] (byte*) print_str::str#8 ← phi( print_str/(byte*) print_str::str#10 print_str::@2/(byte*) print_str::str#0 ) - [79] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 + [71] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#66 print_str::@2/(byte*) print_char_cursor#1 ) + [71] (byte*) print_str::str#8 ← phi( print_str/(byte*) print_str::str#10 print_str::@2/(byte*) print_str::str#0 ) + [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 - [80] return + [73] return to:@return print_str::@2: scope:[print_str] from print_str::@1 - [81] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) - [82] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 - [83] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#8 + [74] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) + [75] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 + [76] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#8 to:print_str::@1 -utoa: scope:[utoa] from print_word_decimal - [84] phi() - to:utoa::@1 -utoa::@1: scope:[utoa] from utoa utoa::@4 - [85] (byte*) utoa::buffer#11 ← phi( utoa::@4/(byte*) utoa::buffer#14 utoa/(const byte[6]) decimal_digits#0 ) - [85] (byte) utoa::started#2 ← phi( utoa::@4/(byte) utoa::started#4 utoa/(byte) 0 ) - [85] (word) utoa::value#2 ← phi( utoa::@4/(word) utoa::value#6 utoa/(word) utoa::value#1 ) - [85] (byte) utoa::digit#2 ← phi( utoa::@4/(byte) utoa::digit#1 utoa/(byte) 0 ) - [86] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 - to:utoa::@3 -utoa::@3: scope:[utoa] from utoa::@1 - [87] (byte~) utoa::$4 ← (byte)(word) utoa::value#2 - [88] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) - [89] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 - [90] *((byte*) utoa::buffer#3) ← (byte) 0 - to:utoa::@return -utoa::@return: scope:[utoa] from utoa::@3 - [91] return +print_char: scope:[print_char] from main::@28 + [77] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 + [78] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#2 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [79] return to:@return -utoa::@2: scope:[utoa] from utoa::@1 - [92] (byte~) utoa::$11 ← (byte) utoa::digit#2 << (byte) 1 - [93] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) - [94] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 +print_word_decimal: scope:[print_word_decimal] from main::@12 main::@18 main::@24 + [80] (byte*) print_char_cursor#58 ← phi( main::@12/(byte*~) print_char_cursor#101 main::@18/(byte*) print_char_cursor#2 main::@24/(byte*) print_char_cursor#2 ) + [80] (word) print_word_decimal::w#3 ← phi( main::@12/(word) print_word_decimal::w#2 main::@18/(const word) COUNT#0 main::@24/(word) print_word_decimal::w#1 ) + [81] (word) utoa::value#1 ← (word) print_word_decimal::w#3 + [82] call utoa + to:print_word_decimal::@1 +print_word_decimal::@1: scope:[print_word_decimal] from print_word_decimal + [83] phi() + [84] call print_str + to:print_word_decimal::@return +print_word_decimal::@return: scope:[print_word_decimal] from print_word_decimal::@1 + [85] return + to:@return +utoa: scope:[utoa] from print_word_decimal + [86] phi() + to:utoa::@19_1 +utoa::@19_1: scope:[utoa] from utoa + [87] (word) utoa::digit_value#4 ← *((const word[]) RADIX_DECIMAL_VALUES#0) to:utoa::@7 -utoa::@7: scope:[utoa] from utoa::@2 - [95] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 +utoa::@7: scope:[utoa] from utoa::@19_1 utoa::@2 + [88] (word) utoa::digit_value#3 ← phi( utoa::@2/(word) utoa::digit_value#0 utoa::@19_1/(word) utoa::digit_value#4 ) + [88] (byte*) utoa::buffer#28 ← phi( utoa::@2/(byte*) utoa::buffer#11 utoa::@19_1/(const byte[6]) decimal_digits#0 ) + [88] (byte) utoa::started#8 ← phi( utoa::@2/(byte) utoa::started#2 utoa::@19_1/(byte) 0 ) + [88] (word) utoa::value#21 ← phi( utoa::@2/(word) utoa::value#16 utoa::@19_1/(word) utoa::value#1 ) + [88] (byte) utoa::digit#15 ← phi( utoa::@2/(byte) utoa::digit#1 utoa::@19_1/(byte) 0 ) + [89] if((word) utoa::value#21>=(word) utoa::digit_value#3) goto utoa::@5 to:utoa::@4 utoa::@4: scope:[utoa] from utoa::@6 utoa::@7 - [96] (byte*) utoa::buffer#14 ← phi( utoa::@7/(byte*) utoa::buffer#11 utoa::@6/(byte*) utoa::buffer#4 ) - [96] (byte) utoa::started#4 ← phi( utoa::@7/(byte) utoa::started#2 utoa::@6/(byte) 1 ) - [96] (word) utoa::value#6 ← phi( utoa::@7/(word) utoa::value#2 utoa::@6/(word) utoa::value#0 ) - [97] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 + [90] (byte) utoa::digit#13 ← phi( utoa::@6/(byte) utoa::digit#14 utoa::@7/(byte) utoa::digit#15 ) + [90] (byte*) utoa::buffer#11 ← phi( utoa::@7/(byte*) utoa::buffer#28 utoa::@6/(byte*) utoa::buffer#4 ) + [90] (byte) utoa::started#2 ← phi( utoa::@7/(byte) utoa::started#8 utoa::@6/(byte) 1 ) + [90] (word) utoa::value#16 ← phi( utoa::@7/(word) utoa::value#21 utoa::@6/(word) utoa::value#0 ) + [91] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#13 to:utoa::@1 +utoa::@1: scope:[utoa] from utoa::@4 + [92] if((byte) utoa::digit#1<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 + to:utoa::@3 +utoa::@3: scope:[utoa] from utoa::@1 + [93] (byte~) utoa::$4 ← (byte)(word) utoa::value#16 + [94] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) + [95] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 + [96] *((byte*) utoa::buffer#3) ← (byte) 0 + to:utoa::@return +utoa::@return: scope:[utoa] from utoa::@3 + [97] return + to:@return +utoa::@2: scope:[utoa] from utoa::@1 + [98] (byte~) utoa::$11 ← (byte) utoa::digit#1 << (byte) 1 + [99] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) + [100] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 + to:utoa::@7 utoa::@5: scope:[utoa] from utoa::@2 utoa::@7 - [98] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 - [99] (word) utoa_append::value#0 ← (word) utoa::value#2 - [100] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 - [101] call utoa_append - [102] (word) utoa_append::return#0 ← (word) utoa_append::value#2 + [101] (word) utoa::digit_value#2 ← phi( utoa::@2/(word) utoa::digit_value#0 utoa::@7/(word) utoa::digit_value#3 ) + [101] (byte*) utoa::buffer#29 ← phi( utoa::@2/(byte*) utoa::buffer#11 utoa::@7/(byte*) utoa::buffer#28 ) + [101] (word) utoa::value#22 ← phi( utoa::@2/(word) utoa::value#16 utoa::@7/(word) utoa::value#21 ) + [101] (byte) utoa::digit#14 ← phi( utoa::@2/(byte) utoa::digit#1 utoa::@7/(byte) utoa::digit#15 ) + [102] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#29 + [103] (word) utoa_append::value#0 ← (word) utoa::value#22 + [104] (word) utoa_append::sub#0 ← (word) utoa::digit_value#2 + [105] call utoa_append + [106] (word) utoa_append::return#0 ← (word) utoa_append::value#2 to:utoa::@6 utoa::@6: scope:[utoa] from utoa::@5 - [103] (word) utoa::value#0 ← (word) utoa_append::return#0 - [104] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 + [107] (word) utoa::value#0 ← (word) utoa_append::return#0 + [108] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#29 to:utoa::@4 utoa_append: scope:[utoa_append] from utoa::@5 - [105] phi() + [109] phi() to:utoa_append::@1 utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 - [106] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 ) - [106] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 ) - [107] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 + [110] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 ) + [110] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 ) + [111] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 to:utoa_append::@3 utoa_append::@3: scope:[utoa_append] from utoa_append::@1 - [108] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) + [112] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) to:utoa_append::@return utoa_append::@return: scope:[utoa_append] from utoa_append::@3 - [109] return + [113] return to:@return utoa_append::@2: scope:[utoa_append] from utoa_append::@1 - [110] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 - [111] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 + [114] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 + [115] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 to:utoa_append::@1 print_ln: scope:[print_ln] from main::@16 main::@19 main::@27 - [112] (byte*) print_line_cursor#21 ← phi( main::@16/(byte*) 1024 main::@19/(byte*) print_line_cursor#1 main::@27/(byte*) print_line_cursor#1 ) + [116] (byte*) print_line_cursor#21 ← phi( main::@16/(byte*) 1024 main::@19/(byte*) print_line_cursor#1 main::@27/(byte*) print_line_cursor#1 ) to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 - [113] (byte*) print_line_cursor#11 ← phi( print_ln/(byte*) print_line_cursor#21 print_ln::@1/(byte*) print_line_cursor#1 ) - [114] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 - [115] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 + [117] (byte*) print_line_cursor#11 ← phi( print_ln/(byte*) print_line_cursor#21 print_ln::@1/(byte*) print_line_cursor#1 ) + [118] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 + [119] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 to:print_ln::@return print_ln::@return: scope:[print_ln] from print_ln::@1 - [116] return + [120] return to:@return print_dword_decimal: scope:[print_dword_decimal] from main::@26 - [117] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 - [118] call ultoa + [121] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 + [122] call ultoa to:print_dword_decimal::@1 print_dword_decimal::@1: scope:[print_dword_decimal] from print_dword_decimal - [119] phi() - [120] call print_str + [123] phi() + [124] call print_str to:print_dword_decimal::@return print_dword_decimal::@return: scope:[print_dword_decimal] from print_dword_decimal::@1 - [121] return + [125] return to:@return ultoa: scope:[ultoa] from print_dword_decimal - [122] phi() - to:ultoa::@1 -ultoa::@1: scope:[ultoa] from ultoa ultoa::@4 - [123] (byte*) ultoa::buffer#11 ← phi( ultoa::@4/(byte*) ultoa::buffer#14 ultoa/(const byte[$b]) decimal_digits_long#0 ) - [123] (byte) ultoa::started#2 ← phi( ultoa::@4/(byte) ultoa::started#4 ultoa/(byte) 0 ) - [123] (dword) ultoa::value#2 ← phi( ultoa::@4/(dword) ultoa::value#6 ultoa/(dword) ultoa::value#1 ) - [123] (byte) ultoa::digit#2 ← phi( ultoa::@4/(byte) ultoa::digit#1 ultoa/(byte) 0 ) - [124] if((byte) ultoa::digit#2<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 - to:ultoa::@3 -ultoa::@3: scope:[ultoa] from ultoa::@1 - [125] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#2 - [126] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) - [127] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 - [128] *((byte*) ultoa::buffer#3) ← (byte) 0 - to:ultoa::@return -ultoa::@return: scope:[ultoa] from ultoa::@3 - [129] return - to:@return -ultoa::@2: scope:[ultoa] from ultoa::@1 - [130] (byte~) ultoa::$11 ← (byte) ultoa::digit#2 << (byte) 2 - [131] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) - [132] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 + [126] phi() + to:ultoa::@19_1 +ultoa::@19_1: scope:[ultoa] from ultoa + [127] (dword) ultoa::digit_value#4 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0) to:ultoa::@7 -ultoa::@7: scope:[ultoa] from ultoa::@2 - [133] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 +ultoa::@7: scope:[ultoa] from ultoa::@19_1 ultoa::@2 + [128] (dword) ultoa::digit_value#3 ← phi( ultoa::@2/(dword) ultoa::digit_value#0 ultoa::@19_1/(dword) ultoa::digit_value#4 ) + [128] (byte*) ultoa::buffer#28 ← phi( ultoa::@2/(byte*) ultoa::buffer#11 ultoa::@19_1/(const byte[$b]) decimal_digits_long#0 ) + [128] (byte) ultoa::started#8 ← phi( ultoa::@2/(byte) ultoa::started#2 ultoa::@19_1/(byte) 0 ) + [128] (dword) ultoa::value#21 ← phi( ultoa::@2/(dword) ultoa::value#16 ultoa::@19_1/(dword) ultoa::value#1 ) + [128] (byte) ultoa::digit#15 ← phi( ultoa::@2/(byte) ultoa::digit#1 ultoa::@19_1/(byte) 0 ) + [129] if((dword) ultoa::value#21>=(dword) ultoa::digit_value#3) goto ultoa::@5 to:ultoa::@4 ultoa::@4: scope:[ultoa] from ultoa::@6 ultoa::@7 - [134] (byte*) ultoa::buffer#14 ← phi( ultoa::@7/(byte*) ultoa::buffer#11 ultoa::@6/(byte*) ultoa::buffer#4 ) - [134] (byte) ultoa::started#4 ← phi( ultoa::@7/(byte) ultoa::started#2 ultoa::@6/(byte) 1 ) - [134] (dword) ultoa::value#6 ← phi( ultoa::@7/(dword) ultoa::value#2 ultoa::@6/(dword) ultoa::value#0 ) - [135] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#2 + [130] (byte) ultoa::digit#13 ← phi( ultoa::@6/(byte) ultoa::digit#14 ultoa::@7/(byte) ultoa::digit#15 ) + [130] (byte*) ultoa::buffer#11 ← phi( ultoa::@7/(byte*) ultoa::buffer#28 ultoa::@6/(byte*) ultoa::buffer#4 ) + [130] (byte) ultoa::started#2 ← phi( ultoa::@7/(byte) ultoa::started#8 ultoa::@6/(byte) 1 ) + [130] (dword) ultoa::value#16 ← phi( ultoa::@7/(dword) ultoa::value#21 ultoa::@6/(dword) ultoa::value#0 ) + [131] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#13 to:ultoa::@1 +ultoa::@1: scope:[ultoa] from ultoa::@4 + [132] if((byte) ultoa::digit#1<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 + to:ultoa::@3 +ultoa::@3: scope:[ultoa] from ultoa::@1 + [133] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#16 + [134] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) + [135] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 + [136] *((byte*) ultoa::buffer#3) ← (byte) 0 + to:ultoa::@return +ultoa::@return: scope:[ultoa] from ultoa::@3 + [137] return + to:@return +ultoa::@2: scope:[ultoa] from ultoa::@1 + [138] (byte~) ultoa::$11 ← (byte) ultoa::digit#1 << (byte) 2 + [139] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) + [140] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 + to:ultoa::@7 ultoa::@5: scope:[ultoa] from ultoa::@2 ultoa::@7 - [136] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 - [137] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 - [138] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 - [139] call ultoa_append - [140] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 + [141] (dword) ultoa::digit_value#2 ← phi( ultoa::@2/(dword) ultoa::digit_value#0 ultoa::@7/(dword) ultoa::digit_value#3 ) + [141] (byte*) ultoa::buffer#29 ← phi( ultoa::@2/(byte*) ultoa::buffer#11 ultoa::@7/(byte*) ultoa::buffer#28 ) + [141] (dword) ultoa::value#22 ← phi( ultoa::@2/(dword) ultoa::value#16 ultoa::@7/(dword) ultoa::value#21 ) + [141] (byte) ultoa::digit#14 ← phi( ultoa::@2/(byte) ultoa::digit#1 ultoa::@7/(byte) ultoa::digit#15 ) + [142] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#29 + [143] (dword) ultoa_append::value#0 ← (dword) ultoa::value#22 + [144] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#2 + [145] call ultoa_append + [146] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 to:ultoa::@6 ultoa::@6: scope:[ultoa] from ultoa::@5 - [141] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 - [142] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 + [147] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 + [148] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#29 to:ultoa::@4 ultoa_append: scope:[ultoa_append] from ultoa::@5 - [143] phi() + [149] phi() to:ultoa_append::@1 ultoa_append::@1: scope:[ultoa_append] from ultoa_append ultoa_append::@2 - [144] (byte) ultoa_append::digit#2 ← phi( ultoa_append/(byte) 0 ultoa_append::@2/(byte) ultoa_append::digit#1 ) - [144] (dword) ultoa_append::value#2 ← phi( ultoa_append/(dword) ultoa_append::value#0 ultoa_append::@2/(dword) ultoa_append::value#1 ) - [145] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 + [150] (byte) ultoa_append::digit#2 ← phi( ultoa_append/(byte) 0 ultoa_append::@2/(byte) ultoa_append::digit#1 ) + [150] (dword) ultoa_append::value#2 ← phi( ultoa_append/(dword) ultoa_append::value#0 ultoa_append::@2/(dword) ultoa_append::value#1 ) + [151] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 to:ultoa_append::@3 ultoa_append::@3: scope:[ultoa_append] from ultoa_append::@1 - [146] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) + [152] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) to:ultoa_append::@return ultoa_append::@return: scope:[ultoa_append] from ultoa_append::@3 - [147] return + [153] return to:@return ultoa_append::@2: scope:[ultoa_append] from ultoa_append::@1 - [148] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 - [149] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 + [154] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 + [155] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 to:ultoa_append::@1 div32u16u: scope:[div32u16u] from main::@22 - [150] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 - [151] call divr16u - [152] (word) divr16u::return#2 ← (word) divr16u::return#0 + [156] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 + [157] call divr16u + [158] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div32u16u::@1 div32u16u::@1: scope:[div32u16u] from div32u16u - [153] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 - [154] (word) divr16u::dividend#2 ← < (dword) div32u16u::dividend#0 - [155] (word) divr16u::rem#4 ← (word) rem16u#1 - [156] call divr16u - [157] (word) divr16u::return#3 ← (word) divr16u::return#0 + [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 + [160] (word) divr16u::dividend#2 ← < (dword) div32u16u::dividend#0 + [161] (word) divr16u::rem#4 ← (word) rem16u#1 + [162] call divr16u + [163] (word) divr16u::return#3 ← (word) divr16u::return#0 to:div32u16u::@2 div32u16u::@2: scope:[div32u16u] from div32u16u::@1 - [158] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - [159] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 + [164] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + [165] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@2 - [160] return + [166] return to:@return divr16u: scope:[divr16u] from div32u16u div32u16u::@1 - [161] (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@1/(word) divr16u::dividend#2 ) - [161] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) + [167] (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@1/(word) divr16u::dividend#2 ) + [167] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [162] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [162] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) - [162] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) - [162] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) - [163] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 - [164] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 - [165] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 - [166] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 + [168] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) + [168] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [168] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) + [168] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) + [169] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 + [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 + [171] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 + [172] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [167] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 + [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [168] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) - [169] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 - [170] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 - [171] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 + [174] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) + [175] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 + [176] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 + [177] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [172] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 - [173] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 + [178] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 + [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [174] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - [174] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) - [175] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 - [176] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 + [180] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) + [180] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) + [181] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 + [182] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 - [177] (word) rem16u#1 ← (word) divr16u::rem#11 + [183] (word) rem16u#1 ← (word) divr16u::rem#11 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - [178] return + [184] return to:@return clock: scope:[clock] from main::@3 - [179] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) + [185] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) to:clock::@return clock::@return: scope:[clock] from clock - [180] return - to:@return -clock_start: scope:[clock_start] from main::@21 - [181] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 - [182] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 - [183] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff - [184] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 - [185] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 - to:clock_start::@return -clock_start::@return: scope:[clock_start] from clock_start [186] return to:@return +clock_start: scope:[clock_start] from main::@21 + [187] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 + [188] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 + [189] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff + [190] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 + [191] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 + to:clock_start::@return +clock_start::@return: scope:[clock_start] from clock_start + [192] return + to:@return memset: scope:[memset] from main::@20 print_cls - [187] (byte) memset::c#4 ← phi( main::@20/(byte) 0 print_cls/(byte) ' ' ) - [187] (void*) memset::str#3 ← phi( main::@20/(void*)(const byte*) sieve#0 print_cls/(void*)(byte*) 1024 ) - [187] (word) memset::num#2 ← phi( main::@20/(const word) COUNT#0 print_cls/(word) $3e8 ) - [188] if((word) memset::num#2<=(byte) 0) goto memset::@return + [193] (byte) memset::c#4 ← phi( main::@20/(byte) 0 print_cls/(byte) ' ' ) + [193] (void*) memset::str#3 ← phi( main::@20/(void*)(const byte*) sieve#0 print_cls/(void*)(byte*) 1024 ) + [193] (word) memset::num#2 ← phi( main::@20/(const word) COUNT#0 print_cls/(word) $3e8 ) + [194] if((word) memset::num#2<=(byte) 0) goto memset::@return to:memset::@1 memset::@1: scope:[memset] from memset - [189] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 - [190] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 + [195] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 + [196] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [191] (byte*) memset::dst#2 ← phi( memset::@1/(byte*~) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) - [192] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + [197] (byte*) memset::dst#2 ← phi( memset::@1/(byte*~) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [198] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset memset::@2 - [193] return + [199] return to:@return memset::@3: scope:[memset] from memset::@2 - [194] *((byte*) memset::dst#2) ← (byte) memset::c#4 - [195] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [200] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [201] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@2 print_cls: scope:[print_cls] from main::@14 - [196] phi() - [197] call memset + [202] phi() + [203] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [198] return + [204] return to:@return @@ -3908,10 +4108,10 @@ VARIABLE REGISTER WEIGHTS (dword) main::cyclecount (dword) main::cyclecount#0 0.5 (word) main::i -(word) main::i#10 5.5 -(word) main::i#12 24.6 -(word) main::i#2 11.0 -(word) main::i#3 22.0 +(word) main::i#10 11.0 +(word) main::i#12 11.0 +(word) main::i#17 26.11111111111111 +(word) main::i#22 4.4 (word) main::j (word) main::j#0 16.5 (word) main::j#1 202.0 @@ -3923,8 +4123,8 @@ VARIABLE REGISTER WEIGHTS (word) main::sec100s (word) main::sec100s#0 1.3333333333333333 (byte*) main::sieve_i -(byte*) main::sieve_i#1 22.0 -(byte*) main::sieve_i#2 3.0 +(byte*) main::sieve_i#1 11.0 +(byte*) main::sieve_i#11 3.3000000000000003 (word~) main::toD0181_$0 (number~) main::toD0181_$1 (number~) main::toD0181_$2 @@ -3956,15 +4156,16 @@ VARIABLE REGISTER WEIGHTS (byte*) print_char_cursor (byte*) print_char_cursor#1 101.0 (byte*) print_char_cursor#10 4.333333333333333 +(byte*~) print_char_cursor#101 22.0 +(byte*~) print_char_cursor#104 22.0 +(byte*~) print_char_cursor#106 22.0 (byte*) print_char_cursor#2 10.25 (byte*) print_char_cursor#58 4.25 -(byte*) print_char_cursor#62 7.4 +(byte*) print_char_cursor#62 8.75 (byte*) print_char_cursor#66 14.0 -(byte*) print_char_cursor#78 16.5 -(byte*~) print_char_cursor#89 4.0 -(byte*~) print_char_cursor#90 4.0 -(byte*~) print_char_cursor#91 4.0 -(byte*~) print_char_cursor#97 22.0 +(byte*) print_char_cursor#90 8.75 +(byte*~) print_char_cursor#94 4.0 +(byte*~) print_char_cursor#95 4.0 (void()) print_cls() (void()) print_dword_decimal((dword) print_dword_decimal::w) (dword) print_dword_decimal::w @@ -3992,26 +4193,33 @@ VARIABLE REGISTER WEIGHTS (byte~) ultoa::$11 22.0 (byte~) ultoa::$4 4.0 (byte*) ultoa::buffer -(byte*) ultoa::buffer#11 3.4285714285714284 -(byte*) ultoa::buffer#14 16.5 +(byte*) ultoa::buffer#11 6.0 +(byte*) ultoa::buffer#28 16.5 +(byte*) ultoa::buffer#29 6.285714285714286 (byte*) ultoa::buffer#3 4.0 (byte*) ultoa::buffer#4 22.0 (byte) ultoa::digit -(byte) ultoa::digit#1 22.0 -(byte) ultoa::digit#2 3.142857142857143 +(byte) ultoa::digit#1 11.0 +(byte) ultoa::digit#13 33.0 +(byte) ultoa::digit#14 4.125 +(byte) ultoa::digit#15 16.5 (dword) ultoa::digit_value -(dword) ultoa::digit_value#0 6.6000000000000005 +(dword) ultoa::digit_value#0 16.5 +(dword) ultoa::digit_value#2 11.0 +(dword) ultoa::digit_value#3 17.5 +(dword) ultoa::digit_value#4 4.0 (dword*) ultoa::digit_values (byte) ultoa::max_digits (byte) ultoa::radix (byte) ultoa::started (byte) ultoa::started#2 5.5 -(byte) ultoa::started#4 11.0 +(byte) ultoa::started#8 11.0 (dword) ultoa::value (dword) ultoa::value#0 11.0 -(dword) ultoa::value#1 2.0 -(dword) ultoa::value#2 6.571428571428571 -(dword) ultoa::value#6 16.5 +(dword) ultoa::value#1 1.3333333333333333 +(dword) ultoa::value#16 7.333333333333333 +(dword) ultoa::value#21 23.0 +(dword) ultoa::value#22 16.5 (dword()) ultoa_append((byte*) ultoa_append::buffer , (dword) ultoa_append::value , (dword) ultoa_append::sub) (byte*) ultoa_append::buffer (byte*) ultoa_append::buffer#0 1.625 @@ -4030,26 +4238,33 @@ VARIABLE REGISTER WEIGHTS (byte~) utoa::$11 202.0 (byte~) utoa::$4 4.0 (byte*) utoa::buffer -(byte*) utoa::buffer#11 29.142857142857146 -(byte*) utoa::buffer#14 151.5 +(byte*) utoa::buffer#11 51.0 +(byte*) utoa::buffer#28 151.5 +(byte*) utoa::buffer#29 57.714285714285715 (byte*) utoa::buffer#3 4.0 (byte*) utoa::buffer#4 202.0 (byte) utoa::digit -(byte) utoa::digit#1 202.0 -(byte) utoa::digit#2 28.857142857142858 +(byte) utoa::digit#1 101.0 +(byte) utoa::digit#13 303.0 +(byte) utoa::digit#14 37.875 +(byte) utoa::digit#15 151.5 (word) utoa::digit_value -(word) utoa::digit_value#0 60.599999999999994 +(word) utoa::digit_value#0 151.5 +(word) utoa::digit_value#2 101.0 +(word) utoa::digit_value#3 152.5 +(word) utoa::digit_value#4 4.0 (word*) utoa::digit_values (byte) utoa::max_digits (byte) utoa::radix (byte) utoa::started (byte) utoa::started#2 50.5 -(byte) utoa::started#4 101.0 +(byte) utoa::started#8 101.0 (word) utoa::value (word) utoa::value#0 101.0 -(word) utoa::value#1 2.0 -(word) utoa::value#2 58.00000000000001 -(word) utoa::value#6 151.5 +(word) utoa::value#1 1.3333333333333333 +(word) utoa::value#16 67.33333333333333 +(word) utoa::value#21 203.0 +(word) utoa::value#22 151.5 (word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) (byte*) utoa_append::buffer (byte*) utoa_append::buffer#0 12.875 @@ -4066,25 +4281,27 @@ VARIABLE REGISTER WEIGHTS (word) utoa_append::value#2 517.6666666666667 Initial phi equivalence classes -[ main::i#12 main::i#2 ] -[ main::sieve_i#2 main::sieve_i#1 ] -[ main::i#10 main::i#3 ] +[ main::i#17 main::i#12 ] +[ main::sieve_i#11 main::sieve_i#1 ] [ main::j#2 main::j#0 main::j#1 ] [ main::s#2 main::s#0 main::s#1 ] -[ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] -[ print_char_cursor#66 print_char_cursor#89 print_char_cursor#90 print_char_cursor#91 print_char_cursor#58 print_char_cursor#97 print_char_cursor#2 print_char_cursor#1 ] +[ main::i#22 main::i#10 ] +[ print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 ] [ print_str::str#8 print_str::str#10 print_str::str#0 ] -[ utoa::digit#2 utoa::digit#1 ] -[ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] -[ utoa::started#2 utoa::started#4 ] -[ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] +[ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] +[ utoa::started#8 utoa::started#2 ] +[ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] +[ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 ] +[ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 ] +[ utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 ] [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] [ utoa_append::digit#2 utoa_append::digit#1 ] -[ print_line_cursor#11 print_line_cursor#21 print_char_cursor#62 print_char_cursor#78 print_line_cursor#1 print_char_cursor#10 ] -[ ultoa::digit#2 ultoa::digit#1 ] -[ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] -[ ultoa::started#2 ultoa::started#4 ] -[ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] +[ print_line_cursor#11 print_line_cursor#21 print_char_cursor#90 print_char_cursor#104 print_line_cursor#1 ] +[ ultoa::started#8 ultoa::started#2 ] +[ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] +[ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ] +[ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ] +[ ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ] [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] [ ultoa_append::digit#2 ultoa_append::digit#1 ] [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] @@ -4107,14 +4324,12 @@ Added variable main::$38 to zero page equivalence class [ main::$38 ] Added variable utoa::$4 to zero page equivalence class [ utoa::$4 ] Added variable utoa::buffer#3 to zero page equivalence class [ utoa::buffer#3 ] Added variable utoa::$11 to zero page equivalence class [ utoa::$11 ] -Added variable utoa::digit_value#0 to zero page equivalence class [ utoa::digit_value#0 ] Added variable utoa_append::buffer#0 to zero page equivalence class [ utoa_append::buffer#0 ] Added variable utoa_append::sub#0 to zero page equivalence class [ utoa_append::sub#0 ] Added variable utoa_append::return#0 to zero page equivalence class [ utoa_append::return#0 ] Added variable ultoa::$4 to zero page equivalence class [ ultoa::$4 ] Added variable ultoa::buffer#3 to zero page equivalence class [ ultoa::buffer#3 ] Added variable ultoa::$11 to zero page equivalence class [ ultoa::$11 ] -Added variable ultoa::digit_value#0 to zero page equivalence class [ ultoa::digit_value#0 ] Added variable ultoa_append::buffer#0 to zero page equivalence class [ ultoa_append::buffer#0 ] Added variable ultoa_append::sub#0 to zero page equivalence class [ ultoa_append::sub#0 ] Added variable ultoa_append::return#0 to zero page equivalence class [ ultoa_append::return#0 ] @@ -4129,25 +4344,27 @@ Added variable rem16u#1 to zero page equivalence class [ rem16u#1 ] Added variable clock::return#0 to zero page equivalence class [ clock::return#0 ] Added variable memset::end#0 to zero page equivalence class [ memset::end#0 ] Complete equivalence classes -[ main::i#12 main::i#2 ] -[ main::sieve_i#2 main::sieve_i#1 ] -[ main::i#10 main::i#3 ] +[ main::i#17 main::i#12 ] +[ main::sieve_i#11 main::sieve_i#1 ] [ main::j#2 main::j#0 main::j#1 ] [ main::s#2 main::s#0 main::s#1 ] -[ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] -[ print_char_cursor#66 print_char_cursor#89 print_char_cursor#90 print_char_cursor#91 print_char_cursor#58 print_char_cursor#97 print_char_cursor#2 print_char_cursor#1 ] +[ main::i#22 main::i#10 ] +[ print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 ] [ print_str::str#8 print_str::str#10 print_str::str#0 ] -[ utoa::digit#2 utoa::digit#1 ] -[ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] -[ utoa::started#2 utoa::started#4 ] -[ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] +[ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] +[ utoa::started#8 utoa::started#2 ] +[ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] +[ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 ] +[ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 ] +[ utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 ] [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] [ utoa_append::digit#2 utoa_append::digit#1 ] -[ print_line_cursor#11 print_line_cursor#21 print_char_cursor#62 print_char_cursor#78 print_line_cursor#1 print_char_cursor#10 ] -[ ultoa::digit#2 ultoa::digit#1 ] -[ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] -[ ultoa::started#2 ultoa::started#4 ] -[ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] +[ print_line_cursor#11 print_line_cursor#21 print_char_cursor#90 print_char_cursor#104 print_line_cursor#1 ] +[ ultoa::started#8 ultoa::started#2 ] +[ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] +[ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ] +[ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ] +[ ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ] [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] [ ultoa_append::digit#2 ultoa_append::digit#1 ] [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] @@ -4170,14 +4387,12 @@ Complete equivalence classes [ utoa::$4 ] [ utoa::buffer#3 ] [ utoa::$11 ] -[ utoa::digit_value#0 ] [ utoa_append::buffer#0 ] [ utoa_append::sub#0 ] [ utoa_append::return#0 ] [ ultoa::$4 ] [ ultoa::buffer#3 ] [ ultoa::$11 ] -[ ultoa::digit_value#0 ] [ ultoa_append::buffer#0 ] [ ultoa_append::sub#0 ] [ ultoa_append::return#0 ] @@ -4191,55 +4406,55 @@ Complete equivalence classes [ rem16u#1 ] [ clock::return#0 ] [ memset::end#0 ] -Allocated zp ZP_WORD:2 [ main::i#12 main::i#2 ] -Allocated zp ZP_WORD:4 [ main::sieve_i#2 main::sieve_i#1 ] -Allocated zp ZP_WORD:6 [ main::i#10 main::i#3 ] -Allocated zp ZP_WORD:8 [ main::j#2 main::j#0 main::j#1 ] -Allocated zp ZP_WORD:10 [ main::s#2 main::s#0 main::s#1 ] -Allocated zp ZP_WORD:12 [ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] -Allocated zp ZP_WORD:14 [ print_char_cursor#66 print_char_cursor#89 print_char_cursor#90 print_char_cursor#91 print_char_cursor#58 print_char_cursor#97 print_char_cursor#2 print_char_cursor#1 ] -Allocated zp ZP_WORD:16 [ print_str::str#8 print_str::str#10 print_str::str#0 ] -Allocated zp ZP_BYTE:18 [ utoa::digit#2 utoa::digit#1 ] -Allocated zp ZP_WORD:19 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] -Allocated zp ZP_BYTE:21 [ utoa::started#2 utoa::started#4 ] -Allocated zp ZP_WORD:22 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] -Allocated zp ZP_WORD:24 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] -Allocated zp ZP_BYTE:26 [ utoa_append::digit#2 utoa_append::digit#1 ] -Allocated zp ZP_WORD:27 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#62 print_char_cursor#78 print_line_cursor#1 print_char_cursor#10 ] -Allocated zp ZP_BYTE:29 [ ultoa::digit#2 ultoa::digit#1 ] -Allocated zp ZP_DWORD:30 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] -Allocated zp ZP_BYTE:34 [ ultoa::started#2 ultoa::started#4 ] -Allocated zp ZP_WORD:35 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] -Allocated zp ZP_DWORD:37 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] -Allocated zp ZP_BYTE:41 [ ultoa_append::digit#2 ultoa_append::digit#1 ] -Allocated zp ZP_WORD:42 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] -Allocated zp ZP_WORD:44 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] -Allocated zp ZP_WORD:46 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] -Allocated zp ZP_BYTE:48 [ divr16u::i#2 divr16u::i#1 ] -Allocated zp ZP_WORD:49 [ memset::num#2 ] -Allocated zp ZP_WORD:51 [ memset::str#3 ] -Allocated zp ZP_BYTE:53 [ memset::c#4 ] -Allocated zp ZP_WORD:54 [ memset::dst#2 memset::dst#4 memset::dst#1 ] -Allocated zp ZP_DWORD:56 [ clock::return#2 ] -Allocated zp ZP_DWORD:60 [ main::$10 ] -Allocated zp ZP_DWORD:64 [ main::cyclecount#0 ] -Allocated zp ZP_DWORD:68 [ div32u16u::dividend#0 ] -Allocated zp ZP_DWORD:72 [ div32u16u::return#2 ] -Allocated zp ZP_DWORD:76 [ main::$14 ] -Allocated zp ZP_WORD:80 [ main::sec100s#0 ] -Allocated zp ZP_DWORD:82 [ print_dword_decimal::w#0 ] -Allocated zp ZP_WORD:86 [ main::$38 ] -Allocated zp ZP_BYTE:88 [ utoa::$4 ] -Allocated zp ZP_WORD:89 [ utoa::buffer#3 ] -Allocated zp ZP_BYTE:91 [ utoa::$11 ] -Allocated zp ZP_WORD:92 [ utoa::digit_value#0 ] -Allocated zp ZP_WORD:94 [ utoa_append::buffer#0 ] -Allocated zp ZP_WORD:96 [ utoa_append::sub#0 ] -Allocated zp ZP_WORD:98 [ utoa_append::return#0 ] -Allocated zp ZP_BYTE:100 [ ultoa::$4 ] -Allocated zp ZP_WORD:101 [ ultoa::buffer#3 ] -Allocated zp ZP_BYTE:103 [ ultoa::$11 ] -Allocated zp ZP_DWORD:104 [ ultoa::digit_value#0 ] +Allocated zp ZP_WORD:2 [ main::i#17 main::i#12 ] +Allocated zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] +Allocated zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] +Allocated zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] +Allocated zp ZP_WORD:10 [ main::i#22 main::i#10 ] +Allocated zp ZP_WORD:12 [ print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 ] +Allocated zp ZP_WORD:14 [ print_str::str#8 print_str::str#10 print_str::str#0 ] +Allocated zp ZP_WORD:16 [ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] +Allocated zp ZP_BYTE:18 [ utoa::started#8 utoa::started#2 ] +Allocated zp ZP_BYTE:19 [ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] +Allocated zp ZP_WORD:20 [ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 ] +Allocated zp ZP_WORD:22 [ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 ] +Allocated zp ZP_WORD:24 [ utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 ] +Allocated zp ZP_WORD:26 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] +Allocated zp ZP_BYTE:28 [ utoa_append::digit#2 utoa_append::digit#1 ] +Allocated zp ZP_WORD:29 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#90 print_char_cursor#104 print_line_cursor#1 ] +Allocated zp ZP_BYTE:31 [ ultoa::started#8 ultoa::started#2 ] +Allocated zp ZP_BYTE:32 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] +Allocated zp ZP_DWORD:33 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ] +Allocated zp ZP_WORD:37 [ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ] +Allocated zp ZP_DWORD:39 [ ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ] +Allocated zp ZP_DWORD:43 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] +Allocated zp ZP_BYTE:47 [ ultoa_append::digit#2 ultoa_append::digit#1 ] +Allocated zp ZP_WORD:48 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated zp ZP_WORD:50 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] +Allocated zp ZP_WORD:52 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] +Allocated zp ZP_BYTE:54 [ divr16u::i#2 divr16u::i#1 ] +Allocated zp ZP_WORD:55 [ memset::num#2 ] +Allocated zp ZP_WORD:57 [ memset::str#3 ] +Allocated zp ZP_BYTE:59 [ memset::c#4 ] +Allocated zp ZP_WORD:60 [ memset::dst#2 memset::dst#4 memset::dst#1 ] +Allocated zp ZP_DWORD:62 [ clock::return#2 ] +Allocated zp ZP_DWORD:66 [ main::$10 ] +Allocated zp ZP_DWORD:70 [ main::cyclecount#0 ] +Allocated zp ZP_DWORD:74 [ div32u16u::dividend#0 ] +Allocated zp ZP_DWORD:78 [ div32u16u::return#2 ] +Allocated zp ZP_DWORD:82 [ main::$14 ] +Allocated zp ZP_WORD:86 [ main::sec100s#0 ] +Allocated zp ZP_DWORD:88 [ print_dword_decimal::w#0 ] +Allocated zp ZP_WORD:92 [ main::$38 ] +Allocated zp ZP_BYTE:94 [ utoa::$4 ] +Allocated zp ZP_WORD:95 [ utoa::buffer#3 ] +Allocated zp ZP_BYTE:97 [ utoa::$11 ] +Allocated zp ZP_WORD:98 [ utoa_append::buffer#0 ] +Allocated zp ZP_WORD:100 [ utoa_append::sub#0 ] +Allocated zp ZP_WORD:102 [ utoa_append::return#0 ] +Allocated zp ZP_BYTE:104 [ ultoa::$4 ] +Allocated zp ZP_WORD:105 [ ultoa::buffer#3 ] +Allocated zp ZP_BYTE:107 [ ultoa::$11 ] Allocated zp ZP_WORD:108 [ ultoa_append::buffer#0 ] Allocated zp ZP_DWORD:110 [ ultoa_append::sub#0 ] Allocated zp ZP_DWORD:114 [ ultoa_append::return#0 ] @@ -4291,11 +4506,10 @@ Target platform is c64basic // Clock cycles per second (on a C64 PAL) .const CLOCKS_PER_SEC = CLOCKS_PER_FRAME*FRAMES_PER_SEC .label rem16u = $84 - .label print_char_cursor = $e - .label print_line_cursor = $1b - .label print_char_cursor_10 = $1b - .label print_char_cursor_62 = $1b - .label print_char_cursor_78 = $1b + .label print_char_cursor = $c + .label print_line_cursor = $1d + .label print_char_cursor_90 = $1d + .label print_char_cursor_104 = $1d // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -4316,17 +4530,17 @@ bend: main: { .label toD0181_gfx = $1800 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>toD0181_gfx)/4&$f - .label _10 = $3c - .label _14 = $4c - .label cyclecount = $40 - .label sec100s = $50 - .label i = 2 + .label _10 = $42 + .label _14 = $52 + .label cyclecount = $46 + .label sec100s = $56 .label sieve_i = 4 - .label j = 8 - .label s = $a - .label i_3 = 6 - .label i_10 = 6 - .label _38 = $56 + .label j = 6 + .label s = 8 + .label i = $a + .label i_12 = 2 + .label _38 = $5c + .label i_17 = 2 // [5] phi from main to main::toD0181 [phi:main->main::toD0181] toD0181_from_main: jmp toD0181 @@ -4340,7 +4554,7 @@ main: { lda #toD0181_return sta D018 // [7] call print_cls - // [196] phi from main::@14 to print_cls [phi:main::@14->print_cls] + // [202] phi from main::@14 to print_cls [phi:main::@14->print_cls] print_cls_from_b14: jsr print_cls // [8] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -4349,14 +4563,14 @@ main: { // main::@15 b15: // [9] call print_str - // [77] phi from main::@15 to print_str [phi:main::@15->print_str] + // [70] phi from main::@15 to print_str [phi:main::@15->print_str] print_str_from_b15: - // [77] phi (byte*) print_char_cursor#66 = (byte*) 1024 [phi:main::@15->print_str#0] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*) 1024 [phi:main::@15->print_str#0] -- pbuz1=pbuc1 lda #<$400 sta print_char_cursor lda #>$400 sta print_char_cursor+1 - // [77] phi (byte*) print_str::str#10 = (const string) main::str [phi:main::@15->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_str::str#10 = (const string) main::str [phi:main::@15->print_str#1] -- pbuz1=pbuc1 lda #str @@ -4368,9 +4582,9 @@ main: { // main::@16 b16: // [11] call print_ln - // [112] phi from main::@16 to print_ln [phi:main::@16->print_ln] + // [116] phi from main::@16 to print_ln [phi:main::@16->print_ln] print_ln_from_b16: - // [112] phi (byte*) print_line_cursor#21 = (byte*) 1024 [phi:main::@16->print_ln#0] -- pbuz1=pbuc1 + // [116] phi (byte*) print_line_cursor#21 = (byte*) 1024 [phi:main::@16->print_ln#0] -- pbuz1=pbuc1 lda #<$400 sta print_line_cursor lda #>$400 @@ -4379,16 +4593,16 @@ main: { jmp b17 // main::@17 b17: - // [12] (byte*~) print_char_cursor#90 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [12] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 // [13] call print_str - // [77] phi from main::@17 to print_str [phi:main::@17->print_str] + // [70] phi from main::@17 to print_str [phi:main::@17->print_str] print_str_from_b17: - // [77] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#90 [phi:main::@17->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const string) main::str1 [phi:main::@17->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#94 [phi:main::@17->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const string) main::str1 [phi:main::@17->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4400,10 +4614,10 @@ main: { // main::@18 b18: // [15] call print_word_decimal - // [71] phi from main::@18 to print_word_decimal [phi:main::@18->print_word_decimal] + // [80] phi from main::@18 to print_word_decimal [phi:main::@18->print_word_decimal] print_word_decimal_from_b18: - // [71] phi (byte*) print_char_cursor#58 = (byte*) print_char_cursor#2 [phi:main::@18->print_word_decimal#0] -- register_copy - // [71] phi (word) print_word_decimal::w#3 = (const word) COUNT#0 [phi:main::@18->print_word_decimal#1] -- vwuz1=vwuc1 + // [80] phi (byte*) print_char_cursor#58 = (byte*) print_char_cursor#2 [phi:main::@18->print_word_decimal#0] -- register_copy + // [80] phi (word) print_word_decimal::w#3 = (const word) COUNT#0 [phi:main::@18->print_word_decimal#1] -- vwuz1=vwuc1 lda #COUNT @@ -4415,9 +4629,9 @@ main: { // main::@19 b19: // [17] call print_ln - // [112] phi from main::@19 to print_ln [phi:main::@19->print_ln] + // [116] phi from main::@19 to print_ln [phi:main::@19->print_ln] print_ln_from_b19: - // [112] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@19->print_ln#0] -- register_copy + // [116] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@19->print_ln#0] -- register_copy jsr print_ln // [18] phi from main::@19 to main::@20 [phi:main::@19->main::@20] b20_from_b19: @@ -4425,17 +4639,17 @@ main: { // main::@20 b20: // [19] call memset - // [187] phi from main::@20 to memset [phi:main::@20->memset] + // [193] phi from main::@20 to memset [phi:main::@20->memset] memset_from_b20: - // [187] phi (byte) memset::c#4 = (byte) 0 [phi:main::@20->memset#0] -- vbuz1=vbuc1 + // [193] phi (byte) memset::c#4 = (byte) 0 [phi:main::@20->memset#0] -- vbuz1=vbuc1 lda #0 sta memset.c - // [187] phi (void*) memset::str#3 = (void*)(const byte*) sieve#0 [phi:main::@20->memset#1] -- pvoz1=pvoc1 + // [193] phi (void*) memset::str#3 = (void*)(const byte*) sieve#0 [phi:main::@20->memset#1] -- pvoz1=pvoc1 lda #sieve sta memset.str+1 - // [187] phi (word) memset::num#2 = (const word) COUNT#0 [phi:main::@20->memset#2] -- vwuz1=vwuc1 + // [193] phi (word) memset::num#2 = (const word) COUNT#0 [phi:main::@20->memset#2] -- vwuz1=vwuc1 lda #COUNT @@ -4448,38 +4662,99 @@ main: { b21: // [21] call clock_start jsr clock_start - // [22] phi from main::@21 to main::@1 [phi:main::@21->main::@1] - b1_from_b21: - // [22] phi (byte*) main::sieve_i#2 = (const byte*) sieve#0+(byte) 2 [phi:main::@21->main::@1#0] -- pbuz1=pbuc1 + // [22] phi from main::@21 to main::@2 [phi:main::@21->main::@2] + b2_from_b21: + // [22] phi (byte*) main::sieve_i#11 = (const byte*) sieve#0+(byte) 2 [phi:main::@21->main::@2#0] -- pbuz1=pbuc1 lda #sieve+2 sta sieve_i+1 - // [22] phi (word) main::i#12 = (byte) 2 [phi:main::@21->main::@1#1] -- vwuz1=vbuc1 + // [22] phi (word) main::i#17 = (byte) 2 [phi:main::@21->main::@2#1] -- vwuz1=vbuc1 lda #<2 - sta i + sta i_17 lda #>2 - sta i+1 + sta i_17+1 + jmp b2 + // [22] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [22] phi (byte*) main::sieve_i#11 = (byte*) main::sieve_i#1 [phi:main::@1->main::@2#0] -- register_copy + // [22] phi (word) main::i#17 = (word) main::i#12 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 + // main::@2 + b2: + // [23] if((byte) 0!=*((byte*) main::sieve_i#11)) goto main::@4 -- vbuc1_neq__deref_pbuz1_then_la1 + ldy #0 + lda (sieve_i),y + cmp #0 + bne b4 + jmp b7 + // main::@7 + b7: + // [24] (word) main::j#0 ← (word) main::i#17 << (byte) 1 -- vwuz1=vwuz2_rol_1 + lda i_17 + asl + sta j + lda i_17+1 + rol + sta j+1 + // [25] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 -- pbuz1=pbuc1_plus_vwuz2 + lda j + clc + adc #sieve + sta s+1 + // [26] phi from main::@6 main::@7 to main::@5 [phi:main::@6/main::@7->main::@5] + b5_from_b6: + b5_from_b7: + // [26] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@6/main::@7->main::@5#0] -- register_copy + // [26] phi (word) main::j#2 = (word) main::j#1 [phi:main::@6/main::@7->main::@5#1] -- register_copy + jmp b5 + // main::@5 + b5: + // [27] if((word) main::j#2<(const word) COUNT#0) goto main::@6 -- vwuz1_lt_vwuc1_then_la1 + lda j+1 + cmp #>COUNT + bcc b6 + bne !+ + lda j + cmp #SQRT_COUNT - bcc b2 + bcc b2_from_b1 bne !+ - lda i + lda i_12 cmp #main::@3] + // [31] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: jmp b3 // main::@3 b3: - // [25] call clock + // [32] call clock jsr clock - // [26] (dword) clock::return#2 ← (dword) clock::return#0 -- vduz1=vduz2 + // [33] (dword) clock::return#2 ← (dword) clock::return#0 -- vduz1=vduz2 lda clock.return sta clock.return_2 lda clock.return+1 @@ -4491,7 +4766,7 @@ main: { jmp b22 // main::@22 b22: - // [27] (dword~) main::$10 ← (dword) clock::return#2 -- vduz1=vduz2 + // [34] (dword~) main::$10 ← (dword) clock::return#2 -- vduz1=vduz2 lda clock.return_2 sta _10 lda clock.return_2+1 @@ -4500,7 +4775,7 @@ main: { sta _10+2 lda clock.return_2+3 sta _10+3 - // [28] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 -- vduz1=vduz2_minus_vduc1 + // [35] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 -- vduz1=vduz2_minus_vduc1 lda _10 sec sbc #CLOCKS_PER_INIT>>$10 sta cyclecount+3 - // [29] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 -- vduz1=vduz2 + // [36] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 -- vduz1=vduz2 lda cyclecount sta div32u16u.dividend lda cyclecount+1 @@ -4523,9 +4798,9 @@ main: { sta div32u16u.dividend+2 lda cyclecount+3 sta div32u16u.dividend+3 - // [30] call div32u16u + // [37] call div32u16u jsr div32u16u - // [31] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 -- vduz1=vduz2 + // [38] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 -- vduz1=vduz2 lda div32u16u.return sta div32u16u.return_2 lda div32u16u.return+1 @@ -4537,7 +4812,7 @@ main: { jmp b23 // main::@23 b23: - // [32] (dword~) main::$14 ← (dword) div32u16u::return#2 -- vduz1=vduz2 + // [39] (dword~) main::$14 ← (dword) div32u16u::return#2 -- vduz1=vduz2 lda div32u16u.return_2 sta _14 lda div32u16u.return_2+1 @@ -4546,21 +4821,21 @@ main: { sta _14+2 lda div32u16u.return_2+3 sta _14+3 - // [33] (word) main::sec100s#0 ← (word)(dword~) main::$14 -- vwuz1=_word_vduz2 + // [40] (word) main::sec100s#0 ← (word)(dword~) main::$14 -- vwuz1=_word_vduz2 lda _14 sta sec100s lda _14+1 sta sec100s+1 - // [34] (byte*~) print_char_cursor#91 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [41] (byte*~) print_char_cursor#95 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 - // [35] call print_str - // [77] phi from main::@23 to print_str [phi:main::@23->print_str] + // [42] call print_str + // [70] phi from main::@23 to print_str [phi:main::@23->print_str] print_str_from_b23: - // [77] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#91 [phi:main::@23->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const string) main::str2 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#95 [phi:main::@23->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const string) main::str2 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -4569,27 +4844,27 @@ main: { jmp b24 // main::@24 b24: - // [36] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 -- vwuz1=vwuz2 + // [43] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 -- vwuz1=vwuz2 lda sec100s sta print_word_decimal.w lda sec100s+1 sta print_word_decimal.w+1 - // [37] call print_word_decimal - // [71] phi from main::@24 to print_word_decimal [phi:main::@24->print_word_decimal] + // [44] call print_word_decimal + // [80] phi from main::@24 to print_word_decimal [phi:main::@24->print_word_decimal] print_word_decimal_from_b24: - // [71] phi (byte*) print_char_cursor#58 = (byte*) print_char_cursor#2 [phi:main::@24->print_word_decimal#0] -- register_copy - // [71] phi (word) print_word_decimal::w#3 = (word) print_word_decimal::w#1 [phi:main::@24->print_word_decimal#1] -- register_copy + // [80] phi (byte*) print_char_cursor#58 = (byte*) print_char_cursor#2 [phi:main::@24->print_word_decimal#0] -- register_copy + // [80] phi (word) print_word_decimal::w#3 = (word) print_word_decimal::w#1 [phi:main::@24->print_word_decimal#1] -- register_copy jsr print_word_decimal - // [38] phi from main::@24 to main::@25 [phi:main::@24->main::@25] + // [45] phi from main::@24 to main::@25 [phi:main::@24->main::@25] b25_from_b24: jmp b25 // main::@25 b25: - // [39] call print_str - // [77] phi from main::@25 to print_str [phi:main::@25->print_str] + // [46] call print_str + // [70] phi from main::@25 to print_str [phi:main::@25->print_str] print_str_from_b25: - // [77] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#2 [phi:main::@25->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const string) main::str3 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#2 [phi:main::@25->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const string) main::str3 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -4598,7 +4873,7 @@ main: { jmp b26 // main::@26 b26: - // [40] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 -- vduz1=vduz2 + // [47] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 -- vduz1=vduz2 lda cyclecount sta print_dword_decimal.w lda cyclecount+1 @@ -4607,51 +4882,102 @@ main: { sta print_dword_decimal.w+2 lda cyclecount+3 sta print_dword_decimal.w+3 - // [41] call print_dword_decimal + // [48] call print_dword_decimal jsr print_dword_decimal - // [42] phi from main::@26 to main::@27 [phi:main::@26->main::@27] + // [49] phi from main::@26 to main::@27 [phi:main::@26->main::@27] b27_from_b26: jmp b27 // main::@27 b27: - // [43] call print_ln - // [112] phi from main::@27 to print_ln [phi:main::@27->print_ln] + // [50] call print_ln + // [116] phi from main::@27 to print_ln [phi:main::@27->print_ln] print_ln_from_b27: - // [112] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@27->print_ln#0] -- register_copy + // [116] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@27->print_ln#0] -- register_copy jsr print_ln - // [44] phi from main::@27 to main::@8 [phi:main::@27->main::@8] - b8_from_b27: - // [44] phi (byte*) print_char_cursor#62 = (byte*) print_line_cursor#1 [phi:main::@27->main::@8#0] -- register_copy - // [44] phi (word) main::i#10 = (byte) 2 [phi:main::@27->main::@8#1] -- vwuz1=vbuc1 + // [51] phi from main::@27 to main::@9 [phi:main::@27->main::@9] + b9_from_b27: + // [51] phi (byte*) print_char_cursor#90 = (byte*) print_line_cursor#1 [phi:main::@27->main::@9#0] -- register_copy + // [51] phi (word) main::i#22 = (byte) 2 [phi:main::@27->main::@9#1] -- vwuz1=vbuc1 lda #<2 - sta i_10 + sta i lda #>2 - sta i_10+1 + sta i+1 + jmp b9 + // main::@9 + b9: + // [52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2 + lda i + clc + adc #sieve + sta _38+1 + // [53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30 -- vbuc1_neq__deref_pbuz1_then_la1 + ldy #0 + lda (_38),y + cmp #0 + bne b30 + jmp b12 + // main::@12 + b12: + // [54] (word) print_word_decimal::w#2 ← (word) main::i#22 -- vwuz1=vwuz2 + lda i + sta print_word_decimal.w + lda i+1 + sta print_word_decimal.w+1 + // [55] (byte*~) print_char_cursor#101 ← (byte*) print_char_cursor#90 -- pbuz1=pbuz2 + lda print_char_cursor_90 + sta print_char_cursor + lda print_char_cursor_90+1 + sta print_char_cursor+1 + // [56] call print_word_decimal + // [80] phi from main::@12 to print_word_decimal [phi:main::@12->print_word_decimal] + print_word_decimal_from_b12: + // [80] phi (byte*) print_char_cursor#58 = (byte*~) print_char_cursor#101 [phi:main::@12->print_word_decimal#0] -- register_copy + // [80] phi (word) print_word_decimal::w#3 = (word) print_word_decimal::w#2 [phi:main::@12->print_word_decimal#1] -- register_copy + jsr print_word_decimal + // [57] phi from main::@12 to main::@28 [phi:main::@12->main::@28] + b28_from_b12: + jmp b28 + // main::@28 + b28: + // [58] call print_char + jsr print_char + // [59] phi from main::@28 main::@30 to main::@11 [phi:main::@28/main::@30->main::@11] + b11_from_b28: + b11_from_b30: + // [59] phi (byte*) print_char_cursor#62 = (byte*) print_char_cursor#10 [phi:main::@28/main::@30->main::@11#0] -- register_copy + jmp b11 + // main::@11 + b11: + // [60] (word) main::i#10 ← ++ (word) main::i#22 -- vwuz1=_inc_vwuz1 + inc i + bne !+ + inc i+1 + !: jmp b8 // main::@8 b8: - // [45] if((word) main::i#10<(word) $514) goto main::@9 -- vwuz1_lt_vwuc1_then_la1 - lda i_10+1 + // [61] if((word) main::i#10<(word) $514) goto main::@29 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 cmp #>$514 - bcc b9 + bcc b29 bne !+ - lda i_10 + lda i cmp #<$514 - bcc b9 + bcc b29 !: + // [62] phi from main::@8 to main::@10 [phi:main::@8->main::@10] + b10_from_b8: jmp b10 // main::@10 b10: - // [46] (byte*~) print_char_cursor#89 ← (byte*) print_char_cursor#62 -- pbuz1=pbuz2 - lda print_char_cursor_62 - sta print_char_cursor - lda print_char_cursor_62+1 - sta print_char_cursor+1 - // [47] call print_str - // [77] phi from main::@10 to print_str [phi:main::@10->print_str] + // [63] call print_str + // [70] phi from main::@10 to print_str [phi:main::@10->print_str] print_str_from_b10: - // [77] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#89 [phi:main::@10->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const string) main::str4 [phi:main::@10->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#62 [phi:main::@10->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const string) main::str4 [phi:main::@10->print_str#1] -- pbuz1=pbuc1 lda #str4 @@ -4660,148 +4986,50 @@ main: { jmp b13 // main::@13 b13: - // [48] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [64] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc SCREEN+$3e7 jmp b13 - // main::@9 - b9: - // [49] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#10 -- pbuz1=pbuc1_plus_vwuz2 - lda i_10 - clc - adc #sieve - sta _38+1 - // [50] if((byte) 0!=*((byte*~) main::$38)) goto main::@11 -- vbuc1_neq__deref_pbuz1_then_la1 - ldy #0 - lda (_38),y - cmp #0 - bne b11_from_b9 - jmp b12 - // main::@12 - b12: - // [51] (word) print_word_decimal::w#2 ← (word) main::i#10 -- vwuz1=vwuz2 - lda i_10 - sta print_word_decimal.w - lda i_10+1 - sta print_word_decimal.w+1 - // [52] (byte*~) print_char_cursor#97 ← (byte*) print_char_cursor#62 -- pbuz1=pbuz2 - lda print_char_cursor_62 + // main::@29 + b29: + // [65] (byte*~) print_char_cursor#104 ← (byte*) print_char_cursor#62 -- pbuz1=pbuz2 + lda print_char_cursor + sta print_char_cursor_104 + lda print_char_cursor+1 + sta print_char_cursor_104+1 + // [51] phi from main::@29 to main::@9 [phi:main::@29->main::@9] + b9_from_b29: + // [51] phi (byte*) print_char_cursor#90 = (byte*~) print_char_cursor#104 [phi:main::@29->main::@9#0] -- register_copy + // [51] phi (word) main::i#22 = (word) main::i#10 [phi:main::@29->main::@9#1] -- register_copy + jmp b9 + // main::@30 + b30: + // [66] (byte*~) print_char_cursor#106 ← (byte*) print_char_cursor#90 -- pbuz1=pbuz2 + lda print_char_cursor_90 sta print_char_cursor - lda print_char_cursor_62+1 + lda print_char_cursor_90+1 sta print_char_cursor+1 - // [53] call print_word_decimal - // [71] phi from main::@12 to print_word_decimal [phi:main::@12->print_word_decimal] - print_word_decimal_from_b12: - // [71] phi (byte*) print_char_cursor#58 = (byte*~) print_char_cursor#97 [phi:main::@12->print_word_decimal#0] -- register_copy - // [71] phi (word) print_word_decimal::w#3 = (word) print_word_decimal::w#2 [phi:main::@12->print_word_decimal#1] -- register_copy - jsr print_word_decimal - // [54] phi from main::@12 to main::@28 [phi:main::@12->main::@28] - b28_from_b12: - jmp b28 - // main::@28 - b28: - // [55] call print_char - jsr print_char - // [56] phi from main::@28 main::@9 to main::@11 [phi:main::@28/main::@9->main::@11] - b11_from_b28: - b11_from_b9: - // [56] phi (byte*) print_char_cursor#78 = (byte*) print_char_cursor#10 [phi:main::@28/main::@9->main::@11#0] -- register_copy - jmp b11 - // main::@11 - b11: - // [57] (word) main::i#3 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 - inc i_3 - bne !+ - inc i_3+1 - !: - // [44] phi from main::@11 to main::@8 [phi:main::@11->main::@8] - b8_from_b11: - // [44] phi (byte*) print_char_cursor#62 = (byte*) print_char_cursor#78 [phi:main::@11->main::@8#0] -- register_copy - // [44] phi (word) main::i#10 = (word) main::i#3 [phi:main::@11->main::@8#1] -- register_copy - jmp b8 - // main::@2 - b2: - // [58] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@4 -- vbuc1_neq__deref_pbuz1_then_la1 - ldy #0 - lda (sieve_i),y - cmp #0 - bne b4 - jmp b7 - // main::@7 - b7: - // [59] (word) main::j#0 ← (word) main::i#12 << (byte) 1 -- vwuz1=vwuz2_rol_1 - lda i - asl - sta j - lda i+1 - rol - sta j+1 - // [60] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 -- pbuz1=pbuc1_plus_vwuz2 - lda j - clc - adc #sieve - sta s+1 - // [61] phi from main::@6 main::@7 to main::@5 [phi:main::@6/main::@7->main::@5] - b5_from_b6: - b5_from_b7: - // [61] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@6/main::@7->main::@5#0] -- register_copy - // [61] phi (word) main::j#2 = (word) main::j#1 [phi:main::@6/main::@7->main::@5#1] -- register_copy - jmp b5 - // main::@5 - b5: - // [62] if((word) main::j#2<(const word) COUNT#0) goto main::@6 -- vwuz1_lt_vwuc1_then_la1 - lda j+1 - cmp #>COUNT - bcc b6 - bne !+ - lda j - cmp #main::@1] - b1_from_b4: - // [22] phi (byte*) main::sieve_i#2 = (byte*) main::sieve_i#1 [phi:main::@4->main::@1#0] -- register_copy - // [22] phi (word) main::i#12 = (word) main::i#2 [phi:main::@4->main::@1#1] -- register_copy - jmp b1 + jmp b11_from_b30 // main::@6 b6: - // [65] *((byte*) main::s#2) ← (byte) 1 -- _deref_pbuz1=vbuc1 + // [67] *((byte*) main::s#2) ← (byte) 1 -- _deref_pbuz1=vbuc1 lda #1 ldy #0 sta (s),y - // [66] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#12 -- pbuz1=pbuz1_plus_vwuz2 + // [68] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 -- pbuz1=pbuz1_plus_vwuz2 lda s clc - adc i + adc i_17 sta s lda s+1 - adc i+1 + adc i_17+1 sta s+1 - // [67] (word) main::j#1 ← (word) main::j#2 + (word) main::i#12 -- vwuz1=vwuz1_plus_vwuz2 + // [69] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 -- vwuz1=vwuz1_plus_vwuz2 lda j clc - adc i + adc i_17 sta j lda j+1 - adc i+1 + adc i_17+1 sta j+1 jmp b5_from_b6 str: .text "Sieve benchmark - calculating primes@" @@ -4809,53 +5037,92 @@ main: { str2: .text "100ths seconds used: @" str3: .text " cycles: @" str4: .text "...@" +} + // print_str +// Print a zero-terminated string +// print_str(byte* zeropage($e) str) +print_str: { + .label str = $e + // [71] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + b1_from_print_str: + b1_from_b2: + // [71] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#66 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + // [71] phi (byte*) print_str::str#8 = (byte*) print_str::str#10 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + jmp b1 + // print_str::@1 + b1: + // [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + jmp breturn + // print_str::@return + breturn: + // [73] return + rts + // print_str::@2 + b2: + // [74] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + ldy #0 + sta (print_char_cursor),y + // [75] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + // [76] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#8 -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1_from_b2 } // print_char // Print a single char print_char: { .const ch = ' ' - // [68] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 + // [77] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (print_char_cursor),y - // [69] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz2 - lda print_char_cursor - clc - adc #1 - sta print_char_cursor_10 - lda print_char_cursor+1 - adc #0 - sta print_char_cursor_10+1 + // [78] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: jmp breturn // print_char::@return breturn: - // [70] return + // [79] return rts } // print_word_decimal // Print a word as DECIMAL -// print_word_decimal(word zeropage($c) w) +// print_word_decimal(word zeropage($10) w) print_word_decimal: { - .label w = $c - // [72] (word) utoa::value#1 ← (word) print_word_decimal::w#3 -- vwuz1=vwuz2 + .label w = $10 + // [81] (word) utoa::value#1 ← (word) print_word_decimal::w#3 -- vwuz1=vwuz2 lda w sta utoa.value lda w+1 sta utoa.value+1 - // [73] call utoa - // [84] phi from print_word_decimal to utoa [phi:print_word_decimal->utoa] + // [82] call utoa + // [86] phi from print_word_decimal to utoa [phi:print_word_decimal->utoa] utoa_from_print_word_decimal: jsr utoa - // [74] phi from print_word_decimal to print_word_decimal::@1 [phi:print_word_decimal->print_word_decimal::@1] + // [83] phi from print_word_decimal to print_word_decimal::@1 [phi:print_word_decimal->print_word_decimal::@1] b1_from_print_word_decimal: jmp b1 // print_word_decimal::@1 b1: - // [75] call print_str - // [77] phi from print_word_decimal::@1 to print_str [phi:print_word_decimal::@1->print_str] + // [84] call print_str + // [70] phi from print_word_decimal::@1 to print_str [phi:print_word_decimal::@1->print_str] print_str_from_b1: - // [77] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#58 [phi:print_word_decimal::@1->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const byte[6]) decimal_digits#0 [phi:print_word_decimal::@1->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#58 [phi:print_word_decimal::@1->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const byte[6]) decimal_digits#0 [phi:print_word_decimal::@1->print_str#1] -- pbuz1=pbuc1 lda #decimal_digits @@ -4864,50 +5131,8 @@ print_word_decimal: { jmp breturn // print_word_decimal::@return breturn: - // [76] return + // [85] return rts -} - // print_str -// Print a zero-terminated string -// print_str(byte* zeropage($10) str) -print_str: { - .label str = $10 - // [78] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] - b1_from_print_str: - b1_from_b2: - // [78] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#66 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy - // [78] phi (byte*) print_str::str#8 = (byte*) print_str::str#10 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy - jmp b1 - // print_str::@1 - b1: - // [79] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 - ldy #0 - lda (str),y - cmp #'@' - bne b2 - jmp breturn - // print_str::@return - breturn: - // [80] return - rts - // print_str::@2 - b2: - // [81] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (str),y - ldy #0 - sta (print_char_cursor),y - // [82] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 - inc print_char_cursor - bne !+ - inc print_char_cursor+1 - !: - // [83] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#8 -- pbuz1=_inc_pbuz1 - inc str - bne !+ - inc str+1 - !: - jmp b1_from_b2 } // utoa // Converts unsigned number value to a string representing it in RADIX format. @@ -4915,52 +5140,85 @@ print_str: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// utoa(word zeropage($13) value, byte* zeropage($59) buffer) +// utoa(word zeropage($14) value, byte* zeropage($5f) buffer) utoa: { .const max_digits = 5 - .label _4 = $58 - .label _11 = $5b - .label digit_value = $5c - .label buffer = $59 - .label digit = $12 - .label value = $13 + .label _4 = $5e + .label _11 = $61 + .label digit_value = $18 + .label buffer = $5f + .label digit = $13 + .label value = $14 .label buffer_4 = $16 - .label started = $15 + .label started = $12 .label buffer_11 = $16 - .label buffer_14 = $16 - // [85] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] - b1_from_utoa: - // [85] phi (byte*) utoa::buffer#11 = (const byte[6]) decimal_digits#0 [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 + .label buffer_28 = $16 + .label buffer_29 = $16 + jmp b19_1 + // utoa::@19_1 + b19_1: + // [87] (word) utoa::digit_value#4 ← *((const word[]) RADIX_DECIMAL_VALUES#0) -- vwuz1=_deref_pwuc1 + lda RADIX_DECIMAL_VALUES + sta digit_value + lda RADIX_DECIMAL_VALUES+1 + sta digit_value+1 + // [88] phi from utoa::@19_1 to utoa::@7 [phi:utoa::@19_1->utoa::@7] + b7_from_b19_1: + // [88] phi (word) utoa::digit_value#3 = (word) utoa::digit_value#4 [phi:utoa::@19_1->utoa::@7#0] -- register_copy + // [88] phi (byte*) utoa::buffer#28 = (const byte[6]) decimal_digits#0 [phi:utoa::@19_1->utoa::@7#1] -- pbuz1=pbuc1 lda #decimal_digits - sta buffer_11+1 - // [85] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 + sta buffer_28+1 + // [88] phi (byte) utoa::started#8 = (byte) 0 [phi:utoa::@19_1->utoa::@7#2] -- vbuz1=vbuc1 lda #0 sta started - // [85] phi (word) utoa::value#2 = (word) utoa::value#1 [phi:utoa->utoa::@1#2] -- register_copy - // [85] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 + // [88] phi (word) utoa::value#21 = (word) utoa::value#1 [phi:utoa::@19_1->utoa::@7#3] -- register_copy + // [88] phi (byte) utoa::digit#15 = (byte) 0 [phi:utoa::@19_1->utoa::@7#4] -- vbuz1=vbuc1 lda #0 sta digit + jmp b7 + // utoa::@7 + b7: + // [89] if((word) utoa::value#21>=(word) utoa::digit_value#3) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 + lda digit_value+1 + cmp value+1 + bne !+ + lda digit_value + cmp value + beq b5_from_b7 + !: + bcc b5_from_b7 + // [90] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] + b4_from_b7: + // [90] phi (byte) utoa::digit#13 = (byte) utoa::digit#15 [phi:utoa::@7->utoa::@4#0] -- register_copy + // [90] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#28 [phi:utoa::@7->utoa::@4#1] -- register_copy + // [90] phi (byte) utoa::started#2 = (byte) utoa::started#8 [phi:utoa::@7->utoa::@4#2] -- register_copy + // [90] phi (word) utoa::value#16 = (word) utoa::value#21 [phi:utoa::@7->utoa::@4#3] -- register_copy + jmp b4 + // utoa::@4 + b4: + // [91] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#13 -- vbuz1=_inc_vbuz1 + inc digit jmp b1 // utoa::@1 b1: - // [86] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1 + // [92] if((byte) utoa::digit#1<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1 lda digit cmp #max_digits-1 bcc b2 jmp b3 // utoa::@3 b3: - // [87] (byte~) utoa::$4 ← (byte)(word) utoa::value#2 -- vbuz1=_byte_vwuz2 + // [93] (byte~) utoa::$4 ← (byte)(word) utoa::value#16 -- vbuz1=_byte_vwuz2 lda value sta _4 - // [88] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [94] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy _4 lda DIGITS,y ldy #0 sta (buffer_11),y - // [89] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz2 + // [95] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz2 lda buffer_11 clc adc #1 @@ -4968,82 +5226,69 @@ utoa: { lda buffer_11+1 adc #0 sta buffer+1 - // [90] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [96] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (buffer),y jmp breturn // utoa::@return breturn: - // [91] return + // [97] return rts // utoa::@2 b2: - // [92] (byte~) utoa::$11 ← (byte) utoa::digit#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [98] (byte~) utoa::$11 ← (byte) utoa::digit#1 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda digit asl sta _11 - // [93] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) -- vwuz1=pwuc1_derefidx_vbuz2 + // [99] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) -- vwuz1=pwuc1_derefidx_vbuz2 ldy _11 lda RADIX_DECIMAL_VALUES,y sta digit_value lda RADIX_DECIMAL_VALUES+1,y sta digit_value+1 - // [94] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuz1_then_la1 + // [100] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp started - bne b5 + bne b5_from_b2 + // [88] phi from utoa::@2 to utoa::@7 [phi:utoa::@2->utoa::@7] + b7_from_b2: + // [88] phi (word) utoa::digit_value#3 = (word) utoa::digit_value#0 [phi:utoa::@2->utoa::@7#0] -- register_copy + // [88] phi (byte*) utoa::buffer#28 = (byte*) utoa::buffer#11 [phi:utoa::@2->utoa::@7#1] -- register_copy + // [88] phi (byte) utoa::started#8 = (byte) utoa::started#2 [phi:utoa::@2->utoa::@7#2] -- register_copy + // [88] phi (word) utoa::value#21 = (word) utoa::value#16 [phi:utoa::@2->utoa::@7#3] -- register_copy + // [88] phi (byte) utoa::digit#15 = (byte) utoa::digit#1 [phi:utoa::@2->utoa::@7#4] -- register_copy jmp b7 - // utoa::@7 - b7: - // [95] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 - lda digit_value+1 - cmp value+1 - bne !+ - lda digit_value - cmp value - beq b5 - !: - bcc b5 - // [96] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] - b4_from_b7: - // [96] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy - // [96] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy - // [96] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy - jmp b4 - // utoa::@4 - b4: - // [97] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 -- vbuz1=_inc_vbuz1 - inc digit - // [85] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] - b1_from_b4: - // [85] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy - // [85] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy - // [85] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy - // [85] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy - jmp b1 + // [101] phi from utoa::@2 utoa::@7 to utoa::@5 [phi:utoa::@2/utoa::@7->utoa::@5] + b5_from_b2: + b5_from_b7: + // [101] phi (word) utoa::digit_value#2 = (word) utoa::digit_value#0 [phi:utoa::@2/utoa::@7->utoa::@5#0] -- register_copy + // [101] phi (byte*) utoa::buffer#29 = (byte*) utoa::buffer#11 [phi:utoa::@2/utoa::@7->utoa::@5#1] -- register_copy + // [101] phi (word) utoa::value#22 = (word) utoa::value#16 [phi:utoa::@2/utoa::@7->utoa::@5#2] -- register_copy + // [101] phi (byte) utoa::digit#14 = (byte) utoa::digit#1 [phi:utoa::@2/utoa::@7->utoa::@5#3] -- register_copy + jmp b5 // utoa::@5 b5: - // [98] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 -- pbuz1=pbuz2 - lda buffer_11 + // [102] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#29 -- pbuz1=pbuz2 + lda buffer_29 sta utoa_append.buffer - lda buffer_11+1 + lda buffer_29+1 sta utoa_append.buffer+1 - // [99] (word) utoa_append::value#0 ← (word) utoa::value#2 -- vwuz1=vwuz2 + // [103] (word) utoa_append::value#0 ← (word) utoa::value#22 -- vwuz1=vwuz2 lda value sta utoa_append.value lda value+1 sta utoa_append.value+1 - // [100] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 -- vwuz1=vwuz2 + // [104] (word) utoa_append::sub#0 ← (word) utoa::digit_value#2 -- vwuz1=vwuz2 lda digit_value sta utoa_append.sub lda digit_value+1 sta utoa_append.sub+1 - // [101] call utoa_append - // [105] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [105] call utoa_append + // [109] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from_b5: jsr utoa_append - // [102] (word) utoa_append::return#0 ← (word) utoa_append::value#2 -- vwuz1=vwuz2 + // [106] (word) utoa_append::return#0 ← (word) utoa_append::value#2 -- vwuz1=vwuz2 lda utoa_append.value sta utoa_append.return lda utoa_append.value+1 @@ -5051,23 +5296,24 @@ utoa: { jmp b6 // utoa::@6 b6: - // [103] (word) utoa::value#0 ← (word) utoa_append::return#0 -- vwuz1=vwuz2 + // [107] (word) utoa::value#0 ← (word) utoa_append::return#0 -- vwuz1=vwuz2 lda utoa_append.return sta value lda utoa_append.return+1 sta value+1 - // [104] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [108] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#29 -- pbuz1=_inc_pbuz1 inc buffer_4 bne !+ inc buffer_4+1 !: - // [96] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] + // [90] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] b4_from_b6: - // [96] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy - // [96] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuz1=vbuc1 + // [90] phi (byte) utoa::digit#13 = (byte) utoa::digit#14 [phi:utoa::@6->utoa::@4#0] -- register_copy + // [90] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#1] -- register_copy + // [90] phi (byte) utoa::started#2 = (byte) 1 [phi:utoa::@6->utoa::@4#2] -- vbuz1=vbuc1 lda #1 sta started - // [96] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy + // [90] phi (word) utoa::value#16 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#3] -- register_copy jmp b4 } // utoa_append @@ -5079,23 +5325,23 @@ utoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// utoa_append(byte* zeropage($5e) buffer, word zeropage($18) value, word zeropage($60) sub) +// utoa_append(byte* zeropage($62) buffer, word zeropage($1a) value, word zeropage($64) sub) utoa_append: { - .label buffer = $5e - .label value = $18 - .label sub = $60 - .label return = $62 - .label digit = $1a - // [106] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + .label buffer = $62 + .label value = $1a + .label sub = $64 + .label return = $66 + .label digit = $1c + // [110] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] b1_from_utoa_append: - // [106] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuz1=vbuc1 + // [110] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuz1=vbuc1 lda #0 sta digit - // [106] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + // [110] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy jmp b1 // utoa_append::@1 b1: - // [107] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + // [111] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 lda sub+1 cmp value+1 bne !+ @@ -5107,7 +5353,7 @@ utoa_append: { jmp b3 // utoa_append::@3 b3: - // [108] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [112] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy digit lda DIGITS,y ldy #0 @@ -5115,13 +5361,13 @@ utoa_append: { jmp breturn // utoa_append::@return breturn: - // [109] return + // [113] return rts // utoa_append::@2 b2: - // [110] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuz1=_inc_vbuz1 + // [114] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuz1=_inc_vbuz1 inc digit - // [111] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + // [115] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 lda value sec sbc sub @@ -5129,23 +5375,23 @@ utoa_append: { lda value+1 sbc sub+1 sta value+1 - // [106] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + // [110] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] b1_from_b2: - // [106] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy - // [106] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + // [110] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [110] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy jmp b1 } // print_ln // Print a newline print_ln: { - // [113] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + // [117] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] b1_from_print_ln: b1_from_b1: - // [113] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#21 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + // [117] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#21 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy jmp b1 // print_ln::@1 b1: - // [114] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [118] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc print_line_cursor @@ -5153,7 +5399,7 @@ print_ln: { bcc !+ inc print_line_cursor+1 !: - // [115] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 + // [119] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 lda print_line_cursor+1 cmp print_char_cursor+1 bcc b1_from_b1 @@ -5165,15 +5411,15 @@ print_ln: { jmp breturn // print_ln::@return breturn: - // [116] return + // [120] return rts } // print_dword_decimal // Print a dword as DECIMAL -// print_dword_decimal(dword zeropage($52) w) +// print_dword_decimal(dword zeropage($58) w) print_dword_decimal: { - .label w = $52 - // [117] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 -- vduz1=vduz2 + .label w = $58 + // [121] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 -- vduz1=vduz2 lda w sta ultoa.value lda w+1 @@ -5182,20 +5428,20 @@ print_dword_decimal: { sta ultoa.value+2 lda w+3 sta ultoa.value+3 - // [118] call ultoa - // [122] phi from print_dword_decimal to ultoa [phi:print_dword_decimal->ultoa] + // [122] call ultoa + // [126] phi from print_dword_decimal to ultoa [phi:print_dword_decimal->ultoa] ultoa_from_print_dword_decimal: jsr ultoa - // [119] phi from print_dword_decimal to print_dword_decimal::@1 [phi:print_dword_decimal->print_dword_decimal::@1] + // [123] phi from print_dword_decimal to print_dword_decimal::@1 [phi:print_dword_decimal->print_dword_decimal::@1] b1_from_print_dword_decimal: jmp b1 // print_dword_decimal::@1 b1: - // [120] call print_str - // [77] phi from print_dword_decimal::@1 to print_str [phi:print_dword_decimal::@1->print_str] + // [124] call print_str + // [70] phi from print_dword_decimal::@1 to print_str [phi:print_dword_decimal::@1->print_str] print_str_from_b1: - // [77] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#2 [phi:print_dword_decimal::@1->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const byte[$b]) decimal_digits_long#0 [phi:print_dword_decimal::@1->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#2 [phi:print_dword_decimal::@1->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const byte[$b]) decimal_digits_long#0 [phi:print_dword_decimal::@1->print_str#1] -- pbuz1=pbuc1 lda #decimal_digits_long @@ -5204,7 +5450,7 @@ print_dword_decimal: { jmp breturn // print_dword_decimal::@return breturn: - // [121] return + // [125] return rts } // ultoa @@ -5213,52 +5459,97 @@ print_dword_decimal: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// ultoa(dword zeropage($1e) value, byte* zeropage($65) buffer) +// ultoa(dword zeropage($21) value, byte* zeropage($69) buffer) ultoa: { .const max_digits = $a - .label _4 = $64 - .label _11 = $67 - .label digit_value = $68 - .label buffer = $65 - .label digit = $1d - .label value = $1e - .label buffer_4 = $23 - .label started = $22 - .label buffer_11 = $23 - .label buffer_14 = $23 - // [123] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] - b1_from_ultoa: - // [123] phi (byte*) ultoa::buffer#11 = (const byte[$b]) decimal_digits_long#0 [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 + .label _4 = $68 + .label _11 = $6b + .label digit_value = $27 + .label buffer = $69 + .label digit = $20 + .label value = $21 + .label buffer_4 = $25 + .label started = $1f + .label buffer_11 = $25 + .label buffer_28 = $25 + .label buffer_29 = $25 + jmp b19_1 + // ultoa::@19_1 + b19_1: + // [127] (dword) ultoa::digit_value#4 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0) -- vduz1=_deref_pduc1 + lda RADIX_DECIMAL_VALUES_LONG + sta digit_value + lda RADIX_DECIMAL_VALUES_LONG+1 + sta digit_value+1 + lda RADIX_DECIMAL_VALUES_LONG+2 + sta digit_value+2 + lda RADIX_DECIMAL_VALUES_LONG+3 + sta digit_value+3 + // [128] phi from ultoa::@19_1 to ultoa::@7 [phi:ultoa::@19_1->ultoa::@7] + b7_from_b19_1: + // [128] phi (dword) ultoa::digit_value#3 = (dword) ultoa::digit_value#4 [phi:ultoa::@19_1->ultoa::@7#0] -- register_copy + // [128] phi (byte*) ultoa::buffer#28 = (const byte[$b]) decimal_digits_long#0 [phi:ultoa::@19_1->ultoa::@7#1] -- pbuz1=pbuc1 lda #decimal_digits_long - sta buffer_11+1 - // [123] phi (byte) ultoa::started#2 = (byte) 0 [phi:ultoa->ultoa::@1#1] -- vbuz1=vbuc1 + sta buffer_28+1 + // [128] phi (byte) ultoa::started#8 = (byte) 0 [phi:ultoa::@19_1->ultoa::@7#2] -- vbuz1=vbuc1 lda #0 sta started - // [123] phi (dword) ultoa::value#2 = (dword) ultoa::value#1 [phi:ultoa->ultoa::@1#2] -- register_copy - // [123] phi (byte) ultoa::digit#2 = (byte) 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 + // [128] phi (dword) ultoa::value#21 = (dword) ultoa::value#1 [phi:ultoa::@19_1->ultoa::@7#3] -- register_copy + // [128] phi (byte) ultoa::digit#15 = (byte) 0 [phi:ultoa::@19_1->ultoa::@7#4] -- vbuz1=vbuc1 lda #0 sta digit + jmp b7 + // ultoa::@7 + b7: + // [129] if((dword) ultoa::value#21>=(dword) ultoa::digit_value#3) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 + lda value+3 + cmp digit_value+3 + bcc !+ + bne b5_from_b7 + lda value+2 + cmp digit_value+2 + bcc !+ + bne b5_from_b7 + lda value+1 + cmp digit_value+1 + bcc !+ + bne b5_from_b7 + lda value + cmp digit_value + bcs b5_from_b7 + !: + // [130] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] + b4_from_b7: + // [130] phi (byte) ultoa::digit#13 = (byte) ultoa::digit#15 [phi:ultoa::@7->ultoa::@4#0] -- register_copy + // [130] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#28 [phi:ultoa::@7->ultoa::@4#1] -- register_copy + // [130] phi (byte) ultoa::started#2 = (byte) ultoa::started#8 [phi:ultoa::@7->ultoa::@4#2] -- register_copy + // [130] phi (dword) ultoa::value#16 = (dword) ultoa::value#21 [phi:ultoa::@7->ultoa::@4#3] -- register_copy + jmp b4 + // ultoa::@4 + b4: + // [131] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#13 -- vbuz1=_inc_vbuz1 + inc digit jmp b1 // ultoa::@1 b1: - // [124] if((byte) ultoa::digit#2<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 -- vbuz1_lt_vbuc1_then_la1 + // [132] if((byte) ultoa::digit#1<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 -- vbuz1_lt_vbuc1_then_la1 lda digit cmp #max_digits-1 bcc b2 jmp b3 // ultoa::@3 b3: - // [125] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#2 -- vbuz1=_byte_vduz2 + // [133] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#16 -- vbuz1=_byte_vduz2 lda value sta _4 - // [126] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [134] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy _4 lda DIGITS,y ldy #0 sta (buffer_11),y - // [127] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz2 + // [135] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz2 lda buffer_11 clc adc #1 @@ -5266,23 +5557,23 @@ ultoa: { lda buffer_11+1 adc #0 sta buffer+1 - // [128] *((byte*) ultoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [136] *((byte*) ultoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (buffer),y jmp breturn // ultoa::@return breturn: - // [129] return + // [137] return rts // ultoa::@2 b2: - // [130] (byte~) ultoa::$11 ← (byte) ultoa::digit#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [138] (byte~) ultoa::$11 ← (byte) ultoa::digit#1 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda digit asl asl sta _11 - // [131] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) -- vduz1=pduc1_derefidx_vbuz2 + // [139] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) -- vduz1=pduc1_derefidx_vbuz2 ldy _11 lda RADIX_DECIMAL_VALUES_LONG,y sta digit_value @@ -5292,55 +5583,34 @@ ultoa: { sta digit_value+2 lda RADIX_DECIMAL_VALUES_LONG+3,y sta digit_value+3 - // [132] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 -- vbuc1_neq_vbuz1_then_la1 + // [140] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp started - bne b5 + bne b5_from_b2 + // [128] phi from ultoa::@2 to ultoa::@7 [phi:ultoa::@2->ultoa::@7] + b7_from_b2: + // [128] phi (dword) ultoa::digit_value#3 = (dword) ultoa::digit_value#0 [phi:ultoa::@2->ultoa::@7#0] -- register_copy + // [128] phi (byte*) ultoa::buffer#28 = (byte*) ultoa::buffer#11 [phi:ultoa::@2->ultoa::@7#1] -- register_copy + // [128] phi (byte) ultoa::started#8 = (byte) ultoa::started#2 [phi:ultoa::@2->ultoa::@7#2] -- register_copy + // [128] phi (dword) ultoa::value#21 = (dword) ultoa::value#16 [phi:ultoa::@2->ultoa::@7#3] -- register_copy + // [128] phi (byte) ultoa::digit#15 = (byte) ultoa::digit#1 [phi:ultoa::@2->ultoa::@7#4] -- register_copy jmp b7 - // ultoa::@7 - b7: - // [133] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 - lda value+3 - cmp digit_value+3 - bcc !+ - bne b5 - lda value+2 - cmp digit_value+2 - bcc !+ - bne b5 - lda value+1 - cmp digit_value+1 - bcc !+ - bne b5 - lda value - cmp digit_value - bcs b5 - !: - // [134] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] - b4_from_b7: - // [134] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy - // [134] phi (byte) ultoa::started#4 = (byte) ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy - // [134] phi (dword) ultoa::value#6 = (dword) ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy - jmp b4 - // ultoa::@4 - b4: - // [135] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#2 -- vbuz1=_inc_vbuz1 - inc digit - // [123] phi from ultoa::@4 to ultoa::@1 [phi:ultoa::@4->ultoa::@1] - b1_from_b4: - // [123] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy - // [123] phi (byte) ultoa::started#2 = (byte) ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy - // [123] phi (dword) ultoa::value#2 = (dword) ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy - // [123] phi (byte) ultoa::digit#2 = (byte) ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy - jmp b1 + // [141] phi from ultoa::@2 ultoa::@7 to ultoa::@5 [phi:ultoa::@2/ultoa::@7->ultoa::@5] + b5_from_b2: + b5_from_b7: + // [141] phi (dword) ultoa::digit_value#2 = (dword) ultoa::digit_value#0 [phi:ultoa::@2/ultoa::@7->ultoa::@5#0] -- register_copy + // [141] phi (byte*) ultoa::buffer#29 = (byte*) ultoa::buffer#11 [phi:ultoa::@2/ultoa::@7->ultoa::@5#1] -- register_copy + // [141] phi (dword) ultoa::value#22 = (dword) ultoa::value#16 [phi:ultoa::@2/ultoa::@7->ultoa::@5#2] -- register_copy + // [141] phi (byte) ultoa::digit#14 = (byte) ultoa::digit#1 [phi:ultoa::@2/ultoa::@7->ultoa::@5#3] -- register_copy + jmp b5 // ultoa::@5 b5: - // [136] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 -- pbuz1=pbuz2 - lda buffer_11 + // [142] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#29 -- pbuz1=pbuz2 + lda buffer_29 sta ultoa_append.buffer - lda buffer_11+1 + lda buffer_29+1 sta ultoa_append.buffer+1 - // [137] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 -- vduz1=vduz2 + // [143] (dword) ultoa_append::value#0 ← (dword) ultoa::value#22 -- vduz1=vduz2 lda value sta ultoa_append.value lda value+1 @@ -5349,7 +5619,7 @@ ultoa: { sta ultoa_append.value+2 lda value+3 sta ultoa_append.value+3 - // [138] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 -- vduz1=vduz2 + // [144] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#2 -- vduz1=vduz2 lda digit_value sta ultoa_append.sub lda digit_value+1 @@ -5358,11 +5628,11 @@ ultoa: { sta ultoa_append.sub+2 lda digit_value+3 sta ultoa_append.sub+3 - // [139] call ultoa_append - // [143] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [145] call ultoa_append + // [149] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] ultoa_append_from_b5: jsr ultoa_append - // [140] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 -- vduz1=vduz2 + // [146] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 -- vduz1=vduz2 lda ultoa_append.value sta ultoa_append.return lda ultoa_append.value+1 @@ -5374,7 +5644,7 @@ ultoa: { jmp b6 // ultoa::@6 b6: - // [141] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 -- vduz1=vduz2 + // [147] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 -- vduz1=vduz2 lda ultoa_append.return sta value lda ultoa_append.return+1 @@ -5383,18 +5653,19 @@ ultoa: { sta value+2 lda ultoa_append.return+3 sta value+3 - // [142] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [148] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#29 -- pbuz1=_inc_pbuz1 inc buffer_4 bne !+ inc buffer_4+1 !: - // [134] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] + // [130] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] b4_from_b6: - // [134] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy - // [134] phi (byte) ultoa::started#4 = (byte) 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuz1=vbuc1 + // [130] phi (byte) ultoa::digit#13 = (byte) ultoa::digit#14 [phi:ultoa::@6->ultoa::@4#0] -- register_copy + // [130] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#1] -- register_copy + // [130] phi (byte) ultoa::started#2 = (byte) 1 [phi:ultoa::@6->ultoa::@4#2] -- vbuz1=vbuc1 lda #1 sta started - // [134] phi (dword) ultoa::value#6 = (dword) ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy + // [130] phi (dword) ultoa::value#16 = (dword) ultoa::value#0 [phi:ultoa::@6->ultoa::@4#3] -- register_copy jmp b4 } // ultoa_append @@ -5406,23 +5677,23 @@ ultoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// ultoa_append(byte* zeropage($6c) buffer, dword zeropage($25) value, dword zeropage($6e) sub) +// ultoa_append(byte* zeropage($6c) buffer, dword zeropage($2b) value, dword zeropage($6e) sub) ultoa_append: { .label buffer = $6c - .label value = $25 + .label value = $2b .label sub = $6e .label return = $72 - .label digit = $29 - // [144] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] + .label digit = $2f + // [150] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] b1_from_ultoa_append: - // [144] phi (byte) ultoa_append::digit#2 = (byte) 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuz1=vbuc1 + // [150] phi (byte) ultoa_append::digit#2 = (byte) 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuz1=vbuc1 lda #0 sta digit - // [144] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy + // [150] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy jmp b1 // ultoa_append::@1 b1: - // [145] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 + // [151] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 lda value+3 cmp sub+3 bcc !+ @@ -5442,7 +5713,7 @@ ultoa_append: { jmp b3 // ultoa_append::@3 b3: - // [146] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [152] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy digit lda DIGITS,y ldy #0 @@ -5450,13 +5721,13 @@ ultoa_append: { jmp breturn // ultoa_append::@return breturn: - // [147] return + // [153] return rts // ultoa_append::@2 b2: - // [148] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 -- vbuz1=_inc_vbuz1 + // [154] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 -- vbuz1=_inc_vbuz1 inc digit - // [149] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 + // [155] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 lda value sec sbc sub @@ -5470,39 +5741,39 @@ ultoa_append: { lda value+3 sbc sub+3 sta value+3 - // [144] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] + // [150] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] b1_from_b2: - // [144] phi (byte) ultoa_append::digit#2 = (byte) ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy - // [144] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy + // [150] phi (byte) ultoa_append::digit#2 = (byte) ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy + // [150] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy jmp b1 } // div32u16u // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division -// div32u16u(dword zeropage($44) dividend) +// div32u16u(dword zeropage($4a) dividend) div32u16u: { .label divisor = CLOCKS_PER_SEC/$64 .label quotient_hi = $78 .label quotient_lo = $7c .label return = $7e - .label dividend = $44 - .label return_2 = $48 - // [150] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 -- vwuz1=_hi_vduz2 + .label dividend = $4a + .label return_2 = $4e + // [156] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 -- vwuz1=_hi_vduz2 lda dividend+2 sta divr16u.dividend lda dividend+3 sta divr16u.dividend+1 - // [151] call divr16u - // [161] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + // [157] call divr16u + // [167] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: - // [161] phi (word) divr16u::dividend#5 = (word) divr16u::dividend#1 [phi:div32u16u->divr16u#0] -- register_copy - // [161] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [167] phi (word) divr16u::dividend#5 = (word) divr16u::dividend#1 [phi:div32u16u->divr16u#0] -- register_copy + // [167] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta divr16u.rem lda #>0 sta divr16u.rem+1 jsr divr16u - // [152] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 + // [158] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda divr16u.return sta divr16u.return_2 lda divr16u.return+1 @@ -5510,28 +5781,28 @@ div32u16u: { jmp b1 // div32u16u::@1 b1: - // [153] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda divr16u.return_2 sta quotient_hi lda divr16u.return_2+1 sta quotient_hi+1 - // [154] (word) divr16u::dividend#2 ← < (dword) div32u16u::dividend#0 -- vwuz1=_lo_vduz2 + // [160] (word) divr16u::dividend#2 ← < (dword) div32u16u::dividend#0 -- vwuz1=_lo_vduz2 lda dividend sta divr16u.dividend lda dividend+1 sta divr16u.dividend+1 - // [155] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 + // [161] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 lda rem16u sta divr16u.rem lda rem16u+1 sta divr16u.rem+1 - // [156] call divr16u - // [161] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [162] call divr16u + // [167] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] divr16u_from_b1: - // [161] phi (word) divr16u::dividend#5 = (word) divr16u::dividend#2 [phi:div32u16u::@1->divr16u#0] -- register_copy - // [161] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [167] phi (word) divr16u::dividend#5 = (word) divr16u::dividend#2 [phi:div32u16u::@1->divr16u#0] -- register_copy + // [167] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u - // [157] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 + // [163] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda divr16u.return sta divr16u.return_3 lda divr16u.return+1 @@ -5539,12 +5810,12 @@ div32u16u: { jmp b2 // div32u16u::@2 b2: - // [158] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 + // [164] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 lda divr16u.return_3 sta quotient_lo lda divr16u.return_3+1 sta quotient_lo+1 - // [159] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 + // [165] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 lda quotient_hi sta return+2 lda quotient_hi+1 @@ -5556,7 +5827,7 @@ div32u16u: { jmp breturn // div32u16u::@return breturn: - // [160] return + // [166] return rts } // divr16u @@ -5564,74 +5835,74 @@ div32u16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zeropage($2c) dividend, word zeropage($2a) rem) +// divr16u(word zeropage($32) dividend, word zeropage($30) rem) divr16u: { .label _1 = $82 .label _2 = $83 - .label rem = $2a - .label dividend = $2c - .label quotient = $2e - .label i = $30 - .label return = $2e + .label rem = $30 + .label dividend = $32 + .label quotient = $34 + .label i = $36 + .label return = $34 .label return_2 = $76 .label return_3 = $7a - // [162] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [168] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] b1_from_divr16u: - // [162] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 + // [168] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta i - // [162] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [168] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 lda #<0 sta quotient lda #>0 sta quotient+1 - // [162] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [162] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [168] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [168] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp b1 - // [162] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [168] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] b1_from_b3: - // [162] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [162] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [162] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [162] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [168] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [168] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [168] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [168] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp b1 // divr16u::@1 b1: - // [163] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [169] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl rem rol rem+1 - // [164] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 + // [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 lda dividend+1 sta _1 - // [165] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 + // [171] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 lda #$80 and _1 sta _2 - // [166] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 + // [172] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 lda _2 cmp #0 beq b2_from_b1 jmp b4 // divr16u::@4 b4: - // [167] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora rem sta rem - // [168] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [174] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] b2_from_b1: b2_from_b4: - // [168] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [174] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp b2 // divr16u::@2 b2: - // [169] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [175] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - // [170] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [176] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - // [171] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [177] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda rem+1 cmp #>div32u16u.divisor bcc b3_from_b2 @@ -5643,12 +5914,12 @@ divr16u: { jmp b5 // divr16u::@5 b5: - // [172] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [178] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - // [173] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 -- vwuz1=vwuz1_minus_vwuc1 + // [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 -- vwuz1=vwuz1_minus_vwuc1 lda rem sec sbc #div32u16u.divisor sta rem+1 - // [174] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [180] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] b3_from_b2: b3_from_b5: - // [174] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [174] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [180] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [180] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp b3 // divr16u::@3 b3: - // [175] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 + // [181] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 inc i - // [176] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 + // [182] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp i bne b1_from_b3 jmp b6 // divr16u::@6 b6: - // [177] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 + // [183] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 lda rem sta rem16u lda rem+1 @@ -5681,7 +5952,7 @@ divr16u: { jmp breturn // divr16u::@return breturn: - // [178] return + // [184] return rts } // clock @@ -5689,8 +5960,8 @@ divr16u: { // This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start() clock: { .label return = $86 - .label return_2 = $38 - // [179] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) -- vduz1=vduc1_minus__deref_pduc2 + .label return_2 = $3e + // [185] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) -- vduz1=vduc1_minus__deref_pduc2 lda #<$ffffffff sec sbc CIA2_TIMER_AB @@ -5707,21 +5978,21 @@ clock: { jmp breturn // clock::@return breturn: - // [180] return + // [186] return rts } // clock_start // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [181] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 + // [187] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #CIA_TIMER_CONTROL_CONTINUOUS sta CIA2_TIMER_A_CONTROL - // [182] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 + // [188] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A sta CIA2_TIMER_B_CONTROL - // [183] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 + // [189] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB lda #>$ffffffff @@ -5730,28 +6001,28 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [184] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 + // [190] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A sta CIA2_TIMER_B_CONTROL - // [185] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 + // [191] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START sta CIA2_TIMER_A_CONTROL jmp breturn // clock_start::@return breturn: - // [186] return + // [192] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zeropage($33) str, byte zeropage($35) c, word zeropage($31) num) +// memset(void* zeropage($39) str, byte zeropage($3b) c, word zeropage($37) num) memset: { .label end = $8a - .label dst = $36 - .label num = $31 - .label str = $33 - .label c = $35 - // [188] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + .label dst = $3c + .label num = $37 + .label str = $39 + .label c = $3b + // [194] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda num bne !+ lda num+1 @@ -5760,7 +6031,7 @@ memset: { jmp b1 // memset::@1 b1: - // [189] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz3 + // [195] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz3 lda str clc adc num @@ -5768,19 +6039,19 @@ memset: { lda str+1 adc num+1 sta end+1 - // [190] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 + // [196] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 lda str sta dst lda str+1 sta dst+1 - // [191] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [197] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] b2_from_b1: b2_from_b3: - // [191] phi (byte*) memset::dst#2 = (byte*~) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [197] phi (byte*) memset::dst#2 = (byte*~) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp b2 // memset::@2 b2: - // [192] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [198] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda dst+1 cmp end+1 bne b3 @@ -5790,15 +6061,15 @@ memset: { jmp breturn // memset::@return breturn: - // [193] return + // [199] return rts // memset::@3 b3: - // [194] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 + // [200] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 lda c ldy #0 sta (dst),y - // [195] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [201] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 @@ -5808,18 +6079,18 @@ memset: { // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [197] call memset - // [187] phi from print_cls to memset [phi:print_cls->memset] + // [203] call memset + // [193] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: - // [187] phi (byte) memset::c#4 = (byte) ' ' [phi:print_cls->memset#0] -- vbuz1=vbuc1 + // [193] phi (byte) memset::c#4 = (byte) ' ' [phi:print_cls->memset#0] -- vbuz1=vbuc1 lda #' ' sta memset.c - // [187] phi (void*) memset::str#3 = (void*)(byte*) 1024 [phi:print_cls->memset#1] -- pvoz1=pvoc1 + // [193] phi (void*) memset::str#3 = (void*)(byte*) 1024 [phi:print_cls->memset#1] -- pvoz1=pvoc1 lda #<$400 sta memset.str lda #>$400 sta memset.str+1 - // [187] phi (word) memset::num#2 = (word) $3e8 [phi:print_cls->memset#2] -- vwuz1=vwuc1 + // [193] phi (word) memset::num#2 = (word) $3e8 [phi:print_cls->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta memset.num lda #>$3e8 @@ -5828,7 +6099,7 @@ print_cls: { jmp breturn // print_cls::@return breturn: - // [198] return + // [204] return rts } // File Data @@ -5845,241 +6116,245 @@ print_cls: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [6] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [12] (byte*~) print_char_cursor#90 ← (byte*) print_line_cursor#1 [ print_char_cursor#90 print_line_cursor#1 ] ( main:2 [ print_char_cursor#90 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [23] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 ] ) always clobbers reg byte a -Statement [26] (dword) clock::return#2 ← (dword) clock::return#0 [ print_line_cursor#1 clock::return#2 ] ( main:2 [ print_line_cursor#1 clock::return#2 ] ) always clobbers reg byte a -Statement [27] (dword~) main::$10 ← (dword) clock::return#2 [ print_line_cursor#1 main::$10 ] ( main:2 [ print_line_cursor#1 main::$10 ] ) always clobbers reg byte a -Statement [28] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 [ print_line_cursor#1 main::cyclecount#0 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 ] ) always clobbers reg byte a -Statement [29] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 ] ) always clobbers reg byte a -Statement [31] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ print_line_cursor#1 main::cyclecount#0 div32u16u::return#2 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 div32u16u::return#2 ] ) always clobbers reg byte a -Statement [32] (dword~) main::$14 ← (dword) div32u16u::return#2 [ print_line_cursor#1 main::cyclecount#0 main::$14 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::$14 ] ) always clobbers reg byte a -Statement [33] (word) main::sec100s#0 ← (word)(dword~) main::$14 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 ] ) always clobbers reg byte a -Statement [34] (byte*~) print_char_cursor#91 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#91 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#91 ] ) always clobbers reg byte a -Statement [36] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 [ print_line_cursor#1 main::cyclecount#0 print_word_decimal::w#1 print_char_cursor#2 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 print_word_decimal::w#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [40] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 [ print_line_cursor#1 print_dword_decimal::w#0 print_char_cursor#2 ] ( main:2 [ print_line_cursor#1 print_dword_decimal::w#0 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [45] if((word) main::i#10<(word) $514) goto main::@9 [ main::i#10 print_char_cursor#62 ] ( main:2 [ main::i#10 print_char_cursor#62 ] ) always clobbers reg byte a -Statement [46] (byte*~) print_char_cursor#89 ← (byte*) print_char_cursor#62 [ print_char_cursor#89 ] ( main:2 [ print_char_cursor#89 ] ) always clobbers reg byte a -Statement [49] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#10 [ main::i#10 print_char_cursor#62 main::$38 ] ( main:2 [ main::i#10 print_char_cursor#62 main::$38 ] ) always clobbers reg byte a -Statement [50] if((byte) 0!=*((byte*~) main::$38)) goto main::@11 [ main::i#10 print_char_cursor#62 ] ( main:2 [ main::i#10 print_char_cursor#62 ] ) always clobbers reg byte a reg byte y -Statement [51] (word) print_word_decimal::w#2 ← (word) main::i#10 [ main::i#10 print_char_cursor#62 print_word_decimal::w#2 ] ( main:2 [ main::i#10 print_char_cursor#62 print_word_decimal::w#2 ] ) always clobbers reg byte a -Statement [52] (byte*~) print_char_cursor#97 ← (byte*) print_char_cursor#62 [ main::i#10 print_word_decimal::w#2 print_char_cursor#97 ] ( main:2 [ main::i#10 print_word_decimal::w#2 print_char_cursor#97 ] ) always clobbers reg byte a -Statement [58] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@4 [ print_line_cursor#1 main::i#12 main::sieve_i#2 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 ] ) always clobbers reg byte a reg byte y -Statement [59] (word) main::j#0 ← (word) main::i#12 << (byte) 1 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#0 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#0 ] ) always clobbers reg byte a -Statement [60] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#0 main::s#0 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#0 main::s#0 ] ) always clobbers reg byte a -Statement [62] if((word) main::j#2<(const word) COUNT#0) goto main::@6 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#2 main::s#2 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#2 main::s#2 ] ) always clobbers reg byte a -Statement [65] *((byte*) main::s#2) ← (byte) 1 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#2 main::s#2 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#2 main::s#2 ] ) always clobbers reg byte a reg byte y -Statement [66] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#12 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#2 main::s#1 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#2 main::s#1 ] ) always clobbers reg byte a -Statement [67] (word) main::j#1 ← (word) main::j#2 + (word) main::i#12 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#1 main::s#1 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#1 main::s#1 ] ) always clobbers reg byte a -Statement [68] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 [ print_char_cursor#2 ] ( main:2::print_char:55 [ main::i#10 print_char_cursor#2 ] ) always clobbers reg byte a reg byte y -Statement [69] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#2 [ print_char_cursor#10 ] ( main:2::print_char:55 [ main::i#10 print_char_cursor#10 ] ) always clobbers reg byte a -Statement [72] (word) utoa::value#1 ← (word) print_word_decimal::w#3 [ print_char_cursor#58 utoa::value#1 ] ( main:2::print_word_decimal:15 [ print_line_cursor#1 print_char_cursor#58 utoa::value#1 ] main:2::print_word_decimal:37 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::value#1 ] main:2::print_word_decimal:53 [ main::i#10 print_char_cursor#58 utoa::value#1 ] ) always clobbers reg byte a -Statement [79] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:35 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:39 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:47 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:75 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:37::print_str:75 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:53::print_str:75 [ main::i#10 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:41::print_str:120 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y -Statement [81] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:35 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:39 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:47 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:75 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:37::print_str:75 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:53::print_str:75 [ main::i#10 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:41::print_str:120 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y -Statement [87] (byte~) utoa::$4 ← (byte)(word) utoa::value#2 [ utoa::buffer#11 utoa::$4 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::buffer#11 utoa::$4 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::buffer#11 utoa::$4 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::buffer#11 utoa::$4 ] ) always clobbers reg byte a -Statement [88] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) [ utoa::buffer#11 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::buffer#11 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::buffer#11 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::buffer#11 ] ) always clobbers reg byte a reg byte y -Statement [89] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 [ utoa::buffer#3 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::buffer#3 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::buffer#3 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::buffer#3 ] ) always clobbers reg byte a -Statement [90] *((byte*) utoa::buffer#3) ← (byte) 0 [ ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 ] ) always clobbers reg byte a reg byte y -Statement [92] (byte~) utoa::$11 ← (byte) utoa::digit#2 << (byte) 1 [ utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$11 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$11 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$11 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$11 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ utoa::digit#2 utoa::digit#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ utoa::started#2 utoa::started#4 ] -Statement [93] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) [ utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ) always clobbers reg byte a -Statement [95] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 [ utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ) always clobbers reg byte a -Statement [98] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 [ utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ) always clobbers reg byte a -Statement [99] (word) utoa_append::value#0 ← (word) utoa::value#2 [ utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ) always clobbers reg byte a -Statement [100] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 [ utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ) always clobbers reg byte a -Statement [102] (word) utoa_append::return#0 ← (word) utoa_append::value#2 [ utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ) always clobbers reg byte a -Statement [103] (word) utoa::value#0 ← (word) utoa_append::return#0 [ utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa::value#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa::value#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ) always clobbers reg byte a -Statement [107] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:2::print_word_decimal:15::utoa:73::utoa_append:101 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] main:2::print_word_decimal:37::utoa:73::utoa_append:101 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] main:2::print_word_decimal:53::utoa:73::utoa_append:101 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ utoa_append::digit#2 utoa_append::digit#1 ] -Statement [108] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) [ utoa_append::value#2 ] ( main:2::print_word_decimal:15::utoa:73::utoa_append:101 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] main:2::print_word_decimal:37::utoa:73::utoa_append:101 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] main:2::print_word_decimal:53::utoa:73::utoa_append:101 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ utoa::digit#2 utoa::digit#1 ] -Statement [111] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:2::print_word_decimal:15::utoa:73::utoa_append:101 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] main:2::print_word_decimal:37::utoa:73::utoa_append:101 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] main:2::print_word_decimal:53::utoa:73::utoa_append:101 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ) always clobbers reg byte a -Statement [114] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::print_ln:11 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:17 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:43 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [115] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::print_ln:11 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:17 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:43 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [117] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 [ print_char_cursor#2 ultoa::value#1 ] ( main:2::print_dword_decimal:41 [ print_line_cursor#1 print_char_cursor#2 ultoa::value#1 ] ) always clobbers reg byte a -Statement [125] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#2 [ ultoa::buffer#11 ultoa::$4 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::buffer#11 ultoa::$4 ] ) always clobbers reg byte a -Statement [126] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) [ ultoa::buffer#11 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::buffer#11 ] ) always clobbers reg byte a reg byte y -Statement [127] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 [ ultoa::buffer#3 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::buffer#3 ] ) always clobbers reg byte a -Statement [128] *((byte*) ultoa::buffer#3) ← (byte) 0 [ ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a reg byte y -Statement [130] (byte~) ultoa::$11 ← (byte) ultoa::digit#2 << (byte) 2 [ ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$11 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$11 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ ultoa::digit#2 ultoa::digit#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ ultoa::started#2 ultoa::started#4 ] -Statement [131] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) [ ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ) always clobbers reg byte a -Statement [133] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 [ ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ) always clobbers reg byte a -Statement [136] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 [ ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ) always clobbers reg byte a -Statement [137] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 [ ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ) always clobbers reg byte a -Statement [138] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 [ ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ) always clobbers reg byte a -Statement [140] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 [ ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ) always clobbers reg byte a -Statement [141] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 [ ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ) always clobbers reg byte a -Statement [145] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:2::print_dword_decimal:41::ultoa:118::ultoa_append:139 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ ultoa_append::digit#2 ultoa_append::digit#1 ] -Statement [146] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) [ ultoa_append::value#2 ] ( main:2::print_dword_decimal:41::ultoa:118::ultoa_append:139 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa_append::value#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:29 [ ultoa::digit#2 ultoa::digit#1 ] -Statement [149] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:2::print_dword_decimal:41::ultoa:118::ultoa_append:139 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ) always clobbers reg byte a -Statement [150] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 [ div32u16u::dividend#0 divr16u::dividend#1 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::dividend#1 ] ) always clobbers reg byte a -Statement [152] (word) divr16u::return#2 ← (word) divr16u::return#0 [ div32u16u::dividend#0 divr16u::return#2 rem16u#1 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a -Statement [153] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::dividend#0 div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a -Statement [154] (word) divr16u::dividend#2 ← < (dword) div32u16u::dividend#0 [ div32u16u::quotient_hi#0 divr16u::dividend#2 rem16u#1 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#2 rem16u#1 ] ) always clobbers reg byte a -Statement [155] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::dividend#2 divr16u::rem#4 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#2 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [157] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a -Statement [158] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a -Statement [159] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::return#0 ] ) always clobbers reg byte a -Statement [164] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::div32u16u:30::divr16u:151 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::div32u16u:30::divr16u:156 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:48 [ divr16u::i#2 divr16u::i#1 ] -Statement [167] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::div32u16u:30::divr16u:151 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::div32u16u:30::divr16u:156 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [171] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::div32u16u:30::divr16u:151 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::div32u16u:30::divr16u:156 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [173] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::div32u16u:30::divr16u:151 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::div32u16u:30::divr16u:156 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [177] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::div32u16u:30::divr16u:151 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::return#0 rem16u#1 ] main:2::div32u16u:30::divr16u:156 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a -Statement [179] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) [ clock::return#0 ] ( main:2::clock:25 [ print_line_cursor#1 clock::return#0 ] ) always clobbers reg byte a -Statement [181] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a -Statement [182] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a -Statement [183] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a -Statement [184] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a -Statement [185] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a -Statement [188] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::memset:19 [ print_line_cursor#1 memset::num#2 memset::str#3 memset::c#4 ] main:2::print_cls:7::memset:197 [ memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:53 [ memset::c#4 ] -Statement [189] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::memset:19 [ print_line_cursor#1 memset::str#3 memset::c#4 memset::end#0 ] main:2::print_cls:7::memset:197 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a -Statement [190] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#4 ] main:2::print_cls:7::memset:197 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [192] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#2 ] main:2::print_cls:7::memset:197 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [194] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#2 ] main:2::print_cls:7::memset:197 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:53 [ memset::c#4 ] +Statement [12] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 [ print_char_cursor#94 print_line_cursor#1 ] ( main:2 [ print_char_cursor#94 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [23] if((byte) 0!=*((byte*) main::sieve_i#11)) goto main::@4 [ print_line_cursor#1 main::i#17 main::sieve_i#11 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 ] ) always clobbers reg byte a reg byte y +Statement [24] (word) main::j#0 ← (word) main::i#17 << (byte) 1 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#0 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#0 ] ) always clobbers reg byte a +Statement [25] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#0 main::s#0 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#0 main::s#0 ] ) always clobbers reg byte a +Statement [27] if((word) main::j#2<(const word) COUNT#0) goto main::@6 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ) always clobbers reg byte a +Statement [30] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 [ print_line_cursor#1 main::i#12 main::sieve_i#1 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#1 ] ) always clobbers reg byte a +Statement [33] (dword) clock::return#2 ← (dword) clock::return#0 [ print_line_cursor#1 clock::return#2 ] ( main:2 [ print_line_cursor#1 clock::return#2 ] ) always clobbers reg byte a +Statement [34] (dword~) main::$10 ← (dword) clock::return#2 [ print_line_cursor#1 main::$10 ] ( main:2 [ print_line_cursor#1 main::$10 ] ) always clobbers reg byte a +Statement [35] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 [ print_line_cursor#1 main::cyclecount#0 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 ] ) always clobbers reg byte a +Statement [36] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 ] ) always clobbers reg byte a +Statement [38] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ print_line_cursor#1 main::cyclecount#0 div32u16u::return#2 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 div32u16u::return#2 ] ) always clobbers reg byte a +Statement [39] (dword~) main::$14 ← (dword) div32u16u::return#2 [ print_line_cursor#1 main::cyclecount#0 main::$14 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::$14 ] ) always clobbers reg byte a +Statement [40] (word) main::sec100s#0 ← (word)(dword~) main::$14 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 ] ) always clobbers reg byte a +Statement [41] (byte*~) print_char_cursor#95 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#95 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#95 ] ) always clobbers reg byte a +Statement [43] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 [ print_line_cursor#1 main::cyclecount#0 print_word_decimal::w#1 print_char_cursor#2 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 print_word_decimal::w#1 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [47] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 [ print_line_cursor#1 print_dword_decimal::w#0 print_char_cursor#2 ] ( main:2 [ print_line_cursor#1 print_dword_decimal::w#0 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22 [ main::i#22 print_char_cursor#90 main::$38 ] ( main:2 [ main::i#22 print_char_cursor#90 main::$38 ] ) always clobbers reg byte a +Statement [53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30 [ main::i#22 print_char_cursor#90 ] ( main:2 [ main::i#22 print_char_cursor#90 ] ) always clobbers reg byte a reg byte y +Statement [54] (word) print_word_decimal::w#2 ← (word) main::i#22 [ main::i#22 print_char_cursor#90 print_word_decimal::w#2 ] ( main:2 [ main::i#22 print_char_cursor#90 print_word_decimal::w#2 ] ) always clobbers reg byte a +Statement [55] (byte*~) print_char_cursor#101 ← (byte*) print_char_cursor#90 [ main::i#22 print_word_decimal::w#2 print_char_cursor#101 ] ( main:2 [ main::i#22 print_word_decimal::w#2 print_char_cursor#101 ] ) always clobbers reg byte a +Statement [61] if((word) main::i#10<(word) $514) goto main::@29 [ main::i#10 print_char_cursor#62 ] ( main:2 [ main::i#10 print_char_cursor#62 ] ) always clobbers reg byte a +Statement [65] (byte*~) print_char_cursor#104 ← (byte*) print_char_cursor#62 [ main::i#10 print_char_cursor#104 ] ( main:2 [ main::i#10 print_char_cursor#104 ] ) always clobbers reg byte a +Statement [66] (byte*~) print_char_cursor#106 ← (byte*) print_char_cursor#90 [ main::i#22 print_char_cursor#106 ] ( main:2 [ main::i#22 print_char_cursor#106 ] ) always clobbers reg byte a +Statement [67] *((byte*) main::s#2) ← (byte) 1 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ) always clobbers reg byte a reg byte y +Statement [68] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#1 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#1 ] ) always clobbers reg byte a +Statement [69] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#1 main::s#1 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#1 main::s#1 ] ) always clobbers reg byte a +Statement [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:42 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:46 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:63 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:84 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:44::print_str:84 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:56::print_str:84 [ main::i#22 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:48::print_str:124 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y +Statement [74] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:42 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:46 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:63 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:84 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:44::print_str:84 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:56::print_str:84 [ main::i#22 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:48::print_str:124 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y +Statement [77] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 [ print_char_cursor#2 ] ( main:2::print_char:58 [ main::i#22 print_char_cursor#2 ] ) always clobbers reg byte a reg byte y +Statement [81] (word) utoa::value#1 ← (word) print_word_decimal::w#3 [ print_char_cursor#58 utoa::value#1 ] ( main:2::print_word_decimal:15 [ print_line_cursor#1 print_char_cursor#58 utoa::value#1 ] main:2::print_word_decimal:44 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::value#1 ] main:2::print_word_decimal:56 [ main::i#22 print_char_cursor#58 utoa::value#1 ] ) always clobbers reg byte a +Statement [87] (word) utoa::digit_value#4 ← *((const word[]) RADIX_DECIMAL_VALUES#0) [ utoa::value#1 utoa::digit_value#4 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::value#1 utoa::digit_value#4 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::value#1 utoa::digit_value#4 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::value#1 utoa::digit_value#4 ] ) always clobbers reg byte a +Statement [89] if((word) utoa::value#21>=(word) utoa::digit_value#3) goto utoa::@5 [ utoa::digit#15 utoa::value#21 utoa::started#8 utoa::buffer#28 utoa::digit_value#3 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#15 utoa::value#21 utoa::started#8 utoa::buffer#28 utoa::digit_value#3 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#15 utoa::value#21 utoa::started#8 utoa::buffer#28 utoa::digit_value#3 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#15 utoa::value#21 utoa::started#8 utoa::buffer#28 utoa::digit_value#3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ utoa::started#8 utoa::started#2 ] +Statement [93] (byte~) utoa::$4 ← (byte)(word) utoa::value#16 [ utoa::buffer#11 utoa::$4 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::buffer#11 utoa::$4 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::buffer#11 utoa::$4 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::buffer#11 utoa::$4 ] ) always clobbers reg byte a +Statement [94] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) [ utoa::buffer#11 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::buffer#11 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::buffer#11 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::buffer#11 ] ) always clobbers reg byte a reg byte y +Statement [95] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 [ utoa::buffer#3 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::buffer#3 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::buffer#3 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::buffer#3 ] ) always clobbers reg byte a +Statement [96] *((byte*) utoa::buffer#3) ← (byte) 0 [ ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 ] ) always clobbers reg byte a reg byte y +Statement [98] (byte~) utoa::$11 ← (byte) utoa::digit#1 << (byte) 1 [ utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::$11 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::$11 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::$11 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::$11 ] ) always clobbers reg byte a +Statement [99] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) [ utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ) always clobbers reg byte a +Statement [102] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#29 [ utoa::digit#14 utoa::value#22 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::value#22 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::value#22 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::value#22 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 ] ) always clobbers reg byte a +Statement [103] (word) utoa_append::value#0 ← (word) utoa::value#22 [ utoa::digit#14 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 utoa_append::value#0 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 utoa_append::value#0 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 utoa_append::value#0 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 utoa_append::value#0 ] ) always clobbers reg byte a +Statement [104] (word) utoa_append::sub#0 ← (word) utoa::digit_value#2 [ utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ) always clobbers reg byte a +Statement [106] (word) utoa_append::return#0 ← (word) utoa_append::value#2 [ utoa::digit#14 utoa::buffer#29 utoa_append::return#0 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::return#0 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::return#0 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::return#0 ] ) always clobbers reg byte a +Statement [107] (word) utoa::value#0 ← (word) utoa_append::return#0 [ utoa::value#0 utoa::digit#14 utoa::buffer#29 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::value#0 utoa::digit#14 utoa::buffer#29 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::value#0 utoa::digit#14 utoa::buffer#29 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::value#0 utoa::digit#14 utoa::buffer#29 ] ) always clobbers reg byte a +Statement [111] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:2::print_word_decimal:15::utoa:82::utoa_append:105 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] main:2::print_word_decimal:44::utoa:82::utoa_append:105 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] main:2::print_word_decimal:56::utoa:82::utoa_append:105 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:28 [ utoa_append::digit#2 utoa_append::digit#1 ] +Statement [112] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) [ utoa_append::value#2 ] ( main:2::print_word_decimal:15::utoa:82::utoa_append:105 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::value#2 ] main:2::print_word_decimal:44::utoa:82::utoa_append:105 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::value#2 ] main:2::print_word_decimal:56::utoa:82::utoa_append:105 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::value#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:19 [ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] +Statement [115] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:2::print_word_decimal:15::utoa:82::utoa_append:105 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] main:2::print_word_decimal:44::utoa:82::utoa_append:105 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] main:2::print_word_decimal:56::utoa:82::utoa_append:105 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ) always clobbers reg byte a +Statement [118] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::print_ln:11 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:17 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:50 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [119] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::print_ln:11 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:17 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:50 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [121] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 [ print_char_cursor#2 ultoa::value#1 ] ( main:2::print_dword_decimal:48 [ print_line_cursor#1 print_char_cursor#2 ultoa::value#1 ] ) always clobbers reg byte a +Statement [127] (dword) ultoa::digit_value#4 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0) [ ultoa::value#1 ultoa::digit_value#4 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::value#1 ultoa::digit_value#4 ] ) always clobbers reg byte a +Statement [129] if((dword) ultoa::value#21>=(dword) ultoa::digit_value#3) goto ultoa::@5 [ ultoa::digit#15 ultoa::value#21 ultoa::started#8 ultoa::buffer#28 ultoa::digit_value#3 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#15 ultoa::value#21 ultoa::started#8 ultoa::buffer#28 ultoa::digit_value#3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:32 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ ultoa::started#8 ultoa::started#2 ] +Statement [133] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#16 [ ultoa::buffer#11 ultoa::$4 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::buffer#11 ultoa::$4 ] ) always clobbers reg byte a +Statement [134] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) [ ultoa::buffer#11 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::buffer#11 ] ) always clobbers reg byte a reg byte y +Statement [135] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 [ ultoa::buffer#3 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::buffer#3 ] ) always clobbers reg byte a +Statement [136] *((byte*) ultoa::buffer#3) ← (byte) 0 [ ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a reg byte y +Statement [138] (byte~) ultoa::$11 ← (byte) ultoa::digit#1 << (byte) 2 [ ultoa::digit#1 ultoa::value#16 ultoa::started#2 ultoa::buffer#11 ultoa::$11 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#1 ultoa::value#16 ultoa::started#2 ultoa::buffer#11 ultoa::$11 ] ) always clobbers reg byte a +Statement [139] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) [ ultoa::digit#1 ultoa::value#16 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#1 ultoa::value#16 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ) always clobbers reg byte a +Statement [142] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#29 [ ultoa::digit#14 ultoa::value#22 ultoa::buffer#29 ultoa::digit_value#2 ultoa_append::buffer#0 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::value#22 ultoa::buffer#29 ultoa::digit_value#2 ultoa_append::buffer#0 ] ) always clobbers reg byte a +Statement [143] (dword) ultoa_append::value#0 ← (dword) ultoa::value#22 [ ultoa::digit#14 ultoa::buffer#29 ultoa::digit_value#2 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::buffer#29 ultoa::digit_value#2 ultoa_append::buffer#0 ultoa_append::value#0 ] ) always clobbers reg byte a +Statement [144] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#2 [ ultoa::digit#14 ultoa::buffer#29 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::buffer#29 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ) always clobbers reg byte a +Statement [146] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 [ ultoa::digit#14 ultoa::buffer#29 ultoa_append::return#0 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::buffer#29 ultoa_append::return#0 ] ) always clobbers reg byte a +Statement [147] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 [ ultoa::value#0 ultoa::digit#14 ultoa::buffer#29 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::value#0 ultoa::digit#14 ultoa::buffer#29 ] ) always clobbers reg byte a +Statement [151] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:2::print_dword_decimal:48::ultoa:122::ultoa_append:145 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::buffer#29 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:47 [ ultoa_append::digit#2 ultoa_append::digit#1 ] +Statement [152] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) [ ultoa_append::value#2 ] ( main:2::print_dword_decimal:48::ultoa:122::ultoa_append:145 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::buffer#29 ultoa_append::value#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:32 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] +Statement [155] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:2::print_dword_decimal:48::ultoa:122::ultoa_append:145 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::buffer#29 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ) always clobbers reg byte a +Statement [156] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 [ div32u16u::dividend#0 divr16u::dividend#1 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::dividend#1 ] ) always clobbers reg byte a +Statement [158] (word) divr16u::return#2 ← (word) divr16u::return#0 [ div32u16u::dividend#0 divr16u::return#2 rem16u#1 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::dividend#0 div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [160] (word) divr16u::dividend#2 ← < (dword) div32u16u::dividend#0 [ div32u16u::quotient_hi#0 divr16u::dividend#2 rem16u#1 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#2 rem16u#1 ] ) always clobbers reg byte a +Statement [161] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::dividend#2 divr16u::rem#4 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#2 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [163] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [164] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a +Statement [165] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::return#0 ] ) always clobbers reg byte a +Statement [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::div32u16u:37::divr16u:157 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::div32u16u:37::divr16u:162 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:54 [ divr16u::i#2 divr16u::i#1 ] +Statement [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::div32u16u:37::divr16u:157 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::div32u16u:37::divr16u:162 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [177] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::div32u16u:37::divr16u:157 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::div32u16u:37::divr16u:162 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::div32u16u:37::divr16u:157 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::div32u16u:37::divr16u:162 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [183] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::div32u16u:37::divr16u:157 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::return#0 rem16u#1 ] main:2::div32u16u:37::divr16u:162 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a +Statement [185] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) [ clock::return#0 ] ( main:2::clock:32 [ print_line_cursor#1 clock::return#0 ] ) always clobbers reg byte a +Statement [187] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a +Statement [188] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a +Statement [189] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a +Statement [190] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a +Statement [191] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a +Statement [194] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::memset:19 [ print_line_cursor#1 memset::num#2 memset::str#3 memset::c#4 ] main:2::print_cls:7::memset:203 [ memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:59 [ memset::c#4 ] +Statement [195] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::memset:19 [ print_line_cursor#1 memset::str#3 memset::c#4 memset::end#0 ] main:2::print_cls:7::memset:203 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [196] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#4 ] main:2::print_cls:7::memset:203 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [198] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#2 ] main:2::print_cls:7::memset:203 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [200] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#2 ] main:2::print_cls:7::memset:203 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:59 [ memset::c#4 ] Statement [6] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [12] (byte*~) print_char_cursor#90 ← (byte*) print_line_cursor#1 [ print_char_cursor#90 print_line_cursor#1 ] ( main:2 [ print_char_cursor#90 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [23] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 ] ) always clobbers reg byte a -Statement [26] (dword) clock::return#2 ← (dword) clock::return#0 [ print_line_cursor#1 clock::return#2 ] ( main:2 [ print_line_cursor#1 clock::return#2 ] ) always clobbers reg byte a -Statement [27] (dword~) main::$10 ← (dword) clock::return#2 [ print_line_cursor#1 main::$10 ] ( main:2 [ print_line_cursor#1 main::$10 ] ) always clobbers reg byte a -Statement [28] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 [ print_line_cursor#1 main::cyclecount#0 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 ] ) always clobbers reg byte a -Statement [29] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 ] ) always clobbers reg byte a -Statement [31] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ print_line_cursor#1 main::cyclecount#0 div32u16u::return#2 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 div32u16u::return#2 ] ) always clobbers reg byte a -Statement [32] (dword~) main::$14 ← (dword) div32u16u::return#2 [ print_line_cursor#1 main::cyclecount#0 main::$14 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::$14 ] ) always clobbers reg byte a -Statement [33] (word) main::sec100s#0 ← (word)(dword~) main::$14 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 ] ) always clobbers reg byte a -Statement [34] (byte*~) print_char_cursor#91 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#91 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#91 ] ) always clobbers reg byte a -Statement [36] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 [ print_line_cursor#1 main::cyclecount#0 print_word_decimal::w#1 print_char_cursor#2 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 print_word_decimal::w#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [40] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 [ print_line_cursor#1 print_dword_decimal::w#0 print_char_cursor#2 ] ( main:2 [ print_line_cursor#1 print_dword_decimal::w#0 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [45] if((word) main::i#10<(word) $514) goto main::@9 [ main::i#10 print_char_cursor#62 ] ( main:2 [ main::i#10 print_char_cursor#62 ] ) always clobbers reg byte a -Statement [46] (byte*~) print_char_cursor#89 ← (byte*) print_char_cursor#62 [ print_char_cursor#89 ] ( main:2 [ print_char_cursor#89 ] ) always clobbers reg byte a -Statement [49] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#10 [ main::i#10 print_char_cursor#62 main::$38 ] ( main:2 [ main::i#10 print_char_cursor#62 main::$38 ] ) always clobbers reg byte a -Statement [50] if((byte) 0!=*((byte*~) main::$38)) goto main::@11 [ main::i#10 print_char_cursor#62 ] ( main:2 [ main::i#10 print_char_cursor#62 ] ) always clobbers reg byte a reg byte y -Statement [51] (word) print_word_decimal::w#2 ← (word) main::i#10 [ main::i#10 print_char_cursor#62 print_word_decimal::w#2 ] ( main:2 [ main::i#10 print_char_cursor#62 print_word_decimal::w#2 ] ) always clobbers reg byte a -Statement [52] (byte*~) print_char_cursor#97 ← (byte*) print_char_cursor#62 [ main::i#10 print_word_decimal::w#2 print_char_cursor#97 ] ( main:2 [ main::i#10 print_word_decimal::w#2 print_char_cursor#97 ] ) always clobbers reg byte a -Statement [58] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@4 [ print_line_cursor#1 main::i#12 main::sieve_i#2 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 ] ) always clobbers reg byte a reg byte y -Statement [59] (word) main::j#0 ← (word) main::i#12 << (byte) 1 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#0 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#0 ] ) always clobbers reg byte a -Statement [60] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#0 main::s#0 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#0 main::s#0 ] ) always clobbers reg byte a -Statement [62] if((word) main::j#2<(const word) COUNT#0) goto main::@6 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#2 main::s#2 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#2 main::s#2 ] ) always clobbers reg byte a -Statement [65] *((byte*) main::s#2) ← (byte) 1 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#2 main::s#2 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#2 main::s#2 ] ) always clobbers reg byte a reg byte y -Statement [66] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#12 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#2 main::s#1 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#2 main::s#1 ] ) always clobbers reg byte a -Statement [67] (word) main::j#1 ← (word) main::j#2 + (word) main::i#12 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#1 main::s#1 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#2 main::j#1 main::s#1 ] ) always clobbers reg byte a -Statement [68] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 [ print_char_cursor#2 ] ( main:2::print_char:55 [ main::i#10 print_char_cursor#2 ] ) always clobbers reg byte a reg byte y -Statement [69] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#2 [ print_char_cursor#10 ] ( main:2::print_char:55 [ main::i#10 print_char_cursor#10 ] ) always clobbers reg byte a -Statement [72] (word) utoa::value#1 ← (word) print_word_decimal::w#3 [ print_char_cursor#58 utoa::value#1 ] ( main:2::print_word_decimal:15 [ print_line_cursor#1 print_char_cursor#58 utoa::value#1 ] main:2::print_word_decimal:37 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::value#1 ] main:2::print_word_decimal:53 [ main::i#10 print_char_cursor#58 utoa::value#1 ] ) always clobbers reg byte a -Statement [79] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:35 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:39 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:47 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:75 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:37::print_str:75 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:53::print_str:75 [ main::i#10 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:41::print_str:120 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y -Statement [81] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:35 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:39 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:47 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:75 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:37::print_str:75 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:53::print_str:75 [ main::i#10 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:41::print_str:120 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y -Statement [87] (byte~) utoa::$4 ← (byte)(word) utoa::value#2 [ utoa::buffer#11 utoa::$4 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::buffer#11 utoa::$4 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::buffer#11 utoa::$4 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::buffer#11 utoa::$4 ] ) always clobbers reg byte a -Statement [88] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) [ utoa::buffer#11 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::buffer#11 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::buffer#11 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::buffer#11 ] ) always clobbers reg byte a reg byte y -Statement [89] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 [ utoa::buffer#3 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::buffer#3 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::buffer#3 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::buffer#3 ] ) always clobbers reg byte a -Statement [90] *((byte*) utoa::buffer#3) ← (byte) 0 [ ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 ] ) always clobbers reg byte a reg byte y -Statement [92] (byte~) utoa::$11 ← (byte) utoa::digit#2 << (byte) 1 [ utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$11 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$11 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$11 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$11 ] ) always clobbers reg byte a -Statement [93] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) [ utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ) always clobbers reg byte a -Statement [95] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 [ utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ) always clobbers reg byte a -Statement [98] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 [ utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ) always clobbers reg byte a -Statement [99] (word) utoa_append::value#0 ← (word) utoa::value#2 [ utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ) always clobbers reg byte a -Statement [100] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 [ utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ) always clobbers reg byte a -Statement [102] (word) utoa_append::return#0 ← (word) utoa_append::value#2 [ utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ) always clobbers reg byte a -Statement [103] (word) utoa::value#0 ← (word) utoa_append::return#0 [ utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:2::print_word_decimal:15::utoa:73 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa::value#0 ] main:2::print_word_decimal:37::utoa:73 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa::value#0 ] main:2::print_word_decimal:53::utoa:73 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ) always clobbers reg byte a -Statement [107] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:2::print_word_decimal:15::utoa:73::utoa_append:101 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] main:2::print_word_decimal:37::utoa:73::utoa_append:101 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] main:2::print_word_decimal:53::utoa:73::utoa_append:101 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ) always clobbers reg byte a -Statement [108] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) [ utoa_append::value#2 ] ( main:2::print_word_decimal:15::utoa:73::utoa_append:101 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] main:2::print_word_decimal:37::utoa:73::utoa_append:101 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] main:2::print_word_decimal:53::utoa:73::utoa_append:101 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] ) always clobbers reg byte a reg byte y -Statement [111] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:2::print_word_decimal:15::utoa:73::utoa_append:101 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] main:2::print_word_decimal:37::utoa:73::utoa_append:101 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] main:2::print_word_decimal:53::utoa:73::utoa_append:101 [ main::i#10 print_char_cursor#58 utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ) always clobbers reg byte a -Statement [114] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::print_ln:11 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:17 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:43 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [115] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::print_ln:11 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:17 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:43 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [117] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 [ print_char_cursor#2 ultoa::value#1 ] ( main:2::print_dword_decimal:41 [ print_line_cursor#1 print_char_cursor#2 ultoa::value#1 ] ) always clobbers reg byte a -Statement [125] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#2 [ ultoa::buffer#11 ultoa::$4 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::buffer#11 ultoa::$4 ] ) always clobbers reg byte a -Statement [126] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) [ ultoa::buffer#11 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::buffer#11 ] ) always clobbers reg byte a reg byte y -Statement [127] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 [ ultoa::buffer#3 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::buffer#3 ] ) always clobbers reg byte a -Statement [128] *((byte*) ultoa::buffer#3) ← (byte) 0 [ ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a reg byte y -Statement [130] (byte~) ultoa::$11 ← (byte) ultoa::digit#2 << (byte) 2 [ ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$11 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$11 ] ) always clobbers reg byte a -Statement [131] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) [ ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ) always clobbers reg byte a -Statement [133] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 [ ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ) always clobbers reg byte a -Statement [136] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 [ ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ) always clobbers reg byte a -Statement [137] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 [ ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ) always clobbers reg byte a -Statement [138] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 [ ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ) always clobbers reg byte a -Statement [140] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 [ ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ) always clobbers reg byte a -Statement [141] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 [ ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ( main:2::print_dword_decimal:41::ultoa:118 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ) always clobbers reg byte a -Statement [145] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:2::print_dword_decimal:41::ultoa:118::ultoa_append:139 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ) always clobbers reg byte a -Statement [146] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) [ ultoa_append::value#2 ] ( main:2::print_dword_decimal:41::ultoa:118::ultoa_append:139 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa_append::value#2 ] ) always clobbers reg byte a reg byte y -Statement [149] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:2::print_dword_decimal:41::ultoa:118::ultoa_append:139 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ) always clobbers reg byte a -Statement [150] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 [ div32u16u::dividend#0 divr16u::dividend#1 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::dividend#1 ] ) always clobbers reg byte a -Statement [152] (word) divr16u::return#2 ← (word) divr16u::return#0 [ div32u16u::dividend#0 divr16u::return#2 rem16u#1 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a -Statement [153] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::dividend#0 div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a -Statement [154] (word) divr16u::dividend#2 ← < (dword) div32u16u::dividend#0 [ div32u16u::quotient_hi#0 divr16u::dividend#2 rem16u#1 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#2 rem16u#1 ] ) always clobbers reg byte a -Statement [155] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::dividend#2 divr16u::rem#4 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#2 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [157] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a -Statement [158] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a -Statement [159] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::div32u16u:30 [ print_line_cursor#1 main::cyclecount#0 div32u16u::return#0 ] ) always clobbers reg byte a -Statement [164] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::div32u16u:30::divr16u:151 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::div32u16u:30::divr16u:156 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Statement [167] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::div32u16u:30::divr16u:151 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::div32u16u:30::divr16u:156 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [171] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::div32u16u:30::divr16u:151 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::div32u16u:30::divr16u:156 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [173] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::div32u16u:30::divr16u:151 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::div32u16u:30::divr16u:156 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [177] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::div32u16u:30::divr16u:151 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::return#0 rem16u#1 ] main:2::div32u16u:30::divr16u:156 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a -Statement [179] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) [ clock::return#0 ] ( main:2::clock:25 [ print_line_cursor#1 clock::return#0 ] ) always clobbers reg byte a -Statement [181] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a -Statement [182] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a -Statement [183] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a -Statement [184] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a -Statement [185] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a -Statement [188] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::memset:19 [ print_line_cursor#1 memset::num#2 memset::str#3 memset::c#4 ] main:2::print_cls:7::memset:197 [ memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a -Statement [189] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::memset:19 [ print_line_cursor#1 memset::str#3 memset::c#4 memset::end#0 ] main:2::print_cls:7::memset:197 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a -Statement [190] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#4 ] main:2::print_cls:7::memset:197 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [192] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#2 ] main:2::print_cls:7::memset:197 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [194] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#2 ] main:2::print_cls:7::memset:197 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_WORD:2 [ main::i#12 main::i#2 ] : zp ZP_WORD:2 , -Potential registers zp ZP_WORD:4 [ main::sieve_i#2 main::sieve_i#1 ] : zp ZP_WORD:4 , -Potential registers zp ZP_WORD:6 [ main::i#10 main::i#3 ] : zp ZP_WORD:6 , -Potential registers zp ZP_WORD:8 [ main::j#2 main::j#0 main::j#1 ] : zp ZP_WORD:8 , -Potential registers zp ZP_WORD:10 [ main::s#2 main::s#0 main::s#1 ] : zp ZP_WORD:10 , -Potential registers zp ZP_WORD:12 [ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] : zp ZP_WORD:12 , -Potential registers zp ZP_WORD:14 [ print_char_cursor#66 print_char_cursor#89 print_char_cursor#90 print_char_cursor#91 print_char_cursor#58 print_char_cursor#97 print_char_cursor#2 print_char_cursor#1 ] : zp ZP_WORD:14 , -Potential registers zp ZP_WORD:16 [ print_str::str#8 print_str::str#10 print_str::str#0 ] : zp ZP_WORD:16 , -Potential registers zp ZP_BYTE:18 [ utoa::digit#2 utoa::digit#1 ] : zp ZP_BYTE:18 , reg byte x , -Potential registers zp ZP_WORD:19 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] : zp ZP_WORD:19 , -Potential registers zp ZP_BYTE:21 [ utoa::started#2 utoa::started#4 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:22 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] : zp ZP_WORD:22 , -Potential registers zp ZP_WORD:24 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] : zp ZP_WORD:24 , -Potential registers zp ZP_BYTE:26 [ utoa_append::digit#2 utoa_append::digit#1 ] : zp ZP_BYTE:26 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:27 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#62 print_char_cursor#78 print_line_cursor#1 print_char_cursor#10 ] : zp ZP_WORD:27 , -Potential registers zp ZP_BYTE:29 [ ultoa::digit#2 ultoa::digit#1 ] : zp ZP_BYTE:29 , reg byte x , -Potential registers zp ZP_DWORD:30 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] : zp ZP_DWORD:30 , -Potential registers zp ZP_BYTE:34 [ ultoa::started#2 ultoa::started#4 ] : zp ZP_BYTE:34 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:35 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] : zp ZP_WORD:35 , -Potential registers zp ZP_DWORD:37 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] : zp ZP_DWORD:37 , -Potential registers zp ZP_BYTE:41 [ ultoa_append::digit#2 ultoa_append::digit#1 ] : zp ZP_BYTE:41 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:42 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp ZP_WORD:42 , -Potential registers zp ZP_WORD:44 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] : zp ZP_WORD:44 , -Potential registers zp ZP_WORD:46 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:46 , -Potential registers zp ZP_BYTE:48 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:48 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:49 [ memset::num#2 ] : zp ZP_WORD:49 , -Potential registers zp ZP_WORD:51 [ memset::str#3 ] : zp ZP_WORD:51 , -Potential registers zp ZP_BYTE:53 [ memset::c#4 ] : zp ZP_BYTE:53 , reg byte x , -Potential registers zp ZP_WORD:54 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp ZP_WORD:54 , -Potential registers zp ZP_DWORD:56 [ clock::return#2 ] : zp ZP_DWORD:56 , -Potential registers zp ZP_DWORD:60 [ main::$10 ] : zp ZP_DWORD:60 , -Potential registers zp ZP_DWORD:64 [ main::cyclecount#0 ] : zp ZP_DWORD:64 , -Potential registers zp ZP_DWORD:68 [ div32u16u::dividend#0 ] : zp ZP_DWORD:68 , -Potential registers zp ZP_DWORD:72 [ div32u16u::return#2 ] : zp ZP_DWORD:72 , -Potential registers zp ZP_DWORD:76 [ main::$14 ] : zp ZP_DWORD:76 , -Potential registers zp ZP_WORD:80 [ main::sec100s#0 ] : zp ZP_WORD:80 , -Potential registers zp ZP_DWORD:82 [ print_dword_decimal::w#0 ] : zp ZP_DWORD:82 , -Potential registers zp ZP_WORD:86 [ main::$38 ] : zp ZP_WORD:86 , -Potential registers zp ZP_BYTE:88 [ utoa::$4 ] : zp ZP_BYTE:88 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:89 [ utoa::buffer#3 ] : zp ZP_WORD:89 , -Potential registers zp ZP_BYTE:91 [ utoa::$11 ] : zp ZP_BYTE:91 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:92 [ utoa::digit_value#0 ] : zp ZP_WORD:92 , -Potential registers zp ZP_WORD:94 [ utoa_append::buffer#0 ] : zp ZP_WORD:94 , -Potential registers zp ZP_WORD:96 [ utoa_append::sub#0 ] : zp ZP_WORD:96 , -Potential registers zp ZP_WORD:98 [ utoa_append::return#0 ] : zp ZP_WORD:98 , -Potential registers zp ZP_BYTE:100 [ ultoa::$4 ] : zp ZP_BYTE:100 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:101 [ ultoa::buffer#3 ] : zp ZP_WORD:101 , -Potential registers zp ZP_BYTE:103 [ ultoa::$11 ] : zp ZP_BYTE:103 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_DWORD:104 [ ultoa::digit_value#0 ] : zp ZP_DWORD:104 , +Statement [12] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 [ print_char_cursor#94 print_line_cursor#1 ] ( main:2 [ print_char_cursor#94 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [23] if((byte) 0!=*((byte*) main::sieve_i#11)) goto main::@4 [ print_line_cursor#1 main::i#17 main::sieve_i#11 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 ] ) always clobbers reg byte a reg byte y +Statement [24] (word) main::j#0 ← (word) main::i#17 << (byte) 1 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#0 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#0 ] ) always clobbers reg byte a +Statement [25] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#0 main::s#0 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#0 main::s#0 ] ) always clobbers reg byte a +Statement [27] if((word) main::j#2<(const word) COUNT#0) goto main::@6 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ) always clobbers reg byte a +Statement [30] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 [ print_line_cursor#1 main::i#12 main::sieve_i#1 ] ( main:2 [ print_line_cursor#1 main::i#12 main::sieve_i#1 ] ) always clobbers reg byte a +Statement [33] (dword) clock::return#2 ← (dword) clock::return#0 [ print_line_cursor#1 clock::return#2 ] ( main:2 [ print_line_cursor#1 clock::return#2 ] ) always clobbers reg byte a +Statement [34] (dword~) main::$10 ← (dword) clock::return#2 [ print_line_cursor#1 main::$10 ] ( main:2 [ print_line_cursor#1 main::$10 ] ) always clobbers reg byte a +Statement [35] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 [ print_line_cursor#1 main::cyclecount#0 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 ] ) always clobbers reg byte a +Statement [36] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 ] ) always clobbers reg byte a +Statement [38] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ print_line_cursor#1 main::cyclecount#0 div32u16u::return#2 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 div32u16u::return#2 ] ) always clobbers reg byte a +Statement [39] (dword~) main::$14 ← (dword) div32u16u::return#2 [ print_line_cursor#1 main::cyclecount#0 main::$14 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::$14 ] ) always clobbers reg byte a +Statement [40] (word) main::sec100s#0 ← (word)(dword~) main::$14 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 ] ) always clobbers reg byte a +Statement [41] (byte*~) print_char_cursor#95 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#95 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#95 ] ) always clobbers reg byte a +Statement [43] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 [ print_line_cursor#1 main::cyclecount#0 print_word_decimal::w#1 print_char_cursor#2 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 print_word_decimal::w#1 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [47] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 [ print_line_cursor#1 print_dword_decimal::w#0 print_char_cursor#2 ] ( main:2 [ print_line_cursor#1 print_dword_decimal::w#0 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22 [ main::i#22 print_char_cursor#90 main::$38 ] ( main:2 [ main::i#22 print_char_cursor#90 main::$38 ] ) always clobbers reg byte a +Statement [53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30 [ main::i#22 print_char_cursor#90 ] ( main:2 [ main::i#22 print_char_cursor#90 ] ) always clobbers reg byte a reg byte y +Statement [54] (word) print_word_decimal::w#2 ← (word) main::i#22 [ main::i#22 print_char_cursor#90 print_word_decimal::w#2 ] ( main:2 [ main::i#22 print_char_cursor#90 print_word_decimal::w#2 ] ) always clobbers reg byte a +Statement [55] (byte*~) print_char_cursor#101 ← (byte*) print_char_cursor#90 [ main::i#22 print_word_decimal::w#2 print_char_cursor#101 ] ( main:2 [ main::i#22 print_word_decimal::w#2 print_char_cursor#101 ] ) always clobbers reg byte a +Statement [61] if((word) main::i#10<(word) $514) goto main::@29 [ main::i#10 print_char_cursor#62 ] ( main:2 [ main::i#10 print_char_cursor#62 ] ) always clobbers reg byte a +Statement [65] (byte*~) print_char_cursor#104 ← (byte*) print_char_cursor#62 [ main::i#10 print_char_cursor#104 ] ( main:2 [ main::i#10 print_char_cursor#104 ] ) always clobbers reg byte a +Statement [66] (byte*~) print_char_cursor#106 ← (byte*) print_char_cursor#90 [ main::i#22 print_char_cursor#106 ] ( main:2 [ main::i#22 print_char_cursor#106 ] ) always clobbers reg byte a +Statement [67] *((byte*) main::s#2) ← (byte) 1 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ) always clobbers reg byte a reg byte y +Statement [68] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#1 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#1 ] ) always clobbers reg byte a +Statement [69] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#1 main::s#1 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#1 main::s#1 ] ) always clobbers reg byte a +Statement [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:42 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:46 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:63 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:84 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:44::print_str:84 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:56::print_str:84 [ main::i#22 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:48::print_str:124 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y +Statement [74] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:42 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:46 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:63 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:84 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:44::print_str:84 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:56::print_str:84 [ main::i#22 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:48::print_str:124 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y +Statement [77] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 [ print_char_cursor#2 ] ( main:2::print_char:58 [ main::i#22 print_char_cursor#2 ] ) always clobbers reg byte a reg byte y +Statement [81] (word) utoa::value#1 ← (word) print_word_decimal::w#3 [ print_char_cursor#58 utoa::value#1 ] ( main:2::print_word_decimal:15 [ print_line_cursor#1 print_char_cursor#58 utoa::value#1 ] main:2::print_word_decimal:44 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::value#1 ] main:2::print_word_decimal:56 [ main::i#22 print_char_cursor#58 utoa::value#1 ] ) always clobbers reg byte a +Statement [87] (word) utoa::digit_value#4 ← *((const word[]) RADIX_DECIMAL_VALUES#0) [ utoa::value#1 utoa::digit_value#4 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::value#1 utoa::digit_value#4 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::value#1 utoa::digit_value#4 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::value#1 utoa::digit_value#4 ] ) always clobbers reg byte a +Statement [89] if((word) utoa::value#21>=(word) utoa::digit_value#3) goto utoa::@5 [ utoa::digit#15 utoa::value#21 utoa::started#8 utoa::buffer#28 utoa::digit_value#3 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#15 utoa::value#21 utoa::started#8 utoa::buffer#28 utoa::digit_value#3 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#15 utoa::value#21 utoa::started#8 utoa::buffer#28 utoa::digit_value#3 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#15 utoa::value#21 utoa::started#8 utoa::buffer#28 utoa::digit_value#3 ] ) always clobbers reg byte a +Statement [93] (byte~) utoa::$4 ← (byte)(word) utoa::value#16 [ utoa::buffer#11 utoa::$4 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::buffer#11 utoa::$4 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::buffer#11 utoa::$4 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::buffer#11 utoa::$4 ] ) always clobbers reg byte a +Statement [94] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) [ utoa::buffer#11 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::buffer#11 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::buffer#11 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::buffer#11 ] ) always clobbers reg byte a reg byte y +Statement [95] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 [ utoa::buffer#3 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::buffer#3 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::buffer#3 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::buffer#3 ] ) always clobbers reg byte a +Statement [96] *((byte*) utoa::buffer#3) ← (byte) 0 [ ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 ] ) always clobbers reg byte a reg byte y +Statement [98] (byte~) utoa::$11 ← (byte) utoa::digit#1 << (byte) 1 [ utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::$11 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::$11 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::$11 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::$11 ] ) always clobbers reg byte a +Statement [99] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) [ utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#1 utoa::value#16 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ) always clobbers reg byte a +Statement [102] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#29 [ utoa::digit#14 utoa::value#22 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::value#22 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::value#22 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::value#22 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 ] ) always clobbers reg byte a +Statement [103] (word) utoa_append::value#0 ← (word) utoa::value#22 [ utoa::digit#14 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 utoa_append::value#0 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 utoa_append::value#0 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 utoa_append::value#0 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa::digit_value#2 utoa_append::buffer#0 utoa_append::value#0 ] ) always clobbers reg byte a +Statement [104] (word) utoa_append::sub#0 ← (word) utoa::digit_value#2 [ utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ) always clobbers reg byte a +Statement [106] (word) utoa_append::return#0 ← (word) utoa_append::value#2 [ utoa::digit#14 utoa::buffer#29 utoa_append::return#0 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::return#0 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::return#0 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::return#0 ] ) always clobbers reg byte a +Statement [107] (word) utoa::value#0 ← (word) utoa_append::return#0 [ utoa::value#0 utoa::digit#14 utoa::buffer#29 ] ( main:2::print_word_decimal:15::utoa:82 [ print_line_cursor#1 print_char_cursor#58 utoa::value#0 utoa::digit#14 utoa::buffer#29 ] main:2::print_word_decimal:44::utoa:82 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::value#0 utoa::digit#14 utoa::buffer#29 ] main:2::print_word_decimal:56::utoa:82 [ main::i#22 print_char_cursor#58 utoa::value#0 utoa::digit#14 utoa::buffer#29 ] ) always clobbers reg byte a +Statement [111] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:2::print_word_decimal:15::utoa:82::utoa_append:105 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] main:2::print_word_decimal:44::utoa:82::utoa_append:105 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] main:2::print_word_decimal:56::utoa:82::utoa_append:105 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ) always clobbers reg byte a +Statement [112] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) [ utoa_append::value#2 ] ( main:2::print_word_decimal:15::utoa:82::utoa_append:105 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::value#2 ] main:2::print_word_decimal:44::utoa:82::utoa_append:105 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::value#2 ] main:2::print_word_decimal:56::utoa:82::utoa_append:105 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::value#2 ] ) always clobbers reg byte a reg byte y +Statement [115] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:2::print_word_decimal:15::utoa:82::utoa_append:105 [ print_line_cursor#1 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] main:2::print_word_decimal:44::utoa:82::utoa_append:105 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] main:2::print_word_decimal:56::utoa:82::utoa_append:105 [ main::i#22 print_char_cursor#58 utoa::digit#14 utoa::buffer#29 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ) always clobbers reg byte a +Statement [118] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::print_ln:11 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:17 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:50 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [119] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::print_ln:11 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:17 [ print_line_cursor#1 print_char_cursor#2 ] main:2::print_ln:50 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [121] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 [ print_char_cursor#2 ultoa::value#1 ] ( main:2::print_dword_decimal:48 [ print_line_cursor#1 print_char_cursor#2 ultoa::value#1 ] ) always clobbers reg byte a +Statement [127] (dword) ultoa::digit_value#4 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0) [ ultoa::value#1 ultoa::digit_value#4 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::value#1 ultoa::digit_value#4 ] ) always clobbers reg byte a +Statement [129] if((dword) ultoa::value#21>=(dword) ultoa::digit_value#3) goto ultoa::@5 [ ultoa::digit#15 ultoa::value#21 ultoa::started#8 ultoa::buffer#28 ultoa::digit_value#3 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#15 ultoa::value#21 ultoa::started#8 ultoa::buffer#28 ultoa::digit_value#3 ] ) always clobbers reg byte a +Statement [133] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#16 [ ultoa::buffer#11 ultoa::$4 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::buffer#11 ultoa::$4 ] ) always clobbers reg byte a +Statement [134] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) [ ultoa::buffer#11 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::buffer#11 ] ) always clobbers reg byte a reg byte y +Statement [135] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 [ ultoa::buffer#3 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::buffer#3 ] ) always clobbers reg byte a +Statement [136] *((byte*) ultoa::buffer#3) ← (byte) 0 [ ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a reg byte y +Statement [138] (byte~) ultoa::$11 ← (byte) ultoa::digit#1 << (byte) 2 [ ultoa::digit#1 ultoa::value#16 ultoa::started#2 ultoa::buffer#11 ultoa::$11 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#1 ultoa::value#16 ultoa::started#2 ultoa::buffer#11 ultoa::$11 ] ) always clobbers reg byte a +Statement [139] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) [ ultoa::digit#1 ultoa::value#16 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#1 ultoa::value#16 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ) always clobbers reg byte a +Statement [142] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#29 [ ultoa::digit#14 ultoa::value#22 ultoa::buffer#29 ultoa::digit_value#2 ultoa_append::buffer#0 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::value#22 ultoa::buffer#29 ultoa::digit_value#2 ultoa_append::buffer#0 ] ) always clobbers reg byte a +Statement [143] (dword) ultoa_append::value#0 ← (dword) ultoa::value#22 [ ultoa::digit#14 ultoa::buffer#29 ultoa::digit_value#2 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::buffer#29 ultoa::digit_value#2 ultoa_append::buffer#0 ultoa_append::value#0 ] ) always clobbers reg byte a +Statement [144] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#2 [ ultoa::digit#14 ultoa::buffer#29 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::buffer#29 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ) always clobbers reg byte a +Statement [146] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 [ ultoa::digit#14 ultoa::buffer#29 ultoa_append::return#0 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::buffer#29 ultoa_append::return#0 ] ) always clobbers reg byte a +Statement [147] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 [ ultoa::value#0 ultoa::digit#14 ultoa::buffer#29 ] ( main:2::print_dword_decimal:48::ultoa:122 [ print_line_cursor#1 print_char_cursor#2 ultoa::value#0 ultoa::digit#14 ultoa::buffer#29 ] ) always clobbers reg byte a +Statement [151] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:2::print_dword_decimal:48::ultoa:122::ultoa_append:145 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::buffer#29 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ) always clobbers reg byte a +Statement [152] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) [ ultoa_append::value#2 ] ( main:2::print_dword_decimal:48::ultoa:122::ultoa_append:145 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::buffer#29 ultoa_append::value#2 ] ) always clobbers reg byte a reg byte y +Statement [155] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:2::print_dword_decimal:48::ultoa:122::ultoa_append:145 [ print_line_cursor#1 print_char_cursor#2 ultoa::digit#14 ultoa::buffer#29 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ) always clobbers reg byte a +Statement [156] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 [ div32u16u::dividend#0 divr16u::dividend#1 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::dividend#1 ] ) always clobbers reg byte a +Statement [158] (word) divr16u::return#2 ← (word) divr16u::return#0 [ div32u16u::dividend#0 divr16u::return#2 rem16u#1 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::dividend#0 div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [160] (word) divr16u::dividend#2 ← < (dword) div32u16u::dividend#0 [ div32u16u::quotient_hi#0 divr16u::dividend#2 rem16u#1 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#2 rem16u#1 ] ) always clobbers reg byte a +Statement [161] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::dividend#2 divr16u::rem#4 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#2 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [163] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [164] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a +Statement [165] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::div32u16u:37 [ print_line_cursor#1 main::cyclecount#0 div32u16u::return#0 ] ) always clobbers reg byte a +Statement [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::div32u16u:37::divr16u:157 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::div32u16u:37::divr16u:162 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::div32u16u:37::divr16u:157 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::div32u16u:37::divr16u:162 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [177] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::div32u16u:37::divr16u:157 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::div32u16u:37::divr16u:162 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::div32u16u:37::divr16u:157 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::div32u16u:37::divr16u:162 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [183] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::div32u16u:37::divr16u:157 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::return#0 rem16u#1 ] main:2::div32u16u:37::divr16u:162 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a +Statement [185] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) [ clock::return#0 ] ( main:2::clock:32 [ print_line_cursor#1 clock::return#0 ] ) always clobbers reg byte a +Statement [187] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a +Statement [188] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a +Statement [189] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a +Statement [190] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a +Statement [191] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] ) always clobbers reg byte a +Statement [194] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::memset:19 [ print_line_cursor#1 memset::num#2 memset::str#3 memset::c#4 ] main:2::print_cls:7::memset:203 [ memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a +Statement [195] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::memset:19 [ print_line_cursor#1 memset::str#3 memset::c#4 memset::end#0 ] main:2::print_cls:7::memset:203 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [196] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#4 ] main:2::print_cls:7::memset:203 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [198] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#2 ] main:2::print_cls:7::memset:203 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [200] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#2 ] main:2::print_cls:7::memset:203 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Potential registers zp ZP_WORD:2 [ main::i#17 main::i#12 ] : zp ZP_WORD:2 , +Potential registers zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] : zp ZP_WORD:4 , +Potential registers zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] : zp ZP_WORD:6 , +Potential registers zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] : zp ZP_WORD:8 , +Potential registers zp ZP_WORD:10 [ main::i#22 main::i#10 ] : zp ZP_WORD:10 , +Potential registers zp ZP_WORD:12 [ print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 ] : zp ZP_WORD:12 , +Potential registers zp ZP_WORD:14 [ print_str::str#8 print_str::str#10 print_str::str#0 ] : zp ZP_WORD:14 , +Potential registers zp ZP_WORD:16 [ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] : zp ZP_WORD:16 , +Potential registers zp ZP_BYTE:18 [ utoa::started#8 utoa::started#2 ] : zp ZP_BYTE:18 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:19 [ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] : zp ZP_BYTE:19 , reg byte x , +Potential registers zp ZP_WORD:20 [ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 ] : zp ZP_WORD:20 , +Potential registers zp ZP_WORD:22 [ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 ] : zp ZP_WORD:22 , +Potential registers zp ZP_WORD:24 [ utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 ] : zp ZP_WORD:24 , +Potential registers zp ZP_WORD:26 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] : zp ZP_WORD:26 , +Potential registers zp ZP_BYTE:28 [ utoa_append::digit#2 utoa_append::digit#1 ] : zp ZP_BYTE:28 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:29 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#90 print_char_cursor#104 print_line_cursor#1 ] : zp ZP_WORD:29 , +Potential registers zp ZP_BYTE:31 [ ultoa::started#8 ultoa::started#2 ] : zp ZP_BYTE:31 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:32 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] : zp ZP_BYTE:32 , reg byte x , +Potential registers zp ZP_DWORD:33 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ] : zp ZP_DWORD:33 , +Potential registers zp ZP_WORD:37 [ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ] : zp ZP_WORD:37 , +Potential registers zp ZP_DWORD:39 [ ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ] : zp ZP_DWORD:39 , +Potential registers zp ZP_DWORD:43 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] : zp ZP_DWORD:43 , +Potential registers zp ZP_BYTE:47 [ ultoa_append::digit#2 ultoa_append::digit#1 ] : zp ZP_BYTE:47 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:48 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp ZP_WORD:48 , +Potential registers zp ZP_WORD:50 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] : zp ZP_WORD:50 , +Potential registers zp ZP_WORD:52 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:52 , +Potential registers zp ZP_BYTE:54 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:54 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:55 [ memset::num#2 ] : zp ZP_WORD:55 , +Potential registers zp ZP_WORD:57 [ memset::str#3 ] : zp ZP_WORD:57 , +Potential registers zp ZP_BYTE:59 [ memset::c#4 ] : zp ZP_BYTE:59 , reg byte x , +Potential registers zp ZP_WORD:60 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp ZP_WORD:60 , +Potential registers zp ZP_DWORD:62 [ clock::return#2 ] : zp ZP_DWORD:62 , +Potential registers zp ZP_DWORD:66 [ main::$10 ] : zp ZP_DWORD:66 , +Potential registers zp ZP_DWORD:70 [ main::cyclecount#0 ] : zp ZP_DWORD:70 , +Potential registers zp ZP_DWORD:74 [ div32u16u::dividend#0 ] : zp ZP_DWORD:74 , +Potential registers zp ZP_DWORD:78 [ div32u16u::return#2 ] : zp ZP_DWORD:78 , +Potential registers zp ZP_DWORD:82 [ main::$14 ] : zp ZP_DWORD:82 , +Potential registers zp ZP_WORD:86 [ main::sec100s#0 ] : zp ZP_WORD:86 , +Potential registers zp ZP_DWORD:88 [ print_dword_decimal::w#0 ] : zp ZP_DWORD:88 , +Potential registers zp ZP_WORD:92 [ main::$38 ] : zp ZP_WORD:92 , +Potential registers zp ZP_BYTE:94 [ utoa::$4 ] : zp ZP_BYTE:94 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:95 [ utoa::buffer#3 ] : zp ZP_WORD:95 , +Potential registers zp ZP_BYTE:97 [ utoa::$11 ] : zp ZP_BYTE:97 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:98 [ utoa_append::buffer#0 ] : zp ZP_WORD:98 , +Potential registers zp ZP_WORD:100 [ utoa_append::sub#0 ] : zp ZP_WORD:100 , +Potential registers zp ZP_WORD:102 [ utoa_append::return#0 ] : zp ZP_WORD:102 , +Potential registers zp ZP_BYTE:104 [ ultoa::$4 ] : zp ZP_BYTE:104 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:105 [ ultoa::buffer#3 ] : zp ZP_WORD:105 , +Potential registers zp ZP_BYTE:107 [ ultoa::$11 ] : zp ZP_BYTE:107 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:108 [ ultoa_append::buffer#0 ] : zp ZP_WORD:108 , Potential registers zp ZP_DWORD:110 [ ultoa_append::sub#0 ] : zp ZP_DWORD:110 , Potential registers zp ZP_DWORD:114 [ ultoa_append::return#0 ] : zp ZP_DWORD:114 , @@ -6095,97 +6370,97 @@ Potential registers zp ZP_DWORD:134 [ clock::return#0 ] : zp ZP_DWORD:134 , Potential registers zp ZP_WORD:138 [ memset::end#0 ] : zp ZP_WORD:138 , REGISTER UPLIFT SCOPES -Uplift Scope [utoa_append] 2,554: zp ZP_WORD:24 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] 2,003: zp ZP_BYTE:26 [ utoa_append::digit#2 utoa_append::digit#1 ] 350.5: zp ZP_WORD:96 [ utoa_append::sub#0 ] 202: zp ZP_WORD:98 [ utoa_append::return#0 ] 12.88: zp ZP_WORD:94 [ utoa_append::buffer#0 ] -Uplift Scope [utoa] 382.64: zp ZP_WORD:22 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] 312.5: zp ZP_WORD:19 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] 230.86: zp ZP_BYTE:18 [ utoa::digit#2 utoa::digit#1 ] 202: zp ZP_BYTE:91 [ utoa::$11 ] 151.5: zp ZP_BYTE:21 [ utoa::started#2 utoa::started#4 ] 60.6: zp ZP_WORD:92 [ utoa::digit_value#0 ] 4: zp ZP_BYTE:88 [ utoa::$4 ] 4: zp ZP_WORD:89 [ utoa::buffer#3 ] -Uplift Scope [main] 297: zp ZP_WORD:8 [ main::j#2 main::j#0 main::j#1 ] 227.67: zp ZP_WORD:10 [ main::s#2 main::s#0 main::s#1 ] 35.6: zp ZP_WORD:2 [ main::i#12 main::i#2 ] 27.5: zp ZP_WORD:6 [ main::i#10 main::i#3 ] 25: zp ZP_WORD:4 [ main::sieve_i#2 main::sieve_i#1 ] 22: zp ZP_WORD:86 [ main::$38 ] 4: zp ZP_DWORD:60 [ main::$10 ] 2: zp ZP_DWORD:76 [ main::$14 ] 1.33: zp ZP_WORD:80 [ main::sec100s#0 ] 0.5: zp ZP_DWORD:64 [ main::cyclecount#0 ] -Uplift Scope [ultoa_append] 259: zp ZP_DWORD:37 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] 203: zp ZP_BYTE:41 [ ultoa_append::digit#2 ultoa_append::digit#1 ] 35.5: zp ZP_DWORD:110 [ ultoa_append::sub#0 ] 22: zp ZP_DWORD:114 [ ultoa_append::return#0 ] 1.62: zp ZP_WORD:108 [ ultoa_append::buffer#0 ] -Uplift Scope [print_str] 305.5: zp ZP_WORD:16 [ print_str::str#8 print_str::str#10 print_str::str#0 ] -Uplift Scope [divr16u] 106.92: zp ZP_WORD:42 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp ZP_WORD:46 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:130 [ divr16u::$1 ] 22: zp ZP_BYTE:131 [ divr16u::$2 ] 19.75: zp ZP_WORD:44 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] 18.19: zp ZP_BYTE:48 [ divr16u::i#2 divr16u::i#1 ] 4: zp ZP_WORD:118 [ divr16u::return#2 ] 4: zp ZP_WORD:122 [ divr16u::return#3 ] -Uplift Scope [] 163.5: zp ZP_WORD:14 [ print_char_cursor#66 print_char_cursor#89 print_char_cursor#90 print_char_cursor#91 print_char_cursor#58 print_char_cursor#97 print_char_cursor#2 print_char_cursor#1 ] 59.17: zp ZP_WORD:27 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#62 print_char_cursor#78 print_line_cursor#1 print_char_cursor#10 ] 0.67: zp ZP_WORD:132 [ rem16u#1 ] -Uplift Scope [ultoa] 41.93: zp ZP_WORD:35 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] 36.07: zp ZP_DWORD:30 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] 25.14: zp ZP_BYTE:29 [ ultoa::digit#2 ultoa::digit#1 ] 22: zp ZP_BYTE:103 [ ultoa::$11 ] 16.5: zp ZP_BYTE:34 [ ultoa::started#2 ultoa::started#4 ] 6.6: zp ZP_DWORD:104 [ ultoa::digit_value#0 ] 4: zp ZP_BYTE:100 [ ultoa::$4 ] 4: zp ZP_WORD:101 [ ultoa::buffer#3 ] -Uplift Scope [memset] 41.33: zp ZP_WORD:54 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp ZP_WORD:138 [ memset::end#0 ] 2: zp ZP_WORD:49 [ memset::num#2 ] 1.38: zp ZP_BYTE:53 [ memset::c#4 ] 0: zp ZP_WORD:51 [ memset::str#3 ] -Uplift Scope [print_word_decimal] 30: zp ZP_WORD:12 [ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] -Uplift Scope [div32u16u] 4: zp ZP_DWORD:72 [ div32u16u::return#2 ] 4: zp ZP_WORD:124 [ div32u16u::quotient_lo#0 ] 1.33: zp ZP_DWORD:126 [ div32u16u::return#0 ] 1.2: zp ZP_DWORD:68 [ div32u16u::dividend#0 ] 0.67: zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ] -Uplift Scope [clock] 4: zp ZP_DWORD:56 [ clock::return#2 ] 1.33: zp ZP_DWORD:134 [ clock::return#0 ] -Uplift Scope [print_dword_decimal] 4: zp ZP_DWORD:82 [ print_dword_decimal::w#0 ] +Uplift Scope [utoa_append] 2,554: zp ZP_WORD:26 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] 2,003: zp ZP_BYTE:28 [ utoa_append::digit#2 utoa_append::digit#1 ] 350.5: zp ZP_WORD:100 [ utoa_append::sub#0 ] 202: zp ZP_WORD:102 [ utoa_append::return#0 ] 12.88: zp ZP_WORD:98 [ utoa_append::buffer#0 ] +Uplift Scope [utoa] 593.38: zp ZP_BYTE:19 [ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] 524.17: zp ZP_WORD:20 [ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 ] 462.21: zp ZP_WORD:22 [ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 ] 409: zp ZP_WORD:24 [ utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 ] 202: zp ZP_BYTE:97 [ utoa::$11 ] 151.5: zp ZP_BYTE:18 [ utoa::started#8 utoa::started#2 ] 4: zp ZP_BYTE:94 [ utoa::$4 ] 4: zp ZP_WORD:95 [ utoa::buffer#3 ] +Uplift Scope [main] 297: zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] 227.67: zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] 37.11: zp ZP_WORD:2 [ main::i#17 main::i#12 ] 22: zp ZP_WORD:92 [ main::$38 ] 15.4: zp ZP_WORD:10 [ main::i#22 main::i#10 ] 14.3: zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] 4: zp ZP_DWORD:66 [ main::$10 ] 2: zp ZP_DWORD:82 [ main::$14 ] 1.33: zp ZP_WORD:86 [ main::sec100s#0 ] 0.5: zp ZP_DWORD:70 [ main::cyclecount#0 ] +Uplift Scope [ultoa_append] 259: zp ZP_DWORD:43 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] 203: zp ZP_BYTE:47 [ ultoa_append::digit#2 ultoa_append::digit#1 ] 35.5: zp ZP_DWORD:110 [ ultoa_append::sub#0 ] 22: zp ZP_DWORD:114 [ ultoa_append::return#0 ] 1.62: zp ZP_WORD:108 [ ultoa_append::buffer#0 ] +Uplift Scope [print_str] 305.5: zp ZP_WORD:14 [ print_str::str#8 print_str::str#10 print_str::str#0 ] +Uplift Scope [ultoa] 64.62: zp ZP_BYTE:32 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] 59.17: zp ZP_DWORD:33 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ] 50.79: zp ZP_WORD:37 [ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ] 49: zp ZP_DWORD:39 [ ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ] 22: zp ZP_BYTE:107 [ ultoa::$11 ] 16.5: zp ZP_BYTE:31 [ ultoa::started#8 ultoa::started#2 ] 4: zp ZP_BYTE:104 [ ultoa::$4 ] 4: zp ZP_WORD:105 [ ultoa::buffer#3 ] +Uplift Scope [] 194.58: zp ZP_WORD:12 [ print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 ] 61.68: zp ZP_WORD:29 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#90 print_char_cursor#104 print_line_cursor#1 ] 0.67: zp ZP_WORD:132 [ rem16u#1 ] +Uplift Scope [divr16u] 106.92: zp ZP_WORD:48 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp ZP_WORD:52 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:130 [ divr16u::$1 ] 22: zp ZP_BYTE:131 [ divr16u::$2 ] 19.75: zp ZP_WORD:50 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] 18.19: zp ZP_BYTE:54 [ divr16u::i#2 divr16u::i#1 ] 4: zp ZP_WORD:118 [ divr16u::return#2 ] 4: zp ZP_WORD:122 [ divr16u::return#3 ] +Uplift Scope [memset] 41.33: zp ZP_WORD:60 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp ZP_WORD:138 [ memset::end#0 ] 2: zp ZP_WORD:55 [ memset::num#2 ] 1.38: zp ZP_BYTE:59 [ memset::c#4 ] 0: zp ZP_WORD:57 [ memset::str#3 ] +Uplift Scope [print_word_decimal] 30: zp ZP_WORD:16 [ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] +Uplift Scope [div32u16u] 4: zp ZP_DWORD:78 [ div32u16u::return#2 ] 4: zp ZP_WORD:124 [ div32u16u::quotient_lo#0 ] 1.33: zp ZP_DWORD:126 [ div32u16u::return#0 ] 1.2: zp ZP_DWORD:74 [ div32u16u::dividend#0 ] 0.67: zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ] +Uplift Scope [clock] 4: zp ZP_DWORD:62 [ clock::return#2 ] 1.33: zp ZP_DWORD:134 [ clock::return#0 ] +Uplift Scope [print_dword_decimal] 4: zp ZP_DWORD:88 [ print_dword_decimal::w#0 ] Uplift Scope [clock_start] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_char] Uplift Scope [print_cls] -Uplifting [utoa_append] best 103419 combination zp ZP_WORD:24 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp ZP_WORD:96 [ utoa_append::sub#0 ] zp ZP_WORD:98 [ utoa_append::return#0 ] zp ZP_WORD:94 [ utoa_append::buffer#0 ] -Uplifting [utoa] best 102115 combination zp ZP_WORD:22 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] zp ZP_WORD:19 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] zp ZP_BYTE:18 [ utoa::digit#2 utoa::digit#1 ] reg byte a [ utoa::$11 ] reg byte x [ utoa::started#2 utoa::started#4 ] zp ZP_WORD:92 [ utoa::digit_value#0 ] reg byte a [ utoa::$4 ] zp ZP_WORD:89 [ utoa::buffer#3 ] -Uplifting [main] best 102115 combination zp ZP_WORD:8 [ main::j#2 main::j#0 main::j#1 ] zp ZP_WORD:10 [ main::s#2 main::s#0 main::s#1 ] zp ZP_WORD:2 [ main::i#12 main::i#2 ] zp ZP_WORD:6 [ main::i#10 main::i#3 ] zp ZP_WORD:4 [ main::sieve_i#2 main::sieve_i#1 ] zp ZP_WORD:86 [ main::$38 ] zp ZP_DWORD:60 [ main::$10 ] zp ZP_DWORD:76 [ main::$14 ] zp ZP_WORD:80 [ main::sec100s#0 ] zp ZP_DWORD:64 [ main::cyclecount#0 ] -Uplifting [ultoa_append] best 101512 combination zp ZP_DWORD:37 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] zp ZP_DWORD:110 [ ultoa_append::sub#0 ] zp ZP_DWORD:114 [ ultoa_append::return#0 ] zp ZP_WORD:108 [ ultoa_append::buffer#0 ] -Uplifting [print_str] best 101512 combination zp ZP_WORD:16 [ print_str::str#8 print_str::str#10 print_str::str#0 ] -Uplifting [divr16u] best 101302 combination zp ZP_WORD:42 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:46 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] zp ZP_WORD:44 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:118 [ divr16u::return#2 ] zp ZP_WORD:122 [ divr16u::return#3 ] -Uplifting [] best 101302 combination zp ZP_WORD:14 [ print_char_cursor#66 print_char_cursor#89 print_char_cursor#90 print_char_cursor#91 print_char_cursor#58 print_char_cursor#97 print_char_cursor#2 print_char_cursor#1 ] zp ZP_WORD:27 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#62 print_char_cursor#78 print_line_cursor#1 print_char_cursor#10 ] zp ZP_WORD:132 [ rem16u#1 ] -Uplifting [ultoa] best 101168 combination zp ZP_WORD:35 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] zp ZP_DWORD:30 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] zp ZP_BYTE:29 [ ultoa::digit#2 ultoa::digit#1 ] reg byte a [ ultoa::$11 ] reg byte x [ ultoa::started#2 ultoa::started#4 ] zp ZP_DWORD:104 [ ultoa::digit_value#0 ] reg byte a [ ultoa::$4 ] zp ZP_WORD:101 [ ultoa::buffer#3 ] -Uplifting [memset] best 101152 combination zp ZP_WORD:54 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:138 [ memset::end#0 ] zp ZP_WORD:49 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp ZP_WORD:51 [ memset::str#3 ] -Uplifting [print_word_decimal] best 101152 combination zp ZP_WORD:12 [ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] -Uplifting [div32u16u] best 101152 combination zp ZP_DWORD:72 [ div32u16u::return#2 ] zp ZP_WORD:124 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:126 [ div32u16u::return#0 ] zp ZP_DWORD:68 [ div32u16u::dividend#0 ] zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ] -Uplifting [clock] best 101152 combination zp ZP_DWORD:56 [ clock::return#2 ] zp ZP_DWORD:134 [ clock::return#0 ] -Uplifting [print_dword_decimal] best 101152 combination zp ZP_DWORD:82 [ print_dword_decimal::w#0 ] -Uplifting [clock_start] best 101152 combination -Uplifting [RADIX] best 101152 combination -Uplifting [print_ln] best 101152 combination -Uplifting [print_char] best 101152 combination -Uplifting [print_cls] best 101152 combination -Attempting to uplift remaining variables inzp ZP_BYTE:18 [ utoa::digit#2 utoa::digit#1 ] -Uplifting [utoa] best 101152 combination zp ZP_BYTE:18 [ utoa::digit#2 utoa::digit#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:29 [ ultoa::digit#2 ultoa::digit#1 ] -Uplifting [ultoa] best 101152 combination zp ZP_BYTE:29 [ ultoa::digit#2 ultoa::digit#1 ] -Coalescing zero page register [ zp ZP_WORD:42 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:132 [ rem16u#1 ] ] - score: 2 -Coalescing zero page register [ zp ZP_WORD:6 [ main::i#10 main::i#3 ] ] with [ zp ZP_WORD:12 [ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:19 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] ] with [ zp ZP_WORD:24 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:19 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] with [ zp ZP_WORD:98 [ utoa_append::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:22 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] ] with [ zp ZP_WORD:89 [ utoa::buffer#3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:22 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 ] ] with [ zp ZP_WORD:94 [ utoa_append::buffer#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:30 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] ] with [ zp ZP_DWORD:37 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:30 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] ] with [ zp ZP_DWORD:82 [ print_dword_decimal::w#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:30 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 print_dword_decimal::w#0 ] ] with [ zp ZP_DWORD:114 [ ultoa_append::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:35 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] ] with [ zp ZP_WORD:101 [ ultoa::buffer#3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:35 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ] ] with [ zp ZP_WORD:108 [ ultoa_append::buffer#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:46 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:118 [ divr16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:46 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:122 [ divr16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:49 [ memset::num#2 ] ] with [ zp ZP_WORD:138 [ memset::end#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:51 [ memset::str#3 ] ] with [ zp ZP_WORD:54 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:56 [ clock::return#2 ] ] with [ zp ZP_DWORD:60 [ main::$10 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:56 [ clock::return#2 main::$10 ] ] with [ zp ZP_DWORD:134 [ clock::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:64 [ main::cyclecount#0 ] ] with [ zp ZP_DWORD:68 [ div32u16u::dividend#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:72 [ div32u16u::return#2 ] ] with [ zp ZP_DWORD:76 [ main::$14 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:72 [ div32u16u::return#2 main::$14 ] ] with [ zp ZP_DWORD:126 [ div32u16u::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:92 [ utoa::digit_value#0 ] ] with [ zp ZP_WORD:96 [ utoa_append::sub#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:104 [ ultoa::digit_value#0 ] ] with [ zp ZP_DWORD:110 [ ultoa_append::sub#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:6 [ main::i#10 main::i#3 print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] ] with [ zp ZP_WORD:80 [ main::sec100s#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:30 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 print_dword_decimal::w#0 ultoa_append::return#0 ] ] with [ zp ZP_DWORD:64 [ main::cyclecount#0 div32u16u::dividend#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:46 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp ZP_WORD:124 [ div32u16u::quotient_lo#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_DWORD:30 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 print_dword_decimal::w#0 ultoa_append::return#0 main::cyclecount#0 div32u16u::dividend#0 ] ] with [ zp ZP_DWORD:56 [ clock::return#2 main::$10 clock::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:14 [ print_char_cursor#66 print_char_cursor#89 print_char_cursor#90 print_char_cursor#91 print_char_cursor#58 print_char_cursor#97 print_char_cursor#2 print_char_cursor#1 ] ] with [ zp ZP_WORD:2 [ main::i#12 main::i#2 ] ] -Coalescing zero page register [ zp ZP_WORD:16 [ print_str::str#8 print_str::str#10 print_str::str#0 ] ] with [ zp ZP_WORD:4 [ main::sieve_i#2 main::sieve_i#1 ] ] -Coalescing zero page register [ zp ZP_WORD:19 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] with [ zp ZP_WORD:8 [ main::j#2 main::j#0 main::j#1 ] ] -Coalescing zero page register [ zp ZP_WORD:22 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ] with [ zp ZP_WORD:10 [ main::s#2 main::s#0 main::s#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:29 [ ultoa::digit#2 ultoa::digit#1 ] ] with [ zp ZP_BYTE:18 [ utoa::digit#2 utoa::digit#1 ] ] -Coalescing zero page register [ zp ZP_WORD:35 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 ] ] with [ zp ZP_WORD:6 [ main::i#10 main::i#3 print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 main::sec100s#0 ] ] -Coalescing zero page register [ zp ZP_WORD:49 [ memset::num#2 memset::end#0 ] ] with [ zp ZP_WORD:42 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] -Coalescing zero page register [ zp ZP_WORD:51 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:44 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] ] -Coalescing zero page register [ zp ZP_WORD:86 [ main::$38 ] ] with [ zp ZP_WORD:46 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] -Coalescing zero page register [ zp ZP_DWORD:104 [ ultoa::digit_value#0 ultoa_append::sub#0 ] ] with [ zp ZP_DWORD:72 [ div32u16u::return#2 main::$14 div32u16u::return#0 ] ] -Coalescing zero page register [ zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:92 [ utoa::digit_value#0 utoa_append::sub#0 ] ] -Coalescing zero page register [ zp ZP_WORD:49 [ memset::num#2 memset::end#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 ] ] with [ zp ZP_WORD:16 [ print_str::str#8 print_str::str#10 print_str::str#0 main::sieve_i#2 main::sieve_i#1 ] ] -Coalescing zero page register [ zp ZP_WORD:51 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] ] with [ zp ZP_WORD:14 [ print_char_cursor#66 print_char_cursor#89 print_char_cursor#90 print_char_cursor#91 print_char_cursor#58 print_char_cursor#97 print_char_cursor#2 print_char_cursor#1 main::i#12 main::i#2 ] ] -Allocated (was zp ZP_WORD:19) zp ZP_WORD:2 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 main::j#2 main::j#0 main::j#1 ] -Allocated (was zp ZP_WORD:22) zp ZP_WORD:4 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 main::s#2 main::s#0 main::s#1 ] -Allocated (was zp ZP_WORD:27) zp ZP_WORD:6 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#62 print_char_cursor#78 print_line_cursor#1 print_char_cursor#10 ] -Allocated (was zp ZP_BYTE:29) zp ZP_BYTE:8 [ ultoa::digit#2 ultoa::digit#1 utoa::digit#2 utoa::digit#1 ] -Allocated (was zp ZP_DWORD:30) zp ZP_DWORD:9 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 print_dword_decimal::w#0 ultoa_append::return#0 main::cyclecount#0 div32u16u::dividend#0 clock::return#2 main::$10 clock::return#0 ] -Allocated (was zp ZP_WORD:35) zp ZP_WORD:13 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 main::i#10 main::i#3 print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 main::sec100s#0 ] -Allocated (was zp ZP_WORD:49) zp ZP_WORD:15 [ memset::num#2 memset::end#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 print_str::str#8 print_str::str#10 print_str::str#0 main::sieve_i#2 main::sieve_i#1 ] -Allocated (was zp ZP_WORD:51) zp ZP_WORD:17 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 print_char_cursor#66 print_char_cursor#89 print_char_cursor#90 print_char_cursor#91 print_char_cursor#58 print_char_cursor#97 print_char_cursor#2 print_char_cursor#1 main::i#12 main::i#2 ] -Allocated (was zp ZP_WORD:86) zp ZP_WORD:19 [ main::$38 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] -Allocated (was zp ZP_DWORD:104) zp ZP_DWORD:21 [ ultoa::digit_value#0 ultoa_append::sub#0 div32u16u::return#2 main::$14 div32u16u::return#0 ] -Allocated (was zp ZP_WORD:120) zp ZP_WORD:25 [ div32u16u::quotient_hi#0 utoa::digit_value#0 utoa_append::sub#0 ] +Uplifting [utoa_append] best 104136 combination zp ZP_WORD:26 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp ZP_WORD:100 [ utoa_append::sub#0 ] zp ZP_WORD:102 [ utoa_append::return#0 ] zp ZP_WORD:98 [ utoa_append::buffer#0 ] +Uplifting [utoa] best 102832 combination zp ZP_BYTE:19 [ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] zp ZP_WORD:20 [ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 ] zp ZP_WORD:22 [ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 ] zp ZP_WORD:24 [ utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 ] reg byte a [ utoa::$11 ] reg byte x [ utoa::started#8 utoa::started#2 ] reg byte a [ utoa::$4 ] zp ZP_WORD:95 [ utoa::buffer#3 ] +Uplifting [main] best 102832 combination zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] zp ZP_WORD:2 [ main::i#17 main::i#12 ] zp ZP_WORD:92 [ main::$38 ] zp ZP_WORD:10 [ main::i#22 main::i#10 ] zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] zp ZP_DWORD:66 [ main::$10 ] zp ZP_DWORD:82 [ main::$14 ] zp ZP_WORD:86 [ main::sec100s#0 ] zp ZP_DWORD:70 [ main::cyclecount#0 ] +Uplifting [ultoa_append] best 102229 combination zp ZP_DWORD:43 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] zp ZP_DWORD:110 [ ultoa_append::sub#0 ] zp ZP_DWORD:114 [ ultoa_append::return#0 ] zp ZP_WORD:108 [ ultoa_append::buffer#0 ] +Uplifting [print_str] best 102229 combination zp ZP_WORD:14 [ print_str::str#8 print_str::str#10 print_str::str#0 ] +Uplifting [ultoa] best 102095 combination zp ZP_BYTE:32 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] zp ZP_DWORD:33 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ] zp ZP_WORD:37 [ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ] zp ZP_DWORD:39 [ ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ] reg byte a [ ultoa::$11 ] reg byte x [ ultoa::started#8 ultoa::started#2 ] reg byte a [ ultoa::$4 ] zp ZP_WORD:105 [ ultoa::buffer#3 ] +Uplifting [] best 102095 combination zp ZP_WORD:12 [ print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 ] zp ZP_WORD:29 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#90 print_char_cursor#104 print_line_cursor#1 ] zp ZP_WORD:132 [ rem16u#1 ] +Uplifting [divr16u] best 101885 combination zp ZP_WORD:48 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:52 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] zp ZP_WORD:50 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:118 [ divr16u::return#2 ] zp ZP_WORD:122 [ divr16u::return#3 ] +Uplifting [memset] best 101869 combination zp ZP_WORD:60 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:138 [ memset::end#0 ] zp ZP_WORD:55 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp ZP_WORD:57 [ memset::str#3 ] +Uplifting [print_word_decimal] best 101869 combination zp ZP_WORD:16 [ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] +Uplifting [div32u16u] best 101869 combination zp ZP_DWORD:78 [ div32u16u::return#2 ] zp ZP_WORD:124 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:126 [ div32u16u::return#0 ] zp ZP_DWORD:74 [ div32u16u::dividend#0 ] zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ] +Uplifting [clock] best 101869 combination zp ZP_DWORD:62 [ clock::return#2 ] zp ZP_DWORD:134 [ clock::return#0 ] +Uplifting [print_dword_decimal] best 101869 combination zp ZP_DWORD:88 [ print_dword_decimal::w#0 ] +Uplifting [clock_start] best 101869 combination +Uplifting [RADIX] best 101869 combination +Uplifting [print_ln] best 101869 combination +Uplifting [print_char] best 101869 combination +Uplifting [print_cls] best 101869 combination +Attempting to uplift remaining variables inzp ZP_BYTE:19 [ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] +Uplifting [utoa] best 101869 combination zp ZP_BYTE:19 [ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:32 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] +Uplifting [ultoa] best 101869 combination zp ZP_BYTE:32 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] +Coalescing zero page register [ zp ZP_WORD:48 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:132 [ rem16u#1 ] ] - score: 2 +Coalescing zero page register [ zp ZP_WORD:10 [ main::i#22 main::i#10 ] ] with [ zp ZP_WORD:16 [ print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:20 [ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 ] ] with [ zp ZP_WORD:26 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:20 [ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] with [ zp ZP_WORD:102 [ utoa_append::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:22 [ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 ] ] with [ zp ZP_WORD:95 [ utoa::buffer#3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:22 [ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 utoa::buffer#3 ] ] with [ zp ZP_WORD:98 [ utoa_append::buffer#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:24 [ utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 ] ] with [ zp ZP_WORD:100 [ utoa_append::sub#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:33 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ] ] with [ zp ZP_DWORD:43 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:33 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] ] with [ zp ZP_DWORD:88 [ print_dword_decimal::w#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:33 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 print_dword_decimal::w#0 ] ] with [ zp ZP_DWORD:114 [ ultoa_append::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:37 [ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ] ] with [ zp ZP_WORD:105 [ ultoa::buffer#3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:37 [ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ultoa::buffer#3 ] ] with [ zp ZP_WORD:108 [ ultoa_append::buffer#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:39 [ ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ] ] with [ zp ZP_DWORD:110 [ ultoa_append::sub#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:52 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:118 [ divr16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:52 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:122 [ divr16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:55 [ memset::num#2 ] ] with [ zp ZP_WORD:138 [ memset::end#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:57 [ memset::str#3 ] ] with [ zp ZP_WORD:60 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:62 [ clock::return#2 ] ] with [ zp ZP_DWORD:66 [ main::$10 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:62 [ clock::return#2 main::$10 ] ] with [ zp ZP_DWORD:134 [ clock::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:70 [ main::cyclecount#0 ] ] with [ zp ZP_DWORD:74 [ div32u16u::dividend#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:78 [ div32u16u::return#2 ] ] with [ zp ZP_DWORD:82 [ main::$14 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:78 [ div32u16u::return#2 main::$14 ] ] with [ zp ZP_DWORD:126 [ div32u16u::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:10 [ main::i#22 main::i#10 print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 ] ] with [ zp ZP_WORD:86 [ main::sec100s#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:33 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 print_dword_decimal::w#0 ultoa_append::return#0 ] ] with [ zp ZP_DWORD:70 [ main::cyclecount#0 div32u16u::dividend#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:52 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp ZP_WORD:124 [ div32u16u::quotient_lo#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_DWORD:33 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 print_dword_decimal::w#0 ultoa_append::return#0 main::cyclecount#0 div32u16u::dividend#0 ] ] with [ zp ZP_DWORD:62 [ clock::return#2 main::$10 clock::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:12 [ print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 ] ] with [ zp ZP_WORD:2 [ main::i#17 main::i#12 ] ] +Coalescing zero page register [ zp ZP_WORD:14 [ print_str::str#8 print_str::str#10 print_str::str#0 ] ] with [ zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] ] +Coalescing zero page register [ zp ZP_WORD:20 [ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] with [ zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] ] +Coalescing zero page register [ zp ZP_WORD:22 [ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ] with [ zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:32 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] ] with [ zp ZP_BYTE:19 [ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] ] +Coalescing zero page register [ zp ZP_WORD:37 [ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 ] ] with [ zp ZP_WORD:10 [ main::i#22 main::i#10 print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 main::sec100s#0 ] ] +Coalescing zero page register [ zp ZP_WORD:48 [ 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 ] ] with [ zp ZP_WORD:24 [ utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 utoa_append::sub#0 ] ] +Coalescing zero page register [ zp ZP_WORD:55 [ memset::num#2 memset::end#0 ] ] with [ zp ZP_WORD:50 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] ] +Coalescing zero page register [ zp ZP_WORD:57 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:52 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] +Coalescing zero page register [ zp ZP_DWORD:78 [ div32u16u::return#2 main::$14 div32u16u::return#0 ] ] with [ zp ZP_DWORD:39 [ ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ultoa_append::sub#0 ] ] +Coalescing zero page register [ zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:92 [ main::$38 ] ] +Coalescing zero page register [ zp ZP_WORD:48 [ 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 utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 utoa_append::sub#0 ] ] with [ zp ZP_WORD:14 [ print_str::str#8 print_str::str#10 print_str::str#0 main::sieve_i#11 main::sieve_i#1 ] ] +Coalescing zero page register [ zp ZP_WORD:55 [ memset::num#2 memset::end#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] ] with [ zp ZP_WORD:12 [ print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 main::i#17 main::i#12 ] ] +Coalescing zero page register [ zp ZP_WORD:57 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp ZP_WORD:20 [ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 main::j#2 main::j#0 main::j#1 ] ] +Allocated (was zp ZP_WORD:22) zp ZP_WORD:2 [ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 main::s#2 main::s#0 main::s#1 ] +Allocated (was zp ZP_WORD:29) zp ZP_WORD:4 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#90 print_char_cursor#104 print_line_cursor#1 ] +Allocated (was zp ZP_BYTE:32) zp ZP_BYTE:6 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] +Allocated (was zp ZP_DWORD:33) zp ZP_DWORD:7 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 print_dword_decimal::w#0 ultoa_append::return#0 main::cyclecount#0 div32u16u::dividend#0 clock::return#2 main::$10 clock::return#0 ] +Allocated (was zp ZP_WORD:37) zp ZP_WORD:11 [ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 main::i#22 main::i#10 print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 main::sec100s#0 ] +Allocated (was zp ZP_WORD:48) zp ZP_WORD:13 [ 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 utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 utoa_append::sub#0 print_str::str#8 print_str::str#10 print_str::str#0 main::sieve_i#11 main::sieve_i#1 ] +Allocated (was zp ZP_WORD:55) zp ZP_WORD:15 [ memset::num#2 memset::end#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 main::i#17 main::i#12 ] +Allocated (was zp ZP_WORD:57) zp ZP_WORD:17 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 main::j#2 main::j#0 main::j#1 ] +Allocated (was zp ZP_DWORD:78) zp ZP_DWORD:19 [ div32u16u::return#2 main::$14 div32u16u::return#0 ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ultoa_append::sub#0 ] +Allocated (was zp ZP_WORD:120) zp ZP_WORD:23 [ div32u16u::quotient_hi#0 main::$38 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -6222,12 +6497,11 @@ ASSEMBLER BEFORE OPTIMIZATION .label sieve = $1000 // Clock cycles per second (on a C64 PAL) .const CLOCKS_PER_SEC = CLOCKS_PER_FRAME*FRAMES_PER_SEC - .label rem16u = $f - .label print_char_cursor = $11 - .label print_line_cursor = 6 - .label print_char_cursor_10 = 6 - .label print_char_cursor_62 = 6 - .label print_char_cursor_78 = 6 + .label rem16u = $d + .label print_char_cursor = $f + .label print_line_cursor = 4 + .label print_char_cursor_90 = 4 + .label print_char_cursor_104 = 4 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -6248,17 +6522,17 @@ bend: main: { .label toD0181_gfx = $1800 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>toD0181_gfx)/4&$f - .label _10 = 9 - .label _14 = $15 - .label cyclecount = 9 - .label sec100s = $d - .label i = $11 - .label sieve_i = $f - .label j = 2 - .label s = 4 - .label i_3 = $d - .label i_10 = $d - .label _38 = $13 + .label _10 = 7 + .label _14 = $13 + .label cyclecount = 7 + .label sec100s = $b + .label sieve_i = $d + .label j = $11 + .label s = 2 + .label i = $b + .label i_12 = $f + .label _38 = $17 + .label i_17 = $f // [5] phi from main to main::toD0181 [phi:main->main::toD0181] toD0181_from_main: jmp toD0181 @@ -6272,7 +6546,7 @@ main: { lda #toD0181_return sta D018 // [7] call print_cls - // [196] phi from main::@14 to print_cls [phi:main::@14->print_cls] + // [202] phi from main::@14 to print_cls [phi:main::@14->print_cls] print_cls_from_b14: jsr print_cls // [8] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -6281,14 +6555,14 @@ main: { // main::@15 b15: // [9] call print_str - // [77] phi from main::@15 to print_str [phi:main::@15->print_str] + // [70] phi from main::@15 to print_str [phi:main::@15->print_str] print_str_from_b15: - // [77] phi (byte*) print_char_cursor#66 = (byte*) 1024 [phi:main::@15->print_str#0] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*) 1024 [phi:main::@15->print_str#0] -- pbuz1=pbuc1 lda #<$400 sta print_char_cursor lda #>$400 sta print_char_cursor+1 - // [77] phi (byte*) print_str::str#10 = (const string) main::str [phi:main::@15->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_str::str#10 = (const string) main::str [phi:main::@15->print_str#1] -- pbuz1=pbuc1 lda #str @@ -6300,9 +6574,9 @@ main: { // main::@16 b16: // [11] call print_ln - // [112] phi from main::@16 to print_ln [phi:main::@16->print_ln] + // [116] phi from main::@16 to print_ln [phi:main::@16->print_ln] print_ln_from_b16: - // [112] phi (byte*) print_line_cursor#21 = (byte*) 1024 [phi:main::@16->print_ln#0] -- pbuz1=pbuc1 + // [116] phi (byte*) print_line_cursor#21 = (byte*) 1024 [phi:main::@16->print_ln#0] -- pbuz1=pbuc1 lda #<$400 sta print_line_cursor lda #>$400 @@ -6311,16 +6585,16 @@ main: { jmp b17 // main::@17 b17: - // [12] (byte*~) print_char_cursor#90 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [12] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 // [13] call print_str - // [77] phi from main::@17 to print_str [phi:main::@17->print_str] + // [70] phi from main::@17 to print_str [phi:main::@17->print_str] print_str_from_b17: - // [77] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#90 [phi:main::@17->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const string) main::str1 [phi:main::@17->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#94 [phi:main::@17->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const string) main::str1 [phi:main::@17->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -6332,10 +6606,10 @@ main: { // main::@18 b18: // [15] call print_word_decimal - // [71] phi from main::@18 to print_word_decimal [phi:main::@18->print_word_decimal] + // [80] phi from main::@18 to print_word_decimal [phi:main::@18->print_word_decimal] print_word_decimal_from_b18: - // [71] phi (byte*) print_char_cursor#58 = (byte*) print_char_cursor#2 [phi:main::@18->print_word_decimal#0] -- register_copy - // [71] phi (word) print_word_decimal::w#3 = (const word) COUNT#0 [phi:main::@18->print_word_decimal#1] -- vwuz1=vwuc1 + // [80] phi (byte*) print_char_cursor#58 = (byte*) print_char_cursor#2 [phi:main::@18->print_word_decimal#0] -- register_copy + // [80] phi (word) print_word_decimal::w#3 = (const word) COUNT#0 [phi:main::@18->print_word_decimal#1] -- vwuz1=vwuc1 lda #COUNT @@ -6347,9 +6621,9 @@ main: { // main::@19 b19: // [17] call print_ln - // [112] phi from main::@19 to print_ln [phi:main::@19->print_ln] + // [116] phi from main::@19 to print_ln [phi:main::@19->print_ln] print_ln_from_b19: - // [112] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@19->print_ln#0] -- register_copy + // [116] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@19->print_ln#0] -- register_copy jsr print_ln // [18] phi from main::@19 to main::@20 [phi:main::@19->main::@20] b20_from_b19: @@ -6357,16 +6631,16 @@ main: { // main::@20 b20: // [19] call memset - // [187] phi from main::@20 to memset [phi:main::@20->memset] + // [193] phi from main::@20 to memset [phi:main::@20->memset] memset_from_b20: - // [187] phi (byte) memset::c#4 = (byte) 0 [phi:main::@20->memset#0] -- vbuxx=vbuc1 + // [193] phi (byte) memset::c#4 = (byte) 0 [phi:main::@20->memset#0] -- vbuxx=vbuc1 ldx #0 - // [187] phi (void*) memset::str#3 = (void*)(const byte*) sieve#0 [phi:main::@20->memset#1] -- pvoz1=pvoc1 + // [193] phi (void*) memset::str#3 = (void*)(const byte*) sieve#0 [phi:main::@20->memset#1] -- pvoz1=pvoc1 lda #sieve sta memset.str+1 - // [187] phi (word) memset::num#2 = (const word) COUNT#0 [phi:main::@20->memset#2] -- vwuz1=vwuc1 + // [193] phi (word) memset::num#2 = (const word) COUNT#0 [phi:main::@20->memset#2] -- vwuz1=vwuc1 lda #COUNT @@ -6379,43 +6653,104 @@ main: { b21: // [21] call clock_start jsr clock_start - // [22] phi from main::@21 to main::@1 [phi:main::@21->main::@1] - b1_from_b21: - // [22] phi (byte*) main::sieve_i#2 = (const byte*) sieve#0+(byte) 2 [phi:main::@21->main::@1#0] -- pbuz1=pbuc1 + // [22] phi from main::@21 to main::@2 [phi:main::@21->main::@2] + b2_from_b21: + // [22] phi (byte*) main::sieve_i#11 = (const byte*) sieve#0+(byte) 2 [phi:main::@21->main::@2#0] -- pbuz1=pbuc1 lda #sieve+2 sta sieve_i+1 - // [22] phi (word) main::i#12 = (byte) 2 [phi:main::@21->main::@1#1] -- vwuz1=vbuc1 + // [22] phi (word) main::i#17 = (byte) 2 [phi:main::@21->main::@2#1] -- vwuz1=vbuc1 lda #<2 - sta i + sta i_17 lda #>2 - sta i+1 + sta i_17+1 + jmp b2 + // [22] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [22] phi (byte*) main::sieve_i#11 = (byte*) main::sieve_i#1 [phi:main::@1->main::@2#0] -- register_copy + // [22] phi (word) main::i#17 = (word) main::i#12 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 + // main::@2 + b2: + // [23] if((byte) 0!=*((byte*) main::sieve_i#11)) goto main::@4 -- vbuc1_neq__deref_pbuz1_then_la1 + ldy #0 + lda (sieve_i),y + cmp #0 + bne b4 + jmp b7 + // main::@7 + b7: + // [24] (word) main::j#0 ← (word) main::i#17 << (byte) 1 -- vwuz1=vwuz2_rol_1 + lda i_17 + asl + sta j + lda i_17+1 + rol + sta j+1 + // [25] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 -- pbuz1=pbuc1_plus_vwuz2 + lda j + clc + adc #sieve + sta s+1 + // [26] phi from main::@6 main::@7 to main::@5 [phi:main::@6/main::@7->main::@5] + b5_from_b6: + b5_from_b7: + // [26] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@6/main::@7->main::@5#0] -- register_copy + // [26] phi (word) main::j#2 = (word) main::j#1 [phi:main::@6/main::@7->main::@5#1] -- register_copy + jmp b5 + // main::@5 + b5: + // [27] if((word) main::j#2<(const word) COUNT#0) goto main::@6 -- vwuz1_lt_vwuc1_then_la1 + lda j+1 + cmp #>COUNT + bcc b6 + bne !+ + lda j + cmp #SQRT_COUNT - bcc b2 + bcc b2_from_b1 bne !+ - lda i + lda i_12 cmp #main::@3] + // [31] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: jmp b3 // main::@3 b3: - // [25] call clock + // [32] call clock jsr clock - // [26] (dword) clock::return#2 ← (dword) clock::return#0 + // [33] (dword) clock::return#2 ← (dword) clock::return#0 jmp b22 // main::@22 b22: - // [27] (dword~) main::$10 ← (dword) clock::return#2 - // [28] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 -- vduz1=vduz1_minus_vduc1 + // [34] (dword~) main::$10 ← (dword) clock::return#2 + // [35] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 -- vduz1=vduz1_minus_vduc1 lda cyclecount sec sbc #CLOCKS_PER_INIT>>$10 sta cyclecount+3 - // [29] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 - // [30] call div32u16u + // [36] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 + // [37] call div32u16u jsr div32u16u - // [31] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 + // [38] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 jmp b23 // main::@23 b23: - // [32] (dword~) main::$14 ← (dword) div32u16u::return#2 - // [33] (word) main::sec100s#0 ← (word)(dword~) main::$14 -- vwuz1=_word_vduz2 + // [39] (dword~) main::$14 ← (dword) div32u16u::return#2 + // [40] (word) main::sec100s#0 ← (word)(dword~) main::$14 -- vwuz1=_word_vduz2 lda _14 sta sec100s lda _14+1 sta sec100s+1 - // [34] (byte*~) print_char_cursor#91 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [41] (byte*~) print_char_cursor#95 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 - // [35] call print_str - // [77] phi from main::@23 to print_str [phi:main::@23->print_str] + // [42] call print_str + // [70] phi from main::@23 to print_str [phi:main::@23->print_str] print_str_from_b23: - // [77] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#91 [phi:main::@23->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const string) main::str2 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#95 [phi:main::@23->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const string) main::str2 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -6460,23 +6795,23 @@ main: { jmp b24 // main::@24 b24: - // [36] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 - // [37] call print_word_decimal - // [71] phi from main::@24 to print_word_decimal [phi:main::@24->print_word_decimal] + // [43] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 + // [44] call print_word_decimal + // [80] phi from main::@24 to print_word_decimal [phi:main::@24->print_word_decimal] print_word_decimal_from_b24: - // [71] phi (byte*) print_char_cursor#58 = (byte*) print_char_cursor#2 [phi:main::@24->print_word_decimal#0] -- register_copy - // [71] phi (word) print_word_decimal::w#3 = (word) print_word_decimal::w#1 [phi:main::@24->print_word_decimal#1] -- register_copy + // [80] phi (byte*) print_char_cursor#58 = (byte*) print_char_cursor#2 [phi:main::@24->print_word_decimal#0] -- register_copy + // [80] phi (word) print_word_decimal::w#3 = (word) print_word_decimal::w#1 [phi:main::@24->print_word_decimal#1] -- register_copy jsr print_word_decimal - // [38] phi from main::@24 to main::@25 [phi:main::@24->main::@25] + // [45] phi from main::@24 to main::@25 [phi:main::@24->main::@25] b25_from_b24: jmp b25 // main::@25 b25: - // [39] call print_str - // [77] phi from main::@25 to print_str [phi:main::@25->print_str] + // [46] call print_str + // [70] phi from main::@25 to print_str [phi:main::@25->print_str] print_str_from_b25: - // [77] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#2 [phi:main::@25->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const string) main::str3 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#2 [phi:main::@25->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const string) main::str3 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -6485,52 +6820,99 @@ main: { jmp b26 // main::@26 b26: - // [40] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 - // [41] call print_dword_decimal + // [47] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 + // [48] call print_dword_decimal jsr print_dword_decimal - // [42] phi from main::@26 to main::@27 [phi:main::@26->main::@27] + // [49] phi from main::@26 to main::@27 [phi:main::@26->main::@27] b27_from_b26: jmp b27 // main::@27 b27: - // [43] call print_ln - // [112] phi from main::@27 to print_ln [phi:main::@27->print_ln] + // [50] call print_ln + // [116] phi from main::@27 to print_ln [phi:main::@27->print_ln] print_ln_from_b27: - // [112] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@27->print_ln#0] -- register_copy + // [116] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@27->print_ln#0] -- register_copy jsr print_ln - // [44] phi from main::@27 to main::@8 [phi:main::@27->main::@8] - b8_from_b27: - // [44] phi (byte*) print_char_cursor#62 = (byte*) print_line_cursor#1 [phi:main::@27->main::@8#0] -- register_copy - // [44] phi (word) main::i#10 = (byte) 2 [phi:main::@27->main::@8#1] -- vwuz1=vbuc1 + // [51] phi from main::@27 to main::@9 [phi:main::@27->main::@9] + b9_from_b27: + // [51] phi (byte*) print_char_cursor#90 = (byte*) print_line_cursor#1 [phi:main::@27->main::@9#0] -- register_copy + // [51] phi (word) main::i#22 = (byte) 2 [phi:main::@27->main::@9#1] -- vwuz1=vbuc1 lda #<2 - sta i_10 + sta i lda #>2 - sta i_10+1 + sta i+1 + jmp b9 + // main::@9 + b9: + // [52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2 + lda i + clc + adc #sieve + sta _38+1 + // [53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30 -- vbuc1_neq__deref_pbuz1_then_la1 + ldy #0 + lda (_38),y + cmp #0 + bne b30 + jmp b12 + // main::@12 + b12: + // [54] (word) print_word_decimal::w#2 ← (word) main::i#22 + // [55] (byte*~) print_char_cursor#101 ← (byte*) print_char_cursor#90 -- pbuz1=pbuz2 + lda print_char_cursor_90 + sta print_char_cursor + lda print_char_cursor_90+1 + sta print_char_cursor+1 + // [56] call print_word_decimal + // [80] phi from main::@12 to print_word_decimal [phi:main::@12->print_word_decimal] + print_word_decimal_from_b12: + // [80] phi (byte*) print_char_cursor#58 = (byte*~) print_char_cursor#101 [phi:main::@12->print_word_decimal#0] -- register_copy + // [80] phi (word) print_word_decimal::w#3 = (word) print_word_decimal::w#2 [phi:main::@12->print_word_decimal#1] -- register_copy + jsr print_word_decimal + // [57] phi from main::@12 to main::@28 [phi:main::@12->main::@28] + b28_from_b12: + jmp b28 + // main::@28 + b28: + // [58] call print_char + jsr print_char + // [59] phi from main::@28 main::@30 to main::@11 [phi:main::@28/main::@30->main::@11] + b11_from_b28: + b11_from_b30: + // [59] phi (byte*) print_char_cursor#62 = (byte*) print_char_cursor#10 [phi:main::@28/main::@30->main::@11#0] -- register_copy + jmp b11 + // main::@11 + b11: + // [60] (word) main::i#10 ← ++ (word) main::i#22 -- vwuz1=_inc_vwuz1 + inc i + bne !+ + inc i+1 + !: jmp b8 // main::@8 b8: - // [45] if((word) main::i#10<(word) $514) goto main::@9 -- vwuz1_lt_vwuc1_then_la1 - lda i_10+1 + // [61] if((word) main::i#10<(word) $514) goto main::@29 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 cmp #>$514 - bcc b9 + bcc b29 bne !+ - lda i_10 + lda i cmp #<$514 - bcc b9 + bcc b29 !: + // [62] phi from main::@8 to main::@10 [phi:main::@8->main::@10] + b10_from_b8: jmp b10 // main::@10 b10: - // [46] (byte*~) print_char_cursor#89 ← (byte*) print_char_cursor#62 -- pbuz1=pbuz2 - lda print_char_cursor_62 - sta print_char_cursor - lda print_char_cursor_62+1 - sta print_char_cursor+1 - // [47] call print_str - // [77] phi from main::@10 to print_str [phi:main::@10->print_str] + // [63] call print_str + // [70] phi from main::@10 to print_str [phi:main::@10->print_str] print_str_from_b10: - // [77] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#89 [phi:main::@10->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const string) main::str4 [phi:main::@10->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#62 [phi:main::@10->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const string) main::str4 [phi:main::@10->print_str#1] -- pbuz1=pbuc1 lda #str4 @@ -6539,144 +6921,50 @@ main: { jmp b13 // main::@13 b13: - // [48] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [64] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc SCREEN+$3e7 jmp b13 - // main::@9 - b9: - // [49] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#10 -- pbuz1=pbuc1_plus_vwuz2 - lda i_10 - clc - adc #sieve - sta _38+1 - // [50] if((byte) 0!=*((byte*~) main::$38)) goto main::@11 -- vbuc1_neq__deref_pbuz1_then_la1 - ldy #0 - lda (_38),y - cmp #0 - bne b11_from_b9 - jmp b12 - // main::@12 - b12: - // [51] (word) print_word_decimal::w#2 ← (word) main::i#10 - // [52] (byte*~) print_char_cursor#97 ← (byte*) print_char_cursor#62 -- pbuz1=pbuz2 - lda print_char_cursor_62 + // main::@29 + b29: + // [65] (byte*~) print_char_cursor#104 ← (byte*) print_char_cursor#62 -- pbuz1=pbuz2 + lda print_char_cursor + sta print_char_cursor_104 + lda print_char_cursor+1 + sta print_char_cursor_104+1 + // [51] phi from main::@29 to main::@9 [phi:main::@29->main::@9] + b9_from_b29: + // [51] phi (byte*) print_char_cursor#90 = (byte*~) print_char_cursor#104 [phi:main::@29->main::@9#0] -- register_copy + // [51] phi (word) main::i#22 = (word) main::i#10 [phi:main::@29->main::@9#1] -- register_copy + jmp b9 + // main::@30 + b30: + // [66] (byte*~) print_char_cursor#106 ← (byte*) print_char_cursor#90 -- pbuz1=pbuz2 + lda print_char_cursor_90 sta print_char_cursor - lda print_char_cursor_62+1 + lda print_char_cursor_90+1 sta print_char_cursor+1 - // [53] call print_word_decimal - // [71] phi from main::@12 to print_word_decimal [phi:main::@12->print_word_decimal] - print_word_decimal_from_b12: - // [71] phi (byte*) print_char_cursor#58 = (byte*~) print_char_cursor#97 [phi:main::@12->print_word_decimal#0] -- register_copy - // [71] phi (word) print_word_decimal::w#3 = (word) print_word_decimal::w#2 [phi:main::@12->print_word_decimal#1] -- register_copy - jsr print_word_decimal - // [54] phi from main::@12 to main::@28 [phi:main::@12->main::@28] - b28_from_b12: - jmp b28 - // main::@28 - b28: - // [55] call print_char - jsr print_char - // [56] phi from main::@28 main::@9 to main::@11 [phi:main::@28/main::@9->main::@11] - b11_from_b28: - b11_from_b9: - // [56] phi (byte*) print_char_cursor#78 = (byte*) print_char_cursor#10 [phi:main::@28/main::@9->main::@11#0] -- register_copy - jmp b11 - // main::@11 - b11: - // [57] (word) main::i#3 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 - inc i_3 - bne !+ - inc i_3+1 - !: - // [44] phi from main::@11 to main::@8 [phi:main::@11->main::@8] - b8_from_b11: - // [44] phi (byte*) print_char_cursor#62 = (byte*) print_char_cursor#78 [phi:main::@11->main::@8#0] -- register_copy - // [44] phi (word) main::i#10 = (word) main::i#3 [phi:main::@11->main::@8#1] -- register_copy - jmp b8 - // main::@2 - b2: - // [58] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@4 -- vbuc1_neq__deref_pbuz1_then_la1 - ldy #0 - lda (sieve_i),y - cmp #0 - bne b4 - jmp b7 - // main::@7 - b7: - // [59] (word) main::j#0 ← (word) main::i#12 << (byte) 1 -- vwuz1=vwuz2_rol_1 - lda i - asl - sta j - lda i+1 - rol - sta j+1 - // [60] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 -- pbuz1=pbuc1_plus_vwuz2 - lda j - clc - adc #sieve - sta s+1 - // [61] phi from main::@6 main::@7 to main::@5 [phi:main::@6/main::@7->main::@5] - b5_from_b6: - b5_from_b7: - // [61] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@6/main::@7->main::@5#0] -- register_copy - // [61] phi (word) main::j#2 = (word) main::j#1 [phi:main::@6/main::@7->main::@5#1] -- register_copy - jmp b5 - // main::@5 - b5: - // [62] if((word) main::j#2<(const word) COUNT#0) goto main::@6 -- vwuz1_lt_vwuc1_then_la1 - lda j+1 - cmp #>COUNT - bcc b6 - bne !+ - lda j - cmp #main::@1] - b1_from_b4: - // [22] phi (byte*) main::sieve_i#2 = (byte*) main::sieve_i#1 [phi:main::@4->main::@1#0] -- register_copy - // [22] phi (word) main::i#12 = (word) main::i#2 [phi:main::@4->main::@1#1] -- register_copy - jmp b1 + jmp b11_from_b30 // main::@6 b6: - // [65] *((byte*) main::s#2) ← (byte) 1 -- _deref_pbuz1=vbuc1 + // [67] *((byte*) main::s#2) ← (byte) 1 -- _deref_pbuz1=vbuc1 lda #1 ldy #0 sta (s),y - // [66] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#12 -- pbuz1=pbuz1_plus_vwuz2 + // [68] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 -- pbuz1=pbuz1_plus_vwuz2 lda s clc - adc i + adc i_17 sta s lda s+1 - adc i+1 + adc i_17+1 sta s+1 - // [67] (word) main::j#1 ← (word) main::j#2 + (word) main::i#12 -- vwuz1=vwuz1_plus_vwuz2 + // [69] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 -- vwuz1=vwuz1_plus_vwuz2 lda j clc - adc i + adc i_17 sta j lda j+1 - adc i+1 + adc i_17+1 sta j+1 jmp b5_from_b6 str: .text "Sieve benchmark - calculating primes@" @@ -6684,53 +6972,92 @@ main: { str2: .text "100ths seconds used: @" str3: .text " cycles: @" str4: .text "...@" +} + // print_str +// Print a zero-terminated string +// print_str(byte* zeropage($d) str) +print_str: { + .label str = $d + // [71] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + b1_from_print_str: + b1_from_b2: + // [71] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#66 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + // [71] phi (byte*) print_str::str#8 = (byte*) print_str::str#10 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + jmp b1 + // print_str::@1 + b1: + // [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + jmp breturn + // print_str::@return + breturn: + // [73] return + rts + // print_str::@2 + b2: + // [74] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + ldy #0 + sta (print_char_cursor),y + // [75] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + // [76] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#8 -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1_from_b2 } // print_char // Print a single char print_char: { .const ch = ' ' - // [68] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 + // [77] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (print_char_cursor),y - // [69] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz2 - lda print_char_cursor - clc - adc #1 - sta print_char_cursor_10 - lda print_char_cursor+1 - adc #0 - sta print_char_cursor_10+1 + // [78] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: jmp breturn // print_char::@return breturn: - // [70] return + // [79] return rts } // print_word_decimal // Print a word as DECIMAL -// print_word_decimal(word zeropage($d) w) +// print_word_decimal(word zeropage($b) w) print_word_decimal: { - .label w = $d - // [72] (word) utoa::value#1 ← (word) print_word_decimal::w#3 -- vwuz1=vwuz2 + .label w = $b + // [81] (word) utoa::value#1 ← (word) print_word_decimal::w#3 -- vwuz1=vwuz2 lda w sta utoa.value lda w+1 sta utoa.value+1 - // [73] call utoa - // [84] phi from print_word_decimal to utoa [phi:print_word_decimal->utoa] + // [82] call utoa + // [86] phi from print_word_decimal to utoa [phi:print_word_decimal->utoa] utoa_from_print_word_decimal: jsr utoa - // [74] phi from print_word_decimal to print_word_decimal::@1 [phi:print_word_decimal->print_word_decimal::@1] + // [83] phi from print_word_decimal to print_word_decimal::@1 [phi:print_word_decimal->print_word_decimal::@1] b1_from_print_word_decimal: jmp b1 // print_word_decimal::@1 b1: - // [75] call print_str - // [77] phi from print_word_decimal::@1 to print_str [phi:print_word_decimal::@1->print_str] + // [84] call print_str + // [70] phi from print_word_decimal::@1 to print_str [phi:print_word_decimal::@1->print_str] print_str_from_b1: - // [77] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#58 [phi:print_word_decimal::@1->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const byte[6]) decimal_digits#0 [phi:print_word_decimal::@1->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#58 [phi:print_word_decimal::@1->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const byte[6]) decimal_digits#0 [phi:print_word_decimal::@1->print_str#1] -- pbuz1=pbuc1 lda #decimal_digits @@ -6739,50 +7066,8 @@ print_word_decimal: { jmp breturn // print_word_decimal::@return breturn: - // [76] return + // [85] return rts -} - // print_str -// Print a zero-terminated string -// print_str(byte* zeropage($f) str) -print_str: { - .label str = $f - // [78] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] - b1_from_print_str: - b1_from_b2: - // [78] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#66 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy - // [78] phi (byte*) print_str::str#8 = (byte*) print_str::str#10 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy - jmp b1 - // print_str::@1 - b1: - // [79] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 - ldy #0 - lda (str),y - cmp #'@' - bne b2 - jmp breturn - // print_str::@return - breturn: - // [80] return - rts - // print_str::@2 - b2: - // [81] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (str),y - ldy #0 - sta (print_char_cursor),y - // [82] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 - inc print_char_cursor - bne !+ - inc print_char_cursor+1 - !: - // [83] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#8 -- pbuz1=_inc_pbuz1 - inc str - bne !+ - inc str+1 - !: - jmp b1_from_b2 } // utoa // Converts unsigned number value to a string representing it in RADIX format. @@ -6790,125 +7075,145 @@ print_str: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// utoa(word zeropage(2) value, byte* zeropage(4) buffer) +// utoa(word zeropage($11) value, byte* zeropage(2) buffer) utoa: { .const max_digits = 5 - .label digit_value = $19 - .label buffer = 4 - .label digit = 8 - .label value = 2 - // [85] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] - b1_from_utoa: - // [85] phi (byte*) utoa::buffer#11 = (const byte[6]) decimal_digits#0 [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 + .label digit_value = $d + .label buffer = 2 + .label digit = 6 + .label value = $11 + jmp b19_1 + // utoa::@19_1 + b19_1: + // [87] (word) utoa::digit_value#4 ← *((const word[]) RADIX_DECIMAL_VALUES#0) -- vwuz1=_deref_pwuc1 + lda RADIX_DECIMAL_VALUES + sta digit_value + lda RADIX_DECIMAL_VALUES+1 + sta digit_value+1 + // [88] phi from utoa::@19_1 to utoa::@7 [phi:utoa::@19_1->utoa::@7] + b7_from_b19_1: + // [88] phi (word) utoa::digit_value#3 = (word) utoa::digit_value#4 [phi:utoa::@19_1->utoa::@7#0] -- register_copy + // [88] phi (byte*) utoa::buffer#28 = (const byte[6]) decimal_digits#0 [phi:utoa::@19_1->utoa::@7#1] -- pbuz1=pbuc1 lda #decimal_digits sta buffer+1 - // [85] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuxx=vbuc1 + // [88] phi (byte) utoa::started#8 = (byte) 0 [phi:utoa::@19_1->utoa::@7#2] -- vbuxx=vbuc1 ldx #0 - // [85] phi (word) utoa::value#2 = (word) utoa::value#1 [phi:utoa->utoa::@1#2] -- register_copy - // [85] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 + // [88] phi (word) utoa::value#21 = (word) utoa::value#1 [phi:utoa::@19_1->utoa::@7#3] -- register_copy + // [88] phi (byte) utoa::digit#15 = (byte) 0 [phi:utoa::@19_1->utoa::@7#4] -- vbuz1=vbuc1 lda #0 sta digit + jmp b7 + // utoa::@7 + b7: + // [89] if((word) utoa::value#21>=(word) utoa::digit_value#3) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 + lda digit_value+1 + cmp value+1 + bne !+ + lda digit_value + cmp value + beq b5_from_b7 + !: + bcc b5_from_b7 + // [90] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] + b4_from_b7: + // [90] phi (byte) utoa::digit#13 = (byte) utoa::digit#15 [phi:utoa::@7->utoa::@4#0] -- register_copy + // [90] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#28 [phi:utoa::@7->utoa::@4#1] -- register_copy + // [90] phi (byte) utoa::started#2 = (byte) utoa::started#8 [phi:utoa::@7->utoa::@4#2] -- register_copy + // [90] phi (word) utoa::value#16 = (word) utoa::value#21 [phi:utoa::@7->utoa::@4#3] -- register_copy + jmp b4 + // utoa::@4 + b4: + // [91] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#13 -- vbuz1=_inc_vbuz1 + inc digit jmp b1 // utoa::@1 b1: - // [86] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1 + // [92] if((byte) utoa::digit#1<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1 lda digit cmp #max_digits-1 bcc b2 jmp b3 // utoa::@3 b3: - // [87] (byte~) utoa::$4 ← (byte)(word) utoa::value#2 -- vbuaa=_byte_vwuz1 + // [93] (byte~) utoa::$4 ← (byte)(word) utoa::value#16 -- vbuaa=_byte_vwuz1 lda value - // [88] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) -- _deref_pbuz1=pbuc1_derefidx_vbuaa + // [94] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) -- _deref_pbuz1=pbuc1_derefidx_vbuaa tay lda DIGITS,y ldy #0 sta (buffer),y - // [89] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [95] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 inc buffer bne !+ inc buffer+1 !: - // [90] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [96] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (buffer),y jmp breturn // utoa::@return breturn: - // [91] return + // [97] return rts // utoa::@2 b2: - // [92] (byte~) utoa::$11 ← (byte) utoa::digit#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [98] (byte~) utoa::$11 ← (byte) utoa::digit#1 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda digit asl - // [93] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) -- vwuz1=pwuc1_derefidx_vbuaa + // [99] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) -- vwuz1=pwuc1_derefidx_vbuaa tay lda RADIX_DECIMAL_VALUES,y sta digit_value lda RADIX_DECIMAL_VALUES+1,y sta digit_value+1 - // [94] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuxx_then_la1 + // [100] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuxx_then_la1 cpx #0 - bne b5 + bne b5_from_b2 + // [88] phi from utoa::@2 to utoa::@7 [phi:utoa::@2->utoa::@7] + b7_from_b2: + // [88] phi (word) utoa::digit_value#3 = (word) utoa::digit_value#0 [phi:utoa::@2->utoa::@7#0] -- register_copy + // [88] phi (byte*) utoa::buffer#28 = (byte*) utoa::buffer#11 [phi:utoa::@2->utoa::@7#1] -- register_copy + // [88] phi (byte) utoa::started#8 = (byte) utoa::started#2 [phi:utoa::@2->utoa::@7#2] -- register_copy + // [88] phi (word) utoa::value#21 = (word) utoa::value#16 [phi:utoa::@2->utoa::@7#3] -- register_copy + // [88] phi (byte) utoa::digit#15 = (byte) utoa::digit#1 [phi:utoa::@2->utoa::@7#4] -- register_copy jmp b7 - // utoa::@7 - b7: - // [95] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 - lda digit_value+1 - cmp value+1 - bne !+ - lda digit_value - cmp value - beq b5 - !: - bcc b5 - // [96] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] - b4_from_b7: - // [96] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy - // [96] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy - // [96] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy - jmp b4 - // utoa::@4 - b4: - // [97] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 -- vbuz1=_inc_vbuz1 - inc digit - // [85] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] - b1_from_b4: - // [85] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy - // [85] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy - // [85] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy - // [85] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy - jmp b1 + // [101] phi from utoa::@2 utoa::@7 to utoa::@5 [phi:utoa::@2/utoa::@7->utoa::@5] + b5_from_b2: + b5_from_b7: + // [101] phi (word) utoa::digit_value#2 = (word) utoa::digit_value#0 [phi:utoa::@2/utoa::@7->utoa::@5#0] -- register_copy + // [101] phi (byte*) utoa::buffer#29 = (byte*) utoa::buffer#11 [phi:utoa::@2/utoa::@7->utoa::@5#1] -- register_copy + // [101] phi (word) utoa::value#22 = (word) utoa::value#16 [phi:utoa::@2/utoa::@7->utoa::@5#2] -- register_copy + // [101] phi (byte) utoa::digit#14 = (byte) utoa::digit#1 [phi:utoa::@2/utoa::@7->utoa::@5#3] -- register_copy + jmp b5 // utoa::@5 b5: - // [98] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 - // [99] (word) utoa_append::value#0 ← (word) utoa::value#2 - // [100] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 - // [101] call utoa_append - // [105] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [102] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#29 + // [103] (word) utoa_append::value#0 ← (word) utoa::value#22 + // [104] (word) utoa_append::sub#0 ← (word) utoa::digit_value#2 + // [105] call utoa_append + // [109] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from_b5: jsr utoa_append - // [102] (word) utoa_append::return#0 ← (word) utoa_append::value#2 + // [106] (word) utoa_append::return#0 ← (word) utoa_append::value#2 jmp b6 // utoa::@6 b6: - // [103] (word) utoa::value#0 ← (word) utoa_append::return#0 - // [104] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [107] (word) utoa::value#0 ← (word) utoa_append::return#0 + // [108] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#29 -- pbuz1=_inc_pbuz1 inc buffer bne !+ inc buffer+1 !: - // [96] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] + // [90] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] b4_from_b6: - // [96] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy - // [96] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuxx=vbuc1 + // [90] phi (byte) utoa::digit#13 = (byte) utoa::digit#14 [phi:utoa::@6->utoa::@4#0] -- register_copy + // [90] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#1] -- register_copy + // [90] phi (byte) utoa::started#2 = (byte) 1 [phi:utoa::@6->utoa::@4#2] -- vbuxx=vbuc1 ldx #1 - // [96] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy + // [90] phi (word) utoa::value#16 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#3] -- register_copy jmp b4 } // utoa_append @@ -6920,21 +7225,21 @@ utoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// utoa_append(byte* zeropage(4) buffer, word zeropage(2) value, word zeropage($19) sub) +// utoa_append(byte* zeropage(2) buffer, word zeropage($11) value, word zeropage($d) sub) utoa_append: { - .label buffer = 4 - .label value = 2 - .label sub = $19 - .label return = 2 - // [106] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + .label buffer = 2 + .label value = $11 + .label sub = $d + .label return = $11 + // [110] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] b1_from_utoa_append: - // [106] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 + // [110] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [106] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + // [110] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy jmp b1 // utoa_append::@1 b1: - // [107] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + // [111] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 lda sub+1 cmp value+1 bne !+ @@ -6946,20 +7251,20 @@ utoa_append: { jmp b3 // utoa_append::@3 b3: - // [108] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [112] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y jmp breturn // utoa_append::@return breturn: - // [109] return + // [113] return rts // utoa_append::@2 b2: - // [110] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [114] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuxx=_inc_vbuxx inx - // [111] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + // [115] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 lda value sec sbc sub @@ -6967,23 +7272,23 @@ utoa_append: { lda value+1 sbc sub+1 sta value+1 - // [106] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + // [110] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] b1_from_b2: - // [106] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy - // [106] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + // [110] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [110] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy jmp b1 } // print_ln // Print a newline print_ln: { - // [113] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + // [117] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] b1_from_print_ln: b1_from_b1: - // [113] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#21 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + // [117] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#21 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy jmp b1 // print_ln::@1 b1: - // [114] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [118] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc print_line_cursor @@ -6991,7 +7296,7 @@ print_ln: { bcc !+ inc print_line_cursor+1 !: - // [115] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 + // [119] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 lda print_line_cursor+1 cmp print_char_cursor+1 bcc b1_from_b1 @@ -7003,29 +7308,29 @@ print_ln: { jmp breturn // print_ln::@return breturn: - // [116] return + // [120] return rts } // print_dword_decimal // Print a dword as DECIMAL -// print_dword_decimal(dword zeropage(9) w) +// print_dword_decimal(dword zeropage(7) w) print_dword_decimal: { - .label w = 9 - // [117] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 - // [118] call ultoa - // [122] phi from print_dword_decimal to ultoa [phi:print_dword_decimal->ultoa] + .label w = 7 + // [121] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 + // [122] call ultoa + // [126] phi from print_dword_decimal to ultoa [phi:print_dword_decimal->ultoa] ultoa_from_print_dword_decimal: jsr ultoa - // [119] phi from print_dword_decimal to print_dword_decimal::@1 [phi:print_dword_decimal->print_dword_decimal::@1] + // [123] phi from print_dword_decimal to print_dword_decimal::@1 [phi:print_dword_decimal->print_dword_decimal::@1] b1_from_print_dword_decimal: jmp b1 // print_dword_decimal::@1 b1: - // [120] call print_str - // [77] phi from print_dword_decimal::@1 to print_str [phi:print_dword_decimal::@1->print_str] + // [124] call print_str + // [70] phi from print_dword_decimal::@1 to print_str [phi:print_dword_decimal::@1->print_str] print_str_from_b1: - // [77] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#2 [phi:print_dword_decimal::@1->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const byte[$b]) decimal_digits_long#0 [phi:print_dword_decimal::@1->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#2 [phi:print_dword_decimal::@1->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const byte[$b]) decimal_digits_long#0 [phi:print_dword_decimal::@1->print_str#1] -- pbuz1=pbuc1 lda #decimal_digits_long @@ -7034,7 +7339,7 @@ print_dword_decimal: { jmp breturn // print_dword_decimal::@return breturn: - // [121] return + // [125] return rts } // ultoa @@ -7043,64 +7348,108 @@ print_dword_decimal: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// ultoa(dword zeropage(9) value, byte* zeropage($d) buffer) +// ultoa(dword zeropage(7) value, byte* zeropage($b) buffer) ultoa: { .const max_digits = $a - .label digit_value = $15 - .label buffer = $d - .label digit = 8 - .label value = 9 - // [123] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] - b1_from_ultoa: - // [123] phi (byte*) ultoa::buffer#11 = (const byte[$b]) decimal_digits_long#0 [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 + .label digit_value = $13 + .label buffer = $b + .label digit = 6 + .label value = 7 + jmp b19_1 + // ultoa::@19_1 + b19_1: + // [127] (dword) ultoa::digit_value#4 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0) -- vduz1=_deref_pduc1 + lda RADIX_DECIMAL_VALUES_LONG + sta digit_value + lda RADIX_DECIMAL_VALUES_LONG+1 + sta digit_value+1 + lda RADIX_DECIMAL_VALUES_LONG+2 + sta digit_value+2 + lda RADIX_DECIMAL_VALUES_LONG+3 + sta digit_value+3 + // [128] phi from ultoa::@19_1 to ultoa::@7 [phi:ultoa::@19_1->ultoa::@7] + b7_from_b19_1: + // [128] phi (dword) ultoa::digit_value#3 = (dword) ultoa::digit_value#4 [phi:ultoa::@19_1->ultoa::@7#0] -- register_copy + // [128] phi (byte*) ultoa::buffer#28 = (const byte[$b]) decimal_digits_long#0 [phi:ultoa::@19_1->ultoa::@7#1] -- pbuz1=pbuc1 lda #decimal_digits_long sta buffer+1 - // [123] phi (byte) ultoa::started#2 = (byte) 0 [phi:ultoa->ultoa::@1#1] -- vbuxx=vbuc1 + // [128] phi (byte) ultoa::started#8 = (byte) 0 [phi:ultoa::@19_1->ultoa::@7#2] -- vbuxx=vbuc1 ldx #0 - // [123] phi (dword) ultoa::value#2 = (dword) ultoa::value#1 [phi:ultoa->ultoa::@1#2] -- register_copy - // [123] phi (byte) ultoa::digit#2 = (byte) 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 + // [128] phi (dword) ultoa::value#21 = (dword) ultoa::value#1 [phi:ultoa::@19_1->ultoa::@7#3] -- register_copy + // [128] phi (byte) ultoa::digit#15 = (byte) 0 [phi:ultoa::@19_1->ultoa::@7#4] -- vbuz1=vbuc1 lda #0 sta digit + jmp b7 + // ultoa::@7 + b7: + // [129] if((dword) ultoa::value#21>=(dword) ultoa::digit_value#3) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 + lda value+3 + cmp digit_value+3 + bcc !+ + bne b5_from_b7 + lda value+2 + cmp digit_value+2 + bcc !+ + bne b5_from_b7 + lda value+1 + cmp digit_value+1 + bcc !+ + bne b5_from_b7 + lda value + cmp digit_value + bcs b5_from_b7 + !: + // [130] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] + b4_from_b7: + // [130] phi (byte) ultoa::digit#13 = (byte) ultoa::digit#15 [phi:ultoa::@7->ultoa::@4#0] -- register_copy + // [130] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#28 [phi:ultoa::@7->ultoa::@4#1] -- register_copy + // [130] phi (byte) ultoa::started#2 = (byte) ultoa::started#8 [phi:ultoa::@7->ultoa::@4#2] -- register_copy + // [130] phi (dword) ultoa::value#16 = (dword) ultoa::value#21 [phi:ultoa::@7->ultoa::@4#3] -- register_copy + jmp b4 + // ultoa::@4 + b4: + // [131] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#13 -- vbuz1=_inc_vbuz1 + inc digit jmp b1 // ultoa::@1 b1: - // [124] if((byte) ultoa::digit#2<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 -- vbuz1_lt_vbuc1_then_la1 + // [132] if((byte) ultoa::digit#1<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 -- vbuz1_lt_vbuc1_then_la1 lda digit cmp #max_digits-1 bcc b2 jmp b3 // ultoa::@3 b3: - // [125] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#2 -- vbuaa=_byte_vduz1 + // [133] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#16 -- vbuaa=_byte_vduz1 lda value - // [126] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) -- _deref_pbuz1=pbuc1_derefidx_vbuaa + // [134] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) -- _deref_pbuz1=pbuc1_derefidx_vbuaa tay lda DIGITS,y ldy #0 sta (buffer),y - // [127] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [135] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 inc buffer bne !+ inc buffer+1 !: - // [128] *((byte*) ultoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [136] *((byte*) ultoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (buffer),y jmp breturn // ultoa::@return breturn: - // [129] return + // [137] return rts // ultoa::@2 b2: - // [130] (byte~) ultoa::$11 ← (byte) ultoa::digit#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [138] (byte~) ultoa::$11 ← (byte) ultoa::digit#1 << (byte) 2 -- vbuaa=vbuz1_rol_2 lda digit asl asl - // [131] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) -- vduz1=pduc1_derefidx_vbuaa + // [139] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) -- vduz1=pduc1_derefidx_vbuaa tay lda RADIX_DECIMAL_VALUES_LONG,y sta digit_value @@ -7110,71 +7459,51 @@ ultoa: { sta digit_value+2 lda RADIX_DECIMAL_VALUES_LONG+3,y sta digit_value+3 - // [132] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 -- vbuc1_neq_vbuxx_then_la1 + // [140] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 -- vbuc1_neq_vbuxx_then_la1 cpx #0 - bne b5 + bne b5_from_b2 + // [128] phi from ultoa::@2 to ultoa::@7 [phi:ultoa::@2->ultoa::@7] + b7_from_b2: + // [128] phi (dword) ultoa::digit_value#3 = (dword) ultoa::digit_value#0 [phi:ultoa::@2->ultoa::@7#0] -- register_copy + // [128] phi (byte*) ultoa::buffer#28 = (byte*) ultoa::buffer#11 [phi:ultoa::@2->ultoa::@7#1] -- register_copy + // [128] phi (byte) ultoa::started#8 = (byte) ultoa::started#2 [phi:ultoa::@2->ultoa::@7#2] -- register_copy + // [128] phi (dword) ultoa::value#21 = (dword) ultoa::value#16 [phi:ultoa::@2->ultoa::@7#3] -- register_copy + // [128] phi (byte) ultoa::digit#15 = (byte) ultoa::digit#1 [phi:ultoa::@2->ultoa::@7#4] -- register_copy jmp b7 - // ultoa::@7 - b7: - // [133] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 - lda value+3 - cmp digit_value+3 - bcc !+ - bne b5 - lda value+2 - cmp digit_value+2 - bcc !+ - bne b5 - lda value+1 - cmp digit_value+1 - bcc !+ - bne b5 - lda value - cmp digit_value - bcs b5 - !: - // [134] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] - b4_from_b7: - // [134] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy - // [134] phi (byte) ultoa::started#4 = (byte) ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy - // [134] phi (dword) ultoa::value#6 = (dword) ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy - jmp b4 - // ultoa::@4 - b4: - // [135] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#2 -- vbuz1=_inc_vbuz1 - inc digit - // [123] phi from ultoa::@4 to ultoa::@1 [phi:ultoa::@4->ultoa::@1] - b1_from_b4: - // [123] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy - // [123] phi (byte) ultoa::started#2 = (byte) ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy - // [123] phi (dword) ultoa::value#2 = (dword) ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy - // [123] phi (byte) ultoa::digit#2 = (byte) ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy - jmp b1 + // [141] phi from ultoa::@2 ultoa::@7 to ultoa::@5 [phi:ultoa::@2/ultoa::@7->ultoa::@5] + b5_from_b2: + b5_from_b7: + // [141] phi (dword) ultoa::digit_value#2 = (dword) ultoa::digit_value#0 [phi:ultoa::@2/ultoa::@7->ultoa::@5#0] -- register_copy + // [141] phi (byte*) ultoa::buffer#29 = (byte*) ultoa::buffer#11 [phi:ultoa::@2/ultoa::@7->ultoa::@5#1] -- register_copy + // [141] phi (dword) ultoa::value#22 = (dword) ultoa::value#16 [phi:ultoa::@2/ultoa::@7->ultoa::@5#2] -- register_copy + // [141] phi (byte) ultoa::digit#14 = (byte) ultoa::digit#1 [phi:ultoa::@2/ultoa::@7->ultoa::@5#3] -- register_copy + jmp b5 // ultoa::@5 b5: - // [136] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 - // [137] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 - // [138] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 - // [139] call ultoa_append - // [143] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [142] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#29 + // [143] (dword) ultoa_append::value#0 ← (dword) ultoa::value#22 + // [144] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#2 + // [145] call ultoa_append + // [149] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] ultoa_append_from_b5: jsr ultoa_append - // [140] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 + // [146] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 jmp b6 // ultoa::@6 b6: - // [141] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 - // [142] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [147] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 + // [148] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#29 -- pbuz1=_inc_pbuz1 inc buffer bne !+ inc buffer+1 !: - // [134] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] + // [130] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] b4_from_b6: - // [134] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy - // [134] phi (byte) ultoa::started#4 = (byte) 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuxx=vbuc1 + // [130] phi (byte) ultoa::digit#13 = (byte) ultoa::digit#14 [phi:ultoa::@6->ultoa::@4#0] -- register_copy + // [130] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#1] -- register_copy + // [130] phi (byte) ultoa::started#2 = (byte) 1 [phi:ultoa::@6->ultoa::@4#2] -- vbuxx=vbuc1 ldx #1 - // [134] phi (dword) ultoa::value#6 = (dword) ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy + // [130] phi (dword) ultoa::value#16 = (dword) ultoa::value#0 [phi:ultoa::@6->ultoa::@4#3] -- register_copy jmp b4 } // ultoa_append @@ -7186,21 +7515,21 @@ ultoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// ultoa_append(byte* zeropage($d) buffer, dword zeropage(9) value, dword zeropage($15) sub) +// ultoa_append(byte* zeropage($b) buffer, dword zeropage(7) value, dword zeropage($13) sub) ultoa_append: { - .label buffer = $d - .label value = 9 - .label sub = $15 - .label return = 9 - // [144] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] + .label buffer = $b + .label value = 7 + .label sub = $13 + .label return = 7 + // [150] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] b1_from_ultoa_append: - // [144] phi (byte) ultoa_append::digit#2 = (byte) 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuxx=vbuc1 + // [150] phi (byte) ultoa_append::digit#2 = (byte) 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [144] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy + // [150] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy jmp b1 // ultoa_append::@1 b1: - // [145] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 + // [151] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 lda value+3 cmp sub+3 bcc !+ @@ -7220,20 +7549,20 @@ ultoa_append: { jmp b3 // ultoa_append::@3 b3: - // [146] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [152] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y jmp breturn // ultoa_append::@return breturn: - // [147] return + // [153] return rts // ultoa_append::@2 b2: - // [148] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [154] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 -- vbuxx=_inc_vbuxx inx - // [149] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 + // [155] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 lda value sec sbc sub @@ -7247,64 +7576,64 @@ ultoa_append: { lda value+3 sbc sub+3 sta value+3 - // [144] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] + // [150] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] b1_from_b2: - // [144] phi (byte) ultoa_append::digit#2 = (byte) ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy - // [144] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy + // [150] phi (byte) ultoa_append::digit#2 = (byte) ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy + // [150] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy jmp b1 } // div32u16u // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division -// div32u16u(dword zeropage(9) dividend) +// div32u16u(dword zeropage(7) dividend) div32u16u: { .label divisor = CLOCKS_PER_SEC/$64 - .label quotient_hi = $19 - .label quotient_lo = $13 - .label return = $15 - .label dividend = 9 - // [150] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 -- vwuz1=_hi_vduz2 + .label quotient_hi = $17 + .label quotient_lo = $11 + .label return = $13 + .label dividend = 7 + // [156] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 -- vwuz1=_hi_vduz2 lda dividend+2 sta divr16u.dividend lda dividend+3 sta divr16u.dividend+1 - // [151] call divr16u - // [161] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + // [157] call divr16u + // [167] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: - // [161] phi (word) divr16u::dividend#5 = (word) divr16u::dividend#1 [phi:div32u16u->divr16u#0] -- register_copy - // [161] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [167] phi (word) divr16u::dividend#5 = (word) divr16u::dividend#1 [phi:div32u16u->divr16u#0] -- register_copy + // [167] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta divr16u.rem lda #>0 sta divr16u.rem+1 jsr divr16u - // [152] (word) divr16u::return#2 ← (word) divr16u::return#0 + // [158] (word) divr16u::return#2 ← (word) divr16u::return#0 jmp b1 // div32u16u::@1 b1: - // [153] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda divr16u.return sta quotient_hi lda divr16u.return+1 sta quotient_hi+1 - // [154] (word) divr16u::dividend#2 ← < (dword) div32u16u::dividend#0 -- vwuz1=_lo_vduz2 + // [160] (word) divr16u::dividend#2 ← < (dword) div32u16u::dividend#0 -- vwuz1=_lo_vduz2 lda dividend sta divr16u.dividend lda dividend+1 sta divr16u.dividend+1 - // [155] (word) divr16u::rem#4 ← (word) rem16u#1 - // [156] call divr16u - // [161] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [161] (word) divr16u::rem#4 ← (word) rem16u#1 + // [162] call divr16u + // [167] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] divr16u_from_b1: - // [161] phi (word) divr16u::dividend#5 = (word) divr16u::dividend#2 [phi:div32u16u::@1->divr16u#0] -- register_copy - // [161] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [167] phi (word) divr16u::dividend#5 = (word) divr16u::dividend#2 [phi:div32u16u::@1->divr16u#0] -- register_copy + // [167] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u - // [157] (word) divr16u::return#3 ← (word) divr16u::return#0 + // [163] (word) divr16u::return#3 ← (word) divr16u::return#0 jmp b2 // div32u16u::@2 b2: - // [158] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - // [159] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 + // [164] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + // [165] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 lda quotient_hi sta return+2 lda quotient_hi+1 @@ -7316,7 +7645,7 @@ div32u16u: { jmp breturn // div32u16u::@return breturn: - // [160] return + // [166] return rts } // divr16u @@ -7324,64 +7653,64 @@ div32u16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zeropage($11) dividend, word zeropage($f) rem) +// divr16u(word zeropage($f) dividend, word zeropage($d) rem) divr16u: { - .label rem = $f - .label dividend = $11 - .label quotient = $13 - .label return = $13 - // [162] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + .label rem = $d + .label dividend = $f + .label quotient = $11 + .label return = $11 + // [168] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] b1_from_divr16u: - // [162] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + // [168] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [162] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [168] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 lda #<0 sta quotient lda #>0 sta quotient+1 - // [162] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [162] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [168] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [168] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp b1 - // [162] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [168] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] b1_from_b3: - // [162] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [162] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [162] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [162] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [168] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [168] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [168] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [168] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp b1 // divr16u::@1 b1: - // [163] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [169] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl rem rol rem+1 - // [164] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 + // [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 lda dividend+1 - // [165] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 + // [171] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 - // [166] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 + // [172] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq b2_from_b1 jmp b4 // divr16u::@4 b4: - // [167] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora rem sta rem - // [168] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [174] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] b2_from_b1: b2_from_b4: - // [168] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [174] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp b2 // divr16u::@2 b2: - // [169] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [175] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - // [170] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [176] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - // [171] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [177] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda rem+1 cmp #>div32u16u.divisor bcc b3_from_b2 @@ -7393,12 +7722,12 @@ divr16u: { jmp b5 // divr16u::@5 b5: - // [172] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [178] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - // [173] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 -- vwuz1=vwuz1_minus_vwuc1 + // [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 -- vwuz1=vwuz1_minus_vwuc1 lda rem sec sbc #div32u16u.divisor sta rem+1 - // [174] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [180] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] b3_from_b2: b3_from_b5: - // [174] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [174] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [180] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [180] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp b3 // divr16u::@3 b3: - // [175] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx + // [181] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx - // [176] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 + // [182] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1_from_b3 jmp b6 // divr16u::@6 b6: - // [177] (word) rem16u#1 ← (word) divr16u::rem#11 + // [183] (word) rem16u#1 ← (word) divr16u::rem#11 jmp breturn // divr16u::@return breturn: - // [178] return + // [184] return rts } // clock // Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program). // This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start() clock: { - .label return = 9 - // [179] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) -- vduz1=vduc1_minus__deref_pduc2 + .label return = 7 + // [185] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) -- vduz1=vduc1_minus__deref_pduc2 lda #<$ffffffff sec sbc CIA2_TIMER_AB @@ -7451,21 +7780,21 @@ clock: { jmp breturn // clock::@return breturn: - // [180] return + // [186] return rts } // clock_start // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [181] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 + // [187] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #CIA_TIMER_CONTROL_CONTINUOUS sta CIA2_TIMER_A_CONTROL - // [182] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 + // [188] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A sta CIA2_TIMER_B_CONTROL - // [183] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 + // [189] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB lda #>$ffffffff @@ -7474,16 +7803,16 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [184] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 + // [190] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A sta CIA2_TIMER_B_CONTROL - // [185] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 + // [191] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START sta CIA2_TIMER_A_CONTROL jmp breturn // clock_start::@return breturn: - // [186] return + // [192] return rts } // memset @@ -7494,7 +7823,7 @@ memset: { .label dst = $11 .label num = $f .label str = $11 - // [188] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + // [194] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda num bne !+ lda num+1 @@ -7503,7 +7832,7 @@ memset: { jmp b1 // memset::@1 b1: - // [189] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 + // [195] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 lda end clc adc str @@ -7511,15 +7840,15 @@ memset: { lda end+1 adc str+1 sta end+1 - // [190] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 - // [191] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [196] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [197] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] b2_from_b1: b2_from_b3: - // [191] phi (byte*) memset::dst#2 = (byte*~) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [197] phi (byte*) memset::dst#2 = (byte*~) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp b2 // memset::@2 b2: - // [192] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [198] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda dst+1 cmp end+1 bne b3 @@ -7529,15 +7858,15 @@ memset: { jmp breturn // memset::@return breturn: - // [193] return + // [199] return rts // memset::@3 b3: - // [194] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + // [200] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y - // [195] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [201] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 @@ -7547,17 +7876,17 @@ memset: { // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [197] call memset - // [187] phi from print_cls to memset [phi:print_cls->memset] + // [203] call memset + // [193] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: - // [187] phi (byte) memset::c#4 = (byte) ' ' [phi:print_cls->memset#0] -- vbuxx=vbuc1 + // [193] phi (byte) memset::c#4 = (byte) ' ' [phi:print_cls->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [187] phi (void*) memset::str#3 = (void*)(byte*) 1024 [phi:print_cls->memset#1] -- pvoz1=pvoc1 + // [193] phi (void*) memset::str#3 = (void*)(byte*) 1024 [phi:print_cls->memset#1] -- pvoz1=pvoc1 lda #<$400 sta memset.str lda #>$400 sta memset.str+1 - // [187] phi (word) memset::num#2 = (word) $3e8 [phi:print_cls->memset#2] -- vwuz1=vwuc1 + // [193] phi (word) memset::num#2 = (word) $3e8 [phi:print_cls->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta memset.num lda #>$3e8 @@ -7566,7 +7895,7 @@ print_cls: { jmp breturn // print_cls::@return breturn: - // [198] return + // [204] return rts } // File Data @@ -7593,6 +7922,10 @@ Removing instruction jmp b18 Removing instruction jmp b19 Removing instruction jmp b20 Removing instruction jmp b21 +Removing instruction jmp b2 +Removing instruction jmp b7 +Removing instruction jmp b5 +Removing instruction jmp b4 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b22 @@ -7601,25 +7934,25 @@ Removing instruction jmp b24 Removing instruction jmp b25 Removing instruction jmp b26 Removing instruction jmp b27 -Removing instruction jmp b8 -Removing instruction jmp b10 -Removing instruction jmp b13 +Removing instruction jmp b9 Removing instruction jmp b12 Removing instruction jmp b28 Removing instruction jmp b11 +Removing instruction jmp b8 +Removing instruction jmp b10 +Removing instruction jmp b13 +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b19_1 Removing instruction jmp b7 -Removing instruction jmp b5 Removing instruction jmp b4 -Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp breturn -Removing instruction jmp b7 -Removing instruction jmp b4 +Removing instruction jmp b5 Removing instruction jmp b6 Removing instruction jmp b1 Removing instruction jmp b3 @@ -7628,11 +7961,13 @@ Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn +Removing instruction jmp b19_1 +Removing instruction jmp b7 +Removing instruction jmp b4 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp breturn -Removing instruction jmp b7 -Removing instruction jmp b4 +Removing instruction jmp b5 Removing instruction jmp b6 Removing instruction jmp b1 Removing instruction jmp b3 @@ -7663,11 +7998,21 @@ Removing instruction lda #>0 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label b11_from_b9 with b11 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b11_from_b30 with b11 Replacing label b5_from_b6 with b5 Replacing label b1_from_b2 with b1 +Replacing label b5_from_b7 with b5 +Replacing label b5_from_b7 with b5 +Replacing label b5_from_b2 with b5 Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 +Replacing label b5_from_b7 with b5 +Replacing label b5_from_b7 with b5 +Replacing label b5_from_b7 with b5 +Replacing label b5_from_b7 with b5 +Replacing label b5_from_b2 with b5 Replacing label b2_from_b1 with b2 Replacing label b3_from_b2 with b3 Replacing label b3_from_b2 with b3 @@ -7690,6 +8035,9 @@ Removing instruction print_ln_from_b19: Removing instruction b20_from_b19: Removing instruction memset_from_b20: Removing instruction b21_from_b20: +Removing instruction b2_from_b1: +Removing instruction b5_from_b6: +Removing instruction b5_from_b7: Removing instruction b3_from_b1: Removing instruction print_word_decimal_from_b24: Removing instruction b25_from_b24: @@ -7698,20 +8046,24 @@ Removing instruction b27_from_b26: Removing instruction print_ln_from_b27: Removing instruction b28_from_b12: Removing instruction b11_from_b28: -Removing instruction b11_from_b9: -Removing instruction b5_from_b6: -Removing instruction b5_from_b7: -Removing instruction b1_from_print_word_decimal: -Removing instruction print_str_from_b1: +Removing instruction b11_from_b30: +Removing instruction b10_from_b8: +Removing instruction print_str_from_b10: Removing instruction b1_from_print_str: Removing instruction b1_from_b2: +Removing instruction b1_from_print_word_decimal: +Removing instruction print_str_from_b1: Removing instruction b4_from_b7: +Removing instruction b5_from_b2: +Removing instruction b5_from_b7: Removing instruction utoa_append_from_b5: Removing instruction b1_from_print_ln: Removing instruction b1_from_b1: Removing instruction b1_from_print_dword_decimal: Removing instruction print_str_from_b1: Removing instruction b4_from_b7: +Removing instruction b5_from_b2: +Removing instruction b5_from_b7: Removing instruction ultoa_append_from_b5: Removing instruction b1_from_b3: Removing instruction b2_from_b1: @@ -7733,7 +8085,9 @@ Removing instruction b18: Removing instruction b19: Removing instruction b20: Removing instruction b21: -Removing instruction b1_from_b21: +Removing instruction b2_from_b21: +Removing instruction b7: +Removing instruction b1: Removing instruction b3: Removing instruction b22: Removing instruction b23: @@ -7742,25 +8096,24 @@ Removing instruction b24: Removing instruction b25: Removing instruction b26: Removing instruction b27: -Removing instruction b8_from_b27: -Removing instruction b10: -Removing instruction print_str_from_b10: +Removing instruction b9_from_b27: Removing instruction b12: Removing instruction print_word_decimal_from_b12: Removing instruction b28: -Removing instruction b8_from_b11: -Removing instruction b7: -Removing instruction b1_from_b4: +Removing instruction b8: +Removing instruction b10: +Removing instruction b9_from_b29: +Removing instruction breturn: Removing instruction breturn: Removing instruction utoa_from_print_word_decimal: Removing instruction b1: Removing instruction breturn: -Removing instruction breturn: -Removing instruction b1_from_utoa: +Removing instruction b19_1: +Removing instruction b7_from_b19_1: +Removing instruction b1: Removing instruction b3: Removing instruction breturn: -Removing instruction b7: -Removing instruction b1_from_b4: +Removing instruction b7_from_b2: Removing instruction b6: Removing instruction b4_from_b6: Removing instruction b1_from_utoa_append: @@ -7771,11 +8124,12 @@ Removing instruction breturn: Removing instruction ultoa_from_print_dword_decimal: Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_ultoa: +Removing instruction b19_1: +Removing instruction b7_from_b19_1: +Removing instruction b1: Removing instruction b3: Removing instruction breturn: -Removing instruction b7: -Removing instruction b1_from_b4: +Removing instruction b7_from_b2: Removing instruction b6: Removing instruction b4_from_b6: Removing instruction b1_from_ultoa_append: @@ -7800,14 +8154,13 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda digit_value+1 -Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [106] bcc b2 to bcs -Fixing long branch [112] bcc b2 to bcs +Fixing long branch [123] bcc b6 to bcs +Fixing long branch [129] bcc b6 to bcs FINAL SYMBOL TABLE (label) @1 @@ -7862,8 +8215,8 @@ FINAL SYMBOL TABLE (dword()) clock() (label) clock::@return (dword) clock::return -(dword) clock::return#0 return zp ZP_DWORD:9 1.3333333333333333 -(dword) clock::return#2 return zp ZP_DWORD:9 4.0 +(dword) clock::return#0 return zp ZP_DWORD:7 1.3333333333333333 +(dword) clock::return#2 return zp ZP_DWORD:7 4.0 (void()) clock_start() (label) clock_start::@return (byte[6]) decimal_digits @@ -7875,17 +8228,17 @@ FINAL SYMBOL TABLE (label) div32u16u::@2 (label) div32u16u::@return (dword) div32u16u::dividend -(dword) div32u16u::dividend#0 dividend zp ZP_DWORD:9 1.2000000000000002 +(dword) div32u16u::dividend#0 dividend zp ZP_DWORD:7 1.2000000000000002 (word) div32u16u::divisor (const word) div32u16u::divisor#0 divisor = (word)(const dword) CLOCKS_PER_SEC#0/(byte) $64 (dword) div32u16u::quotient (word) div32u16u::quotient_hi -(word) div32u16u::quotient_hi#0 quotient_hi zp ZP_WORD:25 0.6666666666666666 +(word) div32u16u::quotient_hi#0 quotient_hi zp ZP_WORD:23 0.6666666666666666 (word) div32u16u::quotient_lo -(word) div32u16u::quotient_lo#0 quotient_lo zp ZP_WORD:19 4.0 +(word) div32u16u::quotient_lo#0 quotient_lo zp ZP_WORD:17 4.0 (dword) div32u16u::return -(dword) div32u16u::return#0 return zp ZP_DWORD:21 1.3333333333333333 -(dword) div32u16u::return#2 return zp ZP_DWORD:21 4.0 +(dword) div32u16u::return#0 return zp ZP_DWORD:19 1.3333333333333333 +(dword) div32u16u::return#2 return zp ZP_DWORD:19 4.0 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (byte~) divr16u::$1 reg byte a 22.0 (byte~) divr16u::$2 reg byte a 22.0 @@ -7897,36 +8250,36 @@ FINAL SYMBOL TABLE (label) divr16u::@6 (label) divr16u::@return (word) divr16u::dividend -(word) divr16u::dividend#0 dividend zp ZP_WORD:17 2.75 -(word) divr16u::dividend#1 dividend zp ZP_WORD:17 4.0 -(word) divr16u::dividend#2 dividend zp ZP_WORD:17 2.0 -(word) divr16u::dividend#3 dividend zp ZP_WORD:17 5.0 -(word) divr16u::dividend#5 dividend zp ZP_WORD:17 6.0 +(word) divr16u::dividend#0 dividend zp ZP_WORD:15 2.75 +(word) divr16u::dividend#1 dividend zp ZP_WORD:15 4.0 +(word) divr16u::dividend#2 dividend zp ZP_WORD:15 2.0 +(word) divr16u::dividend#3 dividend zp ZP_WORD:15 5.0 +(word) divr16u::dividend#5 dividend zp ZP_WORD:15 6.0 (word) divr16u::divisor (byte) divr16u::i (byte) divr16u::i#1 reg byte x 16.5 (byte) divr16u::i#2 reg byte x 1.6923076923076923 (word) divr16u::quotient -(word) divr16u::quotient#1 quotient zp ZP_WORD:19 16.5 -(word) divr16u::quotient#2 quotient zp ZP_WORD:19 11.0 -(word) divr16u::quotient#3 quotient zp ZP_WORD:19 2.75 +(word) divr16u::quotient#1 quotient zp ZP_WORD:17 16.5 +(word) divr16u::quotient#2 quotient zp ZP_WORD:17 11.0 +(word) divr16u::quotient#3 quotient zp ZP_WORD:17 2.75 (word) divr16u::rem -(word) divr16u::rem#0 rem zp ZP_WORD:15 8.25 -(word) divr16u::rem#1 rem zp ZP_WORD:15 22.0 -(word) divr16u::rem#10 rem zp ZP_WORD:15 4.0 -(word) divr16u::rem#11 rem zp ZP_WORD:15 11.666666666666666 -(word) divr16u::rem#2 rem zp ZP_WORD:15 22.0 -(word) divr16u::rem#4 rem zp ZP_WORD:15 4.0 -(word) divr16u::rem#5 rem zp ZP_WORD:15 24.0 -(word) divr16u::rem#6 rem zp ZP_WORD:15 11.0 +(word) divr16u::rem#0 rem zp ZP_WORD:13 8.25 +(word) divr16u::rem#1 rem zp ZP_WORD:13 22.0 +(word) divr16u::rem#10 rem zp ZP_WORD:13 4.0 +(word) divr16u::rem#11 rem zp ZP_WORD:13 11.666666666666666 +(word) divr16u::rem#2 rem zp ZP_WORD:13 22.0 +(word) divr16u::rem#4 rem zp ZP_WORD:13 4.0 +(word) divr16u::rem#5 rem zp ZP_WORD:13 24.0 +(word) divr16u::rem#6 rem zp ZP_WORD:13 11.0 (word) divr16u::return -(word) divr16u::return#0 return zp ZP_WORD:19 5.285714285714286 -(word) divr16u::return#2 return zp ZP_WORD:19 4.0 -(word) divr16u::return#3 return zp ZP_WORD:19 4.0 +(word) divr16u::return#0 return zp ZP_WORD:17 5.285714285714286 +(word) divr16u::return#2 return zp ZP_WORD:17 4.0 +(word) divr16u::return#3 return zp ZP_WORD:17 4.0 (void()) main() -(dword~) main::$10 $10 zp ZP_DWORD:9 4.0 -(dword~) main::$14 $14 zp ZP_DWORD:21 2.0 -(byte*~) main::$38 $38 zp ZP_WORD:19 22.0 +(dword~) main::$10 $10 zp ZP_DWORD:7 4.0 +(dword~) main::$14 $14 zp ZP_DWORD:19 2.0 +(byte*~) main::$38 $38 zp ZP_WORD:23 22.0 (label) main::@1 (label) main::@10 (label) main::@11 @@ -7948,7 +8301,9 @@ FINAL SYMBOL TABLE (label) main::@26 (label) main::@27 (label) main::@28 +(label) main::@29 (label) main::@3 +(label) main::@30 (label) main::@4 (label) main::@5 (label) main::@6 @@ -7956,25 +8311,25 @@ FINAL SYMBOL TABLE (label) main::@8 (label) main::@9 (dword) main::cyclecount -(dword) main::cyclecount#0 cyclecount zp ZP_DWORD:9 0.5 +(dword) main::cyclecount#0 cyclecount zp ZP_DWORD:7 0.5 (word) main::i -(word) main::i#10 i#10 zp ZP_WORD:13 5.5 -(word) main::i#12 i zp ZP_WORD:17 24.6 -(word) main::i#2 i zp ZP_WORD:17 11.0 -(word) main::i#3 i#3 zp ZP_WORD:13 22.0 +(word) main::i#10 i zp ZP_WORD:11 11.0 +(word) main::i#12 i#12 zp ZP_WORD:15 11.0 +(word) main::i#17 i#17 zp ZP_WORD:15 26.11111111111111 +(word) main::i#22 i zp ZP_WORD:11 4.4 (word) main::j -(word) main::j#0 j zp ZP_WORD:2 16.5 -(word) main::j#1 j zp ZP_WORD:2 202.0 -(word) main::j#2 j zp ZP_WORD:2 78.5 +(word) main::j#0 j zp ZP_WORD:17 16.5 +(word) main::j#1 j zp ZP_WORD:17 202.0 +(word) main::j#2 j zp ZP_WORD:17 78.5 (byte*) main::s -(byte*) main::s#0 s zp ZP_WORD:4 22.0 -(byte*) main::s#1 s zp ZP_WORD:4 101.0 -(byte*) main::s#2 s zp ZP_WORD:4 104.66666666666666 +(byte*) main::s#0 s zp ZP_WORD:2 22.0 +(byte*) main::s#1 s zp ZP_WORD:2 101.0 +(byte*) main::s#2 s zp ZP_WORD:2 104.66666666666666 (word) main::sec100s -(word) main::sec100s#0 sec100s zp ZP_WORD:13 1.3333333333333333 +(word) main::sec100s#0 sec100s zp ZP_WORD:11 1.3333333333333333 (byte*) main::sieve_i -(byte*) main::sieve_i#1 sieve_i zp ZP_WORD:15 22.0 -(byte*) main::sieve_i#2 sieve_i zp ZP_WORD:15 3.0 +(byte*) main::sieve_i#1 sieve_i zp ZP_WORD:13 11.0 +(byte*) main::sieve_i#11 sieve_i zp ZP_WORD:13 3.3000000000000003 (const string) main::str str = (string) "Sieve benchmark - calculating primes@" (const string) main::str1 str1 = (string) "between 2 and @" (const string) main::str2 str2 = (string) "100ths seconds used: @" @@ -8018,28 +8373,29 @@ FINAL SYMBOL TABLE (byte) print_char::ch (const byte) print_char::ch#0 ch = (byte) ' ' (byte*) print_char_cursor -(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:17 101.0 -(byte*) print_char_cursor#10 print_char_cursor#10 zp ZP_WORD:6 4.333333333333333 -(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:17 10.25 -(byte*) print_char_cursor#58 print_char_cursor zp ZP_WORD:17 4.25 -(byte*) print_char_cursor#62 print_char_cursor#62 zp ZP_WORD:6 7.4 -(byte*) print_char_cursor#66 print_char_cursor zp ZP_WORD:17 14.0 -(byte*) print_char_cursor#78 print_char_cursor#78 zp ZP_WORD:6 16.5 -(byte*~) print_char_cursor#89 print_char_cursor zp ZP_WORD:17 4.0 -(byte*~) print_char_cursor#90 print_char_cursor zp ZP_WORD:17 4.0 -(byte*~) print_char_cursor#91 print_char_cursor zp ZP_WORD:17 4.0 -(byte*~) print_char_cursor#97 print_char_cursor zp ZP_WORD:17 22.0 +(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:15 101.0 +(byte*) print_char_cursor#10 print_char_cursor zp ZP_WORD:15 4.333333333333333 +(byte*~) print_char_cursor#101 print_char_cursor zp ZP_WORD:15 22.0 +(byte*~) print_char_cursor#104 print_char_cursor#104 zp ZP_WORD:4 22.0 +(byte*~) print_char_cursor#106 print_char_cursor zp ZP_WORD:15 22.0 +(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:15 10.25 +(byte*) print_char_cursor#58 print_char_cursor zp ZP_WORD:15 4.25 +(byte*) print_char_cursor#62 print_char_cursor zp ZP_WORD:15 8.75 +(byte*) print_char_cursor#66 print_char_cursor zp ZP_WORD:15 14.0 +(byte*) print_char_cursor#90 print_char_cursor#90 zp ZP_WORD:4 8.75 +(byte*~) print_char_cursor#94 print_char_cursor zp ZP_WORD:15 4.0 +(byte*~) print_char_cursor#95 print_char_cursor zp ZP_WORD:15 4.0 (void()) print_cls() (label) print_cls::@return (void()) print_dword_decimal((dword) print_dword_decimal::w) (label) print_dword_decimal::@1 (label) print_dword_decimal::@return (dword) print_dword_decimal::w -(dword) print_dword_decimal::w#0 w zp ZP_DWORD:9 4.0 +(dword) print_dword_decimal::w#0 w zp ZP_DWORD:7 4.0 (byte*) print_line_cursor -(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:6 0.9347826086956521 -(byte*) print_line_cursor#11 print_line_cursor zp ZP_WORD:6 24.0 -(byte*) print_line_cursor#21 print_line_cursor zp ZP_WORD:6 6.0 +(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:4 0.9347826086956521 +(byte*) print_line_cursor#11 print_line_cursor zp ZP_WORD:4 24.0 +(byte*) print_line_cursor#21 print_line_cursor zp ZP_WORD:4 6.0 (void()) print_ln() (label) print_ln::@1 (label) print_ln::@return @@ -8049,24 +8405,25 @@ FINAL SYMBOL TABLE (label) print_str::@2 (label) print_str::@return (byte*) print_str::str -(byte*) print_str::str#0 str zp ZP_WORD:15 202.0 -(byte*) print_str::str#10 str zp ZP_WORD:15 2.0 -(byte*) print_str::str#8 str zp ZP_WORD:15 101.5 +(byte*) print_str::str#0 str zp ZP_WORD:13 202.0 +(byte*) print_str::str#10 str zp ZP_WORD:13 2.0 +(byte*) print_str::str#8 str zp ZP_WORD:13 101.5 (void()) print_word_decimal((word) print_word_decimal::w) (label) print_word_decimal::@1 (label) print_word_decimal::@return (word) print_word_decimal::w -(word) print_word_decimal::w#1 w zp ZP_WORD:13 4.0 -(word) print_word_decimal::w#2 w zp ZP_WORD:13 11.0 -(word) print_word_decimal::w#3 w zp ZP_WORD:13 15.0 +(word) print_word_decimal::w#1 w zp ZP_WORD:11 4.0 +(word) print_word_decimal::w#2 w zp ZP_WORD:11 11.0 +(word) print_word_decimal::w#3 w zp ZP_WORD:11 15.0 (word) rem16u -(word) rem16u#1 rem16u zp ZP_WORD:15 0.6666666666666666 +(word) rem16u#1 rem16u zp ZP_WORD:13 0.6666666666666666 (byte*) sieve (const byte*) sieve#0 sieve = (byte*) 4096 (void()) ultoa((dword) ultoa::value , (byte*) ultoa::buffer , (byte) ultoa::radix) (byte~) ultoa::$11 reg byte a 22.0 (byte~) ultoa::$4 reg byte a 4.0 (label) ultoa::@1 +(label) ultoa::@19_1 (label) ultoa::@2 (label) ultoa::@3 (label) ultoa::@4 @@ -8075,49 +8432,57 @@ FINAL SYMBOL TABLE (label) ultoa::@7 (label) ultoa::@return (byte*) ultoa::buffer -(byte*) ultoa::buffer#11 buffer zp ZP_WORD:13 3.4285714285714284 -(byte*) ultoa::buffer#14 buffer zp ZP_WORD:13 16.5 -(byte*) ultoa::buffer#3 buffer zp ZP_WORD:13 4.0 -(byte*) ultoa::buffer#4 buffer zp ZP_WORD:13 22.0 +(byte*) ultoa::buffer#11 buffer zp ZP_WORD:11 6.0 +(byte*) ultoa::buffer#28 buffer zp ZP_WORD:11 16.5 +(byte*) ultoa::buffer#29 buffer zp ZP_WORD:11 6.285714285714286 +(byte*) ultoa::buffer#3 buffer zp ZP_WORD:11 4.0 +(byte*) ultoa::buffer#4 buffer zp ZP_WORD:11 22.0 (byte) ultoa::digit -(byte) ultoa::digit#1 digit zp ZP_BYTE:8 22.0 -(byte) ultoa::digit#2 digit zp ZP_BYTE:8 3.142857142857143 +(byte) ultoa::digit#1 digit zp ZP_BYTE:6 11.0 +(byte) ultoa::digit#13 digit zp ZP_BYTE:6 33.0 +(byte) ultoa::digit#14 digit zp ZP_BYTE:6 4.125 +(byte) ultoa::digit#15 digit zp ZP_BYTE:6 16.5 (dword) ultoa::digit_value -(dword) ultoa::digit_value#0 digit_value zp ZP_DWORD:21 6.6000000000000005 +(dword) ultoa::digit_value#0 digit_value zp ZP_DWORD:19 16.5 +(dword) ultoa::digit_value#2 digit_value zp ZP_DWORD:19 11.0 +(dword) ultoa::digit_value#3 digit_value zp ZP_DWORD:19 17.5 +(dword) ultoa::digit_value#4 digit_value zp ZP_DWORD:19 4.0 (dword*) ultoa::digit_values (byte) ultoa::max_digits (const byte) ultoa::max_digits#1 max_digits = (byte) $a (byte) ultoa::radix (byte) ultoa::started (byte) ultoa::started#2 reg byte x 5.5 -(byte) ultoa::started#4 reg byte x 11.0 +(byte) ultoa::started#8 reg byte x 11.0 (dword) ultoa::value -(dword) ultoa::value#0 value zp ZP_DWORD:9 11.0 -(dword) ultoa::value#1 value zp ZP_DWORD:9 2.0 -(dword) ultoa::value#2 value zp ZP_DWORD:9 6.571428571428571 -(dword) ultoa::value#6 value zp ZP_DWORD:9 16.5 +(dword) ultoa::value#0 value zp ZP_DWORD:7 11.0 +(dword) ultoa::value#1 value zp ZP_DWORD:7 1.3333333333333333 +(dword) ultoa::value#16 value zp ZP_DWORD:7 7.333333333333333 +(dword) ultoa::value#21 value zp ZP_DWORD:7 23.0 +(dword) ultoa::value#22 value zp ZP_DWORD:7 16.5 (dword()) ultoa_append((byte*) ultoa_append::buffer , (dword) ultoa_append::value , (dword) ultoa_append::sub) (label) ultoa_append::@1 (label) ultoa_append::@2 (label) ultoa_append::@3 (label) ultoa_append::@return (byte*) ultoa_append::buffer -(byte*) ultoa_append::buffer#0 buffer zp ZP_WORD:13 1.625 +(byte*) ultoa_append::buffer#0 buffer zp ZP_WORD:11 1.625 (byte) ultoa_append::digit (byte) ultoa_append::digit#1 reg byte x 101.0 (byte) ultoa_append::digit#2 reg byte x 102.0 (dword) ultoa_append::return -(dword) ultoa_append::return#0 return zp ZP_DWORD:9 22.0 +(dword) ultoa_append::return#0 return zp ZP_DWORD:7 22.0 (dword) ultoa_append::sub -(dword) ultoa_append::sub#0 sub zp ZP_DWORD:21 35.5 +(dword) ultoa_append::sub#0 sub zp ZP_DWORD:19 35.5 (dword) ultoa_append::value -(dword) ultoa_append::value#0 value zp ZP_DWORD:9 4.333333333333333 -(dword) ultoa_append::value#1 value zp ZP_DWORD:9 202.0 -(dword) ultoa_append::value#2 value zp ZP_DWORD:9 52.66666666666666 +(dword) ultoa_append::value#0 value zp ZP_DWORD:7 4.333333333333333 +(dword) ultoa_append::value#1 value zp ZP_DWORD:7 202.0 +(dword) ultoa_append::value#2 value zp ZP_DWORD:7 52.66666666666666 (void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) (byte~) utoa::$11 reg byte a 202.0 (byte~) utoa::$4 reg byte a 4.0 (label) utoa::@1 +(label) utoa::@19_1 (label) utoa::@2 (label) utoa::@3 (label) utoa::@4 @@ -8126,73 +8491,79 @@ FINAL SYMBOL TABLE (label) utoa::@7 (label) utoa::@return (byte*) utoa::buffer -(byte*) utoa::buffer#11 buffer zp ZP_WORD:4 29.142857142857146 -(byte*) utoa::buffer#14 buffer zp ZP_WORD:4 151.5 -(byte*) utoa::buffer#3 buffer zp ZP_WORD:4 4.0 -(byte*) utoa::buffer#4 buffer zp ZP_WORD:4 202.0 +(byte*) utoa::buffer#11 buffer zp ZP_WORD:2 51.0 +(byte*) utoa::buffer#28 buffer zp ZP_WORD:2 151.5 +(byte*) utoa::buffer#29 buffer zp ZP_WORD:2 57.714285714285715 +(byte*) utoa::buffer#3 buffer zp ZP_WORD:2 4.0 +(byte*) utoa::buffer#4 buffer zp ZP_WORD:2 202.0 (byte) utoa::digit -(byte) utoa::digit#1 digit zp ZP_BYTE:8 202.0 -(byte) utoa::digit#2 digit zp ZP_BYTE:8 28.857142857142858 +(byte) utoa::digit#1 digit zp ZP_BYTE:6 101.0 +(byte) utoa::digit#13 digit zp ZP_BYTE:6 303.0 +(byte) utoa::digit#14 digit zp ZP_BYTE:6 37.875 +(byte) utoa::digit#15 digit zp ZP_BYTE:6 151.5 (word) utoa::digit_value -(word) utoa::digit_value#0 digit_value zp ZP_WORD:25 60.599999999999994 +(word) utoa::digit_value#0 digit_value zp ZP_WORD:13 151.5 +(word) utoa::digit_value#2 digit_value zp ZP_WORD:13 101.0 +(word) utoa::digit_value#3 digit_value zp ZP_WORD:13 152.5 +(word) utoa::digit_value#4 digit_value zp ZP_WORD:13 4.0 (word*) utoa::digit_values (byte) utoa::max_digits (const byte) utoa::max_digits#1 max_digits = (byte) 5 (byte) utoa::radix (byte) utoa::started (byte) utoa::started#2 reg byte x 50.5 -(byte) utoa::started#4 reg byte x 101.0 +(byte) utoa::started#8 reg byte x 101.0 (word) utoa::value -(word) utoa::value#0 value zp ZP_WORD:2 101.0 -(word) utoa::value#1 value zp ZP_WORD:2 2.0 -(word) utoa::value#2 value zp ZP_WORD:2 58.00000000000001 -(word) utoa::value#6 value zp ZP_WORD:2 151.5 +(word) utoa::value#0 value zp ZP_WORD:17 101.0 +(word) utoa::value#1 value zp ZP_WORD:17 1.3333333333333333 +(word) utoa::value#16 value zp ZP_WORD:17 67.33333333333333 +(word) utoa::value#21 value zp ZP_WORD:17 203.0 +(word) utoa::value#22 value zp ZP_WORD:17 151.5 (word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) (label) utoa_append::@1 (label) utoa_append::@2 (label) utoa_append::@3 (label) utoa_append::@return (byte*) utoa_append::buffer -(byte*) utoa_append::buffer#0 buffer zp ZP_WORD:4 12.875 +(byte*) utoa_append::buffer#0 buffer zp ZP_WORD:2 12.875 (byte) utoa_append::digit (byte) utoa_append::digit#1 reg byte x 1001.0 (byte) utoa_append::digit#2 reg byte x 1002.0 (word) utoa_append::return -(word) utoa_append::return#0 return zp ZP_WORD:2 202.0 +(word) utoa_append::return#0 return zp ZP_WORD:17 202.0 (word) utoa_append::sub -(word) utoa_append::sub#0 sub zp ZP_WORD:25 350.5 +(word) utoa_append::sub#0 sub zp ZP_WORD:13 350.5 (word) utoa_append::value -(word) utoa_append::value#0 value zp ZP_WORD:2 34.33333333333333 -(word) utoa_append::value#1 value zp ZP_WORD:2 2002.0 -(word) utoa_append::value#2 value zp ZP_WORD:2 517.6666666666667 +(word) utoa_append::value#0 value zp ZP_WORD:17 34.33333333333333 +(word) utoa_append::value#1 value zp ZP_WORD:17 2002.0 +(word) utoa_append::value#2 value zp ZP_WORD:17 517.6666666666667 -zp ZP_WORD:2 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 main::j#2 main::j#0 main::j#1 ] -reg byte x [ utoa::started#2 utoa::started#4 ] -zp ZP_WORD:4 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 main::s#2 main::s#0 main::s#1 ] +reg byte x [ utoa::started#8 utoa::started#2 ] +zp ZP_WORD:2 [ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 main::s#2 main::s#0 main::s#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] -zp ZP_WORD:6 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#62 print_char_cursor#78 print_line_cursor#1 print_char_cursor#10 ] -zp ZP_BYTE:8 [ ultoa::digit#2 ultoa::digit#1 utoa::digit#2 utoa::digit#1 ] -zp ZP_DWORD:9 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 print_dword_decimal::w#0 ultoa_append::return#0 main::cyclecount#0 div32u16u::dividend#0 clock::return#2 main::$10 clock::return#0 ] -reg byte x [ ultoa::started#2 ultoa::started#4 ] -zp ZP_WORD:13 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 main::i#10 main::i#3 print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 main::sec100s#0 ] +zp ZP_WORD:4 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#90 print_char_cursor#104 print_line_cursor#1 ] +reg byte x [ ultoa::started#8 ultoa::started#2 ] +zp ZP_BYTE:6 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] +zp ZP_DWORD:7 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 print_dword_decimal::w#0 ultoa_append::return#0 main::cyclecount#0 div32u16u::dividend#0 clock::return#2 main::$10 clock::return#0 ] +zp ZP_WORD:11 [ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 main::i#22 main::i#10 print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 main::sec100s#0 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] +zp ZP_WORD:13 [ 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 utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 utoa_append::sub#0 print_str::str#8 print_str::str#10 print_str::str#0 main::sieve_i#11 main::sieve_i#1 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] -zp ZP_WORD:15 [ memset::num#2 memset::end#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 print_str::str#8 print_str::str#10 print_str::str#0 main::sieve_i#2 main::sieve_i#1 ] -zp ZP_WORD:17 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 print_char_cursor#66 print_char_cursor#89 print_char_cursor#90 print_char_cursor#91 print_char_cursor#58 print_char_cursor#97 print_char_cursor#2 print_char_cursor#1 main::i#12 main::i#2 ] +zp ZP_WORD:15 [ memset::num#2 memset::end#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 main::i#17 main::i#12 ] +zp ZP_WORD:17 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 main::j#2 main::j#0 main::j#1 ] reg byte x [ memset::c#4 ] -zp ZP_WORD:19 [ main::$38 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] +zp ZP_DWORD:19 [ div32u16u::return#2 main::$14 div32u16u::return#0 ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ultoa_append::sub#0 ] reg byte a [ utoa::$4 ] reg byte a [ utoa::$11 ] reg byte a [ ultoa::$4 ] reg byte a [ ultoa::$11 ] -zp ZP_DWORD:21 [ ultoa::digit_value#0 ultoa_append::sub#0 div32u16u::return#2 main::$14 div32u16u::return#0 ] -zp ZP_WORD:25 [ div32u16u::quotient_hi#0 utoa::digit_value#0 utoa_append::sub#0 ] +zp ZP_WORD:23 [ div32u16u::quotient_hi#0 main::$38 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] FINAL ASSEMBLER -Score: 83095 +Score: 84199 // File Comments // Upstart @@ -8228,12 +8599,11 @@ Score: 83095 .label sieve = $1000 // Clock cycles per second (on a C64 PAL) .const CLOCKS_PER_SEC = CLOCKS_PER_FRAME*FRAMES_PER_SEC - .label rem16u = $f - .label print_char_cursor = $11 - .label print_line_cursor = 6 - .label print_char_cursor_10 = 6 - .label print_char_cursor_62 = 6 - .label print_char_cursor_78 = 6 + .label rem16u = $d + .label print_char_cursor = $f + .label print_line_cursor = 4 + .label print_char_cursor_90 = 4 + .label print_char_cursor_104 = 4 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -8245,17 +8615,17 @@ Score: 83095 main: { .label toD0181_gfx = $1800 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>toD0181_gfx)/4&$f - .label _10 = 9 - .label _14 = $15 - .label cyclecount = 9 - .label sec100s = $d - .label i = $11 - .label sieve_i = $f - .label j = 2 - .label s = 4 - .label i_3 = $d - .label i_10 = $d - .label _38 = $13 + .label _10 = 7 + .label _14 = $13 + .label cyclecount = 7 + .label sec100s = $b + .label sieve_i = $d + .label j = $11 + .label s = 2 + .label i = $b + .label i_12 = $f + .label _38 = $17 + .label i_17 = $f // [5] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 // main::@14 @@ -8266,19 +8636,19 @@ main: { sta D018 // print_cls() // [7] call print_cls - // [196] phi from main::@14 to print_cls [phi:main::@14->print_cls] + // [202] phi from main::@14 to print_cls [phi:main::@14->print_cls] jsr print_cls // [8] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // print_str("Sieve benchmark - calculating primes") // [9] call print_str - // [77] phi from main::@15 to print_str [phi:main::@15->print_str] - // [77] phi (byte*) print_char_cursor#66 = (byte*) 1024 [phi:main::@15->print_str#0] -- pbuz1=pbuc1 + // [70] phi from main::@15 to print_str [phi:main::@15->print_str] + // [70] phi (byte*) print_char_cursor#66 = (byte*) 1024 [phi:main::@15->print_str#0] -- pbuz1=pbuc1 lda #<$400 sta print_char_cursor lda #>$400 sta print_char_cursor+1 - // [77] phi (byte*) print_str::str#10 = (const string) main::str [phi:main::@15->print_str#1] -- pbuz1=pbuc1 + // [70] phi (byte*) print_str::str#10 = (const string) main::str [phi:main::@15->print_str#1] -- pbuz1=pbuc1 lda #str @@ -8288,24 +8658,24 @@ main: { // main::@16 // print_ln() // [11] call print_ln - // [112] phi from main::@16 to print_ln [phi:main::@16->print_ln] - // [112] phi (byte*) print_line_cursor#21 = (byte*) 1024 [phi:main::@16->print_ln#0] -- pbuz1=pbuc1 + // [116] phi from main::@16 to print_ln [phi:main::@16->print_ln] + // [116] phi (byte*) print_line_cursor#21 = (byte*) 1024 [phi:main::@16->print_ln#0] -- pbuz1=pbuc1 lda #<$400 sta print_line_cursor lda #>$400 sta print_line_cursor+1 jsr print_ln // main::@17 - // [12] (byte*~) print_char_cursor#90 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [12] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 // print_str("between 2 and ") // [13] call print_str - // [77] phi from main::@17 to print_str [phi:main::@17->print_str] - // [77] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#90 [phi:main::@17->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const string) main::str1 [phi:main::@17->print_str#1] -- pbuz1=pbuc1 + // [70] phi from main::@17 to print_str [phi:main::@17->print_str] + // [70] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#94 [phi:main::@17->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const string) main::str1 [phi:main::@17->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -8315,9 +8685,9 @@ main: { // main::@18 // print_word_decimal(COUNT) // [15] call print_word_decimal - // [71] phi from main::@18 to print_word_decimal [phi:main::@18->print_word_decimal] - // [71] phi (byte*) print_char_cursor#58 = (byte*) print_char_cursor#2 [phi:main::@18->print_word_decimal#0] -- register_copy - // [71] phi (word) print_word_decimal::w#3 = (const word) COUNT#0 [phi:main::@18->print_word_decimal#1] -- vwuz1=vwuc1 + // [80] phi from main::@18 to print_word_decimal [phi:main::@18->print_word_decimal] + // [80] phi (byte*) print_char_cursor#58 = (byte*) print_char_cursor#2 [phi:main::@18->print_word_decimal#0] -- register_copy + // [80] phi (word) print_word_decimal::w#3 = (const word) COUNT#0 [phi:main::@18->print_word_decimal#1] -- vwuz1=vwuc1 lda #COUNT @@ -8327,22 +8697,22 @@ main: { // main::@19 // print_ln() // [17] call print_ln - // [112] phi from main::@19 to print_ln [phi:main::@19->print_ln] - // [112] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@19->print_ln#0] -- register_copy + // [116] phi from main::@19 to print_ln [phi:main::@19->print_ln] + // [116] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@19->print_ln#0] -- register_copy jsr print_ln // [18] phi from main::@19 to main::@20 [phi:main::@19->main::@20] // main::@20 // memset(sieve, 0, COUNT) // [19] call memset - // [187] phi from main::@20 to memset [phi:main::@20->memset] - // [187] phi (byte) memset::c#4 = (byte) 0 [phi:main::@20->memset#0] -- vbuxx=vbuc1 + // [193] phi from main::@20 to memset [phi:main::@20->memset] + // [193] phi (byte) memset::c#4 = (byte) 0 [phi:main::@20->memset#0] -- vbuxx=vbuc1 ldx #0 - // [187] phi (void*) memset::str#3 = (void*)(const byte*) sieve#0 [phi:main::@20->memset#1] -- pvoz1=pvoc1 + // [193] phi (void*) memset::str#3 = (void*)(const byte*) sieve#0 [phi:main::@20->memset#1] -- pvoz1=pvoc1 lda #sieve sta memset.str+1 - // [187] phi (word) memset::num#2 = (const word) COUNT#0 [phi:main::@20->memset#2] -- vwuz1=vwuc1 + // [193] phi (word) memset::num#2 = (const word) COUNT#0 [phi:main::@20->memset#2] -- vwuz1=vwuc1 lda #COUNT @@ -8353,43 +8723,100 @@ main: { // clock_start() // [21] call clock_start jsr clock_start - // [22] phi from main::@21 to main::@1 [phi:main::@21->main::@1] - // [22] phi (byte*) main::sieve_i#2 = (const byte*) sieve#0+(byte) 2 [phi:main::@21->main::@1#0] -- pbuz1=pbuc1 + // [22] phi from main::@21 to main::@2 [phi:main::@21->main::@2] + // [22] phi (byte*) main::sieve_i#11 = (const byte*) sieve#0+(byte) 2 [phi:main::@21->main::@2#0] -- pbuz1=pbuc1 lda #sieve+2 sta sieve_i+1 - // [22] phi (word) main::i#12 = (byte) 2 [phi:main::@21->main::@1#1] -- vwuz1=vbuc1 + // [22] phi (word) main::i#17 = (byte) 2 [phi:main::@21->main::@2#1] -- vwuz1=vbuc1 lda #<2 - sta i + sta i_17 lda #>2 - sta i+1 - // main::@1 - b1: - // while (i < SQRT_COUNT) - // [23] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 -- vwuz1_lt_vbuc1_then_la1 - lda i+1 - cmp #>SQRT_COUNT - bcs !b2+ - jmp b2 - !b2: + sta i_17+1 + // [22] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [22] phi (byte*) main::sieve_i#11 = (byte*) main::sieve_i#1 [phi:main::@1->main::@2#0] -- register_copy + // [22] phi (word) main::i#17 = (word) main::i#12 [phi:main::@1->main::@2#1] -- register_copy + // main::@2 + b2: + // if (!*sieve_i) + // [23] if((byte) 0!=*((byte*) main::sieve_i#11)) goto main::@4 -- vbuc1_neq__deref_pbuz1_then_la1 + ldy #0 + lda (sieve_i),y + cmp #0 + bne b4 + // main::@7 + // j = i*2 + // [24] (word) main::j#0 ← (word) main::i#17 << (byte) 1 -- vwuz1=vwuz2_rol_1 + lda i_17 + asl + sta j + lda i_17+1 + rol + sta j+1 + // s = &sieve[j] + // [25] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 -- pbuz1=pbuc1_plus_vwuz2 + lda j + clc + adc #sieve + sta s+1 + // [26] phi from main::@6 main::@7 to main::@5 [phi:main::@6/main::@7->main::@5] + // [26] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@6/main::@7->main::@5#0] -- register_copy + // [26] phi (word) main::j#2 = (word) main::j#1 [phi:main::@6/main::@7->main::@5#1] -- register_copy + // main::@5 + b5: + // while (j < COUNT) + // [27] if((word) main::j#2<(const word) COUNT#0) goto main::@6 -- vwuz1_lt_vwuc1_then_la1 + lda j+1 + cmp #>COUNT + bcs !b6+ + jmp b6 + !b6: bne !+ - lda i - cmp #main::@3] + // main::@4 + b4: + // i++; + // [28] (word) main::i#12 ← ++ (word) main::i#17 -- vwuz1=_inc_vwuz1 + inc i_12 + bne !+ + inc i_12+1 + !: + // sieve_i++; + // [29] (byte*) main::sieve_i#1 ← ++ (byte*) main::sieve_i#11 -- pbuz1=_inc_pbuz1 + inc sieve_i + bne !+ + inc sieve_i+1 + !: + // main::@1 + // while (i < SQRT_COUNT) + // [30] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 -- vwuz1_lt_vbuc1_then_la1 + lda i_12+1 + cmp #>SQRT_COUNT + bcc b2 + bne !+ + lda i_12 + cmp #main::@3] // main::@3 // clock() - // [25] call clock + // [32] call clock jsr clock - // [26] (dword) clock::return#2 ← (dword) clock::return#0 + // [33] (dword) clock::return#2 ← (dword) clock::return#0 // main::@22 - // [27] (dword~) main::$10 ← (dword) clock::return#2 + // [34] (dword~) main::$10 ← (dword) clock::return#2 // cyclecount = clock()-CLOCKS_PER_INIT - // [28] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 -- vduz1=vduz1_minus_vduc1 + // [35] (dword) main::cyclecount#0 ← (dword~) main::$10 - (const dword) CLOCKS_PER_INIT#0 -- vduz1=vduz1_minus_vduc1 lda cyclecount sec sbc #CLOCKS_PER_INIT>>$10 sta cyclecount+3 // div32u16u(cyclecount, (unsigned int)(CLOCKS_PER_SEC/100)) - // [29] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 - // [30] call div32u16u + // [36] (dword) div32u16u::dividend#0 ← (dword) main::cyclecount#0 + // [37] call div32u16u jsr div32u16u - // [31] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 + // [38] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 // main::@23 - // [32] (dword~) main::$14 ← (dword) div32u16u::return#2 + // [39] (dword~) main::$14 ← (dword) div32u16u::return#2 // sec100s = (unsigned int)div32u16u(cyclecount, (unsigned int)(CLOCKS_PER_SEC/100)) - // [33] (word) main::sec100s#0 ← (word)(dword~) main::$14 -- vwuz1=_word_vduz2 + // [40] (word) main::sec100s#0 ← (word)(dword~) main::$14 -- vwuz1=_word_vduz2 lda _14 sta sec100s lda _14+1 sta sec100s+1 - // [34] (byte*~) print_char_cursor#91 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [41] (byte*~) print_char_cursor#95 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 // print_str("100ths seconds used: ") - // [35] call print_str - // [77] phi from main::@23 to print_str [phi:main::@23->print_str] - // [77] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#91 [phi:main::@23->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const string) main::str2 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 + // [42] call print_str + // [70] phi from main::@23 to print_str [phi:main::@23->print_str] + // [70] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#95 [phi:main::@23->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const string) main::str2 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -8433,19 +8860,19 @@ main: { jsr print_str // main::@24 // print_word_decimal(sec100s) - // [36] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 - // [37] call print_word_decimal - // [71] phi from main::@24 to print_word_decimal [phi:main::@24->print_word_decimal] - // [71] phi (byte*) print_char_cursor#58 = (byte*) print_char_cursor#2 [phi:main::@24->print_word_decimal#0] -- register_copy - // [71] phi (word) print_word_decimal::w#3 = (word) print_word_decimal::w#1 [phi:main::@24->print_word_decimal#1] -- register_copy + // [43] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 + // [44] call print_word_decimal + // [80] phi from main::@24 to print_word_decimal [phi:main::@24->print_word_decimal] + // [80] phi (byte*) print_char_cursor#58 = (byte*) print_char_cursor#2 [phi:main::@24->print_word_decimal#0] -- register_copy + // [80] phi (word) print_word_decimal::w#3 = (word) print_word_decimal::w#1 [phi:main::@24->print_word_decimal#1] -- register_copy jsr print_word_decimal - // [38] phi from main::@24 to main::@25 [phi:main::@24->main::@25] + // [45] phi from main::@24 to main::@25 [phi:main::@24->main::@25] // main::@25 // print_str(" cycles: ") - // [39] call print_str - // [77] phi from main::@25 to print_str [phi:main::@25->print_str] - // [77] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#2 [phi:main::@25->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const string) main::str3 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 + // [46] call print_str + // [70] phi from main::@25 to print_str [phi:main::@25->print_str] + // [70] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#2 [phi:main::@25->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const string) main::str3 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -8453,46 +8880,85 @@ main: { jsr print_str // main::@26 // print_dword_decimal(cyclecount) - // [40] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 - // [41] call print_dword_decimal + // [47] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 + // [48] call print_dword_decimal jsr print_dword_decimal - // [42] phi from main::@26 to main::@27 [phi:main::@26->main::@27] + // [49] phi from main::@26 to main::@27 [phi:main::@26->main::@27] // main::@27 // print_ln() - // [43] call print_ln - // [112] phi from main::@27 to print_ln [phi:main::@27->print_ln] - // [112] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@27->print_ln#0] -- register_copy + // [50] call print_ln + // [116] phi from main::@27 to print_ln [phi:main::@27->print_ln] + // [116] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@27->print_ln#0] -- register_copy jsr print_ln - // [44] phi from main::@27 to main::@8 [phi:main::@27->main::@8] - // [44] phi (byte*) print_char_cursor#62 = (byte*) print_line_cursor#1 [phi:main::@27->main::@8#0] -- register_copy - // [44] phi (word) main::i#10 = (byte) 2 [phi:main::@27->main::@8#1] -- vwuz1=vbuc1 + // [51] phi from main::@27 to main::@9 [phi:main::@27->main::@9] + // [51] phi (byte*) print_char_cursor#90 = (byte*) print_line_cursor#1 [phi:main::@27->main::@9#0] -- register_copy + // [51] phi (word) main::i#22 = (byte) 2 [phi:main::@27->main::@9#1] -- vwuz1=vbuc1 lda #<2 - sta i_10 + sta i lda #>2 - sta i_10+1 - // main::@8 - b8: - // for (i = 2; i < 1300; ++i) - // [45] if((word) main::i#10<(word) $514) goto main::@9 -- vwuz1_lt_vwuc1_then_la1 - lda i_10+1 - cmp #>$514 - bcc b9 - bne !+ - lda i_10 - cmp #<$514 - bcc b9 - !: - // main::@10 - // [46] (byte*~) print_char_cursor#89 ← (byte*) print_char_cursor#62 -- pbuz1=pbuz2 - lda print_char_cursor_62 + sta i+1 + // main::@9 + b9: + // if (!sieve[i]) + // [52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2 + lda i + clc + adc #sieve + sta _38+1 + // [53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30 -- vbuc1_neq__deref_pbuz1_then_la1 + ldy #0 + lda (_38),y + cmp #0 + bne b30 + // main::@12 + // print_word_decimal(i) + // [54] (word) print_word_decimal::w#2 ← (word) main::i#22 + // [55] (byte*~) print_char_cursor#101 ← (byte*) print_char_cursor#90 -- pbuz1=pbuz2 + lda print_char_cursor_90 sta print_char_cursor - lda print_char_cursor_62+1 + lda print_char_cursor_90+1 sta print_char_cursor+1 + // print_word_decimal(i) + // [56] call print_word_decimal + // [80] phi from main::@12 to print_word_decimal [phi:main::@12->print_word_decimal] + // [80] phi (byte*) print_char_cursor#58 = (byte*~) print_char_cursor#101 [phi:main::@12->print_word_decimal#0] -- register_copy + // [80] phi (word) print_word_decimal::w#3 = (word) print_word_decimal::w#2 [phi:main::@12->print_word_decimal#1] -- register_copy + jsr print_word_decimal + // [57] phi from main::@12 to main::@28 [phi:main::@12->main::@28] + // main::@28 + // print_char(' ') + // [58] call print_char + jsr print_char + // [59] phi from main::@28 main::@30 to main::@11 [phi:main::@28/main::@30->main::@11] + // [59] phi (byte*) print_char_cursor#62 = (byte*) print_char_cursor#10 [phi:main::@28/main::@30->main::@11#0] -- register_copy + // main::@11 + b11: + // for (i = 2; i < 1300; ++i) + // [60] (word) main::i#10 ← ++ (word) main::i#22 -- vwuz1=_inc_vwuz1 + inc i + bne !+ + inc i+1 + !: + // main::@8 + // [61] if((word) main::i#10<(word) $514) goto main::@29 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>$514 + bcc b29 + bne !+ + lda i + cmp #<$514 + bcc b29 + !: + // [62] phi from main::@8 to main::@10 [phi:main::@8->main::@10] + // main::@10 // print_str("...") - // [47] call print_str - // [77] phi from main::@10 to print_str [phi:main::@10->print_str] - // [77] phi (byte*) print_char_cursor#66 = (byte*~) print_char_cursor#89 [phi:main::@10->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const string) main::str4 [phi:main::@10->print_str#1] -- pbuz1=pbuc1 + // [63] call print_str + // [70] phi from main::@10 to print_str [phi:main::@10->print_str] + // [70] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#62 [phi:main::@10->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const string) main::str4 [phi:main::@10->print_str#1] -- pbuz1=pbuc1 lda #str4 @@ -8501,141 +8967,52 @@ main: { // main::@13 b13: // (*(SCREEN+999))++; - // [48] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [64] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc SCREEN+$3e7 jmp b13 - // main::@9 - b9: - // if (!sieve[i]) - // [49] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#10 -- pbuz1=pbuc1_plus_vwuz2 - lda i_10 - clc - adc #sieve - sta _38+1 - // [50] if((byte) 0!=*((byte*~) main::$38)) goto main::@11 -- vbuc1_neq__deref_pbuz1_then_la1 - ldy #0 - lda (_38),y - cmp #0 - bne b11 - // main::@12 - // print_word_decimal(i) - // [51] (word) print_word_decimal::w#2 ← (word) main::i#10 - // [52] (byte*~) print_char_cursor#97 ← (byte*) print_char_cursor#62 -- pbuz1=pbuz2 - lda print_char_cursor_62 + // main::@29 + b29: + // [65] (byte*~) print_char_cursor#104 ← (byte*) print_char_cursor#62 -- pbuz1=pbuz2 + lda print_char_cursor + sta print_char_cursor_104 + lda print_char_cursor+1 + sta print_char_cursor_104+1 + // [51] phi from main::@29 to main::@9 [phi:main::@29->main::@9] + // [51] phi (byte*) print_char_cursor#90 = (byte*~) print_char_cursor#104 [phi:main::@29->main::@9#0] -- register_copy + // [51] phi (word) main::i#22 = (word) main::i#10 [phi:main::@29->main::@9#1] -- register_copy + jmp b9 + // main::@30 + b30: + // [66] (byte*~) print_char_cursor#106 ← (byte*) print_char_cursor#90 -- pbuz1=pbuz2 + lda print_char_cursor_90 sta print_char_cursor - lda print_char_cursor_62+1 + lda print_char_cursor_90+1 sta print_char_cursor+1 - // print_word_decimal(i) - // [53] call print_word_decimal - // [71] phi from main::@12 to print_word_decimal [phi:main::@12->print_word_decimal] - // [71] phi (byte*) print_char_cursor#58 = (byte*~) print_char_cursor#97 [phi:main::@12->print_word_decimal#0] -- register_copy - // [71] phi (word) print_word_decimal::w#3 = (word) print_word_decimal::w#2 [phi:main::@12->print_word_decimal#1] -- register_copy - jsr print_word_decimal - // [54] phi from main::@12 to main::@28 [phi:main::@12->main::@28] - // main::@28 - // print_char(' ') - // [55] call print_char - jsr print_char - // [56] phi from main::@28 main::@9 to main::@11 [phi:main::@28/main::@9->main::@11] - // [56] phi (byte*) print_char_cursor#78 = (byte*) print_char_cursor#10 [phi:main::@28/main::@9->main::@11#0] -- register_copy - // main::@11 - b11: - // for (i = 2; i < 1300; ++i) - // [57] (word) main::i#3 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 - inc i_3 - bne !+ - inc i_3+1 - !: - // [44] phi from main::@11 to main::@8 [phi:main::@11->main::@8] - // [44] phi (byte*) print_char_cursor#62 = (byte*) print_char_cursor#78 [phi:main::@11->main::@8#0] -- register_copy - // [44] phi (word) main::i#10 = (word) main::i#3 [phi:main::@11->main::@8#1] -- register_copy - jmp b8 - // main::@2 - b2: - // if (!*sieve_i) - // [58] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@4 -- vbuc1_neq__deref_pbuz1_then_la1 - ldy #0 - lda (sieve_i),y - cmp #0 - bne b4 - // main::@7 - // j = i*2 - // [59] (word) main::j#0 ← (word) main::i#12 << (byte) 1 -- vwuz1=vwuz2_rol_1 - lda i - asl - sta j - lda i+1 - rol - sta j+1 - // s = &sieve[j] - // [60] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 -- pbuz1=pbuc1_plus_vwuz2 - lda j - clc - adc #sieve - sta s+1 - // [61] phi from main::@6 main::@7 to main::@5 [phi:main::@6/main::@7->main::@5] - // [61] phi (byte*) main::s#2 = (byte*) main::s#1 [phi:main::@6/main::@7->main::@5#0] -- register_copy - // [61] phi (word) main::j#2 = (word) main::j#1 [phi:main::@6/main::@7->main::@5#1] -- register_copy - // main::@5 - b5: - // while (j < COUNT) - // [62] if((word) main::j#2<(const word) COUNT#0) goto main::@6 -- vwuz1_lt_vwuc1_then_la1 - lda j+1 - cmp #>COUNT - bcc b6 - bne !+ - lda j - cmp #main::@1] - // [22] phi (byte*) main::sieve_i#2 = (byte*) main::sieve_i#1 [phi:main::@4->main::@1#0] -- register_copy - // [22] phi (word) main::i#12 = (word) main::i#2 [phi:main::@4->main::@1#1] -- register_copy - jmp b1 + jmp b11 // main::@6 b6: // *s = 1 - // [65] *((byte*) main::s#2) ← (byte) 1 -- _deref_pbuz1=vbuc1 + // [67] *((byte*) main::s#2) ← (byte) 1 -- _deref_pbuz1=vbuc1 lda #1 ldy #0 sta (s),y // s += i - // [66] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#12 -- pbuz1=pbuz1_plus_vwuz2 + // [68] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 -- pbuz1=pbuz1_plus_vwuz2 lda s clc - adc i + adc i_17 sta s lda s+1 - adc i+1 + adc i_17+1 sta s+1 // j += i - // [67] (word) main::j#1 ← (word) main::j#2 + (word) main::i#12 -- vwuz1=vwuz1_plus_vwuz2 + // [69] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 -- vwuz1=vwuz1_plus_vwuz2 lda j clc - adc i + adc i_17 sta j lda j+1 - adc i+1 + adc i_17+1 sta j+1 jmp b5 str: .text "Sieve benchmark - calculating primes@" @@ -8643,51 +9020,88 @@ main: { str2: .text "100ths seconds used: @" str3: .text " cycles: @" str4: .text "...@" +} + // print_str +// Print a zero-terminated string +// print_str(byte* zeropage($d) str) +print_str: { + .label str = $d + // [71] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + // [71] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#66 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + // [71] phi (byte*) print_str::str#8 = (byte*) print_str::str#10 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + // print_str::@1 + b1: + // while(*str!='@') + // [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + // print_str::@return + // } + // [73] return + rts + // print_str::@2 + b2: + // *(print_char_cursor++) = *(str++) + // [74] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + sta (print_char_cursor),y + // *(print_char_cursor++) = *(str++); + // [75] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + // [76] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#8 -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1 } // print_char // Print a single char print_char: { .const ch = ' ' // *(print_char_cursor++) = ch - // [68] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 + // [77] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (print_char_cursor),y // *(print_char_cursor++) = ch; - // [69] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz2 - lda print_char_cursor - clc - adc #1 - sta print_char_cursor_10 - lda print_char_cursor+1 - adc #0 - sta print_char_cursor_10+1 + // [78] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: // print_char::@return // } - // [70] return + // [79] return rts } // print_word_decimal // Print a word as DECIMAL -// print_word_decimal(word zeropage($d) w) +// print_word_decimal(word zeropage($b) w) print_word_decimal: { - .label w = $d + .label w = $b // utoa(w, decimal_digits, DECIMAL) - // [72] (word) utoa::value#1 ← (word) print_word_decimal::w#3 -- vwuz1=vwuz2 + // [81] (word) utoa::value#1 ← (word) print_word_decimal::w#3 -- vwuz1=vwuz2 lda w sta utoa.value lda w+1 sta utoa.value+1 - // [73] call utoa - // [84] phi from print_word_decimal to utoa [phi:print_word_decimal->utoa] + // [82] call utoa + // [86] phi from print_word_decimal to utoa [phi:print_word_decimal->utoa] jsr utoa - // [74] phi from print_word_decimal to print_word_decimal::@1 [phi:print_word_decimal->print_word_decimal::@1] + // [83] phi from print_word_decimal to print_word_decimal::@1 [phi:print_word_decimal->print_word_decimal::@1] // print_word_decimal::@1 // print_str(decimal_digits) - // [75] call print_str - // [77] phi from print_word_decimal::@1 to print_str [phi:print_word_decimal::@1->print_str] - // [77] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#58 [phi:print_word_decimal::@1->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const byte[6]) decimal_digits#0 [phi:print_word_decimal::@1->print_str#1] -- pbuz1=pbuc1 + // [84] call print_str + // [70] phi from print_word_decimal::@1 to print_str [phi:print_word_decimal::@1->print_str] + // [70] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#58 [phi:print_word_decimal::@1->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const byte[6]) decimal_digits#0 [phi:print_word_decimal::@1->print_str#1] -- pbuz1=pbuc1 lda #decimal_digits @@ -8695,48 +9109,8 @@ print_word_decimal: { jsr print_str // print_word_decimal::@return // } - // [76] return + // [85] return rts -} - // print_str -// Print a zero-terminated string -// print_str(byte* zeropage($f) str) -print_str: { - .label str = $f - // [78] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] - // [78] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#66 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy - // [78] phi (byte*) print_str::str#8 = (byte*) print_str::str#10 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy - // print_str::@1 - b1: - // while(*str!='@') - // [79] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 - ldy #0 - lda (str),y - cmp #'@' - bne b2 - // print_str::@return - // } - // [80] return - rts - // print_str::@2 - b2: - // *(print_char_cursor++) = *(str++) - // [81] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (str),y - sta (print_char_cursor),y - // *(print_char_cursor++) = *(str++); - // [82] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 - inc print_char_cursor - bne !+ - inc print_char_cursor+1 - !: - // [83] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#8 -- pbuz1=_inc_pbuz1 - inc str - bne !+ - inc str+1 - !: - jmp b1 } // utoa // Converts unsigned number value to a string representing it in RADIX format. @@ -8744,75 +9118,38 @@ print_str: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// utoa(word zeropage(2) value, byte* zeropage(4) buffer) +// utoa(word zeropage($11) value, byte* zeropage(2) buffer) utoa: { .const max_digits = 5 - .label digit_value = $19 - .label buffer = 4 - .label digit = 8 - .label value = 2 - // [85] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] - // [85] phi (byte*) utoa::buffer#11 = (const byte[6]) decimal_digits#0 [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 + .label digit_value = $d + .label buffer = 2 + .label digit = 6 + .label value = $11 + // utoa::@19_1 + // digit_value = digit_values[digit] + // [87] (word) utoa::digit_value#4 ← *((const word[]) RADIX_DECIMAL_VALUES#0) -- vwuz1=_deref_pwuc1 + lda RADIX_DECIMAL_VALUES + sta digit_value + lda RADIX_DECIMAL_VALUES+1 + sta digit_value+1 + // [88] phi from utoa::@19_1 to utoa::@7 [phi:utoa::@19_1->utoa::@7] + // [88] phi (word) utoa::digit_value#3 = (word) utoa::digit_value#4 [phi:utoa::@19_1->utoa::@7#0] -- register_copy + // [88] phi (byte*) utoa::buffer#28 = (const byte[6]) decimal_digits#0 [phi:utoa::@19_1->utoa::@7#1] -- pbuz1=pbuc1 lda #decimal_digits sta buffer+1 - // [85] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuxx=vbuc1 + // [88] phi (byte) utoa::started#8 = (byte) 0 [phi:utoa::@19_1->utoa::@7#2] -- vbuxx=vbuc1 ldx #0 - // [85] phi (word) utoa::value#2 = (word) utoa::value#1 [phi:utoa->utoa::@1#2] -- register_copy - // [85] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 + // [88] phi (word) utoa::value#21 = (word) utoa::value#1 [phi:utoa::@19_1->utoa::@7#3] -- register_copy + // [88] phi (byte) utoa::digit#15 = (byte) 0 [phi:utoa::@19_1->utoa::@7#4] -- vbuz1=vbuc1 txa sta digit - // utoa::@1 - b1: - // for( char digit=0; digit= digit_value) - // [94] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuxx_then_la1 - cpx #0 - bne b5 // utoa::@7 - // [95] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 + b7: + // if (started || value >= digit_value) + // [89] if((word) utoa::value#21>=(word) utoa::digit_value#3) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 + lda digit_value+1 cmp value+1 bne !+ lda digit_value @@ -8820,46 +9157,100 @@ utoa: { beq b5 !: bcc b5 - // [96] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] - // [96] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy - // [96] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy - // [96] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy + // [90] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] + // [90] phi (byte) utoa::digit#13 = (byte) utoa::digit#15 [phi:utoa::@7->utoa::@4#0] -- register_copy + // [90] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#28 [phi:utoa::@7->utoa::@4#1] -- register_copy + // [90] phi (byte) utoa::started#2 = (byte) utoa::started#8 [phi:utoa::@7->utoa::@4#2] -- register_copy + // [90] phi (word) utoa::value#16 = (word) utoa::value#21 [phi:utoa::@7->utoa::@4#3] -- register_copy // utoa::@4 b4: // for( char digit=0; digitutoa::@1] - // [85] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy - // [85] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy - // [85] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy - // [85] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy - jmp b1 - // utoa::@5 - b5: - // utoa_append(buffer++, value, digit_value) - // [98] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 - // [99] (word) utoa_append::value#0 ← (word) utoa::value#2 - // [100] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 - // [101] call utoa_append - // [105] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] - jsr utoa_append - // utoa_append(buffer++, value, digit_value) - // [102] (word) utoa_append::return#0 ← (word) utoa_append::value#2 - // utoa::@6 - // value = utoa_append(buffer++, value, digit_value) - // [103] (word) utoa::value#0 ← (word) utoa_append::return#0 - // value = utoa_append(buffer++, value, digit_value); - // [104] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 + // utoa::@1 + // [92] if((byte) utoa::digit#1<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1 + lda digit + cmp #max_digits-1 + bcc b2 + // utoa::@3 + // (char)value + // [93] (byte~) utoa::$4 ← (byte)(word) utoa::value#16 -- vbuaa=_byte_vwuz1 + lda value + // *buffer++ = DIGITS[(char)value] + // [94] *((byte*) utoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) utoa::$4) -- _deref_pbuz1=pbuc1_derefidx_vbuaa + tay + lda DIGITS,y + ldy #0 + sta (buffer),y + // *buffer++ = DIGITS[(char)value]; + // [95] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 inc buffer bne !+ inc buffer+1 !: - // [96] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] - // [96] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy - // [96] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuxx=vbuc1 + // *buffer = 0 + // [96] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (buffer),y + // utoa::@return + // } + // [97] return + rts + // utoa::@2 + b2: + // digit_value = digit_values[digit] + // [98] (byte~) utoa::$11 ← (byte) utoa::digit#1 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda digit + asl + // [99] (word) utoa::digit_value#0 ← *((const word[]) RADIX_DECIMAL_VALUES#0 + (byte~) utoa::$11) -- vwuz1=pwuc1_derefidx_vbuaa + tay + lda RADIX_DECIMAL_VALUES,y + sta digit_value + lda RADIX_DECIMAL_VALUES+1,y + sta digit_value+1 + // if (started || value >= digit_value) + // [100] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuxx_then_la1 + cpx #0 + bne b5 + // [88] phi from utoa::@2 to utoa::@7 [phi:utoa::@2->utoa::@7] + // [88] phi (word) utoa::digit_value#3 = (word) utoa::digit_value#0 [phi:utoa::@2->utoa::@7#0] -- register_copy + // [88] phi (byte*) utoa::buffer#28 = (byte*) utoa::buffer#11 [phi:utoa::@2->utoa::@7#1] -- register_copy + // [88] phi (byte) utoa::started#8 = (byte) utoa::started#2 [phi:utoa::@2->utoa::@7#2] -- register_copy + // [88] phi (word) utoa::value#21 = (word) utoa::value#16 [phi:utoa::@2->utoa::@7#3] -- register_copy + // [88] phi (byte) utoa::digit#15 = (byte) utoa::digit#1 [phi:utoa::@2->utoa::@7#4] -- register_copy + jmp b7 + // [101] phi from utoa::@2 utoa::@7 to utoa::@5 [phi:utoa::@2/utoa::@7->utoa::@5] + // [101] phi (word) utoa::digit_value#2 = (word) utoa::digit_value#0 [phi:utoa::@2/utoa::@7->utoa::@5#0] -- register_copy + // [101] phi (byte*) utoa::buffer#29 = (byte*) utoa::buffer#11 [phi:utoa::@2/utoa::@7->utoa::@5#1] -- register_copy + // [101] phi (word) utoa::value#22 = (word) utoa::value#16 [phi:utoa::@2/utoa::@7->utoa::@5#2] -- register_copy + // [101] phi (byte) utoa::digit#14 = (byte) utoa::digit#1 [phi:utoa::@2/utoa::@7->utoa::@5#3] -- register_copy + // utoa::@5 + b5: + // utoa_append(buffer++, value, digit_value) + // [102] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#29 + // [103] (word) utoa_append::value#0 ← (word) utoa::value#22 + // [104] (word) utoa_append::sub#0 ← (word) utoa::digit_value#2 + // [105] call utoa_append + // [109] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + jsr utoa_append + // utoa_append(buffer++, value, digit_value) + // [106] (word) utoa_append::return#0 ← (word) utoa_append::value#2 + // utoa::@6 + // value = utoa_append(buffer++, value, digit_value) + // [107] (word) utoa::value#0 ← (word) utoa_append::return#0 + // value = utoa_append(buffer++, value, digit_value); + // [108] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#29 -- pbuz1=_inc_pbuz1 + inc buffer + bne !+ + inc buffer+1 + !: + // [90] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] + // [90] phi (byte) utoa::digit#13 = (byte) utoa::digit#14 [phi:utoa::@6->utoa::@4#0] -- register_copy + // [90] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#1] -- register_copy + // [90] phi (byte) utoa::started#2 = (byte) 1 [phi:utoa::@6->utoa::@4#2] -- vbuxx=vbuc1 ldx #1 - // [96] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy + // [90] phi (word) utoa::value#16 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#3] -- register_copy jmp b4 } // utoa_append @@ -8871,20 +9262,20 @@ utoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// utoa_append(byte* zeropage(4) buffer, word zeropage(2) value, word zeropage($19) sub) +// utoa_append(byte* zeropage(2) buffer, word zeropage($11) value, word zeropage($d) sub) utoa_append: { - .label buffer = 4 - .label value = 2 - .label sub = $19 - .label return = 2 - // [106] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] - // [106] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 + .label buffer = 2 + .label value = $11 + .label sub = $d + .label return = $11 + // [110] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + // [110] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [106] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + // [110] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy // utoa_append::@1 b1: // while (value >= sub) - // [107] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + // [111] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 lda sub+1 cmp value+1 bne !+ @@ -8895,21 +9286,21 @@ utoa_append: { bcc b2 // utoa_append::@3 // *buffer = DIGITS[digit] - // [108] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [112] *((byte*) utoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y // utoa_append::@return // } - // [109] return + // [113] return rts // utoa_append::@2 b2: // digit++; - // [110] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [114] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuxx=_inc_vbuxx inx // value -= sub - // [111] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + // [115] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 lda value sec sbc sub @@ -8917,20 +9308,20 @@ utoa_append: { lda value+1 sbc sub+1 sta value+1 - // [106] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] - // [106] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy - // [106] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + // [110] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + // [110] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [110] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy jmp b1 } // print_ln // Print a newline print_ln: { - // [113] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] - // [113] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#21 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + // [117] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + // [117] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#21 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy // print_ln::@1 b1: // print_line_cursor + $28 - // [114] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [118] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc print_line_cursor @@ -8939,7 +9330,7 @@ print_ln: { inc print_line_cursor+1 !: // while (print_line_cursorultoa] + // [121] (dword) ultoa::value#1 ← (dword) print_dword_decimal::w#0 + // [122] call ultoa + // [126] phi from print_dword_decimal to ultoa [phi:print_dword_decimal->ultoa] jsr ultoa - // [119] phi from print_dword_decimal to print_dword_decimal::@1 [phi:print_dword_decimal->print_dword_decimal::@1] + // [123] phi from print_dword_decimal to print_dword_decimal::@1 [phi:print_dword_decimal->print_dword_decimal::@1] // print_dword_decimal::@1 // print_str(decimal_digits_long) - // [120] call print_str - // [77] phi from print_dword_decimal::@1 to print_str [phi:print_dword_decimal::@1->print_str] - // [77] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#2 [phi:print_dword_decimal::@1->print_str#0] -- register_copy - // [77] phi (byte*) print_str::str#10 = (const byte[$b]) decimal_digits_long#0 [phi:print_dword_decimal::@1->print_str#1] -- pbuz1=pbuc1 + // [124] call print_str + // [70] phi from print_dword_decimal::@1 to print_str [phi:print_dword_decimal::@1->print_str] + // [70] phi (byte*) print_char_cursor#66 = (byte*) print_char_cursor#2 [phi:print_dword_decimal::@1->print_str#0] -- register_copy + // [70] phi (byte*) print_str::str#10 = (const byte[$b]) decimal_digits_long#0 [phi:print_dword_decimal::@1->print_str#1] -- pbuz1=pbuc1 lda #decimal_digits_long @@ -8977,7 +9368,7 @@ print_dword_decimal: { jsr print_str // print_dword_decimal::@return // } - // [121] return + // [125] return rts } // ultoa @@ -8986,80 +9377,41 @@ print_dword_decimal: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// ultoa(dword zeropage(9) value, byte* zeropage($d) buffer) +// ultoa(dword zeropage(7) value, byte* zeropage($b) buffer) ultoa: { .const max_digits = $a - .label digit_value = $15 - .label buffer = $d - .label digit = 8 - .label value = 9 - // [123] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] - // [123] phi (byte*) ultoa::buffer#11 = (const byte[$b]) decimal_digits_long#0 [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 + .label digit_value = $13 + .label buffer = $b + .label digit = 6 + .label value = 7 + // ultoa::@19_1 + // digit_value = digit_values[digit] + // [127] (dword) ultoa::digit_value#4 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0) -- vduz1=_deref_pduc1 + lda RADIX_DECIMAL_VALUES_LONG + sta digit_value + lda RADIX_DECIMAL_VALUES_LONG+1 + sta digit_value+1 + lda RADIX_DECIMAL_VALUES_LONG+2 + sta digit_value+2 + lda RADIX_DECIMAL_VALUES_LONG+3 + sta digit_value+3 + // [128] phi from ultoa::@19_1 to ultoa::@7 [phi:ultoa::@19_1->ultoa::@7] + // [128] phi (dword) ultoa::digit_value#3 = (dword) ultoa::digit_value#4 [phi:ultoa::@19_1->ultoa::@7#0] -- register_copy + // [128] phi (byte*) ultoa::buffer#28 = (const byte[$b]) decimal_digits_long#0 [phi:ultoa::@19_1->ultoa::@7#1] -- pbuz1=pbuc1 lda #decimal_digits_long sta buffer+1 - // [123] phi (byte) ultoa::started#2 = (byte) 0 [phi:ultoa->ultoa::@1#1] -- vbuxx=vbuc1 + // [128] phi (byte) ultoa::started#8 = (byte) 0 [phi:ultoa::@19_1->ultoa::@7#2] -- vbuxx=vbuc1 ldx #0 - // [123] phi (dword) ultoa::value#2 = (dword) ultoa::value#1 [phi:ultoa->ultoa::@1#2] -- register_copy - // [123] phi (byte) ultoa::digit#2 = (byte) 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 + // [128] phi (dword) ultoa::value#21 = (dword) ultoa::value#1 [phi:ultoa::@19_1->ultoa::@7#3] -- register_copy + // [128] phi (byte) ultoa::digit#15 = (byte) 0 [phi:ultoa::@19_1->ultoa::@7#4] -- vbuz1=vbuc1 txa sta digit - // ultoa::@1 - b1: - // for( char digit=0; digit= digit_value) - // [132] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 -- vbuc1_neq_vbuxx_then_la1 - cpx #0 - bne b5 // ultoa::@7 - // [133] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 + b7: + // if (started || value >= digit_value) + // [129] if((dword) ultoa::value#21>=(dword) ultoa::digit_value#3) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 lda value+3 cmp digit_value+3 bcc !+ @@ -9076,46 +9428,105 @@ ultoa: { cmp digit_value bcs b5 !: - // [134] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] - // [134] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy - // [134] phi (byte) ultoa::started#4 = (byte) ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy - // [134] phi (dword) ultoa::value#6 = (dword) ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy + // [130] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] + // [130] phi (byte) ultoa::digit#13 = (byte) ultoa::digit#15 [phi:ultoa::@7->ultoa::@4#0] -- register_copy + // [130] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#28 [phi:ultoa::@7->ultoa::@4#1] -- register_copy + // [130] phi (byte) ultoa::started#2 = (byte) ultoa::started#8 [phi:ultoa::@7->ultoa::@4#2] -- register_copy + // [130] phi (dword) ultoa::value#16 = (dword) ultoa::value#21 [phi:ultoa::@7->ultoa::@4#3] -- register_copy // ultoa::@4 b4: // for( char digit=0; digitultoa::@1] - // [123] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy - // [123] phi (byte) ultoa::started#2 = (byte) ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy - // [123] phi (dword) ultoa::value#2 = (dword) ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy - // [123] phi (byte) ultoa::digit#2 = (byte) ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy - jmp b1 - // ultoa::@5 - b5: - // ultoa_append(buffer++, value, digit_value) - // [136] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 - // [137] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 - // [138] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 - // [139] call ultoa_append - // [143] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] - jsr ultoa_append - // ultoa_append(buffer++, value, digit_value) - // [140] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 - // ultoa::@6 - // value = ultoa_append(buffer++, value, digit_value) - // [141] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 - // value = ultoa_append(buffer++, value, digit_value); - // [142] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 + // ultoa::@1 + // [132] if((byte) ultoa::digit#1<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 -- vbuz1_lt_vbuc1_then_la1 + lda digit + cmp #max_digits-1 + bcc b2 + // ultoa::@3 + // (char)value + // [133] (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#16 -- vbuaa=_byte_vduz1 + lda value + // *buffer++ = DIGITS[(char)value] + // [134] *((byte*) ultoa::buffer#11) ← *((const byte[]) DIGITS#0 + (byte~) ultoa::$4) -- _deref_pbuz1=pbuc1_derefidx_vbuaa + tay + lda DIGITS,y + ldy #0 + sta (buffer),y + // *buffer++ = DIGITS[(char)value]; + // [135] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 inc buffer bne !+ inc buffer+1 !: - // [134] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] - // [134] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy - // [134] phi (byte) ultoa::started#4 = (byte) 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuxx=vbuc1 + // *buffer = 0 + // [136] *((byte*) ultoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (buffer),y + // ultoa::@return + // } + // [137] return + rts + // ultoa::@2 + b2: + // digit_value = digit_values[digit] + // [138] (byte~) ultoa::$11 ← (byte) ultoa::digit#1 << (byte) 2 -- vbuaa=vbuz1_rol_2 + lda digit + asl + asl + // [139] (dword) ultoa::digit_value#0 ← *((const dword[]) RADIX_DECIMAL_VALUES_LONG#0 + (byte~) ultoa::$11) -- vduz1=pduc1_derefidx_vbuaa + tay + lda RADIX_DECIMAL_VALUES_LONG,y + sta digit_value + lda RADIX_DECIMAL_VALUES_LONG+1,y + sta digit_value+1 + lda RADIX_DECIMAL_VALUES_LONG+2,y + sta digit_value+2 + lda RADIX_DECIMAL_VALUES_LONG+3,y + sta digit_value+3 + // if (started || value >= digit_value) + // [140] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 -- vbuc1_neq_vbuxx_then_la1 + cpx #0 + bne b5 + // [128] phi from ultoa::@2 to ultoa::@7 [phi:ultoa::@2->ultoa::@7] + // [128] phi (dword) ultoa::digit_value#3 = (dword) ultoa::digit_value#0 [phi:ultoa::@2->ultoa::@7#0] -- register_copy + // [128] phi (byte*) ultoa::buffer#28 = (byte*) ultoa::buffer#11 [phi:ultoa::@2->ultoa::@7#1] -- register_copy + // [128] phi (byte) ultoa::started#8 = (byte) ultoa::started#2 [phi:ultoa::@2->ultoa::@7#2] -- register_copy + // [128] phi (dword) ultoa::value#21 = (dword) ultoa::value#16 [phi:ultoa::@2->ultoa::@7#3] -- register_copy + // [128] phi (byte) ultoa::digit#15 = (byte) ultoa::digit#1 [phi:ultoa::@2->ultoa::@7#4] -- register_copy + jmp b7 + // [141] phi from ultoa::@2 ultoa::@7 to ultoa::@5 [phi:ultoa::@2/ultoa::@7->ultoa::@5] + // [141] phi (dword) ultoa::digit_value#2 = (dword) ultoa::digit_value#0 [phi:ultoa::@2/ultoa::@7->ultoa::@5#0] -- register_copy + // [141] phi (byte*) ultoa::buffer#29 = (byte*) ultoa::buffer#11 [phi:ultoa::@2/ultoa::@7->ultoa::@5#1] -- register_copy + // [141] phi (dword) ultoa::value#22 = (dword) ultoa::value#16 [phi:ultoa::@2/ultoa::@7->ultoa::@5#2] -- register_copy + // [141] phi (byte) ultoa::digit#14 = (byte) ultoa::digit#1 [phi:ultoa::@2/ultoa::@7->ultoa::@5#3] -- register_copy + // ultoa::@5 + b5: + // ultoa_append(buffer++, value, digit_value) + // [142] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#29 + // [143] (dword) ultoa_append::value#0 ← (dword) ultoa::value#22 + // [144] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#2 + // [145] call ultoa_append + // [149] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + jsr ultoa_append + // ultoa_append(buffer++, value, digit_value) + // [146] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 + // ultoa::@6 + // value = ultoa_append(buffer++, value, digit_value) + // [147] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 + // value = ultoa_append(buffer++, value, digit_value); + // [148] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#29 -- pbuz1=_inc_pbuz1 + inc buffer + bne !+ + inc buffer+1 + !: + // [130] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] + // [130] phi (byte) ultoa::digit#13 = (byte) ultoa::digit#14 [phi:ultoa::@6->ultoa::@4#0] -- register_copy + // [130] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#1] -- register_copy + // [130] phi (byte) ultoa::started#2 = (byte) 1 [phi:ultoa::@6->ultoa::@4#2] -- vbuxx=vbuc1 ldx #1 - // [134] phi (dword) ultoa::value#6 = (dword) ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy + // [130] phi (dword) ultoa::value#16 = (dword) ultoa::value#0 [phi:ultoa::@6->ultoa::@4#3] -- register_copy jmp b4 } // ultoa_append @@ -9127,20 +9538,20 @@ ultoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// ultoa_append(byte* zeropage($d) buffer, dword zeropage(9) value, dword zeropage($15) sub) +// ultoa_append(byte* zeropage($b) buffer, dword zeropage(7) value, dword zeropage($13) sub) ultoa_append: { - .label buffer = $d - .label value = 9 - .label sub = $15 - .label return = 9 - // [144] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] - // [144] phi (byte) ultoa_append::digit#2 = (byte) 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuxx=vbuc1 + .label buffer = $b + .label value = 7 + .label sub = $13 + .label return = 7 + // [150] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] + // [150] phi (byte) ultoa_append::digit#2 = (byte) 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [144] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy + // [150] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy // ultoa_append::@1 b1: // while (value >= sub) - // [145] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 + // [151] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 lda value+3 cmp sub+3 bcc !+ @@ -9159,21 +9570,21 @@ ultoa_append: { !: // ultoa_append::@3 // *buffer = DIGITS[digit] - // [146] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [152] *((byte*) ultoa_append::buffer#0) ← *((const byte[]) DIGITS#0 + (byte) ultoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y // ultoa_append::@return // } - // [147] return + // [153] return rts // ultoa_append::@2 b2: // digit++; - // [148] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [154] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 -- vbuxx=_inc_vbuxx inx // value -= sub - // [149] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 + // [155] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 lda value sec sbc sub @@ -9187,63 +9598,63 @@ ultoa_append: { lda value+3 sbc sub+3 sta value+3 - // [144] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] - // [144] phi (byte) ultoa_append::digit#2 = (byte) ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy - // [144] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy + // [150] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] + // [150] phi (byte) ultoa_append::digit#2 = (byte) ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy + // [150] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy jmp b1 } // div32u16u // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division -// div32u16u(dword zeropage(9) dividend) +// div32u16u(dword zeropage(7) dividend) div32u16u: { .label divisor = CLOCKS_PER_SEC/$64 - .label quotient_hi = $19 - .label quotient_lo = $13 - .label return = $15 - .label dividend = 9 + .label quotient_hi = $17 + .label quotient_lo = $11 + .label return = $13 + .label dividend = 7 // divr16u(>dividend, divisor, 0) - // [150] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 -- vwuz1=_hi_vduz2 + // [156] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#0 -- vwuz1=_hi_vduz2 lda dividend+2 sta divr16u.dividend lda dividend+3 sta divr16u.dividend+1 - // [151] call divr16u - // [161] phi from div32u16u to divr16u [phi:div32u16u->divr16u] - // [161] phi (word) divr16u::dividend#5 = (word) divr16u::dividend#1 [phi:div32u16u->divr16u#0] -- register_copy - // [161] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [157] call divr16u + // [167] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + // [167] phi (word) divr16u::dividend#5 = (word) divr16u::dividend#1 [phi:div32u16u->divr16u#0] -- register_copy + // [167] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta divr16u.rem sta divr16u.rem+1 jsr divr16u // divr16u(>dividend, divisor, 0) - // [152] (word) divr16u::return#2 ← (word) divr16u::return#0 + // [158] (word) divr16u::return#2 ← (word) divr16u::return#0 // div32u16u::@1 // quotient_hi = divr16u(>dividend, divisor, 0) - // [153] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda divr16u.return sta quotient_hi lda divr16u.return+1 sta quotient_hi+1 // divr16u(divr16u] - // [161] phi (word) divr16u::dividend#5 = (word) divr16u::dividend#2 [phi:div32u16u::@1->divr16u#0] -- register_copy - // [161] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [161] (word) divr16u::rem#4 ← (word) rem16u#1 + // [162] call divr16u + // [167] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [167] phi (word) divr16u::dividend#5 = (word) divr16u::dividend#2 [phi:div32u16u::@1->divr16u#0] -- register_copy + // [167] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u // divr16u(divr16u::@1] - // [162] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + .label rem = $d + .label dividend = $f + .label quotient = $11 + .label return = $11 + // [168] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [168] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [162] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [168] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 txa sta quotient sta quotient+1 - // [162] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [162] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy - // [162] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] - // [162] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [162] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [162] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [162] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [168] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [168] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [168] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [168] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [168] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [168] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [168] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy // divr16u::@1 b1: // rem = rem << 1 - // [163] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [169] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl rem rol rem+1 // >dividend - // [164] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 + // [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 lda dividend+1 // >dividend & $80 - // [165] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 + // [171] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 // if( (>dividend & $80) != 0 ) - // [166] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 + // [172] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq b2 // divr16u::@4 // rem = rem | 1 - // [167] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora rem sta rem - // [168] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] - // [168] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [174] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [174] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy // divr16u::@2 b2: // dividend = dividend << 1 - // [169] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [175] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 // quotient = quotient << 1 - // [170] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [176] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 // if(rem>=divisor) - // [171] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [177] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda rem+1 cmp #>div32u16u.divisor bcc b3 @@ -9328,13 +9739,13 @@ divr16u: { !: // divr16u::@5 // quotient++; - // [172] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [178] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: // rem = rem - divisor - // [173] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 -- vwuz1=vwuz1_minus_vwuc1 + // [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 -- vwuz1=vwuz1_minus_vwuc1 lda rem sec sbc #div32u16u.divisor sta rem+1 - // [174] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] - // [174] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [174] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [180] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [180] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [180] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy // divr16u::@3 b3: // for( byte i : 0..15) - // [175] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx + // [181] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx - // [176] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 + // [182] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1 // divr16u::@6 // rem16u = rem - // [177] (word) rem16u#1 ← (word) divr16u::rem#11 + // [183] (word) rem16u#1 ← (word) divr16u::rem#11 // divr16u::@return // } - // [178] return + // [184] return rts } // clock // Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program). // This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start() clock: { - .label return = 9 + .label return = 7 // 0xffffffff - *CIA2_TIMER_AB - // [179] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) -- vduz1=vduc1_minus__deref_pduc2 + // [185] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) -- vduz1=vduc1_minus__deref_pduc2 lda #<$ffffffff sec sbc CIA2_TIMER_AB @@ -9383,7 +9794,7 @@ clock: { sta return+3 // clock::@return // } - // [180] return + // [186] return rts } // clock_start @@ -9391,16 +9802,16 @@ clock: { // This uses CIA #2 Timer A+B on the C64 clock_start: { // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [181] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 + // [187] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #CIA_TIMER_CONTROL_CONTINUOUS sta CIA2_TIMER_A_CONTROL // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [182] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 + // [188] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A sta CIA2_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff - // [183] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 + // [189] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB lda #>$ffffffff @@ -9410,16 +9821,16 @@ clock_start: { lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [184] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 + // [190] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A sta CIA2_TIMER_B_CONTROL // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [185] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 + // [191] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START sta CIA2_TIMER_A_CONTROL // clock_start::@return // } - // [186] return + // [192] return rts } // memset @@ -9431,7 +9842,7 @@ memset: { .label num = $f .label str = $11 // if(num>0) - // [188] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + // [194] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda num bne !+ lda num+1 @@ -9439,7 +9850,7 @@ memset: { !: // memset::@1 // end = (char*)str + num - // [189] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 + // [195] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 lda end clc adc str @@ -9447,13 +9858,13 @@ memset: { lda end+1 adc str+1 sta end+1 - // [190] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 - // [191] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] - // [191] phi (byte*) memset::dst#2 = (byte*~) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [196] (byte*~) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [197] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [197] phi (byte*) memset::dst#2 = (byte*~) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy // memset::@2 b2: // for(char* dst = str; dst!=end; dst++) - // [192] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [198] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda dst+1 cmp end+1 bne b3 @@ -9463,17 +9874,17 @@ memset: { // memset::@return breturn: // } - // [193] return + // [199] return rts // memset::@3 b3: // *dst = c - // [194] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + // [200] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [195] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [201] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 @@ -9484,16 +9895,16 @@ memset: { // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) - // [197] call memset - // [187] phi from print_cls to memset [phi:print_cls->memset] - // [187] phi (byte) memset::c#4 = (byte) ' ' [phi:print_cls->memset#0] -- vbuxx=vbuc1 + // [203] call memset + // [193] phi from print_cls to memset [phi:print_cls->memset] + // [193] phi (byte) memset::c#4 = (byte) ' ' [phi:print_cls->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [187] phi (void*) memset::str#3 = (void*)(byte*) 1024 [phi:print_cls->memset#1] -- pvoz1=pvoc1 + // [193] phi (void*) memset::str#3 = (void*)(byte*) 1024 [phi:print_cls->memset#1] -- pvoz1=pvoc1 lda #<$400 sta memset.str lda #>$400 sta memset.str+1 - // [187] phi (word) memset::num#2 = (word) $3e8 [phi:print_cls->memset#2] -- vwuz1=vwuc1 + // [193] phi (word) memset::num#2 = (word) $3e8 [phi:print_cls->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta memset.num lda #>$3e8 @@ -9501,7 +9912,7 @@ print_cls: { jsr memset // print_cls::@return // } - // [198] return + // [204] return rts } // File Data diff --git a/src/test/ref/sieve.sym b/src/test/ref/sieve.sym index 49ac20f7d..848c2aeb6 100644 --- a/src/test/ref/sieve.sym +++ b/src/test/ref/sieve.sym @@ -50,8 +50,8 @@ (dword()) clock() (label) clock::@return (dword) clock::return -(dword) clock::return#0 return zp ZP_DWORD:9 1.3333333333333333 -(dword) clock::return#2 return zp ZP_DWORD:9 4.0 +(dword) clock::return#0 return zp ZP_DWORD:7 1.3333333333333333 +(dword) clock::return#2 return zp ZP_DWORD:7 4.0 (void()) clock_start() (label) clock_start::@return (byte[6]) decimal_digits @@ -63,17 +63,17 @@ (label) div32u16u::@2 (label) div32u16u::@return (dword) div32u16u::dividend -(dword) div32u16u::dividend#0 dividend zp ZP_DWORD:9 1.2000000000000002 +(dword) div32u16u::dividend#0 dividend zp ZP_DWORD:7 1.2000000000000002 (word) div32u16u::divisor (const word) div32u16u::divisor#0 divisor = (word)(const dword) CLOCKS_PER_SEC#0/(byte) $64 (dword) div32u16u::quotient (word) div32u16u::quotient_hi -(word) div32u16u::quotient_hi#0 quotient_hi zp ZP_WORD:25 0.6666666666666666 +(word) div32u16u::quotient_hi#0 quotient_hi zp ZP_WORD:23 0.6666666666666666 (word) div32u16u::quotient_lo -(word) div32u16u::quotient_lo#0 quotient_lo zp ZP_WORD:19 4.0 +(word) div32u16u::quotient_lo#0 quotient_lo zp ZP_WORD:17 4.0 (dword) div32u16u::return -(dword) div32u16u::return#0 return zp ZP_DWORD:21 1.3333333333333333 -(dword) div32u16u::return#2 return zp ZP_DWORD:21 4.0 +(dword) div32u16u::return#0 return zp ZP_DWORD:19 1.3333333333333333 +(dword) div32u16u::return#2 return zp ZP_DWORD:19 4.0 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (byte~) divr16u::$1 reg byte a 22.0 (byte~) divr16u::$2 reg byte a 22.0 @@ -85,36 +85,36 @@ (label) divr16u::@6 (label) divr16u::@return (word) divr16u::dividend -(word) divr16u::dividend#0 dividend zp ZP_WORD:17 2.75 -(word) divr16u::dividend#1 dividend zp ZP_WORD:17 4.0 -(word) divr16u::dividend#2 dividend zp ZP_WORD:17 2.0 -(word) divr16u::dividend#3 dividend zp ZP_WORD:17 5.0 -(word) divr16u::dividend#5 dividend zp ZP_WORD:17 6.0 +(word) divr16u::dividend#0 dividend zp ZP_WORD:15 2.75 +(word) divr16u::dividend#1 dividend zp ZP_WORD:15 4.0 +(word) divr16u::dividend#2 dividend zp ZP_WORD:15 2.0 +(word) divr16u::dividend#3 dividend zp ZP_WORD:15 5.0 +(word) divr16u::dividend#5 dividend zp ZP_WORD:15 6.0 (word) divr16u::divisor (byte) divr16u::i (byte) divr16u::i#1 reg byte x 16.5 (byte) divr16u::i#2 reg byte x 1.6923076923076923 (word) divr16u::quotient -(word) divr16u::quotient#1 quotient zp ZP_WORD:19 16.5 -(word) divr16u::quotient#2 quotient zp ZP_WORD:19 11.0 -(word) divr16u::quotient#3 quotient zp ZP_WORD:19 2.75 +(word) divr16u::quotient#1 quotient zp ZP_WORD:17 16.5 +(word) divr16u::quotient#2 quotient zp ZP_WORD:17 11.0 +(word) divr16u::quotient#3 quotient zp ZP_WORD:17 2.75 (word) divr16u::rem -(word) divr16u::rem#0 rem zp ZP_WORD:15 8.25 -(word) divr16u::rem#1 rem zp ZP_WORD:15 22.0 -(word) divr16u::rem#10 rem zp ZP_WORD:15 4.0 -(word) divr16u::rem#11 rem zp ZP_WORD:15 11.666666666666666 -(word) divr16u::rem#2 rem zp ZP_WORD:15 22.0 -(word) divr16u::rem#4 rem zp ZP_WORD:15 4.0 -(word) divr16u::rem#5 rem zp ZP_WORD:15 24.0 -(word) divr16u::rem#6 rem zp ZP_WORD:15 11.0 +(word) divr16u::rem#0 rem zp ZP_WORD:13 8.25 +(word) divr16u::rem#1 rem zp ZP_WORD:13 22.0 +(word) divr16u::rem#10 rem zp ZP_WORD:13 4.0 +(word) divr16u::rem#11 rem zp ZP_WORD:13 11.666666666666666 +(word) divr16u::rem#2 rem zp ZP_WORD:13 22.0 +(word) divr16u::rem#4 rem zp ZP_WORD:13 4.0 +(word) divr16u::rem#5 rem zp ZP_WORD:13 24.0 +(word) divr16u::rem#6 rem zp ZP_WORD:13 11.0 (word) divr16u::return -(word) divr16u::return#0 return zp ZP_WORD:19 5.285714285714286 -(word) divr16u::return#2 return zp ZP_WORD:19 4.0 -(word) divr16u::return#3 return zp ZP_WORD:19 4.0 +(word) divr16u::return#0 return zp ZP_WORD:17 5.285714285714286 +(word) divr16u::return#2 return zp ZP_WORD:17 4.0 +(word) divr16u::return#3 return zp ZP_WORD:17 4.0 (void()) main() -(dword~) main::$10 $10 zp ZP_DWORD:9 4.0 -(dword~) main::$14 $14 zp ZP_DWORD:21 2.0 -(byte*~) main::$38 $38 zp ZP_WORD:19 22.0 +(dword~) main::$10 $10 zp ZP_DWORD:7 4.0 +(dword~) main::$14 $14 zp ZP_DWORD:19 2.0 +(byte*~) main::$38 $38 zp ZP_WORD:23 22.0 (label) main::@1 (label) main::@10 (label) main::@11 @@ -136,7 +136,9 @@ (label) main::@26 (label) main::@27 (label) main::@28 +(label) main::@29 (label) main::@3 +(label) main::@30 (label) main::@4 (label) main::@5 (label) main::@6 @@ -144,25 +146,25 @@ (label) main::@8 (label) main::@9 (dword) main::cyclecount -(dword) main::cyclecount#0 cyclecount zp ZP_DWORD:9 0.5 +(dword) main::cyclecount#0 cyclecount zp ZP_DWORD:7 0.5 (word) main::i -(word) main::i#10 i#10 zp ZP_WORD:13 5.5 -(word) main::i#12 i zp ZP_WORD:17 24.6 -(word) main::i#2 i zp ZP_WORD:17 11.0 -(word) main::i#3 i#3 zp ZP_WORD:13 22.0 +(word) main::i#10 i zp ZP_WORD:11 11.0 +(word) main::i#12 i#12 zp ZP_WORD:15 11.0 +(word) main::i#17 i#17 zp ZP_WORD:15 26.11111111111111 +(word) main::i#22 i zp ZP_WORD:11 4.4 (word) main::j -(word) main::j#0 j zp ZP_WORD:2 16.5 -(word) main::j#1 j zp ZP_WORD:2 202.0 -(word) main::j#2 j zp ZP_WORD:2 78.5 +(word) main::j#0 j zp ZP_WORD:17 16.5 +(word) main::j#1 j zp ZP_WORD:17 202.0 +(word) main::j#2 j zp ZP_WORD:17 78.5 (byte*) main::s -(byte*) main::s#0 s zp ZP_WORD:4 22.0 -(byte*) main::s#1 s zp ZP_WORD:4 101.0 -(byte*) main::s#2 s zp ZP_WORD:4 104.66666666666666 +(byte*) main::s#0 s zp ZP_WORD:2 22.0 +(byte*) main::s#1 s zp ZP_WORD:2 101.0 +(byte*) main::s#2 s zp ZP_WORD:2 104.66666666666666 (word) main::sec100s -(word) main::sec100s#0 sec100s zp ZP_WORD:13 1.3333333333333333 +(word) main::sec100s#0 sec100s zp ZP_WORD:11 1.3333333333333333 (byte*) main::sieve_i -(byte*) main::sieve_i#1 sieve_i zp ZP_WORD:15 22.0 -(byte*) main::sieve_i#2 sieve_i zp ZP_WORD:15 3.0 +(byte*) main::sieve_i#1 sieve_i zp ZP_WORD:13 11.0 +(byte*) main::sieve_i#11 sieve_i zp ZP_WORD:13 3.3000000000000003 (const string) main::str str = (string) "Sieve benchmark - calculating primes@" (const string) main::str1 str1 = (string) "between 2 and @" (const string) main::str2 str2 = (string) "100ths seconds used: @" @@ -206,28 +208,29 @@ (byte) print_char::ch (const byte) print_char::ch#0 ch = (byte) ' ' (byte*) print_char_cursor -(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:17 101.0 -(byte*) print_char_cursor#10 print_char_cursor#10 zp ZP_WORD:6 4.333333333333333 -(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:17 10.25 -(byte*) print_char_cursor#58 print_char_cursor zp ZP_WORD:17 4.25 -(byte*) print_char_cursor#62 print_char_cursor#62 zp ZP_WORD:6 7.4 -(byte*) print_char_cursor#66 print_char_cursor zp ZP_WORD:17 14.0 -(byte*) print_char_cursor#78 print_char_cursor#78 zp ZP_WORD:6 16.5 -(byte*~) print_char_cursor#89 print_char_cursor zp ZP_WORD:17 4.0 -(byte*~) print_char_cursor#90 print_char_cursor zp ZP_WORD:17 4.0 -(byte*~) print_char_cursor#91 print_char_cursor zp ZP_WORD:17 4.0 -(byte*~) print_char_cursor#97 print_char_cursor zp ZP_WORD:17 22.0 +(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:15 101.0 +(byte*) print_char_cursor#10 print_char_cursor zp ZP_WORD:15 4.333333333333333 +(byte*~) print_char_cursor#101 print_char_cursor zp ZP_WORD:15 22.0 +(byte*~) print_char_cursor#104 print_char_cursor#104 zp ZP_WORD:4 22.0 +(byte*~) print_char_cursor#106 print_char_cursor zp ZP_WORD:15 22.0 +(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:15 10.25 +(byte*) print_char_cursor#58 print_char_cursor zp ZP_WORD:15 4.25 +(byte*) print_char_cursor#62 print_char_cursor zp ZP_WORD:15 8.75 +(byte*) print_char_cursor#66 print_char_cursor zp ZP_WORD:15 14.0 +(byte*) print_char_cursor#90 print_char_cursor#90 zp ZP_WORD:4 8.75 +(byte*~) print_char_cursor#94 print_char_cursor zp ZP_WORD:15 4.0 +(byte*~) print_char_cursor#95 print_char_cursor zp ZP_WORD:15 4.0 (void()) print_cls() (label) print_cls::@return (void()) print_dword_decimal((dword) print_dword_decimal::w) (label) print_dword_decimal::@1 (label) print_dword_decimal::@return (dword) print_dword_decimal::w -(dword) print_dword_decimal::w#0 w zp ZP_DWORD:9 4.0 +(dword) print_dword_decimal::w#0 w zp ZP_DWORD:7 4.0 (byte*) print_line_cursor -(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:6 0.9347826086956521 -(byte*) print_line_cursor#11 print_line_cursor zp ZP_WORD:6 24.0 -(byte*) print_line_cursor#21 print_line_cursor zp ZP_WORD:6 6.0 +(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:4 0.9347826086956521 +(byte*) print_line_cursor#11 print_line_cursor zp ZP_WORD:4 24.0 +(byte*) print_line_cursor#21 print_line_cursor zp ZP_WORD:4 6.0 (void()) print_ln() (label) print_ln::@1 (label) print_ln::@return @@ -237,24 +240,25 @@ (label) print_str::@2 (label) print_str::@return (byte*) print_str::str -(byte*) print_str::str#0 str zp ZP_WORD:15 202.0 -(byte*) print_str::str#10 str zp ZP_WORD:15 2.0 -(byte*) print_str::str#8 str zp ZP_WORD:15 101.5 +(byte*) print_str::str#0 str zp ZP_WORD:13 202.0 +(byte*) print_str::str#10 str zp ZP_WORD:13 2.0 +(byte*) print_str::str#8 str zp ZP_WORD:13 101.5 (void()) print_word_decimal((word) print_word_decimal::w) (label) print_word_decimal::@1 (label) print_word_decimal::@return (word) print_word_decimal::w -(word) print_word_decimal::w#1 w zp ZP_WORD:13 4.0 -(word) print_word_decimal::w#2 w zp ZP_WORD:13 11.0 -(word) print_word_decimal::w#3 w zp ZP_WORD:13 15.0 +(word) print_word_decimal::w#1 w zp ZP_WORD:11 4.0 +(word) print_word_decimal::w#2 w zp ZP_WORD:11 11.0 +(word) print_word_decimal::w#3 w zp ZP_WORD:11 15.0 (word) rem16u -(word) rem16u#1 rem16u zp ZP_WORD:15 0.6666666666666666 +(word) rem16u#1 rem16u zp ZP_WORD:13 0.6666666666666666 (byte*) sieve (const byte*) sieve#0 sieve = (byte*) 4096 (void()) ultoa((dword) ultoa::value , (byte*) ultoa::buffer , (byte) ultoa::radix) (byte~) ultoa::$11 reg byte a 22.0 (byte~) ultoa::$4 reg byte a 4.0 (label) ultoa::@1 +(label) ultoa::@19_1 (label) ultoa::@2 (label) ultoa::@3 (label) ultoa::@4 @@ -263,49 +267,57 @@ (label) ultoa::@7 (label) ultoa::@return (byte*) ultoa::buffer -(byte*) ultoa::buffer#11 buffer zp ZP_WORD:13 3.4285714285714284 -(byte*) ultoa::buffer#14 buffer zp ZP_WORD:13 16.5 -(byte*) ultoa::buffer#3 buffer zp ZP_WORD:13 4.0 -(byte*) ultoa::buffer#4 buffer zp ZP_WORD:13 22.0 +(byte*) ultoa::buffer#11 buffer zp ZP_WORD:11 6.0 +(byte*) ultoa::buffer#28 buffer zp ZP_WORD:11 16.5 +(byte*) ultoa::buffer#29 buffer zp ZP_WORD:11 6.285714285714286 +(byte*) ultoa::buffer#3 buffer zp ZP_WORD:11 4.0 +(byte*) ultoa::buffer#4 buffer zp ZP_WORD:11 22.0 (byte) ultoa::digit -(byte) ultoa::digit#1 digit zp ZP_BYTE:8 22.0 -(byte) ultoa::digit#2 digit zp ZP_BYTE:8 3.142857142857143 +(byte) ultoa::digit#1 digit zp ZP_BYTE:6 11.0 +(byte) ultoa::digit#13 digit zp ZP_BYTE:6 33.0 +(byte) ultoa::digit#14 digit zp ZP_BYTE:6 4.125 +(byte) ultoa::digit#15 digit zp ZP_BYTE:6 16.5 (dword) ultoa::digit_value -(dword) ultoa::digit_value#0 digit_value zp ZP_DWORD:21 6.6000000000000005 +(dword) ultoa::digit_value#0 digit_value zp ZP_DWORD:19 16.5 +(dword) ultoa::digit_value#2 digit_value zp ZP_DWORD:19 11.0 +(dword) ultoa::digit_value#3 digit_value zp ZP_DWORD:19 17.5 +(dword) ultoa::digit_value#4 digit_value zp ZP_DWORD:19 4.0 (dword*) ultoa::digit_values (byte) ultoa::max_digits (const byte) ultoa::max_digits#1 max_digits = (byte) $a (byte) ultoa::radix (byte) ultoa::started (byte) ultoa::started#2 reg byte x 5.5 -(byte) ultoa::started#4 reg byte x 11.0 +(byte) ultoa::started#8 reg byte x 11.0 (dword) ultoa::value -(dword) ultoa::value#0 value zp ZP_DWORD:9 11.0 -(dword) ultoa::value#1 value zp ZP_DWORD:9 2.0 -(dword) ultoa::value#2 value zp ZP_DWORD:9 6.571428571428571 -(dword) ultoa::value#6 value zp ZP_DWORD:9 16.5 +(dword) ultoa::value#0 value zp ZP_DWORD:7 11.0 +(dword) ultoa::value#1 value zp ZP_DWORD:7 1.3333333333333333 +(dword) ultoa::value#16 value zp ZP_DWORD:7 7.333333333333333 +(dword) ultoa::value#21 value zp ZP_DWORD:7 23.0 +(dword) ultoa::value#22 value zp ZP_DWORD:7 16.5 (dword()) ultoa_append((byte*) ultoa_append::buffer , (dword) ultoa_append::value , (dword) ultoa_append::sub) (label) ultoa_append::@1 (label) ultoa_append::@2 (label) ultoa_append::@3 (label) ultoa_append::@return (byte*) ultoa_append::buffer -(byte*) ultoa_append::buffer#0 buffer zp ZP_WORD:13 1.625 +(byte*) ultoa_append::buffer#0 buffer zp ZP_WORD:11 1.625 (byte) ultoa_append::digit (byte) ultoa_append::digit#1 reg byte x 101.0 (byte) ultoa_append::digit#2 reg byte x 102.0 (dword) ultoa_append::return -(dword) ultoa_append::return#0 return zp ZP_DWORD:9 22.0 +(dword) ultoa_append::return#0 return zp ZP_DWORD:7 22.0 (dword) ultoa_append::sub -(dword) ultoa_append::sub#0 sub zp ZP_DWORD:21 35.5 +(dword) ultoa_append::sub#0 sub zp ZP_DWORD:19 35.5 (dword) ultoa_append::value -(dword) ultoa_append::value#0 value zp ZP_DWORD:9 4.333333333333333 -(dword) ultoa_append::value#1 value zp ZP_DWORD:9 202.0 -(dword) ultoa_append::value#2 value zp ZP_DWORD:9 52.66666666666666 +(dword) ultoa_append::value#0 value zp ZP_DWORD:7 4.333333333333333 +(dword) ultoa_append::value#1 value zp ZP_DWORD:7 202.0 +(dword) ultoa_append::value#2 value zp ZP_DWORD:7 52.66666666666666 (void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) (byte~) utoa::$11 reg byte a 202.0 (byte~) utoa::$4 reg byte a 4.0 (label) utoa::@1 +(label) utoa::@19_1 (label) utoa::@2 (label) utoa::@3 (label) utoa::@4 @@ -314,66 +326,72 @@ (label) utoa::@7 (label) utoa::@return (byte*) utoa::buffer -(byte*) utoa::buffer#11 buffer zp ZP_WORD:4 29.142857142857146 -(byte*) utoa::buffer#14 buffer zp ZP_WORD:4 151.5 -(byte*) utoa::buffer#3 buffer zp ZP_WORD:4 4.0 -(byte*) utoa::buffer#4 buffer zp ZP_WORD:4 202.0 +(byte*) utoa::buffer#11 buffer zp ZP_WORD:2 51.0 +(byte*) utoa::buffer#28 buffer zp ZP_WORD:2 151.5 +(byte*) utoa::buffer#29 buffer zp ZP_WORD:2 57.714285714285715 +(byte*) utoa::buffer#3 buffer zp ZP_WORD:2 4.0 +(byte*) utoa::buffer#4 buffer zp ZP_WORD:2 202.0 (byte) utoa::digit -(byte) utoa::digit#1 digit zp ZP_BYTE:8 202.0 -(byte) utoa::digit#2 digit zp ZP_BYTE:8 28.857142857142858 +(byte) utoa::digit#1 digit zp ZP_BYTE:6 101.0 +(byte) utoa::digit#13 digit zp ZP_BYTE:6 303.0 +(byte) utoa::digit#14 digit zp ZP_BYTE:6 37.875 +(byte) utoa::digit#15 digit zp ZP_BYTE:6 151.5 (word) utoa::digit_value -(word) utoa::digit_value#0 digit_value zp ZP_WORD:25 60.599999999999994 +(word) utoa::digit_value#0 digit_value zp ZP_WORD:13 151.5 +(word) utoa::digit_value#2 digit_value zp ZP_WORD:13 101.0 +(word) utoa::digit_value#3 digit_value zp ZP_WORD:13 152.5 +(word) utoa::digit_value#4 digit_value zp ZP_WORD:13 4.0 (word*) utoa::digit_values (byte) utoa::max_digits (const byte) utoa::max_digits#1 max_digits = (byte) 5 (byte) utoa::radix (byte) utoa::started (byte) utoa::started#2 reg byte x 50.5 -(byte) utoa::started#4 reg byte x 101.0 +(byte) utoa::started#8 reg byte x 101.0 (word) utoa::value -(word) utoa::value#0 value zp ZP_WORD:2 101.0 -(word) utoa::value#1 value zp ZP_WORD:2 2.0 -(word) utoa::value#2 value zp ZP_WORD:2 58.00000000000001 -(word) utoa::value#6 value zp ZP_WORD:2 151.5 +(word) utoa::value#0 value zp ZP_WORD:17 101.0 +(word) utoa::value#1 value zp ZP_WORD:17 1.3333333333333333 +(word) utoa::value#16 value zp ZP_WORD:17 67.33333333333333 +(word) utoa::value#21 value zp ZP_WORD:17 203.0 +(word) utoa::value#22 value zp ZP_WORD:17 151.5 (word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) (label) utoa_append::@1 (label) utoa_append::@2 (label) utoa_append::@3 (label) utoa_append::@return (byte*) utoa_append::buffer -(byte*) utoa_append::buffer#0 buffer zp ZP_WORD:4 12.875 +(byte*) utoa_append::buffer#0 buffer zp ZP_WORD:2 12.875 (byte) utoa_append::digit (byte) utoa_append::digit#1 reg byte x 1001.0 (byte) utoa_append::digit#2 reg byte x 1002.0 (word) utoa_append::return -(word) utoa_append::return#0 return zp ZP_WORD:2 202.0 +(word) utoa_append::return#0 return zp ZP_WORD:17 202.0 (word) utoa_append::sub -(word) utoa_append::sub#0 sub zp ZP_WORD:25 350.5 +(word) utoa_append::sub#0 sub zp ZP_WORD:13 350.5 (word) utoa_append::value -(word) utoa_append::value#0 value zp ZP_WORD:2 34.33333333333333 -(word) utoa_append::value#1 value zp ZP_WORD:2 2002.0 -(word) utoa_append::value#2 value zp ZP_WORD:2 517.6666666666667 +(word) utoa_append::value#0 value zp ZP_WORD:17 34.33333333333333 +(word) utoa_append::value#1 value zp ZP_WORD:17 2002.0 +(word) utoa_append::value#2 value zp ZP_WORD:17 517.6666666666667 -zp ZP_WORD:2 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 main::j#2 main::j#0 main::j#1 ] -reg byte x [ utoa::started#2 utoa::started#4 ] -zp ZP_WORD:4 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 main::s#2 main::s#0 main::s#1 ] +reg byte x [ utoa::started#8 utoa::started#2 ] +zp ZP_WORD:2 [ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 main::s#2 main::s#0 main::s#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] -zp ZP_WORD:6 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#62 print_char_cursor#78 print_line_cursor#1 print_char_cursor#10 ] -zp ZP_BYTE:8 [ ultoa::digit#2 ultoa::digit#1 utoa::digit#2 utoa::digit#1 ] -zp ZP_DWORD:9 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 print_dword_decimal::w#0 ultoa_append::return#0 main::cyclecount#0 div32u16u::dividend#0 clock::return#2 main::$10 clock::return#0 ] -reg byte x [ ultoa::started#2 ultoa::started#4 ] -zp ZP_WORD:13 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 main::i#10 main::i#3 print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 main::sec100s#0 ] +zp ZP_WORD:4 [ print_line_cursor#11 print_line_cursor#21 print_char_cursor#90 print_char_cursor#104 print_line_cursor#1 ] +reg byte x [ ultoa::started#8 ultoa::started#2 ] +zp ZP_BYTE:6 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] +zp ZP_DWORD:7 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 print_dword_decimal::w#0 ultoa_append::return#0 main::cyclecount#0 div32u16u::dividend#0 clock::return#2 main::$10 clock::return#0 ] +zp ZP_WORD:11 [ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 main::i#22 main::i#10 print_word_decimal::w#3 print_word_decimal::w#2 print_word_decimal::w#1 main::sec100s#0 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] +zp ZP_WORD:13 [ 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 utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 utoa_append::sub#0 print_str::str#8 print_str::str#10 print_str::str#0 main::sieve_i#11 main::sieve_i#1 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] -zp ZP_WORD:15 [ memset::num#2 memset::end#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 print_str::str#8 print_str::str#10 print_str::str#0 main::sieve_i#2 main::sieve_i#1 ] -zp ZP_WORD:17 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 print_char_cursor#66 print_char_cursor#89 print_char_cursor#90 print_char_cursor#91 print_char_cursor#58 print_char_cursor#97 print_char_cursor#2 print_char_cursor#1 main::i#12 main::i#2 ] +zp ZP_WORD:15 [ memset::num#2 memset::end#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 main::i#17 main::i#12 ] +zp ZP_WORD:17 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 main::j#2 main::j#0 main::j#1 ] reg byte x [ memset::c#4 ] -zp ZP_WORD:19 [ main::$38 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] +zp ZP_DWORD:19 [ div32u16u::return#2 main::$14 div32u16u::return#0 ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ultoa_append::sub#0 ] reg byte a [ utoa::$4 ] reg byte a [ utoa::$11 ] reg byte a [ ultoa::$4 ] reg byte a [ ultoa::$11 ] -zp ZP_DWORD:21 [ ultoa::digit_value#0 ultoa_append::sub#0 div32u16u::return#2 main::$14 div32u16u::return#0 ] -zp ZP_WORD:25 [ div32u16u::quotient_hi#0 utoa::digit_value#0 utoa_append::sub#0 ] +zp ZP_WORD:23 [ div32u16u::quotient_hi#0 main::$38 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] diff --git a/src/test/ref/signed-bytes.asm b/src/test/ref/signed-bytes.asm index 08df84ab4..31b7e2b02 100644 --- a/src/test/ref/signed-bytes.asm +++ b/src/test/ref/signed-bytes.asm @@ -3,10 +3,14 @@ .pc = $80d "Program" main: { .label screen = $400 - ldy #0 - ldx #-$7f - b1: - txa + ldx #0 + ldy #-$7f + b2: + tya + sta screen,x + iny + inx + tya sec sbc #$7f bvc !+ @@ -14,10 +18,4 @@ main: { !: bmi b2 rts - b2: - txa - sta screen,y - inx - iny - jmp b1 } diff --git a/src/test/ref/signed-bytes.cfg b/src/test/ref/signed-bytes.cfg index 57172f44b..171258843 100644 --- a/src/test/ref/signed-bytes.cfg +++ b/src/test/ref/signed-bytes.cfg @@ -9,17 +9,17 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main/(byte) 0 ) + [5] (signed byte) main::i#4 ← phi( main::@1/(signed byte) main::i#1 main/(signed byte) -$7f ) + [6] *((const byte*) main::screen#0 + (byte) main::j#4) ← (byte)(signed byte) main::i#4 + [7] (signed byte) main::i#1 ← ++ (signed byte) main::i#4 + [8] (byte) main::j#1 ← ++ (byte) main::j#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::j#2 ← phi( main/(byte) 0 main::@2/(byte) main::j#1 ) - [5] (signed byte) main::i#2 ← phi( main/(signed byte) -$7f main::@2/(signed byte) main::i#1 ) - [6] if((signed byte) main::i#2<(signed byte) $7f) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((signed byte) main::i#1<(signed byte) $7f) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) main::screen#0 + (byte) main::j#2) ← (byte)(signed byte) main::i#2 - [9] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 - [10] (byte) main::j#1 ← ++ (byte) main::j#2 - to:main::@1 diff --git a/src/test/ref/signed-bytes.log b/src/test/ref/signed-bytes.log index 1253a6e36..2ee5585d0 100644 --- a/src/test/ref/signed-bytes.log +++ b/src/test/ref/signed-bytes.log @@ -87,26 +87,39 @@ Constant (const byte*) main::screen#0 = (byte*) 1024 Constant (const byte) main::j#0 = 0 Constant (const signed byte) main::i#0 = -$7f Successful SSA optimization Pass2ConstantIdentification -Inlining Noop Cast [2] (byte~) main::$1 ← (byte)(signed byte) main::i#2 keeping main::i#2 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (signed byte) main::i#1 = (signed byte) main::i#2 +Alias (byte) main::j#1 = (byte) main::j#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (signed byte) main::i#5 (const signed byte) main::i#0 +Identical Phi Values (byte) main::j#5 (const byte) main::j#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [11] if((const signed byte) main::i#0<(signed byte) $7f) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Inlining Noop Cast [2] (byte~) main::$1 ← (byte)(signed byte) main::i#4 keeping main::i#4 Successful SSA optimization Pass2NopCastInlining Inlining constant with var siblings (const byte) main::j#0 Inlining constant with var siblings (const signed byte) main::i#0 Constant inlined main::i#0 = (signed byte) -$7f Constant inlined main::j#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 2 initial phi equivalence classes -Coalesced [12] main::i#4 ← main::i#1 -Coalesced [13] main::j#4 ← main::j#1 +Coalesced [13] main::i#6 ← main::i#1 +Coalesced [14] main::j#6 ← main::j#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -124,40 +137,40 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main/(byte) 0 ) + [5] (signed byte) main::i#4 ← phi( main::@1/(signed byte) main::i#1 main/(signed byte) -$7f ) + [6] *((const byte*) main::screen#0 + (byte) main::j#4) ← (byte)(signed byte) main::i#4 + [7] (signed byte) main::i#1 ← ++ (signed byte) main::i#4 + [8] (byte) main::j#1 ← ++ (byte) main::j#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::j#2 ← phi( main/(byte) 0 main::@2/(byte) main::j#1 ) - [5] (signed byte) main::i#2 ← phi( main/(signed byte) -$7f main::@2/(signed byte) main::i#1 ) - [6] if((signed byte) main::i#2<(signed byte) $7f) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((signed byte) main::i#1<(signed byte) $7f) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) main::screen#0 + (byte) main::j#2) ← (byte)(signed byte) main::i#2 - [9] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 - [10] (byte) main::j#1 ← ++ (byte) main::j#2 - to:main::@1 VARIABLE REGISTER WEIGHTS (void()) main() (signed byte) main::i (signed byte) main::i#1 11.0 -(signed byte) main::i#2 11.0 +(signed byte) main::i#4 11.0 (byte) main::j -(byte) main::j#1 22.0 -(byte) main::j#2 8.25 +(byte) main::j#1 11.0 +(byte) main::j#4 11.0 (byte*) main::screen Initial phi equivalence classes -[ main::i#2 main::i#1 ] -[ main::j#2 main::j#1 ] +[ main::i#4 main::i#1 ] +[ main::j#4 main::j#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -[ main::j#2 main::j#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::j#2 main::j#1 ] +[ main::i#4 main::i#1 ] +[ main::j#4 main::j#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::j#4 main::j#1 ] INITIAL ASM Target platform is c64basic @@ -188,64 +201,64 @@ main: { .label screen = $400 .label i = 2 .label j = 3 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::j#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::j#4 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta j - // [5] phi (signed byte) main::i#2 = (signed byte) -$7f [phi:main->main::@1#1] -- vbsz1=vbsc1 + // [5] phi (signed byte) main::i#4 = (signed byte) -$7f [phi:main->main::@2#1] -- vbsz1=vbsc1 lda #-$7f sta i + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (signed byte) main::i#4 = (signed byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) main::screen#0 + (byte) main::j#4) ← (byte)(signed byte) main::i#4 -- pbuc1_derefidx_vbuz1=vbuz2 + lda i + ldy j + sta screen,y + // [7] (signed byte) main::i#1 ← ++ (signed byte) main::i#4 -- vbsz1=_inc_vbsz1 + inc i + // [8] (byte) main::j#1 ← ++ (byte) main::j#4 -- vbuz1=_inc_vbuz1 + inc j jmp b1 // main::@1 b1: - // [6] if((signed byte) main::i#2<(signed byte) $7f) goto main::@2 -- vbsz1_lt_vbsc1_then_la1 + // [9] if((signed byte) main::i#1<(signed byte) $7f) goto main::@2 -- vbsz1_lt_vbsc1_then_la1 lda i sec sbc #$7f bvc !+ eor #$80 !: - bmi b2 + bmi b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [10] return rts - // main::@2 - b2: - // [8] *((const byte*) main::screen#0 + (byte) main::j#2) ← (byte)(signed byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz2 - lda i - ldy j - sta screen,y - // [9] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 -- vbsz1=_inc_vbsz1 - inc i - // [10] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuz1=_inc_vbuz1 - inc j - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (signed byte) main::i#2 = (signed byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if((signed byte) main::i#2<(signed byte) $7f) goto main::@2 [ main::i#2 main::j#2 ] ( main:2 [ main::i#2 main::j#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::j#2 main::j#1 ] -Statement [8] *((const byte*) main::screen#0 + (byte) main::j#2) ← (byte)(signed byte) main::i#2 [ main::i#2 main::j#2 ] ( main:2 [ main::i#2 main::j#2 ] ) always clobbers reg byte a -Statement [6] if((signed byte) main::i#2<(signed byte) $7f) goto main::@2 [ main::i#2 main::j#2 ] ( main:2 [ main::i#2 main::j#2 ] ) always clobbers reg byte a -Statement [8] *((const byte*) main::screen#0 + (byte) main::j#2) ← (byte)(signed byte) main::i#2 [ main::i#2 main::j#2 ] ( main:2 [ main::i#2 main::j#2 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ main::j#2 main::j#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Statement [9] if((signed byte) main::i#1<(signed byte) $7f) goto main::@2 [ main::i#1 main::j#1 ] ( main:2 [ main::i#1 main::j#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#4 main::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::j#4 main::j#1 ] +Statement [6] *((const byte*) main::screen#0 + (byte) main::j#4) ← (byte)(signed byte) main::i#4 [ main::i#4 main::j#4 ] ( main:2 [ main::i#4 main::j#4 ] ) always clobbers reg byte a +Statement [9] if((signed byte) main::i#1<(signed byte) $7f) goto main::@2 [ main::i#1 main::j#1 ] ( main:2 [ main::i#1 main::j#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::j#4 main::j#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 30.25: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] 22: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 22: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] 22: zp ZP_BYTE:3 [ main::j#4 main::j#1 ] Uplift Scope [] -Uplifting [main] best 388 combination reg byte y [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 388 combination +Uplifting [main] best 418 combination reg byte y [ main::i#4 main::i#1 ] reg byte x [ main::j#4 main::j#1 ] +Uplifting [] best 418 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -273,64 +286,70 @@ bend: // main main: { .label screen = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::j#2 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 - ldy #0 - // [5] phi (signed byte) main::i#2 = (signed byte) -$7f [phi:main->main::@1#1] -- vbsxx=vbsc1 - ldx #-$7f + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::j#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 + ldx #0 + // [5] phi (signed byte) main::i#4 = (signed byte) -$7f [phi:main->main::@2#1] -- vbsyy=vbsc1 + ldy #-$7f + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (signed byte) main::i#4 = (signed byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) main::screen#0 + (byte) main::j#4) ← (byte)(signed byte) main::i#4 -- pbuc1_derefidx_vbuxx=vbuyy + tya + sta screen,x + // [7] (signed byte) main::i#1 ← ++ (signed byte) main::i#4 -- vbsyy=_inc_vbsyy + iny + // [8] (byte) main::j#1 ← ++ (byte) main::j#4 -- vbuxx=_inc_vbuxx + inx jmp b1 // main::@1 b1: - // [6] if((signed byte) main::i#2<(signed byte) $7f) goto main::@2 -- vbsxx_lt_vbsc1_then_la1 - txa + // [9] if((signed byte) main::i#1<(signed byte) $7f) goto main::@2 -- vbsyy_lt_vbsc1_then_la1 + tya sec sbc #$7f bvc !+ eor #$80 !: - bmi b2 + bmi b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [10] return rts - // main::@2 - b2: - // [8] *((const byte*) main::screen#0 + (byte) main::j#2) ← (byte)(signed byte) main::i#2 -- pbuc1_derefidx_vbuyy=vbuxx - txa - sta screen,y - // [9] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 -- vbsxx=_inc_vbsxx - inx - // [10] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuyy=_inc_vbuyy - iny - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (signed byte) main::i#2 = (signed byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -343,20 +362,20 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return (signed byte) main::i -(signed byte) main::i#1 reg byte x 11.0 -(signed byte) main::i#2 reg byte x 11.0 +(signed byte) main::i#1 reg byte y 11.0 +(signed byte) main::i#4 reg byte y 11.0 (byte) main::j -(byte) main::j#1 reg byte y 22.0 -(byte) main::j#2 reg byte y 8.25 +(byte) main::j#1 reg byte x 11.0 +(byte) main::j#4 reg byte x 11.0 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -reg byte x [ main::i#2 main::i#1 ] -reg byte y [ main::j#2 main::j#1 ] +reg byte y [ main::i#4 main::i#1 ] +reg byte x [ main::j#4 main::j#1 ] FINAL ASSEMBLER -Score: 316 +Score: 286 // File Comments // Upstart @@ -374,16 +393,30 @@ Score: 316 // main main: { .label screen = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::j#2 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 - ldy #0 - // [5] phi (signed byte) main::i#2 = (signed byte) -$7f [phi:main->main::@1#1] -- vbsxx=vbsc1 - ldx #-$7f + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::j#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 + ldx #0 + // [5] phi (signed byte) main::i#4 = (signed byte) -$7f [phi:main->main::@2#1] -- vbsyy=vbsc1 + ldy #-$7f + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (signed byte) main::i#4 = (signed byte) main::i#1 [phi:main::@1->main::@2#1] -- register_copy + // main::@2 + b2: + // screen[j] = (byte)i + // [6] *((const byte*) main::screen#0 + (byte) main::j#4) ← (byte)(signed byte) main::i#4 -- pbuc1_derefidx_vbuxx=vbuyy + tya + sta screen,x + // i++; + // [7] (signed byte) main::i#1 ← ++ (signed byte) main::i#4 -- vbsyy=_inc_vbsyy + iny + // j++; + // [8] (byte) main::j#1 ← ++ (byte) main::j#4 -- vbuxx=_inc_vbuxx + inx // main::@1 - b1: // while(i<127) - // [6] if((signed byte) main::i#2<(signed byte) $7f) goto main::@2 -- vbsxx_lt_vbsc1_then_la1 - txa + // [9] if((signed byte) main::i#1<(signed byte) $7f) goto main::@2 -- vbsyy_lt_vbsc1_then_la1 + tya sec sbc #$7f bvc !+ @@ -392,24 +425,8 @@ main: { bmi b2 // main::@return // } - // [7] return + // [10] return rts - // main::@2 - b2: - // screen[j] = (byte)i - // [8] *((const byte*) main::screen#0 + (byte) main::j#2) ← (byte)(signed byte) main::i#2 -- pbuc1_derefidx_vbuyy=vbuxx - txa - sta screen,y - // i++; - // [9] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 -- vbsxx=_inc_vbsxx - inx - // j++; - // [10] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuyy=_inc_vbuyy - iny - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@1#0] -- register_copy - // [5] phi (signed byte) main::i#2 = (signed byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/signed-bytes.sym b/src/test/ref/signed-bytes.sym index 4f11ae0c0..3000cf312 100644 --- a/src/test/ref/signed-bytes.sym +++ b/src/test/ref/signed-bytes.sym @@ -6,13 +6,13 @@ (label) main::@2 (label) main::@return (signed byte) main::i -(signed byte) main::i#1 reg byte x 11.0 -(signed byte) main::i#2 reg byte x 11.0 +(signed byte) main::i#1 reg byte y 11.0 +(signed byte) main::i#4 reg byte y 11.0 (byte) main::j -(byte) main::j#1 reg byte y 22.0 -(byte) main::j#2 reg byte y 8.25 +(byte) main::j#1 reg byte x 11.0 +(byte) main::j#4 reg byte x 11.0 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -reg byte x [ main::i#2 main::i#1 ] -reg byte y [ main::j#2 main::j#1 ] +reg byte y [ main::i#4 main::i#1 ] +reg byte x [ main::j#4 main::j#1 ] diff --git a/src/test/ref/signed-indexed-subtract.asm b/src/test/ref/signed-indexed-subtract.asm index 3db1f5592..bff51d322 100644 --- a/src/test/ref/signed-indexed-subtract.asm +++ b/src/test/ref/signed-indexed-subtract.asm @@ -151,14 +151,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [62] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [62] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [62] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [63] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [62] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [65] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [63] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [66] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [64] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [62] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [62] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [65] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #> (byte) 4 [ print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ( main:2::print_sword:19::print_word:36::print_byte:46 [ main::j#2 print_line_cursor#19 print_word::w#0 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] main:2::print_sword:19::print_word:36::print_byte:48 [ main::j#2 print_line_cursor#19 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Statement [54] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#13 print_byte::$2 ] ( main:2::print_sword:19::print_word:36::print_byte:46 [ main::j#2 print_line_cursor#19 print_word::w#0 print_char_cursor#13 print_byte::$2 ] main:2::print_sword:19::print_word:36::print_byte:48 [ main::j#2 print_line_cursor#19 print_char_cursor#13 print_byte::$2 ] ) always clobbers reg byte a -Statement [63] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:15::memset:59 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [65] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:15::memset:59 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [63] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:15::memset:59 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [65] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:15::memset:59 [ memset::dst#1 ] ) always clobbers reg byte a Statement [68] (byte~) sub::$0 ← (byte) sub::idx#3 << (byte) 1 [ sub::s#3 sub::$0 ] ( main:2::sub:7 [ main::i#2 sub::s#3 sub::$0 ] main:2::sub:9 [ main::i#2 sub::s#3 sub::$0 ] main:2::sub:11 [ main::i#2 sub::s#3 sub::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ sub::s#3 ] @@ -1692,8 +1704,8 @@ Statement [45] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_char_ Statement [47] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#13 print_byte::b#1 ] ( main:2::print_sword:19::print_word:36 [ main::j#2 print_line_cursor#19 print_char_cursor#13 print_byte::b#1 ] ) always clobbers reg byte a Statement [51] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ( main:2::print_sword:19::print_word:36::print_byte:46 [ main::j#2 print_line_cursor#19 print_word::w#0 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] main:2::print_sword:19::print_word:36::print_byte:48 [ main::j#2 print_line_cursor#19 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Statement [54] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#13 print_byte::$2 ] ( main:2::print_sword:19::print_word:36::print_byte:46 [ main::j#2 print_line_cursor#19 print_word::w#0 print_char_cursor#13 print_byte::$2 ] main:2::print_sword:19::print_word:36::print_byte:48 [ main::j#2 print_line_cursor#19 print_char_cursor#13 print_byte::$2 ] ) always clobbers reg byte a -Statement [63] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:15::memset:59 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [65] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:15::memset:59 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [63] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:15::memset:59 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [65] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:15::memset:59 [ memset::dst#1 ] ) always clobbers reg byte a Statement [68] (byte~) sub::$0 ← (byte) sub::idx#3 << (byte) 1 [ sub::s#3 sub::$0 ] ( main:2::sub:7 [ main::i#2 sub::s#3 sub::$0 ] main:2::sub:9 [ main::i#2 sub::s#3 sub::$0 ] main:2::sub:11 [ main::i#2 sub::s#3 sub::$0 ] ) always clobbers reg byte a Statement [69] *((const signed word[]) words#0 + (byte~) sub::$0) ← *((const signed word[]) words#0 + (byte~) sub::$0) - (byte) sub::s#3 [ ] ( main:2::sub:7 [ main::i#2 ] main:2::sub:9 [ main::i#2 ] main:2::sub:11 [ main::i#2 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , @@ -1703,7 +1715,7 @@ Potential registers zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword Potential registers zp ZP_BYTE:8 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:9 [ print_char_cursor#34 print_char_cursor#13 print_char_cursor#49 print_char_cursor#63 ] : zp ZP_WORD:9 , Potential registers zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:11 , reg byte x , -Potential registers zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:12 , +Potential registers zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:12 , Potential registers zp ZP_BYTE:14 [ sub::idx#3 sub::idx#0 sub::idx#1 sub::idx#2 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:15 [ sub::s#3 ] : zp ZP_BYTE:15 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:16 [ main::$8 ] : zp ZP_BYTE:16 , reg byte a , reg byte x , reg byte y , @@ -1716,7 +1728,7 @@ REGISTER UPLIFT SCOPES Uplift Scope [] 252.6: zp ZP_WORD:4 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] 34.32: zp ZP_WORD:9 [ print_char_cursor#34 print_char_cursor#13 print_char_cursor#49 print_char_cursor#63 ] Uplift Scope [sub] 101: zp ZP_BYTE:14 [ sub::idx#3 sub::idx#0 sub::idx#1 sub::idx#2 ] 6: zp ZP_BYTE:21 [ sub::$0 ] 1: zp ZP_BYTE:15 [ sub::s#3 ] Uplift Scope [main] 24.36: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:16 [ main::$8 ] 16.5: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [memset] 33: zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 ] Uplift Scope [print_byte] 10: zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:19 [ print_byte::$0 ] 4: zp ZP_BYTE:20 [ print_byte::$2 ] Uplift Scope [print_char] 14: zp ZP_BYTE:8 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Uplift Scope [print_sword] 10.83: zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] @@ -1725,25 +1737,25 @@ Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] -Uplifting [] best 6585 combination zp ZP_WORD:4 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] zp ZP_WORD:9 [ print_char_cursor#34 print_char_cursor#13 print_char_cursor#49 print_char_cursor#63 ] -Uplifting [sub] best 6482 combination reg byte a [ sub::idx#3 sub::idx#0 sub::idx#1 sub::idx#2 ] reg byte a [ sub::$0 ] reg byte x [ sub::s#3 ] -Uplifting [main] best 6222 combination reg byte y [ main::i#2 main::i#1 ] reg byte a [ main::$8 ] reg byte x [ main::j#2 main::j#1 ] -Uplifting [memset] best 6222 combination zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_byte] best 6214 combination zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] -Uplifting [print_char] best 6199 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] -Uplifting [print_sword] best 6199 combination zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] -Uplifting [print_word] best 6199 combination zp ZP_WORD:17 [ print_word::w#0 ] -Uplifting [RADIX] best 6199 combination -Uplifting [print_ln] best 6199 combination -Uplifting [print_cls] best 6199 combination +Uplifting [] best 6615 combination zp ZP_WORD:4 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] zp ZP_WORD:9 [ print_char_cursor#34 print_char_cursor#13 print_char_cursor#49 print_char_cursor#63 ] +Uplifting [sub] best 6512 combination reg byte a [ sub::idx#3 sub::idx#0 sub::idx#1 sub::idx#2 ] reg byte a [ sub::$0 ] reg byte x [ sub::s#3 ] +Uplifting [main] best 6252 combination reg byte y [ main::i#2 main::i#1 ] reg byte a [ main::$8 ] reg byte x [ main::j#2 main::j#1 ] +Uplifting [memset] best 6252 combination zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 ] +Uplifting [print_byte] best 6244 combination zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [print_char] best 6229 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] +Uplifting [print_sword] best 6229 combination zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] +Uplifting [print_word] best 6229 combination zp ZP_WORD:17 [ print_word::w#0 ] +Uplifting [RADIX] best 6229 combination +Uplifting [print_ln] best 6229 combination +Uplifting [print_cls] best 6229 combination Attempting to uplift remaining variables inzp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Uplifting [print_byte] best 6199 combination zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Uplifting [print_byte] best 6229 combination zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Coalescing zero page register [ zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] ] with [ zp ZP_WORD:17 [ print_word::w#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:4 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] ] +Coalescing zero page register [ zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:4 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] ] Allocated (was zp ZP_WORD:6) zp ZP_WORD:2 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 print_word::w#0 ] Allocated (was zp ZP_WORD:9) zp ZP_WORD:4 [ print_char_cursor#34 print_char_cursor#13 print_char_cursor#49 print_char_cursor#63 ] Allocated (was zp ZP_BYTE:11) zp ZP_BYTE:6 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Allocated (was zp ZP_WORD:12) zp ZP_WORD:7 [ memset::dst#2 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] +Allocated (was zp ZP_WORD:12) zp ZP_WORD:7 [ memset::dst#4 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -2101,43 +2113,44 @@ memset: { .label str = $400 .label end = str+num .label dst = 7 - // [62] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [62] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [62] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [62] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [63] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [62] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [65] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [63] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [66] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [64] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [62] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [62] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [65] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [62] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [62] phi from memset to memset::@2 [phi:memset->memset::@2] + // [62] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [62] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [62] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [63] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [63] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [64] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [65] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -2709,24 +2740,8 @@ memset: { bne b2 // memset::@return // } - // [64] return + // [66] return rts - // memset::@2 - b2: - // *dst = c - // [65] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [66] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [62] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [62] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // sub // sub(byte register(A) idx, byte register(X) s) diff --git a/src/test/ref/signed-indexed-subtract.sym b/src/test/ref/signed-indexed-subtract.sym index c2fc04718..9344a65fe 100644 --- a/src/test/ref/signed-indexed-subtract.sym +++ b/src/test/ref/signed-indexed-subtract.sym @@ -30,8 +30,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:7 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:7 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:7 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:7 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -105,7 +105,7 @@ zp ZP_WORD:2 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 print_word::w# reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] zp ZP_WORD:4 [ print_char_cursor#34 print_char_cursor#13 print_char_cursor#49 print_char_cursor#63 ] zp ZP_BYTE:6 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -zp ZP_WORD:7 [ memset::dst#2 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] +zp ZP_WORD:7 [ memset::dst#4 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] reg byte a [ sub::idx#3 sub::idx#0 sub::idx#1 sub::idx#2 ] reg byte x [ sub::s#3 ] reg byte a [ main::$8 ] diff --git a/src/test/ref/signed-words.asm b/src/test/ref/signed-words.asm index e0b62260b..4f726ca48 100644 --- a/src/test/ref/signed-words.asm +++ b/src/test/ref/signed-words.asm @@ -187,7 +187,14 @@ init: { sta sc lda #>SCREEN sta sc+1 - b1: + b2: + lda #' ' + ldy #0 + sta (sc),y + inc sc + bne !+ + inc sc+1 + !: lda sc+1 cmp #>SCREEN+$3e8 bne b2 @@ -202,13 +209,4 @@ init: { cpx #$40 bne b3 rts - b2: - lda #' ' - ldy #0 - sta (sc),y - inc sc - bne !+ - inc sc+1 - !: - jmp b1 } diff --git a/src/test/ref/signed-words.cfg b/src/test/ref/signed-words.cfg index 355fc231f..bddba88e2 100644 --- a/src/test/ref/signed-words.cfg +++ b/src/test/ref/signed-words.cfg @@ -69,21 +69,21 @@ init: scope:[init] from main [36] *((const byte*) SPRITES_YPOS#0) ← (byte) $64 [37] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0 [38] *((const byte*) SPRITES_PTR#0) ← (byte)(const byte*) SPRITE#0/(byte) $40 + to:init::@2 +init::@2: scope:[init] from init init::@1 + [39] (byte*) init::sc#4 ← phi( init::@1/(byte*) init::sc#1 init/(const byte*) SCREEN#0 ) + [40] *((byte*) init::sc#4) ← (byte) ' ' + [41] (byte*) init::sc#1 ← ++ (byte*) init::sc#4 to:init::@1 -init::@1: scope:[init] from init init::@2 - [39] (byte*) init::sc#2 ← phi( init/(const byte*) SCREEN#0 init::@2/(byte*) init::sc#1 ) - [40] if((byte*) init::sc#2!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 +init::@1: scope:[init] from init::@2 + [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 to:init::@3 init::@3: scope:[init] from init::@1 init::@3 - [41] (byte) init::i#2 ← phi( init::@1/(byte) 0 init::@3/(byte) init::i#1 ) - [42] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff - [43] (byte) init::i#1 ← ++ (byte) init::i#2 - [44] if((byte) init::i#1!=(byte) $40) goto init::@3 + [43] (byte) init::i#2 ← phi( init::@1/(byte) 0 init::@3/(byte) init::i#1 ) + [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff + [45] (byte) init::i#1 ← ++ (byte) init::i#2 + [46] if((byte) init::i#1!=(byte) $40) goto init::@3 to:init::@return init::@return: scope:[init] from init::@3 - [45] return + [47] return to:@return -init::@2: scope:[init] from init::@1 - [46] *((byte*) init::sc#2) ← (byte) ' ' - [47] (byte*) init::sc#1 ← ++ (byte*) init::sc#2 - to:init::@1 diff --git a/src/test/ref/signed-words.log b/src/test/ref/signed-words.log index ee7819520..81551a4b4 100644 --- a/src/test/ref/signed-words.log +++ b/src/test/ref/signed-words.log @@ -688,8 +688,15 @@ Constant (const byte*) init::$2 = SCREEN#0+$3e8 Successful SSA optimization Pass2ConstantIdentification Constant value identified (byte)init::$0 in [12] (byte~) init::$1 ← (byte)(const byte*) init::$0 Successful SSA optimization Pass2ConstantValues +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) init::sc#1 = (byte*) init::sc#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) init::sc#5 (const byte*) init::sc#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant (const byte) init::$1 = (byte)init::$0 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [45] if((const byte*) init::sc#0!=(const byte*) init::$2) goto init::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) init::i#0 Inlining constant with var siblings (const byte*) init::sc#0 Inlining constant with var siblings (const signed word) xpos#15 @@ -713,7 +720,8 @@ Constant inlined init::$1 = (byte)(const byte*) SPRITE#0/(byte) $40 Constant inlined init::$0 = (const byte*) SPRITE#0/(byte) $40 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@7(between main::@2 and main::@2) -Added new block during phi lifting init::@9(between init::@7 and init::@7) +Added new block during phi lifting init::@9(between init::@1 and init::@2) +Added new block during phi lifting init::@10(between init::@7 and init::@7) Added new block during phi lifting anim::@5(between anim and anim::@1) Added new block during phi lifting anim::@6(between anim::@2 and anim::@4) Adding NOP phi() at start of @begin @@ -726,6 +734,7 @@ Adding NOP phi() at start of main Adding NOP phi() at start of main::@5 Adding NOP phi() at start of main::@3 Adding NOP phi() at start of anim::@3 +Adding NOP phi() at start of init::@1_1 Adding NOP phi() at start of init::@3 CALL GRAPH Calls in [] to main:4 @@ -751,8 +760,8 @@ Coalesced [50] xpos#22 ← xpos#12 Coalesced (already) [51] xvel#22 ← xvel#12 Coalesced [52] ypos#22 ← ypos#13 Coalesced (already) [53] yvel_init#22 ← yvel_init#13 -Coalesced [69] init::i#3 ← init::i#1 -Coalesced [72] init::sc#4 ← init::sc#1 +Coalesced [72] init::i#3 ← init::i#1 +Coalesced [73] init::sc#6 ← init::sc#1 Coalesced down to 7 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @6 @@ -762,7 +771,9 @@ Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@7 Culled Empty Block (label) anim::@3 Culled Empty Block (label) anim::@5 +Culled Empty Block (label) init::@1_1 Culled Empty Block (label) init::@3 +Culled Empty Block (label) init::@10 Culled Empty Block (label) init::@9 Renumbering block @7 to @1 Renumbering block main::@2 to main::@1 @@ -849,24 +860,24 @@ init: scope:[init] from main [36] *((const byte*) SPRITES_YPOS#0) ← (byte) $64 [37] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0 [38] *((const byte*) SPRITES_PTR#0) ← (byte)(const byte*) SPRITE#0/(byte) $40 + to:init::@2 +init::@2: scope:[init] from init init::@1 + [39] (byte*) init::sc#4 ← phi( init::@1/(byte*) init::sc#1 init/(const byte*) SCREEN#0 ) + [40] *((byte*) init::sc#4) ← (byte) ' ' + [41] (byte*) init::sc#1 ← ++ (byte*) init::sc#4 to:init::@1 -init::@1: scope:[init] from init init::@2 - [39] (byte*) init::sc#2 ← phi( init/(const byte*) SCREEN#0 init::@2/(byte*) init::sc#1 ) - [40] if((byte*) init::sc#2!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 +init::@1: scope:[init] from init::@2 + [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 to:init::@3 init::@3: scope:[init] from init::@1 init::@3 - [41] (byte) init::i#2 ← phi( init::@1/(byte) 0 init::@3/(byte) init::i#1 ) - [42] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff - [43] (byte) init::i#1 ← ++ (byte) init::i#2 - [44] if((byte) init::i#1!=(byte) $40) goto init::@3 + [43] (byte) init::i#2 ← phi( init::@1/(byte) 0 init::@3/(byte) init::i#1 ) + [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff + [45] (byte) init::i#1 ← ++ (byte) init::i#2 + [46] if((byte) init::i#1!=(byte) $40) goto init::@3 to:init::@return init::@return: scope:[init] from init::@3 - [45] return + [47] return to:@return -init::@2: scope:[init] from init::@1 - [46] *((byte*) init::sc#2) ← (byte) ' ' - [47] (byte*) init::sc#1 ← ++ (byte*) init::sc#2 - to:init::@1 VARIABLE REGISTER WEIGHTS @@ -898,8 +909,8 @@ VARIABLE REGISTER WEIGHTS (byte) init::i#1 16.5 (byte) init::i#2 16.5 (byte*) init::sc -(byte*) init::sc#1 22.0 -(byte*) init::sc#2 14.666666666666666 +(byte*) init::sc#1 16.5 +(byte*) init::sc#4 16.5 (void()) main() (signed word) xpos (signed word) xpos#10 1.0714285714285714 @@ -930,7 +941,7 @@ Initial phi equivalence classes [ yvel#9 yvel#12 yvel#10 yvel#21 ] [ xpos#9 xpos#12 xpos#10 ] [ ypos#10 ypos#13 ypos#11 ] -[ init::sc#2 init::sc#1 ] +[ init::sc#4 init::sc#1 ] [ init::i#2 init::i#1 ] Added variable anim::$5 to zero page equivalence class [ anim::$5 ] Added variable anim::sprite_x#0 to zero page equivalence class [ anim::sprite_x#0 ] @@ -945,7 +956,7 @@ Complete equivalence classes [ yvel#9 yvel#12 yvel#10 yvel#21 ] [ xpos#9 xpos#12 xpos#10 ] [ ypos#10 ypos#13 ypos#11 ] -[ init::sc#2 init::sc#1 ] +[ init::sc#4 init::sc#1 ] [ init::i#2 init::i#1 ] [ anim::$5 ] [ anim::sprite_x#0 ] @@ -959,7 +970,7 @@ Allocated zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] Allocated zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] Allocated zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] Allocated zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] -Allocated zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] +Allocated zp ZP_WORD:12 [ init::sc#4 init::sc#1 ] Allocated zp ZP_BYTE:14 [ init::i#2 init::i#1 ] Allocated zp ZP_WORD:15 [ anim::$5 ] Allocated zp ZP_WORD:17 [ anim::sprite_x#0 ] @@ -1285,65 +1296,66 @@ init: { // [38] *((const byte*) SPRITES_PTR#0) ← (byte)(const byte*) SPRITE#0/(byte) $40 -- _deref_pbuc1=vbuc2 lda #SPRITE/$40 sta SPRITES_PTR - // [39] phi from init to init::@1 [phi:init->init::@1] - b1_from_init: - // [39] phi (byte*) init::sc#2 = (const byte*) SCREEN#0 [phi:init->init::@1#0] -- pbuz1=pbuc1 + // [39] phi from init to init::@2 [phi:init->init::@2] + b2_from_init: + // [39] phi (byte*) init::sc#4 = (const byte*) SCREEN#0 [phi:init->init::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta sc+1 + jmp b2 + // [39] phi from init::@1 to init::@2 [phi:init::@1->init::@2] + b2_from_b1: + // [39] phi (byte*) init::sc#4 = (byte*) init::sc#1 [phi:init::@1->init::@2#0] -- register_copy + jmp b2 + // init::@2 + b2: + // [40] *((byte*) init::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + // [41] (byte*) init::sc#1 ← ++ (byte*) init::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: jmp b1 // init::@1 b1: - // [40] if((byte*) init::sc#2!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 -- pbuz1_neq_pbuc1_then_la1 lda sc+1 cmp #>SCREEN+$3e8 - bne b2 + bne b2_from_b1 lda sc cmp #init::@3] + bne b2_from_b1 + // [43] phi from init::@1 to init::@3 [phi:init::@1->init::@3] b3_from_b1: - // [41] phi (byte) init::i#2 = (byte) 0 [phi:init::@1->init::@3#0] -- vbuz1=vbuc1 + // [43] phi (byte) init::i#2 = (byte) 0 [phi:init::@1->init::@3#0] -- vbuz1=vbuc1 lda #0 sta i jmp b3 - // [41] phi from init::@3 to init::@3 [phi:init::@3->init::@3] + // [43] phi from init::@3 to init::@3 [phi:init::@3->init::@3] b3_from_b3: - // [41] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@3->init::@3#0] -- register_copy + // [43] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@3->init::@3#0] -- register_copy jmp b3 // init::@3 b3: - // [42] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff -- pbuc1_derefidx_vbuz1=vbuc2 + // [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff -- pbuc1_derefidx_vbuz1=vbuc2 lda #$ff ldy i sta SPRITE,y - // [43] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuz1=_inc_vbuz1 + // [45] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuz1=_inc_vbuz1 inc i - // [44] if((byte) init::i#1!=(byte) $40) goto init::@3 -- vbuz1_neq_vbuc1_then_la1 + // [46] if((byte) init::i#1!=(byte) $40) goto init::@3 -- vbuz1_neq_vbuc1_then_la1 lda #$40 cmp i bne b3_from_b3 jmp breturn // init::@return breturn: - // [45] return + // [47] return rts - // init::@2 - b2: - // [46] *((byte*) init::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // [47] (byte*) init::sc#1 ← ++ (byte*) init::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - // [39] phi from init::@2 to init::@1 [phi:init::@2->init::@1] - b1_from_b2: - // [39] phi (byte*) init::sc#2 = (byte*) init::sc#1 [phi:init::@2->init::@1#0] -- register_copy - jmp b1 } // File Data @@ -1371,10 +1383,10 @@ Statement [35] *((const byte*) SPRITES_XPOS#0) ← (byte) $64 [ ] ( main:2::init Statement [36] *((const byte*) SPRITES_YPOS#0) ← (byte) $64 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a Statement [37] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a Statement [38] *((const byte*) SPRITES_PTR#0) ← (byte)(const byte*) SPRITE#0/(byte) $40 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a -Statement [40] if((byte*) init::sc#2!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 [ init::sc#2 ] ( main:2::init:5 [ init::sc#2 ] ) always clobbers reg byte a -Statement [42] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a +Statement [40] *((byte*) init::sc#4) ← (byte) ' ' [ init::sc#4 ] ( main:2::init:5 [ init::sc#4 ] ) always clobbers reg byte a reg byte y +Statement [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 [ init::sc#1 ] ( main:2::init:5 [ init::sc#1 ] ) always clobbers reg byte a +Statement [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ init::i#2 init::i#1 ] -Statement [46] *((byte*) init::sc#2) ← (byte) ' ' [ init::sc#2 ] ( main:2::init:5 [ init::sc#2 ] ) always clobbers reg byte a reg byte y Statement [7] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) always clobbers reg byte a Statement [10] if((signed word) ypos#13>=(signed byte) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) always clobbers reg byte a Statement [11] (signed word) xvel#14 ← - (signed word) xvel#12 [ yvel_init#13 xvel#14 ] ( main:2::anim:9 [ yvel_init#13 xvel#14 ] ) always clobbers reg byte a @@ -1398,15 +1410,15 @@ Statement [35] *((const byte*) SPRITES_XPOS#0) ← (byte) $64 [ ] ( main:2::init Statement [36] *((const byte*) SPRITES_YPOS#0) ← (byte) $64 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a Statement [37] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a Statement [38] *((const byte*) SPRITES_PTR#0) ← (byte)(const byte*) SPRITE#0/(byte) $40 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a -Statement [40] if((byte*) init::sc#2!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 [ init::sc#2 ] ( main:2::init:5 [ init::sc#2 ] ) always clobbers reg byte a -Statement [42] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a -Statement [46] *((byte*) init::sc#2) ← (byte) ' ' [ init::sc#2 ] ( main:2::init:5 [ init::sc#2 ] ) always clobbers reg byte a reg byte y +Statement [40] *((byte*) init::sc#4) ← (byte) ' ' [ init::sc#4 ] ( main:2::init:5 [ init::sc#4 ] ) always clobbers reg byte a reg byte y +Statement [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 [ init::sc#1 ] ( main:2::init:5 [ init::sc#1 ] ) always clobbers reg byte a +Statement [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] : zp ZP_WORD:4 , Potential registers zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] : zp ZP_WORD:6 , Potential registers zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] : zp ZP_WORD:8 , Potential registers zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] : zp ZP_WORD:10 , -Potential registers zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] : zp ZP_WORD:12 , +Potential registers zp ZP_WORD:12 [ init::sc#4 init::sc#1 ] : zp ZP_WORD:12 , Potential registers zp ZP_BYTE:14 [ init::i#2 init::i#1 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , Potential registers zp ZP_WORD:15 [ anim::$5 ] : zp ZP_WORD:15 , Potential registers zp ZP_WORD:17 [ anim::sprite_x#0 ] : zp ZP_WORD:17 , @@ -1418,22 +1430,22 @@ Potential registers zp ZP_BYTE:25 [ anim::$11 ] : zp ZP_BYTE:25 , reg byte a , r REGISTER UPLIFT SCOPES Uplift Scope [] 64.75: zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] 56.82: zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] 56.74: zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] 55.98: zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] 49.34: zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] -Uplift Scope [init] 36.67: zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] 33: zp ZP_BYTE:14 [ init::i#2 init::i#1 ] +Uplift Scope [init] 33: zp ZP_WORD:12 [ init::sc#4 init::sc#1 ] 33: zp ZP_BYTE:14 [ init::i#2 init::i#1 ] Uplift Scope [anim] 4: zp ZP_WORD:15 [ anim::$5 ] 4: zp ZP_WORD:19 [ anim::$7 ] 4: zp ZP_BYTE:23 [ anim::$9 ] 4: zp ZP_BYTE:24 [ anim::$10 ] 4: zp ZP_BYTE:25 [ anim::$11 ] 0.67: zp ZP_WORD:21 [ anim::sprite_y#0 ] 0.57: zp ZP_WORD:17 [ anim::sprite_x#0 ] Uplift Scope [main] -Uplifting [] best 7904 combination zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] -Uplifting [init] best 7784 combination zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] reg byte x [ init::i#2 init::i#1 ] -Uplifting [anim] best 7766 combination zp ZP_WORD:15 [ anim::$5 ] zp ZP_WORD:19 [ anim::$7 ] reg byte a [ anim::$9 ] reg byte a [ anim::$10 ] reg byte a [ anim::$11 ] zp ZP_WORD:21 [ anim::sprite_y#0 ] zp ZP_WORD:17 [ anim::sprite_x#0 ] -Uplifting [main] best 7766 combination +Uplifting [] best 7934 combination zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] +Uplifting [init] best 7814 combination zp ZP_WORD:12 [ init::sc#4 init::sc#1 ] reg byte x [ init::i#2 init::i#1 ] +Uplifting [anim] best 7796 combination zp ZP_WORD:15 [ anim::$5 ] zp ZP_WORD:19 [ anim::$7 ] reg byte a [ anim::$9 ] reg byte a [ anim::$10 ] reg byte a [ anim::$11 ] zp ZP_WORD:21 [ anim::sprite_y#0 ] zp ZP_WORD:17 [ anim::sprite_x#0 ] +Uplifting [main] best 7796 combination Coalescing zero page register [ zp ZP_WORD:15 [ anim::$5 ] ] with [ zp ZP_WORD:17 [ anim::sprite_x#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:19 [ anim::$7 ] ] with [ zp ZP_WORD:21 [ anim::sprite_y#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] ] with [ zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] ] +Coalescing zero page register [ zp ZP_WORD:12 [ init::sc#4 init::sc#1 ] ] with [ zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] ] Allocated (was zp ZP_WORD:4) zp ZP_WORD:2 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] Allocated (was zp ZP_WORD:6) zp ZP_WORD:4 [ yvel#9 yvel#12 yvel#10 yvel#21 ] Allocated (was zp ZP_WORD:8) zp ZP_WORD:6 [ xpos#9 xpos#12 xpos#10 ] Allocated (was zp ZP_WORD:10) zp ZP_WORD:8 [ ypos#10 ypos#13 ypos#11 ] -Allocated (was zp ZP_WORD:12) zp ZP_WORD:10 [ init::sc#2 init::sc#1 xvel#12 xvel#10 xvel#14 ] +Allocated (was zp ZP_WORD:12) zp ZP_WORD:10 [ init::sc#4 init::sc#1 xvel#12 xvel#10 xvel#14 ] Allocated (was zp ZP_WORD:15) zp ZP_WORD:12 [ anim::$5 anim::sprite_x#0 ] Allocated (was zp ZP_WORD:19) zp ZP_WORD:14 [ anim::$7 anim::sprite_y#0 ] @@ -1742,62 +1754,63 @@ init: { // [38] *((const byte*) SPRITES_PTR#0) ← (byte)(const byte*) SPRITE#0/(byte) $40 -- _deref_pbuc1=vbuc2 lda #SPRITE/$40 sta SPRITES_PTR - // [39] phi from init to init::@1 [phi:init->init::@1] - b1_from_init: - // [39] phi (byte*) init::sc#2 = (const byte*) SCREEN#0 [phi:init->init::@1#0] -- pbuz1=pbuc1 + // [39] phi from init to init::@2 [phi:init->init::@2] + b2_from_init: + // [39] phi (byte*) init::sc#4 = (const byte*) SCREEN#0 [phi:init->init::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta sc+1 + jmp b2 + // [39] phi from init::@1 to init::@2 [phi:init::@1->init::@2] + b2_from_b1: + // [39] phi (byte*) init::sc#4 = (byte*) init::sc#1 [phi:init::@1->init::@2#0] -- register_copy + jmp b2 + // init::@2 + b2: + // [40] *((byte*) init::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + // [41] (byte*) init::sc#1 ← ++ (byte*) init::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: jmp b1 // init::@1 b1: - // [40] if((byte*) init::sc#2!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 -- pbuz1_neq_pbuc1_then_la1 lda sc+1 cmp #>SCREEN+$3e8 - bne b2 + bne b2_from_b1 lda sc cmp #init::@3] + bne b2_from_b1 + // [43] phi from init::@1 to init::@3 [phi:init::@1->init::@3] b3_from_b1: - // [41] phi (byte) init::i#2 = (byte) 0 [phi:init::@1->init::@3#0] -- vbuxx=vbuc1 + // [43] phi (byte) init::i#2 = (byte) 0 [phi:init::@1->init::@3#0] -- vbuxx=vbuc1 ldx #0 jmp b3 - // [41] phi from init::@3 to init::@3 [phi:init::@3->init::@3] + // [43] phi from init::@3 to init::@3 [phi:init::@3->init::@3] b3_from_b3: - // [41] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@3->init::@3#0] -- register_copy + // [43] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@3->init::@3#0] -- register_copy jmp b3 // init::@3 b3: - // [42] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff -- pbuc1_derefidx_vbuxx=vbuc2 + // [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff -- pbuc1_derefidx_vbuxx=vbuc2 lda #$ff sta SPRITE,x - // [43] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuxx=_inc_vbuxx + // [45] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuxx=_inc_vbuxx inx - // [44] if((byte) init::i#1!=(byte) $40) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 + // [46] if((byte) init::i#1!=(byte) $40) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #$40 bne b3_from_b3 jmp breturn // init::@return breturn: - // [45] return + // [47] return rts - // init::@2 - b2: - // [46] *((byte*) init::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // [47] (byte*) init::sc#1 ← ++ (byte*) init::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - // [39] phi from init::@2 to init::@1 [phi:init::@2->init::@1] - b1_from_b2: - // [39] phi (byte*) init::sc#2 = (byte*) init::sc#1 [phi:init::@2->init::@1#0] -- register_copy - jmp b1 } // File Data @@ -1811,6 +1824,7 @@ Removing instruction jmp b4 Removing instruction jmp b3 Removing instruction jmp b1 Removing instruction jmp breturn +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp breturn @@ -1828,6 +1842,8 @@ Replacing label b1_from_b1 with b1 Replacing label b1_from_b2 with b1 Replacing label b1_from_anim with b1 Replacing label b4_from_b2 with b3 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Replacing label b3_from_b3 with b3 Removing instruction b1_from_bbegin: Removing instruction b1: @@ -1840,6 +1856,7 @@ Removing instruction b4_from_b2: Removing instruction b4: Removing instruction b3_from_b4: Removing instruction b1_from_anim: +Removing instruction b2_from_b1: Removing instruction b3_from_b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: @@ -1849,10 +1866,10 @@ Removing instruction b2: Removing instruction b3_from_b2: Removing instruction b1_from_b3: Removing instruction breturn: -Removing instruction b1_from_init: +Removing instruction b2_from_init: +Removing instruction b1: Removing instruction b3_from_b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main @@ -1860,6 +1877,7 @@ Succesful ASM optimization Pass5SkipBegin Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b1 +Removing instruction jmp b2 Removing instruction jmp b3 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: @@ -1919,8 +1937,8 @@ FINAL SYMBOL TABLE (byte) init::i#1 reg byte x 16.5 (byte) init::i#2 reg byte x 16.5 (byte*) init::sc -(byte*) init::sc#1 sc zp ZP_WORD:10 22.0 -(byte*) init::sc#2 sc zp ZP_WORD:10 14.666666666666666 +(byte*) init::sc#1 sc zp ZP_WORD:10 16.5 +(byte*) init::sc#4 sc zp ZP_WORD:10 16.5 (void()) main() (label) main::@1 (label) main::@2 @@ -1951,7 +1969,7 @@ zp ZP_WORD:2 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] zp ZP_WORD:4 [ yvel#9 yvel#12 yvel#10 yvel#21 ] zp ZP_WORD:6 [ xpos#9 xpos#12 xpos#10 ] zp ZP_WORD:8 [ ypos#10 ypos#13 ypos#11 ] -zp ZP_WORD:10 [ init::sc#2 init::sc#1 xvel#12 xvel#10 xvel#14 ] +zp ZP_WORD:10 [ init::sc#4 init::sc#1 xvel#12 xvel#10 xvel#14 ] reg byte x [ init::i#2 init::i#1 ] zp ZP_WORD:12 [ anim::$5 anim::sprite_x#0 ] zp ZP_WORD:14 [ anim::$7 anim::sprite_y#0 ] @@ -1961,7 +1979,7 @@ reg byte a [ anim::$11 ] FINAL ASSEMBLER -Score: 6373 +Score: 6343 // File Comments // Upstart @@ -2255,59 +2273,56 @@ init: { // [38] *((const byte*) SPRITES_PTR#0) ← (byte)(const byte*) SPRITE#0/(byte) $40 -- _deref_pbuc1=vbuc2 lda #SPRITE/$40 sta SPRITES_PTR - // [39] phi from init to init::@1 [phi:init->init::@1] - // [39] phi (byte*) init::sc#2 = (const byte*) SCREEN#0 [phi:init->init::@1#0] -- pbuz1=pbuc1 + // [39] phi from init to init::@2 [phi:init->init::@2] + // [39] phi (byte*) init::sc#4 = (const byte*) SCREEN#0 [phi:init->init::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta sc+1 - // init::@1 - b1: + // [39] phi from init::@1 to init::@2 [phi:init::@1->init::@2] + // [39] phi (byte*) init::sc#4 = (byte*) init::sc#1 [phi:init::@1->init::@2#0] -- register_copy + // init::@2 + b2: + // *sc = ' ' + // [40] *((byte*) init::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y // for(byte* sc=SCREEN; sc!=SCREEN+1000; sc++ ) - // [40] if((byte*) init::sc#2!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [41] (byte*) init::sc#1 ← ++ (byte*) init::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + // init::@1 + // [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word) $3e8) goto init::@2 -- pbuz1_neq_pbuc1_then_la1 lda sc+1 cmp #>SCREEN+$3e8 bne b2 lda sc cmp #init::@3] - // [41] phi (byte) init::i#2 = (byte) 0 [phi:init::@1->init::@3#0] -- vbuxx=vbuc1 + // [43] phi from init::@1 to init::@3 [phi:init::@1->init::@3] + // [43] phi (byte) init::i#2 = (byte) 0 [phi:init::@1->init::@3#0] -- vbuxx=vbuc1 ldx #0 - // [41] phi from init::@3 to init::@3 [phi:init::@3->init::@3] - // [41] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@3->init::@3#0] -- register_copy + // [43] phi from init::@3 to init::@3 [phi:init::@3->init::@3] + // [43] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@3->init::@3#0] -- register_copy // init::@3 b3: // SPRITE[i] = $ff - // [42] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff -- pbuc1_derefidx_vbuxx=vbuc2 + // [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff -- pbuc1_derefidx_vbuxx=vbuc2 lda #$ff sta SPRITE,x // for(byte i : 0..63) - // [43] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuxx=_inc_vbuxx + // [45] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuxx=_inc_vbuxx inx - // [44] if((byte) init::i#1!=(byte) $40) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 + // [46] if((byte) init::i#1!=(byte) $40) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #$40 bne b3 // init::@return // } - // [45] return + // [47] return rts - // init::@2 - b2: - // *sc = ' ' - // [46] *((byte*) init::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // for(byte* sc=SCREEN; sc!=SCREEN+1000; sc++ ) - // [47] (byte*) init::sc#1 ← ++ (byte*) init::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - // [39] phi from init::@2 to init::@1 [phi:init::@2->init::@1] - // [39] phi (byte*) init::sc#2 = (byte*) init::sc#1 [phi:init::@2->init::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/signed-words.sym b/src/test/ref/signed-words.sym index 108d50540..3813989f8 100644 --- a/src/test/ref/signed-words.sym +++ b/src/test/ref/signed-words.sym @@ -51,8 +51,8 @@ (byte) init::i#1 reg byte x 16.5 (byte) init::i#2 reg byte x 16.5 (byte*) init::sc -(byte*) init::sc#1 sc zp ZP_WORD:10 22.0 -(byte*) init::sc#2 sc zp ZP_WORD:10 14.666666666666666 +(byte*) init::sc#1 sc zp ZP_WORD:10 16.5 +(byte*) init::sc#4 sc zp ZP_WORD:10 16.5 (void()) main() (label) main::@1 (label) main::@2 @@ -83,7 +83,7 @@ zp ZP_WORD:2 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] zp ZP_WORD:4 [ yvel#9 yvel#12 yvel#10 yvel#21 ] zp ZP_WORD:6 [ xpos#9 xpos#12 xpos#10 ] zp ZP_WORD:8 [ ypos#10 ypos#13 ypos#11 ] -zp ZP_WORD:10 [ init::sc#2 init::sc#1 xvel#12 xvel#10 xvel#14 ] +zp ZP_WORD:10 [ init::sc#4 init::sc#1 xvel#12 xvel#10 xvel#14 ] reg byte x [ init::i#2 init::i#1 ] zp ZP_WORD:12 [ anim::$5 anim::sprite_x#0 ] zp ZP_WORD:14 [ anim::$7 anim::sprite_y#0 ] diff --git a/src/test/ref/simple-loop.asm b/src/test/ref/simple-loop.asm index 45806ffbe..34027785d 100644 --- a/src/test/ref/simple-loop.asm +++ b/src/test/ref/simple-loop.asm @@ -4,10 +4,6 @@ main: { .label SCREEN = $400 ldx #0 - b1: - cpx #$80 - bcc b2 - rts b2: lda #'a' sta SCREEN,x @@ -15,5 +11,7 @@ main: { sta $d020 inx inx - jmp b1 + cpx #$80 + bcc b2 + rts } diff --git a/src/test/ref/simple-loop.cfg b/src/test/ref/simple-loop.cfg index e7ad2b140..d405e9cf0 100644 --- a/src/test/ref/simple-loop.cfg +++ b/src/test/ref/simple-loop.cfg @@ -9,16 +9,16 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) 'a' + [7] *((byte*) 53280) ← (byte) 0 + [8] (byte) main::i#1 ← (byte) main::i#4 + (byte) 2 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $80) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((byte) main::i#1<(byte) $80) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) 'a' - [9] *((byte*) 53280) ← (byte) 0 - [10] (byte) main::i#1 ← (byte) main::i#2 + (byte) 2 - to:main::@1 diff --git a/src/test/ref/simple-loop.log b/src/test/ref/simple-loop.log index 8b116fce8..eb616d638 100644 --- a/src/test/ref/simple-loop.log +++ b/src/test/ref/simple-loop.log @@ -81,22 +81,33 @@ Constant (const byte*) main::SCREEN#0 = (byte*) 1024 Constant (const byte) main::i#0 = 0 Constant (const byte*) main::$1 = (byte*) 53280 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [10] if((const byte) main::i#0<(byte) $80) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::$1 = (byte*) 53280 Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 1 initial phi equivalence classes -Coalesced [12] main::i#4 ← main::i#1 +Coalesced [13] main::i#6 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -114,33 +125,33 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) + [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) 'a' + [7] *((byte*) 53280) ← (byte) 0 + [8] (byte) main::i#1 ← (byte) main::i#4 + (byte) 2 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $80) goto main::@2 +main::@1: scope:[main] from main::@2 + [9] if((byte) main::i#1<(byte) $80) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [7] return + [10] return to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) 'a' - [9] *((byte*) 53280) ← (byte) 0 - [10] (byte) main::i#1 ← (byte) main::i#2 + (byte) 2 - to:main::@1 VARIABLE REGISTER WEIGHTS (void()) main() (byte*) main::SCREEN (byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 11.0 +(byte) main::i#1 16.5 +(byte) main::i#4 11.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +[ main::i#4 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#4 main::i#1 ] INITIAL ASM Target platform is c64basic @@ -170,58 +181,59 @@ bend: main: { .label SCREEN = $400 .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $80) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #$80 - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 // main::@2 b2: - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) 'a' -- pbuc1_derefidx_vbuz1=vbuc2 + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) 'a' -- pbuc1_derefidx_vbuz1=vbuc2 lda #'a' ldy i sta SCREEN,y - // [9] *((byte*) 53280) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [7] *((byte*) 53280) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta $d020 - // [10] (byte) main::i#1 ← (byte) main::i#2 + (byte) 2 -- vbuz1=vbuz1_plus_2 + // [8] (byte) main::i#1 ← (byte) main::i#4 + (byte) 2 -- vbuz1=vbuz1_plus_2 lda i clc adc #2 sta i - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp b1 + // main::@1 + b1: + // [9] if((byte) main::i#1<(byte) $80) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #$80 + bcc b2_from_b1 + jmp breturn + // main::@return + breturn: + // [10] return + rts } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) 'a' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Statement [9] *((byte*) 53280) ← (byte) 0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Statement [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) 'a' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Statement [9] *((byte*) 53280) ← (byte) 0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Statement [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) 'a' [ main::i#4 ] ( main:2 [ main::i#4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#4 main::i#1 ] +Statement [7] *((byte*) 53280) ← (byte) 0 [ main::i#4 ] ( main:2 [ main::i#4 ] ) always clobbers reg byte a +Statement [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) 'a' [ main::i#4 ] ( main:2 [ main::i#4 ] ) always clobbers reg byte a +Statement [7] *((byte*) 53280) ← (byte) 0 [ main::i#4 ] ( main:2 [ main::i#4 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 27.5: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] Uplift Scope [] -Uplifting [main] best 343 combination reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 343 combination +Uplifting [main] best 373 combination reg byte x [ main::i#4 main::i#1 ] +Uplifting [] best 373 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -249,58 +261,64 @@ bend: // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) 'a' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'a' + sta SCREEN,x + // [7] *((byte*) 53280) ← (byte) 0 -- _deref_pbuc1=vbuc2 + lda #0 + sta $d020 + // [8] (byte) main::i#1 ← (byte) main::i#4 + (byte) 2 -- vbuxx=vbuxx_plus_2 + inx + inx jmp b1 // main::@1 b1: - // [6] if((byte) main::i#2<(byte) $80) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [9] if((byte) main::i#1<(byte) $80) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$80 - bcc b2 + bcc b2_from_b1 jmp breturn // main::@return breturn: - // [7] return + // [10] return rts - // main::@2 - b2: - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) 'a' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #'a' - sta SCREEN,x - // [9] *((byte*) 53280) ← (byte) 0 -- _deref_pbuc1=vbuc2 - lda #0 - sta $d020 - // [10] (byte) main::i#1 ← (byte) main::i#2 + (byte) 2 -- vbuxx=vbuxx_plus_2 - inx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -315,14 +333,14 @@ FINAL SYMBOL TABLE (byte*) main::SCREEN (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 11.0 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 11.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] FINAL ASSEMBLER -Score: 271 +Score: 241 // File Comments // Upstart @@ -340,36 +358,34 @@ Score: 271 // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::i#4 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // SCREEN[i] = 'a' + // [6] *((const byte*) main::SCREEN#0 + (byte) main::i#4) ← (byte) 'a' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'a' + sta SCREEN,x + // (*(unsigned char*)0xD020)=0 + // [7] *((byte*) 53280) ← (byte) 0 -- _deref_pbuc1=vbuc2 + lda #0 + sta $d020 + // i+=2 + // [8] (byte) main::i#1 ← (byte) main::i#4 + (byte) 2 -- vbuxx=vbuxx_plus_2 + inx + inx // main::@1 - b1: // for( unsigned char i = 0; i<128; i+=2) - // [6] if((byte) main::i#2<(byte) $80) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [9] if((byte) main::i#1<(byte) $80) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$80 bcc b2 // main::@return // } - // [7] return + // [10] return rts - // main::@2 - b2: - // SCREEN[i] = 'a' - // [8] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte) 'a' -- pbuc1_derefidx_vbuxx=vbuc2 - lda #'a' - sta SCREEN,x - // (*(unsigned char*)0xD020)=0 - // [9] *((byte*) 53280) ← (byte) 0 -- _deref_pbuc1=vbuc2 - lda #0 - sta $d020 - // i+=2 - // [10] (byte) main::i#1 ← (byte) main::i#2 + (byte) 2 -- vbuxx=vbuxx_plus_2 - inx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // File Data diff --git a/src/test/ref/simple-loop.sym b/src/test/ref/simple-loop.sym index 9b4cf2e6b..82db4c63c 100644 --- a/src/test/ref/simple-loop.sym +++ b/src/test/ref/simple-loop.sym @@ -8,7 +8,7 @@ (byte*) main::SCREEN (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 11.0 +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#4 reg byte x 11.0 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::i#4 main::i#1 ] diff --git a/src/test/ref/sinusgen16.asm b/src/test/ref/sinusgen16.asm index ac79a5790..8618f2814 100644 --- a/src/test/ref/sinusgen16.asm +++ b/src/test/ref/sinusgen16.asm @@ -171,14 +171,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #main.wavelength - bcc b2 - bne !+ - lda i - cmp #main.wavelength + bcc b2 + bne !+ + lda i + cmp # (const dword) div32u16u::dividend#0 Constant right-side identified [22] (word) divr16u::dividend#2 ← < (const dword) div32u16u::dividend#0 -Constant right-side identified [148] (word~) main::$9 ← (const word) main::wavelength#0 * (const byte) SIZEOF_SIGNED_WORD +Constant right-side identified [151] (word~) main::$9 ← (const word) main::wavelength#0 * (const byte) SIZEOF_SIGNED_WORD Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = sin16s::@13 ) during phi lifting. Added new block during phi lifting sin16s::@14(between sin16s::@1 and sin16s::@2) Added new block during phi lifting sin16s::@15(between sin16s::@12 and sin16s::@3) +Added new block during phi lifting memset::@10(between memset::@4 and memset::@5) Added new block during phi lifting main::@14(between main::@2 and main::@4) Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 @@ -1950,8 +1973,10 @@ Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@4_1 Adding NOP phi() at start of memset::@1 Adding NOP phi() at start of sin16s_gen +Adding NOP phi() at start of sin16s_gen::@1_1 Adding NOP phi() at start of mul16u::@3 Adding NOP phi() at start of div32u16u CALL GRAPH @@ -1961,10 +1986,10 @@ Calls in [print_sword] to print_char:44 print_word:48 print_char:52 Calls in [print_word] to print_byte:61 print_byte:64 Calls in [print_byte] to print_char:72 print_char:77 Calls in [print_cls] to memset:81 -Calls in [sin16s_gen] to div32u16u:94 sin16s:101 -Calls in [sin16s] to mulu16_sel:125 mulu16_sel:132 mulu16_sel:137 mulu16_sel:145 mulu16_sel:152 -Calls in [mulu16_sel] to mul16u:168 -Calls in [div32u16u] to divr16u:192 divr16u:197 +Calls in [sin16s_gen] to div32u16u:95 sin16s:101 +Calls in [sin16s] to mulu16_sel:127 mulu16_sel:134 mulu16_sel:139 mulu16_sel:147 mulu16_sel:154 +Calls in [mulu16_sel] to mul16u:170 +Calls in [div32u16u] to divr16u:194 divr16u:199 Created 35 initial phi equivalence classes Coalesced [19] print_char_cursor#61 ← print_char_cursor#21 @@ -1987,44 +2012,44 @@ Coalesced [70] print_char::ch#5 ← print_char::ch#2 Coalesced (already) [71] print_char_cursor#64 ← print_char_cursor#13 Coalesced [75] print_char::ch#6 ← print_char::ch#3 Coalesced (already) [76] print_char_cursor#65 ← print_char_cursor#13 -Coalesced [92] memset::dst#4 ← memset::dst#1 -Coalesced [108] sin16s_gen::i#5 ← sin16s_gen::i#1 -Coalesced [109] sin16s_gen::x#5 ← sin16s_gen::x#1 -Coalesced [110] sin16s_gen::sintab#7 ← sin16s_gen::sintab#0 -Coalesced [113] sin16s::x#9 ← sin16s::x#1 -Coalesced [117] sin16s::x#11 ← sin16s::x#2 -Coalesced [123] mulu16_sel::v1#8 ← mulu16_sel::v1#0 -Coalesced [124] mulu16_sel::v2#8 ← mulu16_sel::v2#0 -Coalesced [130] mulu16_sel::v1#9 ← mulu16_sel::v1#1 -Coalesced [131] mulu16_sel::v2#9 ← mulu16_sel::v2#1 -Coalesced [136] mulu16_sel::v1#10 ← mulu16_sel::v1#2 -Coalesced [143] mulu16_sel::v1#6 ← mulu16_sel::v1#3 -Coalesced [144] mulu16_sel::v2#6 ← mulu16_sel::v2#3 -Coalesced [150] mulu16_sel::v1#7 ← mulu16_sel::v1#4 -Coalesced [151] mulu16_sel::v2#7 ← mulu16_sel::v2#4 -Coalesced [159] sin16s::return#6 ← sin16s::sinx#1 -Coalesced [163] sin16s::x#10 ← sin16s::x#4 -Coalesced [164] sin16s::x#8 ← sin16s::x#0 -Coalesced [174] mul16u::a#7 ← mul16u::a#1 -Coalesced [175] mul16u::mb#6 ← mul16u::b#0 -Coalesced [183] mul16u::res#9 ← mul16u::res#1 -Coalesced [187] mul16u::a#8 ← mul16u::a#0 -Coalesced [188] mul16u::res#7 ← mul16u::res#6 -Coalesced [189] mul16u::mb#7 ← mul16u::mb#1 -Coalesced (already) [190] mul16u::res#8 ← mul16u::res#2 -Coalesced [196] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [203] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [204] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [211] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [218] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [219] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [225] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [226] divr16u::dividend#10 ← divr16u::dividend#0 -Coalesced [227] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [228] divr16u::i#7 ← divr16u::i#1 -Coalesced [229] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [230] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [231] divr16u::rem#15 ← divr16u::rem#0 +Coalesced [93] memset::dst#6 ← memset::dst#1 +Coalesced [110] sin16s_gen::i#8 ← sin16s_gen::i#1 +Coalesced [111] sin16s_gen::x#8 ← sin16s_gen::x#1 +Coalesced [112] sin16s_gen::sintab#10 ← sin16s_gen::sintab#0 +Coalesced [115] sin16s::x#9 ← sin16s::x#1 +Coalesced [119] sin16s::x#11 ← sin16s::x#2 +Coalesced [125] mulu16_sel::v1#8 ← mulu16_sel::v1#0 +Coalesced [126] mulu16_sel::v2#8 ← mulu16_sel::v2#0 +Coalesced [132] mulu16_sel::v1#9 ← mulu16_sel::v1#1 +Coalesced [133] mulu16_sel::v2#9 ← mulu16_sel::v2#1 +Coalesced [138] mulu16_sel::v1#10 ← mulu16_sel::v1#2 +Coalesced [145] mulu16_sel::v1#6 ← mulu16_sel::v1#3 +Coalesced [146] mulu16_sel::v2#6 ← mulu16_sel::v2#3 +Coalesced [152] mulu16_sel::v1#7 ← mulu16_sel::v1#4 +Coalesced [153] mulu16_sel::v2#7 ← mulu16_sel::v2#4 +Coalesced [161] sin16s::return#6 ← sin16s::sinx#1 +Coalesced [165] sin16s::x#10 ← sin16s::x#4 +Coalesced [166] sin16s::x#8 ← sin16s::x#0 +Coalesced [176] mul16u::a#7 ← mul16u::a#1 +Coalesced [177] mul16u::mb#6 ← mul16u::b#0 +Coalesced [185] mul16u::res#9 ← mul16u::res#1 +Coalesced [189] mul16u::a#8 ← mul16u::a#0 +Coalesced [190] mul16u::res#7 ← mul16u::res#6 +Coalesced [191] mul16u::mb#7 ← mul16u::mb#1 +Coalesced (already) [192] mul16u::res#8 ← mul16u::res#2 +Coalesced [198] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [205] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [206] divr16u::dividend#9 ← divr16u::dividend#5 +Coalesced [213] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [220] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [221] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [227] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [228] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [229] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [230] divr16u::i#7 ← divr16u::i#1 +Coalesced [231] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [232] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [233] divr16u::rem#15 ← divr16u::rem#0 Coalesced down to 23 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) @13 @@ -2040,7 +2065,11 @@ Culled Empty Block (label) print_word::@2 Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) print_cls::@1 Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@4_1 Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@10 +Culled Empty Block (label) sin16s_gen::@1_1 +Culled Empty Block (label) sin16s_gen::@9 Culled Empty Block (label) sin16s::@14 Culled Empty Block (label) sin16s::@13 Culled Empty Block (label) mul16u::@3 @@ -2213,18 +2242,18 @@ print_cls::@return: scope:[print_cls] from print_cls to:@return memset: scope:[memset] from print_cls [58] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [59] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [60] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [61] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [59] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [60] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [62] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [61] return + [63] return to:@return -memset::@2: scope:[memset] from memset::@1 - [62] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [63] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 sin16s_gen: scope:[sin16s_gen] from main [64] phi() [65] call div32u16u @@ -2232,28 +2261,28 @@ sin16s_gen: scope:[sin16s_gen] from main to:sin16s_gen::@3 sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen [67] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 - to:sin16s_gen::@1 -sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@3 sin16s_gen::@4 - [68] (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@3/(const signed word[$78]) main::sintab1#0 sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 ) - [68] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) - [68] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) - [69] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 - to:sin16s_gen::@return -sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 - [70] return - to:@return -sin16s_gen::@2: scope:[sin16s_gen] from sin16s_gen::@1 - [71] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 - [72] call sin16s - [73] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + to:sin16s_gen::@2 +sin16s_gen::@2: scope:[sin16s_gen] from sin16s_gen::@1 sin16s_gen::@3 + [68] (signed word*) sin16s_gen::sintab#7 ← phi( sin16s_gen::@1/(signed word*) sin16s_gen::sintab#0 sin16s_gen::@3/(const signed word[$78]) main::sintab1#0 ) + [68] (dword) sin16s_gen::x#5 ← phi( sin16s_gen::@1/(dword) sin16s_gen::x#1 sin16s_gen::@3/(byte) 0 ) + [68] (word) sin16s_gen::i#5 ← phi( sin16s_gen::@1/(word) sin16s_gen::i#1 sin16s_gen::@3/(byte) 0 ) + [69] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 + [70] call sin16s + [71] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen::@4 sin16s_gen::@4: scope:[sin16s_gen] from sin16s_gen::@2 - [74] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 - [75] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 - [76] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [77] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 - [78] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 + [72] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 + [73] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 + [74] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD + [75] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 + [76] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#5 to:sin16s_gen::@1 +sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@4 + [77] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 + to:sin16s_gen::@return +sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 + [78] return + to:@return sin16s: scope:[sin16s] from sin16s_gen::@2 [79] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 to:sin16s::@4 @@ -2477,8 +2506,8 @@ VARIABLE REGISTER WEIGHTS (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst -(byte*) memset::dst#1 22.0 -(byte*) memset::dst#2 14.666666666666666 +(byte*) memset::dst#1 16.5 +(byte*) memset::dst#4 16.5 (byte*) memset::end (word) memset::num (void*) memset::return @@ -2600,17 +2629,17 @@ VARIABLE REGISTER WEIGHTS (void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength) (signed word~) sin16s_gen::$2 22.0 (word) sin16s_gen::i -(word) sin16s_gen::i#1 22.0 -(word) sin16s_gen::i#2 3.666666666666667 +(word) sin16s_gen::i#1 16.5 +(word) sin16s_gen::i#5 2.75 (signed word*) sin16s_gen::sintab -(signed word*) sin16s_gen::sintab#0 7.333333333333333 -(signed word*) sin16s_gen::sintab#2 4.714285714285714 +(signed word*) sin16s_gen::sintab#0 5.5 +(signed word*) sin16s_gen::sintab#7 5.5 (dword) sin16s_gen::step (dword) sin16s_gen::step#0 1.1818181818181819 (word) sin16s_gen::wavelength (dword) sin16s_gen::x -(dword) sin16s_gen::x#1 11.0 -(dword) sin16s_gen::x#2 4.125 +(dword) sin16s_gen::x#1 7.333333333333333 +(dword) sin16s_gen::x#5 4.714285714285714 Not consolidating phi with different size mul16u::mb#2 mul16u::b#0 Initial phi equivalence classes @@ -2620,10 +2649,10 @@ Initial phi equivalence classes [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -[ memset::dst#2 memset::dst#1 ] -[ sin16s_gen::i#2 sin16s_gen::i#1 ] -[ sin16s_gen::x#2 sin16s_gen::x#1 ] -[ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] +[ memset::dst#4 memset::dst#1 ] +[ sin16s_gen::i#5 sin16s_gen::i#1 ] +[ sin16s_gen::x#5 sin16s_gen::x#1 ] +[ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] [ sin16s::isUpper#2 ] [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -2681,10 +2710,10 @@ Complete equivalence classes [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -[ memset::dst#2 memset::dst#1 ] -[ sin16s_gen::i#2 sin16s_gen::i#1 ] -[ sin16s_gen::x#2 sin16s_gen::x#1 ] -[ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] +[ memset::dst#4 memset::dst#1 ] +[ sin16s_gen::i#5 sin16s_gen::i#1 ] +[ sin16s_gen::x#5 sin16s_gen::x#1 ] +[ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] [ sin16s::isUpper#2 ] [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -2741,10 +2770,10 @@ Allocated zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] Allocated zp ZP_BYTE:8 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Allocated zp ZP_WORD:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] Allocated zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Allocated zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 ] -Allocated zp ZP_WORD:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] -Allocated zp ZP_DWORD:16 [ sin16s_gen::x#2 sin16s_gen::x#1 ] -Allocated zp ZP_WORD:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] +Allocated zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 ] +Allocated zp ZP_WORD:14 [ sin16s_gen::i#5 sin16s_gen::i#1 ] +Allocated zp ZP_DWORD:16 [ sin16s_gen::x#5 sin16s_gen::x#1 ] +Allocated zp ZP_WORD:20 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] Allocated zp ZP_BYTE:22 [ sin16s::isUpper#2 ] Allocated zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] Allocated zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -3180,43 +3209,44 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = $c - // [59] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [59] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [59] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [59] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [60] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [59] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [62] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [60] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [63] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [61] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [59] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [59] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [62] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #sin16s_gen::@1] - b1_from_b3: - // [68] phi (signed word*) sin16s_gen::sintab#2 = (const signed word[$78]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- pwsz1=pwsc1 + // [68] phi from sin16s_gen::@3 to sin16s_gen::@2 [phi:sin16s_gen::@3->sin16s_gen::@2] + b2_from_b3: + // [68] phi (signed word*) sin16s_gen::sintab#7 = (const signed word[$78]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@2#0] -- pwsz1=pwsc1 lda #main.sintab1 sta sintab+1 - // [68] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 + // [68] phi (dword) sin16s_gen::x#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [68] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [68] phi (word) sin16s_gen::i#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen::@1 - b1: - // [69] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen::@2] + b2_from_b1: + // [68] phi (signed word*) sin16s_gen::sintab#7 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@1->sin16s_gen::@2#0] -- register_copy + // [68] phi (dword) sin16s_gen::x#5 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@1->sin16s_gen::@2#1] -- register_copy + // [68] phi (word) sin16s_gen::i#5 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@1->sin16s_gen::@2#2] -- register_copy + jmp b2 // sin16s_gen::@2 b2: - // [71] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2 + // [69] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -3302,9 +3321,9 @@ sin16s_gen: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [72] call sin16s + // [70] call sin16s jsr sin16s - // [73] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 + // [71] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 lda sin16s.return_1 sta sin16s.return lda sin16s.return_1+1 @@ -3312,19 +3331,19 @@ sin16s_gen: { jmp b4 // sin16s_gen::@4 b4: - // [74] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 + // [72] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 lda sin16s.return sta _2 lda sin16s.return+1 sta _2+1 - // [75] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 + // [73] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 ldy #0 lda _2 sta (sintab),y iny lda _2+1 sta (sintab),y - // [76] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [74] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -3332,7 +3351,7 @@ sin16s_gen: { bcc !+ inc sintab+1 !: - // [77] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 + // [75] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -3346,17 +3365,29 @@ sin16s_gen: { lda x+3 adc step+3 sta x+3 - // [78] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 -- vwuz1=_inc_vwuz1 + // [76] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#5 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [68] phi from sin16s_gen::@4 to sin16s_gen::@1 [phi:sin16s_gen::@4->sin16s_gen::@1] - b1_from_b4: - // [68] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy - // [68] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy - // [68] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen::@1 + b1: + // [77] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #> (byte) 4 [ print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ( main:2::print_sword:17::print_word:33::print_byte:43 [ main::st1#2 print_word::w#0 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] main:2::print_sword:17::print_word:33::print_byte:45 [ main::st1#2 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Statement [51] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#13 print_byte::$2 ] ( main:2::print_sword:17::print_word:33::print_byte:43 [ main::st1#2 print_word::w#0 print_char_cursor#13 print_byte::$2 ] main:2::print_sword:17::print_word:33::print_byte:45 [ main::st1#2 print_char_cursor#13 print_byte::$2 ] ) always clobbers reg byte a -Statement [60] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:7::memset:56 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [62] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:7::memset:56 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [60] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:7::memset:56 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [62] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:7::memset:56 [ memset::dst#1 ] ) always clobbers reg byte a Statement [66] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:2::sin16s_gen:5 [ div32u16u::return#2 ] ) always clobbers reg byte a Statement [67] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen::step#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 ] ) always clobbers reg byte a -Statement [69] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ) always clobbers reg byte a -Statement [71] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [73] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [74] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ) always clobbers reg byte a -Statement [75] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [76] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [77] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [79] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [80] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [82] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [69] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ) always clobbers reg byte a +Statement [71] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#0 ] ) always clobbers reg byte a +Statement [72] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s_gen::$2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s_gen::$2 ] ) always clobbers reg byte a +Statement [73] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 ] ) always clobbers reg byte a reg byte y +Statement [74] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [75] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [77] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#1 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#1 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [79] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ) always clobbers reg byte a +Statement [80] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#1 ] ) always clobbers reg byte a +Statement [82] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ sin16s::isUpper#2 ] -Statement [83] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [83] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:22 [ sin16s::isUpper#2 ] -Statement [86] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [87] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [88] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [90] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [91] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [92] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [93] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [95] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [96] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [97] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [99] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [100] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [101] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [102] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [103] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [105] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [106] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [107] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [108] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [110] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [111] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [112] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [113] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [115] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [118] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [120] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 [ mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ) always clobbers reg byte a +Statement [86] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [87] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [88] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [90] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [91] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [92] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [93] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [95] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [96] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [97] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [99] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [100] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [101] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [102] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [103] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [105] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [106] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [107] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [108] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [110] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [111] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [112] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [113] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [115] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [118] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#5 ] ) always clobbers reg byte a +Statement [120] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 [ mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ mulu16_sel::select#5 ] -Statement [121] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 [ mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a -Statement [123] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#2 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] ) always clobbers reg byte a -Statement [124] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [125] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [126] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a -Statement [130] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [132] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [121] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 [ mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [123] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#2 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] ) always clobbers reg byte a +Statement [124] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [125] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [126] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [130] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [132] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a Statement [140] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:65 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [141] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:65 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [142] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_gen:5::div32u16u:65 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a @@ -4192,56 +4223,56 @@ Statement [42] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_char_ Statement [44] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#13 print_byte::b#1 ] ( main:2::print_sword:17::print_word:33 [ main::st1#2 print_char_cursor#13 print_byte::b#1 ] ) always clobbers reg byte a Statement [48] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ( main:2::print_sword:17::print_word:33::print_byte:43 [ main::st1#2 print_word::w#0 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] main:2::print_sword:17::print_word:33::print_byte:45 [ main::st1#2 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Statement [51] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#13 print_byte::$2 ] ( main:2::print_sword:17::print_word:33::print_byte:43 [ main::st1#2 print_word::w#0 print_char_cursor#13 print_byte::$2 ] main:2::print_sword:17::print_word:33::print_byte:45 [ main::st1#2 print_char_cursor#13 print_byte::$2 ] ) always clobbers reg byte a -Statement [60] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:7::memset:56 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [62] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:7::memset:56 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [60] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:7::memset:56 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [62] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:7::memset:56 [ memset::dst#1 ] ) always clobbers reg byte a Statement [66] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:2::sin16s_gen:5 [ div32u16u::return#2 ] ) always clobbers reg byte a Statement [67] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen::step#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 ] ) always clobbers reg byte a -Statement [69] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ) always clobbers reg byte a -Statement [71] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [73] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [74] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ) always clobbers reg byte a -Statement [75] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [76] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [77] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [79] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [80] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [82] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [83] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y -Statement [86] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [87] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [88] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [90] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [91] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [92] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [93] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [95] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [96] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [97] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [99] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [100] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [101] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [102] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [103] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [105] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [106] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [107] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [108] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [110] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [111] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [112] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [113] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [115] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [118] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [120] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 [ mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ) always clobbers reg byte a -Statement [121] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 [ mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a -Statement [123] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#2 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] ) always clobbers reg byte a -Statement [124] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [125] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [126] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a -Statement [130] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [132] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [69] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ) always clobbers reg byte a +Statement [71] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#0 ] ) always clobbers reg byte a +Statement [72] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s_gen::$2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s_gen::$2 ] ) always clobbers reg byte a +Statement [73] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 ] ) always clobbers reg byte a reg byte y +Statement [74] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [75] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [77] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#1 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#1 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [79] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ) always clobbers reg byte a +Statement [80] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#1 ] ) always clobbers reg byte a +Statement [82] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [83] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [86] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [87] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [88] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [90] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [91] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [92] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [93] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [95] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [96] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [97] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [99] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [100] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [101] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [102] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [103] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [105] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [106] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [107] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [108] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [110] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [111] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [112] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [113] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [115] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [118] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#5 ] ) always clobbers reg byte a +Statement [120] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 [ mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ) always clobbers reg byte a +Statement [121] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 [ mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [123] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#2 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] ) always clobbers reg byte a +Statement [124] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [125] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [126] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [130] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [132] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:5::sin16s:70::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:70::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a Statement [140] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:65 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [141] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:65 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [142] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_gen:5::div32u16u:65 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a @@ -4259,10 +4290,10 @@ Potential registers zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword Potential registers zp ZP_BYTE:8 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] : zp ZP_WORD:9 , Potential registers zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:11 , reg byte x , -Potential registers zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:12 , -Potential registers zp ZP_WORD:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] : zp ZP_WORD:14 , -Potential registers zp ZP_DWORD:16 [ sin16s_gen::x#2 sin16s_gen::x#1 ] : zp ZP_DWORD:16 , -Potential registers zp ZP_WORD:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] : zp ZP_WORD:20 , +Potential registers zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:12 , +Potential registers zp ZP_WORD:14 [ sin16s_gen::i#5 sin16s_gen::i#1 ] : zp ZP_WORD:14 , +Potential registers zp ZP_DWORD:16 [ sin16s_gen::x#5 sin16s_gen::x#1 ] : zp ZP_DWORD:16 , +Potential registers zp ZP_WORD:20 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] : zp ZP_WORD:20 , Potential registers zp ZP_BYTE:22 [ sin16s::isUpper#2 ] : zp ZP_BYTE:22 , reg byte x , Potential registers zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp ZP_DWORD:23 , Potential registers zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp ZP_WORD:27 , @@ -4320,9 +4351,9 @@ Uplift Scope [print_str] 305.5: zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 Uplift Scope [divr16u] 106.92: zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp ZP_WORD:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:130 [ divr16u::$1 ] 22: zp ZP_BYTE:131 [ divr16u::$2 ] 18.19: zp ZP_BYTE:52 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp ZP_WORD:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp ZP_WORD:118 [ divr16u::return#2 ] 4: zp ZP_WORD:122 [ divr16u::return#3 ] Uplift Scope [] 190.22: zp ZP_WORD:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] 0.8: zp ZP_WORD:132 [ rem16u#1 ] Uplift Scope [sin16s] 27.5: zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp ZP_WORD:67 [ sin16s::return#0 ] 13: zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp ZP_DWORD:71 [ sin16s::$4 ] 4: zp ZP_WORD:79 [ sin16s::x2#0 ] 4: zp ZP_WORD:87 [ sin16s::x3_6#0 ] 4: zp ZP_WORD:93 [ sin16s::x4#0 ] 4: zp ZP_WORD:97 [ sin16s::x5#0 ] 4: zp ZP_WORD:99 [ sin16s::x5_128#0 ] 1: zp ZP_WORD:83 [ sin16s::x3#0 ] 1: zp ZP_WORD:101 [ sin16s::usinx#1 ] 0.64: zp ZP_WORD:75 [ sin16s::x1#0 ] 0.33: zp ZP_WORD:89 [ sin16s::usinx#0 ] 0.06: zp ZP_BYTE:22 [ sin16s::isUpper#2 ] -Uplift Scope [sin16s_gen] 25.67: zp ZP_WORD:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] 22: zp ZP_WORD:69 [ sin16s_gen::$2 ] 15.12: zp ZP_DWORD:16 [ sin16s_gen::x#2 sin16s_gen::x#1 ] 12.05: zp ZP_WORD:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] 1.18: zp ZP_DWORD:63 [ sin16s_gen::step#0 ] Uplift Scope [mulu16_sel] 24: zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp ZP_WORD:77 [ mulu16_sel::return#0 ] 4: zp ZP_WORD:81 [ mulu16_sel::return#1 ] 4: zp ZP_WORD:85 [ mulu16_sel::return#2 ] 4: zp ZP_WORD:91 [ mulu16_sel::return#10 ] 4: zp ZP_WORD:95 [ mulu16_sel::return#11 ] 4: zp ZP_DWORD:107 [ mulu16_sel::$0 ] 4: zp ZP_DWORD:111 [ mulu16_sel::$1 ] 1.71: zp ZP_WORD:115 [ mulu16_sel::return#12 ] 0.33: zp ZP_BYTE:33 [ mulu16_sel::select#5 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [sin16s_gen] 22: zp ZP_WORD:69 [ sin16s_gen::$2 ] 19.25: zp ZP_WORD:14 [ sin16s_gen::i#5 sin16s_gen::i#1 ] 12.05: zp ZP_DWORD:16 [ sin16s_gen::x#5 sin16s_gen::x#1 ] 11: zp ZP_WORD:20 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] 1.18: zp ZP_DWORD:63 [ sin16s_gen::step#0 ] +Uplift Scope [memset] 33: zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 ] Uplift Scope [main] 26: zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] 6.6: zp ZP_WORD:53 [ main::sw#0 ] Uplift Scope [print_byte] 10: zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:57 [ print_byte::$0 ] 4: zp ZP_BYTE:58 [ print_byte::$2 ] Uplift Scope [print_char] 14: zp ZP_BYTE:8 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] @@ -4332,24 +4363,24 @@ Uplift Scope [print_word] 2: zp ZP_WORD:55 [ print_word::w#0 ] Uplift Scope [RADIX] Uplift Scope [print_cls] -Uplifting [mul16u] best 26903 combination zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:40 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:103 [ mul16u::return#2 ] zp ZP_WORD:44 [ mul16u::b#0 ] -Uplifting [print_str] best 26903 combination zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] -Uplifting [divr16u] best 26693 combination zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:118 [ divr16u::return#2 ] zp ZP_WORD:122 [ divr16u::return#3 ] -Uplifting [] best 26693 combination zp ZP_WORD:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] zp ZP_WORD:132 [ rem16u#1 ] -Uplifting [sin16s] best 26693 combination zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:67 [ sin16s::return#0 ] zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:71 [ sin16s::$4 ] zp ZP_WORD:79 [ sin16s::x2#0 ] zp ZP_WORD:87 [ sin16s::x3_6#0 ] zp ZP_WORD:93 [ sin16s::x4#0 ] zp ZP_WORD:97 [ sin16s::x5#0 ] zp ZP_WORD:99 [ sin16s::x5_128#0 ] zp ZP_WORD:83 [ sin16s::x3#0 ] zp ZP_WORD:101 [ sin16s::usinx#1 ] zp ZP_WORD:75 [ sin16s::x1#0 ] zp ZP_WORD:89 [ sin16s::usinx#0 ] zp ZP_BYTE:22 [ sin16s::isUpper#2 ] -Uplifting [sin16s_gen] best 26693 combination zp ZP_WORD:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_WORD:69 [ sin16s_gen::$2 ] zp ZP_DWORD:16 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:63 [ sin16s_gen::step#0 ] -Uplifting [mulu16_sel] best 26677 combination zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:77 [ mulu16_sel::return#0 ] zp ZP_WORD:81 [ mulu16_sel::return#1 ] zp ZP_WORD:85 [ mulu16_sel::return#2 ] zp ZP_WORD:91 [ mulu16_sel::return#10 ] zp ZP_WORD:95 [ mulu16_sel::return#11 ] zp ZP_DWORD:107 [ mulu16_sel::$0 ] zp ZP_DWORD:111 [ mulu16_sel::$1 ] zp ZP_WORD:115 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [memset] best 26677 combination zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 ] -Uplifting [main] best 26677 combination zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:53 [ main::sw#0 ] -Uplifting [print_byte] best 26663 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -Uplifting [print_char] best 26648 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] -Uplifting [print_sword] best 26648 combination zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] -Uplifting [div32u16u] best 26648 combination zp ZP_DWORD:59 [ div32u16u::return#2 ] zp ZP_WORD:124 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:126 [ div32u16u::return#0 ] zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ] -Uplifting [print_word] best 26648 combination zp ZP_WORD:55 [ print_word::w#0 ] -Uplifting [RADIX] best 26648 combination -Uplifting [print_cls] best 26648 combination +Uplifting [mul16u] best 26963 combination zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:40 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:103 [ mul16u::return#2 ] zp ZP_WORD:44 [ mul16u::b#0 ] +Uplifting [print_str] best 26963 combination zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] +Uplifting [divr16u] best 26753 combination zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:118 [ divr16u::return#2 ] zp ZP_WORD:122 [ divr16u::return#3 ] +Uplifting [] best 26753 combination zp ZP_WORD:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] zp ZP_WORD:132 [ rem16u#1 ] +Uplifting [sin16s] best 26753 combination zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:67 [ sin16s::return#0 ] zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:71 [ sin16s::$4 ] zp ZP_WORD:79 [ sin16s::x2#0 ] zp ZP_WORD:87 [ sin16s::x3_6#0 ] zp ZP_WORD:93 [ sin16s::x4#0 ] zp ZP_WORD:97 [ sin16s::x5#0 ] zp ZP_WORD:99 [ sin16s::x5_128#0 ] zp ZP_WORD:83 [ sin16s::x3#0 ] zp ZP_WORD:101 [ sin16s::usinx#1 ] zp ZP_WORD:75 [ sin16s::x1#0 ] zp ZP_WORD:89 [ sin16s::usinx#0 ] zp ZP_BYTE:22 [ sin16s::isUpper#2 ] +Uplifting [mulu16_sel] best 26737 combination zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:77 [ mulu16_sel::return#0 ] zp ZP_WORD:81 [ mulu16_sel::return#1 ] zp ZP_WORD:85 [ mulu16_sel::return#2 ] zp ZP_WORD:91 [ mulu16_sel::return#10 ] zp ZP_WORD:95 [ mulu16_sel::return#11 ] zp ZP_DWORD:107 [ mulu16_sel::$0 ] zp ZP_DWORD:111 [ mulu16_sel::$1 ] zp ZP_WORD:115 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [sin16s_gen] best 26737 combination zp ZP_WORD:69 [ sin16s_gen::$2 ] zp ZP_WORD:14 [ sin16s_gen::i#5 sin16s_gen::i#1 ] zp ZP_DWORD:16 [ sin16s_gen::x#5 sin16s_gen::x#1 ] zp ZP_WORD:20 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] zp ZP_DWORD:63 [ sin16s_gen::step#0 ] +Uplifting [memset] best 26737 combination zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 ] +Uplifting [main] best 26737 combination zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:53 [ main::sw#0 ] +Uplifting [print_byte] best 26723 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [print_char] best 26708 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] +Uplifting [print_sword] best 26708 combination zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] +Uplifting [div32u16u] best 26708 combination zp ZP_DWORD:59 [ div32u16u::return#2 ] zp ZP_WORD:124 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:126 [ div32u16u::return#0 ] zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ] +Uplifting [print_word] best 26708 combination zp ZP_WORD:55 [ print_word::w#0 ] +Uplifting [RADIX] best 26708 combination +Uplifting [print_cls] best 26708 combination Attempting to uplift remaining variables inzp ZP_BYTE:22 [ sin16s::isUpper#2 ] -Uplifting [sin16s] best 26648 combination zp ZP_BYTE:22 [ sin16s::isUpper#2 ] +Uplifting [sin16s] best 26708 combination zp ZP_BYTE:22 [ sin16s::isUpper#2 ] Coalescing zero page register [ zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:101 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:83 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:132 [ rem16u#1 ] ] - score: 2 @@ -4378,25 +4409,25 @@ Coalescing zero page register [ zp ZP_WORD:50 [ divr16u::quotient#3 divr16u::ret Coalescing zero page register [ zp ZP_WORD:77 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp ZP_WORD:85 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:77 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp ZP_WORD:95 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:77 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp ZP_WORD:99 [ sin16s::x5_128#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] ] -Coalescing zero page register [ zp ZP_WORD:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] ] with [ zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] ] -Coalescing zero page register [ zp ZP_WORD:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] with [ zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] ] +Coalescing zero page register [ zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] ] +Coalescing zero page register [ zp ZP_WORD:14 [ sin16s_gen::i#5 sin16s_gen::i#1 ] ] with [ zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] ] +Coalescing zero page register [ zp ZP_WORD:20 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] ] with [ zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] ] Coalescing zero page register [ zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] with [ zp ZP_WORD:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] ] Coalescing zero page register [ zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] ] with [ zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] ] Coalescing zero page register [ zp ZP_WORD:46 [ 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 ] ] with [ zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] Coalescing zero page register [ zp ZP_WORD:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] ] Coalescing zero page register [ zp ZP_WORD:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] Coalescing zero page register [ zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:75 [ sin16s::x1#0 ] ] -Coalescing zero page register [ zp ZP_WORD:46 [ 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 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] ] +Coalescing zero page register [ zp ZP_WORD:46 [ 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 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 main::st1#2 main::st1#1 ] ] Coalescing zero page register [ zp ZP_WORD:77 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp ZP_WORD:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] -Allocated (was zp ZP_WORD:14) zp ZP_WORD:2 [ sin16s_gen::i#2 sin16s_gen::i#1 print_str::str#3 print_str::str#5 print_str::str#0 ] -Allocated (was zp ZP_DWORD:16) zp ZP_DWORD:4 [ sin16s_gen::x#2 sin16s_gen::x#1 ] -Allocated (was zp ZP_WORD:20) zp ZP_WORD:8 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] +Allocated (was zp ZP_WORD:14) zp ZP_WORD:2 [ sin16s_gen::i#5 sin16s_gen::i#1 print_str::str#3 print_str::str#5 print_str::str#0 ] +Allocated (was zp ZP_DWORD:16) zp ZP_DWORD:4 [ sin16s_gen::x#5 sin16s_gen::x#1 ] +Allocated (was zp ZP_WORD:20) zp ZP_WORD:8 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] Allocated (was zp ZP_BYTE:22) zp ZP_BYTE:10 [ sin16s::isUpper#2 ] Allocated (was zp ZP_WORD:27) zp ZP_WORD:11 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] Allocated (was zp ZP_DWORD:36) zp ZP_DWORD:13 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] Allocated (was zp ZP_DWORD:40) zp ZP_DWORD:17 [ mul16u::mb#2 mul16u::mb#1 ] -Allocated (was zp ZP_WORD:46) zp ZP_WORD:21 [ 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 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] +Allocated (was zp ZP_WORD:46) zp ZP_WORD:21 [ 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 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 memset::dst#4 memset::dst#1 main::st1#2 main::st1#1 ] Allocated (was zp ZP_WORD:48) zp ZP_WORD:23 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] Allocated (was zp ZP_DWORD:59) zp ZP_DWORD:25 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ] Allocated (was zp ZP_WORD:77) zp ZP_WORD:29 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] @@ -4765,43 +4796,44 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = $15 - // [59] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [59] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [59] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [59] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [60] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [59] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [62] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [60] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [63] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [61] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [59] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [59] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [62] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #sin16s_gen::@1] - b1_from_b3: - // [68] phi (signed word*) sin16s_gen::sintab#2 = (const signed word[$78]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- pwsz1=pwsc1 + // [68] phi from sin16s_gen::@3 to sin16s_gen::@2 [phi:sin16s_gen::@3->sin16s_gen::@2] + b2_from_b3: + // [68] phi (signed word*) sin16s_gen::sintab#7 = (const signed word[$78]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@2#0] -- pwsz1=pwsc1 lda #main.sintab1 sta sintab+1 - // [68] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 + // [68] phi (dword) sin16s_gen::x#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [68] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [68] phi (word) sin16s_gen::i#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen::@1 - b1: - // [69] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen::@2] + b2_from_b1: + // [68] phi (signed word*) sin16s_gen::sintab#7 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@1->sin16s_gen::@2#0] -- register_copy + // [68] phi (dword) sin16s_gen::x#5 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@1->sin16s_gen::@2#1] -- register_copy + // [68] phi (word) sin16s_gen::i#5 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@1->sin16s_gen::@2#2] -- register_copy + jmp b2 // sin16s_gen::@2 b2: - // [71] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2 + // [69] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -4871,21 +4892,21 @@ sin16s_gen: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [72] call sin16s + // [70] call sin16s jsr sin16s - // [73] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [71] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 jmp b4 // sin16s_gen::@4 b4: - // [74] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 - // [75] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 + // [72] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 + // [73] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 ldy #0 lda _2 sta (sintab),y iny lda _2+1 sta (sintab),y - // [76] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [74] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -4893,7 +4914,7 @@ sin16s_gen: { bcc !+ inc sintab+1 !: - // [77] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 + // [75] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -4907,17 +4928,29 @@ sin16s_gen: { lda x+3 adc step+3 sta x+3 - // [78] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 -- vwuz1=_inc_vwuz1 + // [76] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#5 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [68] phi from sin16s_gen::@4 to sin16s_gen::@1 [phi:sin16s_gen::@4->sin16s_gen::@1] - b1_from_b4: - // [68] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy - // [68] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy - // [68] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen::@1 + b1: + // [77] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #memset::@1] - // [59] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [59] phi from memset to memset::@2 [phi:memset->memset::@2] + // [59] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [59] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [59] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [60] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [60] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [61] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [62] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -6356,24 +6412,8 @@ memset: { bne b2 // memset::@return // } - // [61] return + // [63] return rts - // memset::@2 - b2: - // *dst = c - // [62] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [63] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [59] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [59] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // sin16s_gen // Generate signed (large) word sinus table - on the full -$7fff - $7fff range @@ -6395,42 +6435,29 @@ sin16s_gen: { // sin16s_gen::@3 // step = div32u16u(PI2_u4f28, wavelength) // [67] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 - // [68] phi from sin16s_gen::@3 to sin16s_gen::@1 [phi:sin16s_gen::@3->sin16s_gen::@1] - // [68] phi (signed word*) sin16s_gen::sintab#2 = (const signed word[$78]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- pwsz1=pwsc1 + // [68] phi from sin16s_gen::@3 to sin16s_gen::@2 [phi:sin16s_gen::@3->sin16s_gen::@2] + // [68] phi (signed word*) sin16s_gen::sintab#7 = (const signed word[$78]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@2#0] -- pwsz1=pwsc1 lda #main.sintab1 sta sintab+1 - // [68] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 + // [68] phi (dword) sin16s_gen::x#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#1] -- vduz1=vbuc1 lda #0 sta x sta x+1 sta x+2 sta x+3 - // [68] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [68] phi (word) sin16s_gen::i#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#2] -- vwuz1=vbuc1 sta i sta i+1 - // u[4.28] - // sin16s_gen::@1 - b1: - // for( word i=0; imain.wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen::@2] + // [68] phi (signed word*) sin16s_gen::sintab#7 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@1->sin16s_gen::@2#0] -- register_copy + // [68] phi (dword) sin16s_gen::x#5 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@1->sin16s_gen::@2#1] -- register_copy + // [68] phi (word) sin16s_gen::i#5 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@1->sin16s_gen::@2#2] -- register_copy // sin16s_gen::@2 b2: // sin16s(x) - // [71] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2 + // [69] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -6439,13 +6466,13 @@ sin16s_gen: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [72] call sin16s + // [70] call sin16s jsr sin16s - // [73] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [71] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 // sin16s_gen::@4 - // [74] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 + // [72] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 // *sintab++ = sin16s(x) - // [75] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 + // [73] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 ldy #0 lda _2 sta (sintab),y @@ -6453,7 +6480,7 @@ sin16s_gen: { lda _2+1 sta (sintab),y // *sintab++ = sin16s(x); - // [76] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [74] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -6462,7 +6489,7 @@ sin16s_gen: { inc sintab+1 !: // x = x + step - // [77] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 + // [75] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -6477,16 +6504,26 @@ sin16s_gen: { adc step+3 sta x+3 // for( word i=0; isin16s_gen::@1] - // [68] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy - // [68] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy - // [68] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy - jmp b1 + // u[4.28] + // sin16s_gen::@1 + // [77] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2 + bne !+ + lda i + cmp #str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #main.wavelength - bcc b2 - bne !+ - lda i - cmp #main.wavelength + bcc b2 + bne !+ + lda i + cmp #main.wavelength - bcc b2 - bne !+ - lda i - cmp #main.wavelength + bcc b2 + bne !+ + lda i + cmp # (dword) sin16s_genb::x#2 - [76] call sin16sb - [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 + to:sin16s_genb::@2 +sin16s_genb::@2: scope:[sin16s_genb] from sin16s_genb::@1 sin16s_genb::@3 + [72] (signed word*) sin16s_genb::sintab#7 ← phi( sin16s_genb::@1/(signed word*) sin16s_genb::sintab#0 sin16s_genb::@3/(const signed word[$78]) main::sintab2#0 ) + [72] (dword) sin16s_genb::x#5 ← phi( sin16s_genb::@1/(dword) sin16s_genb::x#1 sin16s_genb::@3/(byte) 0 ) + [72] (word) sin16s_genb::i#5 ← phi( sin16s_genb::@1/(word) sin16s_genb::i#1 sin16s_genb::@3/(byte) 0 ) + [73] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#5 + [74] call sin16sb + [75] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 to:sin16s_genb::@4 sin16s_genb::@4: scope:[sin16s_genb] from sin16s_genb::@2 - [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 - [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 - [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 - [82] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2 + [76] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 + [77] *((signed word*) sin16s_genb::sintab#7) ← (signed word~) sin16s_genb::$3 + [78] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#7 + (const byte) SIZEOF_SIGNED_WORD + [79] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#5 + (dword) sin16s_genb::step#0 + [80] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#5 to:sin16s_genb::@1 +sin16s_genb::@1: scope:[sin16s_genb] from sin16s_genb::@4 + [81] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@2 + to:sin16s_genb::@return +sin16s_genb::@return: scope:[sin16s_genb] from sin16s_genb::@1 + [82] return + to:@return sin16sb: scope:[sin16sb] from sin16s_genb::@2 [83] if((word) sin16sb::x#0<(const word) PI_u4f12#0) goto sin16sb::@1 to:sin16sb::@4 @@ -345,28 +345,28 @@ sin16s_gen: scope:[sin16s_gen] from main to:sin16s_gen::@3 sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen [172] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 - to:sin16s_gen::@1 -sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@3 sin16s_gen::@4 - [173] (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@3/(const signed word[$78]) main::sintab1#0 sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 ) - [173] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) - [173] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) - [174] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 - to:sin16s_gen::@return -sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 - [175] return - to:@return -sin16s_gen::@2: scope:[sin16s_gen] from sin16s_gen::@1 - [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 - [177] call sin16s - [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + to:sin16s_gen::@2 +sin16s_gen::@2: scope:[sin16s_gen] from sin16s_gen::@1 sin16s_gen::@3 + [173] (signed word*) sin16s_gen::sintab#7 ← phi( sin16s_gen::@1/(signed word*) sin16s_gen::sintab#0 sin16s_gen::@3/(const signed word[$78]) main::sintab1#0 ) + [173] (dword) sin16s_gen::x#5 ← phi( sin16s_gen::@1/(dword) sin16s_gen::x#1 sin16s_gen::@3/(byte) 0 ) + [173] (word) sin16s_gen::i#5 ← phi( sin16s_gen::@1/(word) sin16s_gen::i#1 sin16s_gen::@3/(byte) 0 ) + [174] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 + [175] call sin16s + [176] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen::@4 sin16s_gen::@4: scope:[sin16s_gen] from sin16s_gen::@2 - [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 - [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 - [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 - [183] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 + [177] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 + [178] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 + [179] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD + [180] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 + [181] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#5 to:sin16s_gen::@1 +sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@4 + [182] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 + to:sin16s_gen::@return +sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 + [183] return + to:@return sin16s: scope:[sin16s] from sin16s_gen::@2 [184] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 to:sin16s::@4 diff --git a/src/test/ref/sinusgen16b.log b/src/test/ref/sinusgen16b.log index 73a9a15c4..f601fa29f 100644 --- a/src/test/ref/sinusgen16b.log +++ b/src/test/ref/sinusgen16b.log @@ -2376,6 +2376,8 @@ Eliminating unused variable (void*) memset::return#2 and assignment [201] (void* Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const word) rem16u#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $10 in if((byte) divr16u::i#1!=(number) $10) goto divr16u::@1 Adding number conversion cast (unumber) $78 in if((byte) main::i#1!=(number) $78) goto main::@1 Successful SSA optimization PassNAddNumberTypeConversions @@ -2385,11 +2387,34 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $78 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (word) sin16s_gen::i#1 = (word) sin16s_gen::i#2 +Alias (dword) sin16s_gen::x#1 = (dword) sin16s_gen::x#2 +Alias (signed word*) sin16s_gen::sintab#0 = (signed word*) sin16s_gen::sintab#2 +Alias (word) sin16s_gen::i#5 = (word) sin16s_gen::i#6 +Alias (dword) sin16s_gen::x#5 = (dword) sin16s_gen::x#6 +Alias (signed word*) sin16s_gen::sintab#7 = (signed word*) sin16s_gen::sintab#8 +Alias (word) sin16s_genb::i#1 = (word) sin16s_genb::i#2 +Alias (dword) sin16s_genb::x#1 = (dword) sin16s_genb::x#2 +Alias (signed word*) sin16s_genb::sintab#0 = (signed word*) sin16s_genb::sintab#2 +Alias (word) sin16s_genb::i#5 = (word) sin16s_genb::i#6 +Alias (dword) sin16s_genb::x#5 = (dword) sin16s_genb::x#6 +Alias (signed word*) sin16s_genb::sintab#7 = (signed word*) sin16s_genb::sintab#8 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (word) sin16s_gen::i#7 (const word) sin16s_gen::i#0 +Identical Phi Values (dword) sin16s_gen::x#7 (const dword) sin16s_gen::x#0 +Identical Phi Values (signed word*) sin16s_gen::sintab#9 (const signed word*) sin16s_gen::sintab#1 +Identical Phi Values (word) sin16s_genb::i#7 (const word) sin16s_genb::i#0 +Identical Phi Values (dword) sin16s_genb::x#7 (const dword) sin16s_genb::x#0 +Identical Phi Values (signed word*) sin16s_genb::sintab#9 (const signed word*) sin16s_genb::sintab#1 +Successful SSA optimization Pass2IdenticalPhiElimination Constant (const void*) memset::str#0 = (void*)print_line_cursor#0 Successful SSA optimization Pass2ConstantIdentification -Constant value identified (byte*)memset::str#0 in [159] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0 -Constant value identified (byte*)memset::str#0 in [161] (byte*) memset::dst#0 ← (byte*)(const void*) memset::str#0 +Constant value identified (byte*)memset::str#0 in [165] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0 +Constant value identified (byte*)memset::str#0 in [167] (byte*) memset::dst#0 ← (byte*)(const void*) memset::str#0 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [226] if((const word) sin16s_gen::i#0<(const word) sin16s_gen::wavelength#0) goto sin16s_gen::@2 +if() condition always true - replacing block destination [228] if((const word) sin16s_genb::i#0<(const word) sin16s_genb::wavelength#0) goto sin16s_genb::@2 +Successful SSA optimization Pass2ConstantIfs Constant (const byte*) memset::$2 = (byte*)memset::str#0 Constant (const byte*) memset::dst#0 = (byte*)memset::str#0 Successful SSA optimization Pass2ConstantIdentification @@ -2397,6 +2422,13 @@ Constant right-side identified [159] (byte*) memset::end#0 ← (const byte*) mem Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) memset::dst#1 = (byte*) memset::dst#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) memset::dst#5 (const byte*) memset::dst#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [218] if((const byte*) memset::dst#0!=(const byte*) memset::end#0) goto memset::@5 +Successful SSA optimization Pass2ConstantIfs Inlining Noop Cast [89] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 Inlining Noop Cast [93] (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 Inlining Noop Cast [152] (signed word) sin16sb::sinx#0 ← (signed word)(word) sin16sb::usinx#1 keeping sin16sb::usinx#1 @@ -2508,14 +2540,17 @@ Added new block during phi lifting divr16u::@8(between divr16u::@3 and divr16u:: Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u::@2) Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3) Added new block during phi lifting mul16u::@10(between mul16u::@2 and mul16u::@4) +Added new block during phi lifting sin16s_gen::@9(between sin16s_gen::@1 and sin16s_gen::@2) Added new block during phi lifting sin16s::@13(between sin16s and sin16s::@1) Fixing phi predecessor for sin16s::isUpper#2 to new block ( sin16s -> sin16s::@13 ) during phi lifting. Added new block during phi lifting sin16s::@14(between sin16s::@1 and sin16s::@2) Added new block during phi lifting sin16s::@15(between sin16s::@12 and sin16s::@3) +Added new block during phi lifting sin16s_genb::@9(between sin16s_genb::@1 and sin16s_genb::@2) Added new block during phi lifting sin16sb::@13(between sin16sb and sin16sb::@1) Fixing phi predecessor for sin16sb::isUpper#2 to new block ( sin16sb -> sin16sb::@13 ) during phi lifting. Added new block during phi lifting sin16sb::@14(between sin16sb::@1 and sin16sb::@2) Added new block during phi lifting sin16sb::@15(between sin16sb::@12 and sin16sb::@3) +Added new block during phi lifting memset::@10(between memset::@4 and memset::@5) Added new block during phi lifting main::@11(between main::@9 and main::@1) Added new block during phi lifting main::@12(between main::@1 and main::@2) Adding NOP phi() at start of @begin @@ -2537,11 +2572,14 @@ Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@4_1 Adding NOP phi() at start of memset::@1 Adding NOP phi() at start of sin16s_genb +Adding NOP phi() at start of sin16s_genb::@1_1 Adding NOP phi() at start of mul16u::@3 Adding NOP phi() at start of div32u16u Adding NOP phi() at start of sin16s_gen +Adding NOP phi() at start of sin16s_gen::@1_1 CALL GRAPH Calls in [] to main:6 Calls in [main] to sin16s_gen:10 sin16s_genb:12 print_cls:14 print_str:20 print_sword:24 print_str:26 @@ -2549,12 +2587,12 @@ Calls in [print_sword] to print_char:50 print_word:54 print_char:58 Calls in [print_word] to print_byte:67 print_byte:70 Calls in [print_byte] to print_char:78 print_char:83 Calls in [print_cls] to memset:87 -Calls in [sin16s_genb] to div32u16u:100 sin16sb:107 -Calls in [sin16sb] to mulu16_sel:130 mulu16_sel:137 mulu16_sel:142 mulu16_sel:150 mulu16_sel:157 -Calls in [mulu16_sel] to mul16u:173 -Calls in [div32u16u] to divr16u:197 divr16u:202 -Calls in [sin16s_gen] to div32u16u:238 sin16s:245 -Calls in [sin16s] to mulu16_sel:269 mulu16_sel:276 mulu16_sel:281 mulu16_sel:289 mulu16_sel:296 +Calls in [sin16s_genb] to div32u16u:101 sin16sb:107 +Calls in [sin16sb] to mulu16_sel:132 mulu16_sel:139 mulu16_sel:144 mulu16_sel:152 mulu16_sel:159 +Calls in [mulu16_sel] to mul16u:175 +Calls in [div32u16u] to divr16u:199 divr16u:204 +Calls in [sin16s_gen] to div32u16u:240 sin16s:246 +Calls in [sin16s] to mulu16_sel:272 mulu16_sel:279 mulu16_sel:284 mulu16_sel:292 mulu16_sel:299 Created 44 initial phi equivalence classes Coalesced [19] print_char_cursor#60 ← print_char_cursor#52 @@ -2579,61 +2617,61 @@ Coalesced [76] print_char::ch#5 ← print_char::ch#2 Coalesced (already) [77] print_char_cursor#64 ← print_char_cursor#13 Coalesced [81] print_char::ch#6 ← print_char::ch#3 Coalesced (already) [82] print_char_cursor#65 ← print_char_cursor#13 -Coalesced [98] memset::dst#4 ← memset::dst#1 -Coalesced [114] sin16s_genb::i#5 ← sin16s_genb::i#1 -Coalesced [115] sin16s_genb::x#5 ← sin16s_genb::x#1 -Coalesced [116] sin16s_genb::sintab#7 ← sin16s_genb::sintab#0 -Coalesced [119] sin16sb::x#9 ← sin16sb::x#1 -Coalesced [123] sin16sb::x#11 ← sin16sb::x#2 -Coalesced [128] mulu16_sel::v1#18 ← mulu16_sel::v1#5 -Coalesced [129] mulu16_sel::v2#17 ← mulu16_sel::v2#5 -Coalesced [135] mulu16_sel::v1#19 ← mulu16_sel::v1#6 -Coalesced [136] mulu16_sel::v2#18 ← mulu16_sel::v2#6 -Coalesced [141] mulu16_sel::v1#20 ← mulu16_sel::v1#7 -Coalesced [148] mulu16_sel::v1#16 ← mulu16_sel::v1#8 -Coalesced [149] mulu16_sel::v2#15 ← mulu16_sel::v2#8 -Coalesced [155] mulu16_sel::v1#17 ← mulu16_sel::v1#9 -Coalesced [156] mulu16_sel::v2#16 ← mulu16_sel::v2#9 -Coalesced [164] sin16sb::return#6 ← sin16sb::sinx#1 -Coalesced [168] sin16sb::x#10 ← sin16sb::x#4 -Coalesced [169] sin16sb::x#8 ← sin16sb::x#0 -Coalesced [179] mul16u::a#7 ← mul16u::a#1 -Coalesced [180] mul16u::mb#6 ← mul16u::b#0 -Coalesced [188] mul16u::res#9 ← mul16u::res#1 -Coalesced [192] mul16u::a#8 ← mul16u::a#0 -Coalesced [193] mul16u::res#7 ← mul16u::res#6 -Coalesced [194] mul16u::mb#7 ← mul16u::mb#1 -Coalesced (already) [195] mul16u::res#8 ← mul16u::res#2 -Coalesced [201] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [208] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [209] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [216] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [223] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [224] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [230] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [231] divr16u::dividend#10 ← divr16u::dividend#0 -Coalesced [232] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [233] divr16u::i#7 ← divr16u::i#1 -Coalesced [234] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [235] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [236] divr16u::rem#15 ← divr16u::rem#0 -Coalesced [252] sin16s_gen::i#5 ← sin16s_gen::i#1 -Coalesced [253] sin16s_gen::x#5 ← sin16s_gen::x#1 -Coalesced [254] sin16s_gen::sintab#7 ← sin16s_gen::sintab#0 -Coalesced [257] sin16s::x#9 ← sin16s::x#1 -Coalesced [261] sin16s::x#11 ← sin16s::x#2 -Coalesced [267] mulu16_sel::v1#13 ← mulu16_sel::v1#0 -Coalesced [268] mulu16_sel::v2#13 ← mulu16_sel::v2#0 -Coalesced [274] mulu16_sel::v1#14 ← mulu16_sel::v1#1 -Coalesced [275] mulu16_sel::v2#14 ← mulu16_sel::v2#1 -Coalesced [280] mulu16_sel::v1#15 ← mulu16_sel::v1#2 -Coalesced [287] mulu16_sel::v1#11 ← mulu16_sel::v1#3 -Coalesced [288] mulu16_sel::v2#11 ← mulu16_sel::v2#3 -Coalesced [294] mulu16_sel::v1#12 ← mulu16_sel::v1#4 -Coalesced [295] mulu16_sel::v2#12 ← mulu16_sel::v2#4 -Coalesced [303] sin16s::return#6 ← sin16s::sinx#1 -Coalesced [307] sin16s::x#10 ← sin16s::x#4 -Coalesced [308] sin16s::x#8 ← sin16s::x#0 +Coalesced [99] memset::dst#6 ← memset::dst#1 +Coalesced [116] sin16s_genb::i#8 ← sin16s_genb::i#1 +Coalesced [117] sin16s_genb::x#8 ← sin16s_genb::x#1 +Coalesced [118] sin16s_genb::sintab#10 ← sin16s_genb::sintab#0 +Coalesced [121] sin16sb::x#9 ← sin16sb::x#1 +Coalesced [125] sin16sb::x#11 ← sin16sb::x#2 +Coalesced [130] mulu16_sel::v1#18 ← mulu16_sel::v1#5 +Coalesced [131] mulu16_sel::v2#17 ← mulu16_sel::v2#5 +Coalesced [137] mulu16_sel::v1#19 ← mulu16_sel::v1#6 +Coalesced [138] mulu16_sel::v2#18 ← mulu16_sel::v2#6 +Coalesced [143] mulu16_sel::v1#20 ← mulu16_sel::v1#7 +Coalesced [150] mulu16_sel::v1#16 ← mulu16_sel::v1#8 +Coalesced [151] mulu16_sel::v2#15 ← mulu16_sel::v2#8 +Coalesced [157] mulu16_sel::v1#17 ← mulu16_sel::v1#9 +Coalesced [158] mulu16_sel::v2#16 ← mulu16_sel::v2#9 +Coalesced [166] sin16sb::return#6 ← sin16sb::sinx#1 +Coalesced [170] sin16sb::x#10 ← sin16sb::x#4 +Coalesced [171] sin16sb::x#8 ← sin16sb::x#0 +Coalesced [181] mul16u::a#7 ← mul16u::a#1 +Coalesced [182] mul16u::mb#6 ← mul16u::b#0 +Coalesced [190] mul16u::res#9 ← mul16u::res#1 +Coalesced [194] mul16u::a#8 ← mul16u::a#0 +Coalesced [195] mul16u::res#7 ← mul16u::res#6 +Coalesced [196] mul16u::mb#7 ← mul16u::mb#1 +Coalesced (already) [197] mul16u::res#8 ← mul16u::res#2 +Coalesced [203] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [210] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [211] divr16u::dividend#9 ← divr16u::dividend#5 +Coalesced [218] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [225] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [226] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [232] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [233] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [234] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [235] divr16u::i#7 ← divr16u::i#1 +Coalesced [236] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [237] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [238] divr16u::rem#15 ← divr16u::rem#0 +Coalesced [255] sin16s_gen::i#8 ← sin16s_gen::i#1 +Coalesced [256] sin16s_gen::x#8 ← sin16s_gen::x#1 +Coalesced [257] sin16s_gen::sintab#10 ← sin16s_gen::sintab#0 +Coalesced [260] sin16s::x#9 ← sin16s::x#1 +Coalesced [264] sin16s::x#11 ← sin16s::x#2 +Coalesced [270] mulu16_sel::v1#13 ← mulu16_sel::v1#0 +Coalesced [271] mulu16_sel::v2#13 ← mulu16_sel::v2#0 +Coalesced [277] mulu16_sel::v1#14 ← mulu16_sel::v1#1 +Coalesced [278] mulu16_sel::v2#14 ← mulu16_sel::v2#1 +Coalesced [283] mulu16_sel::v1#15 ← mulu16_sel::v1#2 +Coalesced [290] mulu16_sel::v1#11 ← mulu16_sel::v1#3 +Coalesced [291] mulu16_sel::v2#11 ← mulu16_sel::v2#3 +Coalesced [297] mulu16_sel::v1#12 ← mulu16_sel::v1#4 +Coalesced [298] mulu16_sel::v2#12 ← mulu16_sel::v2#4 +Coalesced [306] sin16s::return#6 ← sin16s::sinx#1 +Coalesced [310] sin16s::x#10 ← sin16s::x#4 +Coalesced [311] sin16s::x#8 ← sin16s::x#0 Coalesced down to 31 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) @13 @@ -2650,7 +2688,11 @@ Culled Empty Block (label) print_word::@2 Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) print_cls::@1 Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@4_1 Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@10 +Culled Empty Block (label) sin16s_genb::@1_1 +Culled Empty Block (label) sin16s_genb::@9 Culled Empty Block (label) sin16sb::@14 Culled Empty Block (label) sin16sb::@13 Culled Empty Block (label) mul16u::@3 @@ -2658,6 +2700,8 @@ Culled Empty Block (label) mul16u::@10 Culled Empty Block (label) divr16u::@8 Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@9 +Culled Empty Block (label) sin16s_gen::@1_1 +Culled Empty Block (label) sin16s_gen::@9 Culled Empty Block (label) sin16s::@14 Culled Empty Block (label) sin16s::@13 Renumbering block @59 to @1 @@ -2840,18 +2884,18 @@ print_cls::@return: scope:[print_cls] from print_cls to:@return memset: scope:[memset] from print_cls [62] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [63] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [64] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [65] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [63] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [64] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [66] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [65] return + [67] return to:@return -memset::@2: scope:[memset] from memset::@1 - [66] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [67] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 sin16s_genb: scope:[sin16s_genb] from main::@4 [68] phi() [69] call div32u16u @@ -2859,28 +2903,28 @@ sin16s_genb: scope:[sin16s_genb] from main::@4 to:sin16s_genb::@3 sin16s_genb::@3: scope:[sin16s_genb] from sin16s_genb [71] (dword) sin16s_genb::step#0 ← (dword) div32u16u::return#3 - to:sin16s_genb::@1 -sin16s_genb::@1: scope:[sin16s_genb] from sin16s_genb::@3 sin16s_genb::@4 - [72] (signed word*) sin16s_genb::sintab#2 ← phi( sin16s_genb::@3/(const signed word[$78]) main::sintab2#0 sin16s_genb::@4/(signed word*) sin16s_genb::sintab#0 ) - [72] (dword) sin16s_genb::x#2 ← phi( sin16s_genb::@3/(byte) 0 sin16s_genb::@4/(dword) sin16s_genb::x#1 ) - [72] (word) sin16s_genb::i#2 ← phi( sin16s_genb::@3/(byte) 0 sin16s_genb::@4/(word) sin16s_genb::i#1 ) - [73] if((word) sin16s_genb::i#2<(const word) main::wavelength#0) goto sin16s_genb::@2 - to:sin16s_genb::@return -sin16s_genb::@return: scope:[sin16s_genb] from sin16s_genb::@1 - [74] return - to:@return -sin16s_genb::@2: scope:[sin16s_genb] from sin16s_genb::@1 - [75] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#2 - [76] call sin16sb - [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 + to:sin16s_genb::@2 +sin16s_genb::@2: scope:[sin16s_genb] from sin16s_genb::@1 sin16s_genb::@3 + [72] (signed word*) sin16s_genb::sintab#7 ← phi( sin16s_genb::@1/(signed word*) sin16s_genb::sintab#0 sin16s_genb::@3/(const signed word[$78]) main::sintab2#0 ) + [72] (dword) sin16s_genb::x#5 ← phi( sin16s_genb::@1/(dword) sin16s_genb::x#1 sin16s_genb::@3/(byte) 0 ) + [72] (word) sin16s_genb::i#5 ← phi( sin16s_genb::@1/(word) sin16s_genb::i#1 sin16s_genb::@3/(byte) 0 ) + [73] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#5 + [74] call sin16sb + [75] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 to:sin16s_genb::@4 sin16s_genb::@4: scope:[sin16s_genb] from sin16s_genb::@2 - [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 - [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 - [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 - [82] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2 + [76] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 + [77] *((signed word*) sin16s_genb::sintab#7) ← (signed word~) sin16s_genb::$3 + [78] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#7 + (const byte) SIZEOF_SIGNED_WORD + [79] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#5 + (dword) sin16s_genb::step#0 + [80] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#5 to:sin16s_genb::@1 +sin16s_genb::@1: scope:[sin16s_genb] from sin16s_genb::@4 + [81] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@2 + to:sin16s_genb::@return +sin16s_genb::@return: scope:[sin16s_genb] from sin16s_genb::@1 + [82] return + to:@return sin16sb: scope:[sin16sb] from sin16s_genb::@2 [83] if((word) sin16sb::x#0<(const word) PI_u4f12#0) goto sin16sb::@1 to:sin16sb::@4 @@ -3054,28 +3098,28 @@ sin16s_gen: scope:[sin16s_gen] from main to:sin16s_gen::@3 sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen [172] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 - to:sin16s_gen::@1 -sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@3 sin16s_gen::@4 - [173] (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@3/(const signed word[$78]) main::sintab1#0 sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 ) - [173] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) - [173] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) - [174] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 - to:sin16s_gen::@return -sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 - [175] return - to:@return -sin16s_gen::@2: scope:[sin16s_gen] from sin16s_gen::@1 - [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 - [177] call sin16s - [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + to:sin16s_gen::@2 +sin16s_gen::@2: scope:[sin16s_gen] from sin16s_gen::@1 sin16s_gen::@3 + [173] (signed word*) sin16s_gen::sintab#7 ← phi( sin16s_gen::@1/(signed word*) sin16s_gen::sintab#0 sin16s_gen::@3/(const signed word[$78]) main::sintab1#0 ) + [173] (dword) sin16s_gen::x#5 ← phi( sin16s_gen::@1/(dword) sin16s_gen::x#1 sin16s_gen::@3/(byte) 0 ) + [173] (word) sin16s_gen::i#5 ← phi( sin16s_gen::@1/(word) sin16s_gen::i#1 sin16s_gen::@3/(byte) 0 ) + [174] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 + [175] call sin16s + [176] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen::@4 sin16s_gen::@4: scope:[sin16s_gen] from sin16s_gen::@2 - [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 - [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 - [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 - [183] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 + [177] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 + [178] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 + [179] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD + [180] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 + [181] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#5 to:sin16s_gen::@1 +sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@4 + [182] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 + to:sin16s_gen::@return +sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 + [183] return + to:@return sin16s: scope:[sin16s] from sin16s_gen::@2 [184] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 to:sin16s::@4 @@ -3211,8 +3255,8 @@ VARIABLE REGISTER WEIGHTS (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst -(byte*) memset::dst#1 22.0 -(byte*) memset::dst#2 14.666666666666666 +(byte*) memset::dst#1 16.5 +(byte*) memset::dst#4 16.5 (byte*) memset::end (word) memset::num (void*) memset::return @@ -3348,31 +3392,31 @@ VARIABLE REGISTER WEIGHTS (void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength) (signed word~) sin16s_gen::$2 22.0 (word) sin16s_gen::i -(word) sin16s_gen::i#1 22.0 -(word) sin16s_gen::i#2 3.666666666666667 +(word) sin16s_gen::i#1 16.5 +(word) sin16s_gen::i#5 2.75 (signed word*) sin16s_gen::sintab -(signed word*) sin16s_gen::sintab#0 7.333333333333333 -(signed word*) sin16s_gen::sintab#2 4.714285714285714 +(signed word*) sin16s_gen::sintab#0 5.5 +(signed word*) sin16s_gen::sintab#7 5.5 (dword) sin16s_gen::step (dword) sin16s_gen::step#0 1.1818181818181819 (word) sin16s_gen::wavelength (dword) sin16s_gen::x -(dword) sin16s_gen::x#1 11.0 -(dword) sin16s_gen::x#2 4.125 +(dword) sin16s_gen::x#1 7.333333333333333 +(dword) sin16s_gen::x#5 4.714285714285714 (void()) sin16s_genb((signed word*) sin16s_genb::sintab , (word) sin16s_genb::wavelength) (signed word~) sin16s_genb::$3 22.0 (word) sin16s_genb::i -(word) sin16s_genb::i#1 22.0 -(word) sin16s_genb::i#2 3.666666666666667 +(word) sin16s_genb::i#1 16.5 +(word) sin16s_genb::i#5 2.75 (signed word*) sin16s_genb::sintab -(signed word*) sin16s_genb::sintab#0 7.333333333333333 -(signed word*) sin16s_genb::sintab#2 4.714285714285714 +(signed word*) sin16s_genb::sintab#0 5.5 +(signed word*) sin16s_genb::sintab#7 5.5 (dword) sin16s_genb::step (dword) sin16s_genb::step#0 1.1818181818181819 (word) sin16s_genb::wavelength (dword) sin16s_genb::x -(dword) sin16s_genb::x#1 11.0 -(dword) sin16s_genb::x#2 4.125 +(dword) sin16s_genb::x#1 7.333333333333333 +(dword) sin16s_genb::x#5 4.714285714285714 (signed word()) sin16sb((word) sin16sb::x) (byte) sin16sb::isUpper (byte) sin16sb::isUpper#2 0.0625 @@ -3416,10 +3460,10 @@ Initial phi equivalence classes [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] [ print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -[ memset::dst#2 memset::dst#1 ] -[ sin16s_genb::i#2 sin16s_genb::i#1 ] -[ sin16s_genb::x#2 sin16s_genb::x#1 ] -[ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] +[ memset::dst#4 memset::dst#1 ] +[ sin16s_genb::i#5 sin16s_genb::i#1 ] +[ sin16s_genb::x#5 sin16s_genb::x#1 ] +[ sin16s_genb::sintab#7 sin16s_genb::sintab#0 ] [ sin16sb::isUpper#2 ] [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] @@ -3434,9 +3478,9 @@ Initial phi equivalence classes [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] -[ sin16s_gen::i#2 sin16s_gen::i#1 ] -[ sin16s_gen::x#2 sin16s_gen::x#1 ] -[ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] +[ sin16s_gen::i#5 sin16s_gen::i#1 ] +[ sin16s_gen::x#5 sin16s_gen::x#1 ] +[ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] [ sin16s::isUpper#2 ] [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -3503,10 +3547,10 @@ Complete equivalence classes [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] [ print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -[ memset::dst#2 memset::dst#1 ] -[ sin16s_genb::i#2 sin16s_genb::i#1 ] -[ sin16s_genb::x#2 sin16s_genb::x#1 ] -[ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] +[ memset::dst#4 memset::dst#1 ] +[ sin16s_genb::i#5 sin16s_genb::i#1 ] +[ sin16s_genb::x#5 sin16s_genb::x#1 ] +[ sin16s_genb::sintab#7 sin16s_genb::sintab#0 ] [ sin16sb::isUpper#2 ] [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] @@ -3521,9 +3565,9 @@ Complete equivalence classes [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] -[ sin16s_gen::i#2 sin16s_gen::i#1 ] -[ sin16s_gen::x#2 sin16s_gen::x#1 ] -[ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] +[ sin16s_gen::i#5 sin16s_gen::i#1 ] +[ sin16s_gen::x#5 sin16s_gen::x#1 ] +[ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] [ sin16s::isUpper#2 ] [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -3589,10 +3633,10 @@ Allocated zp ZP_WORD:9 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] Allocated zp ZP_BYTE:11 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Allocated zp ZP_WORD:12 [ print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] Allocated zp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Allocated zp ZP_WORD:15 [ memset::dst#2 memset::dst#1 ] -Allocated zp ZP_WORD:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] -Allocated zp ZP_DWORD:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] -Allocated zp ZP_WORD:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] +Allocated zp ZP_WORD:15 [ memset::dst#4 memset::dst#1 ] +Allocated zp ZP_WORD:17 [ sin16s_genb::i#5 sin16s_genb::i#1 ] +Allocated zp ZP_DWORD:19 [ sin16s_genb::x#5 sin16s_genb::x#1 ] +Allocated zp ZP_WORD:23 [ sin16s_genb::sintab#7 sin16s_genb::sintab#0 ] Allocated zp ZP_BYTE:25 [ sin16sb::isUpper#2 ] Allocated zp ZP_WORD:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] Allocated zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] @@ -3607,9 +3651,9 @@ Allocated zp ZP_WORD:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u: Allocated zp ZP_WORD:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] Allocated zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] Allocated zp ZP_BYTE:53 [ divr16u::i#2 divr16u::i#1 ] -Allocated zp ZP_WORD:54 [ sin16s_gen::i#2 sin16s_gen::i#1 ] -Allocated zp ZP_DWORD:56 [ sin16s_gen::x#2 sin16s_gen::x#1 ] -Allocated zp ZP_WORD:60 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] +Allocated zp ZP_WORD:54 [ sin16s_gen::i#5 sin16s_gen::i#1 ] +Allocated zp ZP_DWORD:56 [ sin16s_gen::x#5 sin16s_gen::x#1 ] +Allocated zp ZP_WORD:60 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] Allocated zp ZP_BYTE:62 [ sin16s::isUpper#2 ] Allocated zp ZP_DWORD:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] Allocated zp ZP_WORD:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -4084,43 +4128,44 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = $f - // [63] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [63] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [63] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [63] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [64] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [63] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [66] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [64] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [67] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [65] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [63] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [63] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [66] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #sin16s_genb::@1] - b1_from_b3: - // [72] phi (signed word*) sin16s_genb::sintab#2 = (const signed word[$78]) main::sintab2#0 [phi:sin16s_genb::@3->sin16s_genb::@1#0] -- pwsz1=pwsc1 + // [72] phi from sin16s_genb::@3 to sin16s_genb::@2 [phi:sin16s_genb::@3->sin16s_genb::@2] + b2_from_b3: + // [72] phi (signed word*) sin16s_genb::sintab#7 = (const signed word[$78]) main::sintab2#0 [phi:sin16s_genb::@3->sin16s_genb::@2#0] -- pwsz1=pwsc1 lda #main.sintab2 sta sintab+1 - // [72] phi (dword) sin16s_genb::x#2 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#1] -- vduz1=vbuc1 + // [72] phi (dword) sin16s_genb::x#5 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [72] phi (word) sin16s_genb::i#2 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#2] -- vwuz1=vbuc1 + // [72] phi (word) sin16s_genb::i#5 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_genb::@1 - b1: - // [73] if((word) sin16s_genb::i#2<(const word) main::wavelength#0) goto sin16s_genb::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_genb::@2] + b2_from_b1: + // [72] phi (signed word*) sin16s_genb::sintab#7 = (signed word*) sin16s_genb::sintab#0 [phi:sin16s_genb::@1->sin16s_genb::@2#0] -- register_copy + // [72] phi (dword) sin16s_genb::x#5 = (dword) sin16s_genb::x#1 [phi:sin16s_genb::@1->sin16s_genb::@2#1] -- register_copy + // [72] phi (word) sin16s_genb::i#5 = (word) sin16s_genb::i#1 [phi:sin16s_genb::@1->sin16s_genb::@2#2] -- register_copy + jmp b2 // sin16s_genb::@2 b2: - // [75] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#2 -- vwuz1=_hi_vduz2 + // [73] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#5 -- vwuz1=_hi_vduz2 lda x+2 sta sin16sb.x lda x+3 sta sin16sb.x+1 - // [76] call sin16sb + // [74] call sin16sb jsr sin16sb - // [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 -- vwsz1=vwsz2 + // [75] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 -- vwsz1=vwsz2 lda sin16sb.return_1 sta sin16sb.return lda sin16sb.return_1+1 @@ -4212,19 +4246,19 @@ sin16s_genb: { jmp b4 // sin16s_genb::@4 b4: - // [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 -- vwsz1=vwsz2 + // [76] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 -- vwsz1=vwsz2 lda sin16sb.return sta _3 lda sin16sb.return+1 sta _3+1 - // [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 -- _deref_pwsz1=vwsz2 + // [77] *((signed word*) sin16s_genb::sintab#7) ← (signed word~) sin16s_genb::$3 -- _deref_pwsz1=vwsz2 ldy #0 lda _3 sta (sintab),y iny lda _3+1 sta (sintab),y - // [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [78] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#7 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -4232,7 +4266,7 @@ sin16s_genb: { bcc !+ inc sintab+1 !: - // [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 -- vduz1=vduz1_plus_vduz2 + // [79] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#5 + (dword) sin16s_genb::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -4246,17 +4280,29 @@ sin16s_genb: { lda x+3 adc step+3 sta x+3 - // [82] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2 -- vwuz1=_inc_vwuz1 + // [80] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#5 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [72] phi from sin16s_genb::@4 to sin16s_genb::@1 [phi:sin16s_genb::@4->sin16s_genb::@1] - b1_from_b4: - // [72] phi (signed word*) sin16s_genb::sintab#2 = (signed word*) sin16s_genb::sintab#0 [phi:sin16s_genb::@4->sin16s_genb::@1#0] -- register_copy - // [72] phi (dword) sin16s_genb::x#2 = (dword) sin16s_genb::x#1 [phi:sin16s_genb::@4->sin16s_genb::@1#1] -- register_copy - // [72] phi (word) sin16s_genb::i#2 = (word) sin16s_genb::i#1 [phi:sin16s_genb::@4->sin16s_genb::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_genb::@1 + b1: + // [81] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #sin16s_gen::@1] - b1_from_b3: - // [173] phi (signed word*) sin16s_gen::sintab#2 = (const signed word[$78]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- pwsz1=pwsc1 + // [173] phi from sin16s_gen::@3 to sin16s_gen::@2 [phi:sin16s_gen::@3->sin16s_gen::@2] + b2_from_b3: + // [173] phi (signed word*) sin16s_gen::sintab#7 = (const signed word[$78]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@2#0] -- pwsz1=pwsc1 lda #main.sintab1 sta sintab+1 - // [173] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 + // [173] phi (dword) sin16s_gen::x#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [173] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [173] phi (word) sin16s_gen::i#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen::@1 - b1: - // [174] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen::@2] + b2_from_b1: + // [173] phi (signed word*) sin16s_gen::sintab#7 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@1->sin16s_gen::@2#0] -- register_copy + // [173] phi (dword) sin16s_gen::x#5 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@1->sin16s_gen::@2#1] -- register_copy + // [173] phi (word) sin16s_gen::i#5 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@1->sin16s_gen::@2#2] -- register_copy + jmp b2 // sin16s_gen::@2 b2: - // [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2 + // [174] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -5041,9 +5076,9 @@ sin16s_gen: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [177] call sin16s + // [175] call sin16s jsr sin16s - // [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 + // [176] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 lda sin16s.return_1 sta sin16s.return lda sin16s.return_1+1 @@ -5051,19 +5086,19 @@ sin16s_gen: { jmp b4 // sin16s_gen::@4 b4: - // [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 + // [177] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 lda sin16s.return sta _2 lda sin16s.return+1 sta _2+1 - // [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 + // [178] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 ldy #0 lda _2 sta (sintab),y iny lda _2+1 sta (sintab),y - // [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [179] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -5071,7 +5106,7 @@ sin16s_gen: { bcc !+ inc sintab+1 !: - // [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 + // [180] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -5085,17 +5120,29 @@ sin16s_gen: { lda x+3 adc step+3 sta x+3 - // [183] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 -- vwuz1=_inc_vwuz1 + // [181] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#5 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [173] phi from sin16s_gen::@4 to sin16s_gen::@1 [phi:sin16s_gen::@4->sin16s_gen::@1] - b1_from_b4: - // [173] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy - // [173] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy - // [173] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen::@1 + b1: + // [182] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #> (byte) 4 [ print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ( main:2::print_sword:17::print_word:37::print_byte:47 [ main::st1#2 main::st2#2 main::i#2 print_word::w#0 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] main:2::print_sword:17::print_word:37::print_byte:49 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Statement [55] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#13 print_byte::$2 ] ( main:2::print_sword:17::print_word:37::print_byte:47 [ main::st1#2 main::st2#2 main::i#2 print_word::w#0 print_char_cursor#13 print_byte::$2 ] main:2::print_sword:17::print_word:37::print_byte:49 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_byte::$2 ] ) always clobbers reg byte a -Statement [64] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:9::memset:60 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [66] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:9::memset:60 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [64] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:9::memset:60 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [66] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:9::memset:60 [ memset::dst#1 ] ) always clobbers reg byte a Statement [70] (dword) div32u16u::return#3 ← (dword) div32u16u::return#0 [ div32u16u::return#3 ] ( main:2::sin16s_genb:7 [ div32u16u::return#3 ] ) always clobbers reg byte a Statement [71] (dword) sin16s_genb::step#0 ← (dword) div32u16u::return#3 [ sin16s_genb::step#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 ] ) always clobbers reg byte a -Statement [73] if((word) sin16s_genb::i#2<(const word) main::wavelength#0) goto sin16s_genb::@2 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] ) always clobbers reg byte a -Statement [75] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#2 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#0 ] ) always clobbers reg byte a -Statement [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#0 ] ) always clobbers reg byte a -Statement [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::$3 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::$3 ] ) always clobbers reg byte a -Statement [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#0 ] ) always clobbers reg byte a -Statement [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) always clobbers reg byte a -Statement [83] if((word) sin16sb::x#0<(const word) PI_u4f12#0) goto sin16sb::@1 [ sin16sb::x#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#0 ] ) always clobbers reg byte a -Statement [84] (word) sin16sb::x#1 ← (word) sin16sb::x#0 - (const word) PI_u4f12#0 [ sin16sb::x#1 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#1 ] ) always clobbers reg byte a -Statement [86] if((word) sin16sb::x#4<(const word) PI_HALF_u4f12#0) goto sin16sb::@2 [ sin16sb::x#4 sin16sb::isUpper#2 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#4 sin16sb::isUpper#2 ] ) always clobbers reg byte a +Statement [73] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#5 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::x#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::x#0 ] ) always clobbers reg byte a +Statement [75] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::return#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::return#0 ] ) always clobbers reg byte a +Statement [76] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16s_genb::$3 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16s_genb::$3 ] ) always clobbers reg byte a +Statement [77] *((signed word*) sin16s_genb::sintab#7) ← (signed word~) sin16s_genb::$3 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 ] ) always clobbers reg byte a reg byte y +Statement [78] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#7 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#0 ] ) always clobbers reg byte a +Statement [79] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#5 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) always clobbers reg byte a +Statement [81] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@2 [ sin16s_genb::step#0 sin16s_genb::i#1 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#1 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) always clobbers reg byte a +Statement [83] if((word) sin16sb::x#0<(const word) PI_u4f12#0) goto sin16sb::@1 [ sin16sb::x#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::x#0 ] ) always clobbers reg byte a +Statement [84] (word) sin16sb::x#1 ← (word) sin16sb::x#0 - (const word) PI_u4f12#0 [ sin16sb::x#1 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::x#1 ] ) always clobbers reg byte a +Statement [86] if((word) sin16sb::x#4<(const word) PI_HALF_u4f12#0) goto sin16sb::@2 [ sin16sb::x#4 sin16sb::isUpper#2 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::x#4 sin16sb::isUpper#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ sin16sb::isUpper#2 ] -Statement [87] (word) sin16sb::x#2 ← (const word) PI_u4f12#0 - (word) sin16sb::x#4 [ sin16sb::isUpper#2 sin16sb::x#2 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x#2 ] ) always clobbers reg byte a -Statement [89] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 << (byte) 3 [ sin16sb::isUpper#2 sin16sb::x1#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 ] ) always clobbers reg byte a -Statement [90] (word) mulu16_sel::v1#5 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 ] ) always clobbers reg byte a -Statement [91] (word) mulu16_sel::v2#5 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 mulu16_sel::v2#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 mulu16_sel::v2#5 ] ) always clobbers reg byte a -Statement [93] (word) mulu16_sel::return#18 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#18 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#18 ] ) always clobbers reg byte a -Statement [94] (word) sin16sb::x2#0 ← (word) mulu16_sel::return#18 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x2#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x2#0 ] ) always clobbers reg byte a -Statement [95] (word) mulu16_sel::v1#6 ← (word) sin16sb::x2#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 ] ) always clobbers reg byte a -Statement [96] (word) mulu16_sel::v2#6 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 mulu16_sel::v2#6 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 mulu16_sel::v2#6 ] ) always clobbers reg byte a -Statement [98] (word) mulu16_sel::return#19 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#19 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#19 ] ) always clobbers reg byte a -Statement [99] (word) sin16sb::x3#0 ← (word) mulu16_sel::return#19 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 ] ) always clobbers reg byte a -Statement [100] (word) mulu16_sel::v1#7 ← (word) sin16sb::x3#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v1#7 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v1#7 ] ) always clobbers reg byte a -Statement [102] (word) mulu16_sel::return#20 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#20 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#20 ] ) always clobbers reg byte a -Statement [103] (word) sin16sb::x3_6#0 ← (word) mulu16_sel::return#20 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::x3_6#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::x3_6#0 ] ) always clobbers reg byte a -Statement [104] (word) sin16sb::usinx#0 ← (word) sin16sb::x1#0 - (word) sin16sb::x3_6#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::usinx#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::usinx#0 ] ) always clobbers reg byte a -Statement [105] (word) mulu16_sel::v1#8 ← (word) sin16sb::x3#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 ] ) always clobbers reg byte a -Statement [106] (word) mulu16_sel::v2#8 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 mulu16_sel::v2#8 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 mulu16_sel::v2#8 ] ) always clobbers reg byte a -Statement [108] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [109] (word) sin16sb::x4#0 ← (word) mulu16_sel::return#10 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 sin16sb::x4#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 sin16sb::x4#0 ] ) always clobbers reg byte a -Statement [110] (word) mulu16_sel::v1#9 ← (word) sin16sb::x4#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#9 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#9 ] ) always clobbers reg byte a -Statement [111] (word) mulu16_sel::v2#9 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v1#9 mulu16_sel::v2#9 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v1#9 mulu16_sel::v2#9 ] ) always clobbers reg byte a -Statement [113] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [114] (word) sin16sb::x5#0 ← (word) mulu16_sel::return#11 [ sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5#0 ] ) always clobbers reg byte a -Statement [115] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 >> (byte) 4 [ sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5_128#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5_128#0 ] ) always clobbers reg byte a -Statement [116] (word) sin16sb::usinx#1 ← (word) sin16sb::usinx#0 + (word) sin16sb::x5_128#0 [ sin16sb::isUpper#2 sin16sb::usinx#1 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#1 ] ) always clobbers reg byte a -Statement [118] (signed word) sin16sb::sinx#1 ← - (signed word)(word) sin16sb::usinx#1 [ sin16sb::sinx#1 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::sinx#1 ] ) always clobbers reg byte a -Statement [121] (signed word~) sin16sb::return#5 ← (signed word)(word) sin16sb::usinx#1 [ sin16sb::return#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#5 ] ) always clobbers reg byte a -Statement [123] (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 [ mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] ) always clobbers reg byte a +Statement [87] (word) sin16sb::x#2 ← (const word) PI_u4f12#0 - (word) sin16sb::x#4 [ sin16sb::isUpper#2 sin16sb::x#2 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x#2 ] ) always clobbers reg byte a +Statement [89] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 << (byte) 3 [ sin16sb::isUpper#2 sin16sb::x1#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 ] ) always clobbers reg byte a +Statement [90] (word) mulu16_sel::v1#5 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 ] ) always clobbers reg byte a +Statement [91] (word) mulu16_sel::v2#5 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 mulu16_sel::v2#5 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 mulu16_sel::v2#5 ] ) always clobbers reg byte a +Statement [93] (word) mulu16_sel::return#18 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#18 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#18 ] ) always clobbers reg byte a +Statement [94] (word) sin16sb::x2#0 ← (word) mulu16_sel::return#18 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x2#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x2#0 ] ) always clobbers reg byte a +Statement [95] (word) mulu16_sel::v1#6 ← (word) sin16sb::x2#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 ] ) always clobbers reg byte a +Statement [96] (word) mulu16_sel::v2#6 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 mulu16_sel::v2#6 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 mulu16_sel::v2#6 ] ) always clobbers reg byte a +Statement [98] (word) mulu16_sel::return#19 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#19 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#19 ] ) always clobbers reg byte a +Statement [99] (word) sin16sb::x3#0 ← (word) mulu16_sel::return#19 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 ] ) always clobbers reg byte a +Statement [100] (word) mulu16_sel::v1#7 ← (word) sin16sb::x3#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v1#7 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v1#7 ] ) always clobbers reg byte a +Statement [102] (word) mulu16_sel::return#20 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#20 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#20 ] ) always clobbers reg byte a +Statement [103] (word) sin16sb::x3_6#0 ← (word) mulu16_sel::return#20 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::x3_6#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::x3_6#0 ] ) always clobbers reg byte a +Statement [104] (word) sin16sb::usinx#0 ← (word) sin16sb::x1#0 - (word) sin16sb::x3_6#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::usinx#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::usinx#0 ] ) always clobbers reg byte a +Statement [105] (word) mulu16_sel::v1#8 ← (word) sin16sb::x3#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 ] ) always clobbers reg byte a +Statement [106] (word) mulu16_sel::v2#8 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 mulu16_sel::v2#8 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 mulu16_sel::v2#8 ] ) always clobbers reg byte a +Statement [108] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [109] (word) sin16sb::x4#0 ← (word) mulu16_sel::return#10 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 sin16sb::x4#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 sin16sb::x4#0 ] ) always clobbers reg byte a +Statement [110] (word) mulu16_sel::v1#9 ← (word) sin16sb::x4#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#9 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#9 ] ) always clobbers reg byte a +Statement [111] (word) mulu16_sel::v2#9 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v1#9 mulu16_sel::v2#9 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v1#9 mulu16_sel::v2#9 ] ) always clobbers reg byte a +Statement [113] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [114] (word) sin16sb::x5#0 ← (word) mulu16_sel::return#11 [ sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5#0 ] ) always clobbers reg byte a +Statement [115] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 >> (byte) 4 [ sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5_128#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5_128#0 ] ) always clobbers reg byte a +Statement [116] (word) sin16sb::usinx#1 ← (word) sin16sb::usinx#0 + (word) sin16sb::x5_128#0 [ sin16sb::isUpper#2 sin16sb::usinx#1 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#1 ] ) always clobbers reg byte a +Statement [118] (signed word) sin16sb::sinx#1 ← - (signed word)(word) sin16sb::usinx#1 [ sin16sb::sinx#1 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::sinx#1 ] ) always clobbers reg byte a +Statement [121] (signed word~) sin16sb::return#5 ← (signed word)(word) sin16sb::usinx#1 [ sin16sb::return#5 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::return#5 ] ) always clobbers reg byte a +Statement [123] (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 [ mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ mulu16_sel::select#10 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:62 [ sin16s::isUpper#2 ] -Statement [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 [ mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a -Statement [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#10 mul16u::return#2 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] ) always clobbers reg byte a -Statement [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#10 mulu16_sel::$0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [128] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#10 [ mulu16_sel::$1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [129] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#17 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#17 ] ) always clobbers reg byte a -Statement [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [135] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 [ mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#10 mul16u::return#2 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] ) always clobbers reg byte a +Statement [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#10 mulu16_sel::$0 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [128] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#10 [ mulu16_sel::$1 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [129] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#17 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#17 ] ) always clobbers reg byte a +Statement [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [135] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a Statement [143] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_genb:7::div32u16u:69 [ divr16u::return#2 rem16u#1 ] main:2::sin16s_gen:5::div32u16u:170 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [144] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 rem16u#1 ] main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [145] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a @@ -5545,44 +5592,44 @@ Statement [163] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) m Statement [167] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::return#0 rem16u#1 ] main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::return#0 rem16u#1 ] main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a Statement [171] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:2::sin16s_gen:5 [ div32u16u::return#2 ] ) always clobbers reg byte a Statement [172] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen::step#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 ] ) always clobbers reg byte a -Statement [174] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ) always clobbers reg byte a -Statement [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ) always clobbers reg byte a -Statement [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [184] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [185] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [187] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [188] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [190] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [174] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ) always clobbers reg byte a +Statement [176] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#0 ] ) always clobbers reg byte a +Statement [177] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s_gen::$2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s_gen::$2 ] ) always clobbers reg byte a +Statement [178] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 ] ) always clobbers reg byte a reg byte y +Statement [179] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [180] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [182] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#1 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#1 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [184] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ) always clobbers reg byte a +Statement [185] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#1 ] ) always clobbers reg byte a +Statement [187] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [188] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [190] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:62 [ sin16s::isUpper#2 ] -Statement [191] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [192] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ mulu16_sel::v1#0 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#0 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [193] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ mulu16_sel::v1#0 mulu16_sel::v2#0 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#0 mulu16_sel::v2#0 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [195] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [196] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [197] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ mulu16_sel::v1#1 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#1 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [198] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ mulu16_sel::v1#1 mulu16_sel::v2#1 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#1 mulu16_sel::v2#1 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [200] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [201] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [202] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ mulu16_sel::v1#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [204] (word) mulu16_sel::return#14 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#14 ] ) always clobbers reg byte a -Statement [205] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#14 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [206] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [207] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ mulu16_sel::v1#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [208] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ mulu16_sel::v1#3 mulu16_sel::v2#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#3 mulu16_sel::v2#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [210] (word) mulu16_sel::return#15 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#15 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#15 ] ) always clobbers reg byte a -Statement [211] (word) sin16s::x4#0 ← (word) mulu16_sel::return#15 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [212] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ mulu16_sel::v1#4 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#4 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [213] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ mulu16_sel::v1#4 mulu16_sel::v2#4 sin16s::isUpper#2 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#4 mulu16_sel::v2#4 sin16s::isUpper#2 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [215] (word) mulu16_sel::return#16 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#16 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#16 ] ) always clobbers reg byte a -Statement [216] (word) sin16s::x5#0 ← (word) mulu16_sel::return#16 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [217] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [218] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [220] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [223] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a +Statement [191] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [192] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ mulu16_sel::v1#0 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#0 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [193] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ mulu16_sel::v1#0 mulu16_sel::v2#0 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#0 mulu16_sel::v2#0 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [195] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [196] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [197] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ mulu16_sel::v1#1 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#1 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [198] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ mulu16_sel::v1#1 mulu16_sel::v2#1 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#1 mulu16_sel::v2#1 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [200] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [201] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [202] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ mulu16_sel::v1#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [204] (word) mulu16_sel::return#14 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#14 ] ) always clobbers reg byte a +Statement [205] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#14 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [206] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [207] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ mulu16_sel::v1#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [208] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ mulu16_sel::v1#3 mulu16_sel::v2#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#3 mulu16_sel::v2#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [210] (word) mulu16_sel::return#15 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#15 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#15 ] ) always clobbers reg byte a +Statement [211] (word) sin16s::x4#0 ← (word) mulu16_sel::return#15 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [212] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ mulu16_sel::v1#4 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#4 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [213] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ mulu16_sel::v1#4 mulu16_sel::v2#4 sin16s::isUpper#2 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#4 mulu16_sel::v2#4 sin16s::isUpper#2 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [215] (word) mulu16_sel::return#16 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#16 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#16 ] ) always clobbers reg byte a +Statement [216] (word) sin16s::x5#0 ← (word) mulu16_sel::return#16 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [217] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [218] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [220] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [223] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#5 ] ) always clobbers reg byte a Statement [11] (signed word) main::sw#0 ← *((signed word*) main::st1#2) - *((signed word*) main::st2#2) [ main::st1#2 main::st2#2 print_char_cursor#52 main::i#2 main::sw#0 ] ( main:2 [ main::st1#2 main::st2#2 print_char_cursor#52 main::i#2 main::sw#0 ] ) always clobbers reg byte a reg byte y Statement [12] if((signed word) main::sw#0<(signed byte) 0) goto main::@2 [ main::st1#2 main::st2#2 print_char_cursor#52 main::i#2 main::sw#0 ] ( main:2 [ main::st1#2 main::st2#2 print_char_cursor#52 main::i#2 main::sw#0 ] ) always clobbers reg byte a Statement [16] (signed word) print_sword::w#1 ← (signed word) main::sw#0 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#51 print_sword::w#1 ] ( main:2 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#51 print_sword::w#1 ] ) always clobbers reg byte a @@ -5598,55 +5645,55 @@ Statement [46] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_char_ Statement [48] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#13 print_byte::b#1 ] ( main:2::print_sword:17::print_word:37 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_byte::b#1 ] ) always clobbers reg byte a Statement [52] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ( main:2::print_sword:17::print_word:37::print_byte:47 [ main::st1#2 main::st2#2 main::i#2 print_word::w#0 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] main:2::print_sword:17::print_word:37::print_byte:49 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Statement [55] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#13 print_byte::$2 ] ( main:2::print_sword:17::print_word:37::print_byte:47 [ main::st1#2 main::st2#2 main::i#2 print_word::w#0 print_char_cursor#13 print_byte::$2 ] main:2::print_sword:17::print_word:37::print_byte:49 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_byte::$2 ] ) always clobbers reg byte a -Statement [64] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:9::memset:60 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [66] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:9::memset:60 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [64] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:9::memset:60 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [66] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:9::memset:60 [ memset::dst#1 ] ) always clobbers reg byte a Statement [70] (dword) div32u16u::return#3 ← (dword) div32u16u::return#0 [ div32u16u::return#3 ] ( main:2::sin16s_genb:7 [ div32u16u::return#3 ] ) always clobbers reg byte a Statement [71] (dword) sin16s_genb::step#0 ← (dword) div32u16u::return#3 [ sin16s_genb::step#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 ] ) always clobbers reg byte a -Statement [73] if((word) sin16s_genb::i#2<(const word) main::wavelength#0) goto sin16s_genb::@2 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] ) always clobbers reg byte a -Statement [75] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#2 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#0 ] ) always clobbers reg byte a -Statement [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#0 ] ) always clobbers reg byte a -Statement [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::$3 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::$3 ] ) always clobbers reg byte a -Statement [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#0 ] ) always clobbers reg byte a -Statement [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) always clobbers reg byte a -Statement [83] if((word) sin16sb::x#0<(const word) PI_u4f12#0) goto sin16sb::@1 [ sin16sb::x#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#0 ] ) always clobbers reg byte a -Statement [84] (word) sin16sb::x#1 ← (word) sin16sb::x#0 - (const word) PI_u4f12#0 [ sin16sb::x#1 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#1 ] ) always clobbers reg byte a -Statement [86] if((word) sin16sb::x#4<(const word) PI_HALF_u4f12#0) goto sin16sb::@2 [ sin16sb::x#4 sin16sb::isUpper#2 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#4 sin16sb::isUpper#2 ] ) always clobbers reg byte a -Statement [87] (word) sin16sb::x#2 ← (const word) PI_u4f12#0 - (word) sin16sb::x#4 [ sin16sb::isUpper#2 sin16sb::x#2 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x#2 ] ) always clobbers reg byte a -Statement [89] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 << (byte) 3 [ sin16sb::isUpper#2 sin16sb::x1#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 ] ) always clobbers reg byte a -Statement [90] (word) mulu16_sel::v1#5 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 ] ) always clobbers reg byte a -Statement [91] (word) mulu16_sel::v2#5 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 mulu16_sel::v2#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 mulu16_sel::v2#5 ] ) always clobbers reg byte a -Statement [93] (word) mulu16_sel::return#18 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#18 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#18 ] ) always clobbers reg byte a -Statement [94] (word) sin16sb::x2#0 ← (word) mulu16_sel::return#18 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x2#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x2#0 ] ) always clobbers reg byte a -Statement [95] (word) mulu16_sel::v1#6 ← (word) sin16sb::x2#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 ] ) always clobbers reg byte a -Statement [96] (word) mulu16_sel::v2#6 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 mulu16_sel::v2#6 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 mulu16_sel::v2#6 ] ) always clobbers reg byte a -Statement [98] (word) mulu16_sel::return#19 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#19 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#19 ] ) always clobbers reg byte a -Statement [99] (word) sin16sb::x3#0 ← (word) mulu16_sel::return#19 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 ] ) always clobbers reg byte a -Statement [100] (word) mulu16_sel::v1#7 ← (word) sin16sb::x3#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v1#7 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v1#7 ] ) always clobbers reg byte a -Statement [102] (word) mulu16_sel::return#20 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#20 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#20 ] ) always clobbers reg byte a -Statement [103] (word) sin16sb::x3_6#0 ← (word) mulu16_sel::return#20 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::x3_6#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::x3_6#0 ] ) always clobbers reg byte a -Statement [104] (word) sin16sb::usinx#0 ← (word) sin16sb::x1#0 - (word) sin16sb::x3_6#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::usinx#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::usinx#0 ] ) always clobbers reg byte a -Statement [105] (word) mulu16_sel::v1#8 ← (word) sin16sb::x3#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 ] ) always clobbers reg byte a -Statement [106] (word) mulu16_sel::v2#8 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 mulu16_sel::v2#8 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 mulu16_sel::v2#8 ] ) always clobbers reg byte a -Statement [108] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [109] (word) sin16sb::x4#0 ← (word) mulu16_sel::return#10 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 sin16sb::x4#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 sin16sb::x4#0 ] ) always clobbers reg byte a -Statement [110] (word) mulu16_sel::v1#9 ← (word) sin16sb::x4#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#9 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#9 ] ) always clobbers reg byte a -Statement [111] (word) mulu16_sel::v2#9 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v1#9 mulu16_sel::v2#9 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v1#9 mulu16_sel::v2#9 ] ) always clobbers reg byte a -Statement [113] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [114] (word) sin16sb::x5#0 ← (word) mulu16_sel::return#11 [ sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5#0 ] ) always clobbers reg byte a -Statement [115] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 >> (byte) 4 [ sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5_128#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5_128#0 ] ) always clobbers reg byte a -Statement [116] (word) sin16sb::usinx#1 ← (word) sin16sb::usinx#0 + (word) sin16sb::x5_128#0 [ sin16sb::isUpper#2 sin16sb::usinx#1 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#1 ] ) always clobbers reg byte a -Statement [118] (signed word) sin16sb::sinx#1 ← - (signed word)(word) sin16sb::usinx#1 [ sin16sb::sinx#1 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::sinx#1 ] ) always clobbers reg byte a -Statement [121] (signed word~) sin16sb::return#5 ← (signed word)(word) sin16sb::usinx#1 [ sin16sb::return#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#5 ] ) always clobbers reg byte a -Statement [123] (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 [ mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] ) always clobbers reg byte a -Statement [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 [ mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a -Statement [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#10 mul16u::return#2 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] ) always clobbers reg byte a -Statement [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#10 mulu16_sel::$0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [128] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#10 [ mulu16_sel::$1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [129] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#17 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#17 ] ) always clobbers reg byte a -Statement [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [135] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [73] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#5 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::x#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::x#0 ] ) always clobbers reg byte a +Statement [75] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::return#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::return#0 ] ) always clobbers reg byte a +Statement [76] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16s_genb::$3 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16s_genb::$3 ] ) always clobbers reg byte a +Statement [77] *((signed word*) sin16s_genb::sintab#7) ← (signed word~) sin16s_genb::$3 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 ] ) always clobbers reg byte a reg byte y +Statement [78] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#7 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#0 ] ) always clobbers reg byte a +Statement [79] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#5 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) always clobbers reg byte a +Statement [81] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@2 [ sin16s_genb::step#0 sin16s_genb::i#1 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#1 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) always clobbers reg byte a +Statement [83] if((word) sin16sb::x#0<(const word) PI_u4f12#0) goto sin16sb::@1 [ sin16sb::x#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::x#0 ] ) always clobbers reg byte a +Statement [84] (word) sin16sb::x#1 ← (word) sin16sb::x#0 - (const word) PI_u4f12#0 [ sin16sb::x#1 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::x#1 ] ) always clobbers reg byte a +Statement [86] if((word) sin16sb::x#4<(const word) PI_HALF_u4f12#0) goto sin16sb::@2 [ sin16sb::x#4 sin16sb::isUpper#2 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::x#4 sin16sb::isUpper#2 ] ) always clobbers reg byte a +Statement [87] (word) sin16sb::x#2 ← (const word) PI_u4f12#0 - (word) sin16sb::x#4 [ sin16sb::isUpper#2 sin16sb::x#2 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x#2 ] ) always clobbers reg byte a +Statement [89] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 << (byte) 3 [ sin16sb::isUpper#2 sin16sb::x1#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 ] ) always clobbers reg byte a +Statement [90] (word) mulu16_sel::v1#5 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 ] ) always clobbers reg byte a +Statement [91] (word) mulu16_sel::v2#5 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 mulu16_sel::v2#5 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 mulu16_sel::v2#5 ] ) always clobbers reg byte a +Statement [93] (word) mulu16_sel::return#18 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#18 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#18 ] ) always clobbers reg byte a +Statement [94] (word) sin16sb::x2#0 ← (word) mulu16_sel::return#18 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x2#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x2#0 ] ) always clobbers reg byte a +Statement [95] (word) mulu16_sel::v1#6 ← (word) sin16sb::x2#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 ] ) always clobbers reg byte a +Statement [96] (word) mulu16_sel::v2#6 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 mulu16_sel::v2#6 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 mulu16_sel::v2#6 ] ) always clobbers reg byte a +Statement [98] (word) mulu16_sel::return#19 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#19 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#19 ] ) always clobbers reg byte a +Statement [99] (word) sin16sb::x3#0 ← (word) mulu16_sel::return#19 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 ] ) always clobbers reg byte a +Statement [100] (word) mulu16_sel::v1#7 ← (word) sin16sb::x3#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v1#7 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v1#7 ] ) always clobbers reg byte a +Statement [102] (word) mulu16_sel::return#20 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#20 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#20 ] ) always clobbers reg byte a +Statement [103] (word) sin16sb::x3_6#0 ← (word) mulu16_sel::return#20 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::x3_6#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::x3_6#0 ] ) always clobbers reg byte a +Statement [104] (word) sin16sb::usinx#0 ← (word) sin16sb::x1#0 - (word) sin16sb::x3_6#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::usinx#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::usinx#0 ] ) always clobbers reg byte a +Statement [105] (word) mulu16_sel::v1#8 ← (word) sin16sb::x3#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 ] ) always clobbers reg byte a +Statement [106] (word) mulu16_sel::v2#8 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 mulu16_sel::v2#8 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 mulu16_sel::v2#8 ] ) always clobbers reg byte a +Statement [108] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [109] (word) sin16sb::x4#0 ← (word) mulu16_sel::return#10 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 sin16sb::x4#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 sin16sb::x4#0 ] ) always clobbers reg byte a +Statement [110] (word) mulu16_sel::v1#9 ← (word) sin16sb::x4#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#9 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#9 ] ) always clobbers reg byte a +Statement [111] (word) mulu16_sel::v2#9 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v1#9 mulu16_sel::v2#9 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v1#9 mulu16_sel::v2#9 ] ) always clobbers reg byte a +Statement [113] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [114] (word) sin16sb::x5#0 ← (word) mulu16_sel::return#11 [ sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5#0 ] ) always clobbers reg byte a +Statement [115] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 >> (byte) 4 [ sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5_128#0 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5_128#0 ] ) always clobbers reg byte a +Statement [116] (word) sin16sb::usinx#1 ← (word) sin16sb::usinx#0 + (word) sin16sb::x5_128#0 [ sin16sb::isUpper#2 sin16sb::usinx#1 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#1 ] ) always clobbers reg byte a +Statement [118] (signed word) sin16sb::sinx#1 ← - (signed word)(word) sin16sb::usinx#1 [ sin16sb::sinx#1 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::sinx#1 ] ) always clobbers reg byte a +Statement [121] (signed word~) sin16sb::return#5 ← (signed word)(word) sin16sb::usinx#1 [ sin16sb::return#5 ] ( main:2::sin16s_genb:7::sin16sb:74 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::return#5 ] ) always clobbers reg byte a +Statement [123] (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 [ mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] ) always clobbers reg byte a +Statement [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 [ mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#10 mul16u::return#2 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] ) always clobbers reg byte a +Statement [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#10 mulu16_sel::$0 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [128] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#10 [ mulu16_sel::$1 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [129] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#17 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#17 ] ) always clobbers reg byte a +Statement [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [135] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:74::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#5 sin16s_genb::x#5 sin16s_genb::sintab#7 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:175::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a Statement [143] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_genb:7::div32u16u:69 [ divr16u::return#2 rem16u#1 ] main:2::sin16s_gen:5::div32u16u:170 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [144] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 rem16u#1 ] main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [145] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a @@ -5660,43 +5707,43 @@ Statement [163] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) m Statement [167] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::return#0 rem16u#1 ] main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::return#0 rem16u#1 ] main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a Statement [171] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:2::sin16s_gen:5 [ div32u16u::return#2 ] ) always clobbers reg byte a Statement [172] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen::step#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 ] ) always clobbers reg byte a -Statement [174] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ) always clobbers reg byte a -Statement [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ) always clobbers reg byte a -Statement [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [184] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [185] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [187] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [188] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [190] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y -Statement [191] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [192] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ mulu16_sel::v1#0 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#0 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [193] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ mulu16_sel::v1#0 mulu16_sel::v2#0 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#0 mulu16_sel::v2#0 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [195] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [196] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [197] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ mulu16_sel::v1#1 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#1 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [198] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ mulu16_sel::v1#1 mulu16_sel::v2#1 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#1 mulu16_sel::v2#1 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [200] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [201] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [202] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ mulu16_sel::v1#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [204] (word) mulu16_sel::return#14 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#14 ] ) always clobbers reg byte a -Statement [205] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#14 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [206] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [207] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ mulu16_sel::v1#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [208] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ mulu16_sel::v1#3 mulu16_sel::v2#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#3 mulu16_sel::v2#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [210] (word) mulu16_sel::return#15 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#15 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#15 ] ) always clobbers reg byte a -Statement [211] (word) sin16s::x4#0 ← (word) mulu16_sel::return#15 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [212] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ mulu16_sel::v1#4 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#4 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [213] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ mulu16_sel::v1#4 mulu16_sel::v2#4 sin16s::isUpper#2 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#4 mulu16_sel::v2#4 sin16s::isUpper#2 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [215] (word) mulu16_sel::return#16 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#16 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#16 ] ) always clobbers reg byte a -Statement [216] (word) sin16s::x5#0 ← (word) mulu16_sel::return#16 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [217] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [218] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [220] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [223] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a +Statement [174] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ) always clobbers reg byte a +Statement [176] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#0 ] ) always clobbers reg byte a +Statement [177] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s_gen::$2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s_gen::$2 ] ) always clobbers reg byte a +Statement [178] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 ] ) always clobbers reg byte a reg byte y +Statement [179] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [180] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [182] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#1 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#1 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [184] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ) always clobbers reg byte a +Statement [185] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#1 ] ) always clobbers reg byte a +Statement [187] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [188] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [190] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [191] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [192] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ mulu16_sel::v1#0 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#0 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [193] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ mulu16_sel::v1#0 mulu16_sel::v2#0 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#0 mulu16_sel::v2#0 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [195] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [196] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [197] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ mulu16_sel::v1#1 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#1 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [198] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ mulu16_sel::v1#1 mulu16_sel::v2#1 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#1 mulu16_sel::v2#1 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [200] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [201] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [202] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ mulu16_sel::v1#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [204] (word) mulu16_sel::return#14 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#14 ] ) always clobbers reg byte a +Statement [205] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#14 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [206] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [207] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ mulu16_sel::v1#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [208] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ mulu16_sel::v1#3 mulu16_sel::v2#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#3 mulu16_sel::v2#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [210] (word) mulu16_sel::return#15 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#15 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#15 ] ) always clobbers reg byte a +Statement [211] (word) sin16s::x4#0 ← (word) mulu16_sel::return#15 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [212] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ mulu16_sel::v1#4 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#4 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [213] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ mulu16_sel::v1#4 mulu16_sel::v2#4 sin16s::isUpper#2 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 mulu16_sel::v1#4 mulu16_sel::v2#4 sin16s::isUpper#2 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [215] (word) mulu16_sel::return#16 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#16 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#16 ] ) always clobbers reg byte a +Statement [216] (word) sin16s::x5#0 ← (word) mulu16_sel::return#16 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [217] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [218] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [220] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [223] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:175 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#5 ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:4 [ main::st2#2 main::st2#1 ] : zp ZP_WORD:4 , Potential registers zp ZP_BYTE:6 [ main::i#2 main::i#1 ] : zp ZP_BYTE:6 , reg byte x , @@ -5705,10 +5752,10 @@ Potential registers zp ZP_WORD:9 [ print_sword::w#4 print_sword::w#0 print_sword Potential registers zp ZP_BYTE:11 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:12 [ print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] : zp ZP_WORD:12 , Potential registers zp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:14 , reg byte x , -Potential registers zp ZP_WORD:15 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:15 , -Potential registers zp ZP_WORD:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] : zp ZP_WORD:17 , -Potential registers zp ZP_DWORD:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] : zp ZP_DWORD:19 , -Potential registers zp ZP_WORD:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] : zp ZP_WORD:23 , +Potential registers zp ZP_WORD:15 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:15 , +Potential registers zp ZP_WORD:17 [ sin16s_genb::i#5 sin16s_genb::i#1 ] : zp ZP_WORD:17 , +Potential registers zp ZP_DWORD:19 [ sin16s_genb::x#5 sin16s_genb::x#1 ] : zp ZP_DWORD:19 , +Potential registers zp ZP_WORD:23 [ sin16s_genb::sintab#7 sin16s_genb::sintab#0 ] : zp ZP_WORD:23 , Potential registers zp ZP_BYTE:25 [ sin16sb::isUpper#2 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , Potential registers zp ZP_WORD:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] : zp ZP_WORD:26 , Potential registers zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] : zp ZP_WORD:28 , @@ -5723,9 +5770,9 @@ Potential registers zp ZP_WORD:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem# Potential registers zp ZP_WORD:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp ZP_WORD:49 , Potential registers zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:51 , Potential registers zp ZP_BYTE:53 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:53 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:54 [ sin16s_gen::i#2 sin16s_gen::i#1 ] : zp ZP_WORD:54 , -Potential registers zp ZP_DWORD:56 [ sin16s_gen::x#2 sin16s_gen::x#1 ] : zp ZP_DWORD:56 , -Potential registers zp ZP_WORD:60 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] : zp ZP_WORD:60 , +Potential registers zp ZP_WORD:54 [ sin16s_gen::i#5 sin16s_gen::i#1 ] : zp ZP_WORD:54 , +Potential registers zp ZP_DWORD:56 [ sin16s_gen::x#5 sin16s_gen::x#1 ] : zp ZP_DWORD:56 , +Potential registers zp ZP_WORD:60 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] : zp ZP_WORD:60 , Potential registers zp ZP_BYTE:62 [ sin16s::isUpper#2 ] : zp ZP_BYTE:62 , reg byte x , Potential registers zp ZP_DWORD:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp ZP_DWORD:63 , Potential registers zp ZP_WORD:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp ZP_WORD:67 , @@ -5792,10 +5839,10 @@ Uplift Scope [] 177.86: zp ZP_WORD:12 [ print_char_cursor#35 print_char_cursor#5 Uplift Scope [mulu16_sel] 46: zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] 41: zp ZP_WORD:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] 4: zp ZP_WORD:89 [ mulu16_sel::return#18 ] 4: zp ZP_WORD:93 [ mulu16_sel::return#19 ] 4: zp ZP_WORD:97 [ mulu16_sel::return#20 ] 4: zp ZP_WORD:103 [ mulu16_sel::return#10 ] 4: zp ZP_WORD:107 [ mulu16_sel::return#11 ] 4: zp ZP_DWORD:119 [ mulu16_sel::$0 ] 4: zp ZP_DWORD:123 [ mulu16_sel::$1 ] 4: zp ZP_WORD:164 [ mulu16_sel::return#0 ] 4: zp ZP_WORD:168 [ mulu16_sel::return#1 ] 4: zp ZP_WORD:172 [ mulu16_sel::return#14 ] 4: zp ZP_WORD:178 [ mulu16_sel::return#15 ] 4: zp ZP_WORD:182 [ mulu16_sel::return#16 ] 1.83: zp ZP_WORD:127 [ mulu16_sel::return#17 ] 0.33: zp ZP_BYTE:34 [ mulu16_sel::select#10 ] Uplift Scope [sin16s] 27.5: zp ZP_DWORD:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp ZP_WORD:154 [ sin16s::return#0 ] 13: zp ZP_WORD:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp ZP_DWORD:158 [ sin16s::$4 ] 4: zp ZP_WORD:166 [ sin16s::x2#0 ] 4: zp ZP_WORD:174 [ sin16s::x3_6#0 ] 4: zp ZP_WORD:180 [ sin16s::x4#0 ] 4: zp ZP_WORD:184 [ sin16s::x5#0 ] 4: zp ZP_WORD:186 [ sin16s::x5_128#0 ] 1: zp ZP_WORD:170 [ sin16s::x3#0 ] 1: zp ZP_WORD:188 [ sin16s::usinx#1 ] 0.64: zp ZP_WORD:162 [ sin16s::x1#0 ] 0.33: zp ZP_WORD:176 [ sin16s::usinx#0 ] 0.06: zp ZP_BYTE:62 [ sin16s::isUpper#2 ] Uplift Scope [sin16sb] 27.5: zp ZP_WORD:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] 22: zp ZP_WORD:83 [ sin16sb::return#0 ] 13: zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] 4: zp ZP_WORD:91 [ sin16sb::x2#0 ] 4: zp ZP_WORD:99 [ sin16sb::x3_6#0 ] 4: zp ZP_WORD:105 [ sin16sb::x4#0 ] 4: zp ZP_WORD:109 [ sin16sb::x5#0 ] 4: zp ZP_WORD:111 [ sin16sb::x5_128#0 ] 1: zp ZP_WORD:95 [ sin16sb::x3#0 ] 1: zp ZP_WORD:113 [ sin16sb::usinx#1 ] 0.64: zp ZP_WORD:87 [ sin16sb::x1#0 ] 0.33: zp ZP_WORD:101 [ sin16sb::usinx#0 ] 0.06: zp ZP_BYTE:25 [ sin16sb::isUpper#2 ] -Uplift Scope [sin16s_gen] 25.67: zp ZP_WORD:54 [ sin16s_gen::i#2 sin16s_gen::i#1 ] 22: zp ZP_WORD:156 [ sin16s_gen::$2 ] 15.12: zp ZP_DWORD:56 [ sin16s_gen::x#2 sin16s_gen::x#1 ] 12.05: zp ZP_WORD:60 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] 1.18: zp ZP_DWORD:150 [ sin16s_gen::step#0 ] -Uplift Scope [sin16s_genb] 25.67: zp ZP_WORD:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] 22: zp ZP_WORD:85 [ sin16s_genb::$3 ] 15.12: zp ZP_DWORD:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] 12.05: zp ZP_WORD:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] 1.18: zp ZP_DWORD:79 [ sin16s_genb::step#0 ] +Uplift Scope [sin16s_gen] 22: zp ZP_WORD:156 [ sin16s_gen::$2 ] 19.25: zp ZP_WORD:54 [ sin16s_gen::i#5 sin16s_gen::i#1 ] 12.05: zp ZP_DWORD:56 [ sin16s_gen::x#5 sin16s_gen::x#1 ] 11: zp ZP_WORD:60 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] 1.18: zp ZP_DWORD:150 [ sin16s_gen::step#0 ] +Uplift Scope [sin16s_genb] 22: zp ZP_WORD:85 [ sin16s_genb::$3 ] 19.25: zp ZP_WORD:17 [ sin16s_genb::i#5 sin16s_genb::i#1 ] 12.05: zp ZP_DWORD:19 [ sin16s_genb::x#5 sin16s_genb::x#1 ] 11: zp ZP_WORD:23 [ sin16s_genb::sintab#7 sin16s_genb::sintab#0 ] 1.18: zp ZP_DWORD:79 [ sin16s_genb::step#0 ] Uplift Scope [main] 18.33: zp ZP_BYTE:6 [ main::i#2 main::i#1 ] 10.33: zp ZP_WORD:4 [ main::st2#2 main::st2#1 ] 8.8: zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] 6.6: zp ZP_WORD:69 [ main::sw#0 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:15 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [memset] 33: zp ZP_WORD:15 [ memset::dst#4 memset::dst#1 ] Uplift Scope [print_byte] 10: zp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:73 [ print_byte::$0 ] 4: zp ZP_BYTE:74 [ print_byte::$2 ] Uplift Scope [div32u16u] 4: zp ZP_DWORD:75 [ div32u16u::return#3 ] 4: zp ZP_WORD:136 [ div32u16u::quotient_lo#0 ] 4: zp ZP_DWORD:146 [ div32u16u::return#2 ] 1.5: zp ZP_DWORD:138 [ div32u16u::return#0 ] 0.8: zp ZP_WORD:132 [ div32u16u::quotient_hi#0 ] Uplift Scope [print_char] 14: zp ZP_BYTE:11 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] @@ -5804,28 +5851,28 @@ Uplift Scope [print_word] 2: zp ZP_WORD:71 [ print_word::w#0 ] Uplift Scope [RADIX] Uplift Scope [print_cls] -Uplifting [mul16u] best 29962 combination zp ZP_DWORD:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:41 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:115 [ mul16u::return#2 ] zp ZP_WORD:45 [ mul16u::b#0 ] -Uplifting [print_str] best 29962 combination zp ZP_WORD:7 [ print_str::str#3 print_str::str#5 print_str::str#0 ] -Uplifting [divr16u] best 29752 combination zp ZP_WORD:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:130 [ divr16u::return#2 ] zp ZP_WORD:134 [ divr16u::return#3 ] -Uplifting [] best 29752 combination zp ZP_WORD:12 [ print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] zp ZP_WORD:144 [ rem16u#1 ] -Uplifting [mulu16_sel] best 29721 combination zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] zp ZP_WORD:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] zp ZP_WORD:89 [ mulu16_sel::return#18 ] zp ZP_WORD:93 [ mulu16_sel::return#19 ] zp ZP_WORD:97 [ mulu16_sel::return#20 ] zp ZP_WORD:103 [ mulu16_sel::return#10 ] zp ZP_WORD:107 [ mulu16_sel::return#11 ] zp ZP_DWORD:119 [ mulu16_sel::$0 ] zp ZP_DWORD:123 [ mulu16_sel::$1 ] zp ZP_WORD:164 [ mulu16_sel::return#0 ] zp ZP_WORD:168 [ mulu16_sel::return#1 ] zp ZP_WORD:172 [ mulu16_sel::return#14 ] zp ZP_WORD:178 [ mulu16_sel::return#15 ] zp ZP_WORD:182 [ mulu16_sel::return#16 ] zp ZP_WORD:127 [ mulu16_sel::return#17 ] reg byte x [ mulu16_sel::select#10 ] -Uplifting [sin16s] best 29721 combination zp ZP_DWORD:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:154 [ sin16s::return#0 ] zp ZP_WORD:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:158 [ sin16s::$4 ] zp ZP_WORD:166 [ sin16s::x2#0 ] zp ZP_WORD:174 [ sin16s::x3_6#0 ] zp ZP_WORD:180 [ sin16s::x4#0 ] zp ZP_WORD:184 [ sin16s::x5#0 ] zp ZP_WORD:186 [ sin16s::x5_128#0 ] zp ZP_WORD:170 [ sin16s::x3#0 ] zp ZP_WORD:188 [ sin16s::usinx#1 ] zp ZP_WORD:162 [ sin16s::x1#0 ] zp ZP_WORD:176 [ sin16s::usinx#0 ] zp ZP_BYTE:62 [ sin16s::isUpper#2 ] -Uplifting [sin16sb] best 29712 combination zp ZP_WORD:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] zp ZP_WORD:83 [ sin16sb::return#0 ] zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] zp ZP_WORD:91 [ sin16sb::x2#0 ] zp ZP_WORD:99 [ sin16sb::x3_6#0 ] zp ZP_WORD:105 [ sin16sb::x4#0 ] zp ZP_WORD:109 [ sin16sb::x5#0 ] zp ZP_WORD:111 [ sin16sb::x5_128#0 ] zp ZP_WORD:95 [ sin16sb::x3#0 ] zp ZP_WORD:113 [ sin16sb::usinx#1 ] zp ZP_WORD:87 [ sin16sb::x1#0 ] zp ZP_WORD:101 [ sin16sb::usinx#0 ] reg byte y [ sin16sb::isUpper#2 ] -Uplifting [sin16s_gen] best 29712 combination zp ZP_WORD:54 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_WORD:156 [ sin16s_gen::$2 ] zp ZP_DWORD:56 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:60 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:150 [ sin16s_gen::step#0 ] -Uplifting [sin16s_genb] best 29712 combination zp ZP_WORD:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] zp ZP_WORD:85 [ sin16s_genb::$3 ] zp ZP_DWORD:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] zp ZP_WORD:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] zp ZP_DWORD:79 [ sin16s_genb::step#0 ] -Uplifting [main] best 29622 combination reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:4 [ main::st2#2 main::st2#1 ] zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:69 [ main::sw#0 ] -Uplifting [memset] best 29622 combination zp ZP_WORD:15 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_byte] best 29614 combination zp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] -Uplifting [div32u16u] best 29614 combination zp ZP_DWORD:75 [ div32u16u::return#3 ] zp ZP_WORD:136 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:146 [ div32u16u::return#2 ] zp ZP_DWORD:138 [ div32u16u::return#0 ] zp ZP_WORD:132 [ div32u16u::quotient_hi#0 ] -Uplifting [print_char] best 29599 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] -Uplifting [print_sword] best 29599 combination zp ZP_WORD:9 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] -Uplifting [print_word] best 29599 combination zp ZP_WORD:71 [ print_word::w#0 ] -Uplifting [RADIX] best 29599 combination -Uplifting [print_cls] best 29599 combination +Uplifting [mul16u] best 30052 combination zp ZP_DWORD:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:41 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:115 [ mul16u::return#2 ] zp ZP_WORD:45 [ mul16u::b#0 ] +Uplifting [print_str] best 30052 combination zp ZP_WORD:7 [ print_str::str#3 print_str::str#5 print_str::str#0 ] +Uplifting [divr16u] best 29842 combination zp ZP_WORD:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:130 [ divr16u::return#2 ] zp ZP_WORD:134 [ divr16u::return#3 ] +Uplifting [] best 29842 combination zp ZP_WORD:12 [ print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] zp ZP_WORD:144 [ rem16u#1 ] +Uplifting [mulu16_sel] best 29811 combination zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] zp ZP_WORD:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] zp ZP_WORD:89 [ mulu16_sel::return#18 ] zp ZP_WORD:93 [ mulu16_sel::return#19 ] zp ZP_WORD:97 [ mulu16_sel::return#20 ] zp ZP_WORD:103 [ mulu16_sel::return#10 ] zp ZP_WORD:107 [ mulu16_sel::return#11 ] zp ZP_DWORD:119 [ mulu16_sel::$0 ] zp ZP_DWORD:123 [ mulu16_sel::$1 ] zp ZP_WORD:164 [ mulu16_sel::return#0 ] zp ZP_WORD:168 [ mulu16_sel::return#1 ] zp ZP_WORD:172 [ mulu16_sel::return#14 ] zp ZP_WORD:178 [ mulu16_sel::return#15 ] zp ZP_WORD:182 [ mulu16_sel::return#16 ] zp ZP_WORD:127 [ mulu16_sel::return#17 ] reg byte x [ mulu16_sel::select#10 ] +Uplifting [sin16s] best 29811 combination zp ZP_DWORD:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:154 [ sin16s::return#0 ] zp ZP_WORD:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:158 [ sin16s::$4 ] zp ZP_WORD:166 [ sin16s::x2#0 ] zp ZP_WORD:174 [ sin16s::x3_6#0 ] zp ZP_WORD:180 [ sin16s::x4#0 ] zp ZP_WORD:184 [ sin16s::x5#0 ] zp ZP_WORD:186 [ sin16s::x5_128#0 ] zp ZP_WORD:170 [ sin16s::x3#0 ] zp ZP_WORD:188 [ sin16s::usinx#1 ] zp ZP_WORD:162 [ sin16s::x1#0 ] zp ZP_WORD:176 [ sin16s::usinx#0 ] zp ZP_BYTE:62 [ sin16s::isUpper#2 ] +Uplifting [sin16sb] best 29802 combination zp ZP_WORD:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] zp ZP_WORD:83 [ sin16sb::return#0 ] zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] zp ZP_WORD:91 [ sin16sb::x2#0 ] zp ZP_WORD:99 [ sin16sb::x3_6#0 ] zp ZP_WORD:105 [ sin16sb::x4#0 ] zp ZP_WORD:109 [ sin16sb::x5#0 ] zp ZP_WORD:111 [ sin16sb::x5_128#0 ] zp ZP_WORD:95 [ sin16sb::x3#0 ] zp ZP_WORD:113 [ sin16sb::usinx#1 ] zp ZP_WORD:87 [ sin16sb::x1#0 ] zp ZP_WORD:101 [ sin16sb::usinx#0 ] reg byte y [ sin16sb::isUpper#2 ] +Uplifting [sin16s_gen] best 29802 combination zp ZP_WORD:156 [ sin16s_gen::$2 ] zp ZP_WORD:54 [ sin16s_gen::i#5 sin16s_gen::i#1 ] zp ZP_DWORD:56 [ sin16s_gen::x#5 sin16s_gen::x#1 ] zp ZP_WORD:60 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] zp ZP_DWORD:150 [ sin16s_gen::step#0 ] +Uplifting [sin16s_genb] best 29802 combination zp ZP_WORD:85 [ sin16s_genb::$3 ] zp ZP_WORD:17 [ sin16s_genb::i#5 sin16s_genb::i#1 ] zp ZP_DWORD:19 [ sin16s_genb::x#5 sin16s_genb::x#1 ] zp ZP_WORD:23 [ sin16s_genb::sintab#7 sin16s_genb::sintab#0 ] zp ZP_DWORD:79 [ sin16s_genb::step#0 ] +Uplifting [main] best 29712 combination reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:4 [ main::st2#2 main::st2#1 ] zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:69 [ main::sw#0 ] +Uplifting [memset] best 29712 combination zp ZP_WORD:15 [ memset::dst#4 memset::dst#1 ] +Uplifting [print_byte] best 29704 combination zp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [div32u16u] best 29704 combination zp ZP_DWORD:75 [ div32u16u::return#3 ] zp ZP_WORD:136 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:146 [ div32u16u::return#2 ] zp ZP_DWORD:138 [ div32u16u::return#0 ] zp ZP_WORD:132 [ div32u16u::quotient_hi#0 ] +Uplifting [print_char] best 29689 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] +Uplifting [print_sword] best 29689 combination zp ZP_WORD:9 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] +Uplifting [print_word] best 29689 combination zp ZP_WORD:71 [ print_word::w#0 ] +Uplifting [RADIX] best 29689 combination +Uplifting [print_cls] best 29689 combination Attempting to uplift remaining variables inzp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Uplifting [print_byte] best 29599 combination zp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Uplifting [print_byte] best 29689 combination zp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:62 [ sin16s::isUpper#2 ] -Uplifting [sin16s] best 29599 combination zp ZP_BYTE:62 [ sin16s::isUpper#2 ] +Uplifting [sin16s] best 29689 combination zp ZP_BYTE:62 [ sin16s::isUpper#2 ] Coalescing zero page register [ zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] ] with [ zp ZP_WORD:113 [ sin16sb::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] ] with [ zp ZP_WORD:95 [ sin16sb::x3#0 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 ] ] with [ zp ZP_WORD:170 [ sin16s::x3#0 ] ] - score: 2 @@ -5872,35 +5919,35 @@ Coalescing zero page register [ zp ZP_WORD:89 [ mulu16_sel::return#18 mulu16_sel Coalescing zero page register [ zp ZP_WORD:89 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 ] ] with [ zp ZP_WORD:182 [ mulu16_sel::return#16 sin16s::x5#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:89 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 ] ] with [ zp ZP_WORD:111 [ sin16sb::x5_128#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:89 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 ] ] with [ zp ZP_WORD:186 [ sin16s::x5_128#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:15 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] ] -Coalescing zero page register [ zp ZP_WORD:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] ] with [ zp ZP_WORD:4 [ main::st2#2 main::st2#1 ] ] -Coalescing zero page register [ zp ZP_WORD:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] ] with [ zp ZP_WORD:7 [ print_str::str#3 print_str::str#5 print_str::str#0 ] ] +Coalescing zero page register [ zp ZP_WORD:15 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] ] +Coalescing zero page register [ zp ZP_WORD:17 [ sin16s_genb::i#5 sin16s_genb::i#1 ] ] with [ zp ZP_WORD:4 [ main::st2#2 main::st2#1 ] ] +Coalescing zero page register [ zp ZP_WORD:23 [ sin16s_genb::sintab#7 sin16s_genb::sintab#0 ] ] with [ zp ZP_WORD:7 [ print_str::str#3 print_str::str#5 print_str::str#0 ] ] Coalescing zero page register [ zp ZP_WORD:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 ] ] with [ zp ZP_WORD:9 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] ] Coalescing zero page register [ zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 sin16sb::usinx#0 ] ] with [ zp ZP_WORD:12 [ print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] ] Coalescing zero page register [ zp ZP_WORD:47 [ 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 ] ] with [ zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 ] ] Coalescing zero page register [ zp ZP_WORD:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp ZP_WORD:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mul16u::b#0 ] ] Coalescing zero page register [ zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp ZP_WORD:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] -Coalescing zero page register [ zp ZP_DWORD:56 [ sin16s_gen::x#2 sin16s_gen::x#1 ] ] with [ zp ZP_DWORD:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] ] +Coalescing zero page register [ zp ZP_DWORD:56 [ sin16s_gen::x#5 sin16s_gen::x#1 ] ] with [ zp ZP_DWORD:19 [ sin16s_genb::x#5 sin16s_genb::x#1 ] ] Coalescing zero page register [ zp ZP_BYTE:62 [ sin16s::isUpper#2 ] ] with [ zp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] ] Coalescing zero page register [ zp ZP_DWORD:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] ] with [ zp ZP_DWORD:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] ] -Coalescing zero page register [ zp ZP_WORD:132 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:54 [ sin16s_gen::i#2 sin16s_gen::i#1 ] ] -Coalescing zero page register [ zp ZP_WORD:47 [ 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 mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 ] ] with [ zp ZP_WORD:15 [ memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] ] -Coalescing zero page register [ zp ZP_WORD:60 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] with [ zp ZP_WORD:17 [ sin16s_genb::i#2 sin16s_genb::i#1 main::st2#2 main::st2#1 ] ] -Coalescing zero page register [ zp ZP_WORD:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] with [ zp ZP_WORD:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 print_str::str#3 print_str::str#5 print_str::str#0 ] ] +Coalescing zero page register [ zp ZP_WORD:132 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:54 [ sin16s_gen::i#5 sin16s_gen::i#1 ] ] +Coalescing zero page register [ zp ZP_WORD:47 [ 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 mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 ] ] with [ zp ZP_WORD:15 [ memset::dst#4 memset::dst#1 main::st1#2 main::st1#1 ] ] +Coalescing zero page register [ zp ZP_WORD:60 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] ] with [ zp ZP_WORD:17 [ sin16s_genb::i#5 sin16s_genb::i#1 main::st2#2 main::st2#1 ] ] +Coalescing zero page register [ zp ZP_WORD:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] with [ zp ZP_WORD:23 [ sin16s_genb::sintab#7 sin16s_genb::sintab#0 print_str::str#3 print_str::str#5 print_str::str#0 ] ] Coalescing zero page register [ zp ZP_WORD:89 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 sin16s::x5_128#0 ] ] with [ zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] -Coalescing zero page register [ zp ZP_WORD:132 [ div32u16u::quotient_hi#0 sin16s_gen::i#2 sin16s_gen::i#1 ] ] with [ zp ZP_WORD:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] ] +Coalescing zero page register [ zp ZP_WORD:132 [ div32u16u::quotient_hi#0 sin16s_gen::i#5 sin16s_gen::i#1 ] ] with [ zp ZP_WORD:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] ] Coalescing zero page register [ zp ZP_WORD:162 [ sin16s::x1#0 ] ] with [ zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 sin16sb::usinx#0 print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] ] Allocated (was zp ZP_DWORD:41) zp ZP_DWORD:2 [ mul16u::mb#2 mul16u::mb#1 ] -Allocated (was zp ZP_WORD:47) zp ZP_WORD:6 [ 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 mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] +Allocated (was zp ZP_WORD:47) zp ZP_WORD:6 [ 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 mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 memset::dst#4 memset::dst#1 main::st1#2 main::st1#1 ] Allocated (was zp ZP_WORD:49) zp ZP_WORD:8 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mul16u::b#0 ] -Allocated (was zp ZP_DWORD:56) zp ZP_DWORD:10 [ sin16s_gen::x#2 sin16s_gen::x#1 sin16s_genb::x#2 sin16s_genb::x#1 ] -Allocated (was zp ZP_WORD:60) zp ZP_WORD:14 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 sin16s_genb::i#2 sin16s_genb::i#1 main::st2#2 main::st2#1 ] +Allocated (was zp ZP_DWORD:56) zp ZP_DWORD:10 [ sin16s_gen::x#5 sin16s_gen::x#1 sin16s_genb::x#5 sin16s_genb::x#1 ] +Allocated (was zp ZP_WORD:60) zp ZP_WORD:14 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 sin16s_genb::i#5 sin16s_genb::i#1 main::st2#2 main::st2#1 ] Allocated (was zp ZP_BYTE:62) zp ZP_BYTE:16 [ sin16s::isUpper#2 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Allocated (was zp ZP_DWORD:63) zp ZP_DWORD:17 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] -Allocated (was zp ZP_WORD:67) zp ZP_WORD:21 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 sin16s_genb::sintab#2 sin16s_genb::sintab#0 print_str::str#3 print_str::str#5 print_str::str#0 ] +Allocated (was zp ZP_WORD:67) zp ZP_WORD:21 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 sin16s_genb::sintab#7 sin16s_genb::sintab#0 print_str::str#3 print_str::str#5 print_str::str#0 ] Allocated (was zp ZP_DWORD:75) zp ZP_DWORD:23 [ div32u16u::return#3 sin16s_genb::step#0 div32u16u::return#0 div32u16u::return#2 sin16s_gen::step#0 ] Allocated (was zp ZP_WORD:89) zp ZP_WORD:27 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] -Allocated (was zp ZP_WORD:132) zp ZP_WORD:29 [ div32u16u::quotient_hi#0 sin16s_gen::i#2 sin16s_gen::i#1 sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] +Allocated (was zp ZP_WORD:132) zp ZP_WORD:29 [ div32u16u::quotient_hi#0 sin16s_gen::i#5 sin16s_gen::i#1 sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] Allocated (was zp ZP_WORD:162) zp ZP_WORD:31 [ sin16s::x1#0 sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 sin16sb::usinx#0 print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] ASSEMBLER BEFORE OPTIMIZATION @@ -6297,43 +6344,44 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = 6 - // [63] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [63] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [63] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [63] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [64] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [63] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [66] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [64] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [67] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [65] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [63] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [63] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [66] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #sin16s_genb::@1] - b1_from_b3: - // [72] phi (signed word*) sin16s_genb::sintab#2 = (const signed word[$78]) main::sintab2#0 [phi:sin16s_genb::@3->sin16s_genb::@1#0] -- pwsz1=pwsc1 + // [72] phi from sin16s_genb::@3 to sin16s_genb::@2 [phi:sin16s_genb::@3->sin16s_genb::@2] + b2_from_b3: + // [72] phi (signed word*) sin16s_genb::sintab#7 = (const signed word[$78]) main::sintab2#0 [phi:sin16s_genb::@3->sin16s_genb::@2#0] -- pwsz1=pwsc1 lda #main.sintab2 sta sintab+1 - // [72] phi (dword) sin16s_genb::x#2 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#1] -- vduz1=vbuc1 + // [72] phi (dword) sin16s_genb::x#5 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [72] phi (word) sin16s_genb::i#2 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#2] -- vwuz1=vbuc1 + // [72] phi (word) sin16s_genb::i#5 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_genb::@1 - b1: - // [73] if((word) sin16s_genb::i#2<(const word) main::wavelength#0) goto sin16s_genb::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_genb::@2] + b2_from_b1: + // [72] phi (signed word*) sin16s_genb::sintab#7 = (signed word*) sin16s_genb::sintab#0 [phi:sin16s_genb::@1->sin16s_genb::@2#0] -- register_copy + // [72] phi (dword) sin16s_genb::x#5 = (dword) sin16s_genb::x#1 [phi:sin16s_genb::@1->sin16s_genb::@2#1] -- register_copy + // [72] phi (word) sin16s_genb::i#5 = (word) sin16s_genb::i#1 [phi:sin16s_genb::@1->sin16s_genb::@2#2] -- register_copy + jmp b2 // sin16s_genb::@2 b2: - // [75] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#2 -- vwuz1=_hi_vduz2 + // [73] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#5 -- vwuz1=_hi_vduz2 lda x+2 sta sin16sb.x lda x+3 sta sin16sb.x+1 - // [76] call sin16sb + // [74] call sin16sb jsr sin16sb - // [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 + // [75] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 jmp b4 // sin16s_genb::@4 b4: - // [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 - // [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 -- _deref_pwsz1=vwsz2 + // [76] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 + // [77] *((signed word*) sin16s_genb::sintab#7) ← (signed word~) sin16s_genb::$3 -- _deref_pwsz1=vwsz2 ldy #0 lda _3 sta (sintab),y iny lda _3+1 sta (sintab),y - // [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [78] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#7 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -6421,7 +6458,7 @@ sin16s_genb: { bcc !+ inc sintab+1 !: - // [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 -- vduz1=vduz1_plus_vduz2 + // [79] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#5 + (dword) sin16s_genb::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -6435,17 +6472,29 @@ sin16s_genb: { lda x+3 adc step+3 sta x+3 - // [82] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2 -- vwuz1=_inc_vwuz1 + // [80] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#5 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [72] phi from sin16s_genb::@4 to sin16s_genb::@1 [phi:sin16s_genb::@4->sin16s_genb::@1] - b1_from_b4: - // [72] phi (signed word*) sin16s_genb::sintab#2 = (signed word*) sin16s_genb::sintab#0 [phi:sin16s_genb::@4->sin16s_genb::@1#0] -- register_copy - // [72] phi (dword) sin16s_genb::x#2 = (dword) sin16s_genb::x#1 [phi:sin16s_genb::@4->sin16s_genb::@1#1] -- register_copy - // [72] phi (word) sin16s_genb::i#2 = (word) sin16s_genb::i#1 [phi:sin16s_genb::@4->sin16s_genb::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_genb::@1 + b1: + // [81] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #sin16s_gen::@1] - b1_from_b3: - // [173] phi (signed word*) sin16s_gen::sintab#2 = (const signed word[$78]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- pwsz1=pwsc1 + // [173] phi from sin16s_gen::@3 to sin16s_gen::@2 [phi:sin16s_gen::@3->sin16s_gen::@2] + b2_from_b3: + // [173] phi (signed word*) sin16s_gen::sintab#7 = (const signed word[$78]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@2#0] -- pwsz1=pwsc1 lda #main.sintab1 sta sintab+1 - // [173] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 + // [173] phi (dword) sin16s_gen::x#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [173] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [173] phi (word) sin16s_gen::i#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen::@1 - b1: - // [174] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen::@2] + b2_from_b1: + // [173] phi (signed word*) sin16s_gen::sintab#7 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@1->sin16s_gen::@2#0] -- register_copy + // [173] phi (dword) sin16s_gen::x#5 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@1->sin16s_gen::@2#1] -- register_copy + // [173] phi (word) sin16s_gen::i#5 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@1->sin16s_gen::@2#2] -- register_copy + jmp b2 // sin16s_gen::@2 b2: - // [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2 + // [174] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -7077,21 +7115,21 @@ sin16s_gen: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [177] call sin16s + // [175] call sin16s jsr sin16s - // [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [176] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 jmp b4 // sin16s_gen::@4 b4: - // [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 - // [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 + // [177] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 + // [178] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 ldy #0 lda _2 sta (sintab),y iny lda _2+1 sta (sintab),y - // [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [179] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -7099,7 +7137,7 @@ sin16s_gen: { bcc !+ inc sintab+1 !: - // [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 + // [180] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -7113,17 +7151,29 @@ sin16s_gen: { lda x+3 adc step+3 sta x+3 - // [183] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 -- vwuz1=_inc_vwuz1 + // [181] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#5 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [173] phi from sin16s_gen::@4 to sin16s_gen::@1 [phi:sin16s_gen::@4->sin16s_gen::@1] - b1_from_b4: - // [173] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy - // [173] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy - // [173] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen::@1 + b1: + // [182] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #memset::@1] - // [63] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [63] phi from memset to memset::@2 [phi:memset->memset::@2] + // [63] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [63] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [63] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [64] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [64] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [65] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [66] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -8433,24 +8511,8 @@ memset: { bne b2 // memset::@return // } - // [65] return + // [67] return rts - // memset::@2 - b2: - // *dst = c - // [66] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [67] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [63] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [63] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // sin16s_genb // Generate signed (large) word sinus table - on the full -$7fff - $7fff range @@ -8472,53 +8534,40 @@ sin16s_genb: { // sin16s_genb::@3 // step = div32u16u(PI2_u4f28, wavelength) // [71] (dword) sin16s_genb::step#0 ← (dword) div32u16u::return#3 - // [72] phi from sin16s_genb::@3 to sin16s_genb::@1 [phi:sin16s_genb::@3->sin16s_genb::@1] - // [72] phi (signed word*) sin16s_genb::sintab#2 = (const signed word[$78]) main::sintab2#0 [phi:sin16s_genb::@3->sin16s_genb::@1#0] -- pwsz1=pwsc1 + // [72] phi from sin16s_genb::@3 to sin16s_genb::@2 [phi:sin16s_genb::@3->sin16s_genb::@2] + // [72] phi (signed word*) sin16s_genb::sintab#7 = (const signed word[$78]) main::sintab2#0 [phi:sin16s_genb::@3->sin16s_genb::@2#0] -- pwsz1=pwsc1 lda #main.sintab2 sta sintab+1 - // [72] phi (dword) sin16s_genb::x#2 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#1] -- vduz1=vbuc1 + // [72] phi (dword) sin16s_genb::x#5 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@2#1] -- vduz1=vbuc1 lda #0 sta x sta x+1 sta x+2 sta x+3 - // [72] phi (word) sin16s_genb::i#2 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#2] -- vwuz1=vbuc1 + // [72] phi (word) sin16s_genb::i#5 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@2#2] -- vwuz1=vbuc1 sta i sta i+1 - // u[4.28] - // sin16s_genb::@1 - b1: - // for( word i=0; imain.wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_genb::@2] + // [72] phi (signed word*) sin16s_genb::sintab#7 = (signed word*) sin16s_genb::sintab#0 [phi:sin16s_genb::@1->sin16s_genb::@2#0] -- register_copy + // [72] phi (dword) sin16s_genb::x#5 = (dword) sin16s_genb::x#1 [phi:sin16s_genb::@1->sin16s_genb::@2#1] -- register_copy + // [72] phi (word) sin16s_genb::i#5 = (word) sin16s_genb::i#1 [phi:sin16s_genb::@1->sin16s_genb::@2#2] -- register_copy // sin16s_genb::@2 b2: // sin16sb(>x) - // [75] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#2 -- vwuz1=_hi_vduz2 + // [73] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#5 -- vwuz1=_hi_vduz2 lda x+2 sta sin16sb.x lda x+3 sta sin16sb.x+1 - // [76] call sin16sb + // [74] call sin16sb jsr sin16sb - // [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 + // [75] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 // sin16s_genb::@4 - // [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 + // [76] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 // *sintab++ = sin16sb(>x) - // [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 -- _deref_pwsz1=vwsz2 + // [77] *((signed word*) sin16s_genb::sintab#7) ← (signed word~) sin16s_genb::$3 -- _deref_pwsz1=vwsz2 ldy #0 lda _3 sta (sintab),y @@ -8526,7 +8575,7 @@ sin16s_genb: { lda _3+1 sta (sintab),y // *sintab++ = sin16sb(>x); - // [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [78] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#7 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -8535,7 +8584,7 @@ sin16s_genb: { inc sintab+1 !: // x = x + step - // [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 -- vduz1=vduz1_plus_vduz2 + // [79] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#5 + (dword) sin16s_genb::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -8550,16 +8599,26 @@ sin16s_genb: { adc step+3 sta x+3 // for( word i=0; isin16s_genb::@1] - // [72] phi (signed word*) sin16s_genb::sintab#2 = (signed word*) sin16s_genb::sintab#0 [phi:sin16s_genb::@4->sin16s_genb::@1#0] -- register_copy - // [72] phi (dword) sin16s_genb::x#2 = (dword) sin16s_genb::x#1 [phi:sin16s_genb::@4->sin16s_genb::@1#1] -- register_copy - // [72] phi (word) sin16s_genb::i#2 = (word) sin16s_genb::i#1 [phi:sin16s_genb::@4->sin16s_genb::@1#2] -- register_copy - jmp b1 + // u[4.28] + // sin16s_genb::@1 + // [81] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2 + bne !+ + lda i + cmp #sin16s_gen::@1] - // [173] phi (signed word*) sin16s_gen::sintab#2 = (const signed word[$78]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- pwsz1=pwsc1 + // [173] phi from sin16s_gen::@3 to sin16s_gen::@2 [phi:sin16s_gen::@3->sin16s_gen::@2] + // [173] phi (signed word*) sin16s_gen::sintab#7 = (const signed word[$78]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@2#0] -- pwsz1=pwsc1 lda #main.sintab1 sta sintab+1 - // [173] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 + // [173] phi (dword) sin16s_gen::x#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#1] -- vduz1=vbuc1 lda #0 sta x sta x+1 sta x+2 sta x+3 - // [173] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [173] phi (word) sin16s_gen::i#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#2] -- vwuz1=vbuc1 sta i sta i+1 - // u[4.28] - // sin16s_gen::@1 - b1: - // for( word i=0; imain.wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen::@2] + // [173] phi (signed word*) sin16s_gen::sintab#7 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@1->sin16s_gen::@2#0] -- register_copy + // [173] phi (dword) sin16s_gen::x#5 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@1->sin16s_gen::@2#1] -- register_copy + // [173] phi (word) sin16s_gen::i#5 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@1->sin16s_gen::@2#2] -- register_copy // sin16s_gen::@2 b2: // sin16s(x) - // [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2 + // [174] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -9168,13 +9214,13 @@ sin16s_gen: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [177] call sin16s + // [175] call sin16s jsr sin16s - // [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [176] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 // sin16s_gen::@4 - // [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 + // [177] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 // *sintab++ = sin16s(x) - // [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 + // [178] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 ldy #0 lda _2 sta (sintab),y @@ -9182,7 +9228,7 @@ sin16s_gen: { lda _2+1 sta (sintab),y // *sintab++ = sin16s(x); - // [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [179] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -9191,7 +9237,7 @@ sin16s_gen: { inc sintab+1 !: // x = x + step - // [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 + // [180] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -9206,16 +9252,26 @@ sin16s_gen: { adc step+3 sta x+3 // for( word i=0; isin16s_gen::@1] - // [173] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy - // [173] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy - // [173] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy - jmp b1 + // u[4.28] + // sin16s_gen::@1 + // [182] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2 + bne !+ + lda i + cmp #str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #main.wavelength - bcc b2 - bne !+ - lda i - cmp #main.wavelength + bcc b2 + bne !+ + lda i + cmp # sin8s::@15 ) during phi lifting. Added new block during phi lifting sin8s::@16(between sin8s::@1 and sin8s::@2) Added new block during phi lifting sin8s::@17(between sin8s::@14 and sin8s::@3) Added new block during phi lifting sin8s::@18(between sin8s::@3 and sin8s::@4) +Added new block during phi lifting memset::@10(between memset::@4 and memset::@5) Added new block during phi lifting main::@10(between main::@8 and main::@1) Added new block during phi lifting main::@11(between main::@1 and main::@2) Adding NOP phi() at start of @begin @@ -1954,8 +1977,10 @@ Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@4_1 Adding NOP phi() at start of memset::@1 Adding NOP phi() at start of sin8s_gen +Adding NOP phi() at start of sin8s_gen::@1_1 Adding NOP phi() at start of mul8u::@3 Adding NOP phi() at start of div16u Adding NOP phi() at start of divr16u @@ -1966,10 +1991,10 @@ Calls in [main] to sin8s_gen:9 print_cls:11 print_str:17 print_sbyte:21 print_st Calls in [print_sbyte] to print_char:43 print_byte:47 print_char:51 Calls in [print_byte] to print_char:62 print_char:67 Calls in [print_cls] to memset:71 -Calls in [sin8s_gen] to div16u:84 sin8s:91 -Calls in [sin8s] to mulu8_sel:115 mulu8_sel:122 mulu8_sel:127 mulu8_sel:135 mulu8_sel:142 -Calls in [mulu8_sel] to mul8u:163 -Calls in [div16u] to divr16u:187 +Calls in [sin8s_gen] to div16u:85 sin8s:91 +Calls in [sin8s] to mulu8_sel:117 mulu8_sel:124 mulu8_sel:129 mulu8_sel:137 mulu8_sel:144 +Calls in [mulu8_sel] to mul8u:165 +Calls in [div16u] to divr16u:189 Created 33 initial phi equivalence classes Coalesced [16] print_char_cursor#52 ← print_char_cursor#45 @@ -1990,43 +2015,43 @@ Coalesced [60] print_char::ch#5 ← print_char::ch#2 Coalesced (already) [61] print_char_cursor#56 ← print_char_cursor#10 Coalesced [65] print_char::ch#6 ← print_char::ch#3 Coalesced (already) [66] print_char_cursor#57 ← print_char_cursor#10 -Coalesced [82] memset::dst#4 ← memset::dst#1 -Coalesced [98] sin8s_gen::i#5 ← sin8s_gen::i#1 -Coalesced [99] sin8s_gen::x#5 ← sin8s_gen::x#1 -Coalesced [100] sin8s_gen::sintab#7 ← sin8s_gen::sintab#0 -Coalesced [103] sin8s::x#9 ← sin8s::x#1 -Coalesced [107] sin8s::x#11 ← sin8s::x#2 -Coalesced [113] mulu8_sel::v1#10 ← mulu8_sel::v1#0 -Coalesced [114] mulu8_sel::v2#9 ← mulu8_sel::v2#0 -Coalesced [120] mulu8_sel::v1#6 ← mulu8_sel::v1#1 -Coalesced [121] mulu8_sel::v2#6 ← mulu8_sel::v2#1 -Coalesced [126] mulu8_sel::v1#7 ← mulu8_sel::v1#2 -Coalesced [133] mulu8_sel::v1#8 ← mulu8_sel::v1#3 -Coalesced [134] mulu8_sel::v2#7 ← mulu8_sel::v2#3 -Coalesced [140] mulu8_sel::v1#9 ← mulu8_sel::v1#4 -Coalesced [141] mulu8_sel::v2#8 ← mulu8_sel::v2#4 -Coalesced [149] sin8s::usinx#9 ← sin8s::usinx#2 -Coalesced [153] sin8s::return#6 ← sin8s::sinx#1 -Coalesced [157] sin8s::usinx#8 ← sin8s::usinx#1 -Coalesced [158] sin8s::x#10 ← sin8s::x#4 -Coalesced [159] sin8s::x#8 ← sin8s::x#0 -Coalesced [169] mul8u::a#7 ← mul8u::a#1 -Coalesced [170] mul8u::mb#6 ← mul8u::b#0 -Coalesced [178] mul8u::res#9 ← mul8u::res#1 -Coalesced [182] mul8u::a#8 ← mul8u::a#0 -Coalesced [183] mul8u::res#7 ← mul8u::res#6 -Coalesced [184] mul8u::mb#7 ← mul8u::mb#1 -Coalesced (already) [185] mul8u::res#8 ← mul8u::res#2 -Coalesced [198] divr16u::rem#12 ← divr16u::rem#1 -Coalesced [205] divr16u::rem#14 ← divr16u::rem#2 -Coalesced [206] divr16u::return#6 ← divr16u::quotient#2 -Coalesced [212] divr16u::rem#10 ← divr16u::rem#9 -Coalesced [213] divr16u::dividend#8 ← divr16u::dividend#0 -Coalesced [214] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [215] divr16u::i#7 ← divr16u::i#1 -Coalesced [216] divr16u::rem#13 ← divr16u::rem#5 -Coalesced [217] divr16u::return#5 ← divr16u::quotient#1 -Coalesced [218] divr16u::rem#11 ← divr16u::rem#0 +Coalesced [83] memset::dst#6 ← memset::dst#1 +Coalesced [100] sin8s_gen::i#8 ← sin8s_gen::i#1 +Coalesced [101] sin8s_gen::x#8 ← sin8s_gen::x#1 +Coalesced [102] sin8s_gen::sintab#10 ← sin8s_gen::sintab#0 +Coalesced [105] sin8s::x#9 ← sin8s::x#1 +Coalesced [109] sin8s::x#11 ← sin8s::x#2 +Coalesced [115] mulu8_sel::v1#10 ← mulu8_sel::v1#0 +Coalesced [116] mulu8_sel::v2#9 ← mulu8_sel::v2#0 +Coalesced [122] mulu8_sel::v1#6 ← mulu8_sel::v1#1 +Coalesced [123] mulu8_sel::v2#6 ← mulu8_sel::v2#1 +Coalesced [128] mulu8_sel::v1#7 ← mulu8_sel::v1#2 +Coalesced [135] mulu8_sel::v1#8 ← mulu8_sel::v1#3 +Coalesced [136] mulu8_sel::v2#7 ← mulu8_sel::v2#3 +Coalesced [142] mulu8_sel::v1#9 ← mulu8_sel::v1#4 +Coalesced [143] mulu8_sel::v2#8 ← mulu8_sel::v2#4 +Coalesced [151] sin8s::usinx#9 ← sin8s::usinx#2 +Coalesced [155] sin8s::return#6 ← sin8s::sinx#1 +Coalesced [159] sin8s::usinx#8 ← sin8s::usinx#1 +Coalesced [160] sin8s::x#10 ← sin8s::x#4 +Coalesced [161] sin8s::x#8 ← sin8s::x#0 +Coalesced [171] mul8u::a#7 ← mul8u::a#1 +Coalesced [172] mul8u::mb#6 ← mul8u::b#0 +Coalesced [180] mul8u::res#9 ← mul8u::res#1 +Coalesced [184] mul8u::a#8 ← mul8u::a#0 +Coalesced [185] mul8u::res#7 ← mul8u::res#6 +Coalesced [186] mul8u::mb#7 ← mul8u::mb#1 +Coalesced (already) [187] mul8u::res#8 ← mul8u::res#2 +Coalesced [200] divr16u::rem#12 ← divr16u::rem#1 +Coalesced [207] divr16u::rem#14 ← divr16u::rem#2 +Coalesced [208] divr16u::return#6 ← divr16u::quotient#2 +Coalesced [214] divr16u::rem#10 ← divr16u::rem#9 +Coalesced [215] divr16u::dividend#8 ← divr16u::dividend#0 +Coalesced [216] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [217] divr16u::i#7 ← divr16u::i#1 +Coalesced [218] divr16u::rem#13 ← divr16u::rem#5 +Coalesced [219] divr16u::return#5 ← divr16u::quotient#1 +Coalesced [220] divr16u::rem#11 ← divr16u::rem#0 Coalesced down to 23 phi equivalence classes Culled Empty Block (label) @13 Culled Empty Block (label) @32 @@ -2041,7 +2066,11 @@ Culled Empty Block (label) print_sbyte::@7 Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) print_cls::@1 Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@4_1 Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@10 +Culled Empty Block (label) sin8s_gen::@1_1 +Culled Empty Block (label) sin8s_gen::@9 Culled Empty Block (label) sin8s::@17 Culled Empty Block (label) sin8s::@16 Culled Empty Block (label) sin8s::@15 @@ -2200,18 +2229,18 @@ print_cls::@return: scope:[print_cls] from print_cls to:@return memset: scope:[memset] from print_cls [52] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [53] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [54] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [55] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [53] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [54] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [56] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [55] return + [57] return to:@return -memset::@2: scope:[memset] from memset::@1 - [56] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [57] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 sin8s_gen: scope:[sin8s_gen] from main [58] phi() [59] call div16u @@ -2219,28 +2248,28 @@ sin8s_gen: scope:[sin8s_gen] from main to:sin8s_gen::@3 sin8s_gen::@3: scope:[sin8s_gen] from sin8s_gen [61] (word) sin8s_gen::step#0 ← (word) div16u::return#2 - to:sin8s_gen::@1 -sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen::@3 sin8s_gen::@4 - [62] (signed byte*) sin8s_gen::sintab#2 ← phi( sin8s_gen::@3/(const signed byte[$c0]) main::sintab2#0 sin8s_gen::@4/(signed byte*) sin8s_gen::sintab#0 ) - [62] (word) sin8s_gen::x#2 ← phi( sin8s_gen::@3/(byte) 0 sin8s_gen::@4/(word) sin8s_gen::x#1 ) - [62] (word) sin8s_gen::i#2 ← phi( sin8s_gen::@3/(byte) 0 sin8s_gen::@4/(word) sin8s_gen::i#1 ) - [63] if((word) sin8s_gen::i#2<(const word) main::wavelength#0) goto sin8s_gen::@2 - to:sin8s_gen::@return -sin8s_gen::@return: scope:[sin8s_gen] from sin8s_gen::@1 - [64] return - to:@return -sin8s_gen::@2: scope:[sin8s_gen] from sin8s_gen::@1 - [65] (word) sin8s::x#0 ← (word) sin8s_gen::x#2 - [66] call sin8s - [67] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 + to:sin8s_gen::@2 +sin8s_gen::@2: scope:[sin8s_gen] from sin8s_gen::@1 sin8s_gen::@3 + [62] (signed byte*) sin8s_gen::sintab#7 ← phi( sin8s_gen::@1/(signed byte*) sin8s_gen::sintab#0 sin8s_gen::@3/(const signed byte[$c0]) main::sintab2#0 ) + [62] (word) sin8s_gen::x#5 ← phi( sin8s_gen::@1/(word) sin8s_gen::x#1 sin8s_gen::@3/(byte) 0 ) + [62] (word) sin8s_gen::i#5 ← phi( sin8s_gen::@1/(word) sin8s_gen::i#1 sin8s_gen::@3/(byte) 0 ) + [63] (word) sin8s::x#0 ← (word) sin8s_gen::x#5 + [64] call sin8s + [65] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 to:sin8s_gen::@4 sin8s_gen::@4: scope:[sin8s_gen] from sin8s_gen::@2 - [68] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 - [69] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$2 - [70] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#2 - [71] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0 - [72] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#2 + [66] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 + [67] *((signed byte*) sin8s_gen::sintab#7) ← (signed byte~) sin8s_gen::$2 + [68] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#7 + [69] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#5 + (word) sin8s_gen::step#0 + [70] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#5 to:sin8s_gen::@1 +sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen::@4 + [71] if((word) sin8s_gen::i#1<(const word) main::wavelength#0) goto sin8s_gen::@2 + to:sin8s_gen::@return +sin8s_gen::@return: scope:[sin8s_gen] from sin8s_gen::@1 + [72] return + to:@return sin8s: scope:[sin8s] from sin8s_gen::@2 [73] if((word) sin8s::x#0<(const word) PI_u4f12#0) goto sin8s::@1 to:sin8s::@5 @@ -2452,8 +2481,8 @@ VARIABLE REGISTER WEIGHTS (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst -(byte*) memset::dst#1 22.0 -(byte*) memset::dst#2 14.666666666666666 +(byte*) memset::dst#1 16.5 +(byte*) memset::dst#4 16.5 (byte*) memset::end (word) memset::num (void*) memset::return @@ -2571,17 +2600,17 @@ VARIABLE REGISTER WEIGHTS (void()) sin8s_gen((signed byte*) sin8s_gen::sintab , (word) sin8s_gen::wavelength) (signed byte~) sin8s_gen::$2 22.0 (word) sin8s_gen::i -(word) sin8s_gen::i#1 22.0 -(word) sin8s_gen::i#2 3.666666666666667 +(word) sin8s_gen::i#1 16.5 +(word) sin8s_gen::i#5 2.75 (signed byte*) sin8s_gen::sintab -(signed byte*) sin8s_gen::sintab#0 7.333333333333333 -(signed byte*) sin8s_gen::sintab#2 4.714285714285714 +(signed byte*) sin8s_gen::sintab#0 5.5 +(signed byte*) sin8s_gen::sintab#7 5.5 (word) sin8s_gen::step (word) sin8s_gen::step#0 1.1818181818181819 (word) sin8s_gen::wavelength (word) sin8s_gen::x -(word) sin8s_gen::x#1 11.0 -(word) sin8s_gen::x#2 4.125 +(word) sin8s_gen::x#1 7.333333333333333 +(word) sin8s_gen::x#5 4.714285714285714 Not consolidating phi with different size mul8u::mb#2 mul8u::b#0 Initial phi equivalence classes @@ -2590,10 +2619,10 @@ Initial phi equivalence classes [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] [ print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] -[ memset::dst#2 memset::dst#1 ] -[ sin8s_gen::i#2 sin8s_gen::i#1 ] -[ sin8s_gen::x#2 sin8s_gen::x#1 ] -[ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] +[ memset::dst#4 memset::dst#1 ] +[ sin8s_gen::i#5 sin8s_gen::i#1 ] +[ sin8s_gen::x#5 sin8s_gen::x#1 ] +[ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] [ sin8s::isUpper#10 ] [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] @@ -2646,10 +2675,10 @@ Complete equivalence classes [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] [ print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] -[ memset::dst#2 memset::dst#1 ] -[ sin8s_gen::i#2 sin8s_gen::i#1 ] -[ sin8s_gen::x#2 sin8s_gen::x#1 ] -[ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] +[ memset::dst#4 memset::dst#1 ] +[ sin8s_gen::i#5 sin8s_gen::i#1 ] +[ sin8s_gen::x#5 sin8s_gen::x#1 ] +[ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] [ sin8s::isUpper#10 ] [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] @@ -2701,10 +2730,10 @@ Allocated zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 ] Allocated zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Allocated zp ZP_BYTE:6 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Allocated zp ZP_WORD:7 [ print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] -Allocated zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 ] -Allocated zp ZP_WORD:11 [ sin8s_gen::i#2 sin8s_gen::i#1 ] -Allocated zp ZP_WORD:13 [ sin8s_gen::x#2 sin8s_gen::x#1 ] -Allocated zp ZP_WORD:15 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] +Allocated zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 ] +Allocated zp ZP_WORD:11 [ sin8s_gen::i#5 sin8s_gen::i#1 ] +Allocated zp ZP_WORD:13 [ sin8s_gen::x#5 sin8s_gen::x#1 ] +Allocated zp ZP_WORD:15 [ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] Allocated zp ZP_BYTE:17 [ sin8s::isUpper#10 ] Allocated zp ZP_WORD:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] Allocated zp ZP_BYTE:20 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] @@ -3083,43 +3112,44 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = 9 - // [53] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [53] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [53] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [53] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [54] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [53] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [56] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [54] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [57] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [55] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [53] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [53] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [56] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #sin8s_gen::@1] - b1_from_b3: - // [62] phi (signed byte*) sin8s_gen::sintab#2 = (const signed byte[$c0]) main::sintab2#0 [phi:sin8s_gen::@3->sin8s_gen::@1#0] -- pbsz1=pbsc1 + // [62] phi from sin8s_gen::@3 to sin8s_gen::@2 [phi:sin8s_gen::@3->sin8s_gen::@2] + b2_from_b3: + // [62] phi (signed byte*) sin8s_gen::sintab#7 = (const signed byte[$c0]) main::sintab2#0 [phi:sin8s_gen::@3->sin8s_gen::@2#0] -- pbsz1=pbsc1 lda #main.sintab2 sta sintab+1 - // [62] phi (word) sin8s_gen::x#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vbuc1 + // [62] phi (word) sin8s_gen::x#5 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@2#1] -- vwuz1=vbuc1 lda #<0 sta x lda #>0 sta x+1 - // [62] phi (word) sin8s_gen::i#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vbuc1 + // [62] phi (word) sin8s_gen::i#5 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.12] - // sin8s_gen::@1 - b1: - // [63] if((word) sin8s_gen::i#2<(const word) main::wavelength#0) goto sin8s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.wavelength - bcc b2 - bne !+ - lda i - cmp #sin8s_gen::@2] + b2_from_b1: + // [62] phi (signed byte*) sin8s_gen::sintab#7 = (signed byte*) sin8s_gen::sintab#0 [phi:sin8s_gen::@1->sin8s_gen::@2#0] -- register_copy + // [62] phi (word) sin8s_gen::x#5 = (word) sin8s_gen::x#1 [phi:sin8s_gen::@1->sin8s_gen::@2#1] -- register_copy + // [62] phi (word) sin8s_gen::i#5 = (word) sin8s_gen::i#1 [phi:sin8s_gen::@1->sin8s_gen::@2#2] -- register_copy + jmp b2 // sin8s_gen::@2 b2: - // [65] (word) sin8s::x#0 ← (word) sin8s_gen::x#2 -- vwuz1=vwuz2 + // [63] (word) sin8s::x#0 ← (word) sin8s_gen::x#5 -- vwuz1=vwuz2 lda x sta sin8s.x lda x+1 sta sin8s.x+1 - // [66] call sin8s + // [64] call sin8s jsr sin8s - // [67] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 -- vbsz1=vbsz2 + // [65] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 -- vbsz1=vbsz2 lda sin8s.return_1 sta sin8s.return jmp b4 // sin8s_gen::@4 b4: - // [68] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 -- vbsz1=vbsz2 + // [66] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 -- vbsz1=vbsz2 lda sin8s.return sta _2 - // [69] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$2 -- _deref_pbsz1=vbsz2 + // [67] *((signed byte*) sin8s_gen::sintab#7) ← (signed byte~) sin8s_gen::$2 -- _deref_pbsz1=vbsz2 lda _2 ldy #0 sta (sintab),y - // [70] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#2 -- pbsz1=_inc_pbsz1 + // [68] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#7 -- pbsz1=_inc_pbsz1 inc sintab bne !+ inc sintab+1 !: - // [71] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0 -- vwuz1=vwuz1_plus_vwuz2 + // [69] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#5 + (word) sin8s_gen::step#0 -- vwuz1=vwuz1_plus_vwuz2 lda x clc adc step @@ -3219,17 +3238,29 @@ sin8s_gen: { lda x+1 adc step+1 sta x+1 - // [72] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#2 -- vwuz1=_inc_vwuz1 + // [70] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#5 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [62] phi from sin8s_gen::@4 to sin8s_gen::@1 [phi:sin8s_gen::@4->sin8s_gen::@1] - b1_from_b4: - // [62] phi (signed byte*) sin8s_gen::sintab#2 = (signed byte*) sin8s_gen::sintab#0 [phi:sin8s_gen::@4->sin8s_gen::@1#0] -- register_copy - // [62] phi (word) sin8s_gen::x#2 = (word) sin8s_gen::x#1 [phi:sin8s_gen::@4->sin8s_gen::@1#1] -- register_copy - // [62] phi (word) sin8s_gen::i#2 = (word) sin8s_gen::i#1 [phi:sin8s_gen::@4->sin8s_gen::@1#2] -- register_copy jmp b1 + // u[4.12] + // sin8s_gen::@1 + b1: + // [71] if((word) sin8s_gen::i#1<(const word) main::wavelength#0) goto sin8s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #> (byte) 4 [ print_char_cursor#10 print_byte::b#0 print_byte::$0 ] ( main:2::print_sbyte:15::print_byte:33 [ main::i#2 print_char_cursor#10 print_byte::b#0 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:39 [ print_byte::b#0 ] Statement [45] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte) $f [ print_char_cursor#10 print_byte::$2 ] ( main:2::print_sbyte:15::print_byte:33 [ main::i#2 print_char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a -Statement [54] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:7::memset:50 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [56] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:7::memset:50 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [54] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:7::memset:50 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [56] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:7::memset:50 [ memset::dst#1 ] ) always clobbers reg byte a Statement [60] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 ] ( main:2::sin8s_gen:5 [ div16u::return#2 ] ) always clobbers reg byte a Statement [61] (word) sin8s_gen::step#0 ← (word) div16u::return#2 [ sin8s_gen::step#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 ] ) always clobbers reg byte a -Statement [63] if((word) sin8s_gen::i#2<(const word) main::wavelength#0) goto sin8s_gen::@2 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ) always clobbers reg byte a -Statement [65] (word) sin8s::x#0 ← (word) sin8s_gen::x#2 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ) always clobbers reg byte a -Statement [69] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$2 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ) always clobbers reg byte y -Statement [71] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [73] if((word) sin8s::x#0<(const word) PI_u4f12#0) goto sin8s::@1 [ sin8s::x#0 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ) always clobbers reg byte a -Statement [74] (word) sin8s::x#1 ← (word) sin8s::x#0 - (const word) PI_u4f12#0 [ sin8s::x#1 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#1 ] ) always clobbers reg byte a -Statement [76] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a +Statement [63] (word) sin8s::x#0 ← (word) sin8s_gen::x#5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#0 ] ) always clobbers reg byte a +Statement [67] *((signed byte*) sin8s_gen::sintab#7) ← (signed byte~) sin8s_gen::$2 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 ] ) always clobbers reg byte y +Statement [69] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#5 + (word) sin8s_gen::step#0 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [71] if((word) sin8s_gen::i#1<(const word) main::wavelength#0) goto sin8s_gen::@2 [ sin8s_gen::step#0 sin8s_gen::i#1 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#1 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [73] if((word) sin8s::x#0<(const word) PI_u4f12#0) goto sin8s::@1 [ sin8s::x#0 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#0 ] ) always clobbers reg byte a +Statement [74] (word) sin8s::x#1 ← (word) sin8s::x#0 - (const word) PI_u4f12#0 [ sin8s::x#1 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#1 ] ) always clobbers reg byte a +Statement [76] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ sin8s::isUpper#10 ] -Statement [77] (word) sin8s::x#2 ← (const word) PI_u4f12#0 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#2 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x#2 ] ) always clobbers reg byte a -Statement [79] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a -Statement [80] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a -Statement [95] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a +Statement [77] (word) sin8s::x#2 ← (const word) PI_u4f12#0 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#2 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x#2 ] ) always clobbers reg byte a +Statement [79] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a +Statement [80] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a +Statement [95] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:50 [ sin8s::x1#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:54 [ sin8s::x3#0 ] -Statement [106] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a +Statement [106] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:57 [ sin8s::usinx#0 ] -Statement [107] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a -Statement [112] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::sinx#1 ] ) always clobbers reg byte a -Statement [120] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#2 ] ( main:2::sin8s_gen:5::sin8s:66::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] ) always clobbers reg byte a +Statement [107] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a +Statement [112] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::sinx#1 ] ) always clobbers reg byte a +Statement [120] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#2 ] ( main:2::sin8s_gen:5::sin8s:64::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ mulu8_sel::select#5 ] -Statement [121] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8s_gen:5::sin8s:66::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a -Statement [122] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8s_gen:5::sin8s:66::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a -Statement [123] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8s_gen:5::sin8s:66::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a -Statement [131] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:66::mulu8_sel:83::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:88::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:92::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:98::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:103::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [121] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8s_gen:5::sin8s:64::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a +Statement [122] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8s_gen:5::sin8s:64::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a +Statement [123] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8s_gen:5::sin8s:64::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a +Statement [131] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:64::mulu8_sel:83::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:88::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:92::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:98::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:103::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] Statement [137] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8s_gen:5::div16u:59 [ divr16u::return#2 ] ) always clobbers reg byte a Statement [138] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 ] ( main:2::sin8s_gen:5::div16u:59 [ div16u::return#0 ] ) always clobbers reg byte a @@ -3870,30 +3901,30 @@ Statement [37] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b Statement [39] *((byte*) print_char_cursor#29) ← (byte) print_char::ch#4 [ print_char_cursor#29 ] ( main:2::print_sbyte:15::print_char:30 [ main::i#2 print_sbyte::b#1 print_char_cursor#29 ] main:2::print_sbyte:15::print_char:36 [ main::i#2 print_sbyte::b#1 print_char_cursor#29 ] main:2::print_sbyte:15::print_byte:33::print_char:44 [ main::i#2 print_byte::b#0 print_char_cursor#29 ] main:2::print_sbyte:15::print_byte:33::print_char:47 [ main::i#2 print_char_cursor#29 ] ) always clobbers reg byte y Statement [42] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte) 4 [ print_char_cursor#10 print_byte::b#0 print_byte::$0 ] ( main:2::print_sbyte:15::print_byte:33 [ main::i#2 print_char_cursor#10 print_byte::b#0 print_byte::$0 ] ) always clobbers reg byte a Statement [45] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte) $f [ print_char_cursor#10 print_byte::$2 ] ( main:2::print_sbyte:15::print_byte:33 [ main::i#2 print_char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a -Statement [54] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:7::memset:50 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [56] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:7::memset:50 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [54] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:7::memset:50 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [56] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:7::memset:50 [ memset::dst#1 ] ) always clobbers reg byte a Statement [60] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 ] ( main:2::sin8s_gen:5 [ div16u::return#2 ] ) always clobbers reg byte a Statement [61] (word) sin8s_gen::step#0 ← (word) div16u::return#2 [ sin8s_gen::step#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 ] ) always clobbers reg byte a -Statement [63] if((word) sin8s_gen::i#2<(const word) main::wavelength#0) goto sin8s_gen::@2 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ) always clobbers reg byte a -Statement [65] (word) sin8s::x#0 ← (word) sin8s_gen::x#2 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ) always clobbers reg byte a -Statement [69] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$2 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ) always clobbers reg byte y -Statement [71] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [73] if((word) sin8s::x#0<(const word) PI_u4f12#0) goto sin8s::@1 [ sin8s::x#0 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ) always clobbers reg byte a -Statement [74] (word) sin8s::x#1 ← (word) sin8s::x#0 - (const word) PI_u4f12#0 [ sin8s::x#1 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#1 ] ) always clobbers reg byte a -Statement [76] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a -Statement [77] (word) sin8s::x#2 ← (const word) PI_u4f12#0 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#2 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x#2 ] ) always clobbers reg byte a -Statement [79] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a -Statement [80] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a -Statement [95] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a -Statement [106] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a -Statement [107] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a -Statement [112] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8s_gen:5::sin8s:66 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::sinx#1 ] ) always clobbers reg byte a -Statement [120] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#2 ] ( main:2::sin8s_gen:5::sin8s:66::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] ) always clobbers reg byte a -Statement [121] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8s_gen:5::sin8s:66::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a -Statement [122] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8s_gen:5::sin8s:66::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a -Statement [123] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8s_gen:5::sin8s:66::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a -Statement [129] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8s_gen:5::sin8s:66::mulu8_sel:83::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:88::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:92::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:98::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:103::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a -Statement [131] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:66::mulu8_sel:83::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:88::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:92::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:98::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:66::mulu8_sel:103::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [63] (word) sin8s::x#0 ← (word) sin8s_gen::x#5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#0 ] ) always clobbers reg byte a +Statement [67] *((signed byte*) sin8s_gen::sintab#7) ← (signed byte~) sin8s_gen::$2 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 ] ) always clobbers reg byte y +Statement [69] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#5 + (word) sin8s_gen::step#0 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [71] if((word) sin8s_gen::i#1<(const word) main::wavelength#0) goto sin8s_gen::@2 [ sin8s_gen::step#0 sin8s_gen::i#1 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#1 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [73] if((word) sin8s::x#0<(const word) PI_u4f12#0) goto sin8s::@1 [ sin8s::x#0 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#0 ] ) always clobbers reg byte a +Statement [74] (word) sin8s::x#1 ← (word) sin8s::x#0 - (const word) PI_u4f12#0 [ sin8s::x#1 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#1 ] ) always clobbers reg byte a +Statement [76] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a +Statement [77] (word) sin8s::x#2 ← (const word) PI_u4f12#0 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#2 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x#2 ] ) always clobbers reg byte a +Statement [79] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a +Statement [80] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a +Statement [95] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a +Statement [106] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a +Statement [107] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a +Statement [112] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8s_gen:5::sin8s:64 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::sinx#1 ] ) always clobbers reg byte a +Statement [120] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#2 ] ( main:2::sin8s_gen:5::sin8s:64::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] ) always clobbers reg byte a +Statement [121] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8s_gen:5::sin8s:64::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a +Statement [122] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8s_gen:5::sin8s:64::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a +Statement [123] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8s_gen:5::sin8s:64::mulu8_sel:83 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:92 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:98 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:103 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a +Statement [129] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8s_gen:5::sin8s:64::mulu8_sel:83::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:88::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:92::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:98::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:103::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [131] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:64::mulu8_sel:83::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:88::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:92::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:98::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:64::mulu8_sel:103::mul8u:119 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Statement [137] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8s_gen:5::div16u:59 [ divr16u::return#2 ] ) always clobbers reg byte a Statement [138] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 ] ( main:2::sin8s_gen:5::div16u:59 [ div16u::return#0 ] ) always clobbers reg byte a Statement [143] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin8s_gen:5::div16u:59::divr16u:136 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a @@ -3905,10 +3936,10 @@ Potential registers zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str:: Potential registers zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , Potential registers zp ZP_BYTE:6 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:7 [ print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] : zp ZP_WORD:7 , -Potential registers zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:9 , -Potential registers zp ZP_WORD:11 [ sin8s_gen::i#2 sin8s_gen::i#1 ] : zp ZP_WORD:11 , -Potential registers zp ZP_WORD:13 [ sin8s_gen::x#2 sin8s_gen::x#1 ] : zp ZP_WORD:13 , -Potential registers zp ZP_WORD:15 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] : zp ZP_WORD:15 , +Potential registers zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:9 , +Potential registers zp ZP_WORD:11 [ sin8s_gen::i#5 sin8s_gen::i#1 ] : zp ZP_WORD:11 , +Potential registers zp ZP_WORD:13 [ sin8s_gen::x#5 sin8s_gen::x#1 ] : zp ZP_WORD:13 , +Potential registers zp ZP_WORD:15 [ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] : zp ZP_WORD:15 , Potential registers zp ZP_BYTE:17 [ sin8s::isUpper#10 ] : zp ZP_BYTE:17 , reg byte x , reg byte y , Potential registers zp ZP_WORD:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] : zp ZP_WORD:18 , Potential registers zp ZP_BYTE:20 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] : zp ZP_BYTE:20 , reg byte a , reg byte x , reg byte y , @@ -3962,9 +3993,9 @@ Uplift Scope [print_str] 305.5: zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 Uplift Scope [divr16u] 96.25: zp ZP_WORD:31 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 37.25: zp ZP_WORD:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:75 [ divr16u::$1 ] 22: zp ZP_BYTE:76 [ divr16u::$2 ] 18.19: zp ZP_BYTE:37 [ divr16u::i#2 divr16u::i#1 ] 7.46: zp ZP_WORD:33 [ divr16u::dividend#2 divr16u::dividend#0 ] 4: zp ZP_WORD:71 [ divr16u::return#2 ] Uplift Scope [] 186.27: zp ZP_WORD:7 [ print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] Uplift Scope [sin8s] 27.5: zp ZP_WORD:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] 22: zp ZP_BYTE:46 [ sin8s::return#0 ] 13: zp ZP_BYTE:21 [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] 10: zp ZP_BYTE:20 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] 4: zp ZP_WORD:48 [ sin8s::$4 ] 4: zp ZP_BYTE:52 [ sin8s::x2#0 ] 4: zp ZP_BYTE:56 [ sin8s::x3_6#0 ] 4: zp ZP_BYTE:59 [ sin8s::x4#0 ] 4: zp ZP_BYTE:61 [ sin8s::x5#0 ] 4: zp ZP_BYTE:62 [ sin8s::x5_128#0 ] 1: zp ZP_BYTE:54 [ sin8s::x3#0 ] 0.64: zp ZP_BYTE:50 [ sin8s::x1#0 ] 0.33: zp ZP_BYTE:57 [ sin8s::usinx#0 ] 0.06: zp ZP_BYTE:17 [ sin8s::isUpper#10 ] -Uplift Scope [sin8s_gen] 25.67: zp ZP_WORD:11 [ sin8s_gen::i#2 sin8s_gen::i#1 ] 22: zp ZP_BYTE:47 [ sin8s_gen::$2 ] 15.12: zp ZP_WORD:13 [ sin8s_gen::x#2 sin8s_gen::x#1 ] 12.05: zp ZP_WORD:15 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] 1.18: zp ZP_WORD:44 [ sin8s_gen::step#0 ] Uplift Scope [mulu8_sel] 24: zp ZP_BYTE:22 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] 21: zp ZP_BYTE:23 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] 4: zp ZP_BYTE:51 [ mulu8_sel::return#0 ] 4: zp ZP_BYTE:53 [ mulu8_sel::return#1 ] 4: zp ZP_BYTE:55 [ mulu8_sel::return#2 ] 4: zp ZP_BYTE:58 [ mulu8_sel::return#10 ] 4: zp ZP_BYTE:60 [ mulu8_sel::return#11 ] 4: zp ZP_WORD:65 [ mulu8_sel::$0 ] 4: zp ZP_WORD:67 [ mulu8_sel::$1 ] 1.71: zp ZP_BYTE:69 [ mulu8_sel::return#12 ] 0.33: zp ZP_BYTE:24 [ mulu8_sel::select#5 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [sin8s_gen] 22: zp ZP_BYTE:47 [ sin8s_gen::$2 ] 19.25: zp ZP_WORD:11 [ sin8s_gen::i#5 sin8s_gen::i#1 ] 12.05: zp ZP_WORD:13 [ sin8s_gen::x#5 sin8s_gen::x#1 ] 11: zp ZP_WORD:15 [ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] 1.18: zp ZP_WORD:44 [ sin8s_gen::step#0 ] +Uplift Scope [memset] 33: zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 ] Uplift Scope [main] 19.8: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 6.6: zp ZP_BYTE:38 [ main::sb#0 ] Uplift Scope [print_char] 14: zp ZP_BYTE:6 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Uplift Scope [print_sbyte] 10.83: zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] @@ -3973,57 +4004,57 @@ Uplift Scope [div16u] 4: zp ZP_WORD:42 [ div16u::return#2 ] 1.33: zp ZP_WORD:73 Uplift Scope [RADIX] Uplift Scope [print_cls] -Uplifting [mul8u] best 19827 combination zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:28 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:63 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ] -Uplifting [print_str] best 19827 combination zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 ] -Uplifting [divr16u] best 19617 combination zp ZP_WORD:31 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:33 [ divr16u::dividend#2 divr16u::dividend#0 ] zp ZP_WORD:71 [ divr16u::return#2 ] -Uplifting [] best 19617 combination zp ZP_WORD:7 [ print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] -Uplifting [sin8s] best 19512 combination zp ZP_WORD:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp ZP_WORD:48 [ sin8s::$4 ] zp ZP_BYTE:52 [ sin8s::x2#0 ] zp ZP_BYTE:56 [ sin8s::x3_6#0 ] zp ZP_BYTE:59 [ sin8s::x4#0 ] zp ZP_BYTE:61 [ sin8s::x5#0 ] zp ZP_BYTE:62 [ sin8s::x5_128#0 ] zp ZP_BYTE:54 [ sin8s::x3#0 ] zp ZP_BYTE:50 [ sin8s::x1#0 ] zp ZP_BYTE:57 [ sin8s::usinx#0 ] zp ZP_BYTE:17 [ sin8s::isUpper#10 ] +Uplifting [mul8u] best 19887 combination zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:28 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:63 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ] +Uplifting [print_str] best 19887 combination zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 ] +Uplifting [divr16u] best 19677 combination zp ZP_WORD:31 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:33 [ divr16u::dividend#2 divr16u::dividend#0 ] zp ZP_WORD:71 [ divr16u::return#2 ] +Uplifting [] best 19677 combination zp ZP_WORD:7 [ print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] +Uplifting [sin8s] best 19572 combination zp ZP_WORD:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp ZP_WORD:48 [ sin8s::$4 ] zp ZP_BYTE:52 [ sin8s::x2#0 ] zp ZP_BYTE:56 [ sin8s::x3_6#0 ] zp ZP_BYTE:59 [ sin8s::x4#0 ] zp ZP_BYTE:61 [ sin8s::x5#0 ] zp ZP_BYTE:62 [ sin8s::x5_128#0 ] zp ZP_BYTE:54 [ sin8s::x3#0 ] zp ZP_BYTE:50 [ sin8s::x1#0 ] zp ZP_BYTE:57 [ sin8s::usinx#0 ] zp ZP_BYTE:17 [ sin8s::isUpper#10 ] Limited combination testing to 100 combinations of 5308416 possible. -Uplifting [sin8s_gen] best 19452 combination zp ZP_WORD:11 [ sin8s_gen::i#2 sin8s_gen::i#1 ] reg byte a [ sin8s_gen::$2 ] zp ZP_WORD:13 [ sin8s_gen::x#2 sin8s_gen::x#1 ] zp ZP_WORD:15 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] zp ZP_WORD:44 [ sin8s_gen::step#0 ] -Uplifting [mulu8_sel] best 19406 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp ZP_BYTE:55 [ mulu8_sel::return#2 ] zp ZP_BYTE:58 [ mulu8_sel::return#10 ] zp ZP_BYTE:60 [ mulu8_sel::return#11 ] zp ZP_WORD:65 [ mulu8_sel::$0 ] zp ZP_WORD:67 [ mulu8_sel::$1 ] zp ZP_BYTE:69 [ mulu8_sel::return#12 ] zp ZP_BYTE:24 [ mulu8_sel::select#5 ] +Uplifting [mulu8_sel] best 19526 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp ZP_BYTE:55 [ mulu8_sel::return#2 ] zp ZP_BYTE:58 [ mulu8_sel::return#10 ] zp ZP_BYTE:60 [ mulu8_sel::return#11 ] zp ZP_WORD:65 [ mulu8_sel::$0 ] zp ZP_WORD:67 [ mulu8_sel::$1 ] zp ZP_BYTE:69 [ mulu8_sel::return#12 ] zp ZP_BYTE:24 [ mulu8_sel::select#5 ] Limited combination testing to 100 combinations of 196608 possible. -Uplifting [memset] best 19406 combination zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 ] -Uplifting [main] best 19286 combination reg byte x [ main::i#2 main::i#1 ] zp ZP_BYTE:38 [ main::sb#0 ] -Uplifting [print_char] best 19271 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] -Uplifting [print_sbyte] best 19271 combination zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplifting [print_byte] best 19263 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] zp ZP_BYTE:39 [ print_byte::b#0 ] -Uplifting [div16u] best 19263 combination zp ZP_WORD:42 [ div16u::return#2 ] zp ZP_WORD:73 [ div16u::return#0 ] -Uplifting [RADIX] best 19263 combination -Uplifting [print_cls] best 19263 combination +Uplifting [sin8s_gen] best 19466 combination reg byte a [ sin8s_gen::$2 ] zp ZP_WORD:11 [ sin8s_gen::i#5 sin8s_gen::i#1 ] zp ZP_WORD:13 [ sin8s_gen::x#5 sin8s_gen::x#1 ] zp ZP_WORD:15 [ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] zp ZP_WORD:44 [ sin8s_gen::step#0 ] +Uplifting [memset] best 19466 combination zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 ] +Uplifting [main] best 19346 combination reg byte x [ main::i#2 main::i#1 ] zp ZP_BYTE:38 [ main::sb#0 ] +Uplifting [print_char] best 19331 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] +Uplifting [print_sbyte] best 19331 combination zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] +Uplifting [print_byte] best 19323 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] zp ZP_BYTE:39 [ print_byte::b#0 ] +Uplifting [div16u] best 19323 combination zp ZP_WORD:42 [ div16u::return#2 ] zp ZP_WORD:73 [ div16u::return#0 ] +Uplifting [RADIX] best 19323 combination +Uplifting [print_cls] best 19323 combination Attempting to uplift remaining variables inzp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplifting [print_sbyte] best 19263 combination zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] +Uplifting [print_sbyte] best 19323 combination zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:38 [ main::sb#0 ] -Uplifting [main] best 19263 combination zp ZP_BYTE:38 [ main::sb#0 ] +Uplifting [main] best 19323 combination zp ZP_BYTE:38 [ main::sb#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:52 [ sin8s::x2#0 ] -Uplifting [sin8s] best 19259 combination reg byte a [ sin8s::x2#0 ] +Uplifting [sin8s] best 19319 combination reg byte a [ sin8s::x2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:55 [ mulu8_sel::return#2 ] -Uplifting [mulu8_sel] best 19253 combination reg byte a [ mulu8_sel::return#2 ] +Uplifting [mulu8_sel] best 19313 combination reg byte a [ mulu8_sel::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:56 [ sin8s::x3_6#0 ] -Uplifting [sin8s] best 19249 combination reg byte a [ sin8s::x3_6#0 ] +Uplifting [sin8s] best 19309 combination reg byte a [ sin8s::x3_6#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:58 [ mulu8_sel::return#10 ] -Uplifting [mulu8_sel] best 19243 combination reg byte a [ mulu8_sel::return#10 ] +Uplifting [mulu8_sel] best 19303 combination reg byte a [ mulu8_sel::return#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:59 [ sin8s::x4#0 ] -Uplifting [sin8s] best 19239 combination reg byte a [ sin8s::x4#0 ] +Uplifting [sin8s] best 19299 combination reg byte a [ sin8s::x4#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:60 [ mulu8_sel::return#11 ] -Uplifting [mulu8_sel] best 19233 combination reg byte a [ mulu8_sel::return#11 ] +Uplifting [mulu8_sel] best 19293 combination reg byte a [ mulu8_sel::return#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:61 [ sin8s::x5#0 ] -Uplifting [sin8s] best 19227 combination reg byte a [ sin8s::x5#0 ] +Uplifting [sin8s] best 19287 combination reg byte a [ sin8s::x5#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:62 [ sin8s::x5_128#0 ] -Uplifting [sin8s] best 19221 combination reg byte a [ sin8s::x5_128#0 ] +Uplifting [sin8s] best 19281 combination reg byte a [ sin8s::x5_128#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:69 [ mulu8_sel::return#12 ] -Uplifting [mulu8_sel] best 19203 combination reg byte a [ mulu8_sel::return#12 ] +Uplifting [mulu8_sel] best 19263 combination reg byte a [ mulu8_sel::return#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:39 [ print_byte::b#0 ] -Uplifting [print_byte] best 19203 combination zp ZP_BYTE:39 [ print_byte::b#0 ] +Uplifting [print_byte] best 19263 combination zp ZP_BYTE:39 [ print_byte::b#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:54 [ sin8s::x3#0 ] -Uplifting [sin8s] best 19203 combination zp ZP_BYTE:54 [ sin8s::x3#0 ] +Uplifting [sin8s] best 19263 combination zp ZP_BYTE:54 [ sin8s::x3#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:50 [ sin8s::x1#0 ] -Uplifting [sin8s] best 19203 combination zp ZP_BYTE:50 [ sin8s::x1#0 ] +Uplifting [sin8s] best 19263 combination zp ZP_BYTE:50 [ sin8s::x1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:24 [ mulu8_sel::select#5 ] -Uplifting [mulu8_sel] best 19203 combination zp ZP_BYTE:24 [ mulu8_sel::select#5 ] +Uplifting [mulu8_sel] best 19263 combination zp ZP_BYTE:24 [ mulu8_sel::select#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:57 [ sin8s::usinx#0 ] -Uplifting [sin8s] best 19203 combination zp ZP_BYTE:57 [ sin8s::usinx#0 ] +Uplifting [sin8s] best 19263 combination zp ZP_BYTE:57 [ sin8s::usinx#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:17 [ sin8s::isUpper#10 ] -Uplifting [sin8s] best 19203 combination zp ZP_BYTE:17 [ sin8s::isUpper#10 ] +Uplifting [sin8s] best 19263 combination zp ZP_BYTE:17 [ sin8s::isUpper#10 ] Coalescing zero page register [ zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] ] with [ zp ZP_BYTE:38 [ main::sb#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 main::sb#0 ] ] with [ zp ZP_BYTE:39 [ print_byte::b#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] ] with [ zp ZP_WORD:48 [ sin8s::$4 ] ] - score: 1 @@ -4034,20 +4065,20 @@ Coalescing zero page register [ zp ZP_WORD:42 [ div16u::return#2 sin8s_gen::step Coalescing zero page register [ zp ZP_WORD:65 [ mulu8_sel::$0 ] ] with [ zp ZP_WORD:67 [ mulu8_sel::$1 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ] with [ zp ZP_WORD:65 [ mulu8_sel::$0 mulu8_sel::$1 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:42 [ div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 ] ] -Coalescing zero page register [ zp ZP_WORD:11 [ sin8s_gen::i#2 sin8s_gen::i#1 ] ] with [ zp ZP_WORD:7 [ print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] ] +Coalescing zero page register [ zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 ] ] +Coalescing zero page register [ zp ZP_WORD:11 [ sin8s_gen::i#5 sin8s_gen::i#1 ] ] with [ zp ZP_WORD:7 [ print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] ] Coalescing zero page register [ zp ZP_BYTE:17 [ sin8s::isUpper#10 ] ] with [ zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 main::sb#0 print_byte::b#0 ] ] Coalescing zero page register [ zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 ] ] with [ zp ZP_WORD:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 ] ] -Coalescing zero page register [ zp ZP_WORD:31 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:13 [ sin8s_gen::x#2 sin8s_gen::x#1 ] ] -Coalescing zero page register [ zp ZP_WORD:33 [ divr16u::dividend#2 divr16u::dividend#0 ] ] with [ zp ZP_WORD:15 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] ] -Coalescing zero page register [ zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 ] ] with [ zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 print_str::str#3 print_str::str#5 print_str::str#0 ] ] -Allocated (was zp ZP_WORD:11) zp ZP_WORD:2 [ sin8s_gen::i#2 sin8s_gen::i#1 print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] +Coalescing zero page register [ zp ZP_WORD:31 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:13 [ sin8s_gen::x#5 sin8s_gen::x#1 ] ] +Coalescing zero page register [ zp ZP_WORD:33 [ divr16u::dividend#2 divr16u::dividend#0 ] ] with [ zp ZP_WORD:15 [ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] ] +Coalescing zero page register [ zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 ] ] with [ zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 print_str::str#3 print_str::str#5 print_str::str#0 ] ] +Allocated (was zp ZP_WORD:11) zp ZP_WORD:2 [ sin8s_gen::i#5 sin8s_gen::i#1 print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] Allocated (was zp ZP_BYTE:17) zp ZP_BYTE:4 [ sin8s::isUpper#10 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 main::sb#0 print_byte::b#0 ] Allocated (was zp ZP_BYTE:24) zp ZP_BYTE:5 [ mulu8_sel::select#5 ] -Allocated (was zp ZP_WORD:26) zp ZP_WORD:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 memset::dst#2 memset::dst#1 print_str::str#3 print_str::str#5 print_str::str#0 ] +Allocated (was zp ZP_WORD:26) zp ZP_WORD:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 memset::dst#4 memset::dst#1 print_str::str#3 print_str::str#5 print_str::str#0 ] Allocated (was zp ZP_WORD:28) zp ZP_WORD:8 [ mul8u::mb#2 mul8u::mb#1 ] -Allocated (was zp ZP_WORD:31) zp ZP_WORD:10 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8s_gen::x#2 sin8s_gen::x#1 ] -Allocated (was zp ZP_WORD:33) zp ZP_WORD:12 [ divr16u::dividend#2 divr16u::dividend#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] +Allocated (was zp ZP_WORD:31) zp ZP_WORD:10 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8s_gen::x#5 sin8s_gen::x#1 ] +Allocated (was zp ZP_WORD:33) zp ZP_WORD:12 [ divr16u::dividend#2 divr16u::dividend#0 sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] Allocated (was zp ZP_WORD:35) zp ZP_WORD:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] Allocated (was zp ZP_BYTE:50) zp ZP_BYTE:16 [ sin8s::x1#0 ] Allocated (was zp ZP_BYTE:54) zp ZP_BYTE:17 [ sin8s::x3#0 ] @@ -4365,43 +4396,44 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = 6 - // [53] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [53] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [53] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [53] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [54] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [53] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [56] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [54] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [57] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [55] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [53] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [53] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [56] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #sin8s_gen::@1] - b1_from_b3: - // [62] phi (signed byte*) sin8s_gen::sintab#2 = (const signed byte[$c0]) main::sintab2#0 [phi:sin8s_gen::@3->sin8s_gen::@1#0] -- pbsz1=pbsc1 + // [62] phi from sin8s_gen::@3 to sin8s_gen::@2 [phi:sin8s_gen::@3->sin8s_gen::@2] + b2_from_b3: + // [62] phi (signed byte*) sin8s_gen::sintab#7 = (const signed byte[$c0]) main::sintab2#0 [phi:sin8s_gen::@3->sin8s_gen::@2#0] -- pbsz1=pbsc1 lda #main.sintab2 sta sintab+1 - // [62] phi (word) sin8s_gen::x#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vbuc1 + // [62] phi (word) sin8s_gen::x#5 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@2#1] -- vwuz1=vbuc1 lda #<0 sta x lda #>0 sta x+1 - // [62] phi (word) sin8s_gen::i#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vbuc1 + // [62] phi (word) sin8s_gen::i#5 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.12] - // sin8s_gen::@1 - b1: - // [63] if((word) sin8s_gen::i#2<(const word) main::wavelength#0) goto sin8s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.wavelength - bcc b2 - bne !+ - lda i - cmp #sin8s_gen::@2] + b2_from_b1: + // [62] phi (signed byte*) sin8s_gen::sintab#7 = (signed byte*) sin8s_gen::sintab#0 [phi:sin8s_gen::@1->sin8s_gen::@2#0] -- register_copy + // [62] phi (word) sin8s_gen::x#5 = (word) sin8s_gen::x#1 [phi:sin8s_gen::@1->sin8s_gen::@2#1] -- register_copy + // [62] phi (word) sin8s_gen::i#5 = (word) sin8s_gen::i#1 [phi:sin8s_gen::@1->sin8s_gen::@2#2] -- register_copy + jmp b2 // sin8s_gen::@2 b2: - // [65] (word) sin8s::x#0 ← (word) sin8s_gen::x#2 -- vwuz1=vwuz2 + // [63] (word) sin8s::x#0 ← (word) sin8s_gen::x#5 -- vwuz1=vwuz2 lda x sta sin8s.x lda x+1 sta sin8s.x+1 - // [66] call sin8s + // [64] call sin8s jsr sin8s - // [67] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 + // [65] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 jmp b4 // sin8s_gen::@4 b4: - // [68] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 - // [69] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$2 -- _deref_pbsz1=vbsaa + // [66] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 + // [67] *((signed byte*) sin8s_gen::sintab#7) ← (signed byte~) sin8s_gen::$2 -- _deref_pbsz1=vbsaa ldy #0 sta (sintab),y - // [70] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#2 -- pbsz1=_inc_pbsz1 + // [68] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#7 -- pbsz1=_inc_pbsz1 inc sintab bne !+ inc sintab+1 !: - // [71] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0 -- vwuz1=vwuz1_plus_vwuz2 + // [69] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#5 + (word) sin8s_gen::step#0 -- vwuz1=vwuz1_plus_vwuz2 lda x clc adc step @@ -4487,17 +4508,29 @@ sin8s_gen: { lda x+1 adc step+1 sta x+1 - // [72] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#2 -- vwuz1=_inc_vwuz1 + // [70] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#5 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [62] phi from sin8s_gen::@4 to sin8s_gen::@1 [phi:sin8s_gen::@4->sin8s_gen::@1] - b1_from_b4: - // [62] phi (signed byte*) sin8s_gen::sintab#2 = (signed byte*) sin8s_gen::sintab#0 [phi:sin8s_gen::@4->sin8s_gen::@1#0] -- register_copy - // [62] phi (word) sin8s_gen::x#2 = (word) sin8s_gen::x#1 [phi:sin8s_gen::@4->sin8s_gen::@1#1] -- register_copy - // [62] phi (word) sin8s_gen::i#2 = (word) sin8s_gen::i#1 [phi:sin8s_gen::@4->sin8s_gen::@1#2] -- register_copy jmp b1 + // u[4.12] + // sin8s_gen::@1 + b1: + // [71] if((word) sin8s_gen::i#1<(const word) main::wavelength#0) goto sin8s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #memset::@1] - // [53] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [53] phi from memset to memset::@2 [phi:memset->memset::@2] + // [53] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [53] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [53] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [54] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [54] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [55] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [56] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -5766,24 +5822,8 @@ memset: { bne b2 // memset::@return // } - // [55] return + // [57] return rts - // memset::@2 - b2: - // *dst = c - // [56] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [57] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [53] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [53] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // sin8s_gen // Generate signed byte sinus table - on the full -$7f - $7f range @@ -5804,24 +5844,64 @@ sin8s_gen: { // sin8s_gen::@3 // step = div16u(PI2_u4f12, wavelength) // [61] (word) sin8s_gen::step#0 ← (word) div16u::return#2 - // [62] phi from sin8s_gen::@3 to sin8s_gen::@1 [phi:sin8s_gen::@3->sin8s_gen::@1] - // [62] phi (signed byte*) sin8s_gen::sintab#2 = (const signed byte[$c0]) main::sintab2#0 [phi:sin8s_gen::@3->sin8s_gen::@1#0] -- pbsz1=pbsc1 + // [62] phi from sin8s_gen::@3 to sin8s_gen::@2 [phi:sin8s_gen::@3->sin8s_gen::@2] + // [62] phi (signed byte*) sin8s_gen::sintab#7 = (const signed byte[$c0]) main::sintab2#0 [phi:sin8s_gen::@3->sin8s_gen::@2#0] -- pbsz1=pbsc1 lda #main.sintab2 sta sintab+1 - // [62] phi (word) sin8s_gen::x#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vbuc1 + // [62] phi (word) sin8s_gen::x#5 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@2#1] -- vwuz1=vbuc1 lda #<0 sta x sta x+1 - // [62] phi (word) sin8s_gen::i#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vbuc1 + // [62] phi (word) sin8s_gen::i#5 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@2#2] -- vwuz1=vbuc1 sta i sta i+1 + // [62] phi from sin8s_gen::@1 to sin8s_gen::@2 [phi:sin8s_gen::@1->sin8s_gen::@2] + // [62] phi (signed byte*) sin8s_gen::sintab#7 = (signed byte*) sin8s_gen::sintab#0 [phi:sin8s_gen::@1->sin8s_gen::@2#0] -- register_copy + // [62] phi (word) sin8s_gen::x#5 = (word) sin8s_gen::x#1 [phi:sin8s_gen::@1->sin8s_gen::@2#1] -- register_copy + // [62] phi (word) sin8s_gen::i#5 = (word) sin8s_gen::i#1 [phi:sin8s_gen::@1->sin8s_gen::@2#2] -- register_copy + // sin8s_gen::@2 + b2: + // sin8s(x) + // [63] (word) sin8s::x#0 ← (word) sin8s_gen::x#5 -- vwuz1=vwuz2 + lda x + sta sin8s.x + lda x+1 + sta sin8s.x+1 + // [64] call sin8s + jsr sin8s + // [65] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 + // sin8s_gen::@4 + // [66] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 + // *sintab++ = sin8s(x) + // [67] *((signed byte*) sin8s_gen::sintab#7) ← (signed byte~) sin8s_gen::$2 -- _deref_pbsz1=vbsaa + ldy #0 + sta (sintab),y + // *sintab++ = sin8s(x); + // [68] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#7 -- pbsz1=_inc_pbsz1 + inc sintab + bne !+ + inc sintab+1 + !: + // x = x + step + // [69] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#5 + (word) sin8s_gen::step#0 -- vwuz1=vwuz1_plus_vwuz2 + lda x + clc + adc step + sta x + lda x+1 + adc step+1 + sta x+1 + // for( word i=0; imain.wavelength bcc b2 @@ -5832,51 +5912,8 @@ sin8s_gen: { !: // sin8s_gen::@return // } - // [64] return + // [72] return rts - // sin8s_gen::@2 - b2: - // sin8s(x) - // [65] (word) sin8s::x#0 ← (word) sin8s_gen::x#2 -- vwuz1=vwuz2 - lda x - sta sin8s.x - lda x+1 - sta sin8s.x+1 - // [66] call sin8s - jsr sin8s - // [67] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 - // sin8s_gen::@4 - // [68] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 - // *sintab++ = sin8s(x) - // [69] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$2 -- _deref_pbsz1=vbsaa - ldy #0 - sta (sintab),y - // *sintab++ = sin8s(x); - // [70] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#2 -- pbsz1=_inc_pbsz1 - inc sintab - bne !+ - inc sintab+1 - !: - // x = x + step - // [71] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0 -- vwuz1=vwuz1_plus_vwuz2 - lda x - clc - adc step - sta x - lda x+1 - adc step+1 - sta x+1 - // for( word i=0; isin8s_gen::@1] - // [62] phi (signed byte*) sin8s_gen::sintab#2 = (signed byte*) sin8s_gen::sintab#0 [phi:sin8s_gen::@4->sin8s_gen::@1#0] -- register_copy - // [62] phi (word) sin8s_gen::x#2 = (word) sin8s_gen::x#1 [phi:sin8s_gen::@4->sin8s_gen::@1#1] -- register_copy - // [62] phi (word) sin8s_gen::i#2 = (word) sin8s_gen::i#1 [phi:sin8s_gen::@4->sin8s_gen::@1#2] -- register_copy - jmp b1 } // sin8s // Calculate signed byte sinus sin(x) diff --git a/src/test/ref/sinusgen8.sym b/src/test/ref/sinusgen8.sym index c68942535..4db5646a3 100644 --- a/src/test/ref/sinusgen8.sym +++ b/src/test/ref/sinusgen8.sym @@ -77,8 +77,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:6 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:6 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:6 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:6 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -241,21 +241,21 @@ (label) sin8s_gen::@4 (label) sin8s_gen::@return (word) sin8s_gen::i -(word) sin8s_gen::i#1 i zp ZP_WORD:2 22.0 -(word) sin8s_gen::i#2 i zp ZP_WORD:2 3.666666666666667 +(word) sin8s_gen::i#1 i zp ZP_WORD:2 16.5 +(word) sin8s_gen::i#5 i zp ZP_WORD:2 2.75 (signed byte*) sin8s_gen::sintab -(signed byte*) sin8s_gen::sintab#0 sintab zp ZP_WORD:12 7.333333333333333 -(signed byte*) sin8s_gen::sintab#2 sintab zp ZP_WORD:12 4.714285714285714 +(signed byte*) sin8s_gen::sintab#0 sintab zp ZP_WORD:12 5.5 +(signed byte*) sin8s_gen::sintab#7 sintab zp ZP_WORD:12 5.5 (word) sin8s_gen::step (word) sin8s_gen::step#0 step zp ZP_WORD:14 1.1818181818181819 (word) sin8s_gen::wavelength (word) sin8s_gen::x -(word) sin8s_gen::x#1 x zp ZP_WORD:10 11.0 -(word) sin8s_gen::x#2 x zp ZP_WORD:10 4.125 +(word) sin8s_gen::x#1 x zp ZP_WORD:10 7.333333333333333 +(word) sin8s_gen::x#5 x zp ZP_WORD:10 4.714285714285714 reg byte x [ main::i#2 main::i#1 ] reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] -zp ZP_WORD:2 [ sin8s_gen::i#2 sin8s_gen::i#1 print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] +zp ZP_WORD:2 [ sin8s_gen::i#5 sin8s_gen::i#1 print_char_cursor#29 print_char_cursor#47 print_char_cursor#44 print_char_cursor#45 print_char_cursor#2 print_char_cursor#10 print_char_cursor#1 ] zp ZP_BYTE:4 [ sin8s::isUpper#10 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 main::sb#0 print_byte::b#0 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] @@ -263,11 +263,11 @@ reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mul reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] zp ZP_BYTE:5 [ mulu8_sel::select#5 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] -zp ZP_WORD:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 memset::dst#2 memset::dst#1 print_str::str#3 print_str::str#5 print_str::str#0 ] +zp ZP_WORD:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 memset::dst#4 memset::dst#1 print_str::str#3 print_str::str#5 print_str::str#0 ] zp ZP_WORD:8 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::b#0 ] -zp ZP_WORD:10 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8s_gen::x#2 sin8s_gen::x#1 ] -zp ZP_WORD:12 [ divr16u::dividend#2 divr16u::dividend#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] +zp ZP_WORD:10 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8s_gen::x#5 sin8s_gen::x#1 ] +zp ZP_WORD:12 [ divr16u::dividend#2 divr16u::dividend#0 sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] zp ZP_WORD:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte a [ print_byte::$0 ] diff --git a/src/test/ref/sinusgen8b.asm b/src/test/ref/sinusgen8b.asm index 08ca395e0..e611685d4 100644 --- a/src/test/ref/sinusgen8b.asm +++ b/src/test/ref/sinusgen8b.asm @@ -163,14 +163,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #main.wavelength - bcc b2 - bne !+ - lda i - cmp #main.wavelength + bcc b2 + bne !+ + lda i + cmp #main.wavelength - bcc b2 - bne !+ - lda i - cmp #main.wavelength + bcc b2 + bne !+ + lda i + cmp # (const dword) div32u16u::dividend#0 Constant right-side identified [26] (word) divr16u::dividend#3 ← < (const dword) div32u16u::dividend#0 Successful SSA optimization Pass2ConstantRValueConsolidation @@ -2525,9 +2547,12 @@ Constant (const word) divr16u::dividend#2 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#3 = sin16s::@13 ) during phi lifting. Added new block during phi lifting sin16s::@14(between sin16s::@1 and sin16s::@2) @@ -2647,6 +2681,7 @@ Fixing phi predecessor for sin8s::isUpper#10 to new block ( sin8s -> sin8s::@15 Added new block during phi lifting sin8s::@16(between sin8s::@1 and sin8s::@2) Added new block during phi lifting sin8s::@17(between sin8s::@14 and sin8s::@3) Added new block during phi lifting sin8s::@18(between sin8s::@3 and sin8s::@4) +Added new block during phi lifting memset::@10(between memset::@4 and memset::@5) Added new block during phi lifting main::@8(between main::@7 and main::@1) Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 @@ -2667,11 +2702,14 @@ Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@4_1 Adding NOP phi() at start of memset::@1 Adding NOP phi() at start of sin16s_gen +Adding NOP phi() at start of sin16s_gen::@1_1 Adding NOP phi() at start of mul16u::@3 Adding NOP phi() at start of div32u16u Adding NOP phi() at start of sin8s_gen +Adding NOP phi() at start of sin8s_gen::@1_1 Adding NOP phi() at start of mul8u::@3 Adding NOP phi() at start of div16u CALL GRAPH @@ -2680,14 +2718,14 @@ Calls in [main] to sin8s_gen:10 sin16s_gen:12 print_cls:14 print_sbyte:25 print_ Calls in [print_sbyte] to print_char:44 print_byte:48 print_char:52 Calls in [print_byte] to print_char:63 print_char:68 Calls in [print_cls] to memset:72 -Calls in [sin16s_gen] to div32u16u:85 sin16s:92 -Calls in [sin16s] to mulu16_sel:116 mulu16_sel:123 mulu16_sel:128 mulu16_sel:136 mulu16_sel:143 -Calls in [mulu16_sel] to mul16u:159 -Calls in [div32u16u] to divr16u:183 divr16u:188 -Calls in [sin8s_gen] to div16u:224 sin8s:231 -Calls in [sin8s] to mulu8_sel:255 mulu8_sel:262 mulu8_sel:267 mulu8_sel:275 mulu8_sel:282 -Calls in [mulu8_sel] to mul8u:303 -Calls in [div16u] to divr16u:327 +Calls in [sin16s_gen] to div32u16u:86 sin16s:92 +Calls in [sin16s] to mulu16_sel:118 mulu16_sel:125 mulu16_sel:130 mulu16_sel:138 mulu16_sel:145 +Calls in [mulu16_sel] to mul16u:161 +Calls in [div32u16u] to divr16u:185 divr16u:190 +Calls in [sin8s_gen] to div16u:226 sin8s:232 +Calls in [sin8s] to mulu8_sel:258 mulu8_sel:265 mulu8_sel:270 mulu8_sel:278 mulu8_sel:285 +Calls in [mulu8_sel] to mul8u:306 +Calls in [div16u] to divr16u:330 Created 46 initial phi equivalence classes Coalesced [31] main::i#5 ← main::i#1 @@ -2703,70 +2741,70 @@ Coalesced [61] print_char::ch#5 ← print_char::ch#2 Coalesced (already) [62] print_char_cursor#51 ← print_char_cursor#10 Coalesced [66] print_char::ch#6 ← print_char::ch#3 Coalesced (already) [67] print_char_cursor#52 ← print_char_cursor#10 -Coalesced [83] memset::dst#4 ← memset::dst#1 -Coalesced [99] sin16s_gen::i#5 ← sin16s_gen::i#1 -Coalesced [100] sin16s_gen::x#5 ← sin16s_gen::x#1 -Coalesced [101] sin16s_gen::sintab#7 ← sin16s_gen::sintab#0 -Coalesced [104] sin16s::x#9 ← sin16s::x#1 -Coalesced [108] sin16s::x#11 ← sin16s::x#2 -Coalesced [114] mulu16_sel::v1#8 ← mulu16_sel::v1#0 -Coalesced [115] mulu16_sel::v2#8 ← mulu16_sel::v2#0 -Coalesced [121] mulu16_sel::v1#9 ← mulu16_sel::v1#1 -Coalesced [122] mulu16_sel::v2#9 ← mulu16_sel::v2#1 -Coalesced [127] mulu16_sel::v1#10 ← mulu16_sel::v1#2 -Coalesced [134] mulu16_sel::v1#6 ← mulu16_sel::v1#3 -Coalesced [135] mulu16_sel::v2#6 ← mulu16_sel::v2#3 -Coalesced [141] mulu16_sel::v1#7 ← mulu16_sel::v1#4 -Coalesced [142] mulu16_sel::v2#7 ← mulu16_sel::v2#4 -Coalesced [150] sin16s::return#6 ← sin16s::sinx#1 -Coalesced [154] sin16s::x#10 ← sin16s::x#4 -Coalesced [155] sin16s::x#8 ← sin16s::x#0 -Coalesced [165] mul16u::a#7 ← mul16u::a#1 -Coalesced [166] mul16u::mb#6 ← mul16u::b#0 -Coalesced [174] mul16u::res#9 ← mul16u::res#1 -Coalesced [178] mul16u::a#8 ← mul16u::a#0 -Coalesced [179] mul16u::res#7 ← mul16u::res#6 -Coalesced [180] mul16u::mb#7 ← mul16u::mb#1 -Coalesced (already) [181] mul16u::res#8 ← mul16u::res#2 -Coalesced [187] divr16u::rem#13 ← divr16u::rem#5 -Coalesced [194] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [195] divr16u::dividend#10 ← divr16u::dividend#6 -Coalesced [202] divr16u::rem#17 ← divr16u::rem#1 -Coalesced [209] divr16u::rem#19 ← divr16u::rem#2 -Coalesced [210] divr16u::return#10 ← divr16u::quotient#2 -Coalesced [216] divr16u::rem#15 ← divr16u::rem#10 -Coalesced [217] divr16u::dividend#11 ← divr16u::dividend#0 -Coalesced [218] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [219] divr16u::i#7 ← divr16u::i#1 -Coalesced [220] divr16u::rem#18 ← divr16u::rem#7 -Coalesced [221] divr16u::return#9 ← divr16u::quotient#1 -Coalesced [222] divr16u::rem#16 ← divr16u::rem#0 -Coalesced [238] sin8s_gen::i#5 ← sin8s_gen::i#1 -Coalesced [239] sin8s_gen::x#5 ← sin8s_gen::x#1 -Coalesced [240] sin8s_gen::sintab#7 ← sin8s_gen::sintab#0 -Coalesced [243] sin8s::x#9 ← sin8s::x#1 -Coalesced [247] sin8s::x#11 ← sin8s::x#2 -Coalesced [253] mulu8_sel::v1#10 ← mulu8_sel::v1#0 -Coalesced [254] mulu8_sel::v2#9 ← mulu8_sel::v2#0 -Coalesced [260] mulu8_sel::v1#6 ← mulu8_sel::v1#1 -Coalesced [261] mulu8_sel::v2#6 ← mulu8_sel::v2#1 -Coalesced [266] mulu8_sel::v1#7 ← mulu8_sel::v1#2 -Coalesced [273] mulu8_sel::v1#8 ← mulu8_sel::v1#3 -Coalesced [274] mulu8_sel::v2#7 ← mulu8_sel::v2#3 -Coalesced [280] mulu8_sel::v1#9 ← mulu8_sel::v1#4 -Coalesced [281] mulu8_sel::v2#8 ← mulu8_sel::v2#4 -Coalesced [289] sin8s::usinx#9 ← sin8s::usinx#2 -Coalesced [293] sin8s::return#6 ← sin8s::sinx#1 -Coalesced [297] sin8s::usinx#8 ← sin8s::usinx#1 -Coalesced [298] sin8s::x#10 ← sin8s::x#4 -Coalesced [299] sin8s::x#8 ← sin8s::x#0 -Coalesced [309] mul8u::a#7 ← mul8u::a#1 -Coalesced [310] mul8u::mb#6 ← mul8u::b#0 -Coalesced [318] mul8u::res#9 ← mul8u::res#1 -Coalesced [322] mul8u::a#8 ← mul8u::a#0 -Coalesced [323] mul8u::res#7 ← mul8u::res#6 -Coalesced [324] mul8u::mb#7 ← mul8u::mb#1 -Coalesced (already) [325] mul8u::res#8 ← mul8u::res#2 +Coalesced [84] memset::dst#6 ← memset::dst#1 +Coalesced [101] sin16s_gen::i#8 ← sin16s_gen::i#1 +Coalesced [102] sin16s_gen::x#8 ← sin16s_gen::x#1 +Coalesced [103] sin16s_gen::sintab#10 ← sin16s_gen::sintab#0 +Coalesced [106] sin16s::x#9 ← sin16s::x#1 +Coalesced [110] sin16s::x#11 ← sin16s::x#2 +Coalesced [116] mulu16_sel::v1#8 ← mulu16_sel::v1#0 +Coalesced [117] mulu16_sel::v2#8 ← mulu16_sel::v2#0 +Coalesced [123] mulu16_sel::v1#9 ← mulu16_sel::v1#1 +Coalesced [124] mulu16_sel::v2#9 ← mulu16_sel::v2#1 +Coalesced [129] mulu16_sel::v1#10 ← mulu16_sel::v1#2 +Coalesced [136] mulu16_sel::v1#6 ← mulu16_sel::v1#3 +Coalesced [137] mulu16_sel::v2#6 ← mulu16_sel::v2#3 +Coalesced [143] mulu16_sel::v1#7 ← mulu16_sel::v1#4 +Coalesced [144] mulu16_sel::v2#7 ← mulu16_sel::v2#4 +Coalesced [152] sin16s::return#6 ← sin16s::sinx#1 +Coalesced [156] sin16s::x#10 ← sin16s::x#4 +Coalesced [157] sin16s::x#8 ← sin16s::x#0 +Coalesced [167] mul16u::a#7 ← mul16u::a#1 +Coalesced [168] mul16u::mb#6 ← mul16u::b#0 +Coalesced [176] mul16u::res#9 ← mul16u::res#1 +Coalesced [180] mul16u::a#8 ← mul16u::a#0 +Coalesced [181] mul16u::res#7 ← mul16u::res#6 +Coalesced [182] mul16u::mb#7 ← mul16u::mb#1 +Coalesced (already) [183] mul16u::res#8 ← mul16u::res#2 +Coalesced [189] divr16u::rem#13 ← divr16u::rem#5 +Coalesced [196] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [197] divr16u::dividend#10 ← divr16u::dividend#6 +Coalesced [204] divr16u::rem#17 ← divr16u::rem#1 +Coalesced [211] divr16u::rem#19 ← divr16u::rem#2 +Coalesced [212] divr16u::return#10 ← divr16u::quotient#2 +Coalesced [218] divr16u::rem#15 ← divr16u::rem#10 +Coalesced [219] divr16u::dividend#11 ← divr16u::dividend#0 +Coalesced [220] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [221] divr16u::i#7 ← divr16u::i#1 +Coalesced [222] divr16u::rem#18 ← divr16u::rem#7 +Coalesced [223] divr16u::return#9 ← divr16u::quotient#1 +Coalesced [224] divr16u::rem#16 ← divr16u::rem#0 +Coalesced [241] sin8s_gen::i#8 ← sin8s_gen::i#1 +Coalesced [242] sin8s_gen::x#8 ← sin8s_gen::x#1 +Coalesced [243] sin8s_gen::sintab#10 ← sin8s_gen::sintab#0 +Coalesced [246] sin8s::x#9 ← sin8s::x#1 +Coalesced [250] sin8s::x#11 ← sin8s::x#2 +Coalesced [256] mulu8_sel::v1#10 ← mulu8_sel::v1#0 +Coalesced [257] mulu8_sel::v2#9 ← mulu8_sel::v2#0 +Coalesced [263] mulu8_sel::v1#6 ← mulu8_sel::v1#1 +Coalesced [264] mulu8_sel::v2#6 ← mulu8_sel::v2#1 +Coalesced [269] mulu8_sel::v1#7 ← mulu8_sel::v1#2 +Coalesced [276] mulu8_sel::v1#8 ← mulu8_sel::v1#3 +Coalesced [277] mulu8_sel::v2#7 ← mulu8_sel::v2#3 +Coalesced [283] mulu8_sel::v1#9 ← mulu8_sel::v1#4 +Coalesced [284] mulu8_sel::v2#8 ← mulu8_sel::v2#4 +Coalesced [292] sin8s::usinx#9 ← sin8s::usinx#2 +Coalesced [296] sin8s::return#6 ← sin8s::sinx#1 +Coalesced [300] sin8s::usinx#8 ← sin8s::usinx#1 +Coalesced [301] sin8s::x#10 ← sin8s::x#4 +Coalesced [302] sin8s::x#8 ← sin8s::x#0 +Coalesced [312] mul8u::a#7 ← mul8u::a#1 +Coalesced [313] mul8u::mb#6 ← mul8u::b#0 +Coalesced [321] mul8u::res#9 ← mul8u::res#1 +Coalesced [325] mul8u::a#8 ← mul8u::a#0 +Coalesced [326] mul8u::res#7 ← mul8u::res#6 +Coalesced [327] mul8u::mb#7 ← mul8u::mb#1 +Coalesced (already) [328] mul8u::res#8 ← mul8u::res#2 Coalesced down to 35 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) @13 @@ -2780,7 +2818,11 @@ Culled Empty Block (label) print_sbyte::@7 Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) print_cls::@1 Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@4_1 Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@10 +Culled Empty Block (label) sin16s_gen::@1_1 +Culled Empty Block (label) sin16s_gen::@9 Culled Empty Block (label) sin16s::@14 Culled Empty Block (label) sin16s::@13 Culled Empty Block (label) mul16u::@3 @@ -2788,6 +2830,8 @@ Culled Empty Block (label) mul16u::@10 Culled Empty Block (label) divr16u::@8 Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@9 +Culled Empty Block (label) sin8s_gen::@1_1 +Culled Empty Block (label) sin8s_gen::@9 Culled Empty Block (label) sin8s::@17 Culled Empty Block (label) sin8s::@16 Culled Empty Block (label) sin8s::@15 @@ -2960,18 +3004,18 @@ print_cls::@return: scope:[print_cls] from print_cls to:@return memset: scope:[memset] from print_cls [56] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [57] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [58] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [59] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [57] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [58] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [60] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [59] return + [61] return to:@return -memset::@2: scope:[memset] from memset::@1 - [60] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [61] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 sin16s_gen: scope:[sin16s_gen] from main::@2 [62] phi() [63] call div32u16u @@ -2979,28 +3023,28 @@ sin16s_gen: scope:[sin16s_gen] from main::@2 to:sin16s_gen::@3 sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen [65] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 - to:sin16s_gen::@1 -sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@3 sin16s_gen::@4 - [66] (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@3/(const signed word[$c0]) main::sintabw#0 sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 ) - [66] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) - [66] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) - [67] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 - to:sin16s_gen::@return -sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 - [68] return - to:@return -sin16s_gen::@2: scope:[sin16s_gen] from sin16s_gen::@1 - [69] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 - [70] call sin16s - [71] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + to:sin16s_gen::@2 +sin16s_gen::@2: scope:[sin16s_gen] from sin16s_gen::@1 sin16s_gen::@3 + [66] (signed word*) sin16s_gen::sintab#7 ← phi( sin16s_gen::@1/(signed word*) sin16s_gen::sintab#0 sin16s_gen::@3/(const signed word[$c0]) main::sintabw#0 ) + [66] (dword) sin16s_gen::x#5 ← phi( sin16s_gen::@1/(dword) sin16s_gen::x#1 sin16s_gen::@3/(byte) 0 ) + [66] (word) sin16s_gen::i#5 ← phi( sin16s_gen::@1/(word) sin16s_gen::i#1 sin16s_gen::@3/(byte) 0 ) + [67] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 + [68] call sin16s + [69] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen::@4 sin16s_gen::@4: scope:[sin16s_gen] from sin16s_gen::@2 - [72] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 - [73] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 - [74] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [75] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 - [76] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 + [70] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 + [71] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 + [72] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD + [73] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 + [74] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#5 to:sin16s_gen::@1 +sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@4 + [75] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 + to:sin16s_gen::@return +sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 + [76] return + to:@return sin16s: scope:[sin16s] from sin16s_gen::@2 [77] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 to:sin16s::@4 @@ -3175,28 +3219,28 @@ sin8s_gen: scope:[sin8s_gen] from main to:sin8s_gen::@3 sin8s_gen::@3: scope:[sin8s_gen] from sin8s_gen [167] (word) sin8s_gen::step#0 ← (word) div16u::return#2 - to:sin8s_gen::@1 -sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen::@3 sin8s_gen::@4 - [168] (signed byte*) sin8s_gen::sintab#2 ← phi( sin8s_gen::@3/(const signed byte[$c0]) main::sintabb#0 sin8s_gen::@4/(signed byte*) sin8s_gen::sintab#0 ) - [168] (word) sin8s_gen::x#2 ← phi( sin8s_gen::@3/(byte) 0 sin8s_gen::@4/(word) sin8s_gen::x#1 ) - [168] (word) sin8s_gen::i#2 ← phi( sin8s_gen::@3/(byte) 0 sin8s_gen::@4/(word) sin8s_gen::i#1 ) - [169] if((word) sin8s_gen::i#2<(const word) main::wavelength#0) goto sin8s_gen::@2 - to:sin8s_gen::@return -sin8s_gen::@return: scope:[sin8s_gen] from sin8s_gen::@1 - [170] return - to:@return -sin8s_gen::@2: scope:[sin8s_gen] from sin8s_gen::@1 - [171] (word) sin8s::x#0 ← (word) sin8s_gen::x#2 - [172] call sin8s - [173] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 + to:sin8s_gen::@2 +sin8s_gen::@2: scope:[sin8s_gen] from sin8s_gen::@1 sin8s_gen::@3 + [168] (signed byte*) sin8s_gen::sintab#7 ← phi( sin8s_gen::@1/(signed byte*) sin8s_gen::sintab#0 sin8s_gen::@3/(const signed byte[$c0]) main::sintabb#0 ) + [168] (word) sin8s_gen::x#5 ← phi( sin8s_gen::@1/(word) sin8s_gen::x#1 sin8s_gen::@3/(byte) 0 ) + [168] (word) sin8s_gen::i#5 ← phi( sin8s_gen::@1/(word) sin8s_gen::i#1 sin8s_gen::@3/(byte) 0 ) + [169] (word) sin8s::x#0 ← (word) sin8s_gen::x#5 + [170] call sin8s + [171] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 to:sin8s_gen::@4 sin8s_gen::@4: scope:[sin8s_gen] from sin8s_gen::@2 - [174] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 - [175] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$2 - [176] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#2 - [177] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0 - [178] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#2 + [172] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 + [173] *((signed byte*) sin8s_gen::sintab#7) ← (signed byte~) sin8s_gen::$2 + [174] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#7 + [175] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#5 + (word) sin8s_gen::step#0 + [176] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#5 to:sin8s_gen::@1 +sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen::@4 + [177] if((word) sin8s_gen::i#1<(const word) main::wavelength#0) goto sin8s_gen::@2 + to:sin8s_gen::@return +sin8s_gen::@return: scope:[sin8s_gen] from sin8s_gen::@1 + [178] return + to:@return sin8s: scope:[sin8s] from sin8s_gen::@2 [179] if((word) sin8s::x#0<(const word) PI_u4f12#0) goto sin8s::@1 to:sin8s::@5 @@ -3400,8 +3444,8 @@ VARIABLE REGISTER WEIGHTS (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst -(byte*) memset::dst#1 22.0 -(byte*) memset::dst#2 14.666666666666666 +(byte*) memset::dst#1 16.5 +(byte*) memset::dst#4 16.5 (byte*) memset::end (word) memset::num (void*) memset::return @@ -3557,17 +3601,17 @@ VARIABLE REGISTER WEIGHTS (void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength) (signed word~) sin16s_gen::$2 22.0 (word) sin16s_gen::i -(word) sin16s_gen::i#1 22.0 -(word) sin16s_gen::i#2 3.666666666666667 +(word) sin16s_gen::i#1 16.5 +(word) sin16s_gen::i#5 2.75 (signed word*) sin16s_gen::sintab -(signed word*) sin16s_gen::sintab#0 7.333333333333333 -(signed word*) sin16s_gen::sintab#2 4.714285714285714 +(signed word*) sin16s_gen::sintab#0 5.5 +(signed word*) sin16s_gen::sintab#7 5.5 (dword) sin16s_gen::step (dword) sin16s_gen::step#0 1.1818181818181819 (word) sin16s_gen::wavelength (dword) sin16s_gen::x -(dword) sin16s_gen::x#1 11.0 -(dword) sin16s_gen::x#2 4.125 +(dword) sin16s_gen::x#1 7.333333333333333 +(dword) sin16s_gen::x#5 4.714285714285714 (signed byte()) sin8s((word) sin8s::x) (word~) sin8s::$4 4.0 (byte) sin8s::DIV_6 @@ -3607,17 +3651,17 @@ VARIABLE REGISTER WEIGHTS (void()) sin8s_gen((signed byte*) sin8s_gen::sintab , (word) sin8s_gen::wavelength) (signed byte~) sin8s_gen::$2 22.0 (word) sin8s_gen::i -(word) sin8s_gen::i#1 22.0 -(word) sin8s_gen::i#2 3.666666666666667 +(word) sin8s_gen::i#1 16.5 +(word) sin8s_gen::i#5 2.75 (signed byte*) sin8s_gen::sintab -(signed byte*) sin8s_gen::sintab#0 7.333333333333333 -(signed byte*) sin8s_gen::sintab#2 4.714285714285714 +(signed byte*) sin8s_gen::sintab#0 5.5 +(signed byte*) sin8s_gen::sintab#7 5.5 (word) sin8s_gen::step (word) sin8s_gen::step#0 1.1818181818181819 (word) sin8s_gen::wavelength (word) sin8s_gen::x -(word) sin8s_gen::x#1 11.0 -(word) sin8s_gen::x#2 4.125 +(word) sin8s_gen::x#1 7.333333333333333 +(word) sin8s_gen::x#5 4.714285714285714 Not consolidating phi with different size mul16u::mb#2 mul16u::b#0 Not consolidating phi with different size mul8u::mb#2 mul8u::b#0 @@ -3627,10 +3671,10 @@ Initial phi equivalence classes [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] -[ memset::dst#2 memset::dst#1 ] -[ sin16s_gen::i#2 sin16s_gen::i#1 ] -[ sin16s_gen::x#2 sin16s_gen::x#1 ] -[ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] +[ memset::dst#4 memset::dst#1 ] +[ sin16s_gen::i#5 sin16s_gen::i#1 ] +[ sin16s_gen::x#5 sin16s_gen::x#1 ] +[ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] [ sin16s::isUpper#2 ] [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -3645,9 +3689,9 @@ Initial phi equivalence classes [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] -[ sin8s_gen::i#2 sin8s_gen::i#1 ] -[ sin8s_gen::x#2 sin8s_gen::x#1 ] -[ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] +[ sin8s_gen::i#5 sin8s_gen::i#1 ] +[ sin8s_gen::x#5 sin8s_gen::x#1 ] +[ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] [ sin8s::isUpper#10 ] [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] @@ -3732,10 +3776,10 @@ Complete equivalence classes [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] -[ memset::dst#2 memset::dst#1 ] -[ sin16s_gen::i#2 sin16s_gen::i#1 ] -[ sin16s_gen::x#2 sin16s_gen::x#1 ] -[ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] +[ memset::dst#4 memset::dst#1 ] +[ sin16s_gen::i#5 sin16s_gen::i#1 ] +[ sin16s_gen::x#5 sin16s_gen::x#1 ] +[ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] [ sin16s::isUpper#2 ] [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -3750,9 +3794,9 @@ Complete equivalence classes [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] -[ sin8s_gen::i#2 sin8s_gen::i#1 ] -[ sin8s_gen::x#2 sin8s_gen::x#1 ] -[ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] +[ sin8s_gen::i#5 sin8s_gen::i#1 ] +[ sin8s_gen::x#5 sin8s_gen::x#1 ] +[ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] [ sin8s::isUpper#10 ] [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] @@ -3836,10 +3880,10 @@ Allocated zp ZP_WORD:3 [ print_str::str#2 print_str::str#0 ] Allocated zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Allocated zp ZP_BYTE:6 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Allocated zp ZP_WORD:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] -Allocated zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 ] -Allocated zp ZP_WORD:11 [ sin16s_gen::i#2 sin16s_gen::i#1 ] -Allocated zp ZP_DWORD:13 [ sin16s_gen::x#2 sin16s_gen::x#1 ] -Allocated zp ZP_WORD:17 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] +Allocated zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 ] +Allocated zp ZP_WORD:11 [ sin16s_gen::i#5 sin16s_gen::i#1 ] +Allocated zp ZP_DWORD:13 [ sin16s_gen::x#5 sin16s_gen::x#1 ] +Allocated zp ZP_WORD:17 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] Allocated zp ZP_BYTE:19 [ sin16s::isUpper#2 ] Allocated zp ZP_DWORD:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] Allocated zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] @@ -3854,9 +3898,9 @@ Allocated zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u: Allocated zp ZP_WORD:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] Allocated zp ZP_WORD:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] Allocated zp ZP_BYTE:49 [ divr16u::i#2 divr16u::i#1 ] -Allocated zp ZP_WORD:50 [ sin8s_gen::i#2 sin8s_gen::i#1 ] -Allocated zp ZP_WORD:52 [ sin8s_gen::x#2 sin8s_gen::x#1 ] -Allocated zp ZP_WORD:54 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] +Allocated zp ZP_WORD:50 [ sin8s_gen::i#5 sin8s_gen::i#1 ] +Allocated zp ZP_WORD:52 [ sin8s_gen::x#5 sin8s_gen::x#1 ] +Allocated zp ZP_WORD:54 [ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] Allocated zp ZP_BYTE:56 [ sin8s::isUpper#10 ] Allocated zp ZP_WORD:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] Allocated zp ZP_BYTE:59 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] @@ -4297,43 +4341,44 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = 9 - // [57] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [57] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [57] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [57] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [58] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [57] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [60] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [58] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [61] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [59] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [57] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [57] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [60] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #sin16s_gen::@1] - b1_from_b3: - // [66] phi (signed word*) sin16s_gen::sintab#2 = (const signed word[$c0]) main::sintabw#0 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- pwsz1=pwsc1 + // [66] phi from sin16s_gen::@3 to sin16s_gen::@2 [phi:sin16s_gen::@3->sin16s_gen::@2] + b2_from_b3: + // [66] phi (signed word*) sin16s_gen::sintab#7 = (const signed word[$c0]) main::sintabw#0 [phi:sin16s_gen::@3->sin16s_gen::@2#0] -- pwsz1=pwsc1 lda #main.sintabw sta sintab+1 - // [66] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 + // [66] phi (dword) sin16s_gen::x#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [66] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [66] phi (word) sin16s_gen::i#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen::@1 - b1: - // [67] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen::@2] + b2_from_b1: + // [66] phi (signed word*) sin16s_gen::sintab#7 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@1->sin16s_gen::@2#0] -- register_copy + // [66] phi (dword) sin16s_gen::x#5 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@1->sin16s_gen::@2#1] -- register_copy + // [66] phi (word) sin16s_gen::i#5 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@1->sin16s_gen::@2#2] -- register_copy + jmp b2 // sin16s_gen::@2 b2: - // [69] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2 + // [67] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -4419,9 +4453,9 @@ sin16s_gen: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [70] call sin16s + // [68] call sin16s jsr sin16s - // [71] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 + // [69] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 lda sin16s.return_1 sta sin16s.return lda sin16s.return_1+1 @@ -4429,19 +4463,19 @@ sin16s_gen: { jmp b4 // sin16s_gen::@4 b4: - // [72] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 + // [70] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 lda sin16s.return sta _2 lda sin16s.return+1 sta _2+1 - // [73] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 + // [71] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 ldy #0 lda _2 sta (sintab),y iny lda _2+1 sta (sintab),y - // [74] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [72] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -4449,7 +4483,7 @@ sin16s_gen: { bcc !+ inc sintab+1 !: - // [75] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 + // [73] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -4463,17 +4497,29 @@ sin16s_gen: { lda x+3 adc step+3 sta x+3 - // [76] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 -- vwuz1=_inc_vwuz1 + // [74] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#5 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [66] phi from sin16s_gen::@4 to sin16s_gen::@1 [phi:sin16s_gen::@4->sin16s_gen::@1] - b1_from_b4: - // [66] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy - // [66] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy - // [66] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen::@1 + b1: + // [75] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #sin8s_gen::@1] - b1_from_b3: - // [168] phi (signed byte*) sin8s_gen::sintab#2 = (const signed byte[$c0]) main::sintabb#0 [phi:sin8s_gen::@3->sin8s_gen::@1#0] -- pbsz1=pbsc1 + // [168] phi from sin8s_gen::@3 to sin8s_gen::@2 [phi:sin8s_gen::@3->sin8s_gen::@2] + b2_from_b3: + // [168] phi (signed byte*) sin8s_gen::sintab#7 = (const signed byte[$c0]) main::sintabb#0 [phi:sin8s_gen::@3->sin8s_gen::@2#0] -- pbsz1=pbsc1 lda #main.sintabb sta sintab+1 - // [168] phi (word) sin8s_gen::x#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vbuc1 + // [168] phi (word) sin8s_gen::x#5 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@2#1] -- vwuz1=vbuc1 lda #<0 sta x lda #>0 sta x+1 - // [168] phi (word) sin8s_gen::i#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vbuc1 + // [168] phi (word) sin8s_gen::i#5 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.12] - // sin8s_gen::@1 - b1: - // [169] if((word) sin8s_gen::i#2<(const word) main::wavelength#0) goto sin8s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.wavelength - bcc b2 - bne !+ - lda i - cmp #sin8s_gen::@2] + b2_from_b1: + // [168] phi (signed byte*) sin8s_gen::sintab#7 = (signed byte*) sin8s_gen::sintab#0 [phi:sin8s_gen::@1->sin8s_gen::@2#0] -- register_copy + // [168] phi (word) sin8s_gen::x#5 = (word) sin8s_gen::x#1 [phi:sin8s_gen::@1->sin8s_gen::@2#1] -- register_copy + // [168] phi (word) sin8s_gen::i#5 = (word) sin8s_gen::i#1 [phi:sin8s_gen::@1->sin8s_gen::@2#2] -- register_copy + jmp b2 // sin8s_gen::@2 b2: - // [171] (word) sin8s::x#0 ← (word) sin8s_gen::x#2 -- vwuz1=vwuz2 + // [169] (word) sin8s::x#0 ← (word) sin8s_gen::x#5 -- vwuz1=vwuz2 lda x sta sin8s.x lda x+1 sta sin8s.x+1 - // [172] call sin8s + // [170] call sin8s jsr sin8s - // [173] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 -- vbsz1=vbsz2 + // [171] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 -- vbsz1=vbsz2 lda sin8s.return_1 sta sin8s.return jmp b4 // sin8s_gen::@4 b4: - // [174] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 -- vbsz1=vbsz2 + // [172] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 -- vbsz1=vbsz2 lda sin8s.return sta _2 - // [175] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$2 -- _deref_pbsz1=vbsz2 + // [173] *((signed byte*) sin8s_gen::sintab#7) ← (signed byte~) sin8s_gen::$2 -- _deref_pbsz1=vbsz2 lda _2 ldy #0 sta (sintab),y - // [176] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#2 -- pbsz1=_inc_pbsz1 + // [174] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#7 -- pbsz1=_inc_pbsz1 inc sintab bne !+ inc sintab+1 !: - // [177] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0 -- vwuz1=vwuz1_plus_vwuz2 + // [175] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#5 + (word) sin8s_gen::step#0 -- vwuz1=vwuz1_plus_vwuz2 lda x clc adc step @@ -5307,17 +5342,29 @@ sin8s_gen: { lda x+1 adc step+1 sta x+1 - // [178] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#2 -- vwuz1=_inc_vwuz1 + // [176] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#5 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [168] phi from sin8s_gen::@4 to sin8s_gen::@1 [phi:sin8s_gen::@4->sin8s_gen::@1] - b1_from_b4: - // [168] phi (signed byte*) sin8s_gen::sintab#2 = (signed byte*) sin8s_gen::sintab#0 [phi:sin8s_gen::@4->sin8s_gen::@1#0] -- register_copy - // [168] phi (word) sin8s_gen::x#2 = (word) sin8s_gen::x#1 [phi:sin8s_gen::@4->sin8s_gen::@1#1] -- register_copy - // [168] phi (word) sin8s_gen::i#2 = (word) sin8s_gen::i#1 [phi:sin8s_gen::@4->sin8s_gen::@1#2] -- register_copy jmp b1 + // u[4.12] + // sin8s_gen::@1 + b1: + // [177] if((word) sin8s_gen::i#1<(const word) main::wavelength#0) goto sin8s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #> (byte) 4 [ print_char_cursor#10 print_byte::b#0 print_byte::$0 ] ( main:2::print_sbyte:19::print_byte:37 [ main::i#2 print_char_cursor#10 print_byte::b#0 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:81 [ print_byte::b#0 ] Statement [49] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte) $f [ print_char_cursor#10 print_byte::$2 ] ( main:2::print_sbyte:19::print_byte:37 [ main::i#2 print_char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a -Statement [58] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:9::memset:54 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [60] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:9::memset:54 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [58] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:9::memset:54 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [60] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:9::memset:54 [ memset::dst#1 ] ) always clobbers reg byte a Statement [64] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:2::sin16s_gen:7 [ div32u16u::return#2 ] ) always clobbers reg byte a Statement [65] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen::step#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 ] ) always clobbers reg byte a -Statement [67] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ) always clobbers reg byte a -Statement [69] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [71] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [72] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ) always clobbers reg byte a -Statement [73] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [74] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [75] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [77] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [78] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [80] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [67] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ) always clobbers reg byte a +Statement [69] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#0 ] ) always clobbers reg byte a +Statement [70] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s_gen::$2 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s_gen::$2 ] ) always clobbers reg byte a +Statement [71] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 ] ) always clobbers reg byte a reg byte y +Statement [72] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [73] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [75] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#1 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#1 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [77] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ) always clobbers reg byte a +Statement [78] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#1 ] ) always clobbers reg byte a +Statement [80] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ sin16s::isUpper#2 ] -Statement [81] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [83] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [81] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [83] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:19 [ sin16s::isUpper#2 ] -Statement [84] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [85] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [86] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [88] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [89] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [90] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [91] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [93] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [94] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [95] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [97] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [98] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [99] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [100] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [101] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [103] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [104] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [105] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [106] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [108] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [109] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [110] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [111] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [113] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [116] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [118] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 [ mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ) always clobbers reg byte a +Statement [84] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [85] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [86] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [88] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [89] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [90] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [91] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [93] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [94] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [95] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [97] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [98] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [99] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [100] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [101] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [103] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [104] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [105] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [106] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [108] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [109] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [110] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [111] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [113] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [116] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#5 ] ) always clobbers reg byte a +Statement [118] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 [ mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ mulu16_sel::select#5 ] -Statement [119] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 [ mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a -Statement [121] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#2 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] ) always clobbers reg byte a -Statement [122] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [123] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [124] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a -Statement [128] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [130] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [132] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [119] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 [ mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [121] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#2 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] ) always clobbers reg byte a +Statement [122] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [123] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [124] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [128] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [130] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [132] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a Statement [138] (word) divr16u::return#3 ← (word) divr16u::return#0 [ divr16u::return#3 rem16u#1 ] ( main:2::sin16s_gen:7::div32u16u:63 [ divr16u::return#3 rem16u#1 ] ) always clobbers reg byte a Statement [139] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen:7::div32u16u:63 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [140] (word) divr16u::rem#5 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#5 ] ( main:2::sin16s_gen:7::div32u16u:63 [ div32u16u::quotient_hi#0 divr16u::rem#5 ] ) always clobbers reg byte a @@ -5873,30 +5920,30 @@ Statement [158] (word) divr16u::rem#2 ← (word) divr16u::rem#7 - (const word) m Statement [162] (word) rem16u#1 ← (word) divr16u::rem#10 [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_gen:7::div32u16u:63::divr16u:137 [ divr16u::return#0 rem16u#1 ] main:2::sin16s_gen:7::div32u16u:63::divr16u:141 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] main:2::sin8s_gen:5::div16u:165::divr16u:242 [ divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a Statement [166] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 ] ( main:2::sin8s_gen:5 [ div16u::return#2 ] ) always clobbers reg byte a Statement [167] (word) sin8s_gen::step#0 ← (word) div16u::return#2 [ sin8s_gen::step#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 ] ) always clobbers reg byte a -Statement [169] if((word) sin8s_gen::i#2<(const word) main::wavelength#0) goto sin8s_gen::@2 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ) always clobbers reg byte a -Statement [171] (word) sin8s::x#0 ← (word) sin8s_gen::x#2 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ) always clobbers reg byte a -Statement [175] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$2 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ) always clobbers reg byte y -Statement [177] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [179] if((word) sin8s::x#0<(const word) PI_u4f12#0) goto sin8s::@1 [ sin8s::x#0 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ) always clobbers reg byte a -Statement [180] (word) sin8s::x#1 ← (word) sin8s::x#0 - (const word) PI_u4f12#0 [ sin8s::x#1 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#1 ] ) always clobbers reg byte a -Statement [182] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a +Statement [169] (word) sin8s::x#0 ← (word) sin8s_gen::x#5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#0 ] ) always clobbers reg byte a +Statement [173] *((signed byte*) sin8s_gen::sintab#7) ← (signed byte~) sin8s_gen::$2 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 ] ) always clobbers reg byte y +Statement [175] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#5 + (word) sin8s_gen::step#0 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [177] if((word) sin8s_gen::i#1<(const word) main::wavelength#0) goto sin8s_gen::@2 [ sin8s_gen::step#0 sin8s_gen::i#1 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#1 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [179] if((word) sin8s::x#0<(const word) PI_u4f12#0) goto sin8s::@1 [ sin8s::x#0 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#0 ] ) always clobbers reg byte a +Statement [180] (word) sin8s::x#1 ← (word) sin8s::x#0 - (const word) PI_u4f12#0 [ sin8s::x#1 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#1 ] ) always clobbers reg byte a +Statement [182] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:56 [ sin8s::isUpper#10 ] -Statement [183] (word) sin8s::x#2 ← (const word) PI_u4f12#0 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#2 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x#2 ] ) always clobbers reg byte a -Statement [185] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a -Statement [186] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a -Statement [201] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a +Statement [183] (word) sin8s::x#2 ← (const word) PI_u4f12#0 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#2 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x#2 ] ) always clobbers reg byte a +Statement [185] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a +Statement [186] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a +Statement [201] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:167 [ sin8s::x1#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:171 [ sin8s::x3#0 ] -Statement [212] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a +Statement [212] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:174 [ sin8s::usinx#0 ] -Statement [213] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a -Statement [218] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::sinx#1 ] ) always clobbers reg byte a -Statement [226] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#2 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] ) always clobbers reg byte a +Statement [213] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a +Statement [218] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::sinx#1 ] ) always clobbers reg byte a +Statement [226] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#2 ] ( main:2::sin8s_gen:5::sin8s:170::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:63 [ mulu8_sel::select#5 ] -Statement [227] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a -Statement [228] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a -Statement [229] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a -Statement [237] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [227] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8s_gen:5::sin8s:170::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a +Statement [228] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8s_gen:5::sin8s:170::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a +Statement [229] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8s_gen:5::sin8s:170::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a +Statement [237] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:170::mulu8_sel:189::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:194::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:198::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:204::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:209::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:64 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] Statement [243] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8s_gen:5::div16u:165 [ divr16u::return#2 ] ) always clobbers reg byte a Statement [244] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 ] ( main:2::sin8s_gen:5::div16u:165 [ div16u::return#0 ] ) always clobbers reg byte a @@ -5912,56 +5959,56 @@ Statement [41] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b Statement [43] *((byte*) print_char_cursor#28) ← (byte) print_char::ch#4 [ print_char_cursor#28 ] ( main:2::print_sbyte:19::print_char:34 [ main::i#2 print_sbyte::b#1 print_char_cursor#28 ] main:2::print_sbyte:19::print_char:40 [ main::i#2 print_sbyte::b#1 print_char_cursor#28 ] main:2::print_sbyte:19::print_byte:37::print_char:48 [ main::i#2 print_byte::b#0 print_char_cursor#28 ] main:2::print_sbyte:19::print_byte:37::print_char:51 [ main::i#2 print_char_cursor#28 ] ) always clobbers reg byte y Statement [46] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte) 4 [ print_char_cursor#10 print_byte::b#0 print_byte::$0 ] ( main:2::print_sbyte:19::print_byte:37 [ main::i#2 print_char_cursor#10 print_byte::b#0 print_byte::$0 ] ) always clobbers reg byte a Statement [49] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte) $f [ print_char_cursor#10 print_byte::$2 ] ( main:2::print_sbyte:19::print_byte:37 [ main::i#2 print_char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a -Statement [58] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:9::memset:54 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [60] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:9::memset:54 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [58] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:9::memset:54 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [60] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:9::memset:54 [ memset::dst#1 ] ) always clobbers reg byte a Statement [64] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:2::sin16s_gen:7 [ div32u16u::return#2 ] ) always clobbers reg byte a Statement [65] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen::step#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 ] ) always clobbers reg byte a -Statement [67] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ) always clobbers reg byte a -Statement [69] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [71] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [72] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ) always clobbers reg byte a -Statement [73] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [74] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [75] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [77] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [78] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [80] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [81] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [83] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y -Statement [84] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [85] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [86] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [88] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [89] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [90] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [91] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [93] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [94] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [95] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [97] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [98] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [99] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [100] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [101] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [103] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [104] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [105] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [106] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [108] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [109] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [110] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [111] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [113] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [116] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:7::sin16s:70 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [118] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 [ mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ) always clobbers reg byte a -Statement [119] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 [ mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a -Statement [121] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#2 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] ) always clobbers reg byte a -Statement [122] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [123] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [124] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a -Statement [128] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [130] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [132] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [67] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ) always clobbers reg byte a +Statement [69] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#0 ] ) always clobbers reg byte a +Statement [70] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s_gen::$2 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s_gen::$2 ] ) always clobbers reg byte a +Statement [71] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 ] ) always clobbers reg byte a reg byte y +Statement [72] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [73] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [75] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#1 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#1 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [77] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#0 ] ) always clobbers reg byte a +Statement [78] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#1 ] ) always clobbers reg byte a +Statement [80] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [81] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [83] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y +Statement [84] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [85] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [86] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [88] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [89] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [90] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [91] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [93] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [94] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [95] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [97] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [98] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [99] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [100] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [101] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [103] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [104] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [105] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [106] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [108] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [109] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [110] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [111] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [113] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [116] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:7::sin16s:68 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::return#5 ] ) always clobbers reg byte a +Statement [118] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 [ mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ) always clobbers reg byte a +Statement [119] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 [ mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [121] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#2 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] ) always clobbers reg byte a +Statement [122] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [123] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [124] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [128] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [130] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [132] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:7::sin16s:68::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:68::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#5 sin16s_gen::x#5 sin16s_gen::sintab#7 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a Statement [138] (word) divr16u::return#3 ← (word) divr16u::return#0 [ divr16u::return#3 rem16u#1 ] ( main:2::sin16s_gen:7::div32u16u:63 [ divr16u::return#3 rem16u#1 ] ) always clobbers reg byte a Statement [139] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen:7::div32u16u:63 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a Statement [140] (word) divr16u::rem#5 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#5 ] ( main:2::sin16s_gen:7::div32u16u:63 [ div32u16u::quotient_hi#0 divr16u::rem#5 ] ) always clobbers reg byte a @@ -5975,26 +6022,26 @@ Statement [158] (word) divr16u::rem#2 ← (word) divr16u::rem#7 - (const word) m Statement [162] (word) rem16u#1 ← (word) divr16u::rem#10 [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_gen:7::div32u16u:63::divr16u:137 [ divr16u::return#0 rem16u#1 ] main:2::sin16s_gen:7::div32u16u:63::divr16u:141 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] main:2::sin8s_gen:5::div16u:165::divr16u:242 [ divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a Statement [166] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 ] ( main:2::sin8s_gen:5 [ div16u::return#2 ] ) always clobbers reg byte a Statement [167] (word) sin8s_gen::step#0 ← (word) div16u::return#2 [ sin8s_gen::step#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 ] ) always clobbers reg byte a -Statement [169] if((word) sin8s_gen::i#2<(const word) main::wavelength#0) goto sin8s_gen::@2 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ) always clobbers reg byte a -Statement [171] (word) sin8s::x#0 ← (word) sin8s_gen::x#2 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ) always clobbers reg byte a -Statement [175] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$2 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 ] ) always clobbers reg byte y -Statement [177] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ) always clobbers reg byte a -Statement [179] if((word) sin8s::x#0<(const word) PI_u4f12#0) goto sin8s::@1 [ sin8s::x#0 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ) always clobbers reg byte a -Statement [180] (word) sin8s::x#1 ← (word) sin8s::x#0 - (const word) PI_u4f12#0 [ sin8s::x#1 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#1 ] ) always clobbers reg byte a -Statement [182] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a -Statement [183] (word) sin8s::x#2 ← (const word) PI_u4f12#0 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#2 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x#2 ] ) always clobbers reg byte a -Statement [185] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a -Statement [186] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a -Statement [201] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a -Statement [212] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a -Statement [213] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a -Statement [218] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::sinx#1 ] ) always clobbers reg byte a -Statement [226] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#2 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] ) always clobbers reg byte a -Statement [227] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a -Statement [228] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a -Statement [229] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a -Statement [235] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a -Statement [237] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [169] (word) sin8s::x#0 ← (word) sin8s_gen::x#5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#0 ] ) always clobbers reg byte a +Statement [173] *((signed byte*) sin8s_gen::sintab#7) ← (signed byte~) sin8s_gen::$2 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 ] ) always clobbers reg byte y +Statement [175] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#5 + (word) sin8s_gen::step#0 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [177] if((word) sin8s_gen::i#1<(const word) main::wavelength#0) goto sin8s_gen::@2 [ sin8s_gen::step#0 sin8s_gen::i#1 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ( main:2::sin8s_gen:5 [ sin8s_gen::step#0 sin8s_gen::i#1 sin8s_gen::x#1 sin8s_gen::sintab#0 ] ) always clobbers reg byte a +Statement [179] if((word) sin8s::x#0<(const word) PI_u4f12#0) goto sin8s::@1 [ sin8s::x#0 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#0 ] ) always clobbers reg byte a +Statement [180] (word) sin8s::x#1 ← (word) sin8s::x#0 - (const word) PI_u4f12#0 [ sin8s::x#1 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#1 ] ) always clobbers reg byte a +Statement [182] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a +Statement [183] (word) sin8s::x#2 ← (const word) PI_u4f12#0 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#2 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x#2 ] ) always clobbers reg byte a +Statement [185] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a +Statement [186] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a +Statement [201] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a +Statement [212] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a +Statement [213] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a +Statement [218] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8s_gen:5::sin8s:170 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::sinx#1 ] ) always clobbers reg byte a +Statement [226] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#2 ] ( main:2::sin8s_gen:5::sin8s:170::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] ) always clobbers reg byte a +Statement [227] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8s_gen:5::sin8s:170::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a +Statement [228] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8s_gen:5::sin8s:170::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a +Statement [229] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8s_gen:5::sin8s:170::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a +Statement [235] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8s_gen:5::sin8s:170::mulu8_sel:189::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:194::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:198::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:204::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:209::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [237] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:170::mulu8_sel:189::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:194::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:198::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:204::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:170::mulu8_sel:209::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#5 sin8s_gen::x#5 sin8s_gen::sintab#7 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Statement [243] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8s_gen:5::div16u:165 [ divr16u::return#2 ] ) always clobbers reg byte a Statement [244] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 ] ( main:2::sin8s_gen:5::div16u:165 [ div16u::return#0 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , @@ -6002,10 +6049,10 @@ Potential registers zp ZP_WORD:3 [ print_str::str#2 print_str::str#0 ] : zp ZP_W Potential registers zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , Potential registers zp ZP_BYTE:6 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] : zp ZP_WORD:7 , -Potential registers zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:9 , -Potential registers zp ZP_WORD:11 [ sin16s_gen::i#2 sin16s_gen::i#1 ] : zp ZP_WORD:11 , -Potential registers zp ZP_DWORD:13 [ sin16s_gen::x#2 sin16s_gen::x#1 ] : zp ZP_DWORD:13 , -Potential registers zp ZP_WORD:17 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] : zp ZP_WORD:17 , +Potential registers zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:9 , +Potential registers zp ZP_WORD:11 [ sin16s_gen::i#5 sin16s_gen::i#1 ] : zp ZP_WORD:11 , +Potential registers zp ZP_DWORD:13 [ sin16s_gen::x#5 sin16s_gen::x#1 ] : zp ZP_DWORD:13 , +Potential registers zp ZP_WORD:17 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] : zp ZP_WORD:17 , Potential registers zp ZP_BYTE:19 [ sin16s::isUpper#2 ] : zp ZP_BYTE:19 , reg byte x , Potential registers zp ZP_DWORD:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp ZP_DWORD:20 , Potential registers zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp ZP_WORD:24 , @@ -6020,9 +6067,9 @@ Potential registers zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem# Potential registers zp ZP_WORD:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] : zp ZP_WORD:45 , Potential registers zp ZP_WORD:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:47 , Potential registers zp ZP_BYTE:49 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:49 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:50 [ sin8s_gen::i#2 sin8s_gen::i#1 ] : zp ZP_WORD:50 , -Potential registers zp ZP_WORD:52 [ sin8s_gen::x#2 sin8s_gen::x#1 ] : zp ZP_WORD:52 , -Potential registers zp ZP_WORD:54 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] : zp ZP_WORD:54 , +Potential registers zp ZP_WORD:50 [ sin8s_gen::i#5 sin8s_gen::i#1 ] : zp ZP_WORD:50 , +Potential registers zp ZP_WORD:52 [ sin8s_gen::x#5 sin8s_gen::x#1 ] : zp ZP_WORD:52 , +Potential registers zp ZP_WORD:54 [ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] : zp ZP_WORD:54 , Potential registers zp ZP_BYTE:56 [ sin8s::isUpper#10 ] : zp ZP_BYTE:56 , reg byte x , reg byte y , Potential registers zp ZP_WORD:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] : zp ZP_WORD:57 , Potential registers zp ZP_BYTE:59 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] : zp ZP_BYTE:59 , reg byte a , reg byte x , reg byte y , @@ -6111,11 +6158,11 @@ Uplift Scope [] 153.81: zp ZP_WORD:7 [ print_char_cursor#28 print_char_cursor#42 Uplift Scope [main] 22: zp ZP_WORD:71 [ main::$3 ] 22: zp ZP_WORD:73 [ main::$11 ] 22: zp ZP_WORD:75 [ main::$4 ] 22: zp ZP_WORD:77 [ main::sw#0 ] 22: zp ZP_BYTE:80 [ main::sd#0 ] 19.25: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 11: zp ZP_BYTE:79 [ main::$6 ] 3.67: zp ZP_BYTE:70 [ main::sb#0 ] Uplift Scope [sin8s] 27.5: zp ZP_WORD:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] 22: zp ZP_BYTE:163 [ sin8s::return#0 ] 13: zp ZP_BYTE:60 [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] 10: zp ZP_BYTE:59 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] 4: zp ZP_WORD:165 [ sin8s::$4 ] 4: zp ZP_BYTE:169 [ sin8s::x2#0 ] 4: zp ZP_BYTE:173 [ sin8s::x3_6#0 ] 4: zp ZP_BYTE:176 [ sin8s::x4#0 ] 4: zp ZP_BYTE:178 [ sin8s::x5#0 ] 4: zp ZP_BYTE:179 [ sin8s::x5_128#0 ] 1: zp ZP_BYTE:171 [ sin8s::x3#0 ] 0.64: zp ZP_BYTE:167 [ sin8s::x1#0 ] 0.33: zp ZP_BYTE:174 [ sin8s::usinx#0 ] 0.06: zp ZP_BYTE:56 [ sin8s::isUpper#10 ] Uplift Scope [sin16s] 27.5: zp ZP_DWORD:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp ZP_WORD:92 [ sin16s::return#0 ] 13: zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp ZP_DWORD:96 [ sin16s::$4 ] 4: zp ZP_WORD:104 [ sin16s::x2#0 ] 4: zp ZP_WORD:112 [ sin16s::x3_6#0 ] 4: zp ZP_WORD:118 [ sin16s::x4#0 ] 4: zp ZP_WORD:122 [ sin16s::x5#0 ] 4: zp ZP_WORD:124 [ sin16s::x5_128#0 ] 1: zp ZP_WORD:108 [ sin16s::x3#0 ] 1: zp ZP_WORD:126 [ sin16s::usinx#1 ] 0.64: zp ZP_WORD:100 [ sin16s::x1#0 ] 0.33: zp ZP_WORD:114 [ sin16s::usinx#0 ] 0.06: zp ZP_BYTE:19 [ sin16s::isUpper#2 ] -Uplift Scope [sin16s_gen] 25.67: zp ZP_WORD:11 [ sin16s_gen::i#2 sin16s_gen::i#1 ] 22: zp ZP_WORD:94 [ sin16s_gen::$2 ] 15.12: zp ZP_DWORD:13 [ sin16s_gen::x#2 sin16s_gen::x#1 ] 12.05: zp ZP_WORD:17 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] 1.18: zp ZP_DWORD:88 [ sin16s_gen::step#0 ] -Uplift Scope [sin8s_gen] 25.67: zp ZP_WORD:50 [ sin8s_gen::i#2 sin8s_gen::i#1 ] 22: zp ZP_BYTE:164 [ sin8s_gen::$2 ] 15.12: zp ZP_WORD:52 [ sin8s_gen::x#2 sin8s_gen::x#1 ] 12.05: zp ZP_WORD:54 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] 1.18: zp ZP_WORD:161 [ sin8s_gen::step#0 ] Uplift Scope [mulu16_sel] 24: zp ZP_WORD:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp ZP_WORD:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp ZP_WORD:102 [ mulu16_sel::return#0 ] 4: zp ZP_WORD:106 [ mulu16_sel::return#1 ] 4: zp ZP_WORD:110 [ mulu16_sel::return#2 ] 4: zp ZP_WORD:116 [ mulu16_sel::return#10 ] 4: zp ZP_WORD:120 [ mulu16_sel::return#11 ] 4: zp ZP_DWORD:132 [ mulu16_sel::$0 ] 4: zp ZP_DWORD:136 [ mulu16_sel::$1 ] 1.71: zp ZP_WORD:140 [ mulu16_sel::return#12 ] 0.33: zp ZP_BYTE:30 [ mulu16_sel::select#5 ] Uplift Scope [mulu8_sel] 24: zp ZP_BYTE:61 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] 21: zp ZP_BYTE:62 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] 4: zp ZP_BYTE:168 [ mulu8_sel::return#0 ] 4: zp ZP_BYTE:170 [ mulu8_sel::return#1 ] 4: zp ZP_BYTE:172 [ mulu8_sel::return#2 ] 4: zp ZP_BYTE:175 [ mulu8_sel::return#10 ] 4: zp ZP_BYTE:177 [ mulu8_sel::return#11 ] 4: zp ZP_WORD:182 [ mulu8_sel::$0 ] 4: zp ZP_WORD:184 [ mulu8_sel::$1 ] 1.71: zp ZP_BYTE:186 [ mulu8_sel::return#12 ] 0.33: zp ZP_BYTE:63 [ mulu8_sel::select#5 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [sin16s_gen] 22: zp ZP_WORD:94 [ sin16s_gen::$2 ] 19.25: zp ZP_WORD:11 [ sin16s_gen::i#5 sin16s_gen::i#1 ] 12.05: zp ZP_DWORD:13 [ sin16s_gen::x#5 sin16s_gen::x#1 ] 11: zp ZP_WORD:17 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] 1.18: zp ZP_DWORD:88 [ sin16s_gen::step#0 ] +Uplift Scope [sin8s_gen] 22: zp ZP_BYTE:164 [ sin8s_gen::$2 ] 19.25: zp ZP_WORD:50 [ sin8s_gen::i#5 sin8s_gen::i#1 ] 12.05: zp ZP_WORD:52 [ sin8s_gen::x#5 sin8s_gen::x#1 ] 11: zp ZP_WORD:54 [ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] 1.18: zp ZP_WORD:161 [ sin8s_gen::step#0 ] +Uplift Scope [memset] 33: zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 ] Uplift Scope [print_char] 14: zp ZP_BYTE:6 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Uplift Scope [print_sbyte] 10.83: zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Uplift Scope [div32u16u] 4: zp ZP_DWORD:84 [ div32u16u::return#2 ] 4: zp ZP_WORD:149 [ div32u16u::quotient_lo#0 ] 1.33: zp ZP_DWORD:151 [ div32u16u::return#0 ] 0.8: zp ZP_WORD:145 [ div32u16u::quotient_hi#0 ] @@ -6124,64 +6171,64 @@ Uplift Scope [div16u] 4: zp ZP_WORD:159 [ div16u::return#2 ] 1.33: zp ZP_WORD:19 Uplift Scope [RADIX] Uplift Scope [print_cls] -Uplifting [mul8u] best 39011 combination zp ZP_WORD:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:67 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:180 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ] -Uplifting [mul16u] best 38411 combination zp ZP_DWORD:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:37 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:128 [ mul16u::return#2 ] zp ZP_WORD:41 [ mul16u::b#0 ] -Uplifting [print_str] best 38411 combination zp ZP_WORD:3 [ print_str::str#2 print_str::str#0 ] -Uplifting [divr16u] best 38201 combination zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] zp ZP_WORD:143 [ divr16u::return#3 ] zp ZP_WORD:147 [ divr16u::return#4 ] zp ZP_WORD:188 [ divr16u::return#2 ] -Uplifting [] best 38201 combination zp ZP_WORD:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] zp ZP_WORD:157 [ rem16u#1 ] -Uplifting [main] best 37971 combination zp ZP_WORD:71 [ main::$3 ] zp ZP_WORD:73 [ main::$11 ] zp ZP_WORD:75 [ main::$4 ] zp ZP_WORD:77 [ main::sw#0 ] reg byte a [ main::sd#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$6 ] zp ZP_BYTE:70 [ main::sb#0 ] -Uplifting [sin8s] best 37866 combination zp ZP_WORD:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp ZP_WORD:165 [ sin8s::$4 ] zp ZP_BYTE:169 [ sin8s::x2#0 ] zp ZP_BYTE:173 [ sin8s::x3_6#0 ] zp ZP_BYTE:176 [ sin8s::x4#0 ] zp ZP_BYTE:178 [ sin8s::x5#0 ] zp ZP_BYTE:179 [ sin8s::x5_128#0 ] zp ZP_BYTE:171 [ sin8s::x3#0 ] zp ZP_BYTE:167 [ sin8s::x1#0 ] zp ZP_BYTE:174 [ sin8s::usinx#0 ] zp ZP_BYTE:56 [ sin8s::isUpper#10 ] +Uplifting [mul8u] best 39101 combination zp ZP_WORD:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:67 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:180 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ] +Uplifting [mul16u] best 38501 combination zp ZP_DWORD:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:37 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:128 [ mul16u::return#2 ] zp ZP_WORD:41 [ mul16u::b#0 ] +Uplifting [print_str] best 38501 combination zp ZP_WORD:3 [ print_str::str#2 print_str::str#0 ] +Uplifting [divr16u] best 38291 combination zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] zp ZP_WORD:143 [ divr16u::return#3 ] zp ZP_WORD:147 [ divr16u::return#4 ] zp ZP_WORD:188 [ divr16u::return#2 ] +Uplifting [] best 38291 combination zp ZP_WORD:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] zp ZP_WORD:157 [ rem16u#1 ] +Uplifting [main] best 38061 combination zp ZP_WORD:71 [ main::$3 ] zp ZP_WORD:73 [ main::$11 ] zp ZP_WORD:75 [ main::$4 ] zp ZP_WORD:77 [ main::sw#0 ] reg byte a [ main::sd#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$6 ] zp ZP_BYTE:70 [ main::sb#0 ] +Uplifting [sin8s] best 37956 combination zp ZP_WORD:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp ZP_WORD:165 [ sin8s::$4 ] zp ZP_BYTE:169 [ sin8s::x2#0 ] zp ZP_BYTE:173 [ sin8s::x3_6#0 ] zp ZP_BYTE:176 [ sin8s::x4#0 ] zp ZP_BYTE:178 [ sin8s::x5#0 ] zp ZP_BYTE:179 [ sin8s::x5_128#0 ] zp ZP_BYTE:171 [ sin8s::x3#0 ] zp ZP_BYTE:167 [ sin8s::x1#0 ] zp ZP_BYTE:174 [ sin8s::usinx#0 ] zp ZP_BYTE:56 [ sin8s::isUpper#10 ] Limited combination testing to 100 combinations of 5308416 possible. -Uplifting [sin16s] best 37866 combination zp ZP_DWORD:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:92 [ sin16s::return#0 ] zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:96 [ sin16s::$4 ] zp ZP_WORD:104 [ sin16s::x2#0 ] zp ZP_WORD:112 [ sin16s::x3_6#0 ] zp ZP_WORD:118 [ sin16s::x4#0 ] zp ZP_WORD:122 [ sin16s::x5#0 ] zp ZP_WORD:124 [ sin16s::x5_128#0 ] zp ZP_WORD:108 [ sin16s::x3#0 ] zp ZP_WORD:126 [ sin16s::usinx#1 ] zp ZP_WORD:100 [ sin16s::x1#0 ] zp ZP_WORD:114 [ sin16s::usinx#0 ] zp ZP_BYTE:19 [ sin16s::isUpper#2 ] -Uplifting [sin16s_gen] best 37866 combination zp ZP_WORD:11 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_WORD:94 [ sin16s_gen::$2 ] zp ZP_DWORD:13 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:17 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:88 [ sin16s_gen::step#0 ] -Uplifting [sin8s_gen] best 37806 combination zp ZP_WORD:50 [ sin8s_gen::i#2 sin8s_gen::i#1 ] reg byte a [ sin8s_gen::$2 ] zp ZP_WORD:52 [ sin8s_gen::x#2 sin8s_gen::x#1 ] zp ZP_WORD:54 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] zp ZP_WORD:161 [ sin8s_gen::step#0 ] -Uplifting [mulu16_sel] best 37790 combination zp ZP_WORD:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:102 [ mulu16_sel::return#0 ] zp ZP_WORD:106 [ mulu16_sel::return#1 ] zp ZP_WORD:110 [ mulu16_sel::return#2 ] zp ZP_WORD:116 [ mulu16_sel::return#10 ] zp ZP_WORD:120 [ mulu16_sel::return#11 ] zp ZP_DWORD:132 [ mulu16_sel::$0 ] zp ZP_DWORD:136 [ mulu16_sel::$1 ] zp ZP_WORD:140 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [mulu8_sel] best 37744 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp ZP_BYTE:172 [ mulu8_sel::return#2 ] zp ZP_BYTE:175 [ mulu8_sel::return#10 ] zp ZP_BYTE:177 [ mulu8_sel::return#11 ] zp ZP_WORD:182 [ mulu8_sel::$0 ] zp ZP_WORD:184 [ mulu8_sel::$1 ] zp ZP_BYTE:186 [ mulu8_sel::return#12 ] zp ZP_BYTE:63 [ mulu8_sel::select#5 ] +Uplifting [sin16s] best 37956 combination zp ZP_DWORD:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:92 [ sin16s::return#0 ] zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:96 [ sin16s::$4 ] zp ZP_WORD:104 [ sin16s::x2#0 ] zp ZP_WORD:112 [ sin16s::x3_6#0 ] zp ZP_WORD:118 [ sin16s::x4#0 ] zp ZP_WORD:122 [ sin16s::x5#0 ] zp ZP_WORD:124 [ sin16s::x5_128#0 ] zp ZP_WORD:108 [ sin16s::x3#0 ] zp ZP_WORD:126 [ sin16s::usinx#1 ] zp ZP_WORD:100 [ sin16s::x1#0 ] zp ZP_WORD:114 [ sin16s::usinx#0 ] zp ZP_BYTE:19 [ sin16s::isUpper#2 ] +Uplifting [mulu16_sel] best 37940 combination zp ZP_WORD:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:102 [ mulu16_sel::return#0 ] zp ZP_WORD:106 [ mulu16_sel::return#1 ] zp ZP_WORD:110 [ mulu16_sel::return#2 ] zp ZP_WORD:116 [ mulu16_sel::return#10 ] zp ZP_WORD:120 [ mulu16_sel::return#11 ] zp ZP_DWORD:132 [ mulu16_sel::$0 ] zp ZP_DWORD:136 [ mulu16_sel::$1 ] zp ZP_WORD:140 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [mulu8_sel] best 37894 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp ZP_BYTE:172 [ mulu8_sel::return#2 ] zp ZP_BYTE:175 [ mulu8_sel::return#10 ] zp ZP_BYTE:177 [ mulu8_sel::return#11 ] zp ZP_WORD:182 [ mulu8_sel::$0 ] zp ZP_WORD:184 [ mulu8_sel::$1 ] zp ZP_BYTE:186 [ mulu8_sel::return#12 ] zp ZP_BYTE:63 [ mulu8_sel::select#5 ] Limited combination testing to 100 combinations of 196608 possible. -Uplifting [memset] best 37744 combination zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_char] best 37729 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] -Uplifting [print_sbyte] best 37729 combination zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplifting [div32u16u] best 37729 combination zp ZP_DWORD:84 [ div32u16u::return#2 ] zp ZP_WORD:149 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:151 [ div32u16u::return#0 ] zp ZP_WORD:145 [ div32u16u::quotient_hi#0 ] -Uplifting [print_byte] best 37721 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] zp ZP_BYTE:81 [ print_byte::b#0 ] -Uplifting [div16u] best 37721 combination zp ZP_WORD:159 [ div16u::return#2 ] zp ZP_WORD:190 [ div16u::return#0 ] -Uplifting [RADIX] best 37721 combination -Uplifting [print_cls] best 37721 combination +Uplifting [sin16s_gen] best 37894 combination zp ZP_WORD:94 [ sin16s_gen::$2 ] zp ZP_WORD:11 [ sin16s_gen::i#5 sin16s_gen::i#1 ] zp ZP_DWORD:13 [ sin16s_gen::x#5 sin16s_gen::x#1 ] zp ZP_WORD:17 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] zp ZP_DWORD:88 [ sin16s_gen::step#0 ] +Uplifting [sin8s_gen] best 37834 combination reg byte a [ sin8s_gen::$2 ] zp ZP_WORD:50 [ sin8s_gen::i#5 sin8s_gen::i#1 ] zp ZP_WORD:52 [ sin8s_gen::x#5 sin8s_gen::x#1 ] zp ZP_WORD:54 [ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] zp ZP_WORD:161 [ sin8s_gen::step#0 ] +Uplifting [memset] best 37834 combination zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 ] +Uplifting [print_char] best 37819 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] +Uplifting [print_sbyte] best 37819 combination zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] +Uplifting [div32u16u] best 37819 combination zp ZP_DWORD:84 [ div32u16u::return#2 ] zp ZP_WORD:149 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:151 [ div32u16u::return#0 ] zp ZP_WORD:145 [ div32u16u::quotient_hi#0 ] +Uplifting [print_byte] best 37811 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] zp ZP_BYTE:81 [ print_byte::b#0 ] +Uplifting [div16u] best 37811 combination zp ZP_WORD:159 [ div16u::return#2 ] zp ZP_WORD:190 [ div16u::return#0 ] +Uplifting [RADIX] best 37811 combination +Uplifting [print_cls] best 37811 combination Attempting to uplift remaining variables inzp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplifting [print_sbyte] best 37721 combination zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] +Uplifting [print_sbyte] best 37811 combination zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:169 [ sin8s::x2#0 ] -Uplifting [sin8s] best 37717 combination reg byte a [ sin8s::x2#0 ] +Uplifting [sin8s] best 37807 combination reg byte a [ sin8s::x2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:172 [ mulu8_sel::return#2 ] -Uplifting [mulu8_sel] best 37711 combination reg byte a [ mulu8_sel::return#2 ] +Uplifting [mulu8_sel] best 37801 combination reg byte a [ mulu8_sel::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:173 [ sin8s::x3_6#0 ] -Uplifting [sin8s] best 37707 combination reg byte a [ sin8s::x3_6#0 ] +Uplifting [sin8s] best 37797 combination reg byte a [ sin8s::x3_6#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:175 [ mulu8_sel::return#10 ] -Uplifting [mulu8_sel] best 37701 combination reg byte a [ mulu8_sel::return#10 ] +Uplifting [mulu8_sel] best 37791 combination reg byte a [ mulu8_sel::return#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:176 [ sin8s::x4#0 ] -Uplifting [sin8s] best 37697 combination reg byte a [ sin8s::x4#0 ] +Uplifting [sin8s] best 37787 combination reg byte a [ sin8s::x4#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:177 [ mulu8_sel::return#11 ] -Uplifting [mulu8_sel] best 37691 combination reg byte a [ mulu8_sel::return#11 ] +Uplifting [mulu8_sel] best 37781 combination reg byte a [ mulu8_sel::return#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:178 [ sin8s::x5#0 ] -Uplifting [sin8s] best 37685 combination reg byte a [ sin8s::x5#0 ] +Uplifting [sin8s] best 37775 combination reg byte a [ sin8s::x5#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:179 [ sin8s::x5_128#0 ] -Uplifting [sin8s] best 37679 combination reg byte a [ sin8s::x5_128#0 ] +Uplifting [sin8s] best 37769 combination reg byte a [ sin8s::x5_128#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:70 [ main::sb#0 ] -Uplifting [main] best 37679 combination zp ZP_BYTE:70 [ main::sb#0 ] +Uplifting [main] best 37769 combination zp ZP_BYTE:70 [ main::sb#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:186 [ mulu8_sel::return#12 ] -Uplifting [mulu8_sel] best 37661 combination reg byte a [ mulu8_sel::return#12 ] +Uplifting [mulu8_sel] best 37751 combination reg byte a [ mulu8_sel::return#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:81 [ print_byte::b#0 ] -Uplifting [print_byte] best 37661 combination zp ZP_BYTE:81 [ print_byte::b#0 ] +Uplifting [print_byte] best 37751 combination zp ZP_BYTE:81 [ print_byte::b#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:171 [ sin8s::x3#0 ] -Uplifting [sin8s] best 37661 combination zp ZP_BYTE:171 [ sin8s::x3#0 ] +Uplifting [sin8s] best 37751 combination zp ZP_BYTE:171 [ sin8s::x3#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:167 [ sin8s::x1#0 ] -Uplifting [sin8s] best 37661 combination zp ZP_BYTE:167 [ sin8s::x1#0 ] +Uplifting [sin8s] best 37751 combination zp ZP_BYTE:167 [ sin8s::x1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:63 [ mulu8_sel::select#5 ] -Uplifting [mulu8_sel] best 37661 combination zp ZP_BYTE:63 [ mulu8_sel::select#5 ] +Uplifting [mulu8_sel] best 37751 combination zp ZP_BYTE:63 [ mulu8_sel::select#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:174 [ sin8s::usinx#0 ] -Uplifting [sin8s] best 37661 combination zp ZP_BYTE:174 [ sin8s::usinx#0 ] +Uplifting [sin8s] best 37751 combination zp ZP_BYTE:174 [ sin8s::usinx#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:19 [ sin16s::isUpper#2 ] -Uplifting [sin16s] best 37661 combination zp ZP_BYTE:19 [ sin16s::isUpper#2 ] +Uplifting [sin16s] best 37751 combination zp ZP_BYTE:19 [ sin16s::isUpper#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:56 [ sin8s::isUpper#10 ] -Uplifting [sin8s] best 37661 combination zp ZP_BYTE:56 [ sin8s::isUpper#10 ] +Uplifting [sin8s] best 37751 combination zp ZP_BYTE:56 [ sin8s::isUpper#10 ] Coalescing zero page register [ zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:126 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:108 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register [ zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:157 [ rem16u#1 ] ] - score: 2 @@ -6219,38 +6266,38 @@ Coalescing zero page register [ zp ZP_WORD:71 [ main::$3 main::$11 ] ] with [ zp Coalescing zero page register [ zp ZP_WORD:102 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp ZP_WORD:110 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:102 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp ZP_WORD:120 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:102 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp ZP_WORD:124 [ sin16s::x5_128#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:3 [ print_str::str#2 print_str::str#0 ] ] -Coalescing zero page register [ zp ZP_WORD:11 [ sin16s_gen::i#2 sin16s_gen::i#1 ] ] with [ zp ZP_WORD:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] ] +Coalescing zero page register [ zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:3 [ print_str::str#2 print_str::str#0 ] ] +Coalescing zero page register [ zp ZP_WORD:11 [ sin16s_gen::i#5 sin16s_gen::i#1 ] ] with [ zp ZP_WORD:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] ] Coalescing zero page register [ zp ZP_BYTE:19 [ sin16s::isUpper#2 ] ] with [ zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 print_byte::b#0 ] ] Coalescing zero page register [ zp ZP_DWORD:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] ] with [ zp ZP_DWORD:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] ] -Coalescing zero page register [ zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp ZP_WORD:17 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] +Coalescing zero page register [ zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp ZP_WORD:17 [ sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] ] Coalescing zero page register [ zp ZP_WORD:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] ] with [ zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] Coalescing zero page register [ zp ZP_WORD:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 div32u16u::quotient_lo#0 div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] ] with [ zp ZP_WORD:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] -Coalescing zero page register [ zp ZP_WORD:50 [ sin8s_gen::i#2 sin8s_gen::i#1 ] ] with [ zp ZP_WORD:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] ] -Coalescing zero page register [ zp ZP_WORD:52 [ sin8s_gen::x#2 sin8s_gen::x#1 ] ] with [ zp ZP_WORD:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] +Coalescing zero page register [ zp ZP_WORD:50 [ sin8s_gen::i#5 sin8s_gen::i#1 ] ] with [ zp ZP_WORD:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] ] +Coalescing zero page register [ zp ZP_WORD:52 [ sin8s_gen::x#5 sin8s_gen::x#1 ] ] with [ zp ZP_WORD:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] Coalescing zero page register [ zp ZP_WORD:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 ] ] with [ zp ZP_WORD:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 ] ] Coalescing zero page register [ zp ZP_BYTE:70 [ main::sb#0 ] ] with [ zp ZP_BYTE:56 [ sin8s::isUpper#10 ] ] -Coalescing zero page register [ zp ZP_WORD:71 [ main::$3 main::$11 main::$4 ] ] with [ zp ZP_WORD:54 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] ] +Coalescing zero page register [ zp ZP_WORD:71 [ main::$3 main::$11 main::$4 ] ] with [ zp ZP_WORD:54 [ sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] ] Coalescing zero page register [ zp ZP_WORD:77 [ main::sw#0 ] ] with [ zp ZP_WORD:67 [ mul8u::mb#2 mul8u::mb#1 ] ] Coalescing zero page register [ zp ZP_WORD:145 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:100 [ sin16s::x1#0 ] ] -Coalescing zero page register [ zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] with [ zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ] ] +Coalescing zero page register [ zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen::sintab#7 sin16s_gen::sintab#0 ] ] with [ zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 print_str::str#2 print_str::str#0 ] ] Coalescing zero page register [ zp ZP_BYTE:63 [ mulu8_sel::select#5 ] ] with [ zp ZP_BYTE:19 [ sin16s::isUpper#2 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 print_byte::b#0 ] ] -Coalescing zero page register [ zp ZP_WORD:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 ] ] with [ zp ZP_WORD:11 [ sin16s_gen::i#2 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] ] -Coalescing zero page register [ zp ZP_WORD:71 [ main::$3 main::$11 main::$4 sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] ] with [ zp ZP_WORD:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] -Coalescing zero page register [ zp ZP_WORD:102 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp ZP_WORD:52 [ sin8s_gen::x#2 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] +Coalescing zero page register [ zp ZP_WORD:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 ] ] with [ zp ZP_WORD:11 [ sin16s_gen::i#5 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] ] +Coalescing zero page register [ zp ZP_WORD:71 [ main::$3 main::$11 main::$4 sin8s_gen::sintab#7 sin8s_gen::sintab#0 ] ] with [ zp ZP_WORD:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] +Coalescing zero page register [ zp ZP_WORD:102 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp ZP_WORD:52 [ sin8s_gen::x#5 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] Coalescing zero page register [ zp ZP_WORD:145 [ div32u16u::quotient_hi#0 sin16s::x1#0 ] ] with [ zp ZP_WORD:77 [ main::sw#0 mul8u::mb#2 mul8u::mb#1 ] ] -Allocated (was zp ZP_DWORD:13) zp ZP_DWORD:2 [ sin16s_gen::x#2 sin16s_gen::x#1 ] +Allocated (was zp ZP_DWORD:13) zp ZP_DWORD:2 [ sin16s_gen::x#5 sin16s_gen::x#1 ] Allocated (was zp ZP_DWORD:33) zp ZP_DWORD:6 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] Allocated (was zp ZP_DWORD:37) zp ZP_DWORD:10 [ mul16u::mb#2 mul16u::mb#1 ] -Allocated (was zp ZP_WORD:43) zp ZP_WORD:14 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen::sintab#2 sin16s_gen::sintab#0 memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ] +Allocated (was zp ZP_WORD:43) zp ZP_WORD:14 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen::sintab#7 sin16s_gen::sintab#0 memset::dst#4 memset::dst#1 print_str::str#2 print_str::str#0 ] Allocated (was zp ZP_WORD:47) zp ZP_WORD:16 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 div32u16u::quotient_lo#0 div16u::return#2 sin8s_gen::step#0 div16u::return#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] -Allocated (was zp ZP_WORD:50) zp ZP_WORD:18 [ sin8s_gen::i#2 sin8s_gen::i#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] +Allocated (was zp ZP_WORD:50) zp ZP_WORD:18 [ sin8s_gen::i#5 sin8s_gen::i#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] Allocated (was zp ZP_BYTE:63) zp ZP_BYTE:20 [ mulu8_sel::select#5 sin16s::isUpper#2 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 print_byte::b#0 ] -Allocated (was zp ZP_WORD:65) zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 sin16s_gen::i#2 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] +Allocated (was zp ZP_WORD:65) zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 sin16s_gen::i#5 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] Allocated (was zp ZP_BYTE:70) zp ZP_BYTE:23 [ main::sb#0 sin8s::isUpper#10 ] -Allocated (was zp ZP_WORD:71) zp ZP_WORD:24 [ main::$3 main::$11 main::$4 sin8s_gen::sintab#2 sin8s_gen::sintab#0 divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] +Allocated (was zp ZP_WORD:71) zp ZP_WORD:24 [ main::$3 main::$11 main::$4 sin8s_gen::sintab#7 sin8s_gen::sintab#0 divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] Allocated (was zp ZP_DWORD:84) zp ZP_DWORD:26 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ] -Allocated (was zp ZP_WORD:102) zp ZP_WORD:30 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 sin8s_gen::x#2 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] +Allocated (was zp ZP_WORD:102) zp ZP_WORD:30 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 sin8s_gen::x#5 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] Allocated (was zp ZP_WORD:145) zp ZP_WORD:32 [ div32u16u::quotient_hi#0 sin16s::x1#0 main::sw#0 mul8u::mb#2 mul8u::mb#1 ] Allocated (was zp ZP_BYTE:167) zp ZP_BYTE:34 [ sin8s::x1#0 ] Allocated (was zp ZP_BYTE:171) zp ZP_BYTE:35 [ sin8s::x3#0 ] @@ -6591,43 +6638,44 @@ memset: { .label str = print_line_cursor .label end = str+num .label dst = $e - // [57] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [57] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [57] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [57] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [58] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [57] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [60] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [58] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [61] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [59] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [57] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [57] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [60] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #sin16s_gen::@1] - b1_from_b3: - // [66] phi (signed word*) sin16s_gen::sintab#2 = (const signed word[$c0]) main::sintabw#0 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- pwsz1=pwsc1 + // [66] phi from sin16s_gen::@3 to sin16s_gen::@2 [phi:sin16s_gen::@3->sin16s_gen::@2] + b2_from_b3: + // [66] phi (signed word*) sin16s_gen::sintab#7 = (const signed word[$c0]) main::sintabw#0 [phi:sin16s_gen::@3->sin16s_gen::@2#0] -- pwsz1=pwsc1 lda #main.sintabw sta sintab+1 - // [66] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 + // [66] phi (dword) sin16s_gen::x#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#1] -- vduz1=vbuc1 lda #0 sta x lda #0 sta x+1 sta x+2 sta x+3 - // [66] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [66] phi (word) sin16s_gen::i#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.28] - // sin16s_gen::@1 - b1: - // [67] if((word) sin16s_gen::i#2<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen::@2] + b2_from_b1: + // [66] phi (signed word*) sin16s_gen::sintab#7 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@1->sin16s_gen::@2#0] -- register_copy + // [66] phi (dword) sin16s_gen::x#5 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@1->sin16s_gen::@2#1] -- register_copy + // [66] phi (word) sin16s_gen::i#5 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@1->sin16s_gen::@2#2] -- register_copy + jmp b2 // sin16s_gen::@2 b2: - // [69] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2 + // [67] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -6697,21 +6734,21 @@ sin16s_gen: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [70] call sin16s + // [68] call sin16s jsr sin16s - // [71] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [69] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 jmp b4 // sin16s_gen::@4 b4: - // [72] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 - // [73] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 + // [70] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 + // [71] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 ldy #0 lda _2 sta (sintab),y iny lda _2+1 sta (sintab),y - // [74] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [72] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -6719,7 +6756,7 @@ sin16s_gen: { bcc !+ inc sintab+1 !: - // [75] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 + // [73] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -6733,17 +6770,29 @@ sin16s_gen: { lda x+3 adc step+3 sta x+3 - // [76] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 -- vwuz1=_inc_vwuz1 + // [74] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#5 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [66] phi from sin16s_gen::@4 to sin16s_gen::@1 [phi:sin16s_gen::@4->sin16s_gen::@1] - b1_from_b4: - // [66] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy - // [66] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy - // [66] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy jmp b1 + // u[4.28] + // sin16s_gen::@1 + b1: + // [75] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #sin8s_gen::@1] - b1_from_b3: - // [168] phi (signed byte*) sin8s_gen::sintab#2 = (const signed byte[$c0]) main::sintabb#0 [phi:sin8s_gen::@3->sin8s_gen::@1#0] -- pbsz1=pbsc1 + // [168] phi from sin8s_gen::@3 to sin8s_gen::@2 [phi:sin8s_gen::@3->sin8s_gen::@2] + b2_from_b3: + // [168] phi (signed byte*) sin8s_gen::sintab#7 = (const signed byte[$c0]) main::sintabb#0 [phi:sin8s_gen::@3->sin8s_gen::@2#0] -- pbsz1=pbsc1 lda #main.sintabb sta sintab+1 - // [168] phi (word) sin8s_gen::x#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vbuc1 + // [168] phi (word) sin8s_gen::x#5 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@2#1] -- vwuz1=vbuc1 lda #<0 sta x lda #>0 sta x+1 - // [168] phi (word) sin8s_gen::i#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vbuc1 + // [168] phi (word) sin8s_gen::i#5 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.12] - // sin8s_gen::@1 - b1: - // [169] if((word) sin8s_gen::i#2<(const word) main::wavelength#0) goto sin8s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.wavelength - bcc b2 - bne !+ - lda i - cmp #sin8s_gen::@2] + b2_from_b1: + // [168] phi (signed byte*) sin8s_gen::sintab#7 = (signed byte*) sin8s_gen::sintab#0 [phi:sin8s_gen::@1->sin8s_gen::@2#0] -- register_copy + // [168] phi (word) sin8s_gen::x#5 = (word) sin8s_gen::x#1 [phi:sin8s_gen::@1->sin8s_gen::@2#1] -- register_copy + // [168] phi (word) sin8s_gen::i#5 = (word) sin8s_gen::i#1 [phi:sin8s_gen::@1->sin8s_gen::@2#2] -- register_copy + jmp b2 // sin8s_gen::@2 b2: - // [171] (word) sin8s::x#0 ← (word) sin8s_gen::x#2 -- vwuz1=vwuz2 + // [169] (word) sin8s::x#0 ← (word) sin8s_gen::x#5 -- vwuz1=vwuz2 lda x sta sin8s.x lda x+1 sta sin8s.x+1 - // [172] call sin8s + // [170] call sin8s jsr sin8s - // [173] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 + // [171] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 jmp b4 // sin8s_gen::@4 b4: - // [174] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 - // [175] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$2 -- _deref_pbsz1=vbsaa + // [172] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 + // [173] *((signed byte*) sin8s_gen::sintab#7) ← (signed byte~) sin8s_gen::$2 -- _deref_pbsz1=vbsaa ldy #0 sta (sintab),y - // [176] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#2 -- pbsz1=_inc_pbsz1 + // [174] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#7 -- pbsz1=_inc_pbsz1 inc sintab bne !+ inc sintab+1 !: - // [177] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0 -- vwuz1=vwuz1_plus_vwuz2 + // [175] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#5 + (word) sin8s_gen::step#0 -- vwuz1=vwuz1_plus_vwuz2 lda x clc adc step @@ -7427,17 +7465,29 @@ sin8s_gen: { lda x+1 adc step+1 sta x+1 - // [178] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#2 -- vwuz1=_inc_vwuz1 + // [176] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#5 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [168] phi from sin8s_gen::@4 to sin8s_gen::@1 [phi:sin8s_gen::@4->sin8s_gen::@1] - b1_from_b4: - // [168] phi (signed byte*) sin8s_gen::sintab#2 = (signed byte*) sin8s_gen::sintab#0 [phi:sin8s_gen::@4->sin8s_gen::@1#0] -- register_copy - // [168] phi (word) sin8s_gen::x#2 = (word) sin8s_gen::x#1 [phi:sin8s_gen::@4->sin8s_gen::@1#1] -- register_copy - // [168] phi (word) sin8s_gen::i#2 = (word) sin8s_gen::i#1 [phi:sin8s_gen::@4->sin8s_gen::@1#2] -- register_copy jmp b1 + // u[4.12] + // sin8s_gen::@1 + b1: + // [177] if((word) sin8s_gen::i#1<(const word) main::wavelength#0) goto sin8s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2_from_b1 + bne !+ + lda i + cmp #memset::@1] - // [57] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [57] phi from memset to memset::@2 [phi:memset->memset::@2] + // [57] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [57] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [57] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [58] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [58] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [59] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [60] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -8865,24 +8943,8 @@ memset: { bne b2 // memset::@return // } - // [59] return + // [61] return rts - // memset::@2 - b2: - // *dst = c - // [60] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [61] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [57] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [57] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // sin16s_gen // Generate signed (large) word sinus table - on the full -$7fff - $7fff range @@ -8904,42 +8966,29 @@ sin16s_gen: { // sin16s_gen::@3 // step = div32u16u(PI2_u4f28, wavelength) // [65] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 - // [66] phi from sin16s_gen::@3 to sin16s_gen::@1 [phi:sin16s_gen::@3->sin16s_gen::@1] - // [66] phi (signed word*) sin16s_gen::sintab#2 = (const signed word[$c0]) main::sintabw#0 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- pwsz1=pwsc1 + // [66] phi from sin16s_gen::@3 to sin16s_gen::@2 [phi:sin16s_gen::@3->sin16s_gen::@2] + // [66] phi (signed word*) sin16s_gen::sintab#7 = (const signed word[$c0]) main::sintabw#0 [phi:sin16s_gen::@3->sin16s_gen::@2#0] -- pwsz1=pwsc1 lda #main.sintabw sta sintab+1 - // [66] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 + // [66] phi (dword) sin16s_gen::x#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#1] -- vduz1=vbuc1 lda #0 sta x sta x+1 sta x+2 sta x+3 - // [66] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [66] phi (word) sin16s_gen::i#5 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@2#2] -- vwuz1=vbuc1 sta i sta i+1 - // u[4.28] - // sin16s_gen::@1 - b1: - // for( word i=0; imain.wavelength - bcc b2 - bne !+ - lda i - cmp #sin16s_gen::@2] + // [66] phi (signed word*) sin16s_gen::sintab#7 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@1->sin16s_gen::@2#0] -- register_copy + // [66] phi (dword) sin16s_gen::x#5 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@1->sin16s_gen::@2#1] -- register_copy + // [66] phi (word) sin16s_gen::i#5 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@1->sin16s_gen::@2#2] -- register_copy // sin16s_gen::@2 b2: // sin16s(x) - // [69] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2 + // [67] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#5 -- vduz1=vduz2 lda x sta sin16s.x lda x+1 @@ -8948,13 +8997,13 @@ sin16s_gen: { sta sin16s.x+2 lda x+3 sta sin16s.x+3 - // [70] call sin16s + // [68] call sin16s jsr sin16s - // [71] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [69] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 // sin16s_gen::@4 - // [72] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 + // [70] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 // *sintab++ = sin16s(x) - // [73] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 + // [71] *((signed word*) sin16s_gen::sintab#7) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2 ldy #0 lda _2 sta (sintab),y @@ -8962,7 +9011,7 @@ sin16s_gen: { lda _2+1 sta (sintab),y // *sintab++ = sin16s(x); - // [74] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [72] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#7 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc sintab @@ -8971,7 +9020,7 @@ sin16s_gen: { inc sintab+1 !: // x = x + step - // [75] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 + // [73] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#5 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 lda x clc adc step @@ -8986,16 +9035,26 @@ sin16s_gen: { adc step+3 sta x+3 // for( word i=0; isin16s_gen::@1] - // [66] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy - // [66] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy - // [66] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy - jmp b1 + // u[4.28] + // sin16s_gen::@1 + // [75] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.wavelength + bcc b2 + bne !+ + lda i + cmp #sin8s_gen::@1] - // [168] phi (signed byte*) sin8s_gen::sintab#2 = (const signed byte[$c0]) main::sintabb#0 [phi:sin8s_gen::@3->sin8s_gen::@1#0] -- pbsz1=pbsc1 + // [168] phi from sin8s_gen::@3 to sin8s_gen::@2 [phi:sin8s_gen::@3->sin8s_gen::@2] + // [168] phi (signed byte*) sin8s_gen::sintab#7 = (const signed byte[$c0]) main::sintabb#0 [phi:sin8s_gen::@3->sin8s_gen::@2#0] -- pbsz1=pbsc1 lda #main.sintabb sta sintab+1 - // [168] phi (word) sin8s_gen::x#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vbuc1 + // [168] phi (word) sin8s_gen::x#5 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@2#1] -- vwuz1=vbuc1 lda #<0 sta x sta x+1 - // [168] phi (word) sin8s_gen::i#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vbuc1 + // [168] phi (word) sin8s_gen::i#5 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@2#2] -- vwuz1=vbuc1 sta i sta i+1 + // [168] phi from sin8s_gen::@1 to sin8s_gen::@2 [phi:sin8s_gen::@1->sin8s_gen::@2] + // [168] phi (signed byte*) sin8s_gen::sintab#7 = (signed byte*) sin8s_gen::sintab#0 [phi:sin8s_gen::@1->sin8s_gen::@2#0] -- register_copy + // [168] phi (word) sin8s_gen::x#5 = (word) sin8s_gen::x#1 [phi:sin8s_gen::@1->sin8s_gen::@2#1] -- register_copy + // [168] phi (word) sin8s_gen::i#5 = (word) sin8s_gen::i#1 [phi:sin8s_gen::@1->sin8s_gen::@2#2] -- register_copy + // sin8s_gen::@2 + b2: + // sin8s(x) + // [169] (word) sin8s::x#0 ← (word) sin8s_gen::x#5 -- vwuz1=vwuz2 + lda x + sta sin8s.x + lda x+1 + sta sin8s.x+1 + // [170] call sin8s + jsr sin8s + // [171] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 + // sin8s_gen::@4 + // [172] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 + // *sintab++ = sin8s(x) + // [173] *((signed byte*) sin8s_gen::sintab#7) ← (signed byte~) sin8s_gen::$2 -- _deref_pbsz1=vbsaa + ldy #0 + sta (sintab),y + // *sintab++ = sin8s(x); + // [174] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#7 -- pbsz1=_inc_pbsz1 + inc sintab + bne !+ + inc sintab+1 + !: + // x = x + step + // [175] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#5 + (word) sin8s_gen::step#0 -- vwuz1=vwuz1_plus_vwuz2 + lda x + clc + adc step + sta x + lda x+1 + adc step+1 + sta x+1 + // for( word i=0; imain.wavelength bcc b2 @@ -9624,51 +9723,8 @@ sin8s_gen: { !: // sin8s_gen::@return // } - // [170] return + // [178] return rts - // sin8s_gen::@2 - b2: - // sin8s(x) - // [171] (word) sin8s::x#0 ← (word) sin8s_gen::x#2 -- vwuz1=vwuz2 - lda x - sta sin8s.x - lda x+1 - sta sin8s.x+1 - // [172] call sin8s - jsr sin8s - // [173] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1 - // sin8s_gen::@4 - // [174] (signed byte~) sin8s_gen::$2 ← (signed byte) sin8s::return#0 - // *sintab++ = sin8s(x) - // [175] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$2 -- _deref_pbsz1=vbsaa - ldy #0 - sta (sintab),y - // *sintab++ = sin8s(x); - // [176] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#2 -- pbsz1=_inc_pbsz1 - inc sintab - bne !+ - inc sintab+1 - !: - // x = x + step - // [177] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0 -- vwuz1=vwuz1_plus_vwuz2 - lda x - clc - adc step - sta x - lda x+1 - adc step+1 - sta x+1 - // for( word i=0; isin8s_gen::@1] - // [168] phi (signed byte*) sin8s_gen::sintab#2 = (signed byte*) sin8s_gen::sintab#0 [phi:sin8s_gen::@4->sin8s_gen::@1#0] -- register_copy - // [168] phi (word) sin8s_gen::x#2 = (word) sin8s_gen::x#1 [phi:sin8s_gen::@4->sin8s_gen::@1#1] -- register_copy - // [168] phi (word) sin8s_gen::i#2 = (word) sin8s_gen::i#1 [phi:sin8s_gen::@4->sin8s_gen::@1#2] -- register_copy - jmp b1 } // sin8s // Calculate signed byte sinus sin(x) diff --git a/src/test/ref/sinusgen8b.sym b/src/test/ref/sinusgen8b.sym index 8a6c767d5..a26495da2 100644 --- a/src/test/ref/sinusgen8b.sym +++ b/src/test/ref/sinusgen8b.sym @@ -110,8 +110,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:14 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:14 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:14 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:14 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -316,17 +316,17 @@ (label) sin16s_gen::@4 (label) sin16s_gen::@return (word) sin16s_gen::i -(word) sin16s_gen::i#1 i zp ZP_WORD:21 22.0 -(word) sin16s_gen::i#2 i zp ZP_WORD:21 3.666666666666667 +(word) sin16s_gen::i#1 i zp ZP_WORD:21 16.5 +(word) sin16s_gen::i#5 i zp ZP_WORD:21 2.75 (signed word*) sin16s_gen::sintab -(signed word*) sin16s_gen::sintab#0 sintab zp ZP_WORD:14 7.333333333333333 -(signed word*) sin16s_gen::sintab#2 sintab zp ZP_WORD:14 4.714285714285714 +(signed word*) sin16s_gen::sintab#0 sintab zp ZP_WORD:14 5.5 +(signed word*) sin16s_gen::sintab#7 sintab zp ZP_WORD:14 5.5 (dword) sin16s_gen::step (dword) sin16s_gen::step#0 step zp ZP_DWORD:26 1.1818181818181819 (word) sin16s_gen::wavelength (dword) sin16s_gen::x -(dword) sin16s_gen::x#1 x zp ZP_DWORD:2 11.0 -(dword) sin16s_gen::x#2 x zp ZP_DWORD:2 4.125 +(dword) sin16s_gen::x#1 x zp ZP_DWORD:2 7.333333333333333 +(dword) sin16s_gen::x#5 x zp ZP_DWORD:2 4.714285714285714 (signed byte()) sin8s((word) sin8s::x) (word~) sin8s::$4 $4 zp ZP_WORD:21 4.0 (label) sin8s::@1 @@ -387,44 +387,44 @@ (label) sin8s_gen::@4 (label) sin8s_gen::@return (word) sin8s_gen::i -(word) sin8s_gen::i#1 i zp ZP_WORD:18 22.0 -(word) sin8s_gen::i#2 i zp ZP_WORD:18 3.666666666666667 +(word) sin8s_gen::i#1 i zp ZP_WORD:18 16.5 +(word) sin8s_gen::i#5 i zp ZP_WORD:18 2.75 (signed byte*) sin8s_gen::sintab -(signed byte*) sin8s_gen::sintab#0 sintab zp ZP_WORD:24 7.333333333333333 -(signed byte*) sin8s_gen::sintab#2 sintab zp ZP_WORD:24 4.714285714285714 +(signed byte*) sin8s_gen::sintab#0 sintab zp ZP_WORD:24 5.5 +(signed byte*) sin8s_gen::sintab#7 sintab zp ZP_WORD:24 5.5 (word) sin8s_gen::step (word) sin8s_gen::step#0 step zp ZP_WORD:16 1.1818181818181819 (word) sin8s_gen::wavelength (word) sin8s_gen::x -(word) sin8s_gen::x#1 x zp ZP_WORD:30 11.0 -(word) sin8s_gen::x#2 x zp ZP_WORD:30 4.125 +(word) sin8s_gen::x#1 x zp ZP_WORD:30 7.333333333333333 +(word) sin8s_gen::x#5 x zp ZP_WORD:30 4.714285714285714 reg byte x [ main::i#2 main::i#1 ] reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] -zp ZP_DWORD:2 [ sin16s_gen::x#2 sin16s_gen::x#1 ] +zp ZP_DWORD:2 [ sin16s_gen::x#5 sin16s_gen::x#1 ] reg byte x [ mulu16_sel::select#5 ] zp ZP_DWORD:6 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] zp ZP_DWORD:10 [ mul16u::mb#2 mul16u::mb#1 ] -zp ZP_WORD:14 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen::sintab#2 sin16s_gen::sintab#0 memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ] +zp ZP_WORD:14 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen::sintab#7 sin16s_gen::sintab#0 memset::dst#4 memset::dst#1 print_str::str#2 print_str::str#0 ] zp ZP_WORD:16 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 div32u16u::quotient_lo#0 div16u::return#2 sin8s_gen::step#0 div16u::return#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] -zp ZP_WORD:18 [ sin8s_gen::i#2 sin8s_gen::i#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] +zp ZP_WORD:18 [ sin8s_gen::i#5 sin8s_gen::i#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] zp ZP_BYTE:20 [ mulu8_sel::select#5 sin16s::isUpper#2 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 print_byte::b#0 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] -zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 sin16s_gen::i#2 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] +zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 sin16s_gen::i#5 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] reg byte a [ mul8u::b#0 ] zp ZP_BYTE:23 [ main::sb#0 sin8s::isUpper#10 ] -zp ZP_WORD:24 [ main::$3 main::$11 main::$4 sin8s_gen::sintab#2 sin8s_gen::sintab#0 divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] +zp ZP_WORD:24 [ main::$3 main::$11 main::$4 sin8s_gen::sintab#7 sin8s_gen::sintab#0 divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] reg byte a [ main::$6 ] reg byte a [ main::sd#0 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] zp ZP_DWORD:26 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ] -zp ZP_WORD:30 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 sin8s_gen::x#2 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] +zp ZP_WORD:30 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 sin8s_gen::x#5 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:32 [ div32u16u::quotient_hi#0 sin16s::x1#0 main::sw#0 mul8u::mb#2 mul8u::mb#1 ] reg byte a [ divr16u::$1 ] diff --git a/src/test/ref/sinusgenscale8.asm b/src/test/ref/sinusgenscale8.asm index f7730efe7..1a095f407 100644 --- a/src/test/ref/sinusgenscale8.asm +++ b/src/test/ref/sinusgenscale8.asm @@ -95,17 +95,6 @@ sin8u_table: { sta x+1 sta i sta i+1 - // u[4.12] - b1: - lda i+1 - cmp #>main.tabsize - bcc b2 - bne !+ - lda i - cmp #main.tabsize + bcs !b2+ + jmp b2 + !b2: + bne !+ + lda i + cmp #str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp # (signed word) sin8u_table::sinx_sc#0 - [45] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$22 - [46] *((byte*) sin8u_table::sintab#2) ← (byte) sin8u_table::sinx_tr#0 - [47] (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#2 - [48] (byte*~) print_char_cursor#119 ← (byte*) print_line_cursor#1 - [49] call print_str + [41] (signed word) sin8u_table::sinx_sc#0 ← (signed word)(word) mul8su::m#2 + [42] (byte~) sin8u_table::$22 ← > (signed word) sin8u_table::sinx_sc#0 + [43] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$22 + [44] *((byte*) sin8u_table::sintab#28) ← (byte) sin8u_table::sinx_tr#0 + [45] (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#28 + [46] (byte*~) print_char_cursor#119 ← (byte*) print_line_cursor#1 + [47] call print_str to:sin8u_table::@16 sin8u_table::@16: scope:[sin8u_table] from sin8u_table::@15 - [50] (word) print_word::w#2 ← (word) sin8u_table::x#10 - [51] call print_word + [48] (word) print_word::w#2 ← (word) sin8u_table::x#15 + [49] call print_word to:sin8u_table::@17 sin8u_table::@17: scope:[sin8u_table] from sin8u_table::@16 - [52] phi() - [53] call print_str + [50] phi() + [51] call print_str to:sin8u_table::@18 sin8u_table::@18: scope:[sin8u_table] from sin8u_table::@17 - [54] (signed byte) print_sbyte::b#1 ← (signed byte) sin8u_table::sinx#0 - [55] call print_sbyte + [52] (signed byte) print_sbyte::b#1 ← (signed byte) sin8u_table::sinx#0 + [53] call print_sbyte to:sin8u_table::@19 sin8u_table::@19: scope:[sin8u_table] from sin8u_table::@18 - [56] phi() - [57] call print_str + [54] phi() + [55] call print_str to:sin8u_table::@20 sin8u_table::@20: scope:[sin8u_table] from sin8u_table::@19 - [58] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 - [59] call print_sword + [56] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 + [57] call print_sword to:sin8u_table::@21 sin8u_table::@21: scope:[sin8u_table] from sin8u_table::@20 - [60] phi() - [61] call print_str + [58] phi() + [59] call print_str to:sin8u_table::@22 sin8u_table::@22: scope:[sin8u_table] from sin8u_table::@21 - [62] (byte) print_byte::b#7 ← (byte) sin8u_table::sinx_tr#0 - [63] call print_byte + [60] (byte) print_byte::b#7 ← (byte) sin8u_table::sinx_tr#0 + [61] call print_byte to:sin8u_table::@23 sin8u_table::@23: scope:[sin8u_table] from sin8u_table::@22 - [64] phi() - [65] call print_ln + [62] phi() + [63] call print_ln to:sin8u_table::@24 sin8u_table::@24: scope:[sin8u_table] from sin8u_table::@23 - [66] (word) sin8u_table::x#1 ← (word) sin8u_table::x#10 + (word) sin8u_table::step#0 - [67] (word) sin8u_table::i#1 ← ++ (word) sin8u_table::i#10 + [64] (word) sin8u_table::x#1 ← (word) sin8u_table::x#15 + (word) sin8u_table::step#0 + [65] (word) sin8u_table::i#1 ← ++ (word) sin8u_table::i#15 to:sin8u_table::@1 +sin8u_table::@1: scope:[sin8u_table] from sin8u_table::@24 + [66] if((word) sin8u_table::i#1<(const word) main::tabsize#0) goto sin8u_table::@2 + to:sin8u_table::@return +sin8u_table::@return: scope:[sin8u_table] from sin8u_table::@1 + [67] return + to:@return print_ln: scope:[print_ln] from sin8u_table::@13 sin8u_table::@23 [68] (byte*) print_line_cursor#23 ← phi( sin8u_table::@13/(byte*) 1024 sin8u_table::@23/(byte*) print_line_cursor#1 ) to:print_ln::@1 @@ -433,15 +433,15 @@ print_cls::@return: scope:[print_cls] from print_cls to:@return memset: scope:[memset] from print_cls [215] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [216] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [217] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [218] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [216] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [219] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [218] return + [220] return to:@return -memset::@2: scope:[memset] from memset::@1 - [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [220] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 diff --git a/src/test/ref/sinusgenscale8.log b/src/test/ref/sinusgenscale8.log index ce36507b1..df0353f2f 100644 --- a/src/test/ref/sinusgenscale8.log +++ b/src/test/ref/sinusgenscale8.log @@ -2584,12 +2584,24 @@ Resolved ranged next value [23] divr16u::i#1 ← ++ divr16u::i#2 to ++ Resolved ranged comparison value [25] if(divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1 to (number) $10 Eliminating unused variable (void*) memset::return#2 and assignment [150] (void*) memset::return#2 ← (void*) memset::str#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $10 in if((byte) divr16u::i#1!=(number) $10) goto divr16u::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast $10 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $10 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (word) sin8u_table::i#1 = (word) sin8u_table::i#10 +Alias (word) sin8u_table::x#1 = (word) sin8u_table::x#10 +Alias (byte*) sin8u_table::sintab#1 = (byte*) sin8u_table::sintab#2 +Alias (word) sin8u_table::i#15 = (word) sin8u_table::i#25 (word) sin8u_table::i#26 (word) sin8u_table::i#24 (word) sin8u_table::i#23 (word) sin8u_table::i#22 (word) sin8u_table::i#21 (word) sin8u_table::i#20 (word) sin8u_table::i#19 (word) sin8u_table::i#18 (word) sin8u_table::i#17 (word) sin8u_table::i#16 +Alias (word) sin8u_table::x#15 = (word) sin8u_table::x#20 (word) sin8u_table::x#18 (word) sin8u_table::x#16 (word) sin8u_table::x#26 (word) sin8u_table::x#25 (word) sin8u_table::x#24 (word) sin8u_table::x#23 (word) sin8u_table::x#22 (word) sin8u_table::x#21 (word) sin8u_table::x#19 (word) sin8u_table::x#17 +Alias (byte*) sin8u_table::sintab#28 = (byte*) sin8u_table::sintab#29 (byte*) sin8u_table::sintab#30 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (word) sin8u_table::i#27 (const word) sin8u_table::i#0 +Identical Phi Values (word) sin8u_table::x#27 (const word) sin8u_table::x#0 +Identical Phi Values (byte*) sin8u_table::sintab#31 (const byte*) sin8u_table::sintab#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [154] (byte) sin8u_table::amplitude#0 ← (const byte) sin8u_table::max#0 - (const byte) sin8u_table::min#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const void*) memset::str#0 = (void*)print_line_cursor#0 @@ -2601,6 +2613,8 @@ Successful SSA optimization Pass2ConstantIdentification Constant value identified (byte*)memset::str#0 in [94] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0 Constant value identified (byte*)memset::str#0 in [96] (byte*) memset::dst#0 ← (byte*)(const void*) memset::str#0 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [223] if((const word) sin8u_table::i#0<(const word) sin8u_table::tabsize#0) goto sin8u_table::@2 +Successful SSA optimization Pass2ConstantIfs Constant right-side identified [153] (word) sin8u_table::sum#0 ← (const word) sin8u_table::$1 + (const byte) sin8u_table::max#0 Constant right-side identified [179] (byte) mul8su::b#0 ← (const byte) sin8u_table::amplitude#0 + (byte) 1 Successful SSA optimization Pass2ConstantRValueConsolidation @@ -2615,12 +2629,19 @@ Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Constant (const word) sin8u_table::$3 = sin8u_table::sum#0/2 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [150] (word~) sin8u_table::$4 ← (const word) sin8u_table::$3 + (byte) 1 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) memset::dst#1 = (byte*) memset::dst#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) memset::dst#5 (const byte*) memset::dst#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [152] (word~) sin8u_table::$4 ← (const word) sin8u_table::$3 + (byte) 1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) sin8u_table::$4 = sin8u_table::$3+1 Successful SSA optimization Pass2ConstantIdentification -Constant value identified (byte)sin8u_table::$4 in [151] (byte) sin8u_table::mid#0 ← (byte)(const word) sin8u_table::$4 +Constant value identified (byte)sin8u_table::$4 in [153] (byte) sin8u_table::mid#0 ← (byte)(const word) sin8u_table::$4 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [202] if((const byte*) memset::dst#0!=(const byte*) memset::end#0) goto memset::@5 +Successful SSA optimization Pass2ConstantIfs Constant (const byte) sin8u_table::mid#0 = (byte)sin8u_table::$4 Successful SSA optimization Pass2ConstantIdentification Constant (const byte) print_byte::b#6 = sin8u_table::mid#0 @@ -2721,7 +2742,9 @@ Fixing phi predecessor for sin8s::isUpper#10 to new block ( sin8s -> sin8s::@15 Added new block during phi lifting sin8s::@16(between sin8s::@1 and sin8s::@2) Added new block during phi lifting sin8s::@17(between sin8s::@14 and sin8s::@3) Added new block during phi lifting sin8s::@18(between sin8s::@3 and sin8s::@4) +Added new block during phi lifting memset::@10(between memset::@4 and memset::@5) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) +Added new block during phi lifting sin8u_table::@30(between sin8u_table::@1 and sin8u_table::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @13 Adding NOP phi() at start of @32 @@ -2735,6 +2758,7 @@ Adding NOP phi() at start of main::@2 Adding NOP phi() at start of sin8u_table Adding NOP phi() at start of sin8u_table::@17 Adding NOP phi() at start of sin8u_table::@18 +Adding NOP phi() at start of sin8u_table::@1_1 Adding NOP phi() at start of print_ln::@2 Adding NOP phi() at start of print_byte::@2 Adding NOP phi() at start of print_sword::@7 @@ -2748,20 +2772,21 @@ Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@4_1 Adding NOP phi() at start of memset::@1 CALL GRAPH Calls in [] to main:5 Calls in [main] to print_cls:9 sin8u_table:11 -Calls in [sin8u_table] to div16u:15 print_str:18 print_word:22 print_str:24 print_byte:26 print_str:28 print_byte:30 print_str:32 print_byte:34 print_str:36 print_byte:38 print_ln:40 sin8s:46 mul8su:50 print_str:57 print_word:61 print_str:63 print_sbyte:65 print_str:67 print_sword:69 print_str:71 print_byte:75 print_ln:77 -Calls in [print_byte] to print_char:96 print_char:101 -Calls in [print_sword] to print_char:121 print_word:127 print_char:131 -Calls in [print_word] to print_byte:138 print_byte:142 -Calls in [print_sbyte] to print_char:147 print_byte:153 print_char:157 -Calls in [mul8su] to mul8u:162 -Calls in [sin8s] to mulu8_sel:205 mulu8_sel:212 mulu8_sel:217 mulu8_sel:225 mulu8_sel:232 -Calls in [mulu8_sel] to mul8u:255 -Calls in [div16u] to divr16u:262 -Calls in [print_cls] to memset:295 +Calls in [sin8u_table] to div16u:15 print_str:18 print_word:22 print_str:24 print_byte:26 print_str:28 print_byte:30 print_str:32 print_byte:34 print_str:36 print_byte:38 print_ln:40 sin8s:45 mul8su:49 print_str:56 print_word:60 print_str:62 print_sbyte:64 print_str:66 print_sword:68 print_str:70 print_byte:74 print_ln:76 +Calls in [print_byte] to print_char:97 print_char:102 +Calls in [print_sword] to print_char:122 print_word:128 print_char:132 +Calls in [print_word] to print_byte:139 print_byte:143 +Calls in [print_sbyte] to print_char:148 print_byte:154 print_char:158 +Calls in [mul8su] to mul8u:163 +Calls in [sin8s] to mulu8_sel:206 mulu8_sel:213 mulu8_sel:218 mulu8_sel:226 mulu8_sel:233 +Calls in [mulu8_sel] to mul8u:256 +Calls in [div16u] to divr16u:263 +Calls in [print_cls] to memset:296 Created 40 initial phi equivalence classes Coalesced [20] print_word::w#7 ← print_word::w#1 @@ -2774,83 +2799,83 @@ Coalesced (already) [31] print_char_cursor#117 ← print_char_cursor#19 Coalesced (already) [33] print_char_cursor#134 ← print_char_cursor#2 Coalesced (already) [35] print_char_cursor#118 ← print_char_cursor#19 Coalesced (already) [37] print_char_cursor#135 ← print_char_cursor#2 -Not coalescing [56] print_char_cursor#119 ← print_line_cursor#1 -Coalesced [59] print_word::w#6 ← print_word::w#2 -Coalesced (already) [60] print_char_cursor#127 ← print_char_cursor#2 -Coalesced (already) [62] print_char_cursor#120 ← print_char_cursor#19 -Coalesced (already) [66] print_char_cursor#121 ← print_char_cursor#19 -Coalesced (already) [70] print_char_cursor#122 ← print_char_cursor#19 -Coalesced [73] print_byte::b#13 ← print_byte::b#7 -Coalesced (already) [74] print_char_cursor#136 ← print_char_cursor#2 -Coalesced [76] print_line_cursor#51 ← print_line_cursor#1 -Coalesced [80] sin8u_table::i#15 ← sin8u_table::i#1 -Coalesced [81] sin8u_table::x#15 ← sin8u_table::x#1 -Coalesced [82] sin8u_table::sintab#28 ← sin8u_table::sintab#1 -Coalesced [84] print_line_cursor#52 ← print_line_cursor#23 -Coalesced (already) [90] print_line_cursor#53 ← print_line_cursor#1 -Coalesced [94] print_char::ch#7 ← print_char::ch#4 -Coalesced [95] print_char_cursor#137 ← print_char_cursor#103 -Coalesced [99] print_char::ch#8 ← print_char::ch#5 -Coalesced [100] print_char_cursor#138 ← print_char_cursor#19 -Coalesced [109] print_str::str#13 ← print_str::str#12 -Coalesced (already) [110] print_char_cursor#124 ← print_char_cursor#109 -Coalesced [117] print_str::str#14 ← print_str::str#0 -Coalesced [118] print_char_cursor#125 ← print_char_cursor#1 -Coalesced (already) [120] print_char_cursor#142 ← print_char_cursor#2 -Coalesced [122] print_sword::w#9 ← print_sword::w#1 -Coalesced [125] print_word::w#5 ← print_word::w#0 -Coalesced (already) [126] print_char_cursor#126 ← print_char_cursor#19 -Coalesced (already) [130] print_char_cursor#141 ← print_char_cursor#2 -Coalesced [133] print_sword::w#8 ← print_sword::w#0 -Coalesced [136] print_byte::b#11 ← print_byte::b#1 -Coalesced (already) [137] print_char_cursor#130 ← print_char_cursor#102 -Coalesced [140] print_byte::b#12 ← print_byte::b#2 -Coalesced (already) [141] print_char_cursor#131 ← print_char_cursor#19 -Coalesced (already) [146] print_char_cursor#140 ← print_char_cursor#2 -Coalesced [148] print_sbyte::b#9 ← print_sbyte::b#1 -Coalesced [151] print_byte::b#10 ← print_byte::b#0 -Coalesced (already) [152] print_char_cursor#129 ← print_char_cursor#19 -Coalesced (already) [156] print_char_cursor#139 ← print_char_cursor#2 -Coalesced [159] print_sbyte::b#8 ← print_sbyte::b#0 -Coalesced [161] mul8u::a#8 ← mul8u::a#1 -Coalesced [169] mul8su::m#4 ← mul8su::m#1 -Coalesced [172] mul8su::m#5 ← mul8su::m#0 -Coalesced [174] mul8u::a#10 ← mul8u::a#6 -Coalesced [175] mul8u::mb#7 ← mul8u::mb#0 -Coalesced [183] mul8u::res#9 ← mul8u::res#1 -Coalesced [187] mul8u::a#11 ← mul8u::a#0 -Coalesced [188] mul8u::res#7 ← mul8u::res#6 -Coalesced [189] mul8u::mb#8 ← mul8u::mb#1 -Coalesced (already) [190] mul8u::res#8 ← mul8u::res#2 -Coalesced [193] sin8s::x#9 ← sin8s::x#0 -Coalesced [197] sin8s::x#11 ← sin8s::x#1 -Coalesced [203] mulu8_sel::v1#10 ← mulu8_sel::v1#0 -Coalesced [204] mulu8_sel::v2#9 ← mulu8_sel::v2#0 -Coalesced [210] mulu8_sel::v1#6 ← mulu8_sel::v1#1 -Coalesced [211] mulu8_sel::v2#6 ← mulu8_sel::v2#1 -Coalesced [216] mulu8_sel::v1#7 ← mulu8_sel::v1#2 -Coalesced [223] mulu8_sel::v1#8 ← mulu8_sel::v1#3 -Coalesced [224] mulu8_sel::v2#7 ← mulu8_sel::v2#3 -Coalesced [230] mulu8_sel::v1#9 ← mulu8_sel::v1#4 -Coalesced [231] mulu8_sel::v2#8 ← mulu8_sel::v2#4 -Coalesced [239] sin8s::usinx#9 ← sin8s::usinx#2 -Coalesced [243] sin8s::return#6 ← sin8s::sinx#1 -Coalesced [247] sin8s::usinx#8 ← sin8s::usinx#1 -Coalesced [248] sin8s::x#10 ← sin8s::x#4 -Coalesced [249] sin8s::x#8 ← sin8s::x#2 -Coalesced [253] mul8u::mb#6 ← mul8u::b#1 -Coalesced [254] mul8u::a#9 ← mul8u::a#2 -Coalesced [273] divr16u::rem#12 ← divr16u::rem#1 -Coalesced [280] divr16u::rem#14 ← divr16u::rem#2 -Coalesced [281] divr16u::return#6 ← divr16u::quotient#2 -Coalesced [287] divr16u::rem#10 ← divr16u::rem#9 -Coalesced [288] divr16u::dividend#8 ← divr16u::dividend#0 -Coalesced [289] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [290] divr16u::i#7 ← divr16u::i#1 -Coalesced [291] divr16u::rem#13 ← divr16u::rem#5 -Coalesced [292] divr16u::return#5 ← divr16u::quotient#1 -Coalesced [293] divr16u::rem#11 ← divr16u::rem#0 -Coalesced [306] memset::dst#4 ← memset::dst#1 +Not coalescing [55] print_char_cursor#119 ← print_line_cursor#1 +Coalesced [58] print_word::w#6 ← print_word::w#2 +Coalesced (already) [59] print_char_cursor#127 ← print_char_cursor#2 +Coalesced (already) [61] print_char_cursor#120 ← print_char_cursor#19 +Coalesced (already) [65] print_char_cursor#121 ← print_char_cursor#19 +Coalesced (already) [69] print_char_cursor#122 ← print_char_cursor#19 +Coalesced [72] print_byte::b#13 ← print_byte::b#7 +Coalesced (already) [73] print_char_cursor#136 ← print_char_cursor#2 +Coalesced [75] print_line_cursor#51 ← print_line_cursor#1 +Coalesced [81] sin8u_table::i#28 ← sin8u_table::i#1 +Coalesced [82] sin8u_table::x#28 ← sin8u_table::x#1 +Coalesced [83] sin8u_table::sintab#32 ← sin8u_table::sintab#1 +Coalesced [85] print_line_cursor#52 ← print_line_cursor#23 +Coalesced (already) [91] print_line_cursor#53 ← print_line_cursor#1 +Coalesced [95] print_char::ch#7 ← print_char::ch#4 +Coalesced [96] print_char_cursor#137 ← print_char_cursor#103 +Coalesced [100] print_char::ch#8 ← print_char::ch#5 +Coalesced [101] print_char_cursor#138 ← print_char_cursor#19 +Coalesced [110] print_str::str#13 ← print_str::str#12 +Coalesced (already) [111] print_char_cursor#124 ← print_char_cursor#109 +Coalesced [118] print_str::str#14 ← print_str::str#0 +Coalesced [119] print_char_cursor#125 ← print_char_cursor#1 +Coalesced (already) [121] print_char_cursor#142 ← print_char_cursor#2 +Coalesced [123] print_sword::w#9 ← print_sword::w#1 +Coalesced [126] print_word::w#5 ← print_word::w#0 +Coalesced (already) [127] print_char_cursor#126 ← print_char_cursor#19 +Coalesced (already) [131] print_char_cursor#141 ← print_char_cursor#2 +Coalesced [134] print_sword::w#8 ← print_sword::w#0 +Coalesced [137] print_byte::b#11 ← print_byte::b#1 +Coalesced (already) [138] print_char_cursor#130 ← print_char_cursor#102 +Coalesced [141] print_byte::b#12 ← print_byte::b#2 +Coalesced (already) [142] print_char_cursor#131 ← print_char_cursor#19 +Coalesced (already) [147] print_char_cursor#140 ← print_char_cursor#2 +Coalesced [149] print_sbyte::b#9 ← print_sbyte::b#1 +Coalesced [152] print_byte::b#10 ← print_byte::b#0 +Coalesced (already) [153] print_char_cursor#129 ← print_char_cursor#19 +Coalesced (already) [157] print_char_cursor#139 ← print_char_cursor#2 +Coalesced [160] print_sbyte::b#8 ← print_sbyte::b#0 +Coalesced [162] mul8u::a#8 ← mul8u::a#1 +Coalesced [170] mul8su::m#4 ← mul8su::m#1 +Coalesced [173] mul8su::m#5 ← mul8su::m#0 +Coalesced [175] mul8u::a#10 ← mul8u::a#6 +Coalesced [176] mul8u::mb#7 ← mul8u::mb#0 +Coalesced [184] mul8u::res#9 ← mul8u::res#1 +Coalesced [188] mul8u::a#11 ← mul8u::a#0 +Coalesced [189] mul8u::res#7 ← mul8u::res#6 +Coalesced [190] mul8u::mb#8 ← mul8u::mb#1 +Coalesced (already) [191] mul8u::res#8 ← mul8u::res#2 +Coalesced [194] sin8s::x#9 ← sin8s::x#0 +Coalesced [198] sin8s::x#11 ← sin8s::x#1 +Coalesced [204] mulu8_sel::v1#10 ← mulu8_sel::v1#0 +Coalesced [205] mulu8_sel::v2#9 ← mulu8_sel::v2#0 +Coalesced [211] mulu8_sel::v1#6 ← mulu8_sel::v1#1 +Coalesced [212] mulu8_sel::v2#6 ← mulu8_sel::v2#1 +Coalesced [217] mulu8_sel::v1#7 ← mulu8_sel::v1#2 +Coalesced [224] mulu8_sel::v1#8 ← mulu8_sel::v1#3 +Coalesced [225] mulu8_sel::v2#7 ← mulu8_sel::v2#3 +Coalesced [231] mulu8_sel::v1#9 ← mulu8_sel::v1#4 +Coalesced [232] mulu8_sel::v2#8 ← mulu8_sel::v2#4 +Coalesced [240] sin8s::usinx#9 ← sin8s::usinx#2 +Coalesced [244] sin8s::return#6 ← sin8s::sinx#1 +Coalesced [248] sin8s::usinx#8 ← sin8s::usinx#1 +Coalesced [249] sin8s::x#10 ← sin8s::x#4 +Coalesced [250] sin8s::x#8 ← sin8s::x#2 +Coalesced [254] mul8u::mb#6 ← mul8u::b#1 +Coalesced [255] mul8u::a#9 ← mul8u::a#2 +Coalesced [274] divr16u::rem#12 ← divr16u::rem#1 +Coalesced [281] divr16u::rem#14 ← divr16u::rem#2 +Coalesced [282] divr16u::return#6 ← divr16u::quotient#2 +Coalesced [288] divr16u::rem#10 ← divr16u::rem#9 +Coalesced [289] divr16u::dividend#8 ← divr16u::dividend#0 +Coalesced [290] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [291] divr16u::i#7 ← divr16u::i#1 +Coalesced [292] divr16u::rem#13 ← divr16u::rem#5 +Coalesced [293] divr16u::return#5 ← divr16u::quotient#1 +Coalesced [294] divr16u::rem#11 ← divr16u::rem#0 +Coalesced [308] memset::dst#6 ← memset::dst#1 Coalesced down to 27 phi equivalence classes Culled Empty Block (label) @13 Culled Empty Block (label) @32 @@ -2858,6 +2883,8 @@ Culled Empty Block (label) @49 Culled Empty Block (label) @59 Culled Empty Block (label) main::@2 Culled Empty Block (label) sin8u_table::@18 +Culled Empty Block (label) sin8u_table::@1_1 +Culled Empty Block (label) sin8u_table::@30 Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) print_ln::@3 Culled Empty Block (label) print_byte::@2 @@ -2878,7 +2905,9 @@ Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@9 Culled Empty Block (label) print_cls::@1 Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@4_1 Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@10 Renumbering block @58 to @1 Renumbering block div16u::@2 to div16u::@1 Renumbering block mul8u::@4 to mul8u::@3 @@ -3014,71 +3043,71 @@ sin8u_table::@12: scope:[sin8u_table] from sin8u_table::@11 sin8u_table::@13: scope:[sin8u_table] from sin8u_table::@12 [32] phi() [33] call print_ln - to:sin8u_table::@1 -sin8u_table::@1: scope:[sin8u_table] from sin8u_table::@13 sin8u_table::@24 - [34] (byte*) sin8u_table::sintab#2 ← phi( sin8u_table::@13/(const byte[$14]) main::sintab#0 sin8u_table::@24/(byte*) sin8u_table::sintab#1 ) - [34] (word) sin8u_table::x#10 ← phi( sin8u_table::@13/(byte) 0 sin8u_table::@24/(word) sin8u_table::x#1 ) - [34] (word) sin8u_table::i#10 ← phi( sin8u_table::@13/(byte) 0 sin8u_table::@24/(word) sin8u_table::i#1 ) - [35] if((word) sin8u_table::i#10<(const word) main::tabsize#0) goto sin8u_table::@2 - to:sin8u_table::@return -sin8u_table::@return: scope:[sin8u_table] from sin8u_table::@1 - [36] return - to:@return -sin8u_table::@2: scope:[sin8u_table] from sin8u_table::@1 - [37] (word) sin8s::x#2 ← (word) sin8u_table::x#10 - [38] call sin8s - [39] (signed byte) sin8s::return#2 ← (signed byte) sin8s::return#0 + to:sin8u_table::@2 +sin8u_table::@2: scope:[sin8u_table] from sin8u_table::@1 sin8u_table::@13 + [34] (byte*) sin8u_table::sintab#28 ← phi( sin8u_table::@1/(byte*) sin8u_table::sintab#1 sin8u_table::@13/(const byte[$14]) main::sintab#0 ) + [34] (word) sin8u_table::x#15 ← phi( sin8u_table::@1/(word) sin8u_table::x#1 sin8u_table::@13/(byte) 0 ) + [34] (word) sin8u_table::i#15 ← phi( sin8u_table::@1/(word) sin8u_table::i#1 sin8u_table::@13/(byte) 0 ) + [35] (word) sin8s::x#2 ← (word) sin8u_table::x#15 + [36] call sin8s + [37] (signed byte) sin8s::return#2 ← (signed byte) sin8s::return#0 to:sin8u_table::@14 sin8u_table::@14: scope:[sin8u_table] from sin8u_table::@2 - [40] (signed byte) sin8u_table::sinx#0 ← (signed byte) sin8s::return#2 - [41] (signed byte) mul8su::a#0 ← (signed byte) sin8u_table::sinx#0 - [42] call mul8su + [38] (signed byte) sin8u_table::sinx#0 ← (signed byte) sin8s::return#2 + [39] (signed byte) mul8su::a#0 ← (signed byte) sin8u_table::sinx#0 + [40] call mul8su to:sin8u_table::@15 sin8u_table::@15: scope:[sin8u_table] from sin8u_table::@14 - [43] (signed word) sin8u_table::sinx_sc#0 ← (signed word)(word) mul8su::m#2 - [44] (byte~) sin8u_table::$22 ← > (signed word) sin8u_table::sinx_sc#0 - [45] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$22 - [46] *((byte*) sin8u_table::sintab#2) ← (byte) sin8u_table::sinx_tr#0 - [47] (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#2 - [48] (byte*~) print_char_cursor#119 ← (byte*) print_line_cursor#1 - [49] call print_str + [41] (signed word) sin8u_table::sinx_sc#0 ← (signed word)(word) mul8su::m#2 + [42] (byte~) sin8u_table::$22 ← > (signed word) sin8u_table::sinx_sc#0 + [43] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$22 + [44] *((byte*) sin8u_table::sintab#28) ← (byte) sin8u_table::sinx_tr#0 + [45] (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#28 + [46] (byte*~) print_char_cursor#119 ← (byte*) print_line_cursor#1 + [47] call print_str to:sin8u_table::@16 sin8u_table::@16: scope:[sin8u_table] from sin8u_table::@15 - [50] (word) print_word::w#2 ← (word) sin8u_table::x#10 - [51] call print_word + [48] (word) print_word::w#2 ← (word) sin8u_table::x#15 + [49] call print_word to:sin8u_table::@17 sin8u_table::@17: scope:[sin8u_table] from sin8u_table::@16 - [52] phi() - [53] call print_str + [50] phi() + [51] call print_str to:sin8u_table::@18 sin8u_table::@18: scope:[sin8u_table] from sin8u_table::@17 - [54] (signed byte) print_sbyte::b#1 ← (signed byte) sin8u_table::sinx#0 - [55] call print_sbyte + [52] (signed byte) print_sbyte::b#1 ← (signed byte) sin8u_table::sinx#0 + [53] call print_sbyte to:sin8u_table::@19 sin8u_table::@19: scope:[sin8u_table] from sin8u_table::@18 - [56] phi() - [57] call print_str + [54] phi() + [55] call print_str to:sin8u_table::@20 sin8u_table::@20: scope:[sin8u_table] from sin8u_table::@19 - [58] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 - [59] call print_sword + [56] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 + [57] call print_sword to:sin8u_table::@21 sin8u_table::@21: scope:[sin8u_table] from sin8u_table::@20 - [60] phi() - [61] call print_str + [58] phi() + [59] call print_str to:sin8u_table::@22 sin8u_table::@22: scope:[sin8u_table] from sin8u_table::@21 - [62] (byte) print_byte::b#7 ← (byte) sin8u_table::sinx_tr#0 - [63] call print_byte + [60] (byte) print_byte::b#7 ← (byte) sin8u_table::sinx_tr#0 + [61] call print_byte to:sin8u_table::@23 sin8u_table::@23: scope:[sin8u_table] from sin8u_table::@22 - [64] phi() - [65] call print_ln + [62] phi() + [63] call print_ln to:sin8u_table::@24 sin8u_table::@24: scope:[sin8u_table] from sin8u_table::@23 - [66] (word) sin8u_table::x#1 ← (word) sin8u_table::x#10 + (word) sin8u_table::step#0 - [67] (word) sin8u_table::i#1 ← ++ (word) sin8u_table::i#10 + [64] (word) sin8u_table::x#1 ← (word) sin8u_table::x#15 + (word) sin8u_table::step#0 + [65] (word) sin8u_table::i#1 ← ++ (word) sin8u_table::i#15 to:sin8u_table::@1 +sin8u_table::@1: scope:[sin8u_table] from sin8u_table::@24 + [66] if((word) sin8u_table::i#1<(const word) main::tabsize#0) goto sin8u_table::@2 + to:sin8u_table::@return +sin8u_table::@return: scope:[sin8u_table] from sin8u_table::@1 + [67] return + to:@return print_ln: scope:[print_ln] from sin8u_table::@13 sin8u_table::@23 [68] (byte*) print_line_cursor#23 ← phi( sin8u_table::@13/(byte*) 1024 sin8u_table::@23/(byte*) print_line_cursor#1 ) to:print_ln::@1 @@ -3381,18 +3410,18 @@ print_cls::@return: scope:[print_cls] from print_cls to:@return memset: scope:[memset] from print_cls [215] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [216] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [217] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [218] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [216] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [219] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [218] return + [220] return to:@return -memset::@2: scope:[memset] from memset::@1 - [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [220] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 VARIABLE REGISTER WEIGHTS @@ -3435,8 +3464,8 @@ VARIABLE REGISTER WEIGHTS (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst -(byte*) memset::dst#1 22.0 -(byte*) memset::dst#2 14.666666666666666 +(byte*) memset::dst#1 16.5 +(byte*) memset::dst#4 16.5 (byte*) memset::end (word) memset::num (void*) memset::return @@ -3590,14 +3619,14 @@ VARIABLE REGISTER WEIGHTS (byte~) sin8u_table::$22 22.0 (byte) sin8u_table::amplitude (word) sin8u_table::i -(word) sin8u_table::i#1 22.0 -(word) sin8u_table::i#10 1.03125 +(word) sin8u_table::i#1 16.5 +(word) sin8u_table::i#15 0.7096774193548387 (byte) sin8u_table::max (byte) sin8u_table::mid (byte) sin8u_table::min (byte*) sin8u_table::sintab -(byte*) sin8u_table::sintab#1 1.0476190476190477 -(byte*) sin8u_table::sintab#2 2.75 +(byte*) sin8u_table::sintab#1 1.0 +(byte*) sin8u_table::sintab#28 3.0 (signed byte) sin8u_table::sinx (signed byte) sin8u_table::sinx#0 2.357142857142857 (signed word) sin8u_table::sinx_sc @@ -3609,14 +3638,14 @@ VARIABLE REGISTER WEIGHTS (word) sin8u_table::sum (word) sin8u_table::tabsize (word) sin8u_table::x -(word) sin8u_table::x#1 11.0 -(word) sin8u_table::x#10 1.4193548387096775 +(word) sin8u_table::x#1 7.333333333333333 +(word) sin8u_table::x#15 1.4666666666666666 Not consolidating phi with different size mul8u::mb#0 mul8u::b#1 Initial phi equivalence classes -[ sin8u_table::i#10 sin8u_table::i#1 ] -[ sin8u_table::x#10 sin8u_table::x#1 ] -[ sin8u_table::sintab#2 sin8u_table::sintab#1 ] +[ sin8u_table::i#15 sin8u_table::i#1 ] +[ sin8u_table::x#15 sin8u_table::x#1 ] +[ sin8u_table::sintab#28 sin8u_table::sintab#1 ] [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] @@ -3641,7 +3670,7 @@ Initial phi equivalence classes [ divr16u::dividend#2 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] -[ memset::dst#2 memset::dst#1 ] +[ memset::dst#4 memset::dst#1 ] Added variable div16u::return#2 to zero page equivalence class [ div16u::return#2 ] Added variable sin8u_table::step#0 to zero page equivalence class [ sin8u_table::step#0 ] Added variable sin8s::return#2 to zero page equivalence class [ sin8s::return#2 ] @@ -3679,9 +3708,9 @@ Added variable div16u::return#0 to zero page equivalence class [ div16u::return# Added variable divr16u::$1 to zero page equivalence class [ divr16u::$1 ] Added variable divr16u::$2 to zero page equivalence class [ divr16u::$2 ] Complete equivalence classes -[ sin8u_table::i#10 sin8u_table::i#1 ] -[ sin8u_table::x#10 sin8u_table::x#1 ] -[ sin8u_table::sintab#2 sin8u_table::sintab#1 ] +[ sin8u_table::i#15 sin8u_table::i#1 ] +[ sin8u_table::x#15 sin8u_table::x#1 ] +[ sin8u_table::sintab#28 sin8u_table::sintab#1 ] [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] @@ -3706,7 +3735,7 @@ Complete equivalence classes [ divr16u::dividend#2 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] -[ memset::dst#2 memset::dst#1 ] +[ memset::dst#4 memset::dst#1 ] [ div16u::return#2 ] [ sin8u_table::step#0 ] [ sin8s::return#2 ] @@ -3743,9 +3772,9 @@ Complete equivalence classes [ div16u::return#0 ] [ divr16u::$1 ] [ divr16u::$2 ] -Allocated zp ZP_WORD:2 [ sin8u_table::i#10 sin8u_table::i#1 ] -Allocated zp ZP_WORD:4 [ sin8u_table::x#10 sin8u_table::x#1 ] -Allocated zp ZP_WORD:6 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] +Allocated zp ZP_WORD:2 [ sin8u_table::i#15 sin8u_table::i#1 ] +Allocated zp ZP_WORD:4 [ sin8u_table::x#15 sin8u_table::x#1 ] +Allocated zp ZP_WORD:6 [ sin8u_table::sintab#28 sin8u_table::sintab#1 ] Allocated zp ZP_WORD:8 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] Allocated zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] Allocated zp ZP_BYTE:11 [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] @@ -3770,7 +3799,7 @@ Allocated zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u:: Allocated zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] Allocated zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] Allocated zp ZP_BYTE:43 [ divr16u::i#2 divr16u::i#1 ] -Allocated zp ZP_WORD:44 [ memset::dst#2 memset::dst#1 ] +Allocated zp ZP_WORD:44 [ memset::dst#4 memset::dst#1 ] Allocated zp ZP_WORD:46 [ div16u::return#2 ] Allocated zp ZP_WORD:48 [ sin8u_table::step#0 ] Allocated zp ZP_BYTE:50 [ sin8s::return#2 ] @@ -4055,94 +4084,83 @@ sin8u_table: { lda #>$400 sta print_line_cursor+1 jsr print_ln - // [34] phi from sin8u_table::@13 to sin8u_table::@1 [phi:sin8u_table::@13->sin8u_table::@1] - b1_from_b13: - // [34] phi (byte*) sin8u_table::sintab#2 = (const byte[$14]) main::sintab#0 [phi:sin8u_table::@13->sin8u_table::@1#0] -- pbuz1=pbuc1 + // [34] phi from sin8u_table::@13 to sin8u_table::@2 [phi:sin8u_table::@13->sin8u_table::@2] + b2_from_b13: + // [34] phi (byte*) sin8u_table::sintab#28 = (const byte[$14]) main::sintab#0 [phi:sin8u_table::@13->sin8u_table::@2#0] -- pbuz1=pbuc1 lda #main.sintab sta sintab+1 - // [34] phi (word) sin8u_table::x#10 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@1#1] -- vwuz1=vbuc1 + // [34] phi (word) sin8u_table::x#15 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@2#1] -- vwuz1=vbuc1 lda #<0 sta x lda #>0 sta x+1 - // [34] phi (word) sin8u_table::i#10 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@1#2] -- vwuz1=vbuc1 + // [34] phi (word) sin8u_table::i#15 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.12] - // sin8u_table::@1 - b1: - // [35] if((word) sin8u_table::i#10<(const word) main::tabsize#0) goto sin8u_table::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.tabsize - bcc b2 - bne !+ - lda i - cmp #sin8u_table::@2] + b2_from_b1: + // [34] phi (byte*) sin8u_table::sintab#28 = (byte*) sin8u_table::sintab#1 [phi:sin8u_table::@1->sin8u_table::@2#0] -- register_copy + // [34] phi (word) sin8u_table::x#15 = (word) sin8u_table::x#1 [phi:sin8u_table::@1->sin8u_table::@2#1] -- register_copy + // [34] phi (word) sin8u_table::i#15 = (word) sin8u_table::i#1 [phi:sin8u_table::@1->sin8u_table::@2#2] -- register_copy + jmp b2 // sin8u_table::@2 b2: - // [37] (word) sin8s::x#2 ← (word) sin8u_table::x#10 -- vwuz1=vwuz2 + // [35] (word) sin8s::x#2 ← (word) sin8u_table::x#15 -- vwuz1=vwuz2 lda x sta sin8s.x lda x+1 sta sin8s.x+1 - // [38] call sin8s + // [36] call sin8s jsr sin8s - // [39] (signed byte) sin8s::return#2 ← (signed byte) sin8s::return#0 -- vbsz1=vbsz2 + // [37] (signed byte) sin8s::return#2 ← (signed byte) sin8s::return#0 -- vbsz1=vbsz2 lda sin8s.return sta sin8s.return_2 jmp b14 // sin8u_table::@14 b14: - // [40] (signed byte) sin8u_table::sinx#0 ← (signed byte) sin8s::return#2 -- vbsz1=vbsz2 + // [38] (signed byte) sin8u_table::sinx#0 ← (signed byte) sin8s::return#2 -- vbsz1=vbsz2 lda sin8s.return_2 sta sinx - // [41] (signed byte) mul8su::a#0 ← (signed byte) sin8u_table::sinx#0 -- vbsz1=vbsz2 + // [39] (signed byte) mul8su::a#0 ← (signed byte) sin8u_table::sinx#0 -- vbsz1=vbsz2 lda sinx sta mul8su.a - // [42] call mul8su + // [40] call mul8su jsr mul8su jmp b15 // sin8u_table::@15 b15: - // [43] (signed word) sin8u_table::sinx_sc#0 ← (signed word)(word) mul8su::m#2 -- vwsz1=vwsz2 + // [41] (signed word) sin8u_table::sinx_sc#0 ← (signed word)(word) mul8su::m#2 -- vwsz1=vwsz2 lda mul8su.m sta sinx_sc lda mul8su.m+1 sta sinx_sc+1 - // [44] (byte~) sin8u_table::$22 ← > (signed word) sin8u_table::sinx_sc#0 -- vbuz1=_hi_vwsz2 + // [42] (byte~) sin8u_table::$22 ← > (signed word) sin8u_table::sinx_sc#0 -- vbuz1=_hi_vwsz2 lda sinx_sc+1 sta _22 - // [45] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$22 -- vbuz1=vbuc1_plus_vbuz2 + // [43] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$22 -- vbuz1=vbuc1_plus_vbuz2 lax _22 axs #-[mid] stx sinx_tr - // [46] *((byte*) sin8u_table::sintab#2) ← (byte) sin8u_table::sinx_tr#0 -- _deref_pbuz1=vbuz2 + // [44] *((byte*) sin8u_table::sintab#28) ← (byte) sin8u_table::sinx_tr#0 -- _deref_pbuz1=vbuz2 lda sinx_tr ldy #0 sta (sintab),y - // [47] (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#2 -- pbuz1=_inc_pbuz1 + // [45] (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#28 -- pbuz1=_inc_pbuz1 inc sintab bne !+ inc sintab+1 !: - // [48] (byte*~) print_char_cursor#119 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [46] (byte*~) print_char_cursor#119 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 - // [49] call print_str + // [47] call print_str // [85] phi from sin8u_table::@15 to print_str [phi:sin8u_table::@15->print_str] print_str_from_b15: // [85] phi (byte*) print_char_cursor#109 = (byte*~) print_char_cursor#119 [phi:sin8u_table::@15->print_str#0] -- register_copy @@ -4155,23 +4173,23 @@ sin8u_table: { jmp b16 // sin8u_table::@16 b16: - // [50] (word) print_word::w#2 ← (word) sin8u_table::x#10 -- vwuz1=vwuz2 + // [48] (word) print_word::w#2 ← (word) sin8u_table::x#15 -- vwuz1=vwuz2 lda x sta print_word.w lda x+1 sta print_word.w+1 - // [51] call print_word + // [49] call print_word // [102] phi from sin8u_table::@16 to print_word [phi:sin8u_table::@16->print_word] print_word_from_b16: // [102] phi (byte*) print_char_cursor#102 = (byte*) print_char_cursor#2 [phi:sin8u_table::@16->print_word#0] -- register_copy // [102] phi (word) print_word::w#3 = (word) print_word::w#2 [phi:sin8u_table::@16->print_word#1] -- register_copy jsr print_word - // [52] phi from sin8u_table::@16 to sin8u_table::@17 [phi:sin8u_table::@16->sin8u_table::@17] + // [50] phi from sin8u_table::@16 to sin8u_table::@17 [phi:sin8u_table::@16->sin8u_table::@17] b17_from_b16: jmp b17 // sin8u_table::@17 b17: - // [53] call print_str + // [51] call print_str // [85] phi from sin8u_table::@17 to print_str [phi:sin8u_table::@17->print_str] print_str_from_b17: // [85] phi (byte*) print_char_cursor#109 = (byte*) print_char_cursor#19 [phi:sin8u_table::@17->print_str#0] -- register_copy @@ -4184,17 +4202,17 @@ sin8u_table: { jmp b18 // sin8u_table::@18 b18: - // [54] (signed byte) print_sbyte::b#1 ← (signed byte) sin8u_table::sinx#0 -- vbsz1=vbsz2 + // [52] (signed byte) print_sbyte::b#1 ← (signed byte) sin8u_table::sinx#0 -- vbsz1=vbsz2 lda sinx sta print_sbyte.b - // [55] call print_sbyte + // [53] call print_sbyte jsr print_sbyte - // [56] phi from sin8u_table::@18 to sin8u_table::@19 [phi:sin8u_table::@18->sin8u_table::@19] + // [54] phi from sin8u_table::@18 to sin8u_table::@19 [phi:sin8u_table::@18->sin8u_table::@19] b19_from_b18: jmp b19 // sin8u_table::@19 b19: - // [57] call print_str + // [55] call print_str // [85] phi from sin8u_table::@19 to print_str [phi:sin8u_table::@19->print_str] print_str_from_b19: // [85] phi (byte*) print_char_cursor#109 = (byte*) print_char_cursor#19 [phi:sin8u_table::@19->print_str#0] -- register_copy @@ -4207,19 +4225,19 @@ sin8u_table: { jmp b20 // sin8u_table::@20 b20: - // [58] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 -- vwsz1=vwsz2 + // [56] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 -- vwsz1=vwsz2 lda sinx_sc sta print_sword.w lda sinx_sc+1 sta print_sword.w+1 - // [59] call print_sword + // [57] call print_sword jsr print_sword - // [60] phi from sin8u_table::@20 to sin8u_table::@21 [phi:sin8u_table::@20->sin8u_table::@21] + // [58] phi from sin8u_table::@20 to sin8u_table::@21 [phi:sin8u_table::@20->sin8u_table::@21] b21_from_b20: jmp b21 // sin8u_table::@21 b21: - // [61] call print_str + // [59] call print_str // [85] phi from sin8u_table::@21 to print_str [phi:sin8u_table::@21->print_str] print_str_from_b21: // [85] phi (byte*) print_char_cursor#109 = (byte*) print_char_cursor#19 [phi:sin8u_table::@21->print_str#0] -- register_copy @@ -4232,21 +4250,21 @@ sin8u_table: { jmp b22 // sin8u_table::@22 b22: - // [62] (byte) print_byte::b#7 ← (byte) sin8u_table::sinx_tr#0 -- vbuz1=vbuz2 + // [60] (byte) print_byte::b#7 ← (byte) sin8u_table::sinx_tr#0 -- vbuz1=vbuz2 lda sinx_tr sta print_byte.b - // [63] call print_byte + // [61] call print_byte // [73] phi from sin8u_table::@22 to print_byte [phi:sin8u_table::@22->print_byte] print_byte_from_b22: // [73] phi (byte*) print_char_cursor#103 = (byte*) print_char_cursor#2 [phi:sin8u_table::@22->print_byte#0] -- register_copy // [73] phi (byte) print_byte::b#8 = (byte) print_byte::b#7 [phi:sin8u_table::@22->print_byte#1] -- register_copy jsr print_byte - // [64] phi from sin8u_table::@22 to sin8u_table::@23 [phi:sin8u_table::@22->sin8u_table::@23] + // [62] phi from sin8u_table::@22 to sin8u_table::@23 [phi:sin8u_table::@22->sin8u_table::@23] b23_from_b22: jmp b23 // sin8u_table::@23 b23: - // [65] call print_ln + // [63] call print_ln // [68] phi from sin8u_table::@23 to print_ln [phi:sin8u_table::@23->print_ln] print_ln_from_b23: // [68] phi (byte*) print_line_cursor#23 = (byte*) print_line_cursor#1 [phi:sin8u_table::@23->print_ln#0] -- register_copy @@ -4254,7 +4272,7 @@ sin8u_table: { jmp b24 // sin8u_table::@24 b24: - // [66] (word) sin8u_table::x#1 ← (word) sin8u_table::x#10 + (word) sin8u_table::step#0 -- vwuz1=vwuz1_plus_vwuz2 + // [64] (word) sin8u_table::x#1 ← (word) sin8u_table::x#15 + (word) sin8u_table::step#0 -- vwuz1=vwuz1_plus_vwuz2 lda x clc adc step @@ -4262,17 +4280,29 @@ sin8u_table: { lda x+1 adc step+1 sta x+1 - // [67] (word) sin8u_table::i#1 ← ++ (word) sin8u_table::i#10 -- vwuz1=_inc_vwuz1 + // [65] (word) sin8u_table::i#1 ← ++ (word) sin8u_table::i#15 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [34] phi from sin8u_table::@24 to sin8u_table::@1 [phi:sin8u_table::@24->sin8u_table::@1] - b1_from_b24: - // [34] phi (byte*) sin8u_table::sintab#2 = (byte*) sin8u_table::sintab#1 [phi:sin8u_table::@24->sin8u_table::@1#0] -- register_copy - // [34] phi (word) sin8u_table::x#10 = (word) sin8u_table::x#1 [phi:sin8u_table::@24->sin8u_table::@1#1] -- register_copy - // [34] phi (word) sin8u_table::i#10 = (word) sin8u_table::i#1 [phi:sin8u_table::@24->sin8u_table::@1#2] -- register_copy jmp b1 + // u[4.12] + // sin8u_table::@1 + b1: + // [66] if((word) sin8u_table::i#1<(const word) main::tabsize#0) goto sin8u_table::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.tabsize + bcc b2_from_b1 + bne !+ + lda i + cmp #memset::@1] - b1_from_memset: - // [216] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [216] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [216] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [216] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [217] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [220] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [218] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [216] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [216] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [219] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #> (byte) 4 [ print_byte::b#8 print_char_cursor#103 print_byte::$0 ] ( main:2::sin8u_table:7::print_byte:19 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:23 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:27 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:31 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:63 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:15::print_byte:104 [ sin8u_table::step#0 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:51::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:15::print_byte:106 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:51::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sbyte:55::print_byte:113 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] ) always clobbers reg byte a +Statement [48] (word) print_word::w#2 ← (word) sin8u_table::x#15 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#2 print_char_cursor#2 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#2 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [56] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#2 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [64] (word) sin8u_table::x#1 ← (word) sin8u_table::x#15 + (word) sin8u_table::step#0 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#1 sin8u_table::sintab#1 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#1 sin8u_table::sintab#1 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [66] if((word) sin8u_table::i#1<(const word) main::tabsize#0) goto sin8u_table::@2 [ sin8u_table::step#0 sin8u_table::i#1 sin8u_table::x#1 sin8u_table::sintab#1 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#1 sin8u_table::x#1 sin8u_table::sintab#1 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [70] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#12 + (byte) $28 [ print_line_cursor#1 print_char_cursor#19 ] ( main:2::sin8u_table:7::print_ln:33 [ sin8u_table::step#0 print_line_cursor#1 print_char_cursor#19 ] main:2::sin8u_table:7::print_ln:63 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#19 ] ) always clobbers reg byte a +Statement [71] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#19) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#19 ] ( main:2::sin8u_table:7::print_ln:33 [ sin8u_table::step#0 print_line_cursor#1 print_char_cursor#19 ] main:2::sin8u_table:7::print_ln:63 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#19 ] ) always clobbers reg byte a +Statement [74] (byte~) print_byte::$0 ← (byte) print_byte::b#8 >> (byte) 4 [ print_byte::b#8 print_char_cursor#103 print_byte::$0 ] ( main:2::sin8u_table:7::print_byte:19 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:23 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:27 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:31 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:61 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:15::print_byte:104 [ sin8u_table::step#0 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:49::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:15::print_byte:106 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:49::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] -Statement [77] (byte~) print_byte::$2 ← (byte) print_byte::b#8 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::sin8u_table:7::print_byte:19 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:23 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:27 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:31 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:63 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:15::print_byte:104 [ sin8u_table::step#0 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:51::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:15::print_byte:106 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:51::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sbyte:55::print_byte:113 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a -Statement [82] *((byte*) print_char_cursor#66) ← (byte) print_char::ch#6 [ print_char_cursor#66 ] ( main:2::sin8u_table:7::print_byte:19::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:23::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:27::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:31::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:63::print_char:76 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:104::print_char:76 [ sin8u_table::step#0 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:51::print_byte:104::print_char:76 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:104::print_char:76 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:106::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:51::print_byte:106::print_char:76 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:106::print_char:76 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:55::print_byte:113::print_char:76 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:19::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:23::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:27::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:31::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:63::print_char:79 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:104::print_char:79 [ sin8u_table::step#0 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:51::print_byte:104::print_char:79 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:104::print_char:79 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:106::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:51::print_byte:106::print_char:79 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:106::print_char:79 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:55::print_byte:113::print_char:79 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:59::print_char:94 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:59::print_char:100 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:55::print_char:110 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sbyte::b#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:55::print_char:116 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sbyte::b#1 print_char_cursor#66 ] ) always clobbers reg byte y +Statement [77] (byte~) print_byte::$2 ← (byte) print_byte::b#8 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::sin8u_table:7::print_byte:19 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:23 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:27 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:31 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:61 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:15::print_byte:104 [ sin8u_table::step#0 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:49::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:15::print_byte:106 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:49::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a +Statement [82] *((byte*) print_char_cursor#66) ← (byte) print_char::ch#6 [ print_char_cursor#66 ] ( main:2::sin8u_table:7::print_byte:19::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:23::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:27::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:31::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:61::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:104::print_char:76 [ sin8u_table::step#0 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:104::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:106::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:106::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:19::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:23::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:27::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:31::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:61::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:104::print_char:79 [ sin8u_table::step#0 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:104::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:106::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:106::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_char:94 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_char:100 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_char:110 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sbyte::b#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_char:116 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sbyte::b#1 print_char_cursor#66 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Statement [87] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:49 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:53 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:57 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:61 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y -Statement [89] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:49 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:53 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:57 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:61 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y -Statement [92] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 [ print_sword::w#1 print_char_cursor#2 ] ( main:2::sin8u_table:7::print_sword:59 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [96] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 [ print_char_cursor#19 print_word::w#0 ] ( main:2::sin8u_table:7::print_sword:59 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] ) always clobbers reg byte a -Statement [101] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 [ print_char_cursor#19 print_sword::w#0 ] ( main:2::sin8u_table:7::print_sword:59 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] ) always clobbers reg byte a -Statement [103] (byte) print_byte::b#1 ← > (word) print_word::w#3 [ print_byte::b#1 print_char_cursor#102 print_word::w#3 ] ( main:2::sin8u_table:7::print_word:15 [ sin8u_table::step#0 print_byte::b#1 print_char_cursor#102 print_word::w#3 ] main:2::sin8u_table:7::print_word:51 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#1 print_char_cursor#102 print_word::w#3 ] main:2::sin8u_table:7::print_sword:59::print_word:97 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#1 print_char_cursor#102 print_word::w#3 ] ) always clobbers reg byte a -Statement [105] (byte) print_byte::b#2 ← < (word) print_word::w#3 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::sin8u_table:7::print_word:15 [ sin8u_table::step#0 print_char_cursor#19 print_byte::b#2 ] main:2::sin8u_table:7::print_word:51 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::sin8u_table:7::print_sword:59::print_word:97 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a -Statement [117] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#1 [ print_char_cursor#19 print_sbyte::b#0 ] ( main:2::sin8u_table:7::print_sbyte:55 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_sbyte::b#0 ] ) always clobbers reg byte a -Statement [120] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8su::a#0 mul8u::return#2 ] ( main:2::sin8u_table:7::mul8su:42 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::return#2 ] ) always clobbers reg byte a +Statement [87] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:47 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:51 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:55 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:59 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [89] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:47 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:51 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:55 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:59 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [92] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 [ print_sword::w#1 print_char_cursor#2 ] ( main:2::sin8u_table:7::print_sword:57 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [96] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 [ print_char_cursor#19 print_word::w#0 ] ( main:2::sin8u_table:7::print_sword:57 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] ) always clobbers reg byte a +Statement [101] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 [ print_char_cursor#19 print_sword::w#0 ] ( main:2::sin8u_table:7::print_sword:57 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] ) always clobbers reg byte a +Statement [103] (byte) print_byte::b#1 ← > (word) print_word::w#3 [ print_byte::b#1 print_char_cursor#102 print_word::w#3 ] ( main:2::sin8u_table:7::print_word:15 [ sin8u_table::step#0 print_byte::b#1 print_char_cursor#102 print_word::w#3 ] main:2::sin8u_table:7::print_word:49 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#1 print_char_cursor#102 print_word::w#3 ] main:2::sin8u_table:7::print_sword:57::print_word:97 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#1 print_char_cursor#102 print_word::w#3 ] ) always clobbers reg byte a +Statement [105] (byte) print_byte::b#2 ← < (word) print_word::w#3 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::sin8u_table:7::print_word:15 [ sin8u_table::step#0 print_char_cursor#19 print_byte::b#2 ] main:2::sin8u_table:7::print_word:49 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::sin8u_table:7::print_sword:57::print_word:97 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a +Statement [117] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#1 [ print_char_cursor#19 print_sbyte::b#0 ] ( main:2::sin8u_table:7::print_sbyte:53 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_sbyte::b#0 ] ) always clobbers reg byte a +Statement [120] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8su::a#0 mul8u::return#2 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::return#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ mul8su::a#0 ] -Statement [121] (word) mul8su::m#0 ← (word) mul8u::return#2 [ mul8su::a#0 mul8su::m#0 ] ( main:2::sin8u_table:7::mul8su:42 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8su::m#0 ] ) always clobbers reg byte a -Statement [123] (byte~) mul8su::$7 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$7 ] ( main:2::sin8u_table:7::mul8su:42 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::m#0 mul8su::$7 ] ) always clobbers reg byte a -Statement [134] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8u_table:7::mul8su:42::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:148::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [121] (word) mul8su::m#0 ← (word) mul8u::return#2 [ mul8su::a#0 mul8su::m#0 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8su::m#0 ] ) always clobbers reg byte a +Statement [123] (byte~) mul8su::$7 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$7 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 print_line_cursor#1 mul8su::m#0 mul8su::$7 ] ) always clobbers reg byte a +Statement [134] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8u_table:7::mul8su:40::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:148::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:153::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:157::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:163::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:168::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ sin8s::isUpper#10 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:66 [ sin8s::x1#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ mulu8_sel::select#5 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:70 [ sin8s::x3#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:73 [ sin8s::usinx#0 ] -Statement [138] if((word) sin8s::x#2<(const word) PI_u4f12#0) goto sin8s::@1 [ sin8s::x#2 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#2 ] ) always clobbers reg byte a -Statement [139] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12#0 [ sin8s::x#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#0 ] ) always clobbers reg byte a -Statement [141] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a -Statement [142] (word) sin8s::x#1 ← (const word) PI_u4f12#0 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x#1 ] ) always clobbers reg byte a -Statement [144] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a -Statement [145] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a -Statement [160] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a -Statement [171] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a -Statement [172] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a -Statement [177] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::sinx#1 ] ) always clobbers reg byte a -Statement [185] (word) mul8u::return#3 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#3 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] ) always clobbers reg byte a -Statement [186] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a -Statement [187] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a -Statement [188] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a +Statement [138] if((word) sin8s::x#2<(const word) PI_u4f12#0) goto sin8s::@1 [ sin8s::x#2 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::x#2 ] ) always clobbers reg byte a +Statement [139] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12#0 [ sin8s::x#0 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::x#0 ] ) always clobbers reg byte a +Statement [141] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a +Statement [142] (word) sin8s::x#1 ← (const word) PI_u4f12#0 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#1 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x#1 ] ) always clobbers reg byte a +Statement [144] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a +Statement [145] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a +Statement [160] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a +Statement [171] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a +Statement [172] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a +Statement [177] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::sinx#1 ] ) always clobbers reg byte a +Statement [185] (word) mul8u::return#3 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#3 ] ( main:2::sin8u_table:7::sin8s:36::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] ) always clobbers reg byte a +Statement [186] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8u_table:7::sin8s:36::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a +Statement [187] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8u_table:7::sin8s:36::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a +Statement [188] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8u_table:7::sin8s:36::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a Statement [192] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8u_table:7::div16u:10 [ divr16u::return#2 ] ) always clobbers reg byte a Statement [193] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 ] ( main:2::sin8u_table:7::div16u:10 [ div16u::return#0 ] ) always clobbers reg byte a Statement [198] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a @@ -5366,62 +5397,62 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:43 [ d Statement [201] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a Statement [205] if((word) divr16u::rem#5<(const word) main::tabsize#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a Statement [207] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:213 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:213 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [217] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:213 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [219] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:213 [ memset::dst#1 ] ) always clobbers reg byte a Statement [11] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 ] ( main:2::sin8u_table:7 [ div16u::return#2 ] ) always clobbers reg byte a Statement [12] (word) sin8u_table::step#0 ← (word) div16u::return#2 [ sin8u_table::step#0 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 ] ) always clobbers reg byte a Statement [14] (word) print_word::w#1 ← (word) sin8u_table::step#0 [ sin8u_table::step#0 print_word::w#1 print_char_cursor#2 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 print_word::w#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [35] if((word) sin8u_table::i#10<(const word) main::tabsize#0) goto sin8u_table::@2 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [37] (word) sin8s::x#2 ← (word) sin8u_table::x#10 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8s::x#2 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8s::x#2 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [43] (signed word) sin8u_table::sinx_sc#0 ← (signed word)(word) mul8su::m#2 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [46] *((byte*) sin8u_table::sintab#2) ← (byte) sin8u_table::sinx_tr#0 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 ] ) always clobbers reg byte a reg byte y -Statement [48] (byte*~) print_char_cursor#119 ← (byte*) print_line_cursor#1 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_char_cursor#119 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_char_cursor#119 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [50] (word) print_word::w#2 ← (word) sin8u_table::x#10 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#2 print_char_cursor#2 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#2 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [58] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#2 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [66] (word) sin8u_table::x#1 ← (word) sin8u_table::x#10 + (word) sin8u_table::step#0 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#1 sin8u_table::sintab#1 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#1 sin8u_table::sintab#1 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [70] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#12 + (byte) $28 [ print_line_cursor#1 print_char_cursor#19 ] ( main:2::sin8u_table:7::print_ln:33 [ sin8u_table::step#0 print_line_cursor#1 print_char_cursor#19 ] main:2::sin8u_table:7::print_ln:65 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#19 ] ) always clobbers reg byte a -Statement [71] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#19) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#19 ] ( main:2::sin8u_table:7::print_ln:33 [ sin8u_table::step#0 print_line_cursor#1 print_char_cursor#19 ] main:2::sin8u_table:7::print_ln:65 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#19 ] ) always clobbers reg byte a -Statement [74] (byte~) print_byte::$0 ← (byte) print_byte::b#8 >> (byte) 4 [ print_byte::b#8 print_char_cursor#103 print_byte::$0 ] ( main:2::sin8u_table:7::print_byte:19 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:23 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:27 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:31 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:63 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:15::print_byte:104 [ sin8u_table::step#0 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:51::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:15::print_byte:106 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:51::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sbyte:55::print_byte:113 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] ) always clobbers reg byte a -Statement [77] (byte~) print_byte::$2 ← (byte) print_byte::b#8 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::sin8u_table:7::print_byte:19 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:23 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:27 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:31 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:63 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:15::print_byte:104 [ sin8u_table::step#0 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:51::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:15::print_byte:106 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:51::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sbyte:55::print_byte:113 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a -Statement [82] *((byte*) print_char_cursor#66) ← (byte) print_char::ch#6 [ print_char_cursor#66 ] ( main:2::sin8u_table:7::print_byte:19::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:23::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:27::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:31::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:63::print_char:76 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:104::print_char:76 [ sin8u_table::step#0 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:51::print_byte:104::print_char:76 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:104::print_char:76 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:106::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:51::print_byte:106::print_char:76 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:106::print_char:76 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:55::print_byte:113::print_char:76 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:19::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:23::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:27::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:31::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:63::print_char:79 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:104::print_char:79 [ sin8u_table::step#0 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:51::print_byte:104::print_char:79 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:104::print_char:79 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:106::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:51::print_byte:106::print_char:79 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:59::print_word:97::print_byte:106::print_char:79 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:55::print_byte:113::print_char:79 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:59::print_char:94 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:59::print_char:100 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:55::print_char:110 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sbyte::b#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:55::print_char:116 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sbyte::b#1 print_char_cursor#66 ] ) always clobbers reg byte y -Statement [87] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:49 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:53 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:57 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:61 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y -Statement [89] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:49 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:53 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:57 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:61 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y -Statement [92] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 [ print_sword::w#1 print_char_cursor#2 ] ( main:2::sin8u_table:7::print_sword:59 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [96] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 [ print_char_cursor#19 print_word::w#0 ] ( main:2::sin8u_table:7::print_sword:59 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] ) always clobbers reg byte a -Statement [101] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 [ print_char_cursor#19 print_sword::w#0 ] ( main:2::sin8u_table:7::print_sword:59 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] ) always clobbers reg byte a -Statement [103] (byte) print_byte::b#1 ← > (word) print_word::w#3 [ print_byte::b#1 print_char_cursor#102 print_word::w#3 ] ( main:2::sin8u_table:7::print_word:15 [ sin8u_table::step#0 print_byte::b#1 print_char_cursor#102 print_word::w#3 ] main:2::sin8u_table:7::print_word:51 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#1 print_char_cursor#102 print_word::w#3 ] main:2::sin8u_table:7::print_sword:59::print_word:97 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#1 print_char_cursor#102 print_word::w#3 ] ) always clobbers reg byte a -Statement [105] (byte) print_byte::b#2 ← < (word) print_word::w#3 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::sin8u_table:7::print_word:15 [ sin8u_table::step#0 print_char_cursor#19 print_byte::b#2 ] main:2::sin8u_table:7::print_word:51 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::sin8u_table:7::print_sword:59::print_word:97 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a -Statement [117] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#1 [ print_char_cursor#19 print_sbyte::b#0 ] ( main:2::sin8u_table:7::print_sbyte:55 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_sbyte::b#0 ] ) always clobbers reg byte a -Statement [120] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8su::a#0 mul8u::return#2 ] ( main:2::sin8u_table:7::mul8su:42 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::return#2 ] ) always clobbers reg byte a -Statement [121] (word) mul8su::m#0 ← (word) mul8u::return#2 [ mul8su::a#0 mul8su::m#0 ] ( main:2::sin8u_table:7::mul8su:42 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8su::m#0 ] ) always clobbers reg byte a -Statement [123] (byte~) mul8su::$7 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$7 ] ( main:2::sin8u_table:7::mul8su:42 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::m#0 mul8su::$7 ] ) always clobbers reg byte a -Statement [132] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8u_table:7::mul8su:42::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:148::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a -Statement [134] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8u_table:7::mul8su:42::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:148::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a -Statement [138] if((word) sin8s::x#2<(const word) PI_u4f12#0) goto sin8s::@1 [ sin8s::x#2 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#2 ] ) always clobbers reg byte a -Statement [139] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12#0 [ sin8s::x#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#0 ] ) always clobbers reg byte a -Statement [141] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a -Statement [142] (word) sin8s::x#1 ← (const word) PI_u4f12#0 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x#1 ] ) always clobbers reg byte a -Statement [144] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a -Statement [145] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a -Statement [160] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a -Statement [171] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a -Statement [172] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a -Statement [177] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::sinx#1 ] ) always clobbers reg byte a -Statement [185] (word) mul8u::return#3 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#3 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] ) always clobbers reg byte a -Statement [186] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a -Statement [187] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a -Statement [188] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a +Statement [35] (word) sin8s::x#2 ← (word) sin8u_table::x#15 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8s::x#2 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8s::x#2 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [41] (signed word) sin8u_table::sinx_sc#0 ← (signed word)(word) mul8su::m#2 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [44] *((byte*) sin8u_table::sintab#28) ← (byte) sin8u_table::sinx_tr#0 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 ] ) always clobbers reg byte a reg byte y +Statement [46] (byte*~) print_char_cursor#119 ← (byte*) print_line_cursor#1 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_char_cursor#119 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_char_cursor#119 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [48] (word) print_word::w#2 ← (word) sin8u_table::x#15 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#2 print_char_cursor#2 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#2 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [56] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#2 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [64] (word) sin8u_table::x#1 ← (word) sin8u_table::x#15 + (word) sin8u_table::step#0 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#1 sin8u_table::sintab#1 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#1 sin8u_table::sintab#1 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [66] if((word) sin8u_table::i#1<(const word) main::tabsize#0) goto sin8u_table::@2 [ sin8u_table::step#0 sin8u_table::i#1 sin8u_table::x#1 sin8u_table::sintab#1 print_line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::i#1 sin8u_table::x#1 sin8u_table::sintab#1 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [70] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#12 + (byte) $28 [ print_line_cursor#1 print_char_cursor#19 ] ( main:2::sin8u_table:7::print_ln:33 [ sin8u_table::step#0 print_line_cursor#1 print_char_cursor#19 ] main:2::sin8u_table:7::print_ln:63 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#19 ] ) always clobbers reg byte a +Statement [71] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#19) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#19 ] ( main:2::sin8u_table:7::print_ln:33 [ sin8u_table::step#0 print_line_cursor#1 print_char_cursor#19 ] main:2::sin8u_table:7::print_ln:63 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#19 ] ) always clobbers reg byte a +Statement [74] (byte~) print_byte::$0 ← (byte) print_byte::b#8 >> (byte) 4 [ print_byte::b#8 print_char_cursor#103 print_byte::$0 ] ( main:2::sin8u_table:7::print_byte:19 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:23 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:27 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:31 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:61 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:15::print_byte:104 [ sin8u_table::step#0 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:49::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:15::print_byte:106 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:49::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] ) always clobbers reg byte a +Statement [77] (byte~) print_byte::$2 ← (byte) print_byte::b#8 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::sin8u_table:7::print_byte:19 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:23 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:27 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:31 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:61 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:15::print_byte:104 [ sin8u_table::step#0 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:49::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:15::print_byte:106 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:49::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a +Statement [82] *((byte*) print_char_cursor#66) ← (byte) print_char::ch#6 [ print_char_cursor#66 ] ( main:2::sin8u_table:7::print_byte:19::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:23::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:27::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:31::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:61::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:104::print_char:76 [ sin8u_table::step#0 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:104::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:106::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:106::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:19::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:23::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:27::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:31::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:61::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:104::print_char:79 [ sin8u_table::step#0 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:104::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:106::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:106::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_char:94 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_char:100 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_char:110 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sbyte::b#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_char:116 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sbyte::b#1 print_char_cursor#66 ] ) always clobbers reg byte y +Statement [87] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:47 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:51 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:55 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:59 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [89] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:47 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:51 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:55 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:59 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [92] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 [ print_sword::w#1 print_char_cursor#2 ] ( main:2::sin8u_table:7::print_sword:57 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#2 ] ) always clobbers reg byte a +Statement [96] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 [ print_char_cursor#19 print_word::w#0 ] ( main:2::sin8u_table:7::print_sword:57 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] ) always clobbers reg byte a +Statement [101] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 [ print_char_cursor#19 print_sword::w#0 ] ( main:2::sin8u_table:7::print_sword:57 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] ) always clobbers reg byte a +Statement [103] (byte) print_byte::b#1 ← > (word) print_word::w#3 [ print_byte::b#1 print_char_cursor#102 print_word::w#3 ] ( main:2::sin8u_table:7::print_word:15 [ sin8u_table::step#0 print_byte::b#1 print_char_cursor#102 print_word::w#3 ] main:2::sin8u_table:7::print_word:49 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#1 print_char_cursor#102 print_word::w#3 ] main:2::sin8u_table:7::print_sword:57::print_word:97 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#1 print_char_cursor#102 print_word::w#3 ] ) always clobbers reg byte a +Statement [105] (byte) print_byte::b#2 ← < (word) print_word::w#3 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::sin8u_table:7::print_word:15 [ sin8u_table::step#0 print_char_cursor#19 print_byte::b#2 ] main:2::sin8u_table:7::print_word:49 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::sin8u_table:7::print_sword:57::print_word:97 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a +Statement [117] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#1 [ print_char_cursor#19 print_sbyte::b#0 ] ( main:2::sin8u_table:7::print_sbyte:53 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_sbyte::b#0 ] ) always clobbers reg byte a +Statement [120] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8su::a#0 mul8u::return#2 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::return#2 ] ) always clobbers reg byte a +Statement [121] (word) mul8su::m#0 ← (word) mul8u::return#2 [ mul8su::a#0 mul8su::m#0 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8su::m#0 ] ) always clobbers reg byte a +Statement [123] (byte~) mul8su::$7 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$7 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 print_line_cursor#1 mul8su::m#0 mul8su::$7 ] ) always clobbers reg byte a +Statement [132] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8u_table:7::mul8su:40::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:148::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:153::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:157::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:163::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:168::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [134] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8u_table:7::mul8su:40::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:148::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:153::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:157::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:163::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:168::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [138] if((word) sin8s::x#2<(const word) PI_u4f12#0) goto sin8s::@1 [ sin8s::x#2 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::x#2 ] ) always clobbers reg byte a +Statement [139] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12#0 [ sin8s::x#0 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::x#0 ] ) always clobbers reg byte a +Statement [141] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a +Statement [142] (word) sin8s::x#1 ← (const word) PI_u4f12#0 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#1 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x#1 ] ) always clobbers reg byte a +Statement [144] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a +Statement [145] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a +Statement [160] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a +Statement [171] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a +Statement [172] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a +Statement [177] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8u_table:7::sin8s:36 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::sinx#1 ] ) always clobbers reg byte a +Statement [185] (word) mul8u::return#3 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#3 ] ( main:2::sin8u_table:7::sin8s:36::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] ) always clobbers reg byte a +Statement [186] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8u_table:7::sin8s:36::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a +Statement [187] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8u_table:7::sin8s:36::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a +Statement [188] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8u_table:7::sin8s:36::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#28 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a Statement [192] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8u_table:7::div16u:10 [ divr16u::return#2 ] ) always clobbers reg byte a Statement [193] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 ] ( main:2::sin8u_table:7::div16u:10 [ div16u::return#0 ] ) always clobbers reg byte a Statement [198] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a Statement [201] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a Statement [205] if((word) divr16u::rem#5<(const word) main::tabsize#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a Statement [207] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:213 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:213 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_WORD:2 [ sin8u_table::i#10 sin8u_table::i#1 ] : zp ZP_WORD:2 , -Potential registers zp ZP_WORD:4 [ sin8u_table::x#10 sin8u_table::x#1 ] : zp ZP_WORD:4 , -Potential registers zp ZP_WORD:6 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] : zp ZP_WORD:6 , +Statement [217] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:213 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [219] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:213 [ memset::dst#1 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ sin8u_table::i#15 sin8u_table::i#1 ] : zp ZP_WORD:2 , +Potential registers zp ZP_WORD:4 [ sin8u_table::x#15 sin8u_table::x#1 ] : zp ZP_WORD:4 , +Potential registers zp ZP_WORD:6 [ sin8u_table::sintab#28 sin8u_table::sintab#1 ] : zp ZP_WORD:6 , Potential registers zp ZP_WORD:8 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] : zp ZP_WORD:8 , Potential registers zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] : zp ZP_BYTE:10 , reg byte x , Potential registers zp ZP_BYTE:11 [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , @@ -5446,7 +5477,7 @@ Potential registers zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 Potential registers zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] : zp ZP_WORD:39 , Potential registers zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:41 , Potential registers zp ZP_BYTE:43 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:43 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:44 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:44 , +Potential registers zp ZP_WORD:44 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:44 , Potential registers zp ZP_WORD:46 [ div16u::return#2 ] : zp ZP_WORD:46 , Potential registers zp ZP_WORD:48 [ sin8u_table::step#0 ] : zp ZP_WORD:48 , Potential registers zp ZP_BYTE:50 [ sin8s::return#2 ] : zp ZP_BYTE:50 , reg byte a , reg byte x , reg byte y , @@ -5491,10 +5522,10 @@ Uplift Scope [print_str] 305.5: zp ZP_WORD:14 [ print_str::str#10 print_str::str Uplift Scope [divr16u] 96.25: zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 37.25: zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:90 [ divr16u::$1 ] 22: zp ZP_BYTE:91 [ divr16u::$2 ] 18.19: zp ZP_BYTE:43 [ divr16u::i#2 divr16u::i#1 ] 7.46: zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] 4: zp ZP_WORD:86 [ divr16u::return#2 ] Uplift Scope [sin8s] 27.5: zp ZP_WORD:30 [ sin8s::x#6 sin8s::x#4 sin8s::x#2 sin8s::x#0 sin8s::x#1 ] 22: zp ZP_BYTE:50 [ sin8s::return#2 ] 13: zp ZP_BYTE:33 [ sin8s::return#0 sin8s::return#5 sin8s::sinx#1 ] 10: zp ZP_BYTE:32 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] 4: zp ZP_WORD:64 [ sin8s::$4 ] 4: zp ZP_BYTE:68 [ sin8s::x2#0 ] 4: zp ZP_BYTE:72 [ sin8s::x3_6#0 ] 4: zp ZP_BYTE:75 [ sin8s::x4#0 ] 4: zp ZP_BYTE:77 [ sin8s::x5#0 ] 4: zp ZP_BYTE:78 [ sin8s::x5_128#0 ] 1: zp ZP_BYTE:70 [ sin8s::x3#0 ] 0.64: zp ZP_BYTE:66 [ sin8s::x1#0 ] 0.33: zp ZP_BYTE:73 [ sin8s::usinx#0 ] 0.06: zp ZP_BYTE:29 [ sin8s::isUpper#10 ] Uplift Scope [mulu8_sel] 24: zp ZP_BYTE:34 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] 21: zp ZP_BYTE:35 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] 4: zp ZP_BYTE:67 [ mulu8_sel::return#0 ] 4: zp ZP_BYTE:69 [ mulu8_sel::return#1 ] 4: zp ZP_BYTE:71 [ mulu8_sel::return#2 ] 4: zp ZP_BYTE:74 [ mulu8_sel::return#10 ] 4: zp ZP_BYTE:76 [ mulu8_sel::return#11 ] 4: zp ZP_WORD:81 [ mulu8_sel::$0 ] 4: zp ZP_WORD:83 [ mulu8_sel::$1 ] 1.71: zp ZP_BYTE:85 [ mulu8_sel::return#12 ] 0.33: zp ZP_BYTE:36 [ mulu8_sel::select#5 ] -Uplift Scope [sin8u_table] 23.03: zp ZP_WORD:2 [ sin8u_table::i#10 sin8u_table::i#1 ] 22: zp ZP_BYTE:55 [ sin8u_table::$22 ] 12.42: zp ZP_WORD:4 [ sin8u_table::x#10 sin8u_table::x#1 ] 3.8: zp ZP_WORD:6 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] 2.36: zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] 2.2: zp ZP_WORD:53 [ sin8u_table::sinx_sc#0 ] 1.94: zp ZP_BYTE:56 [ sin8u_table::sinx_tr#0 ] 0.27: zp ZP_WORD:48 [ sin8u_table::step#0 ] +Uplift Scope [sin8u_table] 22: zp ZP_BYTE:55 [ sin8u_table::$22 ] 17.21: zp ZP_WORD:2 [ sin8u_table::i#15 sin8u_table::i#1 ] 8.8: zp ZP_WORD:4 [ sin8u_table::x#15 sin8u_table::x#1 ] 4: zp ZP_WORD:6 [ sin8u_table::sintab#28 sin8u_table::sintab#1 ] 2.36: zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] 2.2: zp ZP_WORD:53 [ sin8u_table::sinx_sc#0 ] 1.94: zp ZP_BYTE:56 [ sin8u_table::sinx_tr#0 ] 0.27: zp ZP_WORD:48 [ sin8u_table::step#0 ] Uplift Scope [print_byte] 39.25: zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] 4: zp ZP_BYTE:57 [ print_byte::$0 ] 4: zp ZP_BYTE:58 [ print_byte::$2 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:44 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_word] 36.33: zp ZP_WORD:18 [ print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 ] +Uplift Scope [memset] 33: zp ZP_WORD:44 [ memset::dst#4 memset::dst#1 ] Uplift Scope [mul8su] 7.33: zp ZP_WORD:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] 4: zp ZP_BYTE:61 [ mul8su::$7 ] 4: zp ZP_BYTE:62 [ mul8su::$10 ] 2.6: zp ZP_BYTE:52 [ mul8su::a#0 ] Uplift Scope [print_char] 14: zp ZP_BYTE:11 [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] Uplift Scope [print_sword] 10.83: zp ZP_WORD:16 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] @@ -5505,61 +5536,61 @@ Uplift Scope [print_ln] Uplift Scope [print_cls] Uplift Scope [main] -Uplifting [mul8u] best 24172 combination zp ZP_WORD:25 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:27 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] reg byte a [ mul8u::b#1 ] zp ZP_WORD:59 [ mul8u::return#2 ] zp ZP_WORD:79 [ mul8u::return#3 ] -Uplifting [] best 24172 combination zp ZP_WORD:8 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] zp ZP_WORD:12 [ print_char_cursor#109 print_char_cursor#66 print_char_cursor#103 print_char_cursor#19 print_char_cursor#102 print_char_cursor#2 print_char_cursor#119 print_char_cursor#1 ] -Uplifting [print_str] best 24172 combination zp ZP_WORD:14 [ print_str::str#10 print_str::str#12 print_str::str#0 ] -Uplifting [divr16u] best 23962 combination zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] zp ZP_WORD:86 [ divr16u::return#2 ] -Uplifting [sin8s] best 23857 combination zp ZP_WORD:30 [ sin8s::x#6 sin8s::x#4 sin8s::x#2 sin8s::x#0 sin8s::x#1 ] reg byte a [ sin8s::return#2 ] reg byte a [ sin8s::return#0 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp ZP_WORD:64 [ sin8s::$4 ] zp ZP_BYTE:68 [ sin8s::x2#0 ] zp ZP_BYTE:72 [ sin8s::x3_6#0 ] zp ZP_BYTE:75 [ sin8s::x4#0 ] zp ZP_BYTE:77 [ sin8s::x5#0 ] zp ZP_BYTE:78 [ sin8s::x5_128#0 ] zp ZP_BYTE:70 [ sin8s::x3#0 ] zp ZP_BYTE:66 [ sin8s::x1#0 ] zp ZP_BYTE:73 [ sin8s::usinx#0 ] zp ZP_BYTE:29 [ sin8s::isUpper#10 ] +Uplifting [mul8u] best 24232 combination zp ZP_WORD:25 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:27 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] reg byte a [ mul8u::b#1 ] zp ZP_WORD:59 [ mul8u::return#2 ] zp ZP_WORD:79 [ mul8u::return#3 ] +Uplifting [] best 24232 combination zp ZP_WORD:8 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] zp ZP_WORD:12 [ print_char_cursor#109 print_char_cursor#66 print_char_cursor#103 print_char_cursor#19 print_char_cursor#102 print_char_cursor#2 print_char_cursor#119 print_char_cursor#1 ] +Uplifting [print_str] best 24232 combination zp ZP_WORD:14 [ print_str::str#10 print_str::str#12 print_str::str#0 ] +Uplifting [divr16u] best 24022 combination zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] zp ZP_WORD:86 [ divr16u::return#2 ] +Uplifting [sin8s] best 23917 combination zp ZP_WORD:30 [ sin8s::x#6 sin8s::x#4 sin8s::x#2 sin8s::x#0 sin8s::x#1 ] reg byte a [ sin8s::return#2 ] reg byte a [ sin8s::return#0 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp ZP_WORD:64 [ sin8s::$4 ] zp ZP_BYTE:68 [ sin8s::x2#0 ] zp ZP_BYTE:72 [ sin8s::x3_6#0 ] zp ZP_BYTE:75 [ sin8s::x4#0 ] zp ZP_BYTE:77 [ sin8s::x5#0 ] zp ZP_BYTE:78 [ sin8s::x5_128#0 ] zp ZP_BYTE:70 [ sin8s::x3#0 ] zp ZP_BYTE:66 [ sin8s::x1#0 ] zp ZP_BYTE:73 [ sin8s::usinx#0 ] zp ZP_BYTE:29 [ sin8s::isUpper#10 ] Limited combination testing to 100 combinations of 5308416 possible. -Uplifting [mulu8_sel] best 23811 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp ZP_BYTE:71 [ mulu8_sel::return#2 ] zp ZP_BYTE:74 [ mulu8_sel::return#10 ] zp ZP_BYTE:76 [ mulu8_sel::return#11 ] zp ZP_WORD:81 [ mulu8_sel::$0 ] zp ZP_WORD:83 [ mulu8_sel::$1 ] zp ZP_BYTE:85 [ mulu8_sel::return#12 ] zp ZP_BYTE:36 [ mulu8_sel::select#5 ] +Uplifting [mulu8_sel] best 23871 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp ZP_BYTE:71 [ mulu8_sel::return#2 ] zp ZP_BYTE:74 [ mulu8_sel::return#10 ] zp ZP_BYTE:76 [ mulu8_sel::return#11 ] zp ZP_WORD:81 [ mulu8_sel::$0 ] zp ZP_WORD:83 [ mulu8_sel::$1 ] zp ZP_BYTE:85 [ mulu8_sel::return#12 ] zp ZP_BYTE:36 [ mulu8_sel::select#5 ] Limited combination testing to 100 combinations of 196608 possible. -Uplifting [sin8u_table] best 23701 combination zp ZP_WORD:2 [ sin8u_table::i#10 sin8u_table::i#1 ] reg byte a [ sin8u_table::$22 ] zp ZP_WORD:4 [ sin8u_table::x#10 sin8u_table::x#1 ] zp ZP_WORD:6 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] zp ZP_WORD:53 [ sin8u_table::sinx_sc#0 ] reg byte x [ sin8u_table::sinx_tr#0 ] zp ZP_WORD:48 [ sin8u_table::step#0 ] -Uplifting [print_byte] best 23693 combination zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] -Uplifting [memset] best 23693 combination zp ZP_WORD:44 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_word] best 23693 combination zp ZP_WORD:18 [ print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 ] -Uplifting [mul8su] best 23651 combination zp ZP_WORD:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] reg byte a [ mul8su::$7 ] reg byte a [ mul8su::$10 ] reg byte y [ mul8su::a#0 ] -Uplifting [print_char] best 23630 combination reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -Uplifting [print_sword] best 23630 combination zp ZP_WORD:16 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] -Uplifting [print_sbyte] best 23630 combination zp ZP_BYTE:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplifting [div16u] best 23630 combination zp ZP_WORD:46 [ div16u::return#2 ] zp ZP_WORD:88 [ div16u::return#0 ] -Uplifting [RADIX] best 23630 combination -Uplifting [print_ln] best 23630 combination -Uplifting [print_cls] best 23630 combination -Uplifting [main] best 23630 combination +Uplifting [sin8u_table] best 23761 combination reg byte a [ sin8u_table::$22 ] zp ZP_WORD:2 [ sin8u_table::i#15 sin8u_table::i#1 ] zp ZP_WORD:4 [ sin8u_table::x#15 sin8u_table::x#1 ] zp ZP_WORD:6 [ sin8u_table::sintab#28 sin8u_table::sintab#1 ] zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] zp ZP_WORD:53 [ sin8u_table::sinx_sc#0 ] reg byte x [ sin8u_table::sinx_tr#0 ] zp ZP_WORD:48 [ sin8u_table::step#0 ] +Uplifting [print_byte] best 23753 combination zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [print_word] best 23753 combination zp ZP_WORD:18 [ print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 ] +Uplifting [memset] best 23753 combination zp ZP_WORD:44 [ memset::dst#4 memset::dst#1 ] +Uplifting [mul8su] best 23711 combination zp ZP_WORD:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] reg byte a [ mul8su::$7 ] reg byte a [ mul8su::$10 ] reg byte y [ mul8su::a#0 ] +Uplifting [print_char] best 23690 combination reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] +Uplifting [print_sword] best 23690 combination zp ZP_WORD:16 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] +Uplifting [print_sbyte] best 23690 combination zp ZP_BYTE:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] +Uplifting [div16u] best 23690 combination zp ZP_WORD:46 [ div16u::return#2 ] zp ZP_WORD:88 [ div16u::return#0 ] +Uplifting [RADIX] best 23690 combination +Uplifting [print_ln] best 23690 combination +Uplifting [print_cls] best 23690 combination +Uplifting [main] best 23690 combination Attempting to uplift remaining variables inzp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] -Uplifting [print_byte] best 23630 combination zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] +Uplifting [print_byte] best 23690 combination zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] Attempting to uplift remaining variables inzp ZP_BYTE:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplifting [print_sbyte] best 23630 combination zp ZP_BYTE:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] +Uplifting [print_sbyte] best 23690 combination zp ZP_BYTE:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:68 [ sin8s::x2#0 ] -Uplifting [sin8s] best 23626 combination reg byte a [ sin8s::x2#0 ] +Uplifting [sin8s] best 23686 combination reg byte a [ sin8s::x2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:71 [ mulu8_sel::return#2 ] -Uplifting [mulu8_sel] best 23620 combination reg byte a [ mulu8_sel::return#2 ] +Uplifting [mulu8_sel] best 23680 combination reg byte a [ mulu8_sel::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:72 [ sin8s::x3_6#0 ] -Uplifting [sin8s] best 23616 combination reg byte a [ sin8s::x3_6#0 ] +Uplifting [sin8s] best 23676 combination reg byte a [ sin8s::x3_6#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:74 [ mulu8_sel::return#10 ] -Uplifting [mulu8_sel] best 23610 combination reg byte a [ mulu8_sel::return#10 ] +Uplifting [mulu8_sel] best 23670 combination reg byte a [ mulu8_sel::return#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:75 [ sin8s::x4#0 ] -Uplifting [sin8s] best 23606 combination reg byte a [ sin8s::x4#0 ] +Uplifting [sin8s] best 23666 combination reg byte a [ sin8s::x4#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:76 [ mulu8_sel::return#11 ] -Uplifting [mulu8_sel] best 23600 combination reg byte a [ mulu8_sel::return#11 ] +Uplifting [mulu8_sel] best 23660 combination reg byte a [ mulu8_sel::return#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:77 [ sin8s::x5#0 ] -Uplifting [sin8s] best 23594 combination reg byte a [ sin8s::x5#0 ] +Uplifting [sin8s] best 23654 combination reg byte a [ sin8s::x5#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:78 [ sin8s::x5_128#0 ] -Uplifting [sin8s] best 23588 combination reg byte a [ sin8s::x5_128#0 ] +Uplifting [sin8s] best 23648 combination reg byte a [ sin8s::x5_128#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:51 [ sin8u_table::sinx#0 ] -Uplifting [sin8u_table] best 23588 combination zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] +Uplifting [sin8u_table] best 23648 combination zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:85 [ mulu8_sel::return#12 ] -Uplifting [mulu8_sel] best 23570 combination reg byte a [ mulu8_sel::return#12 ] +Uplifting [mulu8_sel] best 23630 combination reg byte a [ mulu8_sel::return#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:70 [ sin8s::x3#0 ] -Uplifting [sin8s] best 23570 combination zp ZP_BYTE:70 [ sin8s::x3#0 ] +Uplifting [sin8s] best 23630 combination zp ZP_BYTE:70 [ sin8s::x3#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:66 [ sin8s::x1#0 ] -Uplifting [sin8s] best 23570 combination zp ZP_BYTE:66 [ sin8s::x1#0 ] +Uplifting [sin8s] best 23630 combination zp ZP_BYTE:66 [ sin8s::x1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:36 [ mulu8_sel::select#5 ] -Uplifting [mulu8_sel] best 23570 combination zp ZP_BYTE:36 [ mulu8_sel::select#5 ] +Uplifting [mulu8_sel] best 23630 combination zp ZP_BYTE:36 [ mulu8_sel::select#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:73 [ sin8s::usinx#0 ] -Uplifting [sin8s] best 23570 combination zp ZP_BYTE:73 [ sin8s::usinx#0 ] +Uplifting [sin8s] best 23630 combination zp ZP_BYTE:73 [ sin8s::usinx#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:29 [ sin8s::isUpper#10 ] -Uplifting [sin8s] best 23570 combination zp ZP_BYTE:29 [ sin8s::isUpper#10 ] +Uplifting [sin8s] best 23630 combination zp ZP_BYTE:29 [ sin8s::isUpper#10 ] Coalescing zero page register [ zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] ] with [ zp ZP_BYTE:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:16 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] ] with [ zp ZP_WORD:18 [ print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] ] with [ zp ZP_WORD:53 [ sin8u_table::sinx_sc#0 ] ] - score: 1 @@ -5577,19 +5608,19 @@ Coalescing zero page register [ zp ZP_WORD:16 [ print_sword::w#4 print_sword::w# Coalescing zero page register [ zp ZP_WORD:27 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] ] with [ zp ZP_WORD:12 [ print_char_cursor#109 print_char_cursor#66 print_char_cursor#103 print_char_cursor#19 print_char_cursor#102 print_char_cursor#2 print_char_cursor#119 print_char_cursor#1 ] ] Coalescing zero page register [ zp ZP_BYTE:29 [ sin8s::isUpper#10 ] ] with [ zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] ] Coalescing zero page register [ zp ZP_WORD:30 [ sin8s::x#6 sin8s::x#4 sin8s::x#2 sin8s::x#0 sin8s::x#1 sin8s::$4 ] ] with [ zp ZP_WORD:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 sin8u_table::sinx_sc#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mulu8_sel::$0 mulu8_sel::$1 ] ] -Coalescing zero page register [ zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:2 [ sin8u_table::i#10 sin8u_table::i#1 ] ] -Coalescing zero page register [ zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] ] with [ zp ZP_WORD:4 [ sin8u_table::x#10 sin8u_table::x#1 ] ] -Coalescing zero page register [ zp ZP_WORD:44 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:6 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] ] +Coalescing zero page register [ zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:2 [ sin8u_table::i#15 sin8u_table::i#1 ] ] +Coalescing zero page register [ zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] ] with [ zp ZP_WORD:4 [ sin8u_table::x#15 sin8u_table::x#1 ] ] +Coalescing zero page register [ zp ZP_WORD:44 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:6 [ sin8u_table::sintab#28 sin8u_table::sintab#1 ] ] Coalescing zero page register [ zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] ] with [ zp ZP_BYTE:36 [ mulu8_sel::select#5 ] ] Allocated (was zp ZP_WORD:8) zp ZP_WORD:2 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] Allocated (was zp ZP_WORD:16) zp ZP_WORD:4 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 print_str::str#10 print_str::str#12 print_str::str#0 ] Allocated (was zp ZP_WORD:27) zp ZP_WORD:6 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 print_char_cursor#109 print_char_cursor#66 print_char_cursor#103 print_char_cursor#19 print_char_cursor#102 print_char_cursor#2 print_char_cursor#119 print_char_cursor#1 ] Allocated (was zp ZP_BYTE:29) zp ZP_BYTE:8 [ sin8s::isUpper#10 print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Allocated (was zp ZP_WORD:30) zp ZP_WORD:9 [ sin8s::x#6 sin8s::x#4 sin8s::x#2 sin8s::x#0 sin8s::x#1 sin8s::$4 mul8su::m#2 mul8su::m#1 mul8su::m#0 sin8u_table::sinx_sc#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mulu8_sel::$0 mulu8_sel::$1 ] -Allocated (was zp ZP_WORD:37) zp ZP_WORD:11 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8u_table::i#10 sin8u_table::i#1 ] -Allocated (was zp ZP_WORD:39) zp ZP_WORD:13 [ divr16u::dividend#2 divr16u::dividend#0 sin8u_table::x#10 sin8u_table::x#1 ] +Allocated (was zp ZP_WORD:37) zp ZP_WORD:11 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8u_table::i#15 sin8u_table::i#1 ] +Allocated (was zp ZP_WORD:39) zp ZP_WORD:13 [ divr16u::dividend#2 divr16u::dividend#0 sin8u_table::x#15 sin8u_table::x#1 ] Allocated (was zp ZP_WORD:41) zp ZP_WORD:15 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#2 sin8u_table::step#0 div16u::return#0 ] -Allocated (was zp ZP_WORD:44) zp ZP_WORD:17 [ memset::dst#2 memset::dst#1 sin8u_table::sintab#2 sin8u_table::sintab#1 ] +Allocated (was zp ZP_WORD:44) zp ZP_WORD:17 [ memset::dst#4 memset::dst#1 sin8u_table::sintab#28 sin8u_table::sintab#1 ] Allocated (was zp ZP_BYTE:51) zp ZP_BYTE:19 [ sin8u_table::sinx#0 mulu8_sel::select#5 ] Allocated (was zp ZP_BYTE:66) zp ZP_BYTE:20 [ sin8s::x1#0 ] Allocated (was zp ZP_BYTE:70) zp ZP_BYTE:21 [ sin8s::x3#0 ] @@ -5831,84 +5862,73 @@ sin8u_table: { lda #>$400 sta print_line_cursor+1 jsr print_ln - // [34] phi from sin8u_table::@13 to sin8u_table::@1 [phi:sin8u_table::@13->sin8u_table::@1] - b1_from_b13: - // [34] phi (byte*) sin8u_table::sintab#2 = (const byte[$14]) main::sintab#0 [phi:sin8u_table::@13->sin8u_table::@1#0] -- pbuz1=pbuc1 + // [34] phi from sin8u_table::@13 to sin8u_table::@2 [phi:sin8u_table::@13->sin8u_table::@2] + b2_from_b13: + // [34] phi (byte*) sin8u_table::sintab#28 = (const byte[$14]) main::sintab#0 [phi:sin8u_table::@13->sin8u_table::@2#0] -- pbuz1=pbuc1 lda #main.sintab sta sintab+1 - // [34] phi (word) sin8u_table::x#10 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@1#1] -- vwuz1=vbuc1 + // [34] phi (word) sin8u_table::x#15 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@2#1] -- vwuz1=vbuc1 lda #<0 sta x lda #>0 sta x+1 - // [34] phi (word) sin8u_table::i#10 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@1#2] -- vwuz1=vbuc1 + // [34] phi (word) sin8u_table::i#15 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@2#2] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - jmp b1 - // u[4.12] - // sin8u_table::@1 - b1: - // [35] if((word) sin8u_table::i#10<(const word) main::tabsize#0) goto sin8u_table::@2 -- vwuz1_lt_vwuc1_then_la1 - lda i+1 - cmp #>main.tabsize - bcc b2 - bne !+ - lda i - cmp #sin8u_table::@2] + b2_from_b1: + // [34] phi (byte*) sin8u_table::sintab#28 = (byte*) sin8u_table::sintab#1 [phi:sin8u_table::@1->sin8u_table::@2#0] -- register_copy + // [34] phi (word) sin8u_table::x#15 = (word) sin8u_table::x#1 [phi:sin8u_table::@1->sin8u_table::@2#1] -- register_copy + // [34] phi (word) sin8u_table::i#15 = (word) sin8u_table::i#1 [phi:sin8u_table::@1->sin8u_table::@2#2] -- register_copy + jmp b2 // sin8u_table::@2 b2: - // [37] (word) sin8s::x#2 ← (word) sin8u_table::x#10 -- vwuz1=vwuz2 + // [35] (word) sin8s::x#2 ← (word) sin8u_table::x#15 -- vwuz1=vwuz2 lda x sta sin8s.x lda x+1 sta sin8s.x+1 - // [38] call sin8s + // [36] call sin8s jsr sin8s - // [39] (signed byte) sin8s::return#2 ← (signed byte) sin8s::return#0 + // [37] (signed byte) sin8s::return#2 ← (signed byte) sin8s::return#0 jmp b14 // sin8u_table::@14 b14: - // [40] (signed byte) sin8u_table::sinx#0 ← (signed byte) sin8s::return#2 -- vbsz1=vbsaa + // [38] (signed byte) sin8u_table::sinx#0 ← (signed byte) sin8s::return#2 -- vbsz1=vbsaa sta sinx - // [41] (signed byte) mul8su::a#0 ← (signed byte) sin8u_table::sinx#0 -- vbsyy=vbsz1 + // [39] (signed byte) mul8su::a#0 ← (signed byte) sin8u_table::sinx#0 -- vbsyy=vbsz1 ldy sinx - // [42] call mul8su + // [40] call mul8su jsr mul8su jmp b15 // sin8u_table::@15 b15: - // [43] (signed word) sin8u_table::sinx_sc#0 ← (signed word)(word) mul8su::m#2 - // [44] (byte~) sin8u_table::$22 ← > (signed word) sin8u_table::sinx_sc#0 -- vbuaa=_hi_vwsz1 + // [41] (signed word) sin8u_table::sinx_sc#0 ← (signed word)(word) mul8su::m#2 + // [42] (byte~) sin8u_table::$22 ← > (signed word) sin8u_table::sinx_sc#0 -- vbuaa=_hi_vwsz1 lda sinx_sc+1 - // [45] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$22 -- vbuxx=vbuc1_plus_vbuaa + // [43] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$22 -- vbuxx=vbuc1_plus_vbuaa tax axs #-[mid] - // [46] *((byte*) sin8u_table::sintab#2) ← (byte) sin8u_table::sinx_tr#0 -- _deref_pbuz1=vbuxx + // [44] *((byte*) sin8u_table::sintab#28) ← (byte) sin8u_table::sinx_tr#0 -- _deref_pbuz1=vbuxx txa ldy #0 sta (sintab),y - // [47] (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#2 -- pbuz1=_inc_pbuz1 + // [45] (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#28 -- pbuz1=_inc_pbuz1 inc sintab bne !+ inc sintab+1 !: - // [48] (byte*~) print_char_cursor#119 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [46] (byte*~) print_char_cursor#119 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 - // [49] call print_str + // [47] call print_str // [85] phi from sin8u_table::@15 to print_str [phi:sin8u_table::@15->print_str] print_str_from_b15: // [85] phi (byte*) print_char_cursor#109 = (byte*~) print_char_cursor#119 [phi:sin8u_table::@15->print_str#0] -- register_copy @@ -5921,23 +5941,23 @@ sin8u_table: { jmp b16 // sin8u_table::@16 b16: - // [50] (word) print_word::w#2 ← (word) sin8u_table::x#10 -- vwuz1=vwuz2 + // [48] (word) print_word::w#2 ← (word) sin8u_table::x#15 -- vwuz1=vwuz2 lda x sta print_word.w lda x+1 sta print_word.w+1 - // [51] call print_word + // [49] call print_word // [102] phi from sin8u_table::@16 to print_word [phi:sin8u_table::@16->print_word] print_word_from_b16: // [102] phi (byte*) print_char_cursor#102 = (byte*) print_char_cursor#2 [phi:sin8u_table::@16->print_word#0] -- register_copy // [102] phi (word) print_word::w#3 = (word) print_word::w#2 [phi:sin8u_table::@16->print_word#1] -- register_copy jsr print_word - // [52] phi from sin8u_table::@16 to sin8u_table::@17 [phi:sin8u_table::@16->sin8u_table::@17] + // [50] phi from sin8u_table::@16 to sin8u_table::@17 [phi:sin8u_table::@16->sin8u_table::@17] b17_from_b16: jmp b17 // sin8u_table::@17 b17: - // [53] call print_str + // [51] call print_str // [85] phi from sin8u_table::@17 to print_str [phi:sin8u_table::@17->print_str] print_str_from_b17: // [85] phi (byte*) print_char_cursor#109 = (byte*) print_char_cursor#19 [phi:sin8u_table::@17->print_str#0] -- register_copy @@ -5950,17 +5970,17 @@ sin8u_table: { jmp b18 // sin8u_table::@18 b18: - // [54] (signed byte) print_sbyte::b#1 ← (signed byte) sin8u_table::sinx#0 -- vbsz1=vbsz2 + // [52] (signed byte) print_sbyte::b#1 ← (signed byte) sin8u_table::sinx#0 -- vbsz1=vbsz2 lda sinx sta print_sbyte.b - // [55] call print_sbyte + // [53] call print_sbyte jsr print_sbyte - // [56] phi from sin8u_table::@18 to sin8u_table::@19 [phi:sin8u_table::@18->sin8u_table::@19] + // [54] phi from sin8u_table::@18 to sin8u_table::@19 [phi:sin8u_table::@18->sin8u_table::@19] b19_from_b18: jmp b19 // sin8u_table::@19 b19: - // [57] call print_str + // [55] call print_str // [85] phi from sin8u_table::@19 to print_str [phi:sin8u_table::@19->print_str] print_str_from_b19: // [85] phi (byte*) print_char_cursor#109 = (byte*) print_char_cursor#19 [phi:sin8u_table::@19->print_str#0] -- register_copy @@ -5973,19 +5993,19 @@ sin8u_table: { jmp b20 // sin8u_table::@20 b20: - // [58] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 -- vwsz1=vwsz2 + // [56] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 -- vwsz1=vwsz2 lda sinx_sc sta print_sword.w lda sinx_sc+1 sta print_sword.w+1 - // [59] call print_sword + // [57] call print_sword jsr print_sword - // [60] phi from sin8u_table::@20 to sin8u_table::@21 [phi:sin8u_table::@20->sin8u_table::@21] + // [58] phi from sin8u_table::@20 to sin8u_table::@21 [phi:sin8u_table::@20->sin8u_table::@21] b21_from_b20: jmp b21 // sin8u_table::@21 b21: - // [61] call print_str + // [59] call print_str // [85] phi from sin8u_table::@21 to print_str [phi:sin8u_table::@21->print_str] print_str_from_b21: // [85] phi (byte*) print_char_cursor#109 = (byte*) print_char_cursor#19 [phi:sin8u_table::@21->print_str#0] -- register_copy @@ -5998,20 +6018,20 @@ sin8u_table: { jmp b22 // sin8u_table::@22 b22: - // [62] (byte) print_byte::b#7 ← (byte) sin8u_table::sinx_tr#0 -- vbuz1=vbuxx + // [60] (byte) print_byte::b#7 ← (byte) sin8u_table::sinx_tr#0 -- vbuz1=vbuxx stx print_byte.b - // [63] call print_byte + // [61] call print_byte // [73] phi from sin8u_table::@22 to print_byte [phi:sin8u_table::@22->print_byte] print_byte_from_b22: // [73] phi (byte*) print_char_cursor#103 = (byte*) print_char_cursor#2 [phi:sin8u_table::@22->print_byte#0] -- register_copy // [73] phi (byte) print_byte::b#8 = (byte) print_byte::b#7 [phi:sin8u_table::@22->print_byte#1] -- register_copy jsr print_byte - // [64] phi from sin8u_table::@22 to sin8u_table::@23 [phi:sin8u_table::@22->sin8u_table::@23] + // [62] phi from sin8u_table::@22 to sin8u_table::@23 [phi:sin8u_table::@22->sin8u_table::@23] b23_from_b22: jmp b23 // sin8u_table::@23 b23: - // [65] call print_ln + // [63] call print_ln // [68] phi from sin8u_table::@23 to print_ln [phi:sin8u_table::@23->print_ln] print_ln_from_b23: // [68] phi (byte*) print_line_cursor#23 = (byte*) print_line_cursor#1 [phi:sin8u_table::@23->print_ln#0] -- register_copy @@ -6019,7 +6039,7 @@ sin8u_table: { jmp b24 // sin8u_table::@24 b24: - // [66] (word) sin8u_table::x#1 ← (word) sin8u_table::x#10 + (word) sin8u_table::step#0 -- vwuz1=vwuz1_plus_vwuz2 + // [64] (word) sin8u_table::x#1 ← (word) sin8u_table::x#15 + (word) sin8u_table::step#0 -- vwuz1=vwuz1_plus_vwuz2 lda x clc adc step @@ -6027,17 +6047,29 @@ sin8u_table: { lda x+1 adc step+1 sta x+1 - // [67] (word) sin8u_table::i#1 ← ++ (word) sin8u_table::i#10 -- vwuz1=_inc_vwuz1 + // [65] (word) sin8u_table::i#1 ← ++ (word) sin8u_table::i#15 -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - // [34] phi from sin8u_table::@24 to sin8u_table::@1 [phi:sin8u_table::@24->sin8u_table::@1] - b1_from_b24: - // [34] phi (byte*) sin8u_table::sintab#2 = (byte*) sin8u_table::sintab#1 [phi:sin8u_table::@24->sin8u_table::@1#0] -- register_copy - // [34] phi (word) sin8u_table::x#10 = (word) sin8u_table::x#1 [phi:sin8u_table::@24->sin8u_table::@1#1] -- register_copy - // [34] phi (word) sin8u_table::i#10 = (word) sin8u_table::i#1 [phi:sin8u_table::@24->sin8u_table::@1#2] -- register_copy jmp b1 + // u[4.12] + // sin8u_table::@1 + b1: + // [66] if((word) sin8u_table::i#1<(const word) main::tabsize#0) goto sin8u_table::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.tabsize + bcc b2_from_b1 + bne !+ + lda i + cmp #memset::@1] - b1_from_memset: - // [216] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [216] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [216] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [216] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [217] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [220] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [218] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [216] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [216] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [219] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #0 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 Replacing label b1_from_b2 with b1 @@ -7049,6 +7086,8 @@ Replacing label b2_from_b1 with b2 Replacing label b3_from_b2 with b3 Replacing label b3_from_b2 with b3 Replacing label b1_from_b3 with b1 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: @@ -7074,6 +7113,7 @@ Removing instruction b12_from_b11: Removing instruction print_byte_from_b12: Removing instruction b13_from_b12: Removing instruction print_ln_from_b13: +Removing instruction b2_from_b1: Removing instruction b17_from_b16: Removing instruction print_str_from_b17: Removing instruction b19_from_b18: @@ -7118,6 +7158,7 @@ Removing instruction b2_from_b1: Removing instruction b2_from_b4: Removing instruction b3_from_b2: Removing instruction b3_from_b5: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction print_cls_from_main: @@ -7136,8 +7177,7 @@ Removing instruction b10: Removing instruction b11: Removing instruction b12: Removing instruction b13: -Removing instruction b1_from_b13: -Removing instruction breturn: +Removing instruction b2_from_b13: Removing instruction b14: Removing instruction b15: Removing instruction print_str_from_b15: @@ -7152,7 +7192,8 @@ Removing instruction b22: Removing instruction print_byte_from_b22: Removing instruction b23: Removing instruction b24: -Removing instruction b1_from_b24: +Removing instruction b1: +Removing instruction breturn: Removing instruction breturn: Removing instruction print_char_from_print_byte: Removing instruction b1: @@ -7203,9 +7244,9 @@ Removing instruction b5: Removing instruction breturn: Removing instruction memset_from_print_cls: Removing instruction breturn: -Removing instruction b1_from_memset: +Removing instruction b2_from_memset: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main @@ -7214,11 +7255,15 @@ Replacing jump to rts with rts in jmp b4 Succesful ASM optimization Pass5DoubleJumpElimination Relabelling long label b1_from_sin8s to b5 Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b2 Removing instruction jmp b1 +Removing instruction jmp b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Removing instruction b4: Succesful ASM optimization Pass5UnusedLabelElimination +Fixing long branch [170] bcc b2 to bcs +Fixing long branch [176] bcc b2 to bcs FINAL SYMBOL TABLE (label) @1 @@ -7286,8 +7331,8 @@ FINAL SYMBOL TABLE (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:17 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:17 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:17 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:17 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -7520,8 +7565,8 @@ FINAL SYMBOL TABLE (byte) sin8u_table::amplitude (const byte) sin8u_table::amplitude#0 amplitude = (const byte) sin8u_table::max#0-(const byte) sin8u_table::min#0 (word) sin8u_table::i -(word) sin8u_table::i#1 i zp ZP_WORD:11 22.0 -(word) sin8u_table::i#10 i zp ZP_WORD:11 1.03125 +(word) sin8u_table::i#1 i zp ZP_WORD:11 16.5 +(word) sin8u_table::i#15 i zp ZP_WORD:11 0.7096774193548387 (byte) sin8u_table::max (const byte) sin8u_table::max#0 max = (byte) $ff (byte) sin8u_table::mid @@ -7529,8 +7574,8 @@ FINAL SYMBOL TABLE (byte) sin8u_table::min (const byte) sin8u_table::min#0 min = (byte) $a (byte*) sin8u_table::sintab -(byte*) sin8u_table::sintab#1 sintab zp ZP_WORD:17 1.0476190476190477 -(byte*) sin8u_table::sintab#2 sintab zp ZP_WORD:17 2.75 +(byte*) sin8u_table::sintab#1 sintab zp ZP_WORD:17 1.0 +(byte*) sin8u_table::sintab#28 sintab zp ZP_WORD:17 3.0 (signed byte) sin8u_table::sinx (signed byte) sin8u_table::sinx#0 sinx zp ZP_BYTE:19 2.357142857142857 (signed word) sin8u_table::sinx_sc @@ -7552,8 +7597,8 @@ FINAL SYMBOL TABLE (const word) sin8u_table::sum#0 sum = (word)(const byte) sin8u_table::min#0+(const byte) sin8u_table::max#0 (word) sin8u_table::tabsize (word) sin8u_table::x -(word) sin8u_table::x#1 x zp ZP_WORD:13 11.0 -(word) sin8u_table::x#10 x zp ZP_WORD:13 1.4193548387096775 +(word) sin8u_table::x#1 x zp ZP_WORD:13 7.333333333333333 +(word) sin8u_table::x#15 x zp ZP_WORD:13 1.4666666666666666 zp ZP_WORD:2 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] @@ -7567,11 +7612,11 @@ reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] reg byte a [ sin8s::return#0 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] -zp ZP_WORD:11 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8u_table::i#10 sin8u_table::i#1 ] -zp ZP_WORD:13 [ divr16u::dividend#2 divr16u::dividend#0 sin8u_table::x#10 sin8u_table::x#1 ] +zp ZP_WORD:11 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8u_table::i#15 sin8u_table::i#1 ] +zp ZP_WORD:13 [ divr16u::dividend#2 divr16u::dividend#0 sin8u_table::x#15 sin8u_table::x#1 ] zp ZP_WORD:15 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#2 sin8u_table::step#0 div16u::return#0 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] -zp ZP_WORD:17 [ memset::dst#2 memset::dst#1 sin8u_table::sintab#2 sin8u_table::sintab#1 ] +zp ZP_WORD:17 [ memset::dst#4 memset::dst#1 sin8u_table::sintab#28 sin8u_table::sintab#1 ] reg byte a [ sin8s::return#2 ] zp ZP_BYTE:19 [ sin8u_table::sinx#0 mulu8_sel::select#5 ] reg byte y [ mul8su::a#0 ] @@ -7796,84 +7841,71 @@ sin8u_table: { lda #>$400 sta print_line_cursor+1 jsr print_ln - // [34] phi from sin8u_table::@13 to sin8u_table::@1 [phi:sin8u_table::@13->sin8u_table::@1] - // [34] phi (byte*) sin8u_table::sintab#2 = (const byte[$14]) main::sintab#0 [phi:sin8u_table::@13->sin8u_table::@1#0] -- pbuz1=pbuc1 + // [34] phi from sin8u_table::@13 to sin8u_table::@2 [phi:sin8u_table::@13->sin8u_table::@2] + // [34] phi (byte*) sin8u_table::sintab#28 = (const byte[$14]) main::sintab#0 [phi:sin8u_table::@13->sin8u_table::@2#0] -- pbuz1=pbuc1 lda #main.sintab sta sintab+1 - // [34] phi (word) sin8u_table::x#10 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@1#1] -- vwuz1=vbuc1 + // [34] phi (word) sin8u_table::x#15 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@2#1] -- vwuz1=vbuc1 lda #<0 sta x sta x+1 - // [34] phi (word) sin8u_table::i#10 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@1#2] -- vwuz1=vbuc1 + // [34] phi (word) sin8u_table::i#15 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@2#2] -- vwuz1=vbuc1 sta i sta i+1 - // u[4.12] - // sin8u_table::@1 - b1: - // for( word i=0; imain.tabsize - bcc b2 - bne !+ - lda i - cmp #sin8u_table::@2] + // [34] phi (byte*) sin8u_table::sintab#28 = (byte*) sin8u_table::sintab#1 [phi:sin8u_table::@1->sin8u_table::@2#0] -- register_copy + // [34] phi (word) sin8u_table::x#15 = (word) sin8u_table::x#1 [phi:sin8u_table::@1->sin8u_table::@2#1] -- register_copy + // [34] phi (word) sin8u_table::i#15 = (word) sin8u_table::i#1 [phi:sin8u_table::@1->sin8u_table::@2#2] -- register_copy // sin8u_table::@2 b2: // sin8s(x) - // [37] (word) sin8s::x#2 ← (word) sin8u_table::x#10 -- vwuz1=vwuz2 + // [35] (word) sin8s::x#2 ← (word) sin8u_table::x#15 -- vwuz1=vwuz2 lda x sta sin8s.x lda x+1 sta sin8s.x+1 - // [38] call sin8s + // [36] call sin8s jsr sin8s - // [39] (signed byte) sin8s::return#2 ← (signed byte) sin8s::return#0 + // [37] (signed byte) sin8s::return#2 ← (signed byte) sin8s::return#0 // sin8u_table::@14 // sinx = sin8s(x) - // [40] (signed byte) sin8u_table::sinx#0 ← (signed byte) sin8s::return#2 -- vbsz1=vbsaa + // [38] (signed byte) sin8u_table::sinx#0 ← (signed byte) sin8s::return#2 -- vbsz1=vbsaa sta sinx // mul8su(sinx, amplitude+1) - // [41] (signed byte) mul8su::a#0 ← (signed byte) sin8u_table::sinx#0 -- vbsyy=vbsz1 + // [39] (signed byte) mul8su::a#0 ← (signed byte) sin8u_table::sinx#0 -- vbsyy=vbsz1 tay - // [42] call mul8su + // [40] call mul8su jsr mul8su // sin8u_table::@15 // sinx_sc = mul8su(sinx, amplitude+1) - // [43] (signed word) sin8u_table::sinx_sc#0 ← (signed word)(word) mul8su::m#2 + // [41] (signed word) sin8u_table::sinx_sc#0 ← (signed word)(word) mul8su::m#2 // >sinx_sc - // [44] (byte~) sin8u_table::$22 ← > (signed word) sin8u_table::sinx_sc#0 -- vbuaa=_hi_vwsz1 + // [42] (byte~) sin8u_table::$22 ← > (signed word) sin8u_table::sinx_sc#0 -- vbuaa=_hi_vwsz1 lda sinx_sc+1 // sinx_tr = mid+>sinx_sc - // [45] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$22 -- vbuxx=vbuc1_plus_vbuaa + // [43] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$22 -- vbuxx=vbuc1_plus_vbuaa tax axs #-[mid] // *sintab++ = sinx_tr - // [46] *((byte*) sin8u_table::sintab#2) ← (byte) sin8u_table::sinx_tr#0 -- _deref_pbuz1=vbuxx + // [44] *((byte*) sin8u_table::sintab#28) ← (byte) sin8u_table::sinx_tr#0 -- _deref_pbuz1=vbuxx txa ldy #0 sta (sintab),y // *sintab++ = sinx_tr; - // [47] (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#2 -- pbuz1=_inc_pbuz1 + // [45] (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#28 -- pbuz1=_inc_pbuz1 inc sintab bne !+ inc sintab+1 !: - // [48] (byte*~) print_char_cursor#119 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [46] (byte*~) print_char_cursor#119 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 // print_str("x: ") - // [49] call print_str + // [47] call print_str // [85] phi from sin8u_table::@15 to print_str [phi:sin8u_table::@15->print_str] // [85] phi (byte*) print_char_cursor#109 = (byte*~) print_char_cursor#119 [phi:sin8u_table::@15->print_str#0] -- register_copy // [85] phi (byte*) print_str::str#12 = (const string) sin8u_table::str5 [phi:sin8u_table::@15->print_str#1] -- pbuz1=pbuc1 @@ -7884,20 +7916,20 @@ sin8u_table: { jsr print_str // sin8u_table::@16 // print_word(x) - // [50] (word) print_word::w#2 ← (word) sin8u_table::x#10 -- vwuz1=vwuz2 + // [48] (word) print_word::w#2 ← (word) sin8u_table::x#15 -- vwuz1=vwuz2 lda x sta print_word.w lda x+1 sta print_word.w+1 - // [51] call print_word + // [49] call print_word // [102] phi from sin8u_table::@16 to print_word [phi:sin8u_table::@16->print_word] // [102] phi (byte*) print_char_cursor#102 = (byte*) print_char_cursor#2 [phi:sin8u_table::@16->print_word#0] -- register_copy // [102] phi (word) print_word::w#3 = (word) print_word::w#2 [phi:sin8u_table::@16->print_word#1] -- register_copy jsr print_word - // [52] phi from sin8u_table::@16 to sin8u_table::@17 [phi:sin8u_table::@16->sin8u_table::@17] + // [50] phi from sin8u_table::@16 to sin8u_table::@17 [phi:sin8u_table::@16->sin8u_table::@17] // sin8u_table::@17 // print_str(" sin: ") - // [53] call print_str + // [51] call print_str // [85] phi from sin8u_table::@17 to print_str [phi:sin8u_table::@17->print_str] // [85] phi (byte*) print_char_cursor#109 = (byte*) print_char_cursor#19 [phi:sin8u_table::@17->print_str#0] -- register_copy // [85] phi (byte*) print_str::str#12 = (const string) sin8u_table::str6 [phi:sin8u_table::@17->print_str#1] -- pbuz1=pbuc1 @@ -7908,15 +7940,15 @@ sin8u_table: { jsr print_str // sin8u_table::@18 // print_sbyte(sinx) - // [54] (signed byte) print_sbyte::b#1 ← (signed byte) sin8u_table::sinx#0 -- vbsz1=vbsz2 + // [52] (signed byte) print_sbyte::b#1 ← (signed byte) sin8u_table::sinx#0 -- vbsz1=vbsz2 lda sinx sta print_sbyte.b - // [55] call print_sbyte + // [53] call print_sbyte jsr print_sbyte - // [56] phi from sin8u_table::@18 to sin8u_table::@19 [phi:sin8u_table::@18->sin8u_table::@19] + // [54] phi from sin8u_table::@18 to sin8u_table::@19 [phi:sin8u_table::@18->sin8u_table::@19] // sin8u_table::@19 // print_str(" scaled: ") - // [57] call print_str + // [55] call print_str // [85] phi from sin8u_table::@19 to print_str [phi:sin8u_table::@19->print_str] // [85] phi (byte*) print_char_cursor#109 = (byte*) print_char_cursor#19 [phi:sin8u_table::@19->print_str#0] -- register_copy // [85] phi (byte*) print_str::str#12 = (const string) sin8u_table::str7 [phi:sin8u_table::@19->print_str#1] -- pbuz1=pbuc1 @@ -7927,17 +7959,17 @@ sin8u_table: { jsr print_str // sin8u_table::@20 // print_sword(sinx_sc) - // [58] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 -- vwsz1=vwsz2 + // [56] (signed word) print_sword::w#1 ← (signed word) sin8u_table::sinx_sc#0 -- vwsz1=vwsz2 lda sinx_sc sta print_sword.w lda sinx_sc+1 sta print_sword.w+1 - // [59] call print_sword + // [57] call print_sword jsr print_sword - // [60] phi from sin8u_table::@20 to sin8u_table::@21 [phi:sin8u_table::@20->sin8u_table::@21] + // [58] phi from sin8u_table::@20 to sin8u_table::@21 [phi:sin8u_table::@20->sin8u_table::@21] // sin8u_table::@21 // print_str(" trans: ") - // [61] call print_str + // [59] call print_str // [85] phi from sin8u_table::@21 to print_str [phi:sin8u_table::@21->print_str] // [85] phi (byte*) print_char_cursor#109 = (byte*) print_char_cursor#19 [phi:sin8u_table::@21->print_str#0] -- register_copy // [85] phi (byte*) print_str::str#12 = (const string) sin8u_table::str8 [phi:sin8u_table::@21->print_str#1] -- pbuz1=pbuc1 @@ -7948,23 +7980,23 @@ sin8u_table: { jsr print_str // sin8u_table::@22 // print_byte(sinx_tr) - // [62] (byte) print_byte::b#7 ← (byte) sin8u_table::sinx_tr#0 -- vbuz1=vbuxx + // [60] (byte) print_byte::b#7 ← (byte) sin8u_table::sinx_tr#0 -- vbuz1=vbuxx stx print_byte.b - // [63] call print_byte + // [61] call print_byte // [73] phi from sin8u_table::@22 to print_byte [phi:sin8u_table::@22->print_byte] // [73] phi (byte*) print_char_cursor#103 = (byte*) print_char_cursor#2 [phi:sin8u_table::@22->print_byte#0] -- register_copy // [73] phi (byte) print_byte::b#8 = (byte) print_byte::b#7 [phi:sin8u_table::@22->print_byte#1] -- register_copy jsr print_byte - // [64] phi from sin8u_table::@22 to sin8u_table::@23 [phi:sin8u_table::@22->sin8u_table::@23] + // [62] phi from sin8u_table::@22 to sin8u_table::@23 [phi:sin8u_table::@22->sin8u_table::@23] // sin8u_table::@23 // print_ln() - // [65] call print_ln + // [63] call print_ln // [68] phi from sin8u_table::@23 to print_ln [phi:sin8u_table::@23->print_ln] // [68] phi (byte*) print_line_cursor#23 = (byte*) print_line_cursor#1 [phi:sin8u_table::@23->print_ln#0] -- register_copy jsr print_ln // sin8u_table::@24 // x = x + step - // [66] (word) sin8u_table::x#1 ← (word) sin8u_table::x#10 + (word) sin8u_table::step#0 -- vwuz1=vwuz1_plus_vwuz2 + // [64] (word) sin8u_table::x#1 ← (word) sin8u_table::x#15 + (word) sin8u_table::step#0 -- vwuz1=vwuz1_plus_vwuz2 lda x clc adc step @@ -7973,16 +8005,30 @@ sin8u_table: { adc step+1 sta x+1 // for( word i=0; isin8u_table::@1] - // [34] phi (byte*) sin8u_table::sintab#2 = (byte*) sin8u_table::sintab#1 [phi:sin8u_table::@24->sin8u_table::@1#0] -- register_copy - // [34] phi (word) sin8u_table::x#10 = (word) sin8u_table::x#1 [phi:sin8u_table::@24->sin8u_table::@1#1] -- register_copy - // [34] phi (word) sin8u_table::i#10 = (word) sin8u_table::i#1 [phi:sin8u_table::@24->sin8u_table::@1#2] -- register_copy - jmp b1 + // u[4.12] + // sin8u_table::@1 + // [66] if((word) sin8u_table::i#1<(const word) main::tabsize#0) goto sin8u_table::@2 -- vwuz1_lt_vwuc1_then_la1 + lda i+1 + cmp #>main.tabsize + bcs !b2+ + jmp b2 + !b2: + bne !+ + lda i + cmp #memset::@1] - // [216] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [216] phi from memset to memset::@2 [phi:memset->memset::@2] + // [216] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [216] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [216] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [217] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [218] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [219] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -8807,24 +8866,8 @@ memset: { bne b2 // memset::@return // } - // [218] return + // [220] return rts - // memset::@2 - b2: - // *dst = c - // [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [220] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [216] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [216] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sinusgenscale8.sym b/src/test/ref/sinusgenscale8.sym index ef3e11ab4..a421dd3c8 100644 --- a/src/test/ref/sinusgenscale8.sym +++ b/src/test/ref/sinusgenscale8.sym @@ -63,8 +63,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:17 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:17 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:17 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:17 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -297,8 +297,8 @@ (byte) sin8u_table::amplitude (const byte) sin8u_table::amplitude#0 amplitude = (const byte) sin8u_table::max#0-(const byte) sin8u_table::min#0 (word) sin8u_table::i -(word) sin8u_table::i#1 i zp ZP_WORD:11 22.0 -(word) sin8u_table::i#10 i zp ZP_WORD:11 1.03125 +(word) sin8u_table::i#1 i zp ZP_WORD:11 16.5 +(word) sin8u_table::i#15 i zp ZP_WORD:11 0.7096774193548387 (byte) sin8u_table::max (const byte) sin8u_table::max#0 max = (byte) $ff (byte) sin8u_table::mid @@ -306,8 +306,8 @@ (byte) sin8u_table::min (const byte) sin8u_table::min#0 min = (byte) $a (byte*) sin8u_table::sintab -(byte*) sin8u_table::sintab#1 sintab zp ZP_WORD:17 1.0476190476190477 -(byte*) sin8u_table::sintab#2 sintab zp ZP_WORD:17 2.75 +(byte*) sin8u_table::sintab#1 sintab zp ZP_WORD:17 1.0 +(byte*) sin8u_table::sintab#28 sintab zp ZP_WORD:17 3.0 (signed byte) sin8u_table::sinx (signed byte) sin8u_table::sinx#0 sinx zp ZP_BYTE:19 2.357142857142857 (signed word) sin8u_table::sinx_sc @@ -329,8 +329,8 @@ (const word) sin8u_table::sum#0 sum = (word)(const byte) sin8u_table::min#0+(const byte) sin8u_table::max#0 (word) sin8u_table::tabsize (word) sin8u_table::x -(word) sin8u_table::x#1 x zp ZP_WORD:13 11.0 -(word) sin8u_table::x#10 x zp ZP_WORD:13 1.4193548387096775 +(word) sin8u_table::x#1 x zp ZP_WORD:13 7.333333333333333 +(word) sin8u_table::x#15 x zp ZP_WORD:13 1.4666666666666666 zp ZP_WORD:2 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] @@ -344,11 +344,11 @@ reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] reg byte a [ sin8s::return#0 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] -zp ZP_WORD:11 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8u_table::i#10 sin8u_table::i#1 ] -zp ZP_WORD:13 [ divr16u::dividend#2 divr16u::dividend#0 sin8u_table::x#10 sin8u_table::x#1 ] +zp ZP_WORD:11 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8u_table::i#15 sin8u_table::i#1 ] +zp ZP_WORD:13 [ divr16u::dividend#2 divr16u::dividend#0 sin8u_table::x#15 sin8u_table::x#1 ] zp ZP_WORD:15 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#2 sin8u_table::step#0 div16u::return#0 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] -zp ZP_WORD:17 [ memset::dst#2 memset::dst#1 sin8u_table::sintab#2 sin8u_table::sintab#1 ] +zp ZP_WORD:17 [ memset::dst#4 memset::dst#1 sin8u_table::sintab#28 sin8u_table::sintab#1 ] reg byte a [ sin8s::return#2 ] zp ZP_BYTE:19 [ sin8u_table::sinx#0 mulu8_sel::select#5 ] reg byte y [ mul8su::a#0 ] diff --git a/src/test/ref/struct-pos-fill.asm b/src/test/ref/struct-pos-fill.asm index d32a49930..8ad9ab8aa 100644 --- a/src/test/ref/struct-pos-fill.asm +++ b/src/test/ref/struct-pos-fill.asm @@ -6,9 +6,9 @@ .const OFFSET_STRUCT_POS_Y = 1 .const XSPACE = $14 .const YSPACE = $14 - .label x = 3 + .label x = 5 .label idx = 4 - .label y = 5 + .label y = 3 .label line = 2 main: { lda #0 @@ -16,22 +16,9 @@ main: { sta idx sta x sta line - b1: - lda line - cmp #8 - bcc b2 - rts b2: inc x ldy #0 - b3: - cpy #8 - bcc b4 - lax y - axs #-[YSPACE] - stx y - inc line - jmp b1 b4: lda idx asl @@ -45,6 +32,15 @@ main: { axs #-[XSPACE] stx x iny - jmp b3 + cpy #8 + bcc b4 + lax y + axs #-[YSPACE] + stx y + inc line + lda line + cmp #8 + bcc b2 + rts } p: .fill 2*$40, 0 diff --git a/src/test/ref/struct-pos-fill.cfg b/src/test/ref/struct-pos-fill.cfg index 0146185ce..18de12e3d 100644 --- a/src/test/ref/struct-pos-fill.cfg +++ b/src/test/ref/struct-pos-fill.cfg @@ -9,35 +9,35 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@5 - [5] (byte) y#12 ← phi( main/(byte) 0 main::@5/(byte) y#1 ) - [5] (byte) idx#12 ← phi( main/(byte) 0 main::@5/(byte) idx#11 ) - [5] (byte) x#3 ← phi( main/(byte) 0 main::@5/(byte) x#10 ) - [5] (byte) line#11 ← phi( main/(byte) 0 main::@5/(byte) line#2 ) - [6] if((byte) line#11<(byte) 8) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [7] return - to:@return -main::@2: scope:[main] from main::@1 - [8] (byte) x#1 ← ++ (byte) x#3 + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) y#16 ← phi( main::@1/(byte) y#1 main/(byte) 0 ) + [5] (byte) idx#15 ← phi( main::@1/(byte) idx#1 main/(byte) 0 ) + [5] (byte) x#17 ← phi( main::@1/(byte) x#10 main/(byte) 0 ) + [5] (byte) line#15 ← phi( main::@1/(byte) line#11 main/(byte) 0 ) + [6] (byte) x#1 ← ++ (byte) x#17 + to:main::@4 +main::@4: scope:[main] from main::@2 main::@3 + [7] (byte) x#15 ← phi( main::@3/(byte) x#10 main::@2/(byte) x#1 ) + [7] (byte) idx#14 ← phi( main::@3/(byte) idx#1 main::@2/(byte) idx#15 ) + [7] (byte) row#13 ← phi( main::@3/(byte) row#12 main::@2/(byte) 0 ) + [8] (byte~) main::$3 ← (byte) idx#14 << (byte) 1 + [9] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#16 + [10] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#15 + [11] (byte) idx#1 ← ++ (byte) idx#14 + [12] (byte) x#10 ← (byte) x#15 + (const byte) XSPACE#0 + [13] (byte) row#12 ← ++ (byte) row#13 to:main::@3 -main::@3: scope:[main] from main::@2 main::@4 - [9] (byte) x#10 ← phi( main::@2/(byte) x#1 main::@4/(byte) x#2 ) - [9] (byte) idx#11 ← phi( main::@2/(byte) idx#12 main::@4/(byte) idx#1 ) - [9] (byte) row#12 ← phi( main::@2/(byte) 0 main::@4/(byte) row#2 ) - [10] if((byte) row#12<(byte) 8) goto main::@4 +main::@3: scope:[main] from main::@4 + [14] if((byte) row#12<(byte) 8) goto main::@4 to:main::@5 main::@5: scope:[main] from main::@3 - [11] (byte) y#1 ← (byte) y#12 + (const byte) YSPACE#0 - [12] (byte) line#2 ← ++ (byte) line#11 + [15] (byte) y#1 ← (byte) y#16 + (const byte) YSPACE#0 + [16] (byte) line#11 ← ++ (byte) line#15 to:main::@1 -main::@4: scope:[main] from main::@3 - [13] (byte~) main::$3 ← (byte) idx#11 << (byte) 1 - [14] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#12 - [15] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#10 - [16] (byte) idx#1 ← ++ (byte) idx#11 - [17] (byte) x#2 ← (byte) x#10 + (const byte) XSPACE#0 - [18] (byte) row#2 ← ++ (byte) row#12 - to:main::@3 +main::@1: scope:[main] from main::@5 + [17] if((byte) line#11<(byte) 8) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [18] return + to:@return diff --git a/src/test/ref/struct-pos-fill.log b/src/test/ref/struct-pos-fill.log index e5c4c8aa5..a1aeb517e 100644 --- a/src/test/ref/struct-pos-fill.log +++ b/src/test/ref/struct-pos-fill.log @@ -306,14 +306,48 @@ Eliminating unused constant (const byte) line#0 Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const byte) row#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) line#11 = (byte) line#2 +Alias (byte) x#14 = (byte) x#3 +Alias (byte) idx#12 = (byte) idx#13 +Alias (byte) y#1 = (byte) y#12 +Alias (byte) row#12 = (byte) row#2 +Alias (byte) idx#1 = (byte) idx#11 +Alias (byte) x#10 = (byte) x#2 +Alias (byte) line#14 = (byte) line#16 +Alias (byte) y#13 = (byte) y#15 Alias (byte~) main::$3 = (byte~) main::$2 +Alias (byte) idx#15 = (byte) idx#16 +Alias (byte) x#1 = (byte) x#16 +Alias (byte) line#15 = (byte) line#17 +Alias (byte) y#16 = (byte) y#17 Successful SSA optimization Pass2AliasElimination -Constant right-side identified [6] (byte*) main::$4 ← (byte*)(const struct pos[$40]) p#0 + (const byte) OFFSET_STRUCT_POS_Y +Identical Phi Values (byte) line#14 (byte) line#15 +Identical Phi Values (byte) y#13 (byte) y#16 +Identical Phi Values (byte) row#14 (const byte) row#1 +Identical Phi Values (byte) line#18 (const byte) line#1 +Identical Phi Values (byte) x#18 (const byte) x#0 +Identical Phi Values (byte) idx#17 (const byte) idx#0 +Identical Phi Values (byte) y#18 (const byte) y#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) line#13 (byte) line#15 +Identical Phi Values (byte) y#14 (byte) y#16 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [8] (byte*) main::$4 ← (byte*)(const struct pos[$40]) p#0 + (const byte) OFFSET_STRUCT_POS_Y Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) main::$4 = (byte*)p#0+OFFSET_STRUCT_POS_Y Constant (const byte*) main::$5 = (byte*)p#0 Successful SSA optimization Pass2ConstantIdentification -Rewriting multiplication to use shift [5] (byte~) main::$3 ← (byte) idx#11 * (const byte) SIZEOF_STRUCT_POS +Removing PHI-reference to removed block (main::@4_1) in block main::@6 +Removing PHI-reference to removed block (main::@4_1) in block main::@6 +if() condition always true - replacing block destination [23] if((const byte) row#1<(byte) 8) goto main::@5 +if() condition always true - replacing block destination [25] if((const byte) line#1<(byte) 8) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Alias (byte) idx#1 = (byte) idx#12 +Alias (byte) x#10 = (byte) x#14 +Successful SSA optimization Pass2AliasElimination +Rewriting multiplication to use shift [5] (byte~) main::$3 ← (byte) idx#14 * (const byte) SIZEOF_STRUCT_POS Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte) idx#0 Inlining constant with var siblings (const byte) x#0 @@ -330,26 +364,33 @@ Constant inlined idx#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining Eliminating unused constant (const byte) SIZEOF_STRUCT_POS Successful SSA optimization PassNEliminateUnusedVars +Added new block during phi lifting main::@13(between main::@1 and main::@2) +Added new block during phi lifting main::@14(between main::@4 and main::@5) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 7 initial phi equivalence classes -Coalesced [10] idx#14 ← idx#12 -Coalesced [11] x#15 ← x#1 -Coalesced [16] line#13 ← line#2 -Coalesced [17] x#14 ← x#10 -Coalesced (already) [18] idx#13 ← idx#11 -Coalesced [19] y#13 ← y#1 -Coalesced [26] row#13 ← row#2 -Coalesced [27] idx#15 ← idx#1 -Coalesced [28] x#16 ← x#2 +Coalesced [9] idx#20 ← idx#15 +Coalesced [10] x#21 ← x#1 +Coalesced [23] line#19 ← line#11 +Coalesced [24] x#19 ← x#10 +Coalesced [25] idx#18 ← idx#1 +Coalesced [26] y#19 ← y#1 +Coalesced [27] row#15 ← row#12 +Coalesced (already) [28] idx#19 ← idx#1 +Coalesced [29] x#20 ← x#10 Coalesced down to 5 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@4_1 +Culled Empty Block (label) main::@13 +Culled Empty Block (label) main::@14 Renumbering block main::@4 to main::@3 Renumbering block main::@5 to main::@4 Renumbering block main::@6 to main::@5 @@ -370,86 +411,86 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@5 - [5] (byte) y#12 ← phi( main/(byte) 0 main::@5/(byte) y#1 ) - [5] (byte) idx#12 ← phi( main/(byte) 0 main::@5/(byte) idx#11 ) - [5] (byte) x#3 ← phi( main/(byte) 0 main::@5/(byte) x#10 ) - [5] (byte) line#11 ← phi( main/(byte) 0 main::@5/(byte) line#2 ) - [6] if((byte) line#11<(byte) 8) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [7] return - to:@return -main::@2: scope:[main] from main::@1 - [8] (byte) x#1 ← ++ (byte) x#3 + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) y#16 ← phi( main::@1/(byte) y#1 main/(byte) 0 ) + [5] (byte) idx#15 ← phi( main::@1/(byte) idx#1 main/(byte) 0 ) + [5] (byte) x#17 ← phi( main::@1/(byte) x#10 main/(byte) 0 ) + [5] (byte) line#15 ← phi( main::@1/(byte) line#11 main/(byte) 0 ) + [6] (byte) x#1 ← ++ (byte) x#17 + to:main::@4 +main::@4: scope:[main] from main::@2 main::@3 + [7] (byte) x#15 ← phi( main::@3/(byte) x#10 main::@2/(byte) x#1 ) + [7] (byte) idx#14 ← phi( main::@3/(byte) idx#1 main::@2/(byte) idx#15 ) + [7] (byte) row#13 ← phi( main::@3/(byte) row#12 main::@2/(byte) 0 ) + [8] (byte~) main::$3 ← (byte) idx#14 << (byte) 1 + [9] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#16 + [10] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#15 + [11] (byte) idx#1 ← ++ (byte) idx#14 + [12] (byte) x#10 ← (byte) x#15 + (const byte) XSPACE#0 + [13] (byte) row#12 ← ++ (byte) row#13 to:main::@3 -main::@3: scope:[main] from main::@2 main::@4 - [9] (byte) x#10 ← phi( main::@2/(byte) x#1 main::@4/(byte) x#2 ) - [9] (byte) idx#11 ← phi( main::@2/(byte) idx#12 main::@4/(byte) idx#1 ) - [9] (byte) row#12 ← phi( main::@2/(byte) 0 main::@4/(byte) row#2 ) - [10] if((byte) row#12<(byte) 8) goto main::@4 +main::@3: scope:[main] from main::@4 + [14] if((byte) row#12<(byte) 8) goto main::@4 to:main::@5 main::@5: scope:[main] from main::@3 - [11] (byte) y#1 ← (byte) y#12 + (const byte) YSPACE#0 - [12] (byte) line#2 ← ++ (byte) line#11 + [15] (byte) y#1 ← (byte) y#16 + (const byte) YSPACE#0 + [16] (byte) line#11 ← ++ (byte) line#15 to:main::@1 -main::@4: scope:[main] from main::@3 - [13] (byte~) main::$3 ← (byte) idx#11 << (byte) 1 - [14] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#12 - [15] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#10 - [16] (byte) idx#1 ← ++ (byte) idx#11 - [17] (byte) x#2 ← (byte) x#10 + (const byte) XSPACE#0 - [18] (byte) row#2 ← ++ (byte) row#12 - to:main::@3 +main::@1: scope:[main] from main::@5 + [17] if((byte) line#11<(byte) 8) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [18] return + to:@return VARIABLE REGISTER WEIGHTS (byte) XSPACE (byte) YSPACE (byte) idx -(byte) idx#1 67.33333333333333 -(byte) idx#11 46.42857142857143 -(byte) idx#12 7.333333333333333 +(byte) idx#1 30.42857142857143 +(byte) idx#14 78.5 +(byte) idx#15 11.0 (byte) line -(byte) line#11 2.75 -(byte) line#2 22.0 +(byte) line#11 16.5 +(byte) line#15 2.0 (void()) main() (byte~) main::$3 151.5 (struct pos[$40]) p (byte) pos::x (byte) pos::y (byte) row -(byte) row#12 43.285714285714285 -(byte) row#2 202.0 +(byte) row#12 151.5 +(byte) row#13 33.666666666666664 (byte) x (byte) x#1 22.0 -(byte) x#10 40.625 -(byte) x#2 101.0 -(byte) x#3 11.0 +(byte) x#10 35.5 +(byte) x#15 62.8 +(byte) x#17 22.0 (byte) y -(byte) y#1 11.0 -(byte) y#12 11.181818181818182 +(byte) y#1 7.333333333333333 +(byte) y#16 12.299999999999999 Initial phi equivalence classes -[ line#11 line#2 ] -[ x#3 x#10 x#1 x#2 ] -[ idx#12 idx#11 idx#1 ] -[ y#12 y#1 ] -[ row#12 row#2 ] +[ line#15 line#11 ] +[ y#16 y#1 ] +[ row#13 row#12 ] +[ idx#14 idx#15 idx#1 ] +[ x#15 x#17 x#10 x#1 ] Added variable main::$3 to zero page equivalence class [ main::$3 ] Complete equivalence classes -[ line#11 line#2 ] -[ x#3 x#10 x#1 x#2 ] -[ idx#12 idx#11 idx#1 ] -[ y#12 y#1 ] -[ row#12 row#2 ] +[ line#15 line#11 ] +[ y#16 y#1 ] +[ row#13 row#12 ] +[ idx#14 idx#15 idx#1 ] +[ x#15 x#17 x#10 x#1 ] [ main::$3 ] -Allocated zp ZP_BYTE:2 [ line#11 line#2 ] -Allocated zp ZP_BYTE:3 [ x#3 x#10 x#1 x#2 ] -Allocated zp ZP_BYTE:4 [ idx#12 idx#11 idx#1 ] -Allocated zp ZP_BYTE:5 [ y#12 y#1 ] -Allocated zp ZP_BYTE:6 [ row#12 row#2 ] +Allocated zp ZP_BYTE:2 [ line#15 line#11 ] +Allocated zp ZP_BYTE:3 [ y#16 y#1 ] +Allocated zp ZP_BYTE:4 [ row#13 row#12 ] +Allocated zp ZP_BYTE:5 [ idx#14 idx#15 idx#1 ] +Allocated zp ZP_BYTE:6 [ x#15 x#17 x#10 x#1 ] Allocated zp ZP_BYTE:7 [ main::$3 ] INITIAL ASM @@ -465,10 +506,10 @@ Target platform is c64basic .const OFFSET_STRUCT_POS_Y = 1 .const XSPACE = $14 .const YSPACE = $14 - .label x = 3 - .label idx = 4 - .label row = 6 - .label y = 5 + .label x = 6 + .label idx = 5 + .label y = 3 + .label row = 4 .label line = 2 // @begin bbegin: @@ -489,141 +530,145 @@ bend: // main main: { .label _3 = 7 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) y#12 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) y#16 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta y - // [5] phi (byte) idx#12 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) idx#15 = (byte) 0 [phi:main->main::@2#1] -- vbuz1=vbuc1 lda #0 sta idx - // [5] phi (byte) x#3 = (byte) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 + // [5] phi (byte) x#17 = (byte) 0 [phi:main->main::@2#2] -- vbuz1=vbuc1 lda #0 sta x - // [5] phi (byte) line#11 = (byte) 0 [phi:main->main::@1#3] -- vbuz1=vbuc1 + // [5] phi (byte) line#15 = (byte) 0 [phi:main->main::@2#3] -- vbuz1=vbuc1 lda #0 sta line - jmp b1 - // main::@1 - b1: - // [6] if((byte) line#11<(byte) 8) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda line - cmp #8 - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) y#16 = (byte) y#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) idx#15 = (byte) idx#1 [phi:main::@1->main::@2#1] -- register_copy + // [5] phi (byte) x#17 = (byte) x#10 [phi:main::@1->main::@2#2] -- register_copy + // [5] phi (byte) line#15 = (byte) line#11 [phi:main::@1->main::@2#3] -- register_copy + jmp b2 // main::@2 b2: - // [8] (byte) x#1 ← ++ (byte) x#3 -- vbuz1=_inc_vbuz1 + // [6] (byte) x#1 ← ++ (byte) x#17 -- vbuz1=_inc_vbuz1 inc x - // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - b3_from_b2: - // [9] phi (byte) x#10 = (byte) x#1 [phi:main::@2->main::@3#0] -- register_copy - // [9] phi (byte) idx#11 = (byte) idx#12 [phi:main::@2->main::@3#1] -- register_copy - // [9] phi (byte) row#12 = (byte) 0 [phi:main::@2->main::@3#2] -- vbuz1=vbuc1 + // [7] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + b4_from_b2: + // [7] phi (byte) x#15 = (byte) x#1 [phi:main::@2->main::@4#0] -- register_copy + // [7] phi (byte) idx#14 = (byte) idx#15 [phi:main::@2->main::@4#1] -- register_copy + // [7] phi (byte) row#13 = (byte) 0 [phi:main::@2->main::@4#2] -- vbuz1=vbuc1 lda #0 sta row - jmp b3 - // main::@3 - b3: - // [10] if((byte) row#12<(byte) 8) goto main::@4 -- vbuz1_lt_vbuc1_then_la1 - lda row - cmp #8 - bcc b4 - jmp b5 - // main::@5 - b5: - // [11] (byte) y#1 ← (byte) y#12 + (const byte) YSPACE#0 -- vbuz1=vbuz1_plus_vbuc1 - lax y - axs #-[YSPACE] - stx y - // [12] (byte) line#2 ← ++ (byte) line#11 -- vbuz1=_inc_vbuz1 - inc line - // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] - b1_from_b5: - // [5] phi (byte) y#12 = (byte) y#1 [phi:main::@5->main::@1#0] -- register_copy - // [5] phi (byte) idx#12 = (byte) idx#11 [phi:main::@5->main::@1#1] -- register_copy - // [5] phi (byte) x#3 = (byte) x#10 [phi:main::@5->main::@1#2] -- register_copy - // [5] phi (byte) line#11 = (byte) line#2 [phi:main::@5->main::@1#3] -- register_copy - jmp b1 + jmp b4 + // [7] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + b4_from_b3: + // [7] phi (byte) x#15 = (byte) x#10 [phi:main::@3->main::@4#0] -- register_copy + // [7] phi (byte) idx#14 = (byte) idx#1 [phi:main::@3->main::@4#1] -- register_copy + // [7] phi (byte) row#13 = (byte) row#12 [phi:main::@3->main::@4#2] -- register_copy + jmp b4 // main::@4 b4: - // [13] (byte~) main::$3 ← (byte) idx#11 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [8] (byte~) main::$3 ← (byte) idx#14 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda idx asl sta _3 - // [14] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#12 -- pbuc1_derefidx_vbuz1=vbuz2 + // [9] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#16 -- pbuc1_derefidx_vbuz1=vbuz2 lda y ldy _3 sta p+OFFSET_STRUCT_POS_Y,y - // [15] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#10 -- pbuc1_derefidx_vbuz1=vbuz2 + // [10] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#15 -- pbuc1_derefidx_vbuz1=vbuz2 lda x ldy _3 sta p,y - // [16] (byte) idx#1 ← ++ (byte) idx#11 -- vbuz1=_inc_vbuz1 + // [11] (byte) idx#1 ← ++ (byte) idx#14 -- vbuz1=_inc_vbuz1 inc idx - // [17] (byte) x#2 ← (byte) x#10 + (const byte) XSPACE#0 -- vbuz1=vbuz1_plus_vbuc1 + // [12] (byte) x#10 ← (byte) x#15 + (const byte) XSPACE#0 -- vbuz1=vbuz1_plus_vbuc1 lax x axs #-[XSPACE] stx x - // [18] (byte) row#2 ← ++ (byte) row#12 -- vbuz1=_inc_vbuz1 + // [13] (byte) row#12 ← ++ (byte) row#13 -- vbuz1=_inc_vbuz1 inc row - // [9] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - b3_from_b4: - // [9] phi (byte) x#10 = (byte) x#2 [phi:main::@4->main::@3#0] -- register_copy - // [9] phi (byte) idx#11 = (byte) idx#1 [phi:main::@4->main::@3#1] -- register_copy - // [9] phi (byte) row#12 = (byte) row#2 [phi:main::@4->main::@3#2] -- register_copy jmp b3 + // main::@3 + b3: + // [14] if((byte) row#12<(byte) 8) goto main::@4 -- vbuz1_lt_vbuc1_then_la1 + lda row + cmp #8 + bcc b4_from_b3 + jmp b5 + // main::@5 + b5: + // [15] (byte) y#1 ← (byte) y#16 + (const byte) YSPACE#0 -- vbuz1=vbuz1_plus_vbuc1 + lax y + axs #-[YSPACE] + stx y + // [16] (byte) line#11 ← ++ (byte) line#15 -- vbuz1=_inc_vbuz1 + inc line + jmp b1 + // main::@1 + b1: + // [17] if((byte) line#11<(byte) 8) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda line + cmp #8 + bcc b2_from_b1 + jmp breturn + // main::@return + breturn: + // [18] return + rts } // File Data p: .fill 2*$40, 0 REGISTER UPLIFT POTENTIAL REGISTERS -Statement [11] (byte) y#1 ← (byte) y#12 + (const byte) YSPACE#0 [ line#11 x#10 idx#11 y#1 ] ( main:2 [ line#11 x#10 idx#11 y#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ line#11 line#2 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ x#3 x#10 x#1 x#2 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ idx#12 idx#11 idx#1 ] -Statement [13] (byte~) main::$3 ← (byte) idx#11 << (byte) 1 [ line#11 y#12 x#10 idx#11 row#12 main::$3 ] ( main:2 [ line#11 y#12 x#10 idx#11 row#12 main::$3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ y#12 y#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ row#12 row#2 ] -Statement [14] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#12 [ line#11 y#12 x#10 idx#11 row#12 main::$3 ] ( main:2 [ line#11 y#12 x#10 idx#11 row#12 main::$3 ] ) always clobbers reg byte a +Statement [8] (byte~) main::$3 ← (byte) idx#14 << (byte) 1 [ line#15 y#16 row#13 idx#14 x#15 main::$3 ] ( main:2 [ line#15 y#16 row#13 idx#14 x#15 main::$3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ line#15 line#11 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ y#16 y#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ row#13 row#12 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ idx#14 idx#15 idx#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ x#15 x#17 x#10 x#1 ] +Statement [9] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#16 [ line#15 y#16 row#13 idx#14 x#15 main::$3 ] ( main:2 [ line#15 y#16 row#13 idx#14 x#15 main::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ main::$3 ] -Statement [15] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#10 [ line#11 y#12 x#10 idx#11 row#12 ] ( main:2 [ line#11 y#12 x#10 idx#11 row#12 ] ) always clobbers reg byte a -Statement [17] (byte) x#2 ← (byte) x#10 + (const byte) XSPACE#0 [ line#11 y#12 row#12 idx#1 x#2 ] ( main:2 [ line#11 y#12 row#12 idx#1 x#2 ] ) always clobbers reg byte a -Statement [11] (byte) y#1 ← (byte) y#12 + (const byte) YSPACE#0 [ line#11 x#10 idx#11 y#1 ] ( main:2 [ line#11 x#10 idx#11 y#1 ] ) always clobbers reg byte a -Statement [13] (byte~) main::$3 ← (byte) idx#11 << (byte) 1 [ line#11 y#12 x#10 idx#11 row#12 main::$3 ] ( main:2 [ line#11 y#12 x#10 idx#11 row#12 main::$3 ] ) always clobbers reg byte a -Statement [14] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#12 [ line#11 y#12 x#10 idx#11 row#12 main::$3 ] ( main:2 [ line#11 y#12 x#10 idx#11 row#12 main::$3 ] ) always clobbers reg byte a -Statement [15] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#10 [ line#11 y#12 x#10 idx#11 row#12 ] ( main:2 [ line#11 y#12 x#10 idx#11 row#12 ] ) always clobbers reg byte a -Statement [17] (byte) x#2 ← (byte) x#10 + (const byte) XSPACE#0 [ line#11 y#12 row#12 idx#1 x#2 ] ( main:2 [ line#11 y#12 row#12 idx#1 x#2 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ line#11 line#2 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ x#3 x#10 x#1 x#2 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:4 [ idx#12 idx#11 idx#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:5 [ y#12 y#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:6 [ row#12 row#2 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , +Statement [10] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#15 [ line#15 y#16 row#13 idx#14 x#15 ] ( main:2 [ line#15 y#16 row#13 idx#14 x#15 ] ) always clobbers reg byte a +Statement [12] (byte) x#10 ← (byte) x#15 + (const byte) XSPACE#0 [ line#15 y#16 x#10 idx#1 row#13 ] ( main:2 [ line#15 y#16 x#10 idx#1 row#13 ] ) always clobbers reg byte a +Statement [15] (byte) y#1 ← (byte) y#16 + (const byte) YSPACE#0 [ line#15 x#10 idx#1 y#1 ] ( main:2 [ line#15 x#10 idx#1 y#1 ] ) always clobbers reg byte a +Statement [8] (byte~) main::$3 ← (byte) idx#14 << (byte) 1 [ line#15 y#16 row#13 idx#14 x#15 main::$3 ] ( main:2 [ line#15 y#16 row#13 idx#14 x#15 main::$3 ] ) always clobbers reg byte a +Statement [9] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#16 [ line#15 y#16 row#13 idx#14 x#15 main::$3 ] ( main:2 [ line#15 y#16 row#13 idx#14 x#15 main::$3 ] ) always clobbers reg byte a +Statement [10] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#15 [ line#15 y#16 row#13 idx#14 x#15 ] ( main:2 [ line#15 y#16 row#13 idx#14 x#15 ] ) always clobbers reg byte a +Statement [12] (byte) x#10 ← (byte) x#15 + (const byte) XSPACE#0 [ line#15 y#16 x#10 idx#1 row#13 ] ( main:2 [ line#15 y#16 x#10 idx#1 row#13 ] ) always clobbers reg byte a +Statement [15] (byte) y#1 ← (byte) y#16 + (const byte) YSPACE#0 [ line#15 x#10 idx#1 y#1 ] ( main:2 [ line#15 x#10 idx#1 y#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ line#15 line#11 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ y#16 y#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ row#13 row#12 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:5 [ idx#14 idx#15 idx#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ x#15 x#17 x#10 x#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:7 [ main::$3 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [] 245.29: zp ZP_BYTE:6 [ row#12 row#2 ] 174.62: zp ZP_BYTE:3 [ x#3 x#10 x#1 x#2 ] 121.1: zp ZP_BYTE:4 [ idx#12 idx#11 idx#1 ] 24.75: zp ZP_BYTE:2 [ line#11 line#2 ] 22.18: zp ZP_BYTE:5 [ y#12 y#1 ] +Uplift Scope [] 185.17: zp ZP_BYTE:4 [ row#13 row#12 ] 142.3: zp ZP_BYTE:6 [ x#15 x#17 x#10 x#1 ] 119.93: zp ZP_BYTE:5 [ idx#14 idx#15 idx#1 ] 19.63: zp ZP_BYTE:3 [ y#16 y#1 ] 18.5: zp ZP_BYTE:2 [ line#15 line#11 ] Uplift Scope [main] 151.5: zp ZP_BYTE:7 [ main::$3 ] Uplift Scope [pos] -Uplifting [] best 7513 combination zp ZP_BYTE:6 [ row#12 row#2 ] zp ZP_BYTE:3 [ x#3 x#10 x#1 x#2 ] zp ZP_BYTE:4 [ idx#12 idx#11 idx#1 ] zp ZP_BYTE:2 [ line#11 line#2 ] zp ZP_BYTE:5 [ y#12 y#1 ] +Uplifting [] best 7843 combination zp ZP_BYTE:4 [ row#13 row#12 ] zp ZP_BYTE:6 [ x#15 x#17 x#10 x#1 ] zp ZP_BYTE:5 [ idx#14 idx#15 idx#1 ] zp ZP_BYTE:3 [ y#16 y#1 ] zp ZP_BYTE:2 [ line#15 line#11 ] Limited combination testing to 100 combinations of 243 possible. -Uplifting [main] best 6813 combination reg byte x [ main::$3 ] -Uplifting [pos] best 6813 combination -Attempting to uplift remaining variables inzp ZP_BYTE:6 [ row#12 row#2 ] -Uplifting [] best 5913 combination reg byte y [ row#12 row#2 ] -Attempting to uplift remaining variables inzp ZP_BYTE:3 [ x#3 x#10 x#1 x#2 ] -Uplifting [] best 5913 combination zp ZP_BYTE:3 [ x#3 x#10 x#1 x#2 ] -Attempting to uplift remaining variables inzp ZP_BYTE:4 [ idx#12 idx#11 idx#1 ] -Uplifting [] best 5913 combination zp ZP_BYTE:4 [ idx#12 idx#11 idx#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:2 [ line#11 line#2 ] -Uplifting [] best 5913 combination zp ZP_BYTE:2 [ line#11 line#2 ] -Attempting to uplift remaining variables inzp ZP_BYTE:5 [ y#12 y#1 ] -Uplifting [] best 5913 combination zp ZP_BYTE:5 [ y#12 y#1 ] +Uplifting [main] best 7143 combination reg byte x [ main::$3 ] +Uplifting [pos] best 7143 combination +Attempting to uplift remaining variables inzp ZP_BYTE:4 [ row#13 row#12 ] +Uplifting [] best 6243 combination reg byte y [ row#13 row#12 ] +Attempting to uplift remaining variables inzp ZP_BYTE:6 [ x#15 x#17 x#10 x#1 ] +Uplifting [] best 6243 combination zp ZP_BYTE:6 [ x#15 x#17 x#10 x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:5 [ idx#14 idx#15 idx#1 ] +Uplifting [] best 6243 combination zp ZP_BYTE:5 [ idx#14 idx#15 idx#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:3 [ y#16 y#1 ] +Uplifting [] best 6243 combination zp ZP_BYTE:3 [ y#16 y#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ line#15 line#11 ] +Uplifting [] best 6243 combination zp ZP_BYTE:2 [ line#15 line#11 ] +Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ idx#14 idx#15 idx#1 ] +Allocated (was zp ZP_BYTE:6) zp ZP_BYTE:5 [ x#15 x#17 x#10 x#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -637,9 +682,9 @@ ASSEMBLER BEFORE OPTIMIZATION .const OFFSET_STRUCT_POS_Y = 1 .const XSPACE = $14 .const YSPACE = $14 - .label x = 3 + .label x = 5 .label idx = 4 - .label y = 5 + .label y = 3 .label line = 2 // @begin bbegin: @@ -659,90 +704,92 @@ bend_from_b1: bend: // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) y#12 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) y#16 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta y - // [5] phi (byte) idx#12 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) idx#15 = (byte) 0 [phi:main->main::@2#1] -- vbuz1=vbuc1 lda #0 sta idx - // [5] phi (byte) x#3 = (byte) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 + // [5] phi (byte) x#17 = (byte) 0 [phi:main->main::@2#2] -- vbuz1=vbuc1 lda #0 sta x - // [5] phi (byte) line#11 = (byte) 0 [phi:main->main::@1#3] -- vbuz1=vbuc1 + // [5] phi (byte) line#15 = (byte) 0 [phi:main->main::@2#3] -- vbuz1=vbuc1 lda #0 sta line - jmp b1 - // main::@1 - b1: - // [6] if((byte) line#11<(byte) 8) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda line - cmp #8 - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) y#16 = (byte) y#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) idx#15 = (byte) idx#1 [phi:main::@1->main::@2#1] -- register_copy + // [5] phi (byte) x#17 = (byte) x#10 [phi:main::@1->main::@2#2] -- register_copy + // [5] phi (byte) line#15 = (byte) line#11 [phi:main::@1->main::@2#3] -- register_copy + jmp b2 // main::@2 b2: - // [8] (byte) x#1 ← ++ (byte) x#3 -- vbuz1=_inc_vbuz1 + // [6] (byte) x#1 ← ++ (byte) x#17 -- vbuz1=_inc_vbuz1 inc x - // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - b3_from_b2: - // [9] phi (byte) x#10 = (byte) x#1 [phi:main::@2->main::@3#0] -- register_copy - // [9] phi (byte) idx#11 = (byte) idx#12 [phi:main::@2->main::@3#1] -- register_copy - // [9] phi (byte) row#12 = (byte) 0 [phi:main::@2->main::@3#2] -- vbuyy=vbuc1 + // [7] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + b4_from_b2: + // [7] phi (byte) x#15 = (byte) x#1 [phi:main::@2->main::@4#0] -- register_copy + // [7] phi (byte) idx#14 = (byte) idx#15 [phi:main::@2->main::@4#1] -- register_copy + // [7] phi (byte) row#13 = (byte) 0 [phi:main::@2->main::@4#2] -- vbuyy=vbuc1 ldy #0 - jmp b3 - // main::@3 - b3: - // [10] if((byte) row#12<(byte) 8) goto main::@4 -- vbuyy_lt_vbuc1_then_la1 - cpy #8 - bcc b4 - jmp b5 - // main::@5 - b5: - // [11] (byte) y#1 ← (byte) y#12 + (const byte) YSPACE#0 -- vbuz1=vbuz1_plus_vbuc1 - lax y - axs #-[YSPACE] - stx y - // [12] (byte) line#2 ← ++ (byte) line#11 -- vbuz1=_inc_vbuz1 - inc line - // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] - b1_from_b5: - // [5] phi (byte) y#12 = (byte) y#1 [phi:main::@5->main::@1#0] -- register_copy - // [5] phi (byte) idx#12 = (byte) idx#11 [phi:main::@5->main::@1#1] -- register_copy - // [5] phi (byte) x#3 = (byte) x#10 [phi:main::@5->main::@1#2] -- register_copy - // [5] phi (byte) line#11 = (byte) line#2 [phi:main::@5->main::@1#3] -- register_copy - jmp b1 + jmp b4 + // [7] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + b4_from_b3: + // [7] phi (byte) x#15 = (byte) x#10 [phi:main::@3->main::@4#0] -- register_copy + // [7] phi (byte) idx#14 = (byte) idx#1 [phi:main::@3->main::@4#1] -- register_copy + // [7] phi (byte) row#13 = (byte) row#12 [phi:main::@3->main::@4#2] -- register_copy + jmp b4 // main::@4 b4: - // [13] (byte~) main::$3 ← (byte) idx#11 << (byte) 1 -- vbuxx=vbuz1_rol_1 + // [8] (byte~) main::$3 ← (byte) idx#14 << (byte) 1 -- vbuxx=vbuz1_rol_1 lda idx asl tax - // [14] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#12 -- pbuc1_derefidx_vbuxx=vbuz1 + // [9] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#16 -- pbuc1_derefidx_vbuxx=vbuz1 lda y sta p+OFFSET_STRUCT_POS_Y,x - // [15] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#10 -- pbuc1_derefidx_vbuxx=vbuz1 + // [10] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#15 -- pbuc1_derefidx_vbuxx=vbuz1 lda x sta p,x - // [16] (byte) idx#1 ← ++ (byte) idx#11 -- vbuz1=_inc_vbuz1 + // [11] (byte) idx#1 ← ++ (byte) idx#14 -- vbuz1=_inc_vbuz1 inc idx - // [17] (byte) x#2 ← (byte) x#10 + (const byte) XSPACE#0 -- vbuz1=vbuz1_plus_vbuc1 + // [12] (byte) x#10 ← (byte) x#15 + (const byte) XSPACE#0 -- vbuz1=vbuz1_plus_vbuc1 lax x axs #-[XSPACE] stx x - // [18] (byte) row#2 ← ++ (byte) row#12 -- vbuyy=_inc_vbuyy + // [13] (byte) row#12 ← ++ (byte) row#13 -- vbuyy=_inc_vbuyy iny - // [9] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - b3_from_b4: - // [9] phi (byte) x#10 = (byte) x#2 [phi:main::@4->main::@3#0] -- register_copy - // [9] phi (byte) idx#11 = (byte) idx#1 [phi:main::@4->main::@3#1] -- register_copy - // [9] phi (byte) row#12 = (byte) row#2 [phi:main::@4->main::@3#2] -- register_copy jmp b3 + // main::@3 + b3: + // [14] if((byte) row#12<(byte) 8) goto main::@4 -- vbuyy_lt_vbuc1_then_la1 + cpy #8 + bcc b4_from_b3 + jmp b5 + // main::@5 + b5: + // [15] (byte) y#1 ← (byte) y#16 + (const byte) YSPACE#0 -- vbuz1=vbuz1_plus_vbuc1 + lax y + axs #-[YSPACE] + stx y + // [16] (byte) line#11 ← ++ (byte) line#15 -- vbuz1=_inc_vbuz1 + inc line + jmp b1 + // main::@1 + b1: + // [17] if((byte) line#11<(byte) 8) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda line + cmp #8 + bcc b2_from_b1 + jmp breturn + // main::@return + breturn: + // [18] return + rts } // File Data p: .fill 2*$40, 0 @@ -750,31 +797,40 @@ main: { ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 -Removing instruction jmp breturn +Removing instruction jmp b2 +Removing instruction jmp b4 Removing instruction jmp b3 Removing instruction jmp b5 +Removing instruction jmp b1 +Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b4_from_b3 with b4 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: +Removing instruction b4_from_b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction breturn: -Removing instruction b3_from_b2: +Removing instruction b2_from_main: +Removing instruction b4_from_b2: +Removing instruction b3: Removing instruction b5: -Removing instruction b1_from_b5: -Removing instruction b3_from_b4: +Removing instruction b1: +Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Removing instruction jmp b4 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -788,12 +844,12 @@ FINAL SYMBOL TABLE (byte) YSPACE (const byte) YSPACE#0 YSPACE = (byte) $14 (byte) idx -(byte) idx#1 idx zp ZP_BYTE:4 67.33333333333333 -(byte) idx#11 idx zp ZP_BYTE:4 46.42857142857143 -(byte) idx#12 idx zp ZP_BYTE:4 7.333333333333333 +(byte) idx#1 idx zp ZP_BYTE:4 30.42857142857143 +(byte) idx#14 idx zp ZP_BYTE:4 78.5 +(byte) idx#15 idx zp ZP_BYTE:4 11.0 (byte) line -(byte) line#11 line zp ZP_BYTE:2 2.75 -(byte) line#2 line zp ZP_BYTE:2 22.0 +(byte) line#11 line zp ZP_BYTE:2 16.5 +(byte) line#15 line zp ZP_BYTE:2 2.0 (void()) main() (byte~) main::$3 reg byte x 151.5 (label) main::@1 @@ -807,27 +863,27 @@ FINAL SYMBOL TABLE (byte) pos::x (byte) pos::y (byte) row -(byte) row#12 reg byte y 43.285714285714285 -(byte) row#2 reg byte y 202.0 +(byte) row#12 reg byte y 151.5 +(byte) row#13 reg byte y 33.666666666666664 (byte) x -(byte) x#1 x zp ZP_BYTE:3 22.0 -(byte) x#10 x zp ZP_BYTE:3 40.625 -(byte) x#2 x zp ZP_BYTE:3 101.0 -(byte) x#3 x zp ZP_BYTE:3 11.0 +(byte) x#1 x zp ZP_BYTE:5 22.0 +(byte) x#10 x zp ZP_BYTE:5 35.5 +(byte) x#15 x zp ZP_BYTE:5 62.8 +(byte) x#17 x zp ZP_BYTE:5 22.0 (byte) y -(byte) y#1 y zp ZP_BYTE:5 11.0 -(byte) y#12 y zp ZP_BYTE:5 11.181818181818182 +(byte) y#1 y zp ZP_BYTE:3 7.333333333333333 +(byte) y#16 y zp ZP_BYTE:3 12.299999999999999 -zp ZP_BYTE:2 [ line#11 line#2 ] -zp ZP_BYTE:3 [ x#3 x#10 x#1 x#2 ] -zp ZP_BYTE:4 [ idx#12 idx#11 idx#1 ] -zp ZP_BYTE:5 [ y#12 y#1 ] -reg byte y [ row#12 row#2 ] +zp ZP_BYTE:2 [ line#15 line#11 ] +zp ZP_BYTE:3 [ y#16 y#1 ] +reg byte y [ row#13 row#12 ] +zp ZP_BYTE:4 [ idx#14 idx#15 idx#1 ] +zp ZP_BYTE:5 [ x#15 x#17 x#10 x#1 ] reg byte x [ main::$3 ] FINAL ASSEMBLER -Score: 5181 +Score: 4851 // File Comments // Example of structs that can be optimized by going planar @@ -840,9 +896,9 @@ Score: 5181 .const OFFSET_STRUCT_POS_Y = 1 .const XSPACE = $14 .const YSPACE = $14 - .label x = 3 + .label x = 5 .label idx = 4 - .label y = 5 + .label y = 3 .label line = 2 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] @@ -853,88 +909,82 @@ Score: 5181 // @end // main main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) y#12 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) y#16 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta y - // [5] phi (byte) idx#12 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) idx#15 = (byte) 0 [phi:main->main::@2#1] -- vbuz1=vbuc1 sta idx - // [5] phi (byte) x#3 = (byte) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 + // [5] phi (byte) x#17 = (byte) 0 [phi:main->main::@2#2] -- vbuz1=vbuc1 sta x - // [5] phi (byte) line#11 = (byte) 0 [phi:main->main::@1#3] -- vbuz1=vbuc1 + // [5] phi (byte) line#15 = (byte) 0 [phi:main->main::@2#3] -- vbuz1=vbuc1 sta line - // main::@1 - b1: + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) y#16 = (byte) y#1 [phi:main::@1->main::@2#0] -- register_copy + // [5] phi (byte) idx#15 = (byte) idx#1 [phi:main::@1->main::@2#1] -- register_copy + // [5] phi (byte) x#17 = (byte) x#10 [phi:main::@1->main::@2#2] -- register_copy + // [5] phi (byte) line#15 = (byte) line#11 [phi:main::@1->main::@2#3] -- register_copy + // main::@2 + b2: + // ++x; + // [6] (byte) x#1 ← ++ (byte) x#17 -- vbuz1=_inc_vbuz1 + inc x + // [7] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + // [7] phi (byte) x#15 = (byte) x#1 [phi:main::@2->main::@4#0] -- register_copy + // [7] phi (byte) idx#14 = (byte) idx#15 [phi:main::@2->main::@4#1] -- register_copy + // [7] phi (byte) row#13 = (byte) 0 [phi:main::@2->main::@4#2] -- vbuyy=vbuc1 + ldy #0 + // [7] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [7] phi (byte) x#15 = (byte) x#10 [phi:main::@3->main::@4#0] -- register_copy + // [7] phi (byte) idx#14 = (byte) idx#1 [phi:main::@3->main::@4#1] -- register_copy + // [7] phi (byte) row#13 = (byte) row#12 [phi:main::@3->main::@4#2] -- register_copy + // main::@4 + b4: + // p[idx].y=y + // [8] (byte~) main::$3 ← (byte) idx#14 << (byte) 1 -- vbuxx=vbuz1_rol_1 + lda idx + asl + tax + // [9] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#16 -- pbuc1_derefidx_vbuxx=vbuz1 + lda y + sta p+OFFSET_STRUCT_POS_Y,x + // p[idx].x=x + // [10] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#15 -- pbuc1_derefidx_vbuxx=vbuz1 + lda x + sta p,x + // ++idx; + // [11] (byte) idx#1 ← ++ (byte) idx#14 -- vbuz1=_inc_vbuz1 + inc idx + // x+=XSPACE + // [12] (byte) x#10 ← (byte) x#15 + (const byte) XSPACE#0 -- vbuz1=vbuz1_plus_vbuc1 + lax x + axs #-[XSPACE] + stx x + // for (row=0;row<8;++row) + // [13] (byte) row#12 ← ++ (byte) row#13 -- vbuyy=_inc_vbuyy + iny + // main::@3 + // [14] if((byte) row#12<(byte) 8) goto main::@4 -- vbuyy_lt_vbuc1_then_la1 + cpy #8 + bcc b4 + // main::@5 + // y+=YSPACE + // [15] (byte) y#1 ← (byte) y#16 + (const byte) YSPACE#0 -- vbuz1=vbuz1_plus_vbuc1 + lax y + axs #-[YSPACE] + stx y // for (line=0;line<8;++line) - // [6] if((byte) line#11<(byte) 8) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + // [16] (byte) line#11 ← ++ (byte) line#15 -- vbuz1=_inc_vbuz1 + inc line + // main::@1 + // [17] if((byte) line#11<(byte) 8) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 lda line cmp #8 bcc b2 // main::@return // } - // [7] return + // [18] return rts - // main::@2 - b2: - // ++x; - // [8] (byte) x#1 ← ++ (byte) x#3 -- vbuz1=_inc_vbuz1 - inc x - // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - // [9] phi (byte) x#10 = (byte) x#1 [phi:main::@2->main::@3#0] -- register_copy - // [9] phi (byte) idx#11 = (byte) idx#12 [phi:main::@2->main::@3#1] -- register_copy - // [9] phi (byte) row#12 = (byte) 0 [phi:main::@2->main::@3#2] -- vbuyy=vbuc1 - ldy #0 - // main::@3 - b3: - // for (row=0;row<8;++row) - // [10] if((byte) row#12<(byte) 8) goto main::@4 -- vbuyy_lt_vbuc1_then_la1 - cpy #8 - bcc b4 - // main::@5 - // y+=YSPACE - // [11] (byte) y#1 ← (byte) y#12 + (const byte) YSPACE#0 -- vbuz1=vbuz1_plus_vbuc1 - lax y - axs #-[YSPACE] - stx y - // for (line=0;line<8;++line) - // [12] (byte) line#2 ← ++ (byte) line#11 -- vbuz1=_inc_vbuz1 - inc line - // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] - // [5] phi (byte) y#12 = (byte) y#1 [phi:main::@5->main::@1#0] -- register_copy - // [5] phi (byte) idx#12 = (byte) idx#11 [phi:main::@5->main::@1#1] -- register_copy - // [5] phi (byte) x#3 = (byte) x#10 [phi:main::@5->main::@1#2] -- register_copy - // [5] phi (byte) line#11 = (byte) line#2 [phi:main::@5->main::@1#3] -- register_copy - jmp b1 - // main::@4 - b4: - // p[idx].y=y - // [13] (byte~) main::$3 ← (byte) idx#11 << (byte) 1 -- vbuxx=vbuz1_rol_1 - lda idx - asl - tax - // [14] *((byte*)(const struct pos[$40]) p#0+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$3) ← (byte) y#12 -- pbuc1_derefidx_vbuxx=vbuz1 - lda y - sta p+OFFSET_STRUCT_POS_Y,x - // p[idx].x=x - // [15] *((byte*)(const struct pos[$40]) p#0 + (byte~) main::$3) ← (byte) x#10 -- pbuc1_derefidx_vbuxx=vbuz1 - lda x - sta p,x - // ++idx; - // [16] (byte) idx#1 ← ++ (byte) idx#11 -- vbuz1=_inc_vbuz1 - inc idx - // x+=XSPACE - // [17] (byte) x#2 ← (byte) x#10 + (const byte) XSPACE#0 -- vbuz1=vbuz1_plus_vbuc1 - lax x - axs #-[XSPACE] - stx x - // for (row=0;row<8;++row) - // [18] (byte) row#2 ← ++ (byte) row#12 -- vbuyy=_inc_vbuyy - iny - // [9] phi from main::@4 to main::@3 [phi:main::@4->main::@3] - // [9] phi (byte) x#10 = (byte) x#2 [phi:main::@4->main::@3#0] -- register_copy - // [9] phi (byte) idx#11 = (byte) idx#1 [phi:main::@4->main::@3#1] -- register_copy - // [9] phi (byte) row#12 = (byte) row#2 [phi:main::@4->main::@3#2] -- register_copy - jmp b3 } // File Data p: .fill 2*$40, 0 diff --git a/src/test/ref/struct-pos-fill.sym b/src/test/ref/struct-pos-fill.sym index c6d8c47e3..07427c19c 100644 --- a/src/test/ref/struct-pos-fill.sym +++ b/src/test/ref/struct-pos-fill.sym @@ -7,12 +7,12 @@ (byte) YSPACE (const byte) YSPACE#0 YSPACE = (byte) $14 (byte) idx -(byte) idx#1 idx zp ZP_BYTE:4 67.33333333333333 -(byte) idx#11 idx zp ZP_BYTE:4 46.42857142857143 -(byte) idx#12 idx zp ZP_BYTE:4 7.333333333333333 +(byte) idx#1 idx zp ZP_BYTE:4 30.42857142857143 +(byte) idx#14 idx zp ZP_BYTE:4 78.5 +(byte) idx#15 idx zp ZP_BYTE:4 11.0 (byte) line -(byte) line#11 line zp ZP_BYTE:2 2.75 -(byte) line#2 line zp ZP_BYTE:2 22.0 +(byte) line#11 line zp ZP_BYTE:2 16.5 +(byte) line#15 line zp ZP_BYTE:2 2.0 (void()) main() (byte~) main::$3 reg byte x 151.5 (label) main::@1 @@ -26,20 +26,20 @@ (byte) pos::x (byte) pos::y (byte) row -(byte) row#12 reg byte y 43.285714285714285 -(byte) row#2 reg byte y 202.0 +(byte) row#12 reg byte y 151.5 +(byte) row#13 reg byte y 33.666666666666664 (byte) x -(byte) x#1 x zp ZP_BYTE:3 22.0 -(byte) x#10 x zp ZP_BYTE:3 40.625 -(byte) x#2 x zp ZP_BYTE:3 101.0 -(byte) x#3 x zp ZP_BYTE:3 11.0 +(byte) x#1 x zp ZP_BYTE:5 22.0 +(byte) x#10 x zp ZP_BYTE:5 35.5 +(byte) x#15 x zp ZP_BYTE:5 62.8 +(byte) x#17 x zp ZP_BYTE:5 22.0 (byte) y -(byte) y#1 y zp ZP_BYTE:5 11.0 -(byte) y#12 y zp ZP_BYTE:5 11.181818181818182 +(byte) y#1 y zp ZP_BYTE:3 7.333333333333333 +(byte) y#16 y zp ZP_BYTE:3 12.299999999999999 -zp ZP_BYTE:2 [ line#11 line#2 ] -zp ZP_BYTE:3 [ x#3 x#10 x#1 x#2 ] -zp ZP_BYTE:4 [ idx#12 idx#11 idx#1 ] -zp ZP_BYTE:5 [ y#12 y#1 ] -reg byte y [ row#12 row#2 ] +zp ZP_BYTE:2 [ line#15 line#11 ] +zp ZP_BYTE:3 [ y#16 y#1 ] +reg byte y [ row#13 row#12 ] +zp ZP_BYTE:4 [ idx#14 idx#15 idx#1 ] +zp ZP_BYTE:5 [ x#15 x#17 x#10 x#1 ] reg byte x [ main::$3 ] diff --git a/src/test/ref/struct-ptr-5.asm b/src/test/ref/struct-ptr-5.asm index 1be917e27..7bc8861eb 100644 --- a/src/test/ref/struct-ptr-5.asm +++ b/src/test/ref/struct-ptr-5.asm @@ -33,14 +33,6 @@ main: { sta entry lda #>ENTRIES sta entry+1 - b1: - lda entry+1 - cmp #>0 - bne b2 - lda entry - cmp #<0 - bne b2 - rts b2: lda #'0' clc @@ -67,5 +59,11 @@ main: { sta entry+1 pla sta entry - jmp b1 + lda entry+1 + cmp #>0 + bne b2 + lda entry + cmp #<0 + bne b2 + rts } diff --git a/src/test/ref/struct-ptr-5.cfg b/src/test/ref/struct-ptr-5.cfg index c4791dca3..de332e267 100644 --- a/src/test/ref/struct-ptr-5.cfg +++ b/src/test/ref/struct-ptr-5.cfg @@ -14,26 +14,26 @@ main: scope:[main] from @1 [7] *((byte*)(const struct Entry*) main::entry2#0) ← (byte) 2 [8] *((struct Entry**)(const struct Entry*) main::entry1#0+(const byte) OFFSET_STRUCT_ENTRY_NEXT) ← (struct Entry*) 0 [9] *((byte*)(const struct Entry*) main::entry1#0) ← (byte) 3 + to:main::@2 +main::@2: scope:[main] from main main::@1 + [10] (byte) main::idx#7 ← phi( main::@1/(byte) main::idx#4 main/(byte) 0 ) + [10] (struct Entry*) main::entry#4 ← phi( main::@1/(struct Entry*) main::entry#1 main/(const struct Entry*) ENTRIES#0 ) + [11] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#4) + [12] *((const byte*) main::SCREEN#0 + (byte) main::idx#7) ← (byte~) main::$2 + [13] (byte) main::idx#1 ← ++ (byte) main::idx#7 + [14] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) + [15] *((const byte*) main::SCREEN#0 + (byte) main::idx#1) ← (byte~) main::$3 + [16] (byte) main::idx#2 ← ++ (byte) main::idx#1 + [17] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) + [18] *((const byte*) main::SCREEN#0 + (byte) main::idx#2) ← (byte~) main::$4 + [19] (byte) main::idx#3 ← ++ (byte) main::idx#2 + [20] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' + [21] (byte) main::idx#4 ← ++ (byte) main::idx#3 + [22] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) to:main::@1 -main::@1: scope:[main] from main main::@2 - [10] (byte) main::idx#5 ← phi( main/(byte) 0 main::@2/(byte) main::idx#4 ) - [10] (struct Entry*) main::entry#2 ← phi( main/(const struct Entry*) ENTRIES#0 main::@2/(struct Entry*) main::entry#1 ) - [11] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#2) goto main::@2 +main::@1: scope:[main] from main::@2 + [23] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#1) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [12] return + [24] return to:@return -main::@2: scope:[main] from main::@1 - [13] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#2) - [14] *((const byte*) main::SCREEN#0 + (byte) main::idx#5) ← (byte~) main::$2 - [15] (byte) main::idx#1 ← ++ (byte) main::idx#5 - [16] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) - [17] *((const byte*) main::SCREEN#0 + (byte) main::idx#1) ← (byte~) main::$3 - [18] (byte) main::idx#2 ← ++ (byte) main::idx#1 - [19] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) - [20] *((const byte*) main::SCREEN#0 + (byte) main::idx#2) ← (byte~) main::$4 - [21] (byte) main::idx#3 ← ++ (byte) main::idx#2 - [22] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' - [23] (byte) main::idx#4 ← ++ (byte) main::idx#3 - [24] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) - to:main::@1 diff --git a/src/test/ref/struct-ptr-5.log b/src/test/ref/struct-ptr-5.log index 3d8fe3ee1..326fb14f4 100644 --- a/src/test/ref/struct-ptr-5.log +++ b/src/test/ref/struct-ptr-5.log @@ -228,6 +228,13 @@ Eliminating unused variable (struct Entry**) main::$15 and assignment [24] (stru Eliminating unused variable (struct Entry**) main::$16 and assignment [30] (struct Entry**) main::$16 ← (struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT Eliminating unused constant (const byte) OFFSET_STRUCT_ENTRY_VALUE Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (struct Entry*) main::entry#1 = (struct Entry*) main::entry#2 +Alias (byte) main::idx#4 = (byte) main::idx#5 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (struct Entry*) main::entry#5 (const struct Entry*) main::entry#0 +Identical Phi Values (byte) main::idx#8 (const byte) main::idx#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [0] (struct Entry*) main::entry1#0 ← (const struct Entry*) ENTRIES#0 + (const byte) main::$5 Constant right-side identified [1] (struct Entry*) main::entry2#0 ← (const struct Entry*) ENTRIES#0 + (const byte) main::$6 Successful SSA optimization Pass2ConstantRValueConsolidation @@ -239,6 +246,8 @@ Constant value identified (byte*)main::entry2#0 in [5] *((byte*)(const struct En Constant value identified (struct Entry**)main::entry1#0 in [6] *((struct Entry**)(const struct Entry*) main::entry1#0 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) ← (struct Entry*) 0 Constant value identified (byte*)main::entry1#0 in [7] *((byte*)(const struct Entry*) main::entry1#0) ← (byte) 3 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [27] if((struct Entry*)(word) 0!=(const struct Entry*) main::entry#0) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte) main::idx#0 Inlining constant with var siblings (const struct Entry*) main::entry#0 Constant inlined main::$5 = (byte) 1*(const byte) SIZEOF_STRUCT_ENTRY @@ -251,18 +260,22 @@ Consolidated array index constant in *((struct Entry**)ENTRIES#0+OFFSET_STRUCT_E Consolidated array index constant in *((struct Entry**)main::entry2#0+OFFSET_STRUCT_ENTRY_NEXT) Consolidated array index constant in *((struct Entry**)main::entry1#0+OFFSET_STRUCT_ENTRY_NEXT) Successful SSA optimization Pass2ConstantAdditionElimination +Added new block during phi lifting main::@7(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 Created 2 initial phi equivalence classes -Coalesced [26] main::entry#4 ← main::entry#1 -Coalesced [27] main::idx#7 ← main::idx#4 +Coalesced [27] main::entry#6 ← main::entry#1 +Coalesced [28] main::idx#9 ← main::idx#4 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -284,29 +297,29 @@ main: scope:[main] from @1 [7] *((byte*)(const struct Entry*) main::entry2#0) ← (byte) 2 [8] *((struct Entry**)(const struct Entry*) main::entry1#0+(const byte) OFFSET_STRUCT_ENTRY_NEXT) ← (struct Entry*) 0 [9] *((byte*)(const struct Entry*) main::entry1#0) ← (byte) 3 + to:main::@2 +main::@2: scope:[main] from main main::@1 + [10] (byte) main::idx#7 ← phi( main::@1/(byte) main::idx#4 main/(byte) 0 ) + [10] (struct Entry*) main::entry#4 ← phi( main::@1/(struct Entry*) main::entry#1 main/(const struct Entry*) ENTRIES#0 ) + [11] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#4) + [12] *((const byte*) main::SCREEN#0 + (byte) main::idx#7) ← (byte~) main::$2 + [13] (byte) main::idx#1 ← ++ (byte) main::idx#7 + [14] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) + [15] *((const byte*) main::SCREEN#0 + (byte) main::idx#1) ← (byte~) main::$3 + [16] (byte) main::idx#2 ← ++ (byte) main::idx#1 + [17] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) + [18] *((const byte*) main::SCREEN#0 + (byte) main::idx#2) ← (byte~) main::$4 + [19] (byte) main::idx#3 ← ++ (byte) main::idx#2 + [20] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' + [21] (byte) main::idx#4 ← ++ (byte) main::idx#3 + [22] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) to:main::@1 -main::@1: scope:[main] from main main::@2 - [10] (byte) main::idx#5 ← phi( main/(byte) 0 main::@2/(byte) main::idx#4 ) - [10] (struct Entry*) main::entry#2 ← phi( main/(const struct Entry*) ENTRIES#0 main::@2/(struct Entry*) main::entry#1 ) - [11] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#2) goto main::@2 +main::@1: scope:[main] from main::@2 + [23] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#1) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 - [12] return + [24] return to:@return -main::@2: scope:[main] from main::@1 - [13] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#2) - [14] *((const byte*) main::SCREEN#0 + (byte) main::idx#5) ← (byte~) main::$2 - [15] (byte) main::idx#1 ← ++ (byte) main::idx#5 - [16] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) - [17] *((const byte*) main::SCREEN#0 + (byte) main::idx#1) ← (byte~) main::$3 - [18] (byte) main::idx#2 ← ++ (byte) main::idx#1 - [19] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) - [20] *((const byte*) main::SCREEN#0 + (byte) main::idx#2) ← (byte~) main::$4 - [21] (byte) main::idx#3 ← ++ (byte) main::idx#2 - [22] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' - [23] (byte) main::idx#4 ← ++ (byte) main::idx#3 - [24] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) - to:main::@1 VARIABLE REGISTER WEIGHTS @@ -319,8 +332,8 @@ VARIABLE REGISTER WEIGHTS (byte~) main::$4 22.0 (byte*) main::SCREEN (struct Entry*) main::entry -(struct Entry*) main::entry#1 22.0 -(struct Entry*) main::entry#2 1.6923076923076923 +(struct Entry*) main::entry#1 16.5 +(struct Entry*) main::entry#4 0.9166666666666666 (struct Entry*) main::entry0 (struct Entry*) main::entry1 (struct Entry*) main::entry2 @@ -328,12 +341,12 @@ VARIABLE REGISTER WEIGHTS (byte) main::idx#1 11.0 (byte) main::idx#2 11.0 (byte) main::idx#3 16.5 -(byte) main::idx#4 11.0 -(byte) main::idx#5 8.25 +(byte) main::idx#4 7.333333333333333 +(byte) main::idx#7 11.0 Initial phi equivalence classes -[ main::entry#2 main::entry#1 ] -[ main::idx#5 main::idx#4 ] +[ main::entry#4 main::entry#1 ] +[ main::idx#7 main::idx#4 ] Added variable main::$2 to zero page equivalence class [ main::$2 ] Added variable main::idx#1 to zero page equivalence class [ main::idx#1 ] Added variable main::$3 to zero page equivalence class [ main::$3 ] @@ -341,16 +354,16 @@ Added variable main::idx#2 to zero page equivalence class [ main::idx#2 ] Added variable main::$4 to zero page equivalence class [ main::$4 ] Added variable main::idx#3 to zero page equivalence class [ main::idx#3 ] Complete equivalence classes -[ main::entry#2 main::entry#1 ] -[ main::idx#5 main::idx#4 ] +[ main::entry#4 main::entry#1 ] +[ main::idx#7 main::idx#4 ] [ main::$2 ] [ main::idx#1 ] [ main::$3 ] [ main::idx#2 ] [ main::$4 ] [ main::idx#3 ] -Allocated zp ZP_WORD:2 [ main::entry#2 main::entry#1 ] -Allocated zp ZP_BYTE:4 [ main::idx#5 main::idx#4 ] +Allocated zp ZP_WORD:2 [ main::entry#4 main::entry#1 ] +Allocated zp ZP_BYTE:4 [ main::idx#7 main::idx#4 ] Allocated zp ZP_BYTE:5 [ main::$2 ] Allocated zp ZP_BYTE:6 [ main::idx#1 ] Allocated zp ZP_BYTE:7 [ main::$3 ] @@ -398,7 +411,7 @@ main: { .label idx_3 = $a .label idx_4 = 4 .label entry = 2 - .label idx_5 = 4 + .label idx_7 = 4 // [4] *((struct Entry**)(const struct Entry*) ENTRIES#0+(const byte) OFFSET_STRUCT_ENTRY_NEXT) ← (const struct Entry*) main::entry2#0 -- _deref_pptc1=pssc2 lda #main::@1] - b1_from_main: - // [10] phi (byte) main::idx#5 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [10] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [10] phi (byte) main::idx#7 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 - sta idx_5 - // [10] phi (struct Entry*) main::entry#2 = (const struct Entry*) ENTRIES#0 [phi:main->main::@1#1] -- pssz1=pssc1 + sta idx_7 + // [10] phi (struct Entry*) main::entry#4 = (const struct Entry*) ENTRIES#0 [phi:main->main::@2#1] -- pssz1=pssc1 lda #ENTRIES sta entry+1 - jmp b1 - // main::@1 - b1: - // [11] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#2) goto main::@2 -- pssc1_neq_pssz1_then_la1 - lda entry+1 - cmp #>0 - bne b2 - lda entry - cmp #<0 - bne b2 - jmp breturn - // main::@return - breturn: - // [12] return - rts + jmp b2 + // [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [10] phi (byte) main::idx#7 = (byte) main::idx#4 [phi:main::@1->main::@2#0] -- register_copy + // [10] phi (struct Entry*) main::entry#4 = (struct Entry*) main::entry#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 // main::@2 b2: - // [13] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#2) -- vbuz1=vbuc1_plus__deref_pbuz2 + // [11] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#4) -- vbuz1=vbuc1_plus__deref_pbuz2 lda #'0' clc ldy #0 adc (entry),y sta _2 - // [14] *((const byte*) main::SCREEN#0 + (byte) main::idx#5) ← (byte~) main::$2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [12] *((const byte*) main::SCREEN#0 + (byte) main::idx#7) ← (byte~) main::$2 -- pbuc1_derefidx_vbuz1=vbuz2 lda _2 - ldy idx_5 + ldy idx_7 sta SCREEN,y - // [15] (byte) main::idx#1 ← ++ (byte) main::idx#5 -- vbuz1=_inc_vbuz2 - ldy idx_5 + // [13] (byte) main::idx#1 ← ++ (byte) main::idx#7 -- vbuz1=_inc_vbuz2 + ldy idx_7 iny sty idx - // [16] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- vbuz1=_lo_pptz2_derefidx_vbuc1 + // [14] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- vbuz1=_lo_pptz2_derefidx_vbuc1 ldy #OFFSET_STRUCT_ENTRY_NEXT lda (entry),y sta _3 - // [17] *((const byte*) main::SCREEN#0 + (byte) main::idx#1) ← (byte~) main::$3 -- pbuc1_derefidx_vbuz1=vbuz2 + // [15] *((const byte*) main::SCREEN#0 + (byte) main::idx#1) ← (byte~) main::$3 -- pbuc1_derefidx_vbuz1=vbuz2 lda _3 ldy idx sta SCREEN,y - // [18] (byte) main::idx#2 ← ++ (byte) main::idx#1 -- vbuz1=_inc_vbuz2 + // [16] (byte) main::idx#2 ← ++ (byte) main::idx#1 -- vbuz1=_inc_vbuz2 ldy idx iny sty idx_2 - // [19] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- vbuz1=_hi_pptz2_derefidx_vbuc1 + // [17] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- vbuz1=_hi_pptz2_derefidx_vbuc1 ldy #OFFSET_STRUCT_ENTRY_NEXT+1 lda (entry),y sta _4 - // [20] *((const byte*) main::SCREEN#0 + (byte) main::idx#2) ← (byte~) main::$4 -- pbuc1_derefidx_vbuz1=vbuz2 + // [18] *((const byte*) main::SCREEN#0 + (byte) main::idx#2) ← (byte~) main::$4 -- pbuc1_derefidx_vbuz1=vbuz2 lda _4 ldy idx_2 sta SCREEN,y - // [21] (byte) main::idx#3 ← ++ (byte) main::idx#2 -- vbuz1=_inc_vbuz2 + // [19] (byte) main::idx#3 ← ++ (byte) main::idx#2 -- vbuz1=_inc_vbuz2 ldy idx_2 iny sty idx_3 - // [22] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 + // [20] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 lda #' ' ldy idx_3 sta SCREEN,y - // [23] (byte) main::idx#4 ← ++ (byte) main::idx#3 -- vbuz1=_inc_vbuz2 + // [21] (byte) main::idx#4 ← ++ (byte) main::idx#3 -- vbuz1=_inc_vbuz2 ldy idx_3 iny sty idx_4 - // [24] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- pssz1=pptz1_derefidx_vbuc1 + // [22] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- pssz1=pptz1_derefidx_vbuc1 ldy #OFFSET_STRUCT_ENTRY_NEXT lda (entry),y pha @@ -505,11 +509,21 @@ main: { sta entry+1 pla sta entry - // [10] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [10] phi (byte) main::idx#5 = (byte) main::idx#4 [phi:main::@2->main::@1#0] -- register_copy - // [10] phi (struct Entry*) main::entry#2 = (struct Entry*) main::entry#1 [phi:main::@2->main::@1#1] -- register_copy jmp b1 + // main::@1 + b1: + // [23] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#1) goto main::@2 -- pssc1_neq_pssz1_then_la1 + lda entry+1 + cmp #>0 + bne b2_from_b1 + lda entry + cmp #<0 + bne b2_from_b1 + jmp breturn + // main::@return + breturn: + // [24] return + rts } // File Data @@ -520,33 +534,33 @@ Statement [6] *((struct Entry**)(const struct Entry*) main::entry2#0+(const byte Statement [7] *((byte*)(const struct Entry*) main::entry2#0) ← (byte) 2 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [8] *((struct Entry**)(const struct Entry*) main::entry1#0+(const byte) OFFSET_STRUCT_ENTRY_NEXT) ← (struct Entry*) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [9] *((byte*)(const struct Entry*) main::entry1#0) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [11] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#2) goto main::@2 [ main::entry#2 main::idx#5 ] ( main:2 [ main::entry#2 main::idx#5 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::idx#5 main::idx#4 ] -Statement [13] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#2) [ main::entry#2 main::idx#5 main::$2 ] ( main:2 [ main::entry#2 main::idx#5 main::$2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ main::idx#5 main::idx#4 ] -Statement [16] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) [ main::entry#2 main::idx#1 main::$3 ] ( main:2 [ main::entry#2 main::idx#1 main::$3 ] ) always clobbers reg byte a reg byte y +Statement [11] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#4) [ main::entry#4 main::idx#7 main::$2 ] ( main:2 [ main::entry#4 main::idx#7 main::$2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::idx#7 main::idx#4 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ main::idx#7 main::idx#4 ] +Statement [14] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) [ main::entry#4 main::idx#1 main::$3 ] ( main:2 [ main::entry#4 main::idx#1 main::$3 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::idx#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::idx#1 ] -Statement [19] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) [ main::entry#2 main::idx#2 main::$4 ] ( main:2 [ main::entry#2 main::idx#2 main::$4 ] ) always clobbers reg byte a reg byte y +Statement [17] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) [ main::entry#4 main::idx#2 main::$4 ] ( main:2 [ main::entry#4 main::idx#2 main::$4 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ main::idx#2 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:8 [ main::idx#2 ] -Statement [22] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' [ main::entry#2 main::idx#3 ] ( main:2 [ main::entry#2 main::idx#3 ] ) always clobbers reg byte a +Statement [20] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' [ main::entry#4 main::idx#3 ] ( main:2 [ main::entry#4 main::idx#3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ main::idx#3 ] -Statement [24] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) [ main::entry#1 main::idx#4 ] ( main:2 [ main::entry#1 main::idx#4 ] ) always clobbers reg byte a reg byte y +Statement [22] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) [ main::entry#1 main::idx#4 ] ( main:2 [ main::entry#1 main::idx#4 ] ) always clobbers reg byte a reg byte y +Statement [23] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#1) goto main::@2 [ main::entry#1 main::idx#4 ] ( main:2 [ main::entry#1 main::idx#4 ] ) always clobbers reg byte a Statement [4] *((struct Entry**)(const struct Entry*) ENTRIES#0+(const byte) OFFSET_STRUCT_ENTRY_NEXT) ← (const struct Entry*) main::entry2#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [5] *((byte*)(const struct Entry*) ENTRIES#0) ← (byte) 1 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((struct Entry**)(const struct Entry*) main::entry2#0+(const byte) OFFSET_STRUCT_ENTRY_NEXT) ← (const struct Entry*) main::entry1#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [7] *((byte*)(const struct Entry*) main::entry2#0) ← (byte) 2 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [8] *((struct Entry**)(const struct Entry*) main::entry1#0+(const byte) OFFSET_STRUCT_ENTRY_NEXT) ← (struct Entry*) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [9] *((byte*)(const struct Entry*) main::entry1#0) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [11] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#2) goto main::@2 [ main::entry#2 main::idx#5 ] ( main:2 [ main::entry#2 main::idx#5 ] ) always clobbers reg byte a -Statement [13] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#2) [ main::entry#2 main::idx#5 main::$2 ] ( main:2 [ main::entry#2 main::idx#5 main::$2 ] ) always clobbers reg byte a reg byte y -Statement [16] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) [ main::entry#2 main::idx#1 main::$3 ] ( main:2 [ main::entry#2 main::idx#1 main::$3 ] ) always clobbers reg byte a reg byte y -Statement [19] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) [ main::entry#2 main::idx#2 main::$4 ] ( main:2 [ main::entry#2 main::idx#2 main::$4 ] ) always clobbers reg byte a reg byte y -Statement [22] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' [ main::entry#2 main::idx#3 ] ( main:2 [ main::entry#2 main::idx#3 ] ) always clobbers reg byte a -Statement [24] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) [ main::entry#1 main::idx#4 ] ( main:2 [ main::entry#1 main::idx#4 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_WORD:2 [ main::entry#2 main::entry#1 ] : zp ZP_WORD:2 , -Potential registers zp ZP_BYTE:4 [ main::idx#5 main::idx#4 ] : zp ZP_BYTE:4 , reg byte x , +Statement [11] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#4) [ main::entry#4 main::idx#7 main::$2 ] ( main:2 [ main::entry#4 main::idx#7 main::$2 ] ) always clobbers reg byte a reg byte y +Statement [14] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) [ main::entry#4 main::idx#1 main::$3 ] ( main:2 [ main::entry#4 main::idx#1 main::$3 ] ) always clobbers reg byte a reg byte y +Statement [17] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) [ main::entry#4 main::idx#2 main::$4 ] ( main:2 [ main::entry#4 main::idx#2 main::$4 ] ) always clobbers reg byte a reg byte y +Statement [20] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' [ main::entry#4 main::idx#3 ] ( main:2 [ main::entry#4 main::idx#3 ] ) always clobbers reg byte a +Statement [22] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) [ main::entry#1 main::idx#4 ] ( main:2 [ main::entry#1 main::idx#4 ] ) always clobbers reg byte a reg byte y +Statement [23] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#1) goto main::@2 [ main::entry#1 main::idx#4 ] ( main:2 [ main::entry#1 main::idx#4 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ main::entry#4 main::entry#1 ] : zp ZP_WORD:2 , +Potential registers zp ZP_BYTE:4 [ main::idx#7 main::idx#4 ] : zp ZP_BYTE:4 , reg byte x , Potential registers zp ZP_BYTE:5 [ main::$2 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:6 [ main::idx#1 ] : zp ZP_BYTE:6 , reg byte x , Potential registers zp ZP_BYTE:7 [ main::$3 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , @@ -555,20 +569,20 @@ Potential registers zp ZP_BYTE:9 [ main::$4 ] : zp ZP_BYTE:9 , reg byte a , reg Potential registers zp ZP_BYTE:10 [ main::idx#3 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 23.69: zp ZP_WORD:2 [ main::entry#2 main::entry#1 ] 22: zp ZP_BYTE:5 [ main::$2 ] 22: zp ZP_BYTE:7 [ main::$3 ] 22: zp ZP_BYTE:9 [ main::$4 ] 19.25: zp ZP_BYTE:4 [ main::idx#5 main::idx#4 ] 16.5: zp ZP_BYTE:10 [ main::idx#3 ] 11: zp ZP_BYTE:6 [ main::idx#1 ] 11: zp ZP_BYTE:8 [ main::idx#2 ] +Uplift Scope [main] 22: zp ZP_BYTE:5 [ main::$2 ] 22: zp ZP_BYTE:7 [ main::$3 ] 22: zp ZP_BYTE:9 [ main::$4 ] 18.33: zp ZP_BYTE:4 [ main::idx#7 main::idx#4 ] 17.42: zp ZP_WORD:2 [ main::entry#4 main::entry#1 ] 16.5: zp ZP_BYTE:10 [ main::idx#3 ] 11: zp ZP_BYTE:6 [ main::idx#1 ] 11: zp ZP_BYTE:8 [ main::idx#2 ] Uplift Scope [Entry] Uplift Scope [] -Uplifting [main] best 1547 combination zp ZP_WORD:2 [ main::entry#2 main::entry#1 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] reg byte a [ main::$4 ] reg byte x [ main::idx#5 main::idx#4 ] zp ZP_BYTE:10 [ main::idx#3 ] zp ZP_BYTE:6 [ main::idx#1 ] zp ZP_BYTE:8 [ main::idx#2 ] +Uplifting [main] best 1577 combination reg byte a [ main::$2 ] reg byte a [ main::$3 ] reg byte a [ main::$4 ] reg byte x [ main::idx#7 main::idx#4 ] zp ZP_WORD:2 [ main::entry#4 main::entry#1 ] zp ZP_BYTE:10 [ main::idx#3 ] zp ZP_BYTE:6 [ main::idx#1 ] zp ZP_BYTE:8 [ main::idx#2 ] Limited combination testing to 100 combinations of 1536 possible. -Uplifting [Entry] best 1547 combination -Uplifting [] best 1547 combination +Uplifting [Entry] best 1577 combination +Uplifting [] best 1577 combination Attempting to uplift remaining variables inzp ZP_BYTE:10 [ main::idx#3 ] -Uplifting [main] best 1457 combination reg byte x [ main::idx#3 ] +Uplifting [main] best 1487 combination reg byte x [ main::idx#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::idx#1 ] -Uplifting [main] best 1367 combination reg byte x [ main::idx#1 ] +Uplifting [main] best 1397 combination reg byte x [ main::idx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:8 [ main::idx#2 ] -Uplifting [main] best 1277 combination reg byte x [ main::idx#2 ] +Uplifting [main] best 1307 combination reg byte x [ main::idx#2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -626,61 +640,52 @@ main: { // [9] *((byte*)(const struct Entry*) main::entry1#0) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 sta entry1 - // [10] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [10] phi (byte) main::idx#5 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [10] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [10] phi (byte) main::idx#7 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // [10] phi (struct Entry*) main::entry#2 = (const struct Entry*) ENTRIES#0 [phi:main->main::@1#1] -- pssz1=pssc1 + // [10] phi (struct Entry*) main::entry#4 = (const struct Entry*) ENTRIES#0 [phi:main->main::@2#1] -- pssz1=pssc1 lda #ENTRIES sta entry+1 - jmp b1 - // main::@1 - b1: - // [11] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#2) goto main::@2 -- pssc1_neq_pssz1_then_la1 - lda entry+1 - cmp #>0 - bne b2 - lda entry - cmp #<0 - bne b2 - jmp breturn - // main::@return - breturn: - // [12] return - rts + jmp b2 + // [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [10] phi (byte) main::idx#7 = (byte) main::idx#4 [phi:main::@1->main::@2#0] -- register_copy + // [10] phi (struct Entry*) main::entry#4 = (struct Entry*) main::entry#1 [phi:main::@1->main::@2#1] -- register_copy + jmp b2 // main::@2 b2: - // [13] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#2) -- vbuaa=vbuc1_plus__deref_pbuz1 + // [11] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#4) -- vbuaa=vbuc1_plus__deref_pbuz1 lda #'0' clc ldy #0 adc (entry),y - // [14] *((const byte*) main::SCREEN#0 + (byte) main::idx#5) ← (byte~) main::$2 -- pbuc1_derefidx_vbuxx=vbuaa + // [12] *((const byte*) main::SCREEN#0 + (byte) main::idx#7) ← (byte~) main::$2 -- pbuc1_derefidx_vbuxx=vbuaa sta SCREEN,x - // [15] (byte) main::idx#1 ← ++ (byte) main::idx#5 -- vbuxx=_inc_vbuxx + // [13] (byte) main::idx#1 ← ++ (byte) main::idx#7 -- vbuxx=_inc_vbuxx inx - // [16] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- vbuaa=_lo_pptz1_derefidx_vbuc1 + // [14] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- vbuaa=_lo_pptz1_derefidx_vbuc1 ldy #OFFSET_STRUCT_ENTRY_NEXT lda (entry),y - // [17] *((const byte*) main::SCREEN#0 + (byte) main::idx#1) ← (byte~) main::$3 -- pbuc1_derefidx_vbuxx=vbuaa + // [15] *((const byte*) main::SCREEN#0 + (byte) main::idx#1) ← (byte~) main::$3 -- pbuc1_derefidx_vbuxx=vbuaa sta SCREEN,x - // [18] (byte) main::idx#2 ← ++ (byte) main::idx#1 -- vbuxx=_inc_vbuxx + // [16] (byte) main::idx#2 ← ++ (byte) main::idx#1 -- vbuxx=_inc_vbuxx inx - // [19] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- vbuaa=_hi_pptz1_derefidx_vbuc1 + // [17] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- vbuaa=_hi_pptz1_derefidx_vbuc1 ldy #OFFSET_STRUCT_ENTRY_NEXT+1 lda (entry),y - // [20] *((const byte*) main::SCREEN#0 + (byte) main::idx#2) ← (byte~) main::$4 -- pbuc1_derefidx_vbuxx=vbuaa + // [18] *((const byte*) main::SCREEN#0 + (byte) main::idx#2) ← (byte~) main::$4 -- pbuc1_derefidx_vbuxx=vbuaa sta SCREEN,x - // [21] (byte) main::idx#3 ← ++ (byte) main::idx#2 -- vbuxx=_inc_vbuxx + // [19] (byte) main::idx#3 ← ++ (byte) main::idx#2 -- vbuxx=_inc_vbuxx inx - // [22] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 + // [20] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 lda #' ' sta SCREEN,x - // [23] (byte) main::idx#4 ← ++ (byte) main::idx#3 -- vbuxx=_inc_vbuxx + // [21] (byte) main::idx#4 ← ++ (byte) main::idx#3 -- vbuxx=_inc_vbuxx inx - // [24] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- pssz1=pptz1_derefidx_vbuc1 + // [22] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- pssz1=pptz1_derefidx_vbuc1 ldy #OFFSET_STRUCT_ENTRY_NEXT lda (entry),y pha @@ -689,34 +694,50 @@ main: { sta entry+1 pla sta entry - // [10] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [10] phi (byte) main::idx#5 = (byte) main::idx#4 [phi:main::@2->main::@1#0] -- register_copy - // [10] phi (struct Entry*) main::entry#2 = (struct Entry*) main::entry#1 [phi:main::@2->main::@1#1] -- register_copy jmp b1 + // main::@1 + b1: + // [23] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#1) goto main::@2 -- pssc1_neq_pssz1_then_la1 + lda entry+1 + cmp #>0 + bne b2_from_b1 + lda entry + cmp #<0 + bne b2_from_b1 + jmp breturn + // main::@return + breturn: + // [24] return + rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -740,8 +761,8 @@ FINAL SYMBOL TABLE (byte*) main::SCREEN (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (struct Entry*) main::entry -(struct Entry*) main::entry#1 entry zp ZP_WORD:2 22.0 -(struct Entry*) main::entry#2 entry zp ZP_WORD:2 1.6923076923076923 +(struct Entry*) main::entry#1 entry zp ZP_WORD:2 16.5 +(struct Entry*) main::entry#4 entry zp ZP_WORD:2 0.9166666666666666 (struct Entry*) main::entry0 (struct Entry*) main::entry1 (const struct Entry*) main::entry1#0 entry1 = (const struct Entry*) ENTRIES#0+(byte) 1*(const byte) SIZEOF_STRUCT_ENTRY @@ -751,11 +772,11 @@ FINAL SYMBOL TABLE (byte) main::idx#1 reg byte x 11.0 (byte) main::idx#2 reg byte x 11.0 (byte) main::idx#3 reg byte x 16.5 -(byte) main::idx#4 reg byte x 11.0 -(byte) main::idx#5 reg byte x 8.25 +(byte) main::idx#4 reg byte x 7.333333333333333 +(byte) main::idx#7 reg byte x 11.0 -zp ZP_WORD:2 [ main::entry#2 main::entry#1 ] -reg byte x [ main::idx#5 main::idx#4 ] +zp ZP_WORD:2 [ main::entry#4 main::entry#1 ] +reg byte x [ main::idx#7 main::idx#4 ] reg byte a [ main::$2 ] reg byte x [ main::idx#1 ] reg byte a [ main::$3 ] @@ -765,7 +786,7 @@ reg byte x [ main::idx#3 ] FINAL ASSEMBLER -Score: 1203 +Score: 1173 // File Comments // Minimal struct - simple linked list implemented using pointers @@ -819,71 +840,60 @@ main: { // [9] *((byte*)(const struct Entry*) main::entry1#0) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 sta entry1 - // [10] phi from main to main::@1 [phi:main->main::@1] - // [10] phi (byte) main::idx#5 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [10] phi from main to main::@2 [phi:main->main::@2] + // [10] phi (byte) main::idx#7 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // [10] phi (struct Entry*) main::entry#2 = (const struct Entry*) ENTRIES#0 [phi:main->main::@1#1] -- pssz1=pssc1 + // [10] phi (struct Entry*) main::entry#4 = (const struct Entry*) ENTRIES#0 [phi:main->main::@2#1] -- pssz1=pssc1 lda #ENTRIES sta entry+1 - // main::@1 - b1: - // while(entry) - // [11] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#2) goto main::@2 -- pssc1_neq_pssz1_then_la1 - lda entry+1 - cmp #>0 - bne b2 - lda entry - cmp #<0 - bne b2 - // main::@return - // } - // [12] return - rts + // [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [10] phi (byte) main::idx#7 = (byte) main::idx#4 [phi:main::@1->main::@2#0] -- register_copy + // [10] phi (struct Entry*) main::entry#4 = (struct Entry*) main::entry#1 [phi:main::@1->main::@2#1] -- register_copy // main::@2 b2: // '0'+entry->value - // [13] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#2) -- vbuaa=vbuc1_plus__deref_pbuz1 + // [11] (byte~) main::$2 ← (byte) '0' + *((byte*)(struct Entry*) main::entry#4) -- vbuaa=vbuc1_plus__deref_pbuz1 lda #'0' clc ldy #0 adc (entry),y // SCREEN[idx++] = '0'+entry->value - // [14] *((const byte*) main::SCREEN#0 + (byte) main::idx#5) ← (byte~) main::$2 -- pbuc1_derefidx_vbuxx=vbuaa + // [12] *((const byte*) main::SCREEN#0 + (byte) main::idx#7) ← (byte~) main::$2 -- pbuc1_derefidx_vbuxx=vbuaa sta SCREEN,x // SCREEN[idx++] = '0'+entry->value; - // [15] (byte) main::idx#1 ← ++ (byte) main::idx#5 -- vbuxx=_inc_vbuxx + // [13] (byte) main::idx#1 ← ++ (byte) main::idx#7 -- vbuxx=_inc_vbuxx inx // next - // [16] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- vbuaa=_lo_pptz1_derefidx_vbuc1 + // [14] (byte~) main::$3 ← < *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- vbuaa=_lo_pptz1_derefidx_vbuc1 ldy #OFFSET_STRUCT_ENTRY_NEXT lda (entry),y // SCREEN[idx++] = next - // [17] *((const byte*) main::SCREEN#0 + (byte) main::idx#1) ← (byte~) main::$3 -- pbuc1_derefidx_vbuxx=vbuaa + // [15] *((const byte*) main::SCREEN#0 + (byte) main::idx#1) ← (byte~) main::$3 -- pbuc1_derefidx_vbuxx=vbuaa sta SCREEN,x // SCREEN[idx++] = next; - // [18] (byte) main::idx#2 ← ++ (byte) main::idx#1 -- vbuxx=_inc_vbuxx + // [16] (byte) main::idx#2 ← ++ (byte) main::idx#1 -- vbuxx=_inc_vbuxx inx // >entry->next - // [19] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- vbuaa=_hi_pptz1_derefidx_vbuc1 + // [17] (byte~) main::$4 ← > *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- vbuaa=_hi_pptz1_derefidx_vbuc1 ldy #OFFSET_STRUCT_ENTRY_NEXT+1 lda (entry),y // SCREEN[idx++] = >entry->next - // [20] *((const byte*) main::SCREEN#0 + (byte) main::idx#2) ← (byte~) main::$4 -- pbuc1_derefidx_vbuxx=vbuaa + // [18] *((const byte*) main::SCREEN#0 + (byte) main::idx#2) ← (byte~) main::$4 -- pbuc1_derefidx_vbuxx=vbuaa sta SCREEN,x // SCREEN[idx++] = >entry->next; - // [21] (byte) main::idx#3 ← ++ (byte) main::idx#2 -- vbuxx=_inc_vbuxx + // [19] (byte) main::idx#3 ← ++ (byte) main::idx#2 -- vbuxx=_inc_vbuxx inx // SCREEN[idx++] = ' ' - // [22] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 + // [20] *((const byte*) main::SCREEN#0 + (byte) main::idx#3) ← (byte) ' ' -- pbuc1_derefidx_vbuxx=vbuc2 lda #' ' sta SCREEN,x // SCREEN[idx++] = ' '; - // [23] (byte) main::idx#4 ← ++ (byte) main::idx#3 -- vbuxx=_inc_vbuxx + // [21] (byte) main::idx#4 ← ++ (byte) main::idx#3 -- vbuxx=_inc_vbuxx inx // entry = entry->next - // [24] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#2 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- pssz1=pptz1_derefidx_vbuc1 + // [22] (struct Entry*) main::entry#1 ← *((struct Entry**)(struct Entry*) main::entry#4 + (const byte) OFFSET_STRUCT_ENTRY_NEXT) -- pssz1=pptz1_derefidx_vbuc1 ldy #OFFSET_STRUCT_ENTRY_NEXT lda (entry),y pha @@ -892,10 +902,19 @@ main: { sta entry+1 pla sta entry - // [10] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [10] phi (byte) main::idx#5 = (byte) main::idx#4 [phi:main::@2->main::@1#0] -- register_copy - // [10] phi (struct Entry*) main::entry#2 = (struct Entry*) main::entry#1 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 + // main::@1 + // while(entry) + // [23] if((struct Entry*)(word) 0!=(struct Entry*) main::entry#1) goto main::@2 -- pssc1_neq_pssz1_then_la1 + lda entry+1 + cmp #>0 + bne b2 + lda entry + cmp #<0 + bne b2 + // main::@return + // } + // [24] return + rts } // File Data diff --git a/src/test/ref/struct-ptr-5.sym b/src/test/ref/struct-ptr-5.sym index 9d6b2adb9..7b72e51a8 100644 --- a/src/test/ref/struct-ptr-5.sym +++ b/src/test/ref/struct-ptr-5.sym @@ -17,8 +17,8 @@ (byte*) main::SCREEN (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (struct Entry*) main::entry -(struct Entry*) main::entry#1 entry zp ZP_WORD:2 22.0 -(struct Entry*) main::entry#2 entry zp ZP_WORD:2 1.6923076923076923 +(struct Entry*) main::entry#1 entry zp ZP_WORD:2 16.5 +(struct Entry*) main::entry#4 entry zp ZP_WORD:2 0.9166666666666666 (struct Entry*) main::entry0 (struct Entry*) main::entry1 (const struct Entry*) main::entry1#0 entry1 = (const struct Entry*) ENTRIES#0+(byte) 1*(const byte) SIZEOF_STRUCT_ENTRY @@ -28,11 +28,11 @@ (byte) main::idx#1 reg byte x 11.0 (byte) main::idx#2 reg byte x 11.0 (byte) main::idx#3 reg byte x 16.5 -(byte) main::idx#4 reg byte x 11.0 -(byte) main::idx#5 reg byte x 8.25 +(byte) main::idx#4 reg byte x 7.333333333333333 +(byte) main::idx#7 reg byte x 11.0 -zp ZP_WORD:2 [ main::entry#2 main::entry#1 ] -reg byte x [ main::idx#5 main::idx#4 ] +zp ZP_WORD:2 [ main::entry#4 main::entry#1 ] +reg byte x [ main::idx#7 main::idx#4 ] reg byte a [ main::$2 ] reg byte x [ main::idx#1 ] reg byte a [ main::$3 ] diff --git a/src/test/ref/ternary-1.asm b/src/test/ref/ternary-1.asm index 3fb22b231..1d4c56829 100644 --- a/src/test/ref/ternary-1.asm +++ b/src/test/ref/ternary-1.asm @@ -5,11 +5,6 @@ main: { .label SCREEN = $400 ldx #0 - b1: - cpx #5 - bcc b2 - lda #'b' - jmp b3 b2: lda #'a' b3: @@ -18,4 +13,9 @@ main: { cpx #$a bne b1 rts + b1: + cpx #5 + bcc b2 + lda #'b' + jmp b3 } diff --git a/src/test/ref/ternary-1.cfg b/src/test/ref/ternary-1.cfg index e09d5adcf..4519d8f3c 100644 --- a/src/test/ref/ternary-1.cfg +++ b/src/test/ref/ternary-1.cfg @@ -9,20 +9,20 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@3 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@3/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) 5) goto main::@2 - to:main::@3 -main::@2: scope:[main] from main::@1 - [7] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#7 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@2 - [8] (byte~) main::$3 ← phi( main::@2/(byte) 'a' main::@1/(byte) 'b' ) - [9] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte~) main::$3 - [10] (byte) main::i#1 ← ++ (byte) main::i#2 - [11] if((byte) main::i#1!=(byte) $a) goto main::@1 + [6] (byte) main::i#6 ← phi( main::@2/(byte) main::i#7 main::@1/(byte) main::i#1 ) + [6] (byte~) main::$3 ← phi( main::@2/(byte) 'a' main::@1/(byte) 'b' ) + [7] *((const byte*) main::SCREEN#0 + (byte) main::i#6) ← (byte~) main::$3 + [8] (byte) main::i#1 ← ++ (byte) main::i#6 + [9] if((byte) main::i#1!=(byte) $a) goto main::@1 to:main::@return main::@return: scope:[main] from main::@3 - [12] return + [10] return to:@return +main::@1: scope:[main] from main::@3 + [11] if((byte) main::i#1<(byte) 5) goto main::@2 + to:main::@3 diff --git a/src/test/ref/ternary-1.log b/src/test/ref/ternary-1.log index f9e3a9eb3..c0f11ef45 100644 --- a/src/test/ref/ternary-1.log +++ b/src/test/ref/ternary-1.log @@ -89,32 +89,44 @@ Constant (const byte) main::$1 = 'b' Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [11] main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value [13] if(main::i#1!=rangelast(0,9)) goto main::@1 to (number) $a +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $a in if((byte) main::i#1!=(number) $a) goto main::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast $a Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $a Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#9 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (main::@1_1) in block main::@3 +if() condition always true - replacing block destination [11] if((const byte) main::i#0<(byte) 5) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Alias (byte) main::i#1 = (byte) main::i#8 +Successful SSA optimization Pass2AliasElimination Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::$1 = (byte) 'b' Constant inlined main::i#0 = (byte) 0 Constant inlined main::$2 = (byte) 'a' Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@8(between main::@4 and main::@1) +Added new block during phi lifting main::@8(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@3 -Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 -Created 2 initial phi equivalence classes -Coalesced [14] main::i#6 ← main::i#1 +Created 3 initial phi equivalence classes +Coalesced [8] main::i#11 ← main::i#7 +Coalesced [15] main::i#12 ← main::i#1 +Coalesced (already) [16] main::i#10 ← main::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@8 Renumbering block main::@4 to main::@3 @@ -122,7 +134,6 @@ Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@2 FINAL CONTROL FLOW GRAPH @begin: scope:[] from @@ -136,41 +147,42 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@3 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@3/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) 5) goto main::@2 - to:main::@3 -main::@2: scope:[main] from main::@1 - [7] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#7 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@2 - [8] (byte~) main::$3 ← phi( main::@2/(byte) 'a' main::@1/(byte) 'b' ) - [9] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte~) main::$3 - [10] (byte) main::i#1 ← ++ (byte) main::i#2 - [11] if((byte) main::i#1!=(byte) $a) goto main::@1 + [6] (byte) main::i#6 ← phi( main::@2/(byte) main::i#7 main::@1/(byte) main::i#1 ) + [6] (byte~) main::$3 ← phi( main::@2/(byte) 'a' main::@1/(byte) 'b' ) + [7] *((const byte*) main::SCREEN#0 + (byte) main::i#6) ← (byte~) main::$3 + [8] (byte) main::i#1 ← ++ (byte) main::i#6 + [9] if((byte) main::i#1!=(byte) $a) goto main::@1 to:main::@return main::@return: scope:[main] from main::@3 - [12] return + [10] return to:@return +main::@1: scope:[main] from main::@3 + [11] if((byte) main::i#1<(byte) 5) goto main::@2 + to:main::@3 VARIABLE REGISTER WEIGHTS (void()) main() -(byte~) main::$3 11.0 +(byte~) main::$3 101.0 (byte*) main::SCREEN (byte) main::i -(byte) main::i#1 16.5 -(byte) main::i#2 8.8 +(byte) main::i#1 168.33333333333331 +(byte) main::i#6 157.0 +(byte) main::i#7 112.0 Initial phi equivalence classes -[ main::i#2 main::i#1 ] [ main::$3 ] +[ main::i#6 main::i#7 main::i#1 ] Complete equivalence classes -[ main::i#2 main::i#1 ] [ main::$3 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::$3 ] +[ main::i#6 main::i#7 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::$3 ] +Allocated zp ZP_BYTE:3 [ main::i#6 main::i#7 main::i#1 ] INITIAL ASM Target platform is c64basic @@ -200,71 +212,70 @@ bend: // main main: { .label SCREEN = $400 - .label _3 = 3 - .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + .label _3 = 2 + .label i = 3 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#7 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - b1_from_b3: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@1#0] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) 5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #5 - bcc b2_from_b1 - // [8] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b3_from_b1: - // [8] phi (byte~) main::$3 = (byte) 'b' [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 - lda #'b' - sta _3 - jmp b3 - // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: + // [5] phi (byte) main::i#7 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] b3_from_b2: - // [8] phi (byte~) main::$3 = (byte) 'a' [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 + // [6] phi (byte) main::i#6 = (byte) main::i#7 [phi:main::@2->main::@3#0] -- register_copy + // [6] phi (byte~) main::$3 = (byte) 'a' [phi:main::@2->main::@3#1] -- vbuz1=vbuc1 lda #'a' sta _3 jmp b3 // main::@3 b3: - // [9] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte~) main::$3 -- pbuc1_derefidx_vbuz1=vbuz2 + // [7] *((const byte*) main::SCREEN#0 + (byte) main::i#6) ← (byte~) main::$3 -- pbuc1_derefidx_vbuz1=vbuz2 lda _3 ldy i sta SCREEN,y - // [10] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [8] (byte) main::i#1 ← ++ (byte) main::i#6 -- vbuz1=_inc_vbuz1 inc i - // [11] if((byte) main::i#1!=(byte) $a) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + // [9] if((byte) main::i#1!=(byte) $a) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$a cmp i - bne b1_from_b3 + bne b1 jmp breturn // main::@return breturn: - // [12] return + // [10] return rts + // main::@1 + b1: + // [11] if((byte) main::i#1<(byte) 5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #5 + bcc b2_from_b1 + // [6] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + // [6] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@1->main::@3#0] -- register_copy + // [6] phi (byte~) main::$3 = (byte) 'b' [phi:main::@1->main::@3#1] -- vbuz1=vbuc1 + lda #'b' + sta _3 + jmp b3 } // File Data 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::$3 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::$3 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::i#6 main::i#7 main::i#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 25.3: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 11: zp ZP_BYTE:3 [ main::$3 ] +Uplift Scope [main] 437.33: zp ZP_BYTE:3 [ main::i#6 main::i#7 main::i#1 ] 101: zp ZP_BYTE:2 [ main::$3 ] Uplift Scope [] -Uplifting [main] best 418 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$3 ] -Uplifting [] best 418 combination +Uplifting [main] best 2998 combination reg byte x [ main::i#6 main::i#7 main::i#1 ] reg byte a [ main::$3 ] +Uplifting [] best 2998 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -293,79 +304,75 @@ bend: // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#7 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - b1_from_b3: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@1#0] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) 5) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #5 - bcc b2_from_b1 - // [8] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b3_from_b1: - // [8] phi (byte~) main::$3 = (byte) 'b' [phi:main::@1->main::@3#0] -- vbuaa=vbuc1 - lda #'b' - jmp b3 - // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: + // [5] phi (byte) main::i#7 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] b3_from_b2: - // [8] phi (byte~) main::$3 = (byte) 'a' [phi:main::@2->main::@3#0] -- vbuaa=vbuc1 + // [6] phi (byte) main::i#6 = (byte) main::i#7 [phi:main::@2->main::@3#0] -- register_copy + // [6] phi (byte~) main::$3 = (byte) 'a' [phi:main::@2->main::@3#1] -- vbuaa=vbuc1 lda #'a' jmp b3 // main::@3 b3: - // [9] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte~) main::$3 -- pbuc1_derefidx_vbuxx=vbuaa + // [7] *((const byte*) main::SCREEN#0 + (byte) main::i#6) ← (byte~) main::$3 -- pbuc1_derefidx_vbuxx=vbuaa sta SCREEN,x - // [10] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [8] (byte) main::i#1 ← ++ (byte) main::i#6 -- vbuxx=_inc_vbuxx inx - // [11] if((byte) main::i#1!=(byte) $a) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + // [9] if((byte) main::i#1!=(byte) $a) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$a - bne b1_from_b3 + bne b1 jmp breturn // main::@return breturn: - // [12] return + // [10] return rts + // main::@1 + b1: + // [11] if((byte) main::i#1<(byte) 5) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #5 + bcc b2_from_b1 + // [6] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + // [6] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@1->main::@3#0] -- register_copy + // [6] phi (byte~) main::$3 = (byte) 'b' [phi:main::@1->main::@3#1] -- vbuaa=vbuc1 + lda #'b' + jmp b3 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Replacing label b2_from_b1 with b2 -Replacing label b1_from_b3 with b1 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b1_from_b3: Removing instruction b2_from_b1: Removing instruction b3_from_b2: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b3_from_b1: +Removing instruction b2_from_main: Removing instruction breturn: +Removing instruction b3_from_b1: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Removing instruction jmp b1 +Removing instruction jmp b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -375,7 +382,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (void()) main() -(byte~) main::$3 reg byte a 11.0 +(byte~) main::$3 reg byte a 101.0 (label) main::@1 (label) main::@2 (label) main::@3 @@ -383,15 +390,16 @@ FINAL SYMBOL TABLE (byte*) main::SCREEN (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 8.8 +(byte) main::i#1 reg byte x 168.33333333333331 +(byte) main::i#6 reg byte x 157.0 +(byte) main::i#7 reg byte x 112.0 -reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$3 ] +reg byte x [ main::i#6 main::i#7 main::i#1 ] FINAL ASSEMBLER -Score: 256 +Score: 2326 // File Comments // Tests the ternary operator @@ -410,42 +418,43 @@ Score: 256 // main main: { .label SCREEN = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::i#7 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@1#0] -- register_copy - // main::@1 - b1: - // i<5?'a':'b' - // [6] if((byte) main::i#2<(byte) 5) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #5 - bcc b2 - // [8] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - // [8] phi (byte~) main::$3 = (byte) 'b' [phi:main::@1->main::@3#0] -- vbuaa=vbuc1 - lda #'b' - jmp b3 - // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::i#7 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy // main::@2 b2: - // [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - // [8] phi (byte~) main::$3 = (byte) 'a' [phi:main::@2->main::@3#0] -- vbuaa=vbuc1 + // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [6] phi (byte) main::i#6 = (byte) main::i#7 [phi:main::@2->main::@3#0] -- register_copy + // [6] phi (byte~) main::$3 = (byte) 'a' [phi:main::@2->main::@3#1] -- vbuaa=vbuc1 lda #'a' // main::@3 b3: // SCREEN[i] = i<5?'a':'b' - // [9] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← (byte~) main::$3 -- pbuc1_derefidx_vbuxx=vbuaa + // [7] *((const byte*) main::SCREEN#0 + (byte) main::i#6) ← (byte~) main::$3 -- pbuc1_derefidx_vbuxx=vbuaa sta SCREEN,x // for( byte i: 0..9) - // [10] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [8] (byte) main::i#1 ← ++ (byte) main::i#6 -- vbuxx=_inc_vbuxx inx - // [11] if((byte) main::i#1!=(byte) $a) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + // [9] if((byte) main::i#1!=(byte) $a) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$a bne b1 // main::@return // } - // [12] return + // [10] return rts + // main::@1 + b1: + // i<5?'a':'b' + // [11] if((byte) main::i#1<(byte) 5) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #5 + bcc b2 + // [6] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [6] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@1->main::@3#0] -- register_copy + // [6] phi (byte~) main::$3 = (byte) 'b' [phi:main::@1->main::@3#1] -- vbuaa=vbuc1 + lda #'b' + jmp b3 } // File Data diff --git a/src/test/ref/ternary-1.sym b/src/test/ref/ternary-1.sym index 2949ea515..c624b19d5 100644 --- a/src/test/ref/ternary-1.sym +++ b/src/test/ref/ternary-1.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (void()) main() -(byte~) main::$3 reg byte a 11.0 +(byte~) main::$3 reg byte a 101.0 (label) main::@1 (label) main::@2 (label) main::@3 @@ -10,8 +10,9 @@ (byte*) main::SCREEN (const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 8.8 +(byte) main::i#1 reg byte x 168.33333333333331 +(byte) main::i#6 reg byte x 157.0 +(byte) main::i#7 reg byte x 112.0 -reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$3 ] +reg byte x [ main::i#6 main::i#7 main::i#1 ] diff --git a/src/test/ref/ternary-inference.asm b/src/test/ref/ternary-inference.asm index 90df7b35e..874b75b14 100644 --- a/src/test/ref/ternary-inference.asm +++ b/src/test/ref/ternary-inference.asm @@ -5,11 +5,6 @@ main: { .label screen = $400 ldx #0 - b1: - cpx #5 - bcc b2 - lda #'0' - jmp b3 b2: lda #$57 b3: @@ -21,4 +16,9 @@ main: { cpx #$b bne b1 rts + b1: + cpx #5 + bcc b2 + lda #'0' + jmp b3 } diff --git a/src/test/ref/ternary-inference.cfg b/src/test/ref/ternary-inference.cfg index 87fb263b1..e62d5acd4 100644 --- a/src/test/ref/ternary-inference.cfg +++ b/src/test/ref/ternary-inference.cfg @@ -9,21 +9,21 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@3 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@3/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) 5) goto main::@2 - to:main::@3 -main::@2: scope:[main] from main::@1 - [7] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#7 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@2 - [8] (byte~) main::$3 ← phi( main::@2/(byte) $57 main::@1/(byte) '0' ) - [9] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#2 - [10] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$4 - [11] (byte) main::i#1 ← ++ (byte) main::i#2 - [12] if((byte) main::i#1!=(byte) $b) goto main::@1 + [6] (byte) main::i#6 ← phi( main::@2/(byte) main::i#7 main::@1/(byte) main::i#1 ) + [6] (byte~) main::$3 ← phi( main::@2/(byte) $57 main::@1/(byte) '0' ) + [7] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#6 + [8] *((const byte*) main::screen#0 + (byte) main::i#6) ← (byte~) main::$4 + [9] (byte) main::i#1 ← ++ (byte) main::i#6 + [10] if((byte) main::i#1!=(byte) $b) goto main::@1 to:main::@return main::@return: scope:[main] from main::@3 - [13] return + [11] return to:@return +main::@1: scope:[main] from main::@3 + [12] if((byte) main::i#1<(byte) 5) goto main::@2 + to:main::@3 diff --git a/src/test/ref/ternary-inference.log b/src/test/ref/ternary-inference.log index 1853aeaac..79e1a2929 100644 --- a/src/test/ref/ternary-inference.log +++ b/src/test/ref/ternary-inference.log @@ -105,32 +105,44 @@ Constant (const byte) main::$1 = '0' Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [12] main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value [14] if(main::i#1!=rangelast(0,$a)) goto main::@1 to (number) $b +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $b in if((byte) main::i#1!=(number) $b) goto main::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast $b Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $b Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#9 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Removing PHI-reference to removed block (main::@1_1) in block main::@3 +if() condition always true - replacing block destination [12] if((const byte) main::i#0<(byte) 5) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Alias (byte) main::i#1 = (byte) main::i#8 +Successful SSA optimization Pass2AliasElimination Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::$1 = (byte) '0' Constant inlined main::i#0 = (byte) 0 Constant inlined main::$2 = (byte) $57 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@8(between main::@4 and main::@1) +Added new block during phi lifting main::@8(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@3 -Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@1_1 CALL GRAPH Calls in [] to main:2 -Created 2 initial phi equivalence classes -Coalesced [15] main::i#6 ← main::i#1 +Created 3 initial phi equivalence classes +Coalesced [8] main::i#11 ← main::i#7 +Coalesced [16] main::i#12 ← main::i#1 +Coalesced (already) [17] main::i#10 ← main::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@8 Renumbering block main::@4 to main::@3 @@ -138,7 +150,6 @@ Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@2 FINAL CONTROL FLOW GRAPH @begin: scope:[] from @@ -152,45 +163,46 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@3 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@3/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) 5) goto main::@2 - to:main::@3 -main::@2: scope:[main] from main::@1 - [7] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::i#7 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@2 - [8] (byte~) main::$3 ← phi( main::@2/(byte) $57 main::@1/(byte) '0' ) - [9] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#2 - [10] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$4 - [11] (byte) main::i#1 ← ++ (byte) main::i#2 - [12] if((byte) main::i#1!=(byte) $b) goto main::@1 + [6] (byte) main::i#6 ← phi( main::@2/(byte) main::i#7 main::@1/(byte) main::i#1 ) + [6] (byte~) main::$3 ← phi( main::@2/(byte) $57 main::@1/(byte) '0' ) + [7] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#6 + [8] *((const byte*) main::screen#0 + (byte) main::i#6) ← (byte~) main::$4 + [9] (byte) main::i#1 ← ++ (byte) main::i#6 + [10] if((byte) main::i#1!=(byte) $b) goto main::@1 to:main::@return main::@return: scope:[main] from main::@3 - [13] return + [11] return to:@return +main::@1: scope:[main] from main::@3 + [12] if((byte) main::i#1<(byte) 5) goto main::@2 + to:main::@3 VARIABLE REGISTER WEIGHTS (void()) main() -(byte~) main::$3 11.0 -(byte~) main::$4 22.0 +(byte~) main::$3 101.0 +(byte~) main::$4 202.0 (byte) main::i -(byte) main::i#1 16.5 -(byte) main::i#2 9.166666666666666 +(byte) main::i#1 168.33333333333331 +(byte) main::i#6 138.33333333333331 +(byte) main::i#7 112.0 (byte*) main::screen Initial phi equivalence classes -[ main::i#2 main::i#1 ] [ main::$3 ] +[ main::i#6 main::i#7 main::i#1 ] Added variable main::$4 to zero page equivalence class [ main::$4 ] Complete equivalence classes -[ main::i#2 main::i#1 ] [ main::$3 ] +[ main::i#6 main::i#7 main::i#1 ] [ main::$4 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::$3 ] +Allocated zp ZP_BYTE:2 [ main::$3 ] +Allocated zp ZP_BYTE:3 [ main::i#6 main::i#7 main::i#1 ] Allocated zp ZP_BYTE:4 [ main::$4 ] INITIAL ASM @@ -221,81 +233,80 @@ bend: // main main: { .label screen = $400 - .label _3 = 3 + .label _3 = 2 .label _4 = 4 - .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + .label i = 3 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#7 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - b1_from_b3: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@1#0] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) 5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #5 - bcc b2_from_b1 - // [8] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b3_from_b1: - // [8] phi (byte~) main::$3 = (byte) '0' [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 - lda #'0' - sta _3 - jmp b3 - // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: + // [5] phi (byte) main::i#7 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] b3_from_b2: - // [8] phi (byte~) main::$3 = (byte) $57 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 + // [6] phi (byte) main::i#6 = (byte) main::i#7 [phi:main::@2->main::@3#0] -- register_copy + // [6] phi (byte~) main::$3 = (byte) $57 [phi:main::@2->main::@3#1] -- vbuz1=vbuc1 lda #$57 sta _3 jmp b3 // main::@3 b3: - // [9] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 + // [7] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#6 -- vbuz1=vbuz2_plus_vbuz3 lda _3 clc adc i sta _4 - // [10] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$4 -- pbuc1_derefidx_vbuz1=vbuz2 + // [8] *((const byte*) main::screen#0 + (byte) main::i#6) ← (byte~) main::$4 -- pbuc1_derefidx_vbuz1=vbuz2 lda _4 ldy i sta screen,y - // [11] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [9] (byte) main::i#1 ← ++ (byte) main::i#6 -- vbuz1=_inc_vbuz1 inc i - // [12] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + // [10] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$b cmp i - bne b1_from_b3 + bne b1 jmp breturn // main::@return breturn: - // [13] return + // [11] return rts + // main::@1 + b1: + // [12] if((byte) main::i#1<(byte) 5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #5 + bcc b2_from_b1 + // [6] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + // [6] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@1->main::@3#0] -- register_copy + // [6] phi (byte~) main::$3 = (byte) '0' [phi:main::@1->main::@3#1] -- vbuz1=vbuc1 + lda #'0' + sta _3 + jmp b3 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [9] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#2 [ main::i#2 main::$4 ] ( main:2 [ main::i#2 main::$4 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Statement [9] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#2 [ main::i#2 main::$4 ] ( main:2 [ main::i#2 main::$4 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ main::$3 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Statement [7] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#6 [ main::i#6 main::$4 ] ( main:2 [ main::i#6 main::$4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::i#6 main::i#7 main::i#1 ] +Statement [7] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#6 [ main::i#6 main::$4 ] ( main:2 [ main::i#6 main::$4 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::$3 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::i#6 main::i#7 main::i#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:4 [ main::$4 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 25.67: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:4 [ main::$4 ] 11: zp ZP_BYTE:3 [ main::$3 ] +Uplift Scope [main] 418.67: zp ZP_BYTE:3 [ main::i#6 main::i#7 main::i#1 ] 202: zp ZP_BYTE:4 [ main::$4 ] 101: zp ZP_BYTE:2 [ main::$3 ] Uplift Scope [] -Uplifting [main] best 498 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$4 ] reg byte a [ main::$3 ] -Uplifting [] best 498 combination +Uplifting [main] best 3798 combination reg byte x [ main::i#6 main::i#7 main::i#1 ] reg byte a [ main::$4 ] reg byte a [ main::$3 ] +Uplifting [] best 3798 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -324,83 +335,79 @@ bend: // main main: { .label screen = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::i#7 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - jmp b1 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - b1_from_b3: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@1#0] -- register_copy - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) 5) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #5 - bcc b2_from_b1 - // [8] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - b3_from_b1: - // [8] phi (byte~) main::$3 = (byte) '0' [phi:main::@1->main::@3#0] -- vbuaa=vbuc1 - lda #'0' - jmp b3 - // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: + // [5] phi (byte) main::i#7 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy jmp b2 // main::@2 b2: - // [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] b3_from_b2: - // [8] phi (byte~) main::$3 = (byte) $57 [phi:main::@2->main::@3#0] -- vbuaa=vbuc1 + // [6] phi (byte) main::i#6 = (byte) main::i#7 [phi:main::@2->main::@3#0] -- register_copy + // [6] phi (byte~) main::$3 = (byte) $57 [phi:main::@2->main::@3#1] -- vbuaa=vbuc1 lda #$57 jmp b3 // main::@3 b3: - // [9] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuxx + // [7] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#6 -- vbuaa=vbuaa_plus_vbuxx stx $ff clc adc $ff - // [10] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$4 -- pbuc1_derefidx_vbuxx=vbuaa + // [8] *((const byte*) main::screen#0 + (byte) main::i#6) ← (byte~) main::$4 -- pbuc1_derefidx_vbuxx=vbuaa sta screen,x - // [11] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [9] (byte) main::i#1 ← ++ (byte) main::i#6 -- vbuxx=_inc_vbuxx inx - // [12] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + // [10] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$b - bne b1_from_b3 + bne b1 jmp breturn // main::@return breturn: - // [13] return + // [11] return rts + // main::@1 + b1: + // [12] if((byte) main::i#1<(byte) 5) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #5 + bcc b2_from_b1 + // [6] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + // [6] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@1->main::@3#0] -- register_copy + // [6] phi (byte~) main::$3 = (byte) '0' [phi:main::@1->main::@3#1] -- vbuaa=vbuc1 + lda #'0' + jmp b3 } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Replacing label b2_from_b1 with b2 -Replacing label b1_from_b3 with b1 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b1_from_b3: Removing instruction b2_from_b1: Removing instruction b3_from_b2: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b3_from_b1: +Removing instruction b2_from_main: Removing instruction breturn: +Removing instruction b3_from_b1: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Removing instruction jmp b1 +Removing instruction jmp b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -410,25 +417,26 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (void()) main() -(byte~) main::$3 reg byte a 11.0 -(byte~) main::$4 reg byte a 22.0 +(byte~) main::$3 reg byte a 101.0 +(byte~) main::$4 reg byte a 202.0 (label) main::@1 (label) main::@2 (label) main::@3 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 9.166666666666666 +(byte) main::i#1 reg byte x 168.33333333333331 +(byte) main::i#6 reg byte x 138.33333333333331 +(byte) main::i#7 reg byte x 112.0 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$3 ] +reg byte x [ main::i#6 main::i#7 main::i#1 ] reg byte a [ main::$4 ] FINAL ASSEMBLER -Score: 336 +Score: 3126 // File Comments // Type inference into the ternary operator @@ -447,47 +455,48 @@ Score: 336 // main main: { .label screen = $400 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::i#7 = (byte) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@1#0] -- register_copy - // main::@1 - b1: - // i<5?0x57:'0' - // [6] if((byte) main::i#2<(byte) 5) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #5 - bcc b2 - // [8] phi from main::@1 to main::@3 [phi:main::@1->main::@3] - // [8] phi (byte~) main::$3 = (byte) '0' [phi:main::@1->main::@3#0] -- vbuaa=vbuc1 - lda #'0' - jmp b3 - // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::i#7 = (byte) main::i#1 [phi:main::@1->main::@2#0] -- register_copy // main::@2 b2: - // [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - // [8] phi (byte~) main::$3 = (byte) $57 [phi:main::@2->main::@3#0] -- vbuaa=vbuc1 + // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [6] phi (byte) main::i#6 = (byte) main::i#7 [phi:main::@2->main::@3#0] -- register_copy + // [6] phi (byte~) main::$3 = (byte) $57 [phi:main::@2->main::@3#1] -- vbuaa=vbuc1 lda #$57 // main::@3 b3: // (i<5?0x57:'0')+i - // [9] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuxx + // [7] (byte~) main::$4 ← (byte~) main::$3 + (byte) main::i#6 -- vbuaa=vbuaa_plus_vbuxx stx $ff clc adc $ff // screen[i] = (i<5?0x57:'0')+i - // [10] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$4 -- pbuc1_derefidx_vbuxx=vbuaa + // [8] *((const byte*) main::screen#0 + (byte) main::i#6) ← (byte~) main::$4 -- pbuc1_derefidx_vbuxx=vbuaa sta screen,x // for(byte i: 0..10) - // [11] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [9] (byte) main::i#1 ← ++ (byte) main::i#6 -- vbuxx=_inc_vbuxx inx - // [12] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + // [10] if((byte) main::i#1!=(byte) $b) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$b bne b1 // main::@return // } - // [13] return + // [11] return rts + // main::@1 + b1: + // i<5?0x57:'0' + // [12] if((byte) main::i#1<(byte) 5) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #5 + bcc b2 + // [6] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [6] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@1->main::@3#0] -- register_copy + // [6] phi (byte~) main::$3 = (byte) '0' [phi:main::@1->main::@3#1] -- vbuaa=vbuc1 + lda #'0' + jmp b3 } // File Data diff --git a/src/test/ref/ternary-inference.sym b/src/test/ref/ternary-inference.sym index fc7afc695..bb32d290d 100644 --- a/src/test/ref/ternary-inference.sym +++ b/src/test/ref/ternary-inference.sym @@ -2,18 +2,19 @@ (label) @begin (label) @end (void()) main() -(byte~) main::$3 reg byte a 11.0 -(byte~) main::$4 reg byte a 22.0 +(byte~) main::$3 reg byte a 101.0 +(byte~) main::$4 reg byte a 202.0 (label) main::@1 (label) main::@2 (label) main::@3 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 9.166666666666666 +(byte) main::i#1 reg byte x 168.33333333333331 +(byte) main::i#6 reg byte x 138.33333333333331 +(byte) main::i#7 reg byte x 112.0 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$3 ] +reg byte x [ main::i#6 main::i#7 main::i#1 ] reg byte a [ main::$4 ] diff --git a/src/test/ref/test-comparisons-sword.asm b/src/test/ref/test-comparisons-sword.asm index 9f9ad530a..bce00ba68 100644 --- a/src/test/ref/test-comparisons-sword.asm +++ b/src/test/ref/test-comparisons-sword.asm @@ -396,14 +396,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [116] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [116] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [116] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [117] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [116] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [119] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [117] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [120] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [118] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [116] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [116] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [119] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #> (byte) 4 [ p Statement [101] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#15 print_byte::$2 ] ( main:2::compare:16::print_sword:50::print_word:87::print_byte:93 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#10 compare::r#10 print_word::w#0 print_char_cursor#15 print_byte::$2 ] main:2::compare:16::print_sword:58::print_word:87::print_byte:93 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_word::w#0 print_char_cursor#15 print_byte::$2 ] main:2::compare:16::print_sword:50::print_word:87::print_byte:95 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#10 compare::r#10 print_char_cursor#15 print_byte::$2 ] main:2::compare:16::print_sword:58::print_word:87::print_byte:95 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_char_cursor#15 print_byte::$2 ] ) always clobbers reg byte a Statement [107] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:52 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [109] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:52 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y -Statement [117] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:113 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [119] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:113 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [117] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:113 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [119] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:113 [ memset::dst#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , Potential registers zp ZP_BYTE:3 [ main::j#2 main::j#1 ] : zp ZP_BYTE:3 , reg byte x , Potential registers zp ZP_BYTE:4 [ main::op#2 main::op#1 ] : zp ZP_BYTE:4 , reg byte x , @@ -3405,7 +3417,7 @@ Potential registers zp ZP_WORD:12 [ print_char_cursor#45 print_char_cursor#74 pr Potential registers zp ZP_WORD:14 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] : zp ZP_WORD:14 , Potential registers zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:16 , reg byte x , Potential registers zp ZP_WORD:17 [ print_str::str#2 print_str::str#1 print_str::str#0 ] : zp ZP_WORD:17 , -Potential registers zp ZP_WORD:19 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:19 , +Potential registers zp ZP_WORD:19 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:19 , Potential registers zp ZP_BYTE:21 [ main::$8 ] : zp ZP_BYTE:21 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:22 [ main::w1#0 ] : zp ZP_WORD:22 , Potential registers zp ZP_BYTE:24 [ main::$9 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , @@ -3422,7 +3434,7 @@ Uplift Scope [] 27,162.22: zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor# Uplift Scope [print_str] 30,005.5: zp ZP_WORD:17 [ print_str::str#2 print_str::str#1 print_str::str#0 ] Uplift Scope [main] 2,302.43: zp ZP_BYTE:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] 1,774.5: zp ZP_BYTE:4 [ main::op#2 main::op#1 ] 202: zp ZP_BYTE:24 [ main::$9 ] 170.44: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] 78.71: zp ZP_WORD:25 [ main::w2#0 ] 53.26: zp ZP_WORD:22 [ main::w1#0 ] 22: zp ZP_BYTE:21 [ main::$8 ] 18.07: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplift Scope [compare] 168.83: zp ZP_BYTE:31 [ compare::op#0 ] 31.78: zp ZP_WORD:27 [ compare::w1#0 ] 26.08: zp ZP_WORD:29 [ compare::w2#0 ] 12.93: zp ZP_BYTE:10 [ compare::r#10 compare::r#17 compare::r#18 compare::r#19 compare::r#20 compare::r#21 compare::r#22 ] 0.29: zp ZP_WORD:8 [ compare::ops#10 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:19 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [memset] 33: zp ZP_WORD:19 [ memset::dst#4 memset::dst#1 ] Uplift Scope [print_char] 20: zp ZP_BYTE:11 [ print_char::ch#7 print_char::ch#5 print_char::ch#2 print_char::ch#3 ] Uplift Scope [print_byte] 10: zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:34 [ print_byte::$0 ] 4: zp ZP_BYTE:35 [ print_byte::$2 ] Uplift Scope [print_sword] 17.67: zp ZP_WORD:14 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] @@ -3431,41 +3443,41 @@ Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] -Uplifting [] best 1156413 combination zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] zp ZP_WORD:12 [ print_char_cursor#45 print_char_cursor#74 print_char_cursor#2 print_char_cursor#73 print_char_cursor#70 print_char_cursor#78 print_char_cursor#83 print_char_cursor#79 print_char_cursor#15 print_char_cursor#128 print_char_cursor#62 print_char_cursor#1 ] -Uplifting [print_str] best 1156413 combination zp ZP_WORD:17 [ print_str::str#2 print_str::str#1 print_str::str#0 ] -Uplifting [main] best 1143973 combination zp ZP_BYTE:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] reg byte x [ main::op#2 main::op#1 ] reg byte a [ main::$9 ] zp ZP_BYTE:3 [ main::j#2 main::j#1 ] zp ZP_WORD:25 [ main::w2#0 ] zp ZP_WORD:22 [ main::w1#0 ] reg byte a [ main::$8 ] zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplifting [] best 1156443 combination zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] zp ZP_WORD:12 [ print_char_cursor#45 print_char_cursor#74 print_char_cursor#2 print_char_cursor#73 print_char_cursor#70 print_char_cursor#78 print_char_cursor#83 print_char_cursor#79 print_char_cursor#15 print_char_cursor#128 print_char_cursor#62 print_char_cursor#1 ] +Uplifting [print_str] best 1156443 combination zp ZP_WORD:17 [ print_str::str#2 print_str::str#1 print_str::str#0 ] +Uplifting [main] best 1144003 combination zp ZP_BYTE:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] reg byte x [ main::op#2 main::op#1 ] reg byte a [ main::$9 ] zp ZP_BYTE:3 [ main::j#2 main::j#1 ] zp ZP_WORD:25 [ main::w2#0 ] zp ZP_WORD:22 [ main::w1#0 ] reg byte a [ main::$8 ] zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [compare] best 1140955 combination reg byte x [ compare::op#0 ] zp ZP_WORD:27 [ compare::w1#0 ] zp ZP_WORD:29 [ compare::w2#0 ] zp ZP_BYTE:10 [ compare::r#10 compare::r#17 compare::r#18 compare::r#19 compare::r#20 compare::r#21 compare::r#22 ] zp ZP_WORD:8 [ compare::ops#10 ] -Uplifting [memset] best 1140955 combination zp ZP_WORD:19 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_char] best 1140931 combination reg byte a [ print_char::ch#7 print_char::ch#5 print_char::ch#2 print_char::ch#3 ] -Uplifting [print_byte] best 1140923 combination zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] -Uplifting [print_sword] best 1140923 combination zp ZP_WORD:14 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] -Uplifting [print_word] best 1140923 combination zp ZP_WORD:32 [ print_word::w#0 ] -Uplifting [RADIX] best 1140923 combination -Uplifting [print_ln] best 1140923 combination -Uplifting [print_cls] best 1140923 combination +Uplifting [compare] best 1140985 combination reg byte x [ compare::op#0 ] zp ZP_WORD:27 [ compare::w1#0 ] zp ZP_WORD:29 [ compare::w2#0 ] zp ZP_BYTE:10 [ compare::r#10 compare::r#17 compare::r#18 compare::r#19 compare::r#20 compare::r#21 compare::r#22 ] zp ZP_WORD:8 [ compare::ops#10 ] +Uplifting [memset] best 1140985 combination zp ZP_WORD:19 [ memset::dst#4 memset::dst#1 ] +Uplifting [print_char] best 1140961 combination reg byte a [ print_char::ch#7 print_char::ch#5 print_char::ch#2 print_char::ch#3 ] +Uplifting [print_byte] best 1140953 combination zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [print_sword] best 1140953 combination zp ZP_WORD:14 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] +Uplifting [print_word] best 1140953 combination zp ZP_WORD:32 [ print_word::w#0 ] +Uplifting [RADIX] best 1140953 combination +Uplifting [print_ln] best 1140953 combination +Uplifting [print_cls] best 1140953 combination Attempting to uplift remaining variables inzp ZP_BYTE:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] -Uplifting [main] best 1140923 combination zp ZP_BYTE:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] +Uplifting [main] best 1140953 combination zp ZP_BYTE:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::j#2 main::j#1 ] -Uplifting [main] best 1140923 combination zp ZP_BYTE:3 [ main::j#2 main::j#1 ] +Uplifting [main] best 1140953 combination zp ZP_BYTE:3 [ main::j#2 main::j#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Uplifting [main] best 1140923 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplifting [main] best 1140953 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:10 [ compare::r#10 compare::r#17 compare::r#18 compare::r#19 compare::r#20 compare::r#21 compare::r#22 ] -Uplifting [compare] best 1140923 combination zp ZP_BYTE:10 [ compare::r#10 compare::r#17 compare::r#18 compare::r#19 compare::r#20 compare::r#21 compare::r#22 ] +Uplifting [compare] best 1140953 combination zp ZP_BYTE:10 [ compare::r#10 compare::r#17 compare::r#18 compare::r#19 compare::r#20 compare::r#21 compare::r#22 ] Attempting to uplift remaining variables inzp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Uplifting [print_byte] best 1140923 combination zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Uplifting [print_byte] best 1140953 combination zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Coalescing zero page register [ zp ZP_WORD:8 [ compare::ops#10 ] ] with [ zp ZP_WORD:17 [ print_str::str#2 print_str::str#1 print_str::str#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:14 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] ] with [ zp ZP_WORD:27 [ compare::w1#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:14 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 compare::w1#0 ] ] with [ zp ZP_WORD:32 [ print_word::w#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:25 [ main::w2#0 ] ] with [ zp ZP_WORD:29 [ compare::w2#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:19 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] ] +Coalescing zero page register [ zp ZP_WORD:19 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] ] Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] Allocated (was zp ZP_WORD:8) zp ZP_WORD:5 [ compare::ops#10 print_str::str#2 print_str::str#1 print_str::str#0 ] Allocated (was zp ZP_BYTE:10) zp ZP_BYTE:7 [ compare::r#10 compare::r#17 compare::r#18 compare::r#19 compare::r#20 compare::r#21 compare::r#22 ] Allocated (was zp ZP_WORD:12) zp ZP_WORD:8 [ print_char_cursor#45 print_char_cursor#74 print_char_cursor#2 print_char_cursor#73 print_char_cursor#70 print_char_cursor#78 print_char_cursor#83 print_char_cursor#79 print_char_cursor#15 print_char_cursor#128 print_char_cursor#62 print_char_cursor#1 ] Allocated (was zp ZP_WORD:14) zp ZP_WORD:10 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 compare::w1#0 print_word::w#0 ] Allocated (was zp ZP_BYTE:16) zp ZP_BYTE:12 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Allocated (was zp ZP_WORD:19) zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] +Allocated (was zp ZP_WORD:19) zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] Allocated (was zp ZP_WORD:22) zp ZP_WORD:15 [ main::w1#0 ] Allocated (was zp ZP_WORD:25) zp ZP_WORD:17 [ main::w2#0 compare::w2#0 ] @@ -4311,43 +4323,44 @@ memset: { .label str = $400 .label end = str+num .label dst = $d - // [116] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [116] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [116] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [116] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [117] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [116] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [119] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [117] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [120] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [118] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [116] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [116] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [119] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [116] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [116] phi from memset to memset::@2 [phi:memset->memset::@2] + // [116] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [116] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [116] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [117] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [117] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [118] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [119] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -5538,24 +5569,8 @@ memset: { bne b2 // memset::@return // } - // [118] return + // [120] return rts - // memset::@2 - b2: - // *dst = c - // [119] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [120] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [116] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [116] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/test-comparisons-sword.sym b/src/test/ref/test-comparisons-sword.sym index 026060f4c..1d0e257f6 100644 --- a/src/test/ref/test-comparisons-sword.sym +++ b/src/test/ref/test-comparisons-sword.sym @@ -115,8 +115,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:13 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:13 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:13 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:13 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -206,7 +206,7 @@ reg byte a [ print_char::ch#7 print_char::ch#5 print_char::ch#2 print_char::ch#3 zp ZP_WORD:8 [ print_char_cursor#45 print_char_cursor#74 print_char_cursor#2 print_char_cursor#73 print_char_cursor#70 print_char_cursor#78 print_char_cursor#83 print_char_cursor#79 print_char_cursor#15 print_char_cursor#128 print_char_cursor#62 print_char_cursor#1 ] zp ZP_WORD:10 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 compare::w1#0 print_word::w#0 ] zp ZP_BYTE:12 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] +zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] reg byte a [ main::$8 ] zp ZP_WORD:15 [ main::w1#0 ] reg byte a [ main::$9 ] diff --git a/src/test/ref/test-comparisons-word.asm b/src/test/ref/test-comparisons-word.asm index e357c49be..eef9df1a4 100644 --- a/src/test/ref/test-comparisons-word.asm +++ b/src/test/ref/test-comparisons-word.asm @@ -352,14 +352,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [100] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [100] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [100] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [101] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [100] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [103] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [101] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [104] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [102] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [100] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [100] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [103] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #> (byte) 4 [ p Statement [85] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#11 print_byte::$2 ] ( main:2::compare:16::print_word:46::print_byte:77 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#7 compare::r#10 print_word::w#2 print_char_cursor#11 print_byte::$2 ] main:2::compare:16::print_word:50::print_byte:77 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_word::w#2 print_char_cursor#11 print_byte::$2 ] main:2::compare:16::print_word:46::print_byte:79 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#7 compare::r#10 print_char_cursor#11 print_byte::$2 ] main:2::compare:16::print_word:50::print_byte:79 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a Statement [91] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:48 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [93] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:48 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y -Statement [101] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:97 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [103] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:97 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [101] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:97 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [103] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:97 [ memset::dst#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , Potential registers zp ZP_BYTE:3 [ main::j#2 main::j#1 ] : zp ZP_BYTE:3 , reg byte x , Potential registers zp ZP_BYTE:4 [ main::op#2 main::op#1 ] : zp ZP_BYTE:4 , reg byte x , @@ -2977,7 +2989,7 @@ Potential registers zp ZP_WORD:12 [ print_word::w#2 print_word::w#0 print_word:: Potential registers zp ZP_WORD:14 [ print_char_cursor#52 print_char_cursor#36 print_char_cursor#55 print_char_cursor#61 print_char_cursor#72 print_char_cursor#62 print_char_cursor#11 print_char_cursor#109 print_char_cursor#53 print_char_cursor#2 print_char_cursor#1 ] : zp ZP_WORD:14 , Potential registers zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:16 , reg byte x , Potential registers zp ZP_WORD:17 [ print_str::str#2 print_str::str#1 print_str::str#0 ] : zp ZP_WORD:17 , -Potential registers zp ZP_WORD:19 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:19 , +Potential registers zp ZP_WORD:19 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:19 , Potential registers zp ZP_BYTE:21 [ main::$8 ] : zp ZP_BYTE:21 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:22 [ main::w1#0 ] : zp ZP_WORD:22 , Potential registers zp ZP_BYTE:24 [ main::$9 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , @@ -2993,7 +3005,7 @@ Uplift Scope [] 27,162.22: zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor# Uplift Scope [print_str] 30,005.5: zp ZP_WORD:17 [ print_str::str#2 print_str::str#1 print_str::str#0 ] Uplift Scope [main] 2,302.43: zp ZP_BYTE:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] 1,774.5: zp ZP_BYTE:4 [ main::op#2 main::op#1 ] 202: zp ZP_BYTE:24 [ main::$9 ] 170.44: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] 78.71: zp ZP_WORD:25 [ main::w2#0 ] 53.26: zp ZP_WORD:22 [ main::w1#0 ] 22: zp ZP_BYTE:21 [ main::$8 ] 18.07: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplift Scope [compare] 168.83: zp ZP_BYTE:31 [ compare::op#0 ] 36.25: zp ZP_WORD:27 [ compare::w1#0 ] 32.74: zp ZP_WORD:29 [ compare::w2#0 ] 14: zp ZP_BYTE:10 [ compare::r#10 compare::r#12 compare::r#13 compare::r#14 compare::r#15 compare::r#16 compare::r#17 ] 0.67: zp ZP_WORD:8 [ compare::ops#7 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:19 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [memset] 33: zp ZP_WORD:19 [ memset::dst#4 memset::dst#1 ] Uplift Scope [print_char] 20: zp ZP_BYTE:11 [ print_char::ch#4 print_char::ch#2 print_char::ch#0 print_char::ch#1 ] Uplift Scope [print_byte] 10: zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:32 [ print_byte::$0 ] 4: zp ZP_BYTE:33 [ print_byte::$2 ] Uplift Scope [print_word] 10.67: zp ZP_WORD:12 [ print_word::w#2 print_word::w#0 print_word::w#1 ] @@ -3001,39 +3013,39 @@ Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] -Uplifting [] best 1156292 combination zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] zp ZP_WORD:14 [ print_char_cursor#52 print_char_cursor#36 print_char_cursor#55 print_char_cursor#61 print_char_cursor#72 print_char_cursor#62 print_char_cursor#11 print_char_cursor#109 print_char_cursor#53 print_char_cursor#2 print_char_cursor#1 ] -Uplifting [print_str] best 1156292 combination zp ZP_WORD:17 [ print_str::str#2 print_str::str#1 print_str::str#0 ] -Uplifting [main] best 1143852 combination zp ZP_BYTE:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] reg byte x [ main::op#2 main::op#1 ] reg byte a [ main::$9 ] zp ZP_BYTE:3 [ main::j#2 main::j#1 ] zp ZP_WORD:25 [ main::w2#0 ] zp ZP_WORD:22 [ main::w1#0 ] reg byte a [ main::$8 ] zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplifting [] best 1156322 combination zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] zp ZP_WORD:14 [ print_char_cursor#52 print_char_cursor#36 print_char_cursor#55 print_char_cursor#61 print_char_cursor#72 print_char_cursor#62 print_char_cursor#11 print_char_cursor#109 print_char_cursor#53 print_char_cursor#2 print_char_cursor#1 ] +Uplifting [print_str] best 1156322 combination zp ZP_WORD:17 [ print_str::str#2 print_str::str#1 print_str::str#0 ] +Uplifting [main] best 1143882 combination zp ZP_BYTE:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] reg byte x [ main::op#2 main::op#1 ] reg byte a [ main::$9 ] zp ZP_BYTE:3 [ main::j#2 main::j#1 ] zp ZP_WORD:25 [ main::w2#0 ] zp ZP_WORD:22 [ main::w1#0 ] reg byte a [ main::$8 ] zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [compare] best 1140834 combination reg byte x [ compare::op#0 ] zp ZP_WORD:27 [ compare::w1#0 ] zp ZP_WORD:29 [ compare::w2#0 ] zp ZP_BYTE:10 [ compare::r#10 compare::r#12 compare::r#13 compare::r#14 compare::r#15 compare::r#16 compare::r#17 ] zp ZP_WORD:8 [ compare::ops#7 ] -Uplifting [memset] best 1140834 combination zp ZP_WORD:19 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_char] best 1140819 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -Uplifting [print_byte] best 1140811 combination zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] -Uplifting [print_word] best 1140811 combination zp ZP_WORD:12 [ print_word::w#2 print_word::w#0 print_word::w#1 ] -Uplifting [RADIX] best 1140811 combination -Uplifting [print_ln] best 1140811 combination -Uplifting [print_cls] best 1140811 combination +Uplifting [compare] best 1140864 combination reg byte x [ compare::op#0 ] zp ZP_WORD:27 [ compare::w1#0 ] zp ZP_WORD:29 [ compare::w2#0 ] zp ZP_BYTE:10 [ compare::r#10 compare::r#12 compare::r#13 compare::r#14 compare::r#15 compare::r#16 compare::r#17 ] zp ZP_WORD:8 [ compare::ops#7 ] +Uplifting [memset] best 1140864 combination zp ZP_WORD:19 [ memset::dst#4 memset::dst#1 ] +Uplifting [print_char] best 1140849 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Uplifting [print_byte] best 1140841 combination zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [print_word] best 1140841 combination zp ZP_WORD:12 [ print_word::w#2 print_word::w#0 print_word::w#1 ] +Uplifting [RADIX] best 1140841 combination +Uplifting [print_ln] best 1140841 combination +Uplifting [print_cls] best 1140841 combination Attempting to uplift remaining variables inzp ZP_BYTE:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] -Uplifting [main] best 1140811 combination zp ZP_BYTE:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] +Uplifting [main] best 1140841 combination zp ZP_BYTE:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::j#2 main::j#1 ] -Uplifting [main] best 1140811 combination zp ZP_BYTE:3 [ main::j#2 main::j#1 ] +Uplifting [main] best 1140841 combination zp ZP_BYTE:3 [ main::j#2 main::j#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Uplifting [main] best 1140811 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplifting [main] best 1140841 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:10 [ compare::r#10 compare::r#12 compare::r#13 compare::r#14 compare::r#15 compare::r#16 compare::r#17 ] -Uplifting [compare] best 1140811 combination zp ZP_BYTE:10 [ compare::r#10 compare::r#12 compare::r#13 compare::r#14 compare::r#15 compare::r#16 compare::r#17 ] +Uplifting [compare] best 1140841 combination zp ZP_BYTE:10 [ compare::r#10 compare::r#12 compare::r#13 compare::r#14 compare::r#15 compare::r#16 compare::r#17 ] Attempting to uplift remaining variables inzp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Uplifting [print_byte] best 1140811 combination zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Uplifting [print_byte] best 1140841 combination zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Coalescing zero page register [ zp ZP_WORD:8 [ compare::ops#7 ] ] with [ zp ZP_WORD:17 [ print_str::str#2 print_str::str#1 print_str::str#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:12 [ print_word::w#2 print_word::w#0 print_word::w#1 ] ] with [ zp ZP_WORD:27 [ compare::w1#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:25 [ main::w2#0 ] ] with [ zp ZP_WORD:29 [ compare::w2#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:19 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] ] +Coalescing zero page register [ zp ZP_WORD:19 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] ] Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] Allocated (was zp ZP_WORD:8) zp ZP_WORD:5 [ compare::ops#7 print_str::str#2 print_str::str#1 print_str::str#0 ] Allocated (was zp ZP_BYTE:10) zp ZP_BYTE:7 [ compare::r#10 compare::r#12 compare::r#13 compare::r#14 compare::r#15 compare::r#16 compare::r#17 ] Allocated (was zp ZP_WORD:12) zp ZP_WORD:8 [ print_word::w#2 print_word::w#0 print_word::w#1 compare::w1#0 ] Allocated (was zp ZP_WORD:14) zp ZP_WORD:10 [ print_char_cursor#52 print_char_cursor#36 print_char_cursor#55 print_char_cursor#61 print_char_cursor#72 print_char_cursor#62 print_char_cursor#11 print_char_cursor#109 print_char_cursor#53 print_char_cursor#2 print_char_cursor#1 ] Allocated (was zp ZP_BYTE:16) zp ZP_BYTE:12 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Allocated (was zp ZP_WORD:19) zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] +Allocated (was zp ZP_WORD:19) zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] Allocated (was zp ZP_WORD:22) zp ZP_WORD:15 [ main::w1#0 ] Allocated (was zp ZP_WORD:25) zp ZP_WORD:17 [ main::w2#0 compare::w2#0 ] @@ -3778,43 +3790,44 @@ memset: { .label str = $400 .label end = str+num .label dst = $d - // [100] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [100] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [100] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [100] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [101] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [100] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [103] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [101] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [104] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [102] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [100] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [100] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [103] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [100] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [100] phi from memset to memset::@2 [phi:memset->memset::@2] + // [100] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [100] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [100] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [101] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [101] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [102] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [103] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -4862,24 +4893,8 @@ memset: { bne b2 // memset::@return // } - // [102] return + // [104] return rts - // memset::@2 - b2: - // *dst = c - // [103] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [104] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [100] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [100] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/test-comparisons-word.sym b/src/test/ref/test-comparisons-word.sym index ed5eff994..0eaf6ace6 100644 --- a/src/test/ref/test-comparisons-word.sym +++ b/src/test/ref/test-comparisons-word.sym @@ -100,8 +100,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:13 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:13 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:13 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:13 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -180,7 +180,7 @@ reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#0 print_char::ch#1 zp ZP_WORD:8 [ print_word::w#2 print_word::w#0 print_word::w#1 compare::w1#0 ] zp ZP_WORD:10 [ print_char_cursor#52 print_char_cursor#36 print_char_cursor#55 print_char_cursor#61 print_char_cursor#72 print_char_cursor#62 print_char_cursor#11 print_char_cursor#109 print_char_cursor#53 print_char_cursor#2 print_char_cursor#1 ] zp ZP_BYTE:12 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] +zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 print_line_cursor#9 print_line_cursor#19 print_line_cursor#29 print_line_cursor#31 print_line_cursor#23 print_line_cursor#1 ] reg byte a [ main::$8 ] zp ZP_WORD:15 [ main::w1#0 ] reg byte a [ main::$9 ] diff --git a/src/test/ref/test-comparisons.asm b/src/test/ref/test-comparisons.asm index ad825109e..ba04135f6 100644 --- a/src/test/ref/test-comparisons.asm +++ b/src/test/ref/test-comparisons.asm @@ -488,14 +488,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [203] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [203] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [203] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [204] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [203] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [206] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [204] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [207] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [205] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [203] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [203] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [206] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #=*((const byte[5]) main::cs#0 + (byte) main::i#10)) goto main::@4 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#55 ] ( main:2 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#55 ] ) always clobbers reg byte a reg byte y Statement [28] if((byte) main::a#10>=(byte) main::a#10) goto main::@5 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#55 ] ( main:2 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#55 ] ) always clobbers reg byte a @@ -4910,8 +4922,8 @@ Statement [185] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ Statement [188] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#55 print_byte::$2 ] ( main:2::printu:14::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:14::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] ) always clobbers reg byte a Statement [194] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [196] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y -Statement [204] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:200 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [206] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:200 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [204] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:200 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [206] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:200 [ memset::dst#1 ] ) always clobbers reg byte a Statement [7] (byte) main::b#0 ← (byte) $ce - (byte) main::a#10 [ main::a#10 print_char_cursor#120 main::i#10 print_line_cursor#27 main::b#0 ] ( main:2 [ main::a#10 print_char_cursor#120 main::i#10 print_line_cursor#27 main::b#0 ] ) always clobbers reg byte a Statement [21] if((byte) main::a#10>=*((const byte[5]) main::cs#0 + (byte) main::i#10)) goto main::@4 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#55 ] ( main:2 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#55 ] ) always clobbers reg byte a reg byte y Statement [25] (byte) printu::b#2 ← *((const byte[5]) main::cs#0 + (byte) main::i#10) [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 main::r#43 printu::a#2 printu::b#2 print_char_cursor#55 ] ( main:2 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 main::r#43 printu::a#2 printu::b#2 print_char_cursor#55 ] ) always clobbers reg byte y @@ -4948,8 +4960,8 @@ Statement [185] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ Statement [188] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#55 print_byte::$2 ] ( main:2::printu:14::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:14::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] ) always clobbers reg byte a Statement [194] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [196] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y -Statement [204] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:200 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [206] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:200 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [204] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:200 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [206] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:200 [ memset::dst#1 ] ) always clobbers reg byte a Statement [7] (byte) main::b#0 ← (byte) $ce - (byte) main::a#10 [ main::a#10 print_char_cursor#120 main::i#10 print_line_cursor#27 main::b#0 ] ( main:2 [ main::a#10 print_char_cursor#120 main::i#10 print_line_cursor#27 main::b#0 ] ) always clobbers reg byte a Statement [21] if((byte) main::a#10>=*((const byte[5]) main::cs#0 + (byte) main::i#10)) goto main::@4 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#55 ] ( main:2 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#55 ] ) always clobbers reg byte a reg byte y Statement [25] (byte) printu::b#2 ← *((const byte[5]) main::cs#0 + (byte) main::i#10) [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 main::r#43 printu::a#2 printu::b#2 print_char_cursor#55 ] ( main:2 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 main::r#43 printu::a#2 printu::b#2 print_char_cursor#55 ] ) always clobbers reg byte y @@ -4981,8 +4993,8 @@ Statement [185] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ Statement [188] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#55 print_byte::$2 ] ( main:2::printu:14::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:14::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] ) always clobbers reg byte a Statement [194] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [196] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y -Statement [204] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:200 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [206] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:200 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [204] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:200 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [206] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:200 [ memset::dst#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::a#10 main::a#1 ] : zp ZP_BYTE:2 , reg byte x , Potential registers zp ZP_BYTE:3 [ main::i#10 main::i#1 ] : zp ZP_BYTE:3 , Potential registers zp ZP_BYTE:4 [ main::r#41 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , @@ -5014,7 +5026,7 @@ Potential registers zp ZP_BYTE:31 [ print_char::ch#5 print_char::ch#0 print_char Potential registers zp ZP_WORD:32 [ print_char_cursor#54 print_char_cursor#94 print_char_cursor#95 print_char_cursor#152 print_char_cursor#55 print_char_cursor#156 print_char_cursor#160 print_char_cursor#120 print_char_cursor#151 print_char_cursor#168 print_char_cursor#2 print_char_cursor#1 ] : zp ZP_WORD:32 , Potential registers zp ZP_BYTE:34 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:34 , reg byte x , Potential registers zp ZP_WORD:35 [ print_str::str#2 print_str::str#1 print_str::str#0 ] : zp ZP_WORD:35 , -Potential registers zp ZP_WORD:37 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:37 , +Potential registers zp ZP_WORD:37 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:37 , Potential registers zp ZP_BYTE:39 [ main::b#0 ] : zp ZP_BYTE:39 , reg byte x , Potential registers zp ZP_BYTE:40 [ print_byte::$0 ] : zp ZP_BYTE:40 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:41 [ print_byte::$2 ] : zp ZP_BYTE:41 , reg byte a , reg byte x , reg byte y , @@ -5024,85 +5036,85 @@ Uplift Scope [printu] 418.2: zp ZP_BYTE:30 [ printu::res#20 printu::res#8 printu Uplift Scope [] 498.02: zp ZP_WORD:32 [ print_char_cursor#54 print_char_cursor#94 print_char_cursor#95 print_char_cursor#152 print_char_cursor#55 print_char_cursor#156 print_char_cursor#160 print_char_cursor#120 print_char_cursor#151 print_char_cursor#168 print_char_cursor#2 print_char_cursor#1 ] 264.96: zp ZP_WORD:24 [ print_line_cursor#13 print_line_cursor#25 print_line_cursor#27 print_line_cursor#1 ] Uplift Scope [print_str] 305.5: zp ZP_WORD:35 [ print_str::str#2 print_str::str#1 print_str::str#0 ] Uplift Scope [main] 11.87: zp ZP_BYTE:3 [ main::i#10 main::i#1 ] 9.36: zp ZP_BYTE:2 [ main::a#10 main::a#1 ] 5.5: zp ZP_BYTE:5 [ main::r#42 ] 5.5: zp ZP_BYTE:9 [ main::r#46 ] 5.5: zp ZP_BYTE:13 [ main::r#50 ] 5.5: zp ZP_BYTE:17 [ main::r#54 ] 5.5: zp ZP_BYTE:21 [ main::r#58 ] 3.67: zp ZP_BYTE:4 [ main::r#41 ] 3.67: zp ZP_BYTE:6 [ main::r#43 ] 3.67: zp ZP_BYTE:7 [ main::r#44 ] 3.67: zp ZP_BYTE:8 [ main::r#45 ] 3.67: zp ZP_BYTE:10 [ main::r#47 ] 3.67: zp ZP_BYTE:11 [ main::r#48 ] 3.67: zp ZP_BYTE:12 [ main::r#49 ] 3.67: zp ZP_BYTE:14 [ main::r#51 ] 3.67: zp ZP_BYTE:15 [ main::r#52 ] 3.67: zp ZP_BYTE:16 [ main::r#53 ] 3.67: zp ZP_BYTE:18 [ main::r#55 ] 3.67: zp ZP_BYTE:19 [ main::r#56 ] 3.67: zp ZP_BYTE:20 [ main::r#57 ] 3.67: zp ZP_BYTE:22 [ main::r#59 ] 3.67: zp ZP_BYTE:23 [ main::r#60 ] 0.98: zp ZP_BYTE:39 [ main::b#0 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:37 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [memset] 33: zp ZP_WORD:37 [ memset::dst#4 memset::dst#1 ] Uplift Scope [print_char] 20: zp ZP_BYTE:31 [ print_char::ch#5 print_char::ch#0 print_char::ch#1 print_char::ch#4 ] Uplift Scope [print_byte] 10: zp ZP_BYTE:34 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:40 [ print_byte::$0 ] 4: zp ZP_BYTE:41 [ print_byte::$2 ] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] -Uplifting [printu] best 21771 combination reg byte x [ printu::res#20 printu::res#8 printu::res#9 printu::res#10 printu::res#11 printu::res#12 printu::res#13 printu::res#14 printu::res#15 printu::res#16 printu::res#17 printu::res#0 printu::res#18 printu::res#19 printu::res#1 printu::res#2 printu::res#3 printu::res#4 printu::res#5 printu::res#6 printu::res#7 ] zp ZP_BYTE:26 [ 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:29 [ 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 ] zp ZP_WORD:27 [ printu::op#20 ] -Uplifting [] best 21771 combination zp ZP_WORD:32 [ print_char_cursor#54 print_char_cursor#94 print_char_cursor#95 print_char_cursor#152 print_char_cursor#55 print_char_cursor#156 print_char_cursor#160 print_char_cursor#120 print_char_cursor#151 print_char_cursor#168 print_char_cursor#2 print_char_cursor#1 ] zp ZP_WORD:24 [ print_line_cursor#13 print_line_cursor#25 print_line_cursor#27 print_line_cursor#1 ] -Uplifting [print_str] best 21771 combination zp ZP_WORD:35 [ print_str::str#2 print_str::str#1 print_str::str#0 ] -Uplifting [memset] best 21771 combination zp ZP_WORD:37 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_char] best 21755 combination reg byte a [ print_char::ch#5 print_char::ch#0 print_char::ch#1 print_char::ch#4 ] -Uplifting [print_byte] best 21751 combination zp ZP_BYTE:34 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] zp ZP_BYTE:41 [ print_byte::$2 ] +Uplifting [printu] best 21801 combination reg byte x [ printu::res#20 printu::res#8 printu::res#9 printu::res#10 printu::res#11 printu::res#12 printu::res#13 printu::res#14 printu::res#15 printu::res#16 printu::res#17 printu::res#0 printu::res#18 printu::res#19 printu::res#1 printu::res#2 printu::res#3 printu::res#4 printu::res#5 printu::res#6 printu::res#7 ] zp ZP_BYTE:26 [ 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:29 [ 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 ] zp ZP_WORD:27 [ printu::op#20 ] +Uplifting [] best 21801 combination zp ZP_WORD:32 [ print_char_cursor#54 print_char_cursor#94 print_char_cursor#95 print_char_cursor#152 print_char_cursor#55 print_char_cursor#156 print_char_cursor#160 print_char_cursor#120 print_char_cursor#151 print_char_cursor#168 print_char_cursor#2 print_char_cursor#1 ] zp ZP_WORD:24 [ print_line_cursor#13 print_line_cursor#25 print_line_cursor#27 print_line_cursor#1 ] +Uplifting [print_str] best 21801 combination zp ZP_WORD:35 [ print_str::str#2 print_str::str#1 print_str::str#0 ] +Uplifting [memset] best 21801 combination zp ZP_WORD:37 [ memset::dst#4 memset::dst#1 ] +Uplifting [print_char] best 21785 combination reg byte a [ print_char::ch#5 print_char::ch#0 print_char::ch#1 print_char::ch#4 ] +Uplifting [print_byte] best 21781 combination zp ZP_BYTE:34 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] zp ZP_BYTE:41 [ print_byte::$2 ] Limited combination testing to 10 combinations of 32 possible. -Uplifting [RADIX] best 21751 combination -Uplifting [print_ln] best 21751 combination -Uplifting [print_cls] best 21751 combination +Uplifting [RADIX] best 21781 combination +Uplifting [print_ln] best 21781 combination +Uplifting [print_cls] best 21781 combination Attempting to uplift remaining variables inzp ZP_BYTE:26 [ 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 ] -Uplifting [printu] best 21751 combination zp ZP_BYTE:26 [ 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 ] +Uplifting [printu] best 21781 combination zp ZP_BYTE:26 [ 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 ] Attempting to uplift remaining variables inzp ZP_BYTE:29 [ 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 ] -Uplifting [printu] best 21751 combination zp ZP_BYTE:29 [ 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 ] +Uplifting [printu] best 21781 combination zp ZP_BYTE:29 [ 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 ] Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::i#10 main::i#1 ] -Uplifting [main] best 21751 combination zp ZP_BYTE:3 [ main::i#10 main::i#1 ] +Uplifting [main] best 21781 combination zp ZP_BYTE:3 [ main::i#10 main::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:34 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Uplifting [print_byte] best 21751 combination zp ZP_BYTE:34 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Uplifting [print_byte] best 21781 combination zp ZP_BYTE:34 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::a#10 main::a#1 ] -Uplifting [main] best 21751 combination zp ZP_BYTE:2 [ main::a#10 main::a#1 ] +Uplifting [main] best 21781 combination zp ZP_BYTE:2 [ main::a#10 main::a#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ main::r#42 ] -Uplifting [main] best 21661 combination reg byte x [ main::r#42 ] +Uplifting [main] best 21691 combination reg byte x [ main::r#42 ] Attempting to uplift remaining variables inzp ZP_BYTE:9 [ main::r#46 ] -Uplifting [main] best 21571 combination reg byte x [ main::r#46 ] +Uplifting [main] best 21601 combination reg byte x [ main::r#46 ] Attempting to uplift remaining variables inzp ZP_BYTE:13 [ main::r#50 ] -Uplifting [main] best 21481 combination reg byte x [ main::r#50 ] +Uplifting [main] best 21511 combination reg byte x [ main::r#50 ] Attempting to uplift remaining variables inzp ZP_BYTE:17 [ main::r#54 ] -Uplifting [main] best 21391 combination reg byte x [ main::r#54 ] +Uplifting [main] best 21421 combination reg byte x [ main::r#54 ] Attempting to uplift remaining variables inzp ZP_BYTE:21 [ main::r#58 ] -Uplifting [main] best 21301 combination reg byte x [ main::r#58 ] +Uplifting [main] best 21331 combination reg byte x [ main::r#58 ] Attempting to uplift remaining variables inzp ZP_BYTE:41 [ print_byte::$2 ] -Uplifting [print_byte] best 21297 combination reg byte a [ print_byte::$2 ] +Uplifting [print_byte] best 21327 combination reg byte a [ print_byte::$2 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ main::r#41 ] -Uplifting [main] best 21207 combination reg byte x [ main::r#41 ] +Uplifting [main] best 21237 combination reg byte x [ main::r#41 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::r#43 ] -Uplifting [main] best 21117 combination reg byte x [ main::r#43 ] +Uplifting [main] best 21147 combination reg byte x [ main::r#43 ] Attempting to uplift remaining variables inzp ZP_BYTE:7 [ main::r#44 ] -Uplifting [main] best 21027 combination reg byte x [ main::r#44 ] +Uplifting [main] best 21057 combination reg byte x [ main::r#44 ] Attempting to uplift remaining variables inzp ZP_BYTE:8 [ main::r#45 ] -Uplifting [main] best 20937 combination reg byte x [ main::r#45 ] +Uplifting [main] best 20967 combination reg byte x [ main::r#45 ] Attempting to uplift remaining variables inzp ZP_BYTE:10 [ main::r#47 ] -Uplifting [main] best 20847 combination reg byte x [ main::r#47 ] +Uplifting [main] best 20877 combination reg byte x [ main::r#47 ] Attempting to uplift remaining variables inzp ZP_BYTE:11 [ main::r#48 ] -Uplifting [main] best 20757 combination reg byte x [ main::r#48 ] +Uplifting [main] best 20787 combination reg byte x [ main::r#48 ] Attempting to uplift remaining variables inzp ZP_BYTE:12 [ main::r#49 ] -Uplifting [main] best 20667 combination reg byte x [ main::r#49 ] +Uplifting [main] best 20697 combination reg byte x [ main::r#49 ] Attempting to uplift remaining variables inzp ZP_BYTE:14 [ main::r#51 ] -Uplifting [main] best 20577 combination reg byte x [ main::r#51 ] +Uplifting [main] best 20607 combination reg byte x [ main::r#51 ] Attempting to uplift remaining variables inzp ZP_BYTE:15 [ main::r#52 ] -Uplifting [main] best 20487 combination reg byte x [ main::r#52 ] +Uplifting [main] best 20517 combination reg byte x [ main::r#52 ] Attempting to uplift remaining variables inzp ZP_BYTE:16 [ main::r#53 ] -Uplifting [main] best 20397 combination reg byte x [ main::r#53 ] +Uplifting [main] best 20427 combination reg byte x [ main::r#53 ] Attempting to uplift remaining variables inzp ZP_BYTE:18 [ main::r#55 ] -Uplifting [main] best 20307 combination reg byte x [ main::r#55 ] +Uplifting [main] best 20337 combination reg byte x [ main::r#55 ] Attempting to uplift remaining variables inzp ZP_BYTE:19 [ main::r#56 ] -Uplifting [main] best 20217 combination reg byte x [ main::r#56 ] +Uplifting [main] best 20247 combination reg byte x [ main::r#56 ] Attempting to uplift remaining variables inzp ZP_BYTE:20 [ main::r#57 ] -Uplifting [main] best 20127 combination reg byte x [ main::r#57 ] +Uplifting [main] best 20157 combination reg byte x [ main::r#57 ] Attempting to uplift remaining variables inzp ZP_BYTE:22 [ main::r#59 ] -Uplifting [main] best 20037 combination reg byte x [ main::r#59 ] +Uplifting [main] best 20067 combination reg byte x [ main::r#59 ] Attempting to uplift remaining variables inzp ZP_BYTE:23 [ main::r#60 ] -Uplifting [main] best 19947 combination reg byte x [ main::r#60 ] +Uplifting [main] best 19977 combination reg byte x [ main::r#60 ] Attempting to uplift remaining variables inzp ZP_BYTE:39 [ main::b#0 ] -Uplifting [main] best 19947 combination zp ZP_BYTE:39 [ main::b#0 ] +Uplifting [main] best 19977 combination zp ZP_BYTE:39 [ main::b#0 ] Coalescing zero page register [ zp ZP_BYTE:2 [ main::a#10 main::a#1 ] ] with [ zp ZP_BYTE:26 [ 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 ] ] - score: 20 Coalescing zero page register [ zp ZP_WORD:27 [ printu::op#20 ] ] with [ zp ZP_WORD:35 [ print_str::str#2 print_str::str#1 print_str::str#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:37 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:24 [ print_line_cursor#13 print_line_cursor#25 print_line_cursor#27 print_line_cursor#1 ] ] +Coalescing zero page register [ zp ZP_WORD:37 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:24 [ print_line_cursor#13 print_line_cursor#25 print_line_cursor#27 print_line_cursor#1 ] ] Allocated (was zp ZP_WORD:27) zp ZP_WORD:4 [ printu::op#20 print_str::str#2 print_str::str#1 print_str::str#0 ] Allocated (was zp ZP_BYTE:29) zp ZP_BYTE:6 [ 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 ] Allocated (was zp ZP_WORD:32) zp ZP_WORD:7 [ print_char_cursor#54 print_char_cursor#94 print_char_cursor#95 print_char_cursor#152 print_char_cursor#55 print_char_cursor#156 print_char_cursor#160 print_char_cursor#120 print_char_cursor#151 print_char_cursor#168 print_char_cursor#2 print_char_cursor#1 ] Allocated (was zp ZP_BYTE:34) zp ZP_BYTE:9 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Allocated (was zp ZP_WORD:37) zp ZP_WORD:10 [ memset::dst#2 memset::dst#1 print_line_cursor#13 print_line_cursor#25 print_line_cursor#27 print_line_cursor#1 ] +Allocated (was zp ZP_WORD:37) zp ZP_WORD:10 [ memset::dst#4 memset::dst#1 print_line_cursor#13 print_line_cursor#25 print_line_cursor#27 print_line_cursor#1 ] Allocated (was zp ZP_BYTE:39) zp ZP_BYTE:12 [ main::b#0 ] ASSEMBLER BEFORE OPTIMIZATION @@ -6347,43 +6359,44 @@ memset: { .label str = $400 .label end = str+num .label dst = $a - // [203] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [203] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [203] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [203] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [204] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [203] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [206] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [204] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [207] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [205] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [203] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [203] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [206] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [203] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [203] phi from memset to memset::@2 [phi:memset->memset::@2] + // [203] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [203] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [203] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [204] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [204] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [205] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [206] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -8050,24 +8082,8 @@ memset: { bne b2 // memset::@return // } - // [205] return + // [207] return rts - // memset::@2 - b2: - // *dst = c - // [206] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [207] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [203] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [203] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/test-comparisons.sym b/src/test/ref/test-comparisons.sym index 556bd7fc5..f4ce9cf2c 100644 --- a/src/test/ref/test-comparisons.sym +++ b/src/test/ref/test-comparisons.sym @@ -117,8 +117,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:10 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:10 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:10 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:10 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -275,7 +275,7 @@ reg byte x [ printu::res#20 printu::res#8 printu::res#9 printu::res#10 printu::r reg byte a [ print_char::ch#5 print_char::ch#0 print_char::ch#1 print_char::ch#4 ] zp ZP_WORD:7 [ print_char_cursor#54 print_char_cursor#94 print_char_cursor#95 print_char_cursor#152 print_char_cursor#55 print_char_cursor#156 print_char_cursor#160 print_char_cursor#120 print_char_cursor#151 print_char_cursor#168 print_char_cursor#2 print_char_cursor#1 ] zp ZP_BYTE:9 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -zp ZP_WORD:10 [ memset::dst#2 memset::dst#1 print_line_cursor#13 print_line_cursor#25 print_line_cursor#27 print_line_cursor#1 ] +zp ZP_WORD:10 [ memset::dst#4 memset::dst#1 print_line_cursor#13 print_line_cursor#25 print_line_cursor#27 print_line_cursor#1 ] zp ZP_BYTE:12 [ main::b#0 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] diff --git a/src/test/ref/test-division.asm b/src/test/ref/test-division.asm index da6cb4dfa..fc5a37b6d 100644 --- a/src/test/ref/test-division.asm +++ b/src/test/ref/test-division.asm @@ -675,14 +675,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [291] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [291] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [291] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [292] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [291] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [294] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [292] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [295] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [293] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [291] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [291] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [294] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - b1_from_memset: - // [291] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [291] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [291] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [292] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [291] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [294] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [292] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [295] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [293] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [291] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [291] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [294] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [291] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [291] phi from memset to memset::@2 [phi:memset->memset::@2] + // [291] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [291] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [291] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [292] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [292] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [293] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [294] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -11409,24 +11440,8 @@ memset: { bne b2 // memset::@return // } - // [293] return + // [295] return rts - // memset::@2 - b2: - // *dst = c - // [294] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [295] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [291] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [291] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/test-division.sym b/src/test/ref/test-division.sym index 345e40947..812458cfe 100644 --- a/src/test/ref/test-division.sym +++ b/src/test/ref/test-division.sym @@ -199,8 +199,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:15 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:15 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:15 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:15 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -439,7 +439,7 @@ reg byte x [ div8u::divisor#2 div8u::divisor#0 div8u::divisor#1 ] reg byte y [ divr8u::rem#4 divr8u::rem#10 divr8u::rem#5 divr8u::rem#1 divr8u::rem#2 divr8u::rem#3 ] reg byte x [ divr8u::i#2 divr8u::i#1 ] zp ZP_BYTE:14 [ test_16u::i#10 test_16u::i#1 div8s::neg#4 div8s::neg#2 div8s::neg#3 ] -zp ZP_WORD:15 [ memset::dst#2 memset::dst#1 print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 print_line_cursor#41 ] +zp ZP_WORD:15 [ memset::dst#4 memset::dst#1 print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 print_line_cursor#41 ] reg byte x [ test_16s::$11 ] zp ZP_WORD:17 [ test_16s::divisor#0 div16s::divisor#0 ] reg byte a [ print_byte::$0 ] diff --git a/src/test/ref/test-keyboard.asm b/src/test/ref/test-keyboard.asm index 70339218b..3362eb91e 100644 --- a/src/test/ref/test-keyboard.asm +++ b/src/test/ref/test-keyboard.asm @@ -70,19 +70,22 @@ main: { sta sc lda #>$400 sta sc+1 + b2: + lda #' ' + ldy #0 + sta (sc),y + inc sc + bne !+ + inc sc+1 + !: // Clear screen - b1: lda sc+1 cmp #>$400+$3e8 - bcs !b2+ - jmp b2 - !b2: + bcc b2 bne !+ lda sc cmp #<$400+$3e8 - bcs !b2+ - jmp b2 - !b2: + bcc b2 !: jsr keyboard_init b4: @@ -155,7 +158,7 @@ main: { lda #$40 cmp ch bne b12 - b3: + b1: // Add some spaces txa tay @@ -163,21 +166,12 @@ main: { sta (screen),y inx cpx #5 - bcc b3 + bcc b1 jmp b4 b7: lda #'1' sta (screen),y jmp b8 - b2: - lda #' ' - ldy #0 - sta (sc),y - inc sc - bne !+ - inc sc+1 - !: - jmp b1 } // Determines whether a specific key is currently pressed by accessing the matrix directly // The key is a keyboard code defined from the keyboard matrix by %00rrrccc, where rrr is the row ID (0-7) and ccc is the column ID (0-7) diff --git a/src/test/ref/test-keyboard.cfg b/src/test/ref/test-keyboard.cfg index 97e845488..08ce33a5c 100644 --- a/src/test/ref/test-keyboard.cfg +++ b/src/test/ref/test-keyboard.cfg @@ -9,92 +9,92 @@ [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::sc#4 ← phi( main::@1/(byte*) main::sc#1 main/(byte*) 1024 ) + [6] *((byte*) main::sc#4) ← (byte) ' ' + [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::sc#2 ← phi( main/(byte*) 1024 main::@2/(byte*) main::sc#1 ) - [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [7] phi() - [8] call keyboard_init + [9] phi() + [10] call keyboard_init to:main::@4 main::@4: scope:[main] from main::@16 main::@3 main::@4 - [9] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 + [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 to:main::@5 main::@5: scope:[main] from main::@10 main::@4 - [10] (byte*) main::screen#13 ← phi( main::@4/(byte*) 1024 main::@10/(byte*) main::screen#1 ) - [10] (byte) main::row#2 ← phi( main::@4/(byte) 0 main::@10/(byte) main::row#1 ) - [11] (byte) keyboard_matrix_read::rowid#1 ← (byte) main::row#2 - [12] call keyboard_matrix_read - [13] (byte) keyboard_matrix_read::return#3 ← (byte) keyboard_matrix_read::return#0 + [12] (byte*) main::screen#13 ← phi( main::@4/(byte*) 1024 main::@10/(byte*) main::screen#1 ) + [12] (byte) main::row#2 ← phi( main::@4/(byte) 0 main::@10/(byte) main::row#1 ) + [13] (byte) keyboard_matrix_read::rowid#1 ← (byte) main::row#2 + [14] call keyboard_matrix_read + [15] (byte) keyboard_matrix_read::return#3 ← (byte) keyboard_matrix_read::return#0 to:main::@17 main::@17: scope:[main] from main::@5 - [14] (byte) main::row_pressed_bits#0 ← (byte) keyboard_matrix_read::return#3 + [16] (byte) main::row_pressed_bits#0 ← (byte) keyboard_matrix_read::return#3 to:main::@6 main::@6: scope:[main] from main::@17 main::@8 - [15] (byte) main::col#2 ← phi( main::@8/(byte) main::col#1 main::@17/(byte) 0 ) - [15] (byte) main::row_pressed_bits#2 ← phi( main::@8/(byte) main::row_pressed_bits#1 main::@17/(byte) main::row_pressed_bits#0 ) - [16] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 - [17] if((byte~) main::$4!=(byte) 0) goto main::@7 + [17] (byte) main::col#2 ← phi( main::@8/(byte) main::col#1 main::@17/(byte) 0 ) + [17] (byte) main::row_pressed_bits#2 ← phi( main::@8/(byte) main::row_pressed_bits#1 main::@17/(byte) main::row_pressed_bits#0 ) + [18] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 + [19] if((byte~) main::$4!=(byte) 0) goto main::@7 to:main::@9 main::@9: scope:[main] from main::@6 - [18] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' + [20] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' to:main::@8 main::@8: scope:[main] from main::@7 main::@9 - [19] (byte) main::row_pressed_bits#1 ← (byte) main::row_pressed_bits#2 << (byte) 1 - [20] (byte) main::col#1 ← ++ (byte) main::col#2 - [21] if((byte) main::col#1!=(byte) 8) goto main::@6 + [21] (byte) main::row_pressed_bits#1 ← (byte) main::row_pressed_bits#2 << (byte) 1 + [22] (byte) main::col#1 ← ++ (byte) main::col#2 + [23] if((byte) main::col#1!=(byte) 8) goto main::@6 to:main::@10 main::@10: scope:[main] from main::@8 - [22] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 - [23] (byte) main::row#1 ← ++ (byte) main::row#2 - [24] if((byte) main::row#1!=(byte) 8) goto main::@5 + [24] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 + [25] (byte) main::row#1 ← ++ (byte) main::row#2 + [26] if((byte) main::row#1!=(byte) 8) goto main::@5 to:main::@11 main::@11: scope:[main] from main::@10 - [25] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 + [27] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 to:main::@12 main::@12: scope:[main] from main::@11 main::@13 - [26] (byte) main::i#3 ← phi( main::@11/(byte) 0 main::@13/(byte) main::i#6 ) - [26] (byte) main::ch#2 ← phi( main::@11/(byte) 0 main::@13/(byte) main::ch#1 ) - [27] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 - [28] call keyboard_get_keycode - [29] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 + [28] (byte) main::i#3 ← phi( main::@11/(byte) 0 main::@13/(byte) main::i#6 ) + [28] (byte) main::ch#2 ← phi( main::@11/(byte) 0 main::@13/(byte) main::ch#1 ) + [29] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 + [30] call keyboard_get_keycode + [31] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 to:main::@18 main::@18: scope:[main] from main::@12 - [30] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 - [31] if((byte) main::key#0==(byte) $3f) goto main::@13 + [32] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 + [33] if((byte) main::key#0==(byte) $3f) goto main::@13 to:main::@14 main::@14: scope:[main] from main::@18 - [32] (byte) keyboard_key_pressed::key#0 ← (byte) main::key#0 - [33] call keyboard_key_pressed - [34] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + [34] (byte) keyboard_key_pressed::key#0 ← (byte) main::key#0 + [35] call keyboard_key_pressed + [36] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 to:main::@19 main::@19: scope:[main] from main::@14 - [35] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 - [36] if((byte~) main::$14==(byte) 0) goto main::@13 + [37] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 + [38] if((byte~) main::$14==(byte) 0) goto main::@13 to:main::@15 main::@15: scope:[main] from main::@19 - [37] *((byte*) main::screen#2 + (byte) main::i#3) ← (byte) main::ch#2 - [38] (byte) main::i#1 ← ++ (byte) main::i#3 + [39] *((byte*) main::screen#2 + (byte) main::i#3) ← (byte) main::ch#2 + [40] (byte) main::i#1 ← ++ (byte) main::i#3 to:main::@13 main::@13: scope:[main] from main::@15 main::@18 main::@19 - [39] (byte) main::i#6 ← phi( main::@15/(byte) main::i#1 main::@18/(byte) main::i#3 main::@19/(byte) main::i#3 ) - [40] (byte) main::ch#1 ← ++ (byte) main::ch#2 - [41] if((byte) main::ch#1!=(byte) $40) goto main::@12 + [41] (byte) main::i#6 ← phi( main::@15/(byte) main::i#1 main::@18/(byte) main::i#3 main::@19/(byte) main::i#3 ) + [42] (byte) main::ch#1 ← ++ (byte) main::ch#2 + [43] if((byte) main::ch#1!=(byte) $40) goto main::@12 to:main::@16 main::@16: scope:[main] from main::@13 main::@16 - [42] (byte) main::i#4 ← phi( main::@13/(byte) main::i#6 main::@16/(byte) main::i#2 ) - [43] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' - [44] (byte) main::i#2 ← ++ (byte) main::i#4 - [45] if((byte) main::i#2<(byte) 5) goto main::@16 + [44] (byte) main::i#4 ← phi( main::@13/(byte) main::i#6 main::@16/(byte) main::i#2 ) + [45] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' + [46] (byte) main::i#2 ← ++ (byte) main::i#4 + [47] if((byte) main::i#2<(byte) 5) goto main::@16 to:main::@4 main::@7: scope:[main] from main::@6 - [46] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' + [48] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' to:main::@8 -main::@2: scope:[main] from main::@1 - [47] *((byte*) main::sc#2) ← (byte) ' ' - [48] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 - to:main::@1 keyboard_key_pressed: scope:[keyboard_key_pressed] from main::@14 [49] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#0 & (byte) 7 [50] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#0 >> (byte) 3 diff --git a/src/test/ref/test-keyboard.log b/src/test/ref/test-keyboard.log index 84ee152a9..c7d88f8d4 100644 --- a/src/test/ref/test-keyboard.log +++ b/src/test/ref/test-keyboard.log @@ -1025,6 +1025,7 @@ Resolved ranged next value [146] main::ch#1 ← ++ main::ch#2 to ++ Resolved ranged comparison value [148] if(main::ch#1!=rangelast(0,$3f)) goto main::@20 to (number) $40 Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 8 in if((byte) main::col#1!=(number) 8) goto main::@13 Adding number conversion cast (unumber) 8 in if((byte) main::row#1!=(number) 8) goto main::@12 Adding number conversion cast (unumber) $40 in if((byte) main::ch#1!=(number) $40) goto main::@20 @@ -1037,10 +1038,16 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $40 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte*) main::sc#1 = (byte*) main::sc#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) main::sc#5 (const byte*) main::sc#0 +Successful SSA optimization Pass2IdenticalPhiElimination Identified constant from value list (byte[]) { (const byte) KEY_AT#0, (const byte) KEY_A#0, (const byte) KEY_B#0, (const byte) KEY_C#0, (const byte) KEY_D#0, (const byte) KEY_E#0, (const byte) KEY_F#0, (const byte) KEY_G#0, (const byte) KEY_H#0, (const byte) KEY_I#0, (const byte) KEY_J#0, (const byte) KEY_K#0, (const byte) KEY_L#0, (const byte) KEY_M#0, (const byte) KEY_N#0, (const byte) KEY_O#0, (const byte) KEY_P#0, (const byte) KEY_Q#0, (const byte) KEY_R#0, (const byte) KEY_S#0, (const byte) KEY_T#0, (const byte) KEY_U#0, (const byte) KEY_V#0, (const byte) KEY_W#0, (const byte) KEY_X#0, (const byte) KEY_Y#0, (const byte) KEY_Z#0, (byte) $3f, (const byte) KEY_POUND#0, (byte) $3f, (const byte) KEY_ARROW_UP#0, (const byte) KEY_ARROW_LEFT#0, (const byte) KEY_SPACE#0, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const byte) KEY_ASTERISK#0, (const byte) KEY_PLUS#0, (const byte) KEY_COMMA#0, (const byte) KEY_MINUS#0, (const byte) KEY_DOT#0, (const byte) KEY_SLASH#0, (const byte) KEY_0#0, (const byte) KEY_1#0, (const byte) KEY_2#0, (const byte) KEY_3#0, (const byte) KEY_4#0, (const byte) KEY_5#0, (const byte) KEY_6#0, (const byte) KEY_7#0, (const byte) KEY_8#0, (const byte) KEY_9#0, (const byte) KEY_COLON#0, (const byte) KEY_SEMICOLON#0, (byte) $3f, (const byte) KEY_EQUALS#0, (byte) $3f, (byte) $3f } Successful SSA optimization Pass2ConstantInitializerValueLists Constant (const byte[]) keyboard_char_keycodes#0 = { KEY_AT#0, KEY_A#0, KEY_B#0, KEY_C#0, KEY_D#0, KEY_E#0, KEY_F#0, KEY_G#0, KEY_H#0, KEY_I#0, KEY_J#0, KEY_K#0, KEY_L#0, KEY_M#0, KEY_N#0, KEY_O#0, KEY_P#0, KEY_Q#0, KEY_R#0, KEY_S#0, KEY_T#0, KEY_U#0, KEY_V#0, KEY_W#0, KEY_X#0, KEY_Y#0, KEY_Z#0, $3f, KEY_POUND#0, $3f, KEY_ARROW_UP#0, KEY_ARROW_LEFT#0, KEY_SPACE#0, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK#0, KEY_PLUS#0, KEY_COMMA#0, KEY_MINUS#0, KEY_DOT#0, KEY_SLASH#0, KEY_0#0, KEY_1#0, KEY_2#0, KEY_3#0, KEY_4#0, KEY_5#0, KEY_6#0, KEY_7#0, KEY_8#0, KEY_9#0, KEY_COLON#0, KEY_SEMICOLON#0, $3f, KEY_EQUALS#0, $3f, $3f } Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [65] if((const byte*) main::sc#0<(word)(number) $400+(number) $3e8) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Rewriting multiplication to use shift [33] (byte) main::row_pressed_bits#1 ← (byte) main::row_pressed_bits#2 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte*) main::sc#0 @@ -1056,57 +1063,61 @@ Constant inlined main::sc#0 = (byte*) 1024 Constant inlined main::row#0 = (byte) 0 Constant inlined main::ch#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@35(between main::@18 and main::@12) -Added new block during phi lifting main::@36(between main::@15 and main::@13) -Added new block during phi lifting main::@37(between main::@21 and main::@20) -Added new block during phi lifting main::@38(between main::@33 and main::@21) -Added new block during phi lifting main::@39(between main::@34 and main::@21) -Added new block during phi lifting main::@40(between main::@21 and main::@26) -Added new block during phi lifting main::@41(between main::@26 and main::@26) +Added new block during phi lifting main::@35(between main::@1 and main::@2) +Added new block during phi lifting main::@36(between main::@18 and main::@12) +Added new block during phi lifting main::@37(between main::@15 and main::@13) +Added new block during phi lifting main::@38(between main::@21 and main::@20) +Added new block during phi lifting main::@39(between main::@33 and main::@21) +Added new block during phi lifting main::@40(between main::@34 and main::@21) +Added new block during phi lifting main::@41(between main::@21 and main::@26) +Added new block during phi lifting main::@42(between main::@26 and main::@26) Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @12 Adding NOP phi() at start of @13 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::@31 Adding NOP phi() at start of main::@7 Adding NOP phi() at start of main::@11 CALL GRAPH Calls in [] to main:3 -Calls in [main] to keyboard_init:10 keyboard_matrix_read:18 keyboard_get_keycode:35 keyboard_key_pressed:40 -Calls in [keyboard_key_pressed] to keyboard_matrix_read:72 +Calls in [main] to keyboard_init:13 keyboard_matrix_read:21 keyboard_get_keycode:38 keyboard_key_pressed:43 +Calls in [keyboard_key_pressed] to keyboard_matrix_read:73 Created 10 initial phi equivalence classes -Coalesced [17] keyboard_matrix_read::rowid#4 ← keyboard_matrix_read::rowid#1 -Coalesced [21] main::row_pressed_bits#7 ← main::row_pressed_bits#0 -Coalesced [46] main::i#11 ← main::i#1 -Coalesced [50] main::i#14 ← main::i#6 -Coalesced [55] main::i#15 ← main::i#2 -Coalesced [56] main::ch#8 ← main::ch#1 -Coalesced [57] main::i#10 ← main::i#6 -Coalesced (already) [58] main::i#13 ← main::i#3 -Coalesced (already) [59] main::i#12 ← main::i#3 -Coalesced [60] main::row#9 ← main::row#1 -Coalesced [61] main::screen#18 ← main::screen#1 -Coalesced [62] main::row_pressed_bits#6 ← main::row_pressed_bits#1 -Coalesced [63] main::col#6 ← main::col#1 -Coalesced [67] main::sc#4 ← main::sc#1 -Coalesced [71] keyboard_matrix_read::rowid#3 ← keyboard_matrix_read::rowid#0 +Coalesced [20] keyboard_matrix_read::rowid#4 ← keyboard_matrix_read::rowid#1 +Coalesced [24] main::row_pressed_bits#7 ← main::row_pressed_bits#0 +Coalesced [49] main::i#11 ← main::i#1 +Coalesced [53] main::i#14 ← main::i#6 +Coalesced [58] main::i#15 ← main::i#2 +Coalesced [59] main::ch#8 ← main::ch#1 +Coalesced [60] main::i#10 ← main::i#6 +Coalesced (already) [61] main::i#13 ← main::i#3 +Coalesced (already) [62] main::i#12 ← main::i#3 +Coalesced [63] main::row#9 ← main::row#1 +Coalesced [64] main::screen#18 ← main::screen#1 +Coalesced [65] main::row_pressed_bits#6 ← main::row_pressed_bits#1 +Coalesced [66] main::col#6 ← main::col#1 +Coalesced [68] main::sc#6 ← main::sc#1 +Coalesced [72] keyboard_matrix_read::rowid#3 ← keyboard_matrix_read::rowid#0 Coalesced down to 8 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @13 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@31 Culled Empty Block (label) main::@7 Culled Empty Block (label) main::@11 -Culled Empty Block (label) main::@40 Culled Empty Block (label) main::@41 -Culled Empty Block (label) main::@37 -Culled Empty Block (label) main::@39 +Culled Empty Block (label) main::@42 Culled Empty Block (label) main::@38 -Culled Empty Block (label) main::@35 +Culled Empty Block (label) main::@40 +Culled Empty Block (label) main::@39 Culled Empty Block (label) main::@36 +Culled Empty Block (label) main::@37 +Culled Empty Block (label) main::@35 Renumbering block @12 to @1 Renumbering block keyboard_key_pressed::@2 to keyboard_key_pressed::@1 Renumbering block main::@10 to main::@4 @@ -1143,92 +1154,92 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte*) main::sc#4 ← phi( main::@1/(byte*) main::sc#1 main/(byte*) 1024 ) + [6] *((byte*) main::sc#4) ← (byte) ' ' + [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte*) main::sc#2 ← phi( main/(byte*) 1024 main::@2/(byte*) main::sc#1 ) - [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 +main::@1: scope:[main] from main::@2 + [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [7] phi() - [8] call keyboard_init + [9] phi() + [10] call keyboard_init to:main::@4 main::@4: scope:[main] from main::@16 main::@3 main::@4 - [9] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 + [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 to:main::@5 main::@5: scope:[main] from main::@10 main::@4 - [10] (byte*) main::screen#13 ← phi( main::@4/(byte*) 1024 main::@10/(byte*) main::screen#1 ) - [10] (byte) main::row#2 ← phi( main::@4/(byte) 0 main::@10/(byte) main::row#1 ) - [11] (byte) keyboard_matrix_read::rowid#1 ← (byte) main::row#2 - [12] call keyboard_matrix_read - [13] (byte) keyboard_matrix_read::return#3 ← (byte) keyboard_matrix_read::return#0 + [12] (byte*) main::screen#13 ← phi( main::@4/(byte*) 1024 main::@10/(byte*) main::screen#1 ) + [12] (byte) main::row#2 ← phi( main::@4/(byte) 0 main::@10/(byte) main::row#1 ) + [13] (byte) keyboard_matrix_read::rowid#1 ← (byte) main::row#2 + [14] call keyboard_matrix_read + [15] (byte) keyboard_matrix_read::return#3 ← (byte) keyboard_matrix_read::return#0 to:main::@17 main::@17: scope:[main] from main::@5 - [14] (byte) main::row_pressed_bits#0 ← (byte) keyboard_matrix_read::return#3 + [16] (byte) main::row_pressed_bits#0 ← (byte) keyboard_matrix_read::return#3 to:main::@6 main::@6: scope:[main] from main::@17 main::@8 - [15] (byte) main::col#2 ← phi( main::@8/(byte) main::col#1 main::@17/(byte) 0 ) - [15] (byte) main::row_pressed_bits#2 ← phi( main::@8/(byte) main::row_pressed_bits#1 main::@17/(byte) main::row_pressed_bits#0 ) - [16] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 - [17] if((byte~) main::$4!=(byte) 0) goto main::@7 + [17] (byte) main::col#2 ← phi( main::@8/(byte) main::col#1 main::@17/(byte) 0 ) + [17] (byte) main::row_pressed_bits#2 ← phi( main::@8/(byte) main::row_pressed_bits#1 main::@17/(byte) main::row_pressed_bits#0 ) + [18] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 + [19] if((byte~) main::$4!=(byte) 0) goto main::@7 to:main::@9 main::@9: scope:[main] from main::@6 - [18] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' + [20] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' to:main::@8 main::@8: scope:[main] from main::@7 main::@9 - [19] (byte) main::row_pressed_bits#1 ← (byte) main::row_pressed_bits#2 << (byte) 1 - [20] (byte) main::col#1 ← ++ (byte) main::col#2 - [21] if((byte) main::col#1!=(byte) 8) goto main::@6 + [21] (byte) main::row_pressed_bits#1 ← (byte) main::row_pressed_bits#2 << (byte) 1 + [22] (byte) main::col#1 ← ++ (byte) main::col#2 + [23] if((byte) main::col#1!=(byte) 8) goto main::@6 to:main::@10 main::@10: scope:[main] from main::@8 - [22] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 - [23] (byte) main::row#1 ← ++ (byte) main::row#2 - [24] if((byte) main::row#1!=(byte) 8) goto main::@5 + [24] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 + [25] (byte) main::row#1 ← ++ (byte) main::row#2 + [26] if((byte) main::row#1!=(byte) 8) goto main::@5 to:main::@11 main::@11: scope:[main] from main::@10 - [25] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 + [27] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 to:main::@12 main::@12: scope:[main] from main::@11 main::@13 - [26] (byte) main::i#3 ← phi( main::@11/(byte) 0 main::@13/(byte) main::i#6 ) - [26] (byte) main::ch#2 ← phi( main::@11/(byte) 0 main::@13/(byte) main::ch#1 ) - [27] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 - [28] call keyboard_get_keycode - [29] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 + [28] (byte) main::i#3 ← phi( main::@11/(byte) 0 main::@13/(byte) main::i#6 ) + [28] (byte) main::ch#2 ← phi( main::@11/(byte) 0 main::@13/(byte) main::ch#1 ) + [29] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 + [30] call keyboard_get_keycode + [31] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 to:main::@18 main::@18: scope:[main] from main::@12 - [30] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 - [31] if((byte) main::key#0==(byte) $3f) goto main::@13 + [32] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 + [33] if((byte) main::key#0==(byte) $3f) goto main::@13 to:main::@14 main::@14: scope:[main] from main::@18 - [32] (byte) keyboard_key_pressed::key#0 ← (byte) main::key#0 - [33] call keyboard_key_pressed - [34] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + [34] (byte) keyboard_key_pressed::key#0 ← (byte) main::key#0 + [35] call keyboard_key_pressed + [36] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 to:main::@19 main::@19: scope:[main] from main::@14 - [35] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 - [36] if((byte~) main::$14==(byte) 0) goto main::@13 + [37] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 + [38] if((byte~) main::$14==(byte) 0) goto main::@13 to:main::@15 main::@15: scope:[main] from main::@19 - [37] *((byte*) main::screen#2 + (byte) main::i#3) ← (byte) main::ch#2 - [38] (byte) main::i#1 ← ++ (byte) main::i#3 + [39] *((byte*) main::screen#2 + (byte) main::i#3) ← (byte) main::ch#2 + [40] (byte) main::i#1 ← ++ (byte) main::i#3 to:main::@13 main::@13: scope:[main] from main::@15 main::@18 main::@19 - [39] (byte) main::i#6 ← phi( main::@15/(byte) main::i#1 main::@18/(byte) main::i#3 main::@19/(byte) main::i#3 ) - [40] (byte) main::ch#1 ← ++ (byte) main::ch#2 - [41] if((byte) main::ch#1!=(byte) $40) goto main::@12 + [41] (byte) main::i#6 ← phi( main::@15/(byte) main::i#1 main::@18/(byte) main::i#3 main::@19/(byte) main::i#3 ) + [42] (byte) main::ch#1 ← ++ (byte) main::ch#2 + [43] if((byte) main::ch#1!=(byte) $40) goto main::@12 to:main::@16 main::@16: scope:[main] from main::@13 main::@16 - [42] (byte) main::i#4 ← phi( main::@13/(byte) main::i#6 main::@16/(byte) main::i#2 ) - [43] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' - [44] (byte) main::i#2 ← ++ (byte) main::i#4 - [45] if((byte) main::i#2<(byte) 5) goto main::@16 + [44] (byte) main::i#4 ← phi( main::@13/(byte) main::i#6 main::@16/(byte) main::i#2 ) + [45] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' + [46] (byte) main::i#2 ← ++ (byte) main::i#4 + [47] if((byte) main::i#2<(byte) 5) goto main::@16 to:main::@4 main::@7: scope:[main] from main::@6 - [46] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' + [48] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' to:main::@8 -main::@2: scope:[main] from main::@1 - [47] *((byte*) main::sc#2) ← (byte) ' ' - [48] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 - to:main::@1 keyboard_key_pressed: scope:[keyboard_key_pressed] from main::@14 [49] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#0 & (byte) 7 [50] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#0 >> (byte) 3 @@ -1378,15 +1389,15 @@ VARIABLE REGISTER WEIGHTS (byte) main::row_pressed_bits#1 667.3333333333334 (byte) main::row_pressed_bits#2 620.8 (byte*) main::sc -(byte*) main::sc#1 22.0 -(byte*) main::sc#2 14.666666666666666 +(byte*) main::sc#1 16.5 +(byte*) main::sc#4 16.5 (byte*) main::screen (byte*) main::screen#1 71.0 (byte*) main::screen#13 169.53846153846155 (byte*) main::screen#2 10.142857142857142 Initial phi equivalence classes -[ main::sc#2 main::sc#1 ] +[ main::sc#4 main::sc#1 ] [ main::row#2 main::row#1 ] [ main::screen#13 main::screen#1 ] [ main::row_pressed_bits#2 main::row_pressed_bits#1 main::row_pressed_bits#0 ] @@ -1411,7 +1422,7 @@ Added variable keyboard_key_pressed::return#0 to zero page equivalence class [ k Added variable keyboard_matrix_read::return#0 to zero page equivalence class [ keyboard_matrix_read::return#0 ] Added variable keyboard_get_keycode::return#0 to zero page equivalence class [ keyboard_get_keycode::return#0 ] Complete equivalence classes -[ main::sc#2 main::sc#1 ] +[ main::sc#4 main::sc#1 ] [ main::row#2 main::row#1 ] [ main::screen#13 main::screen#1 ] [ main::row_pressed_bits#2 main::row_pressed_bits#1 main::row_pressed_bits#0 ] @@ -1435,7 +1446,7 @@ Complete equivalence classes [ keyboard_key_pressed::return#0 ] [ keyboard_matrix_read::return#0 ] [ keyboard_get_keycode::return#0 ] -Allocated zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] +Allocated zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] Allocated zp ZP_BYTE:4 [ main::row#2 main::row#1 ] Allocated zp ZP_WORD:5 [ main::screen#13 main::screen#1 ] Allocated zp ZP_BYTE:7 [ main::row_pressed_bits#2 main::row_pressed_bits#1 main::row_pressed_bits#0 ] @@ -1557,120 +1568,136 @@ main: { .label key = $12 .label ch = 9 .label i = $a - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::sc#2 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::sc#4 = (byte*) 1024 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$400 sta sc lda #>$400 sta sc+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((byte*) main::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + // [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: jmp b1 // Clear screen // main::@1 b1: - // [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 + // [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 lda sc+1 cmp #>$400+$3e8 - bcc b2 + bcc b2_from_b1 bne !+ lda sc cmp #<$400+$3e8 - bcc b2 + bcc b2_from_b1 !: - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: jmp b3 // main::@3 b3: - // [8] call keyboard_init + // [10] call keyboard_init jsr keyboard_init jmp b4 // main::@4 b4: - // [9] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp RASTER bne b4 - // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] b5_from_b4: - // [10] phi (byte*) main::screen#13 = (byte*) 1024 [phi:main::@4->main::@5#0] -- pbuz1=pbuc1 + // [12] phi (byte*) main::screen#13 = (byte*) 1024 [phi:main::@4->main::@5#0] -- pbuz1=pbuc1 lda #<$400 sta screen lda #>$400 sta screen+1 - // [10] phi (byte) main::row#2 = (byte) 0 [phi:main::@4->main::@5#1] -- vbuz1=vbuc1 + // [12] phi (byte) main::row#2 = (byte) 0 [phi:main::@4->main::@5#1] -- vbuz1=vbuc1 lda #0 sta row jmp b5 // Read & print keyboard matrix - // [10] phi from main::@10 to main::@5 [phi:main::@10->main::@5] + // [12] phi from main::@10 to main::@5 [phi:main::@10->main::@5] b5_from_b10: - // [10] phi (byte*) main::screen#13 = (byte*) main::screen#1 [phi:main::@10->main::@5#0] -- register_copy - // [10] phi (byte) main::row#2 = (byte) main::row#1 [phi:main::@10->main::@5#1] -- register_copy + // [12] phi (byte*) main::screen#13 = (byte*) main::screen#1 [phi:main::@10->main::@5#0] -- register_copy + // [12] phi (byte) main::row#2 = (byte) main::row#1 [phi:main::@10->main::@5#1] -- register_copy jmp b5 // main::@5 b5: - // [11] (byte) keyboard_matrix_read::rowid#1 ← (byte) main::row#2 -- vbuz1=vbuz2 + // [13] (byte) keyboard_matrix_read::rowid#1 ← (byte) main::row#2 -- vbuz1=vbuz2 lda row sta keyboard_matrix_read.rowid - // [12] call keyboard_matrix_read + // [14] call keyboard_matrix_read // [57] phi from main::@5 to keyboard_matrix_read [phi:main::@5->keyboard_matrix_read] keyboard_matrix_read_from_b5: // [57] phi (byte) keyboard_matrix_read::rowid#2 = (byte) keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- register_copy jsr keyboard_matrix_read - // [13] (byte) keyboard_matrix_read::return#3 ← (byte) keyboard_matrix_read::return#0 -- vbuz1=vbuz2 + // [15] (byte) keyboard_matrix_read::return#3 ← (byte) keyboard_matrix_read::return#0 -- vbuz1=vbuz2 lda keyboard_matrix_read.return sta keyboard_matrix_read.return_3 jmp b17 // main::@17 b17: - // [14] (byte) main::row_pressed_bits#0 ← (byte) keyboard_matrix_read::return#3 -- vbuz1=vbuz2 + // [16] (byte) main::row_pressed_bits#0 ← (byte) keyboard_matrix_read::return#3 -- vbuz1=vbuz2 lda keyboard_matrix_read.return_3 sta row_pressed_bits - // [15] phi from main::@17 to main::@6 [phi:main::@17->main::@6] + // [17] phi from main::@17 to main::@6 [phi:main::@17->main::@6] b6_from_b17: - // [15] phi (byte) main::col#2 = (byte) 0 [phi:main::@17->main::@6#0] -- vbuz1=vbuc1 + // [17] phi (byte) main::col#2 = (byte) 0 [phi:main::@17->main::@6#0] -- vbuz1=vbuc1 lda #0 sta col - // [15] phi (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#0 [phi:main::@17->main::@6#1] -- register_copy + // [17] phi (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#0 [phi:main::@17->main::@6#1] -- register_copy jmp b6 - // [15] phi from main::@8 to main::@6 [phi:main::@8->main::@6] + // [17] phi from main::@8 to main::@6 [phi:main::@8->main::@6] b6_from_b8: - // [15] phi (byte) main::col#2 = (byte) main::col#1 [phi:main::@8->main::@6#0] -- register_copy - // [15] phi (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#1 [phi:main::@8->main::@6#1] -- register_copy + // [17] phi (byte) main::col#2 = (byte) main::col#1 [phi:main::@8->main::@6#0] -- register_copy + // [17] phi (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#1 [phi:main::@8->main::@6#1] -- register_copy jmp b6 // main::@6 b6: - // [16] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 + // [18] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 lda #$80 and row_pressed_bits sta _4 - // [17] if((byte~) main::$4!=(byte) 0) goto main::@7 -- vbuz1_neq_0_then_la1 + // [19] if((byte~) main::$4!=(byte) 0) goto main::@7 -- vbuz1_neq_0_then_la1 lda _4 cmp #0 bne b7 jmp b9 // main::@9 b9: - // [18] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' -- pbuz1_derefidx_vbuz2=vbuc1 + // [20] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' -- pbuz1_derefidx_vbuz2=vbuc1 lda #'0' ldy col sta (screen),y jmp b8 // main::@8 b8: - // [19] (byte) main::row_pressed_bits#1 ← (byte) main::row_pressed_bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 + // [21] (byte) main::row_pressed_bits#1 ← (byte) main::row_pressed_bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 asl row_pressed_bits - // [20] (byte) main::col#1 ← ++ (byte) main::col#2 -- vbuz1=_inc_vbuz1 + // [22] (byte) main::col#1 ← ++ (byte) main::col#2 -- vbuz1=_inc_vbuz1 inc col - // [21] if((byte) main::col#1!=(byte) 8) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 + // [23] if((byte) main::col#1!=(byte) 8) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp col bne b6_from_b8 jmp b10 // main::@10 b10: - // [22] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [24] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen @@ -1678,16 +1705,16 @@ main: { bcc !+ inc screen+1 !: - // [23] (byte) main::row#1 ← ++ (byte) main::row#2 -- vbuz1=_inc_vbuz1 + // [25] (byte) main::row#1 ← ++ (byte) main::row#2 -- vbuz1=_inc_vbuz1 inc row - // [24] if((byte) main::row#1!=(byte) 8) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 + // [26] if((byte) main::row#1!=(byte) 8) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp row bne b5_from_b10 jmp b11 // main::@11 b11: - // [25] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 -- pbuz1=pbuz2_plus_vbuc1 + // [27] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 -- pbuz1=pbuz2_plus_vbuc1 lda #$28 clc adc screen @@ -1695,125 +1722,110 @@ main: { lda #0 adc screen+1 sta screen_2+1 - // [26] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + // [28] phi from main::@11 to main::@12 [phi:main::@11->main::@12] b12_from_b11: - // [26] phi (byte) main::i#3 = (byte) 0 [phi:main::@11->main::@12#0] -- vbuz1=vbuc1 + // [28] phi (byte) main::i#3 = (byte) 0 [phi:main::@11->main::@12#0] -- vbuz1=vbuc1 lda #0 sta i - // [26] phi (byte) main::ch#2 = (byte) 0 [phi:main::@11->main::@12#1] -- vbuz1=vbuc1 + // [28] phi (byte) main::ch#2 = (byte) 0 [phi:main::@11->main::@12#1] -- vbuz1=vbuc1 lda #0 sta ch jmp b12 - // [26] phi from main::@13 to main::@12 [phi:main::@13->main::@12] + // [28] phi from main::@13 to main::@12 [phi:main::@13->main::@12] b12_from_b13: - // [26] phi (byte) main::i#3 = (byte) main::i#6 [phi:main::@13->main::@12#0] -- register_copy - // [26] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@13->main::@12#1] -- register_copy + // [28] phi (byte) main::i#3 = (byte) main::i#6 [phi:main::@13->main::@12#0] -- register_copy + // [28] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@13->main::@12#1] -- register_copy jmp b12 // main::@12 b12: - // [27] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 -- vbuz1=vbuz2 + // [29] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 -- vbuz1=vbuz2 lda ch sta keyboard_get_keycode.ch - // [28] call keyboard_get_keycode + // [30] call keyboard_get_keycode jsr keyboard_get_keycode - // [29] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 -- vbuz1=vbuz2 + // [31] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 -- vbuz1=vbuz2 lda keyboard_get_keycode.return sta keyboard_get_keycode.return_2 jmp b18 // main::@18 b18: - // [30] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 -- vbuz1=vbuz2 + // [32] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 -- vbuz1=vbuz2 lda keyboard_get_keycode.return_2 sta key - // [31] if((byte) main::key#0==(byte) $3f) goto main::@13 -- vbuz1_eq_vbuc1_then_la1 + // [33] if((byte) main::key#0==(byte) $3f) goto main::@13 -- vbuz1_eq_vbuc1_then_la1 lda #$3f cmp key beq b13_from_b18 jmp b14 // main::@14 b14: - // [32] (byte) keyboard_key_pressed::key#0 ← (byte) main::key#0 -- vbuz1=vbuz2 + // [34] (byte) keyboard_key_pressed::key#0 ← (byte) main::key#0 -- vbuz1=vbuz2 lda key sta keyboard_key_pressed.key - // [33] call keyboard_key_pressed + // [35] call keyboard_key_pressed jsr keyboard_key_pressed - // [34] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [36] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 lda keyboard_key_pressed.return sta keyboard_key_pressed.return_2 jmp b19 // main::@19 b19: - // [35] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 -- vbuz1=vbuz2 + // [37] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 -- vbuz1=vbuz2 lda keyboard_key_pressed.return_2 sta _14 - // [36] if((byte~) main::$14==(byte) 0) goto main::@13 -- vbuz1_eq_0_then_la1 + // [38] if((byte~) main::$14==(byte) 0) goto main::@13 -- vbuz1_eq_0_then_la1 lda _14 cmp #0 beq b13_from_b19 jmp b15 // main::@15 b15: - // [37] *((byte*) main::screen#2 + (byte) main::i#3) ← (byte) main::ch#2 -- pbuz1_derefidx_vbuz2=vbuz3 + // [39] *((byte*) main::screen#2 + (byte) main::i#3) ← (byte) main::ch#2 -- pbuz1_derefidx_vbuz2=vbuz3 lda ch ldy i sta (screen_2),y - // [38] (byte) main::i#1 ← ++ (byte) main::i#3 -- vbuz1=_inc_vbuz1 + // [40] (byte) main::i#1 ← ++ (byte) main::i#3 -- vbuz1=_inc_vbuz1 inc i - // [39] phi from main::@15 main::@18 main::@19 to main::@13 [phi:main::@15/main::@18/main::@19->main::@13] + // [41] phi from main::@15 main::@18 main::@19 to main::@13 [phi:main::@15/main::@18/main::@19->main::@13] b13_from_b15: b13_from_b18: b13_from_b19: - // [39] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@15/main::@18/main::@19->main::@13#0] -- register_copy + // [41] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@15/main::@18/main::@19->main::@13#0] -- register_copy jmp b13 // main::@13 b13: - // [40] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 + // [42] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 inc ch - // [41] if((byte) main::ch#1!=(byte) $40) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 + // [43] if((byte) main::ch#1!=(byte) $40) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 lda #$40 cmp ch bne b12_from_b13 - // [42] phi from main::@13 main::@16 to main::@16 [phi:main::@13/main::@16->main::@16] + // [44] phi from main::@13 main::@16 to main::@16 [phi:main::@13/main::@16->main::@16] b16_from_b13: b16_from_b16: - // [42] phi (byte) main::i#4 = (byte) main::i#6 [phi:main::@13/main::@16->main::@16#0] -- register_copy + // [44] phi (byte) main::i#4 = (byte) main::i#6 [phi:main::@13/main::@16->main::@16#0] -- register_copy jmp b16 // Add some spaces // main::@16 b16: - // [43] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 + // [45] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 lda #' ' ldy i sta (screen_2),y - // [44] (byte) main::i#2 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 + // [46] (byte) main::i#2 ← ++ (byte) main::i#4 -- vbuz1=_inc_vbuz1 inc i - // [45] if((byte) main::i#2<(byte) 5) goto main::@16 -- vbuz1_lt_vbuc1_then_la1 + // [47] if((byte) main::i#2<(byte) 5) goto main::@16 -- vbuz1_lt_vbuc1_then_la1 lda i cmp #5 bcc b16_from_b16 jmp b4 // main::@7 b7: - // [46] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' -- pbuz1_derefidx_vbuz2=vbuc1 + // [48] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' -- pbuz1_derefidx_vbuz2=vbuc1 lda #'1' ldy col sta (screen),y jmp b8 - // main::@2 - b2: - // [47] *((byte*) main::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // [48] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // keyboard_key_pressed // Determines whether a specific key is currently pressed by accessing the matrix directly @@ -1939,41 +1951,41 @@ keyboard_init: { keyboard_char_keycodes: .byte KEY_AT, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, $3f, KEY_POUND, $3f, KEY_ARROW_UP, KEY_ARROW_LEFT, KEY_SPACE, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK, KEY_PLUS, KEY_COMMA, KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_COLON, KEY_SEMICOLON, $3f, KEY_EQUALS, $3f, $3f REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a -Statement [9] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [18] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ( main:2 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ) always clobbers reg byte a +Statement [6] *((byte*) main::sc#4) ← (byte) ' ' [ main::sc#4 ] ( main:2 [ main::sc#4 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a +Statement [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [20] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ( main:2 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::row#2 main::row#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ main::row_pressed_bits#2 main::row_pressed_bits#1 main::row_pressed_bits#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ main::col#2 main::col#1 ] -Statement [22] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 [ main::row#2 main::screen#1 ] ( main:2 [ main::row#2 main::screen#1 ] ) always clobbers reg byte a -Statement [25] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 [ main::screen#2 ] ( main:2 [ main::screen#2 ] ) always clobbers reg byte a -Statement [43] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' [ main::screen#2 main::i#4 ] ( main:2 [ main::screen#2 main::i#4 ] ) always clobbers reg byte a +Statement [24] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 [ main::row#2 main::screen#1 ] ( main:2 [ main::row#2 main::screen#1 ] ) always clobbers reg byte a +Statement [27] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 [ main::screen#2 ] ( main:2 [ main::screen#2 ] ) always clobbers reg byte a +Statement [45] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' [ main::screen#2 main::i#4 ] ( main:2 [ main::screen#2 main::i#4 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ main::i#4 main::i#3 main::i#6 main::i#1 main::i#2 ] -Statement [46] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ( main:2 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ) always clobbers reg byte a -Statement [47] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a reg byte y -Statement [50] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#0 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:33 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a +Statement [48] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ( main:2 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ) always clobbers reg byte a +Statement [50] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#0 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:35 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ main::ch#2 main::ch#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ keyboard_key_pressed::colidx#0 ] -Statement [58] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#2) [ ] ( main:2::keyboard_matrix_read:12 [ main::row#2 main::screen#13 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a -Statement [59] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_matrix_read:12 [ main::row#2 main::screen#13 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [63] *((const byte*) CIA1_PORT_A_DDR#0) ← (byte) $ff [ ] ( main:2::keyboard_init:8 [ ] ) always clobbers reg byte a -Statement [64] *((const byte*) CIA1_PORT_B_DDR#0) ← (byte) 0 [ ] ( main:2::keyboard_init:8 [ ] ) always clobbers reg byte a -Statement [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a -Statement [9] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [16] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 main::$4 ] ( main:2 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 main::$4 ] ) always clobbers reg byte a -Statement [18] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ( main:2 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ) always clobbers reg byte a -Statement [22] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 [ main::row#2 main::screen#1 ] ( main:2 [ main::row#2 main::screen#1 ] ) always clobbers reg byte a -Statement [25] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 [ main::screen#2 ] ( main:2 [ main::screen#2 ] ) always clobbers reg byte a -Statement [37] *((byte*) main::screen#2 + (byte) main::i#3) ← (byte) main::ch#2 [ main::screen#2 main::ch#2 main::i#3 ] ( main:2 [ main::screen#2 main::ch#2 main::i#3 ] ) always clobbers reg byte a -Statement [43] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' [ main::screen#2 main::i#4 ] ( main:2 [ main::screen#2 main::i#4 ] ) always clobbers reg byte a -Statement [46] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ( main:2 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ) always clobbers reg byte a -Statement [47] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a reg byte y -Statement [50] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#0 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:33 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a -Statement [58] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#2) [ ] ( main:2::keyboard_matrix_read:12 [ main::row#2 main::screen#13 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a -Statement [59] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_matrix_read:12 [ main::row#2 main::screen#13 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [63] *((const byte*) CIA1_PORT_A_DDR#0) ← (byte) $ff [ ] ( main:2::keyboard_init:8 [ ] ) always clobbers reg byte a -Statement [64] *((const byte*) CIA1_PORT_B_DDR#0) ← (byte) 0 [ ] ( main:2::keyboard_init:8 [ ] ) always clobbers reg byte a -Potential registers zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] : zp ZP_WORD:2 , +Statement [58] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#2) [ ] ( main:2::keyboard_matrix_read:14 [ main::row#2 main::screen#13 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a +Statement [59] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_matrix_read:14 [ main::row#2 main::screen#13 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [63] *((const byte*) CIA1_PORT_A_DDR#0) ← (byte) $ff [ ] ( main:2::keyboard_init:10 [ ] ) always clobbers reg byte a +Statement [64] *((const byte*) CIA1_PORT_B_DDR#0) ← (byte) 0 [ ] ( main:2::keyboard_init:10 [ ] ) always clobbers reg byte a +Statement [6] *((byte*) main::sc#4) ← (byte) ' ' [ main::sc#4 ] ( main:2 [ main::sc#4 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a +Statement [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [18] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 main::$4 ] ( main:2 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 main::$4 ] ) always clobbers reg byte a +Statement [20] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ( main:2 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ) always clobbers reg byte a +Statement [24] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 [ main::row#2 main::screen#1 ] ( main:2 [ main::row#2 main::screen#1 ] ) always clobbers reg byte a +Statement [27] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 [ main::screen#2 ] ( main:2 [ main::screen#2 ] ) always clobbers reg byte a +Statement [39] *((byte*) main::screen#2 + (byte) main::i#3) ← (byte) main::ch#2 [ main::screen#2 main::ch#2 main::i#3 ] ( main:2 [ main::screen#2 main::ch#2 main::i#3 ] ) always clobbers reg byte a +Statement [45] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' [ main::screen#2 main::i#4 ] ( main:2 [ main::screen#2 main::i#4 ] ) always clobbers reg byte a +Statement [48] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ( main:2 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ) always clobbers reg byte a +Statement [50] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#0 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:35 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a +Statement [58] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#2) [ ] ( main:2::keyboard_matrix_read:14 [ main::row#2 main::screen#13 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a +Statement [59] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_matrix_read:14 [ main::row#2 main::screen#13 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [63] *((const byte*) CIA1_PORT_A_DDR#0) ← (byte) $ff [ ] ( main:2::keyboard_init:10 [ ] ) always clobbers reg byte a +Statement [64] *((const byte*) CIA1_PORT_B_DDR#0) ← (byte) 0 [ ] ( main:2::keyboard_init:10 [ ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_BYTE:4 [ main::row#2 main::row#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , Potential registers zp ZP_WORD:5 [ main::screen#13 main::screen#1 ] : zp ZP_WORD:5 , Potential registers zp ZP_BYTE:7 [ main::row_pressed_bits#2 main::row_pressed_bits#1 main::row_pressed_bits#0 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , @@ -1999,34 +2011,34 @@ Potential registers zp ZP_BYTE:27 [ keyboard_matrix_read::return#0 ] : zp ZP_BYT Potential registers zp ZP_BYTE:28 [ keyboard_get_keycode::return#0 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 2,168.83: zp ZP_BYTE:8 [ main::col#2 main::col#1 ] 2,002: zp ZP_BYTE:13 [ main::$4 ] 1,490.13: zp ZP_BYTE:7 [ main::row_pressed_bits#2 main::row_pressed_bits#1 main::row_pressed_bits#0 ] 765.92: zp ZP_BYTE:10 [ main::i#4 main::i#3 main::i#6 main::i#1 main::i#2 ] 240.54: zp ZP_WORD:5 [ main::screen#13 main::screen#1 ] 202: zp ZP_BYTE:21 [ main::$14 ] 180.36: zp ZP_BYTE:9 [ main::ch#2 main::ch#1 ] 173.14: zp ZP_BYTE:4 [ main::row#2 main::row#1 ] 151.5: zp ZP_BYTE:18 [ main::key#0 ] 36.67: zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] 10.14: zp ZP_WORD:14 [ main::screen#2 ] +Uplift Scope [main] 2,168.83: zp ZP_BYTE:8 [ main::col#2 main::col#1 ] 2,002: zp ZP_BYTE:13 [ main::$4 ] 1,490.13: zp ZP_BYTE:7 [ main::row_pressed_bits#2 main::row_pressed_bits#1 main::row_pressed_bits#0 ] 765.92: zp ZP_BYTE:10 [ main::i#4 main::i#3 main::i#6 main::i#1 main::i#2 ] 240.54: zp ZP_WORD:5 [ main::screen#13 main::screen#1 ] 202: zp ZP_BYTE:21 [ main::$14 ] 180.36: zp ZP_BYTE:9 [ main::ch#2 main::ch#1 ] 173.14: zp ZP_BYTE:4 [ main::row#2 main::row#1 ] 151.5: zp ZP_BYTE:18 [ main::key#0 ] 33: zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] 10.14: zp ZP_WORD:14 [ main::screen#2 ] Uplift Scope [keyboard_matrix_read] 311: zp ZP_BYTE:11 [ keyboard_matrix_read::rowid#2 keyboard_matrix_read::rowid#0 keyboard_matrix_read::rowid#1 ] 202: zp ZP_BYTE:12 [ keyboard_matrix_read::return#3 ] 26.25: zp ZP_BYTE:27 [ keyboard_matrix_read::return#0 ] 4: zp ZP_BYTE:24 [ keyboard_matrix_read::return#2 ] Uplift Scope [keyboard_get_keycode] 202: zp ZP_BYTE:17 [ keyboard_get_keycode::return#2 ] 103: zp ZP_BYTE:16 [ keyboard_get_keycode::ch#0 ] 34.33: zp ZP_BYTE:28 [ keyboard_get_keycode::return#0 ] Uplift Scope [keyboard_key_pressed] 202: zp ZP_BYTE:20 [ keyboard_key_pressed::return#2 ] 52.5: zp ZP_BYTE:19 [ keyboard_key_pressed::key#0 ] 34.33: zp ZP_BYTE:26 [ keyboard_key_pressed::return#0 ] 4: zp ZP_BYTE:23 [ keyboard_key_pressed::rowidx#0 ] 4: zp ZP_BYTE:25 [ keyboard_key_pressed::$2 ] 0.67: zp ZP_BYTE:22 [ keyboard_key_pressed::colidx#0 ] Uplift Scope [keyboard_init] Uplift Scope [] -Uplifting [main] best 80258 combination reg byte y [ main::col#2 main::col#1 ] reg byte a [ main::$4 ] reg byte x [ main::row_pressed_bits#2 main::row_pressed_bits#1 main::row_pressed_bits#0 ] reg byte x [ main::i#4 main::i#3 main::i#6 main::i#1 main::i#2 ] zp ZP_WORD:5 [ main::screen#13 main::screen#1 ] zp ZP_BYTE:21 [ main::$14 ] zp ZP_BYTE:9 [ main::ch#2 main::ch#1 ] zp ZP_BYTE:4 [ main::row#2 main::row#1 ] zp ZP_BYTE:18 [ main::key#0 ] zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] zp ZP_WORD:14 [ main::screen#2 ] +Uplifting [main] best 80288 combination reg byte y [ main::col#2 main::col#1 ] reg byte a [ main::$4 ] reg byte x [ main::row_pressed_bits#2 main::row_pressed_bits#1 main::row_pressed_bits#0 ] reg byte x [ main::i#4 main::i#3 main::i#6 main::i#1 main::i#2 ] zp ZP_WORD:5 [ main::screen#13 main::screen#1 ] zp ZP_BYTE:21 [ main::$14 ] zp ZP_BYTE:9 [ main::ch#2 main::ch#1 ] zp ZP_BYTE:4 [ main::row#2 main::row#1 ] zp ZP_BYTE:18 [ main::key#0 ] zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] zp ZP_WORD:14 [ main::screen#2 ] Limited combination testing to 100 combinations of 15552 possible. -Uplifting [keyboard_matrix_read] best 79240 combination reg byte y [ keyboard_matrix_read::rowid#2 keyboard_matrix_read::rowid#0 keyboard_matrix_read::rowid#1 ] reg byte a [ keyboard_matrix_read::return#3 ] reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ] +Uplifting [keyboard_matrix_read] best 79270 combination reg byte y [ keyboard_matrix_read::rowid#2 keyboard_matrix_read::rowid#0 keyboard_matrix_read::rowid#1 ] reg byte a [ keyboard_matrix_read::return#3 ] reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [keyboard_get_keycode] best 78034 combination reg byte a [ keyboard_get_keycode::return#2 ] reg byte y [ keyboard_get_keycode::ch#0 ] reg byte a [ keyboard_get_keycode::return#0 ] -Uplifting [keyboard_key_pressed] best 76825 combination reg byte a [ keyboard_key_pressed::return#2 ] reg byte y [ keyboard_key_pressed::key#0 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::rowidx#0 ] zp ZP_BYTE:25 [ keyboard_key_pressed::$2 ] zp ZP_BYTE:22 [ keyboard_key_pressed::colidx#0 ] +Uplifting [keyboard_get_keycode] best 78064 combination reg byte a [ keyboard_get_keycode::return#2 ] reg byte y [ keyboard_get_keycode::ch#0 ] reg byte a [ keyboard_get_keycode::return#0 ] +Uplifting [keyboard_key_pressed] best 76855 combination reg byte a [ keyboard_key_pressed::return#2 ] reg byte y [ keyboard_key_pressed::key#0 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::rowidx#0 ] zp ZP_BYTE:25 [ keyboard_key_pressed::$2 ] zp ZP_BYTE:22 [ keyboard_key_pressed::colidx#0 ] Limited combination testing to 100 combinations of 3072 possible. -Uplifting [keyboard_init] best 76825 combination -Uplifting [] best 76825 combination +Uplifting [keyboard_init] best 76855 combination +Uplifting [] best 76855 combination Attempting to uplift remaining variables inzp ZP_BYTE:21 [ main::$14 ] -Uplifting [main] best 76225 combination reg byte a [ main::$14 ] +Uplifting [main] best 76255 combination reg byte a [ main::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:9 [ main::ch#2 main::ch#1 ] -Uplifting [main] best 76225 combination zp ZP_BYTE:9 [ main::ch#2 main::ch#1 ] +Uplifting [main] best 76255 combination zp ZP_BYTE:9 [ main::ch#2 main::ch#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ main::row#2 main::row#1 ] -Uplifting [main] best 76225 combination zp ZP_BYTE:4 [ main::row#2 main::row#1 ] +Uplifting [main] best 76255 combination zp ZP_BYTE:4 [ main::row#2 main::row#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:18 [ main::key#0 ] -Uplifting [main] best 75525 combination reg byte a [ main::key#0 ] +Uplifting [main] best 75555 combination reg byte a [ main::key#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:25 [ keyboard_key_pressed::$2 ] -Uplifting [keyboard_key_pressed] best 75519 combination reg byte a [ keyboard_key_pressed::$2 ] +Uplifting [keyboard_key_pressed] best 75549 combination reg byte a [ keyboard_key_pressed::$2 ] Attempting to uplift remaining variables inzp ZP_BYTE:22 [ keyboard_key_pressed::colidx#0 ] -Uplifting [keyboard_key_pressed] best 75519 combination zp ZP_BYTE:22 [ keyboard_key_pressed::colidx#0 ] +Uplifting [keyboard_key_pressed] best 75549 combination zp ZP_BYTE:22 [ keyboard_key_pressed::colidx#0 ] Coalescing zero page register [ zp ZP_WORD:5 [ main::screen#13 main::screen#1 ] ] with [ zp ZP_WORD:14 [ main::screen#2 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:22 [ keyboard_key_pressed::colidx#0 ] ] with [ zp ZP_BYTE:4 [ main::row#2 main::row#1 ] ] Allocated (was zp ZP_WORD:5) zp ZP_WORD:4 [ main::screen#13 main::screen#1 main::screen#2 ] @@ -2122,113 +2134,129 @@ main: { .label screen = 4 .label row = 7 .label ch = 6 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte*) main::sc#2 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte*) main::sc#4 = (byte*) 1024 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$400 sta sc lda #>$400 sta sc+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] *((byte*) main::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + // [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: jmp b1 // Clear screen // main::@1 b1: - // [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 + // [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 lda sc+1 cmp #>$400+$3e8 - bcc b2 + bcc b2_from_b1 bne !+ lda sc cmp #<$400+$3e8 - bcc b2 + bcc b2_from_b1 !: - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: jmp b3 // main::@3 b3: - // [8] call keyboard_init + // [10] call keyboard_init jsr keyboard_init jmp b4 // main::@4 b4: - // [9] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp RASTER bne b4 - // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] b5_from_b4: - // [10] phi (byte*) main::screen#13 = (byte*) 1024 [phi:main::@4->main::@5#0] -- pbuz1=pbuc1 + // [12] phi (byte*) main::screen#13 = (byte*) 1024 [phi:main::@4->main::@5#0] -- pbuz1=pbuc1 lda #<$400 sta screen lda #>$400 sta screen+1 - // [10] phi (byte) main::row#2 = (byte) 0 [phi:main::@4->main::@5#1] -- vbuz1=vbuc1 + // [12] phi (byte) main::row#2 = (byte) 0 [phi:main::@4->main::@5#1] -- vbuz1=vbuc1 lda #0 sta row jmp b5 // Read & print keyboard matrix - // [10] phi from main::@10 to main::@5 [phi:main::@10->main::@5] + // [12] phi from main::@10 to main::@5 [phi:main::@10->main::@5] b5_from_b10: - // [10] phi (byte*) main::screen#13 = (byte*) main::screen#1 [phi:main::@10->main::@5#0] -- register_copy - // [10] phi (byte) main::row#2 = (byte) main::row#1 [phi:main::@10->main::@5#1] -- register_copy + // [12] phi (byte*) main::screen#13 = (byte*) main::screen#1 [phi:main::@10->main::@5#0] -- register_copy + // [12] phi (byte) main::row#2 = (byte) main::row#1 [phi:main::@10->main::@5#1] -- register_copy jmp b5 // main::@5 b5: - // [11] (byte) keyboard_matrix_read::rowid#1 ← (byte) main::row#2 -- vbuyy=vbuz1 + // [13] (byte) keyboard_matrix_read::rowid#1 ← (byte) main::row#2 -- vbuyy=vbuz1 ldy row - // [12] call keyboard_matrix_read + // [14] call keyboard_matrix_read // [57] phi from main::@5 to keyboard_matrix_read [phi:main::@5->keyboard_matrix_read] keyboard_matrix_read_from_b5: // [57] phi (byte) keyboard_matrix_read::rowid#2 = (byte) keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- register_copy jsr keyboard_matrix_read - // [13] (byte) keyboard_matrix_read::return#3 ← (byte) keyboard_matrix_read::return#0 + // [15] (byte) keyboard_matrix_read::return#3 ← (byte) keyboard_matrix_read::return#0 jmp b17 // main::@17 b17: - // [14] (byte) main::row_pressed_bits#0 ← (byte) keyboard_matrix_read::return#3 -- vbuxx=vbuaa + // [16] (byte) main::row_pressed_bits#0 ← (byte) keyboard_matrix_read::return#3 -- vbuxx=vbuaa tax - // [15] phi from main::@17 to main::@6 [phi:main::@17->main::@6] + // [17] phi from main::@17 to main::@6 [phi:main::@17->main::@6] b6_from_b17: - // [15] phi (byte) main::col#2 = (byte) 0 [phi:main::@17->main::@6#0] -- vbuyy=vbuc1 + // [17] phi (byte) main::col#2 = (byte) 0 [phi:main::@17->main::@6#0] -- vbuyy=vbuc1 ldy #0 - // [15] phi (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#0 [phi:main::@17->main::@6#1] -- register_copy + // [17] phi (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#0 [phi:main::@17->main::@6#1] -- register_copy jmp b6 - // [15] phi from main::@8 to main::@6 [phi:main::@8->main::@6] + // [17] phi from main::@8 to main::@6 [phi:main::@8->main::@6] b6_from_b8: - // [15] phi (byte) main::col#2 = (byte) main::col#1 [phi:main::@8->main::@6#0] -- register_copy - // [15] phi (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#1 [phi:main::@8->main::@6#1] -- register_copy + // [17] phi (byte) main::col#2 = (byte) main::col#1 [phi:main::@8->main::@6#0] -- register_copy + // [17] phi (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#1 [phi:main::@8->main::@6#1] -- register_copy jmp b6 // main::@6 b6: - // [16] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 -- vbuaa=vbuxx_band_vbuc1 + // [18] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 -- vbuaa=vbuxx_band_vbuc1 txa and #$80 - // [17] if((byte~) main::$4!=(byte) 0) goto main::@7 -- vbuaa_neq_0_then_la1 + // [19] if((byte~) main::$4!=(byte) 0) goto main::@7 -- vbuaa_neq_0_then_la1 cmp #0 bne b7 jmp b9 // main::@9 b9: - // [18] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' -- pbuz1_derefidx_vbuyy=vbuc1 + // [20] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' -- pbuz1_derefidx_vbuyy=vbuc1 lda #'0' sta (screen),y jmp b8 // main::@8 b8: - // [19] (byte) main::row_pressed_bits#1 ← (byte) main::row_pressed_bits#2 << (byte) 1 -- vbuxx=vbuxx_rol_1 + // [21] (byte) main::row_pressed_bits#1 ← (byte) main::row_pressed_bits#2 << (byte) 1 -- vbuxx=vbuxx_rol_1 txa asl tax - // [20] (byte) main::col#1 ← ++ (byte) main::col#2 -- vbuyy=_inc_vbuyy + // [22] (byte) main::col#1 ← ++ (byte) main::col#2 -- vbuyy=_inc_vbuyy iny - // [21] if((byte) main::col#1!=(byte) 8) goto main::@6 -- vbuyy_neq_vbuc1_then_la1 + // [23] if((byte) main::col#1!=(byte) 8) goto main::@6 -- vbuyy_neq_vbuc1_then_la1 cpy #8 bne b6_from_b8 jmp b10 // main::@10 b10: - // [22] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [24] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen @@ -2236,16 +2264,16 @@ main: { bcc !+ inc screen+1 !: - // [23] (byte) main::row#1 ← ++ (byte) main::row#2 -- vbuz1=_inc_vbuz1 + // [25] (byte) main::row#1 ← ++ (byte) main::row#2 -- vbuz1=_inc_vbuz1 inc row - // [24] if((byte) main::row#1!=(byte) 8) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 + // [26] if((byte) main::row#1!=(byte) 8) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp row bne b5_from_b10 jmp b11 // main::@11 b11: - // [25] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [27] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen @@ -2253,112 +2281,97 @@ main: { bcc !+ inc screen+1 !: - // [26] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + // [28] phi from main::@11 to main::@12 [phi:main::@11->main::@12] b12_from_b11: - // [26] phi (byte) main::i#3 = (byte) 0 [phi:main::@11->main::@12#0] -- vbuxx=vbuc1 + // [28] phi (byte) main::i#3 = (byte) 0 [phi:main::@11->main::@12#0] -- vbuxx=vbuc1 ldx #0 - // [26] phi (byte) main::ch#2 = (byte) 0 [phi:main::@11->main::@12#1] -- vbuz1=vbuc1 + // [28] phi (byte) main::ch#2 = (byte) 0 [phi:main::@11->main::@12#1] -- vbuz1=vbuc1 lda #0 sta ch jmp b12 - // [26] phi from main::@13 to main::@12 [phi:main::@13->main::@12] + // [28] phi from main::@13 to main::@12 [phi:main::@13->main::@12] b12_from_b13: - // [26] phi (byte) main::i#3 = (byte) main::i#6 [phi:main::@13->main::@12#0] -- register_copy - // [26] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@13->main::@12#1] -- register_copy + // [28] phi (byte) main::i#3 = (byte) main::i#6 [phi:main::@13->main::@12#0] -- register_copy + // [28] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@13->main::@12#1] -- register_copy jmp b12 // main::@12 b12: - // [27] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 -- vbuyy=vbuz1 + // [29] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 -- vbuyy=vbuz1 ldy ch - // [28] call keyboard_get_keycode + // [30] call keyboard_get_keycode jsr keyboard_get_keycode - // [29] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 + // [31] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 jmp b18 // main::@18 b18: - // [30] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 - // [31] if((byte) main::key#0==(byte) $3f) goto main::@13 -- vbuaa_eq_vbuc1_then_la1 + // [32] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 + // [33] if((byte) main::key#0==(byte) $3f) goto main::@13 -- vbuaa_eq_vbuc1_then_la1 cmp #$3f beq b13_from_b18 jmp b14 // main::@14 b14: - // [32] (byte) keyboard_key_pressed::key#0 ← (byte) main::key#0 -- vbuyy=vbuaa + // [34] (byte) keyboard_key_pressed::key#0 ← (byte) main::key#0 -- vbuyy=vbuaa tay - // [33] call keyboard_key_pressed + // [35] call keyboard_key_pressed jsr keyboard_key_pressed - // [34] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + // [36] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 jmp b19 // main::@19 b19: - // [35] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 - // [36] if((byte~) main::$14==(byte) 0) goto main::@13 -- vbuaa_eq_0_then_la1 + // [37] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 + // [38] if((byte~) main::$14==(byte) 0) goto main::@13 -- vbuaa_eq_0_then_la1 cmp #0 beq b13_from_b19 jmp b15 // main::@15 b15: - // [37] *((byte*) main::screen#2 + (byte) main::i#3) ← (byte) main::ch#2 -- pbuz1_derefidx_vbuxx=vbuz2 + // [39] *((byte*) main::screen#2 + (byte) main::i#3) ← (byte) main::ch#2 -- pbuz1_derefidx_vbuxx=vbuz2 txa tay lda ch sta (screen),y - // [38] (byte) main::i#1 ← ++ (byte) main::i#3 -- vbuxx=_inc_vbuxx + // [40] (byte) main::i#1 ← ++ (byte) main::i#3 -- vbuxx=_inc_vbuxx inx - // [39] phi from main::@15 main::@18 main::@19 to main::@13 [phi:main::@15/main::@18/main::@19->main::@13] + // [41] phi from main::@15 main::@18 main::@19 to main::@13 [phi:main::@15/main::@18/main::@19->main::@13] b13_from_b15: b13_from_b18: b13_from_b19: - // [39] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@15/main::@18/main::@19->main::@13#0] -- register_copy + // [41] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@15/main::@18/main::@19->main::@13#0] -- register_copy jmp b13 // main::@13 b13: - // [40] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 + // [42] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 inc ch - // [41] if((byte) main::ch#1!=(byte) $40) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 + // [43] if((byte) main::ch#1!=(byte) $40) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 lda #$40 cmp ch bne b12_from_b13 - // [42] phi from main::@13 main::@16 to main::@16 [phi:main::@13/main::@16->main::@16] + // [44] phi from main::@13 main::@16 to main::@16 [phi:main::@13/main::@16->main::@16] b16_from_b13: b16_from_b16: - // [42] phi (byte) main::i#4 = (byte) main::i#6 [phi:main::@13/main::@16->main::@16#0] -- register_copy + // [44] phi (byte) main::i#4 = (byte) main::i#6 [phi:main::@13/main::@16->main::@16#0] -- register_copy jmp b16 // Add some spaces // main::@16 b16: - // [43] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' -- pbuz1_derefidx_vbuxx=vbuc1 + // [45] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' -- pbuz1_derefidx_vbuxx=vbuc1 txa tay lda #' ' sta (screen),y - // [44] (byte) main::i#2 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + // [46] (byte) main::i#2 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx inx - // [45] if((byte) main::i#2<(byte) 5) goto main::@16 -- vbuxx_lt_vbuc1_then_la1 + // [47] if((byte) main::i#2<(byte) 5) goto main::@16 -- vbuxx_lt_vbuc1_then_la1 cpx #5 bcc b16_from_b16 jmp b4 // main::@7 b7: - // [46] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' -- pbuz1_derefidx_vbuyy=vbuc1 + // [48] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' -- pbuz1_derefidx_vbuyy=vbuc1 lda #'1' sta (screen),y jmp b8 - // main::@2 - b2: - // [47] *((byte*) main::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // [48] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // keyboard_key_pressed // Determines whether a specific key is currently pressed by accessing the matrix directly @@ -2462,6 +2475,7 @@ keyboard_init: { ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b4 @@ -2486,6 +2500,8 @@ Removing instruction jmp breturn Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Replacing instruction lda #0 with TXA +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Replacing label b6_from_b8 with b6 Replacing label b5_from_b10 with b5 Replacing label b13_from_b18 with b13 @@ -2495,6 +2511,7 @@ Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: Removing instruction b3_from_b1: Removing instruction b5_from_b10: Removing instruction b6_from_b8: @@ -2505,7 +2522,8 @@ Removing instruction b13_from_b19: Removing instruction b16_from_b13: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction b1: Removing instruction b3: Removing instruction b5_from_b4: Removing instruction keyboard_matrix_read_from_b5: @@ -2520,7 +2538,6 @@ Removing instruction b14: Removing instruction b19: Removing instruction b15: Removing instruction b16: -Removing instruction b1_from_b2: Removing instruction keyboard_matrix_read_from_keyboard_key_pressed: Removing instruction b1: Removing instruction breturn: @@ -2531,16 +2548,15 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Relabelling long label b16_from_b16 to b3 +Relabelling long label b16_from_b16 to b1 Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b2 Removing instruction jmp b5 Removing instruction jmp b6 Removing instruction jmp b12 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [76] bcc b2 to bcs -Fixing long branch [82] bcc b2 to bcs FINAL SYMBOL TABLE (label) @1 @@ -2739,14 +2755,14 @@ FINAL SYMBOL TABLE (byte) main::row_pressed_bits#1 reg byte x 667.3333333333334 (byte) main::row_pressed_bits#2 reg byte x 620.8 (byte*) main::sc -(byte*) main::sc#1 sc zp ZP_WORD:2 22.0 -(byte*) main::sc#2 sc zp ZP_WORD:2 14.666666666666666 +(byte*) main::sc#1 sc zp ZP_WORD:2 16.5 +(byte*) main::sc#4 sc zp ZP_WORD:2 16.5 (byte*) main::screen (byte*) main::screen#1 screen zp ZP_WORD:4 71.0 (byte*) main::screen#13 screen zp ZP_WORD:4 169.53846153846155 (byte*) main::screen#2 screen zp ZP_WORD:4 10.142857142857142 -zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] +zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] zp ZP_WORD:4 [ main::screen#13 main::screen#1 main::screen#2 ] reg byte x [ main::row_pressed_bits#2 main::row_pressed_bits#1 main::row_pressed_bits#0 ] reg byte y [ main::col#2 main::col#1 ] @@ -2771,7 +2787,7 @@ reg byte a [ keyboard_get_keycode::return#0 ] FINAL ASSEMBLER -Score: 56911 +Score: 56821 // File Comments // Test keyboard input - in the keyboard matrix and mapping screen codes to key codes @@ -2852,107 +2868,116 @@ main: { .label screen = 4 .label row = 7 .label ch = 6 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte*) main::sc#2 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte*) main::sc#4 = (byte*) 1024 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$400 sta sc lda #>$400 sta sc+1 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte*) main::sc#4 = (byte*) main::sc#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // *sc = ' ' + // [6] *((byte*) main::sc#4) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + // for(byte* sc = $400; sc<$400+1000;sc++) + // [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#4 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: // Clear screen // main::@1 - b1: - // for(byte* sc = $400; sc<$400+1000;sc++) - // [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 + // [8] if((byte*) main::sc#1<(word)(number) $400+(number) $3e8) goto main::@2 -- pbuz1_lt_vwuc1_then_la1 lda sc+1 cmp #>$400+$3e8 - bcs !b2+ - jmp b2 - !b2: + bcc b2 bne !+ lda sc cmp #<$400+$3e8 - bcs !b2+ - jmp b2 - !b2: + bcc b2 !: - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // keyboard_init() - // [8] call keyboard_init + // [10] call keyboard_init jsr keyboard_init // main::@4 b4: // while (*RASTER!=$ff) - // [9] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp RASTER bne b4 - // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] - // [10] phi (byte*) main::screen#13 = (byte*) 1024 [phi:main::@4->main::@5#0] -- pbuz1=pbuc1 + // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // [12] phi (byte*) main::screen#13 = (byte*) 1024 [phi:main::@4->main::@5#0] -- pbuz1=pbuc1 lda #<$400 sta screen lda #>$400 sta screen+1 - // [10] phi (byte) main::row#2 = (byte) 0 [phi:main::@4->main::@5#1] -- vbuz1=vbuc1 + // [12] phi (byte) main::row#2 = (byte) 0 [phi:main::@4->main::@5#1] -- vbuz1=vbuc1 lda #0 sta row // Read & print keyboard matrix - // [10] phi from main::@10 to main::@5 [phi:main::@10->main::@5] - // [10] phi (byte*) main::screen#13 = (byte*) main::screen#1 [phi:main::@10->main::@5#0] -- register_copy - // [10] phi (byte) main::row#2 = (byte) main::row#1 [phi:main::@10->main::@5#1] -- register_copy + // [12] phi from main::@10 to main::@5 [phi:main::@10->main::@5] + // [12] phi (byte*) main::screen#13 = (byte*) main::screen#1 [phi:main::@10->main::@5#0] -- register_copy + // [12] phi (byte) main::row#2 = (byte) main::row#1 [phi:main::@10->main::@5#1] -- register_copy // main::@5 b5: // keyboard_matrix_read(row) - // [11] (byte) keyboard_matrix_read::rowid#1 ← (byte) main::row#2 -- vbuyy=vbuz1 + // [13] (byte) keyboard_matrix_read::rowid#1 ← (byte) main::row#2 -- vbuyy=vbuz1 ldy row - // [12] call keyboard_matrix_read + // [14] call keyboard_matrix_read // [57] phi from main::@5 to keyboard_matrix_read [phi:main::@5->keyboard_matrix_read] // [57] phi (byte) keyboard_matrix_read::rowid#2 = (byte) keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- register_copy jsr keyboard_matrix_read // keyboard_matrix_read(row) - // [13] (byte) keyboard_matrix_read::return#3 ← (byte) keyboard_matrix_read::return#0 + // [15] (byte) keyboard_matrix_read::return#3 ← (byte) keyboard_matrix_read::return#0 // main::@17 // row_pressed_bits = keyboard_matrix_read(row) - // [14] (byte) main::row_pressed_bits#0 ← (byte) keyboard_matrix_read::return#3 -- vbuxx=vbuaa + // [16] (byte) main::row_pressed_bits#0 ← (byte) keyboard_matrix_read::return#3 -- vbuxx=vbuaa tax - // [15] phi from main::@17 to main::@6 [phi:main::@17->main::@6] - // [15] phi (byte) main::col#2 = (byte) 0 [phi:main::@17->main::@6#0] -- vbuyy=vbuc1 + // [17] phi from main::@17 to main::@6 [phi:main::@17->main::@6] + // [17] phi (byte) main::col#2 = (byte) 0 [phi:main::@17->main::@6#0] -- vbuyy=vbuc1 ldy #0 - // [15] phi (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#0 [phi:main::@17->main::@6#1] -- register_copy - // [15] phi from main::@8 to main::@6 [phi:main::@8->main::@6] - // [15] phi (byte) main::col#2 = (byte) main::col#1 [phi:main::@8->main::@6#0] -- register_copy - // [15] phi (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#1 [phi:main::@8->main::@6#1] -- register_copy + // [17] phi (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#0 [phi:main::@17->main::@6#1] -- register_copy + // [17] phi from main::@8 to main::@6 [phi:main::@8->main::@6] + // [17] phi (byte) main::col#2 = (byte) main::col#1 [phi:main::@8->main::@6#0] -- register_copy + // [17] phi (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#1 [phi:main::@8->main::@6#1] -- register_copy // main::@6 b6: // row_pressed_bits & $80 - // [16] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 -- vbuaa=vbuxx_band_vbuc1 + // [18] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 -- vbuaa=vbuxx_band_vbuc1 txa and #$80 // if( (row_pressed_bits & $80) != 0) - // [17] if((byte~) main::$4!=(byte) 0) goto main::@7 -- vbuaa_neq_0_then_la1 + // [19] if((byte~) main::$4!=(byte) 0) goto main::@7 -- vbuaa_neq_0_then_la1 cmp #0 bne b7 // main::@9 // screen[col] = '0' - // [18] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' -- pbuz1_derefidx_vbuyy=vbuc1 + // [20] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '0' -- pbuz1_derefidx_vbuyy=vbuc1 lda #'0' sta (screen),y // main::@8 b8: // row_pressed_bits = row_pressed_bits * 2 - // [19] (byte) main::row_pressed_bits#1 ← (byte) main::row_pressed_bits#2 << (byte) 1 -- vbuxx=vbuxx_rol_1 + // [21] (byte) main::row_pressed_bits#1 ← (byte) main::row_pressed_bits#2 << (byte) 1 -- vbuxx=vbuxx_rol_1 txa asl tax // for(byte col : 0..7) - // [20] (byte) main::col#1 ← ++ (byte) main::col#2 -- vbuyy=_inc_vbuyy + // [22] (byte) main::col#1 ← ++ (byte) main::col#2 -- vbuyy=_inc_vbuyy iny - // [21] if((byte) main::col#1!=(byte) 8) goto main::@6 -- vbuyy_neq_vbuc1_then_la1 + // [23] if((byte) main::col#1!=(byte) 8) goto main::@6 -- vbuyy_neq_vbuc1_then_la1 cpy #8 bne b6 // main::@10 // screen = screen + 40 - // [22] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [24] (byte*) main::screen#1 ← (byte*) main::screen#13 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen @@ -2961,15 +2986,15 @@ main: { inc screen+1 !: // for(byte row : 0..7) - // [23] (byte) main::row#1 ← ++ (byte) main::row#2 -- vbuz1=_inc_vbuz1 + // [25] (byte) main::row#1 ← ++ (byte) main::row#2 -- vbuz1=_inc_vbuz1 inc row - // [24] if((byte) main::row#1!=(byte) 8) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 + // [26] if((byte) main::row#1!=(byte) 8) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp row bne b5 // main::@11 // screen = screen + 40 - // [25] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [27] (byte*) main::screen#2 ← (byte*) main::screen#1 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen @@ -2977,106 +3002,90 @@ main: { bcc !+ inc screen+1 !: - // [26] phi from main::@11 to main::@12 [phi:main::@11->main::@12] - // [26] phi (byte) main::i#3 = (byte) 0 [phi:main::@11->main::@12#0] -- vbuxx=vbuc1 + // [28] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + // [28] phi (byte) main::i#3 = (byte) 0 [phi:main::@11->main::@12#0] -- vbuxx=vbuc1 ldx #0 - // [26] phi (byte) main::ch#2 = (byte) 0 [phi:main::@11->main::@12#1] -- vbuz1=vbuc1 + // [28] phi (byte) main::ch#2 = (byte) 0 [phi:main::@11->main::@12#1] -- vbuz1=vbuc1 txa sta ch - // [26] phi from main::@13 to main::@12 [phi:main::@13->main::@12] - // [26] phi (byte) main::i#3 = (byte) main::i#6 [phi:main::@13->main::@12#0] -- register_copy - // [26] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@13->main::@12#1] -- register_copy + // [28] phi from main::@13 to main::@12 [phi:main::@13->main::@12] + // [28] phi (byte) main::i#3 = (byte) main::i#6 [phi:main::@13->main::@12#0] -- register_copy + // [28] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@13->main::@12#1] -- register_copy // main::@12 b12: // keyboard_get_keycode(ch) - // [27] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 -- vbuyy=vbuz1 + // [29] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 -- vbuyy=vbuz1 ldy ch - // [28] call keyboard_get_keycode + // [30] call keyboard_get_keycode jsr keyboard_get_keycode - // [29] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 + // [31] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 // main::@18 // key = keyboard_get_keycode(ch) - // [30] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 + // [32] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 // if(key!=$3f) - // [31] if((byte) main::key#0==(byte) $3f) goto main::@13 -- vbuaa_eq_vbuc1_then_la1 + // [33] if((byte) main::key#0==(byte) $3f) goto main::@13 -- vbuaa_eq_vbuc1_then_la1 cmp #$3f beq b13 // main::@14 // keyboard_key_pressed(key) - // [32] (byte) keyboard_key_pressed::key#0 ← (byte) main::key#0 -- vbuyy=vbuaa + // [34] (byte) keyboard_key_pressed::key#0 ← (byte) main::key#0 -- vbuyy=vbuaa tay - // [33] call keyboard_key_pressed + // [35] call keyboard_key_pressed jsr keyboard_key_pressed - // [34] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + // [36] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 // main::@19 - // [35] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 + // [37] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 // if(keyboard_key_pressed(key)!=0) - // [36] if((byte~) main::$14==(byte) 0) goto main::@13 -- vbuaa_eq_0_then_la1 + // [38] if((byte~) main::$14==(byte) 0) goto main::@13 -- vbuaa_eq_0_then_la1 cmp #0 beq b13 // main::@15 // screen[i++] = ch - // [37] *((byte*) main::screen#2 + (byte) main::i#3) ← (byte) main::ch#2 -- pbuz1_derefidx_vbuxx=vbuz2 + // [39] *((byte*) main::screen#2 + (byte) main::i#3) ← (byte) main::ch#2 -- pbuz1_derefidx_vbuxx=vbuz2 txa tay lda ch sta (screen),y // screen[i++] = ch; - // [38] (byte) main::i#1 ← ++ (byte) main::i#3 -- vbuxx=_inc_vbuxx + // [40] (byte) main::i#1 ← ++ (byte) main::i#3 -- vbuxx=_inc_vbuxx inx - // [39] phi from main::@15 main::@18 main::@19 to main::@13 [phi:main::@15/main::@18/main::@19->main::@13] - // [39] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@15/main::@18/main::@19->main::@13#0] -- register_copy + // [41] phi from main::@15 main::@18 main::@19 to main::@13 [phi:main::@15/main::@18/main::@19->main::@13] + // [41] phi (byte) main::i#6 = (byte) main::i#1 [phi:main::@15/main::@18/main::@19->main::@13#0] -- register_copy // main::@13 b13: // for( byte ch : 0..$3f ) - // [40] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 + // [42] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 inc ch - // [41] if((byte) main::ch#1!=(byte) $40) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 + // [43] if((byte) main::ch#1!=(byte) $40) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 lda #$40 cmp ch bne b12 - // [42] phi from main::@13 main::@16 to main::@16 [phi:main::@13/main::@16->main::@16] - b3: - // [42] phi (byte) main::i#4 = (byte) main::i#6 [phi:main::@13/main::@16->main::@16#0] -- register_copy + // [44] phi from main::@13 main::@16 to main::@16 [phi:main::@13/main::@16->main::@16] + b1: + // [44] phi (byte) main::i#4 = (byte) main::i#6 [phi:main::@13/main::@16->main::@16#0] -- register_copy // Add some spaces // main::@16 // screen[i++] = ' ' - // [43] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' -- pbuz1_derefidx_vbuxx=vbuc1 + // [45] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' -- pbuz1_derefidx_vbuxx=vbuc1 txa tay lda #' ' sta (screen),y // screen[i++] = ' '; - // [44] (byte) main::i#2 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx + // [46] (byte) main::i#2 ← ++ (byte) main::i#4 -- vbuxx=_inc_vbuxx inx // while (i<5) - // [45] if((byte) main::i#2<(byte) 5) goto main::@16 -- vbuxx_lt_vbuc1_then_la1 + // [47] if((byte) main::i#2<(byte) 5) goto main::@16 -- vbuxx_lt_vbuc1_then_la1 cpx #5 - bcc b3 + bcc b1 jmp b4 // main::@7 b7: // screen[col] = '1' - // [46] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' -- pbuz1_derefidx_vbuyy=vbuc1 + // [48] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' -- pbuz1_derefidx_vbuyy=vbuc1 lda #'1' sta (screen),y jmp b8 - // main::@2 - b2: - // *sc = ' ' - // [47] *((byte*) main::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - // for(byte* sc = $400; sc<$400+1000;sc++) - // [48] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 } // keyboard_key_pressed // Determines whether a specific key is currently pressed by accessing the matrix directly diff --git a/src/test/ref/test-keyboard.sym b/src/test/ref/test-keyboard.sym index d6f5ff514..62b1a99f6 100644 --- a/src/test/ref/test-keyboard.sym +++ b/src/test/ref/test-keyboard.sym @@ -194,14 +194,14 @@ (byte) main::row_pressed_bits#1 reg byte x 667.3333333333334 (byte) main::row_pressed_bits#2 reg byte x 620.8 (byte*) main::sc -(byte*) main::sc#1 sc zp ZP_WORD:2 22.0 -(byte*) main::sc#2 sc zp ZP_WORD:2 14.666666666666666 +(byte*) main::sc#1 sc zp ZP_WORD:2 16.5 +(byte*) main::sc#4 sc zp ZP_WORD:2 16.5 (byte*) main::screen (byte*) main::screen#1 screen zp ZP_WORD:4 71.0 (byte*) main::screen#13 screen zp ZP_WORD:4 169.53846153846155 (byte*) main::screen#2 screen zp ZP_WORD:4 10.142857142857142 -zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] +zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] zp ZP_WORD:4 [ main::screen#13 main::screen#1 main::screen#2 ] reg byte x [ main::row_pressed_bits#2 main::row_pressed_bits#1 main::row_pressed_bits#0 ] reg byte y [ main::col#2 main::col#1 ] diff --git a/src/test/ref/test-lowhigh.asm b/src/test/ref/test-lowhigh.asm index 22cbad2d4..4b49ffa7d 100644 --- a/src/test/ref/test-lowhigh.asm +++ b/src/test/ref/test-lowhigh.asm @@ -3,11 +3,11 @@ .pc = $80d "Program" .label print_line_cursor = $10 .label print_char_cursor = 8 - .label print_char_cursor_31 = $10 .label print_line_cursor_9 = 6 - .label print_line_cursor_15 = 6 .label print_line_cursor_37 = 6 - .label print_line_cursor_38 = 6 + .label print_char_cursor_74 = $10 + .label print_line_cursor_53 = 6 + .label print_line_cursor_54 = 6 main: { .label _3 = 8 .label _6 = $e @@ -21,13 +21,13 @@ main: { .label dw = 2 jsr print_cls lda #<$400 - sta print_char_cursor_31 + sta print_char_cursor_74 lda #>$400 - sta print_char_cursor_31+1 + sta print_char_cursor_74+1 lda #<$400 - sta print_line_cursor_15 + sta print_line_cursor_37 lda #>$400 - sta print_line_cursor_15+1 + sta print_line_cursor_37+1 lda #<$12345678 sta dw lda #>$12345678 @@ -36,20 +36,6 @@ main: { sta dw+2 lda #>$12345678>>$10 sta dw+3 - b1: - lda dw+3 - cmp #>$12345690>>$10 - bne b2 - lda dw+2 - cmp #<$12345690>>$10 - bne b2 - lda dw+1 - cmp #>$12345690 - bne b2 - lda dw - cmp #<$12345690 - bne b2 - rts b2: lda dw+2 sta _3 @@ -143,11 +129,25 @@ main: { bne !+ inc dw+3 !: + lda dw+3 + cmp #>$12345690>>$10 + bne b17 + lda dw+2 + cmp #<$12345690>>$10 + bne b17 + lda dw+1 + cmp #>$12345690 + bne b17 + lda dw + cmp #<$12345690 + bne b17 + rts + b17: lda print_line_cursor - sta print_line_cursor_38 + sta print_line_cursor_54 lda print_line_cursor+1 - sta print_line_cursor_38+1 - jmp b1 + sta print_line_cursor_54+1 + jmp b2 } // Print a newline print_ln: { @@ -169,9 +169,9 @@ print_ln: { rts b2: lda print_line_cursor - sta print_line_cursor_37 + sta print_line_cursor_53 lda print_line_cursor+1 - sta print_line_cursor_37+1 + sta print_line_cursor_53+1 jmp b1 } // Print a byte as HEX @@ -222,9 +222,9 @@ print_dword: { sta print_word.w lda dw+3 sta print_word.w+1 - lda print_char_cursor_31 + lda print_char_cursor_74 sta print_char_cursor - lda print_char_cursor_31+1 + lda print_char_cursor_74+1 sta print_char_cursor+1 jsr print_word lda dw @@ -250,14 +250,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp # (dword) main::dw#10 - [10] (word~) main::$32 ← (word~) main::$3 + (word) $1111 - [11] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 - [12] (word~) main::$6 ← < (dword) main::dw#10 - [13] (word~) main::$33 ← (word~) main::$6 + (word) $1111 - [14] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 - [15] (dword) print_dword::dw#0 ← (dword) main::dw2#10 - [16] call print_dword + to:main::@2 +main::@2: scope:[main] from main main::@17 + [6] (byte*) print_char_cursor#74 ← phi( main::@17/(byte*) print_line_cursor#1 main/(byte*) 1024 ) + [6] (byte*) print_line_cursor#37 ← phi( main::@17/(byte*~) print_line_cursor#54 main/(byte*) 1024 ) + [6] (dword) main::dw#18 ← phi( main::@17/(dword) main::dw#1 main/(dword) $12345678 ) + [7] (word~) main::$3 ← > (dword) main::dw#18 + [8] (word~) main::$32 ← (word~) main::$3 + (word) $1111 + [9] (dword) main::dw2#1 ← (dword) main::dw#18 hi= (word~) main::$32 + [10] (word~) main::$6 ← < (dword) main::dw#18 + [11] (word~) main::$33 ← (word~) main::$6 + (word) $1111 + [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 + [13] (dword) print_dword::dw#0 ← (dword) main::dw2#10 + [14] call print_dword to:main::@3 main::@3: scope:[main] from main::@2 - [17] phi() - [18] call print_char + [15] phi() + [16] call print_char to:main::@4 main::@4: scope:[main] from main::@3 - [19] (word) print_word::w#2 ← > (dword) main::dw2#10 - [20] call print_word + [17] (word) print_word::w#2 ← > (dword) main::dw2#10 + [18] call print_word to:main::@5 main::@5: scope:[main] from main::@4 - [21] phi() - [22] call print_char + [19] phi() + [20] call print_char to:main::@6 main::@6: scope:[main] from main::@5 - [23] (word) print_word::w#3 ← < (dword) main::dw2#10 - [24] call print_word + [21] (word) print_word::w#3 ← < (dword) main::dw2#10 + [22] call print_word to:main::@7 main::@7: scope:[main] from main::@6 - [25] phi() - [26] call print_char + [23] phi() + [24] call print_char to:main::@8 main::@8: scope:[main] from main::@7 - [27] (word~) main::$16 ← > (dword) main::dw2#10 - [28] (byte) print_byte::b#2 ← > (word~) main::$16 - [29] call print_byte + [25] (word~) main::$16 ← > (dword) main::dw2#10 + [26] (byte) print_byte::b#2 ← > (word~) main::$16 + [27] call print_byte to:main::@9 main::@9: scope:[main] from main::@8 - [30] phi() - [31] call print_char + [28] phi() + [29] call print_char to:main::@10 main::@10: scope:[main] from main::@9 - [32] (word~) main::$20 ← > (dword) main::dw2#10 - [33] (byte) print_byte::b#3 ← < (word~) main::$20 - [34] call print_byte + [30] (word~) main::$20 ← > (dword) main::dw2#10 + [31] (byte) print_byte::b#3 ← < (word~) main::$20 + [32] call print_byte to:main::@11 main::@11: scope:[main] from main::@10 - [35] phi() - [36] call print_char + [33] phi() + [34] call print_char to:main::@12 main::@12: scope:[main] from main::@11 - [37] (word~) main::$24 ← < (dword) main::dw2#10 - [38] (byte) print_byte::b#4 ← > (word~) main::$24 - [39] call print_byte + [35] (word~) main::$24 ← < (dword) main::dw2#10 + [36] (byte) print_byte::b#4 ← > (word~) main::$24 + [37] call print_byte to:main::@13 main::@13: scope:[main] from main::@12 - [40] phi() - [41] call print_char + [38] phi() + [39] call print_char to:main::@14 main::@14: scope:[main] from main::@13 - [42] (word~) main::$28 ← < (dword) main::dw2#10 - [43] (byte) print_byte::b#5 ← < (word~) main::$28 - [44] call print_byte + [40] (word~) main::$28 ← < (dword) main::dw2#10 + [41] (byte) print_byte::b#5 ← < (word~) main::$28 + [42] call print_byte to:main::@15 main::@15: scope:[main] from main::@14 - [45] phi() - [46] call print_ln + [43] phi() + [44] call print_ln to:main::@16 main::@16: scope:[main] from main::@15 - [47] (dword) main::dw#1 ← ++ (dword) main::dw#10 - [48] (byte*~) print_line_cursor#38 ← (byte*) print_line_cursor#1 + [45] (dword) main::dw#1 ← ++ (dword) main::dw#18 to:main::@1 +main::@1: scope:[main] from main::@16 + [46] if((dword) main::dw#1!=(dword) $12345690) goto main::@17 + to:main::@return +main::@return: scope:[main] from main::@1 + [47] return + to:@return +main::@17: scope:[main] from main::@1 + [48] (byte*~) print_line_cursor#54 ← (byte*) print_line_cursor#1 + to:main::@2 print_ln: scope:[print_ln] from main::@15 [49] phi() to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@2 - [50] (byte*) print_line_cursor#9 ← phi( print_ln/(byte*) print_line_cursor#15 print_ln::@2/(byte*~) print_line_cursor#37 ) + [50] (byte*) print_line_cursor#9 ← phi( print_ln/(byte*) print_line_cursor#37 print_ln::@2/(byte*~) print_line_cursor#53 ) [51] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte) $28 [52] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@2 to:print_ln::@return @@ -102,7 +104,7 @@ print_ln::@return: scope:[print_ln] from print_ln::@1 [53] return to:@return print_ln::@2: scope:[print_ln] from print_ln::@1 - [54] (byte*~) print_line_cursor#37 ← (byte*) print_line_cursor#1 + [54] (byte*~) print_line_cursor#53 ← (byte*) print_line_cursor#1 to:print_ln::@1 print_byte: scope:[print_byte] from main::@10 main::@12 main::@14 main::@8 print_word print_word::@1 [55] (byte*) print_char_cursor#67 ← phi( main::@8/(byte*) print_char_cursor#12 main::@10/(byte*) print_char_cursor#12 main::@12/(byte*) print_char_cursor#12 main::@14/(byte*) print_char_cursor#12 print_word/(byte*) print_char_cursor#65 print_word::@1/(byte*) print_char_cursor#12 ) @@ -129,7 +131,7 @@ print_char::@return: scope:[print_char] from print_char [66] return to:@return print_word: scope:[print_word] from main::@4 main::@6 print_dword print_dword::@1 - [67] (byte*) print_char_cursor#65 ← phi( main::@6/(byte*) print_char_cursor#12 main::@4/(byte*) print_char_cursor#12 print_dword/(byte*~) print_char_cursor#75 print_dword::@1/(byte*) print_char_cursor#12 ) + [67] (byte*) print_char_cursor#65 ← phi( main::@6/(byte*) print_char_cursor#12 main::@4/(byte*) print_char_cursor#12 print_dword/(byte*~) print_char_cursor#78 print_dword::@1/(byte*) print_char_cursor#12 ) [67] (word) print_word::w#4 ← phi( main::@6/(word) print_word::w#3 main::@4/(word) print_word::w#2 print_dword/(word) print_word::w#0 print_dword::@1/(word) print_word::w#1 ) [68] (byte) print_byte::b#0 ← > (word) print_word::w#4 [69] call print_byte @@ -143,7 +145,7 @@ print_word::@return: scope:[print_word] from print_word::@1 to:@return print_dword: scope:[print_dword] from main::@2 [73] (word) print_word::w#0 ← > (dword) print_dword::dw#0 - [74] (byte*~) print_char_cursor#75 ← (byte*) print_char_cursor#31 + [74] (byte*~) print_char_cursor#78 ← (byte*) print_char_cursor#74 [75] call print_word to:print_dword::@1 print_dword::@1: scope:[print_dword] from print_dword @@ -162,15 +164,15 @@ print_cls::@return: scope:[print_cls] from print_cls to:@return memset: scope:[memset] from print_cls [82] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [83] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [84] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [85] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [83] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [86] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [85] return + [87] return to:@return -memset::@2: scope:[memset] from memset::@1 - [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 diff --git a/src/test/ref/test-lowhigh.log b/src/test/ref/test-lowhigh.log index 2bd0464d5..f2b53f7f9 100644 --- a/src/test/ref/test-lowhigh.log +++ b/src/test/ref/test-lowhigh.log @@ -899,11 +899,26 @@ if() condition always false - eliminating [3] if((const word) memset::num#0<=(by Successful SSA optimization Pass2ConstantIfs Eliminating unused variable (void*) memset::return#2 and assignment [37] (void*) memset::return#2 ← (void*) memset::str#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (dword) main::dw#1 = (dword) main::dw#10 +Alias (dword) main::dw#18 = (dword) main::dw#32 (dword) main::dw#31 (dword) main::dw#30 (dword) main::dw#29 (dword) main::dw#28 (dword) main::dw#27 (dword) main::dw#26 (dword) main::dw#25 (dword) main::dw#24 (dword) main::dw#23 (dword) main::dw#22 (dword) main::dw#21 (dword) main::dw#20 (dword) main::dw#19 +Alias (byte*) print_line_cursor#37 = (byte*) print_line_cursor#49 (byte*) print_line_cursor#50 (byte*) print_line_cursor#48 (byte*) print_line_cursor#47 (byte*) print_line_cursor#46 (byte*) print_line_cursor#45 (byte*) print_line_cursor#44 (byte*) print_line_cursor#43 (byte*) print_line_cursor#42 (byte*) print_line_cursor#41 (byte*) print_line_cursor#40 (byte*) print_line_cursor#39 (byte*) print_line_cursor#38 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) print_line_cursor#36 (byte*) print_line_cursor#37 +Identical Phi Values (byte*) print_char_cursor#73 (byte*) print_char_cursor#74 +Identical Phi Values (byte*) print_line_cursor#15 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_char_cursor#31 (byte*) print_line_cursor#1 +Identical Phi Values (dword) main::dw#33 (const dword) main::dw#0 +Identical Phi Values (byte*) print_line_cursor#51 (const byte*) print_line_cursor#0 +Identical Phi Values (byte*) print_char_cursor#75 (const byte*) print_line_cursor#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant (const void*) memset::str#0 = (void*)print_line_cursor#0 Successful SSA optimization Pass2ConstantIdentification Constant value identified (byte*)memset::str#0 in [0] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0 Constant value identified (byte*)memset::str#0 in [2] (byte*) memset::dst#0 ← (byte*)(const void*) memset::str#0 Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [94] if((const dword) main::dw#0!=(dword) $12345690) goto main::@2 +Successful SSA optimization Pass2ConstantIfs Constant (const byte*) memset::$2 = (byte*)memset::str#0 Constant (const byte*) memset::dst#0 = (byte*)memset::str#0 Successful SSA optimization Pass2ConstantIdentification @@ -911,6 +926,13 @@ Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memse Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Successful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) memset::dst#1 = (byte*) memset::dst#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) memset::dst#5 (const byte*) memset::dst#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [74] if((const byte*) memset::dst#0!=(const byte*) memset::end#0) goto memset::@5 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte*) memset::dst#0 Inlining constant with var siblings (const byte) print_char::ch#2 Inlining constant with var siblings (const byte) print_char::ch#3 @@ -932,7 +954,9 @@ Constant inlined print_char::ch#7 = (byte) ' ' Constant inlined main::dw#0 = (dword) $12345678 Constant inlined print_char::ch#6 = (byte) ' ' Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting memset::@10(between memset::@4 and memset::@5) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) +Added new block during phi lifting main::@22(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @12 Adding NOP phi() at start of @29 @@ -941,6 +965,7 @@ Adding NOP phi() at start of @38 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@7 +Adding NOP phi() at start of main::@1_1 Adding NOP phi() at start of main::@20 Adding NOP phi() at start of print_ln::@2 Adding NOP phi() at start of print_byte::@2 @@ -950,64 +975,68 @@ Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@4_1 Adding NOP phi() at start of memset::@1 CALL GRAPH Calls in [] to main:4 -Calls in [main] to print_cls:8 print_dword:20 print_char:22 print_word:26 print_char:28 print_word:32 print_char:34 print_byte:39 print_char:41 print_byte:46 print_char:48 print_byte:53 print_char:55 print_byte:60 print_ln:62 -Calls in [print_byte] to print_char:79 print_char:84 -Calls in [print_word] to print_byte:95 print_byte:99 -Calls in [print_dword] to print_word:105 print_word:109 -Calls in [print_cls] to memset:113 +Calls in [main] to print_cls:8 print_dword:19 print_char:21 print_word:25 print_char:27 print_word:31 print_char:33 print_byte:38 print_char:40 print_byte:45 print_char:47 print_byte:52 print_char:54 print_byte:59 print_ln:61 +Calls in [print_byte] to print_char:80 print_char:85 +Calls in [print_word] to print_byte:96 print_byte:100 +Calls in [print_dword] to print_word:106 print_word:110 +Calls in [print_cls] to memset:114 Created 11 initial phi equivalence classes -Coalesced [21] print_char_cursor#88 ← print_char_cursor#12 -Coalesced [24] print_word::w#7 ← print_word::w#2 -Coalesced [25] print_char_cursor#74 ← print_char_cursor#12 -Coalesced (already) [27] print_char_cursor#83 ← print_char_cursor#12 -Coalesced [30] print_word::w#6 ← print_word::w#3 -Coalesced (already) [31] print_char_cursor#73 ← print_char_cursor#12 -Coalesced (already) [33] print_char_cursor#84 ← print_char_cursor#12 -Coalesced [37] print_byte::b#8 ← print_byte::b#2 -Coalesced [38] print_char_cursor#77 ← print_char_cursor#12 -Coalesced (already) [40] print_char_cursor#85 ← print_char_cursor#12 -Coalesced [44] print_byte::b#9 ← print_byte::b#3 -Coalesced (already) [45] print_char_cursor#78 ← print_char_cursor#12 -Coalesced (already) [47] print_char_cursor#86 ← print_char_cursor#12 -Coalesced [51] print_byte::b#10 ← print_byte::b#4 -Coalesced (already) [52] print_char_cursor#79 ← print_char_cursor#12 -Coalesced (already) [54] print_char_cursor#87 ← print_char_cursor#12 -Coalesced [58] print_byte::b#11 ← print_byte::b#5 -Coalesced (already) [59] print_char_cursor#80 ← print_char_cursor#12 -Coalesced [64] main::dw#18 ← main::dw#1 -Not coalescing [65] print_line_cursor#38 ← print_line_cursor#1 -Coalesced [66] print_char_cursor#91 ← print_line_cursor#1 -Coalesced [67] print_line_cursor#36 ← print_line_cursor#15 -Not coalescing [73] print_line_cursor#37 ← print_line_cursor#1 -Coalesced [77] print_char::ch#9 ← print_char::ch#0 -Coalesced (already) [78] print_char_cursor#89 ← print_char_cursor#67 -Coalesced [82] print_char::ch#10 ← print_char::ch#1 -Coalesced (already) [83] print_char_cursor#90 ← print_char_cursor#12 -Coalesced [93] print_byte::b#12 ← print_byte::b#0 -Coalesced (already) [94] print_char_cursor#81 ← print_char_cursor#65 -Coalesced [97] print_byte::b#13 ← print_byte::b#1 -Coalesced (already) [98] print_char_cursor#82 ← print_char_cursor#12 -Coalesced [103] print_word::w#8 ← print_word::w#0 -Not coalescing [104] print_char_cursor#75 ← print_char_cursor#31 -Coalesced [107] print_word::w#9 ← print_word::w#1 -Coalesced (already) [108] print_char_cursor#76 ← print_char_cursor#12 -Coalesced [124] memset::dst#4 ← memset::dst#1 +Coalesced [20] print_char_cursor#91 ← print_char_cursor#12 +Coalesced [23] print_word::w#7 ← print_word::w#2 +Coalesced [24] print_char_cursor#77 ← print_char_cursor#12 +Coalesced (already) [26] print_char_cursor#86 ← print_char_cursor#12 +Coalesced [29] print_word::w#6 ← print_word::w#3 +Coalesced (already) [30] print_char_cursor#76 ← print_char_cursor#12 +Coalesced (already) [32] print_char_cursor#87 ← print_char_cursor#12 +Coalesced [36] print_byte::b#8 ← print_byte::b#2 +Coalesced [37] print_char_cursor#80 ← print_char_cursor#12 +Coalesced (already) [39] print_char_cursor#88 ← print_char_cursor#12 +Coalesced [43] print_byte::b#9 ← print_byte::b#3 +Coalesced (already) [44] print_char_cursor#81 ← print_char_cursor#12 +Coalesced (already) [46] print_char_cursor#89 ← print_char_cursor#12 +Coalesced [50] print_byte::b#10 ← print_byte::b#4 +Coalesced (already) [51] print_char_cursor#82 ← print_char_cursor#12 +Coalesced (already) [53] print_char_cursor#90 ← print_char_cursor#12 +Coalesced [57] print_byte::b#11 ← print_byte::b#5 +Coalesced (already) [58] print_char_cursor#83 ← print_char_cursor#12 +Coalesced [65] main::dw#34 ← main::dw#1 +Not coalescing [66] print_line_cursor#54 ← print_line_cursor#1 +Coalesced [67] print_char_cursor#94 ← print_line_cursor#1 +Coalesced [68] print_line_cursor#52 ← print_line_cursor#37 +Not coalescing [74] print_line_cursor#53 ← print_line_cursor#1 +Coalesced [78] print_char::ch#9 ← print_char::ch#0 +Coalesced (already) [79] print_char_cursor#92 ← print_char_cursor#67 +Coalesced [83] print_char::ch#10 ← print_char::ch#1 +Coalesced (already) [84] print_char_cursor#93 ← print_char_cursor#12 +Coalesced [94] print_byte::b#12 ← print_byte::b#0 +Coalesced (already) [95] print_char_cursor#84 ← print_char_cursor#65 +Coalesced [98] print_byte::b#13 ← print_byte::b#1 +Coalesced (already) [99] print_char_cursor#85 ← print_char_cursor#12 +Coalesced [104] print_word::w#8 ← print_word::w#0 +Not coalescing [105] print_char_cursor#78 ← print_char_cursor#74 +Coalesced [108] print_word::w#9 ← print_word::w#1 +Coalesced (already) [109] print_char_cursor#79 ← print_char_cursor#12 +Coalesced [126] memset::dst#6 ← memset::dst#1 Coalesced down to 8 phi equivalence classes Culled Empty Block (label) @12 Culled Empty Block (label) @29 Culled Empty Block (label) @38 Culled Empty Block (label) main::@7 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) print_word::@2 Culled Empty Block (label) print_dword::@2 Culled Empty Block (label) print_cls::@1 Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@4_1 Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@10 Renumbering block @37 to @1 Renumbering block memset::@4 to memset::@1 Renumbering block memset::@5 to memset::@2 @@ -1026,6 +1055,7 @@ Renumbering block main::@18 to main::@13 Renumbering block main::@19 to main::@14 Renumbering block main::@20 to main::@15 Renumbering block main::@21 to main::@16 +Renumbering block main::@22 to main::@17 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -1054,91 +1084,93 @@ FINAL CONTROL FLOW GRAPH main: scope:[main] from @1 [4] phi() [5] call print_cls - to:main::@1 -main::@1: scope:[main] from main main::@16 - [6] (byte*) print_char_cursor#31 ← phi( main::@16/(byte*) print_line_cursor#1 main/(byte*) 1024 ) - [6] (byte*) print_line_cursor#15 ← phi( main::@16/(byte*~) print_line_cursor#38 main/(byte*) 1024 ) - [6] (dword) main::dw#10 ← phi( main::@16/(dword) main::dw#1 main/(dword) $12345678 ) - [7] if((dword) main::dw#10!=(dword) $12345690) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [8] return - to:@return -main::@2: scope:[main] from main::@1 - [9] (word~) main::$3 ← > (dword) main::dw#10 - [10] (word~) main::$32 ← (word~) main::$3 + (word) $1111 - [11] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 - [12] (word~) main::$6 ← < (dword) main::dw#10 - [13] (word~) main::$33 ← (word~) main::$6 + (word) $1111 - [14] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 - [15] (dword) print_dword::dw#0 ← (dword) main::dw2#10 - [16] call print_dword + to:main::@2 +main::@2: scope:[main] from main main::@17 + [6] (byte*) print_char_cursor#74 ← phi( main::@17/(byte*) print_line_cursor#1 main/(byte*) 1024 ) + [6] (byte*) print_line_cursor#37 ← phi( main::@17/(byte*~) print_line_cursor#54 main/(byte*) 1024 ) + [6] (dword) main::dw#18 ← phi( main::@17/(dword) main::dw#1 main/(dword) $12345678 ) + [7] (word~) main::$3 ← > (dword) main::dw#18 + [8] (word~) main::$32 ← (word~) main::$3 + (word) $1111 + [9] (dword) main::dw2#1 ← (dword) main::dw#18 hi= (word~) main::$32 + [10] (word~) main::$6 ← < (dword) main::dw#18 + [11] (word~) main::$33 ← (word~) main::$6 + (word) $1111 + [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 + [13] (dword) print_dword::dw#0 ← (dword) main::dw2#10 + [14] call print_dword to:main::@3 main::@3: scope:[main] from main::@2 - [17] phi() - [18] call print_char + [15] phi() + [16] call print_char to:main::@4 main::@4: scope:[main] from main::@3 - [19] (word) print_word::w#2 ← > (dword) main::dw2#10 - [20] call print_word + [17] (word) print_word::w#2 ← > (dword) main::dw2#10 + [18] call print_word to:main::@5 main::@5: scope:[main] from main::@4 - [21] phi() - [22] call print_char + [19] phi() + [20] call print_char to:main::@6 main::@6: scope:[main] from main::@5 - [23] (word) print_word::w#3 ← < (dword) main::dw2#10 - [24] call print_word + [21] (word) print_word::w#3 ← < (dword) main::dw2#10 + [22] call print_word to:main::@7 main::@7: scope:[main] from main::@6 - [25] phi() - [26] call print_char + [23] phi() + [24] call print_char to:main::@8 main::@8: scope:[main] from main::@7 - [27] (word~) main::$16 ← > (dword) main::dw2#10 - [28] (byte) print_byte::b#2 ← > (word~) main::$16 - [29] call print_byte + [25] (word~) main::$16 ← > (dword) main::dw2#10 + [26] (byte) print_byte::b#2 ← > (word~) main::$16 + [27] call print_byte to:main::@9 main::@9: scope:[main] from main::@8 - [30] phi() - [31] call print_char + [28] phi() + [29] call print_char to:main::@10 main::@10: scope:[main] from main::@9 - [32] (word~) main::$20 ← > (dword) main::dw2#10 - [33] (byte) print_byte::b#3 ← < (word~) main::$20 - [34] call print_byte + [30] (word~) main::$20 ← > (dword) main::dw2#10 + [31] (byte) print_byte::b#3 ← < (word~) main::$20 + [32] call print_byte to:main::@11 main::@11: scope:[main] from main::@10 - [35] phi() - [36] call print_char + [33] phi() + [34] call print_char to:main::@12 main::@12: scope:[main] from main::@11 - [37] (word~) main::$24 ← < (dword) main::dw2#10 - [38] (byte) print_byte::b#4 ← > (word~) main::$24 - [39] call print_byte + [35] (word~) main::$24 ← < (dword) main::dw2#10 + [36] (byte) print_byte::b#4 ← > (word~) main::$24 + [37] call print_byte to:main::@13 main::@13: scope:[main] from main::@12 - [40] phi() - [41] call print_char + [38] phi() + [39] call print_char to:main::@14 main::@14: scope:[main] from main::@13 - [42] (word~) main::$28 ← < (dword) main::dw2#10 - [43] (byte) print_byte::b#5 ← < (word~) main::$28 - [44] call print_byte + [40] (word~) main::$28 ← < (dword) main::dw2#10 + [41] (byte) print_byte::b#5 ← < (word~) main::$28 + [42] call print_byte to:main::@15 main::@15: scope:[main] from main::@14 - [45] phi() - [46] call print_ln + [43] phi() + [44] call print_ln to:main::@16 main::@16: scope:[main] from main::@15 - [47] (dword) main::dw#1 ← ++ (dword) main::dw#10 - [48] (byte*~) print_line_cursor#38 ← (byte*) print_line_cursor#1 + [45] (dword) main::dw#1 ← ++ (dword) main::dw#18 to:main::@1 +main::@1: scope:[main] from main::@16 + [46] if((dword) main::dw#1!=(dword) $12345690) goto main::@17 + to:main::@return +main::@return: scope:[main] from main::@1 + [47] return + to:@return +main::@17: scope:[main] from main::@1 + [48] (byte*~) print_line_cursor#54 ← (byte*) print_line_cursor#1 + to:main::@2 print_ln: scope:[print_ln] from main::@15 [49] phi() to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@2 - [50] (byte*) print_line_cursor#9 ← phi( print_ln/(byte*) print_line_cursor#15 print_ln::@2/(byte*~) print_line_cursor#37 ) + [50] (byte*) print_line_cursor#9 ← phi( print_ln/(byte*) print_line_cursor#37 print_ln::@2/(byte*~) print_line_cursor#53 ) [51] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte) $28 [52] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@2 to:print_ln::@return @@ -1146,7 +1178,7 @@ print_ln::@return: scope:[print_ln] from print_ln::@1 [53] return to:@return print_ln::@2: scope:[print_ln] from print_ln::@1 - [54] (byte*~) print_line_cursor#37 ← (byte*) print_line_cursor#1 + [54] (byte*~) print_line_cursor#53 ← (byte*) print_line_cursor#1 to:print_ln::@1 print_byte: scope:[print_byte] from main::@10 main::@12 main::@14 main::@8 print_word print_word::@1 [55] (byte*) print_char_cursor#67 ← phi( main::@8/(byte*) print_char_cursor#12 main::@10/(byte*) print_char_cursor#12 main::@12/(byte*) print_char_cursor#12 main::@14/(byte*) print_char_cursor#12 print_word/(byte*) print_char_cursor#65 print_word::@1/(byte*) print_char_cursor#12 ) @@ -1173,7 +1205,7 @@ print_char::@return: scope:[print_char] from print_char [66] return to:@return print_word: scope:[print_word] from main::@4 main::@6 print_dword print_dword::@1 - [67] (byte*) print_char_cursor#65 ← phi( main::@6/(byte*) print_char_cursor#12 main::@4/(byte*) print_char_cursor#12 print_dword/(byte*~) print_char_cursor#75 print_dword::@1/(byte*) print_char_cursor#12 ) + [67] (byte*) print_char_cursor#65 ← phi( main::@6/(byte*) print_char_cursor#12 main::@4/(byte*) print_char_cursor#12 print_dword/(byte*~) print_char_cursor#78 print_dword::@1/(byte*) print_char_cursor#12 ) [67] (word) print_word::w#4 ← phi( main::@6/(word) print_word::w#3 main::@4/(word) print_word::w#2 print_dword/(word) print_word::w#0 print_dword::@1/(word) print_word::w#1 ) [68] (byte) print_byte::b#0 ← > (word) print_word::w#4 [69] call print_byte @@ -1187,7 +1219,7 @@ print_word::@return: scope:[print_word] from print_word::@1 to:@return print_dword: scope:[print_dword] from main::@2 [73] (word) print_word::w#0 ← > (dword) print_dword::dw#0 - [74] (byte*~) print_char_cursor#75 ← (byte*) print_char_cursor#31 + [74] (byte*~) print_char_cursor#78 ← (byte*) print_char_cursor#74 [75] call print_word to:print_dword::@1 print_dword::@1: scope:[print_dword] from print_dword @@ -1206,18 +1238,18 @@ print_cls::@return: scope:[print_cls] from print_cls to:@return memset: scope:[memset] from print_cls [82] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [83] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [84] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [85] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [83] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [86] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [85] return + [87] return to:@return -memset::@2: scope:[memset] from memset::@1 - [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 VARIABLE REGISTER WEIGHTS @@ -1232,15 +1264,15 @@ VARIABLE REGISTER WEIGHTS (word~) main::$6 22.0 (dword) main::dw (dword) main::dw#1 11.0 -(dword) main::dw#10 1.65 +(dword) main::dw#18 1.4102564102564101 (dword) main::dw2 (dword) main::dw2#1 7.333333333333333 (dword) main::dw2#10 3.142857142857143 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst -(byte*) memset::dst#1 22.0 -(byte*) memset::dst#2 14.666666666666666 +(byte*) memset::dst#1 16.5 +(byte*) memset::dst#4 16.5 (byte*) memset::end (word) memset::num (void*) memset::return @@ -1263,21 +1295,21 @@ VARIABLE REGISTER WEIGHTS (byte) print_char::ch#8 6.0 (byte*) print_char_cursor (byte*) print_char_cursor#12 4.820000000000001 -(byte*) print_char_cursor#31 1.3 (byte*) print_char_cursor#44 37.0 (byte*) print_char_cursor#65 14.0 (byte*) print_char_cursor#67 16.666666666666664 -(byte*~) print_char_cursor#75 4.0 +(byte*) print_char_cursor#74 1.4444444444444446 +(byte*~) print_char_cursor#78 4.0 (void()) print_cls() (void()) print_dword((dword) print_dword::dw) (dword) print_dword::dw (dword) print_dword::dw#0 3.75 (byte[]) print_hextab (byte*) print_line_cursor -(byte*) print_line_cursor#1 54.16666666666666 -(byte*) print_line_cursor#15 0.325 -(byte*~) print_line_cursor#37 202.0 -(byte*~) print_line_cursor#38 22.0 +(byte*) print_line_cursor#1 46.42857142857143 +(byte*) print_line_cursor#37 0.3333333333333333 +(byte*~) print_line_cursor#53 202.0 +(byte*~) print_line_cursor#54 22.0 (byte*) print_line_cursor#9 204.0 (void()) print_ln() (byte*) print_screen @@ -1290,14 +1322,14 @@ VARIABLE REGISTER WEIGHTS (word) print_word::w#4 9.999999999999998 Initial phi equivalence classes -[ main::dw#10 main::dw#1 ] -[ print_char_cursor#31 print_line_cursor#1 ] -[ print_line_cursor#9 print_line_cursor#15 print_line_cursor#38 print_line_cursor#37 ] +[ main::dw#18 main::dw#1 ] +[ print_char_cursor#74 print_line_cursor#1 ] +[ print_line_cursor#9 print_line_cursor#37 print_line_cursor#54 print_line_cursor#53 ] [ print_byte::b#6 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#0 print_byte::b#1 ] [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] -[ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#75 ] +[ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#78 ] [ print_word::w#4 print_word::w#3 print_word::w#2 print_word::w#0 print_word::w#1 ] -[ memset::dst#2 memset::dst#1 ] +[ memset::dst#4 memset::dst#1 ] Added variable main::$3 to zero page equivalence class [ main::$3 ] Added variable main::$32 to zero page equivalence class [ main::$32 ] Added variable main::dw2#1 to zero page equivalence class [ main::dw2#1 ] @@ -1312,14 +1344,14 @@ Added variable main::$28 to zero page equivalence class [ main::$28 ] Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] Complete equivalence classes -[ main::dw#10 main::dw#1 ] -[ print_char_cursor#31 print_line_cursor#1 ] -[ print_line_cursor#9 print_line_cursor#15 print_line_cursor#38 print_line_cursor#37 ] +[ main::dw#18 main::dw#1 ] +[ print_char_cursor#74 print_line_cursor#1 ] +[ print_line_cursor#9 print_line_cursor#37 print_line_cursor#54 print_line_cursor#53 ] [ print_byte::b#6 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#0 print_byte::b#1 ] [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] -[ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#75 ] +[ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#78 ] [ print_word::w#4 print_word::w#3 print_word::w#2 print_word::w#0 print_word::w#1 ] -[ memset::dst#2 memset::dst#1 ] +[ memset::dst#4 memset::dst#1 ] [ main::$3 ] [ main::$32 ] [ main::dw2#1 ] @@ -1333,14 +1365,14 @@ Complete equivalence classes [ main::$28 ] [ print_byte::$0 ] [ print_byte::$2 ] -Allocated zp ZP_DWORD:2 [ main::dw#10 main::dw#1 ] -Allocated zp ZP_WORD:6 [ print_char_cursor#31 print_line_cursor#1 ] -Allocated zp ZP_WORD:8 [ print_line_cursor#9 print_line_cursor#15 print_line_cursor#38 print_line_cursor#37 ] +Allocated zp ZP_DWORD:2 [ main::dw#18 main::dw#1 ] +Allocated zp ZP_WORD:6 [ print_char_cursor#74 print_line_cursor#1 ] +Allocated zp ZP_WORD:8 [ print_line_cursor#9 print_line_cursor#37 print_line_cursor#54 print_line_cursor#53 ] Allocated zp ZP_BYTE:10 [ print_byte::b#6 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#0 print_byte::b#1 ] Allocated zp ZP_BYTE:11 [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] -Allocated zp ZP_WORD:12 [ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#75 ] +Allocated zp ZP_WORD:12 [ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#78 ] Allocated zp ZP_WORD:14 [ print_word::w#4 print_word::w#3 print_word::w#2 print_word::w#0 print_word::w#1 ] -Allocated zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] +Allocated zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ] Allocated zp ZP_WORD:18 [ main::$3 ] Allocated zp ZP_WORD:20 [ main::$32 ] Allocated zp ZP_DWORD:22 [ main::dw2#1 ] @@ -1365,11 +1397,11 @@ Target platform is c64basic // Global Constants & labels .label print_line_cursor = 6 .label print_char_cursor = $c - .label print_char_cursor_31 = 6 .label print_line_cursor_9 = 8 - .label print_line_cursor_15 = 8 .label print_line_cursor_37 = 8 - .label print_line_cursor_38 = 8 + .label print_char_cursor_74 = 6 + .label print_line_cursor_53 = 8 + .label print_line_cursor_54 = 8 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -1403,19 +1435,19 @@ main: { // [79] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls - // [6] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [6] phi (byte*) print_char_cursor#31 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [6] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [6] phi (byte*) print_char_cursor#74 = (byte*) 1024 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$400 - sta print_char_cursor_31 + sta print_char_cursor_74 lda #>$400 - sta print_char_cursor_31+1 - // [6] phi (byte*) print_line_cursor#15 = (byte*) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1 + sta print_char_cursor_74+1 + // [6] phi (byte*) print_line_cursor#37 = (byte*) 1024 [phi:main->main::@2#1] -- pbuz1=pbuc1 lda #<$400 - sta print_line_cursor_15 + sta print_line_cursor_37 lda #>$400 - sta print_line_cursor_15+1 - // [6] phi (dword) main::dw#10 = (dword) $12345678 [phi:main->main::@1#2] -- vduz1=vduc1 + sta print_line_cursor_37+1 + // [6] phi (dword) main::dw#18 = (dword) $12345678 [phi:main->main::@2#2] -- vduz1=vduc1 lda #<$12345678 sta dw lda #>$12345678 @@ -1424,35 +1456,15 @@ main: { sta dw+2 lda #>$12345678>>$10 sta dw+3 - jmp b1 - // main::@1 - b1: - // [7] if((dword) main::dw#10!=(dword) $12345690) goto main::@2 -- vduz1_neq_vduc1_then_la1 - lda dw+3 - cmp #>$12345690>>$10 - bne b2 - lda dw+2 - cmp #<$12345690>>$10 - bne b2 - lda dw+1 - cmp #>$12345690 - bne b2 - lda dw - cmp #<$12345690 - bne b2 - jmp breturn - // main::@return - breturn: - // [8] return - rts + jmp b2 // main::@2 b2: - // [9] (word~) main::$3 ← > (dword) main::dw#10 -- vwuz1=_hi_vduz2 + // [7] (word~) main::$3 ← > (dword) main::dw#18 -- vwuz1=_hi_vduz2 lda dw+2 sta _3 lda dw+3 sta _3+1 - // [10] (word~) main::$32 ← (word~) main::$3 + (word) $1111 -- vwuz1=vwuz2_plus_vwuc1 + // [8] (word~) main::$32 ← (word~) main::$3 + (word) $1111 -- vwuz1=vwuz2_plus_vwuc1 lda _3 clc adc #<$1111 @@ -1460,7 +1472,7 @@ main: { lda _3+1 adc #>$1111 sta _32+1 - // [11] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 -- vduz1=vduz2_sethi_vwuz3 + // [9] (dword) main::dw2#1 ← (dword) main::dw#18 hi= (word~) main::$32 -- vduz1=vduz2_sethi_vwuz3 lda dw sta dw2 lda dw+1 @@ -1469,12 +1481,12 @@ main: { sta dw2+2 lda _32+1 sta dw2+3 - // [12] (word~) main::$6 ← < (dword) main::dw#10 -- vwuz1=_lo_vduz2 + // [10] (word~) main::$6 ← < (dword) main::dw#18 -- vwuz1=_lo_vduz2 lda dw sta _6 lda dw+1 sta _6+1 - // [13] (word~) main::$33 ← (word~) main::$6 + (word) $1111 -- vwuz1=vwuz2_plus_vwuc1 + // [11] (word~) main::$33 ← (word~) main::$6 + (word) $1111 -- vwuz1=vwuz2_plus_vwuc1 lda _6 clc adc #<$1111 @@ -1482,7 +1494,7 @@ main: { lda _6+1 adc #>$1111 sta _33+1 - // [14] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 -- vduz1=vduz2_setlo_vwuz3 + // [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 -- vduz1=vduz2_setlo_vwuz3 lda _33 sta dw2_10 lda _33+1 @@ -1491,7 +1503,7 @@ main: { sta dw2_10+2 lda dw2+3 sta dw2_10+3 - // [15] (dword) print_dword::dw#0 ← (dword) main::dw2#10 -- vduz1=vduz2 + // [13] (dword) print_dword::dw#0 ← (dword) main::dw2#10 -- vduz1=vduz2 lda dw2_10 sta print_dword.dw lda dw2_10+1 @@ -1500,14 +1512,14 @@ main: { sta print_dword.dw+2 lda dw2_10+3 sta print_dword.dw+3 - // [16] call print_dword + // [14] call print_dword jsr print_dword - // [17] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [15] phi from main::@2 to main::@3 [phi:main::@2->main::@3] b3_from_b2: jmp b3 // main::@3 b3: - // [18] call print_char + // [16] call print_char // [63] phi from main::@3 to print_char [phi:main::@3->print_char] print_char_from_b3: // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@3->print_char#0] -- register_copy @@ -1518,23 +1530,23 @@ main: { jmp b4 // main::@4 b4: - // [19] (word) print_word::w#2 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 + // [17] (word) print_word::w#2 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 lda dw2_10+2 sta print_word.w lda dw2_10+3 sta print_word.w+1 - // [20] call print_word + // [18] call print_word // [67] phi from main::@4 to print_word [phi:main::@4->print_word] print_word_from_b4: // [67] phi (byte*) print_char_cursor#65 = (byte*) print_char_cursor#12 [phi:main::@4->print_word#0] -- register_copy // [67] phi (word) print_word::w#4 = (word) print_word::w#2 [phi:main::@4->print_word#1] -- register_copy jsr print_word - // [21] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // [19] phi from main::@4 to main::@5 [phi:main::@4->main::@5] b5_from_b4: jmp b5 // main::@5 b5: - // [22] call print_char + // [20] call print_char // [63] phi from main::@5 to print_char [phi:main::@5->print_char] print_char_from_b5: // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@5->print_char#0] -- register_copy @@ -1545,23 +1557,23 @@ main: { jmp b6 // main::@6 b6: - // [23] (word) print_word::w#3 ← < (dword) main::dw2#10 -- vwuz1=_lo_vduz2 + // [21] (word) print_word::w#3 ← < (dword) main::dw2#10 -- vwuz1=_lo_vduz2 lda dw2_10 sta print_word.w lda dw2_10+1 sta print_word.w+1 - // [24] call print_word + // [22] call print_word // [67] phi from main::@6 to print_word [phi:main::@6->print_word] print_word_from_b6: // [67] phi (byte*) print_char_cursor#65 = (byte*) print_char_cursor#12 [phi:main::@6->print_word#0] -- register_copy // [67] phi (word) print_word::w#4 = (word) print_word::w#3 [phi:main::@6->print_word#1] -- register_copy jsr print_word - // [25] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + // [23] phi from main::@6 to main::@7 [phi:main::@6->main::@7] b7_from_b6: jmp b7 // main::@7 b7: - // [26] call print_char + // [24] call print_char // [63] phi from main::@7 to print_char [phi:main::@7->print_char] print_char_from_b7: // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@7->print_char#0] -- register_copy @@ -1572,26 +1584,26 @@ main: { jmp b8 // main::@8 b8: - // [27] (word~) main::$16 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 + // [25] (word~) main::$16 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 lda dw2_10+2 sta _16 lda dw2_10+3 sta _16+1 - // [28] (byte) print_byte::b#2 ← > (word~) main::$16 -- vbuz1=_hi_vwuz2 + // [26] (byte) print_byte::b#2 ← > (word~) main::$16 -- vbuz1=_hi_vwuz2 lda _16+1 sta print_byte.b - // [29] call print_byte + // [27] call print_byte // [55] phi from main::@8 to print_byte [phi:main::@8->print_byte] print_byte_from_b8: // [55] phi (byte*) print_char_cursor#67 = (byte*) print_char_cursor#12 [phi:main::@8->print_byte#0] -- register_copy // [55] phi (byte) print_byte::b#6 = (byte) print_byte::b#2 [phi:main::@8->print_byte#1] -- register_copy jsr print_byte - // [30] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [28] phi from main::@8 to main::@9 [phi:main::@8->main::@9] b9_from_b8: jmp b9 // main::@9 b9: - // [31] call print_char + // [29] call print_char // [63] phi from main::@9 to print_char [phi:main::@9->print_char] print_char_from_b9: // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@9->print_char#0] -- register_copy @@ -1602,26 +1614,26 @@ main: { jmp b10 // main::@10 b10: - // [32] (word~) main::$20 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 + // [30] (word~) main::$20 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 lda dw2_10+2 sta _20 lda dw2_10+3 sta _20+1 - // [33] (byte) print_byte::b#3 ← < (word~) main::$20 -- vbuz1=_lo_vwuz2 + // [31] (byte) print_byte::b#3 ← < (word~) main::$20 -- vbuz1=_lo_vwuz2 lda _20 sta print_byte.b - // [34] call print_byte + // [32] call print_byte // [55] phi from main::@10 to print_byte [phi:main::@10->print_byte] print_byte_from_b10: // [55] phi (byte*) print_char_cursor#67 = (byte*) print_char_cursor#12 [phi:main::@10->print_byte#0] -- register_copy // [55] phi (byte) print_byte::b#6 = (byte) print_byte::b#3 [phi:main::@10->print_byte#1] -- register_copy jsr print_byte - // [35] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [33] phi from main::@10 to main::@11 [phi:main::@10->main::@11] b11_from_b10: jmp b11 // main::@11 b11: - // [36] call print_char + // [34] call print_char // [63] phi from main::@11 to print_char [phi:main::@11->print_char] print_char_from_b11: // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@11->print_char#0] -- register_copy @@ -1632,26 +1644,26 @@ main: { jmp b12 // main::@12 b12: - // [37] (word~) main::$24 ← < (dword) main::dw2#10 -- vwuz1=_lo_vduz2 + // [35] (word~) main::$24 ← < (dword) main::dw2#10 -- vwuz1=_lo_vduz2 lda dw2_10 sta _24 lda dw2_10+1 sta _24+1 - // [38] (byte) print_byte::b#4 ← > (word~) main::$24 -- vbuz1=_hi_vwuz2 + // [36] (byte) print_byte::b#4 ← > (word~) main::$24 -- vbuz1=_hi_vwuz2 lda _24+1 sta print_byte.b - // [39] call print_byte + // [37] call print_byte // [55] phi from main::@12 to print_byte [phi:main::@12->print_byte] print_byte_from_b12: // [55] phi (byte*) print_char_cursor#67 = (byte*) print_char_cursor#12 [phi:main::@12->print_byte#0] -- register_copy // [55] phi (byte) print_byte::b#6 = (byte) print_byte::b#4 [phi:main::@12->print_byte#1] -- register_copy jsr print_byte - // [40] phi from main::@12 to main::@13 [phi:main::@12->main::@13] + // [38] phi from main::@12 to main::@13 [phi:main::@12->main::@13] b13_from_b12: jmp b13 // main::@13 b13: - // [41] call print_char + // [39] call print_char // [63] phi from main::@13 to print_char [phi:main::@13->print_char] print_char_from_b13: // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@13->print_char#0] -- register_copy @@ -1662,33 +1674,33 @@ main: { jmp b14 // main::@14 b14: - // [42] (word~) main::$28 ← < (dword) main::dw2#10 -- vwuz1=_lo_vduz2 + // [40] (word~) main::$28 ← < (dword) main::dw2#10 -- vwuz1=_lo_vduz2 lda dw2_10 sta _28 lda dw2_10+1 sta _28+1 - // [43] (byte) print_byte::b#5 ← < (word~) main::$28 -- vbuz1=_lo_vwuz2 + // [41] (byte) print_byte::b#5 ← < (word~) main::$28 -- vbuz1=_lo_vwuz2 lda _28 sta print_byte.b - // [44] call print_byte + // [42] call print_byte // [55] phi from main::@14 to print_byte [phi:main::@14->print_byte] print_byte_from_b14: // [55] phi (byte*) print_char_cursor#67 = (byte*) print_char_cursor#12 [phi:main::@14->print_byte#0] -- register_copy // [55] phi (byte) print_byte::b#6 = (byte) print_byte::b#5 [phi:main::@14->print_byte#1] -- register_copy jsr print_byte - // [45] phi from main::@14 to main::@15 [phi:main::@14->main::@15] + // [43] phi from main::@14 to main::@15 [phi:main::@14->main::@15] b15_from_b14: jmp b15 // main::@15 b15: - // [46] call print_ln + // [44] call print_ln // [49] phi from main::@15 to print_ln [phi:main::@15->print_ln] print_ln_from_b15: jsr print_ln jmp b16 // main::@16 b16: - // [47] (dword) main::dw#1 ← ++ (dword) main::dw#10 -- vduz1=_inc_vduz1 + // [45] (dword) main::dw#1 ← ++ (dword) main::dw#18 -- vduz1=_inc_vduz1 inc dw bne !+ inc dw+1 @@ -1697,17 +1709,40 @@ main: { bne !+ inc dw+3 !: - // [48] (byte*~) print_line_cursor#38 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 - lda print_line_cursor - sta print_line_cursor_38 - lda print_line_cursor+1 - sta print_line_cursor_38+1 - // [6] phi from main::@16 to main::@1 [phi:main::@16->main::@1] - b1_from_b16: - // [6] phi (byte*) print_char_cursor#31 = (byte*) print_line_cursor#1 [phi:main::@16->main::@1#0] -- register_copy - // [6] phi (byte*) print_line_cursor#15 = (byte*~) print_line_cursor#38 [phi:main::@16->main::@1#1] -- register_copy - // [6] phi (dword) main::dw#10 = (dword) main::dw#1 [phi:main::@16->main::@1#2] -- register_copy jmp b1 + // main::@1 + b1: + // [46] if((dword) main::dw#1!=(dword) $12345690) goto main::@17 -- vduz1_neq_vduc1_then_la1 + lda dw+3 + cmp #>$12345690>>$10 + bne b17 + lda dw+2 + cmp #<$12345690>>$10 + bne b17 + lda dw+1 + cmp #>$12345690 + bne b17 + lda dw + cmp #<$12345690 + bne b17 + jmp breturn + // main::@return + breturn: + // [47] return + rts + // main::@17 + b17: + // [48] (byte*~) print_line_cursor#54 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_line_cursor_54 + lda print_line_cursor+1 + sta print_line_cursor_54+1 + // [6] phi from main::@17 to main::@2 [phi:main::@17->main::@2] + b2_from_b17: + // [6] phi (byte*) print_char_cursor#74 = (byte*) print_line_cursor#1 [phi:main::@17->main::@2#0] -- register_copy + // [6] phi (byte*) print_line_cursor#37 = (byte*~) print_line_cursor#54 [phi:main::@17->main::@2#1] -- register_copy + // [6] phi (dword) main::dw#18 = (dword) main::dw#1 [phi:main::@17->main::@2#2] -- register_copy + jmp b2 } // print_ln // Print a newline @@ -1715,7 +1750,7 @@ print_ln: { // [50] phi from print_ln print_ln::@2 to print_ln::@1 [phi:print_ln/print_ln::@2->print_ln::@1] b1_from_print_ln: b1_from_b2: - // [50] phi (byte*) print_line_cursor#9 = (byte*) print_line_cursor#15 [phi:print_ln/print_ln::@2->print_ln::@1#0] -- register_copy + // [50] phi (byte*) print_line_cursor#9 = (byte*) print_line_cursor#37 [phi:print_ln/print_ln::@2->print_ln::@1#0] -- register_copy jmp b1 // print_ln::@1 b1: @@ -1743,11 +1778,11 @@ print_ln: { rts // print_ln::@2 b2: - // [54] (byte*~) print_line_cursor#37 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [54] (byte*~) print_line_cursor#53 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor - sta print_line_cursor_37 + sta print_line_cursor_53 lda print_line_cursor+1 - sta print_line_cursor_37+1 + sta print_line_cursor_53+1 jmp b1_from_b2 } // print_byte @@ -1859,15 +1894,15 @@ print_dword: { sta print_word.w lda dw+3 sta print_word.w+1 - // [74] (byte*~) print_char_cursor#75 ← (byte*) print_char_cursor#31 -- pbuz1=pbuz2 - lda print_char_cursor_31 + // [74] (byte*~) print_char_cursor#78 ← (byte*) print_char_cursor#74 -- pbuz1=pbuz2 + lda print_char_cursor_74 sta print_char_cursor - lda print_char_cursor_31+1 + lda print_char_cursor_74+1 sta print_char_cursor+1 // [75] call print_word // [67] phi from print_dword to print_word [phi:print_dword->print_word] print_word_from_print_dword: - // [67] phi (byte*) print_char_cursor#65 = (byte*~) print_char_cursor#75 [phi:print_dword->print_word#0] -- register_copy + // [67] phi (byte*) print_char_cursor#65 = (byte*~) print_char_cursor#78 [phi:print_dword->print_word#0] -- register_copy // [67] phi (word) print_word::w#4 = (word) print_word::w#0 [phi:print_dword->print_word#1] -- register_copy jsr print_word jmp b1 @@ -1911,43 +1946,44 @@ memset: { .label str = $400 .label end = str+num .label dst = $10 - // [83] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [83] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [83] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [83] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [83] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [84] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [85] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [83] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [83] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [86] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp # (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#2 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#2 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [23] (word) print_word::w#3 ← < (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#3 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#3 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [27] (word~) main::$16 ← > (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 main::dw2#10 main::$16 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 main::$16 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [28] (byte) print_byte::b#2 ← > (word~) main::$16 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#2 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#2 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [32] (word~) main::$20 ← > (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 main::dw2#10 main::$20 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 main::$20 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [33] (byte) print_byte::b#3 ← < (word~) main::$20 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#3 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#3 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [37] (word~) main::$24 ← < (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 main::dw2#10 main::$24 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 main::$24 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [38] (byte) print_byte::b#4 ← > (word~) main::$24 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#4 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#4 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [42] (word~) main::$28 ← < (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 main::$28 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::$28 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [43] (byte) print_byte::b#5 ← < (word~) main::$28 [ main::dw#10 print_line_cursor#15 print_byte::b#5 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 print_byte::b#5 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [48] (byte*~) print_line_cursor#38 ← (byte*) print_line_cursor#1 [ main::dw#1 print_line_cursor#38 print_line_cursor#1 ] ( main:2 [ main::dw#1 print_line_cursor#38 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [51] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte) $28 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:46 [ main::dw#10 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [52] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@2 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:46 [ main::dw#10 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [54] (byte*~) print_line_cursor#37 ← (byte*) print_line_cursor#1 [ print_line_cursor#37 print_char_cursor#12 ] ( main:2::print_ln:46 [ main::dw#10 print_line_cursor#37 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [56] (byte~) print_byte::$0 ← (byte) print_byte::b#6 >> (byte) 4 [ print_byte::b#6 print_char_cursor#67 print_byte::$0 ] ( main:2::print_byte:29 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_byte:34 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_byte:39 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_byte:44 [ main::dw#10 print_line_cursor#15 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:20::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:24::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:16::print_word:75::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:16::print_word:77::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:20::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:24::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:16::print_word:75::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:16::print_word:77::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] ) always clobbers reg byte a +Statement [8] (word~) main::$32 ← (word~) main::$3 + (word) $1111 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::$32 ] ( main:2 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::$32 ] ) always clobbers reg byte a +Statement [9] (dword) main::dw2#1 ← (dword) main::dw#18 hi= (word~) main::$32 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#1 ] ( main:2 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#1 ] ) always clobbers reg byte a +Statement [11] (word~) main::$33 ← (word~) main::$6 + (word) $1111 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#1 main::$33 ] ( main:2 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#1 main::$33 ] ) always clobbers reg byte a +Statement [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#10 ] ( main:2 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#10 ] ) always clobbers reg byte a +Statement [13] (dword) print_dword::dw#0 ← (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#10 print_dword::dw#0 ] ( main:2 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#10 print_dword::dw#0 ] ) always clobbers reg byte a +Statement [17] (word) print_word::w#2 ← > (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#2 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#2 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [21] (word) print_word::w#3 ← < (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#3 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#3 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [25] (word~) main::$16 ← > (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 main::dw2#10 main::$16 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 main::$16 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [26] (byte) print_byte::b#2 ← > (word~) main::$16 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#2 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#2 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [30] (word~) main::$20 ← > (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 main::dw2#10 main::$20 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 main::$20 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [31] (byte) print_byte::b#3 ← < (word~) main::$20 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#3 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#3 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [35] (word~) main::$24 ← < (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 main::dw2#10 main::$24 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 main::$24 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [36] (byte) print_byte::b#4 ← > (word~) main::$24 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#4 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#4 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [40] (word~) main::$28 ← < (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 main::$28 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::$28 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [41] (byte) print_byte::b#5 ← < (word~) main::$28 [ main::dw#18 print_line_cursor#37 print_byte::b#5 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 print_byte::b#5 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [46] if((dword) main::dw#1!=(dword) $12345690) goto main::@17 [ main::dw#1 print_line_cursor#1 ] ( main:2 [ main::dw#1 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [48] (byte*~) print_line_cursor#54 ← (byte*) print_line_cursor#1 [ main::dw#1 print_line_cursor#54 print_line_cursor#1 ] ( main:2 [ main::dw#1 print_line_cursor#54 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [51] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte) $28 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:44 [ main::dw#18 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [52] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@2 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:44 [ main::dw#18 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [54] (byte*~) print_line_cursor#53 ← (byte*) print_line_cursor#1 [ print_line_cursor#53 print_char_cursor#12 ] ( main:2::print_ln:44 [ main::dw#18 print_line_cursor#53 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [56] (byte~) print_byte::$0 ← (byte) print_byte::b#6 >> (byte) 4 [ print_byte::b#6 print_char_cursor#67 print_byte::$0 ] ( main:2::print_byte:27 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_byte:32 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_byte:37 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_byte:42 [ main::dw#18 print_line_cursor#37 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:18::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:22::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:14::print_word:75::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:14::print_word:77::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:18::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:22::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:14::print_word:75::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:14::print_word:77::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ print_byte::b#6 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#0 print_byte::b#1 ] -Statement [59] (byte~) print_byte::$2 ← (byte) print_byte::b#6 & (byte) $f [ print_char_cursor#12 print_byte::$2 ] ( main:2::print_byte:29 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_byte:34 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_byte:39 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_byte:44 [ main::dw#10 print_line_cursor#15 print_char_cursor#12 print_byte::$2 ] main:2::print_word:20::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_word:24::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:16::print_word:75::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:16::print_word:77::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_word:20::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_word:24::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:16::print_word:75::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:16::print_word:77::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::$2 ] ) always clobbers reg byte a -Statement [64] *((byte*) print_char_cursor#44) ← (byte) print_char::ch#8 [ print_char_cursor#44 ] ( main:2::print_char:18 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_char:22 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_char:26 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_char:31 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_char:36 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_char:41 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:29::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:34::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:39::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:44::print_char:58 [ main::dw#10 print_line_cursor#15 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:20::print_byte:69::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:24::print_byte:69::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:16::print_word:75::print_byte:69::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:16::print_word:77::print_byte:69::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:20::print_byte:71::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:24::print_byte:71::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:16::print_word:75::print_byte:71::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:16::print_word:77::print_byte:71::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:29::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:34::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:39::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:44::print_char:61 [ main::dw#10 print_line_cursor#15 print_char_cursor#44 ] main:2::print_word:20::print_byte:69::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_char_cursor#44 ] main:2::print_word:24::print_byte:69::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_char_cursor#44 ] main:2::print_dword:16::print_word:75::print_byte:69::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_word::w#4 print_char_cursor#44 ] main:2::print_dword:16::print_word:77::print_byte:69::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_char_cursor#44 ] main:2::print_word:20::print_byte:71::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_word:24::print_byte:71::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_dword:16::print_word:75::print_byte:71::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_char_cursor#44 ] main:2::print_dword:16::print_word:77::print_byte:71::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] ) always clobbers reg byte y +Statement [59] (byte~) print_byte::$2 ← (byte) print_byte::b#6 & (byte) $f [ print_char_cursor#12 print_byte::$2 ] ( main:2::print_byte:27 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_byte:32 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_byte:37 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_byte:42 [ main::dw#18 print_line_cursor#37 print_char_cursor#12 print_byte::$2 ] main:2::print_word:18::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_word:22::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:14::print_word:75::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:14::print_word:77::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_word:18::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_word:22::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:14::print_word:75::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:14::print_word:77::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::$2 ] ) always clobbers reg byte a +Statement [64] *((byte*) print_char_cursor#44) ← (byte) print_char::ch#8 [ print_char_cursor#44 ] ( main:2::print_char:16 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_char:20 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_char:24 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_char:29 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_char:34 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_char:39 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:27::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:32::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:37::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:42::print_char:58 [ main::dw#18 print_line_cursor#37 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:18::print_byte:69::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:22::print_byte:69::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:69::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:14::print_word:77::print_byte:69::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:18::print_byte:71::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:22::print_byte:71::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:71::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:14::print_word:77::print_byte:71::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:27::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:32::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:37::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:42::print_char:61 [ main::dw#18 print_line_cursor#37 print_char_cursor#44 ] main:2::print_word:18::print_byte:69::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_char_cursor#44 ] main:2::print_word:22::print_byte:69::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:69::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_word::w#4 print_char_cursor#44 ] main:2::print_dword:14::print_word:77::print_byte:69::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_char_cursor#44 ] main:2::print_word:18::print_byte:71::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_word:22::print_byte:71::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:71::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_char_cursor#44 ] main:2::print_dword:14::print_word:77::print_byte:71::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:10 [ print_byte::b#6 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#0 print_byte::b#1 ] -Statement [68] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ print_byte::b#0 print_char_cursor#65 print_word::w#4 ] ( main:2::print_word:20 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] main:2::print_word:24 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] main:2::print_dword:16::print_word:75 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] main:2::print_dword:16::print_word:77 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] ) always clobbers reg byte a -Statement [70] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ print_char_cursor#12 print_byte::b#1 ] ( main:2::print_word:20 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::b#1 ] main:2::print_word:24 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::b#1 ] main:2::print_dword:16::print_word:75 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_char_cursor#12 print_byte::b#1 ] main:2::print_dword:16::print_word:77 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::b#1 ] ) always clobbers reg byte a -Statement [73] (word) print_word::w#0 ← > (dword) print_dword::dw#0 [ print_char_cursor#31 print_dword::dw#0 print_word::w#0 ] ( main:2::print_dword:16 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#31 print_dword::dw#0 print_word::w#0 ] ) always clobbers reg byte a -Statement [74] (byte*~) print_char_cursor#75 ← (byte*) print_char_cursor#31 [ print_dword::dw#0 print_word::w#0 print_char_cursor#75 ] ( main:2::print_dword:16 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_word::w#0 print_char_cursor#75 ] ) always clobbers reg byte a -Statement [76] (word) print_word::w#1 ← < (dword) print_dword::dw#0 [ print_char_cursor#12 print_word::w#1 ] ( main:2::print_dword:16 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_word::w#1 ] ) always clobbers reg byte a -Statement [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:80 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:80 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [7] if((dword) main::dw#10!=(dword) $12345690) goto main::@2 [ main::dw#10 print_line_cursor#15 print_char_cursor#31 ] ( main:2 [ main::dw#10 print_line_cursor#15 print_char_cursor#31 ] ) always clobbers reg byte a -Statement [10] (word~) main::$32 ← (word~) main::$3 + (word) $1111 [ main::dw#10 print_line_cursor#15 print_char_cursor#31 main::$32 ] ( main:2 [ main::dw#10 print_line_cursor#15 print_char_cursor#31 main::$32 ] ) always clobbers reg byte a -Statement [11] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 [ main::dw#10 print_line_cursor#15 print_char_cursor#31 main::dw2#1 ] ( main:2 [ main::dw#10 print_line_cursor#15 print_char_cursor#31 main::dw2#1 ] ) always clobbers reg byte a -Statement [13] (word~) main::$33 ← (word~) main::$6 + (word) $1111 [ main::dw#10 print_line_cursor#15 print_char_cursor#31 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 print_line_cursor#15 print_char_cursor#31 main::dw2#1 main::$33 ] ) always clobbers reg byte a -Statement [14] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 [ main::dw#10 print_line_cursor#15 print_char_cursor#31 main::dw2#10 ] ( main:2 [ main::dw#10 print_line_cursor#15 print_char_cursor#31 main::dw2#10 ] ) always clobbers reg byte a -Statement [15] (dword) print_dword::dw#0 ← (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 print_char_cursor#31 main::dw2#10 print_dword::dw#0 ] ( main:2 [ main::dw#10 print_line_cursor#15 print_char_cursor#31 main::dw2#10 print_dword::dw#0 ] ) always clobbers reg byte a -Statement [19] (word) print_word::w#2 ← > (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#2 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#2 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [23] (word) print_word::w#3 ← < (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#3 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#3 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [27] (word~) main::$16 ← > (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 main::dw2#10 main::$16 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 main::$16 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [28] (byte) print_byte::b#2 ← > (word~) main::$16 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#2 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#2 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [32] (word~) main::$20 ← > (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 main::dw2#10 main::$20 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 main::$20 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [33] (byte) print_byte::b#3 ← < (word~) main::$20 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#3 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#3 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [37] (word~) main::$24 ← < (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 main::dw2#10 main::$24 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 main::$24 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [38] (byte) print_byte::b#4 ← > (word~) main::$24 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#4 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#4 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [42] (word~) main::$28 ← < (dword) main::dw2#10 [ main::dw#10 print_line_cursor#15 main::$28 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 main::$28 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [43] (byte) print_byte::b#5 ← < (word~) main::$28 [ main::dw#10 print_line_cursor#15 print_byte::b#5 print_char_cursor#12 ] ( main:2 [ main::dw#10 print_line_cursor#15 print_byte::b#5 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [48] (byte*~) print_line_cursor#38 ← (byte*) print_line_cursor#1 [ main::dw#1 print_line_cursor#38 print_line_cursor#1 ] ( main:2 [ main::dw#1 print_line_cursor#38 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [51] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte) $28 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:46 [ main::dw#10 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [52] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@2 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:46 [ main::dw#10 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [54] (byte*~) print_line_cursor#37 ← (byte*) print_line_cursor#1 [ print_line_cursor#37 print_char_cursor#12 ] ( main:2::print_ln:46 [ main::dw#10 print_line_cursor#37 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [56] (byte~) print_byte::$0 ← (byte) print_byte::b#6 >> (byte) 4 [ print_byte::b#6 print_char_cursor#67 print_byte::$0 ] ( main:2::print_byte:29 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_byte:34 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_byte:39 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_byte:44 [ main::dw#10 print_line_cursor#15 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:20::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:24::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:16::print_word:75::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:16::print_word:77::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:20::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:24::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:16::print_word:75::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:16::print_word:77::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] ) always clobbers reg byte a -Statement [59] (byte~) print_byte::$2 ← (byte) print_byte::b#6 & (byte) $f [ print_char_cursor#12 print_byte::$2 ] ( main:2::print_byte:29 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_byte:34 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_byte:39 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_byte:44 [ main::dw#10 print_line_cursor#15 print_char_cursor#12 print_byte::$2 ] main:2::print_word:20::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_word:24::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:16::print_word:75::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:16::print_word:77::print_byte:69 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_word:20::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_word:24::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:16::print_word:75::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:16::print_word:77::print_byte:71 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::$2 ] ) always clobbers reg byte a -Statement [64] *((byte*) print_char_cursor#44) ← (byte) print_char::ch#8 [ print_char_cursor#44 ] ( main:2::print_char:18 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_char:22 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_char:26 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_char:31 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_char:36 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_char:41 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:29::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:34::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:39::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:44::print_char:58 [ main::dw#10 print_line_cursor#15 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:20::print_byte:69::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:24::print_byte:69::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:16::print_word:75::print_byte:69::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:16::print_word:77::print_byte:69::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:20::print_byte:71::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:24::print_byte:71::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:16::print_word:75::print_byte:71::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:16::print_word:77::print_byte:71::print_char:58 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:29::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:34::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:39::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:44::print_char:61 [ main::dw#10 print_line_cursor#15 print_char_cursor#44 ] main:2::print_word:20::print_byte:69::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_char_cursor#44 ] main:2::print_word:24::print_byte:69::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_char_cursor#44 ] main:2::print_dword:16::print_word:75::print_byte:69::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_word::w#4 print_char_cursor#44 ] main:2::print_dword:16::print_word:77::print_byte:69::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_word::w#4 print_char_cursor#44 ] main:2::print_word:20::print_byte:71::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_word:24::print_byte:71::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] main:2::print_dword:16::print_word:75::print_byte:71::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_char_cursor#44 ] main:2::print_dword:16::print_word:77::print_byte:71::print_char:61 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#44 ] ) always clobbers reg byte y -Statement [68] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ print_byte::b#0 print_char_cursor#65 print_word::w#4 ] ( main:2::print_word:20 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] main:2::print_word:24 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] main:2::print_dword:16::print_word:75 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] main:2::print_dword:16::print_word:77 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] ) always clobbers reg byte a -Statement [70] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ print_char_cursor#12 print_byte::b#1 ] ( main:2::print_word:20 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::b#1 ] main:2::print_word:24 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::b#1 ] main:2::print_dword:16::print_word:75 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_char_cursor#12 print_byte::b#1 ] main:2::print_dword:16::print_word:77 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_byte::b#1 ] ) always clobbers reg byte a -Statement [73] (word) print_word::w#0 ← > (dword) print_dword::dw#0 [ print_char_cursor#31 print_dword::dw#0 print_word::w#0 ] ( main:2::print_dword:16 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#31 print_dword::dw#0 print_word::w#0 ] ) always clobbers reg byte a -Statement [74] (byte*~) print_char_cursor#75 ← (byte*) print_char_cursor#31 [ print_dword::dw#0 print_word::w#0 print_char_cursor#75 ] ( main:2::print_dword:16 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_dword::dw#0 print_word::w#0 print_char_cursor#75 ] ) always clobbers reg byte a -Statement [76] (word) print_word::w#1 ← < (dword) print_dword::dw#0 [ print_char_cursor#12 print_word::w#1 ] ( main:2::print_dword:16 [ main::dw#10 print_line_cursor#15 main::dw2#10 print_char_cursor#12 print_word::w#1 ] ) always clobbers reg byte a -Statement [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:80 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:80 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_DWORD:2 [ main::dw#10 main::dw#1 ] : zp ZP_DWORD:2 , -Potential registers zp ZP_WORD:6 [ print_char_cursor#31 print_line_cursor#1 ] : zp ZP_WORD:6 , -Potential registers zp ZP_WORD:8 [ print_line_cursor#9 print_line_cursor#15 print_line_cursor#38 print_line_cursor#37 ] : zp ZP_WORD:8 , +Statement [68] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ print_byte::b#0 print_char_cursor#65 print_word::w#4 ] ( main:2::print_word:18 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] main:2::print_word:22 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] main:2::print_dword:14::print_word:75 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] main:2::print_dword:14::print_word:77 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] ) always clobbers reg byte a +Statement [70] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ print_char_cursor#12 print_byte::b#1 ] ( main:2::print_word:18 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::b#1 ] main:2::print_word:22 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::b#1 ] main:2::print_dword:14::print_word:75 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_char_cursor#12 print_byte::b#1 ] main:2::print_dword:14::print_word:77 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::b#1 ] ) always clobbers reg byte a +Statement [73] (word) print_word::w#0 ← > (dword) print_dword::dw#0 [ print_char_cursor#74 print_dword::dw#0 print_word::w#0 ] ( main:2::print_dword:14 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#74 print_dword::dw#0 print_word::w#0 ] ) always clobbers reg byte a +Statement [74] (byte*~) print_char_cursor#78 ← (byte*) print_char_cursor#74 [ print_dword::dw#0 print_word::w#0 print_char_cursor#78 ] ( main:2::print_dword:14 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_word::w#0 print_char_cursor#78 ] ) always clobbers reg byte a +Statement [76] (word) print_word::w#1 ← < (dword) print_dword::dw#0 [ print_char_cursor#12 print_word::w#1 ] ( main:2::print_dword:14 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_word::w#1 ] ) always clobbers reg byte a +Statement [84] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:80 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [86] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:80 [ memset::dst#1 ] ) always clobbers reg byte a +Statement [8] (word~) main::$32 ← (word~) main::$3 + (word) $1111 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::$32 ] ( main:2 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::$32 ] ) always clobbers reg byte a +Statement [9] (dword) main::dw2#1 ← (dword) main::dw#18 hi= (word~) main::$32 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#1 ] ( main:2 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#1 ] ) always clobbers reg byte a +Statement [11] (word~) main::$33 ← (word~) main::$6 + (word) $1111 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#1 main::$33 ] ( main:2 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#1 main::$33 ] ) always clobbers reg byte a +Statement [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#10 ] ( main:2 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#10 ] ) always clobbers reg byte a +Statement [13] (dword) print_dword::dw#0 ← (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#10 print_dword::dw#0 ] ( main:2 [ main::dw#18 print_line_cursor#37 print_char_cursor#74 main::dw2#10 print_dword::dw#0 ] ) always clobbers reg byte a +Statement [17] (word) print_word::w#2 ← > (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#2 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#2 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [21] (word) print_word::w#3 ← < (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#3 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#3 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [25] (word~) main::$16 ← > (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 main::dw2#10 main::$16 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 main::$16 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [26] (byte) print_byte::b#2 ← > (word~) main::$16 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#2 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#2 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [30] (word~) main::$20 ← > (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 main::dw2#10 main::$20 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 main::$20 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [31] (byte) print_byte::b#3 ← < (word~) main::$20 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#3 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#3 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [35] (word~) main::$24 ← < (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 main::dw2#10 main::$24 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 main::$24 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [36] (byte) print_byte::b#4 ← > (word~) main::$24 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#4 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#4 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [40] (word~) main::$28 ← < (dword) main::dw2#10 [ main::dw#18 print_line_cursor#37 main::$28 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 main::$28 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [41] (byte) print_byte::b#5 ← < (word~) main::$28 [ main::dw#18 print_line_cursor#37 print_byte::b#5 print_char_cursor#12 ] ( main:2 [ main::dw#18 print_line_cursor#37 print_byte::b#5 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [46] if((dword) main::dw#1!=(dword) $12345690) goto main::@17 [ main::dw#1 print_line_cursor#1 ] ( main:2 [ main::dw#1 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [48] (byte*~) print_line_cursor#54 ← (byte*) print_line_cursor#1 [ main::dw#1 print_line_cursor#54 print_line_cursor#1 ] ( main:2 [ main::dw#1 print_line_cursor#54 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [51] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte) $28 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:44 [ main::dw#18 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [52] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@2 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:44 [ main::dw#18 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [54] (byte*~) print_line_cursor#53 ← (byte*) print_line_cursor#1 [ print_line_cursor#53 print_char_cursor#12 ] ( main:2::print_ln:44 [ main::dw#18 print_line_cursor#53 print_char_cursor#12 ] ) always clobbers reg byte a +Statement [56] (byte~) print_byte::$0 ← (byte) print_byte::b#6 >> (byte) 4 [ print_byte::b#6 print_char_cursor#67 print_byte::$0 ] ( main:2::print_byte:27 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_byte:32 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_byte:37 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_byte:42 [ main::dw#18 print_line_cursor#37 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:18::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:22::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:14::print_word:75::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:14::print_word:77::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:18::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_word:22::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:14::print_word:75::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] main:2::print_dword:14::print_word:77::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#67 print_byte::$0 ] ) always clobbers reg byte a +Statement [59] (byte~) print_byte::$2 ← (byte) print_byte::b#6 & (byte) $f [ print_char_cursor#12 print_byte::$2 ] ( main:2::print_byte:27 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_byte:32 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_byte:37 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_byte:42 [ main::dw#18 print_line_cursor#37 print_char_cursor#12 print_byte::$2 ] main:2::print_word:18::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_word:22::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:14::print_word:75::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:14::print_word:77::print_byte:69 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_char_cursor#12 print_byte::$2 ] main:2::print_word:18::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_word:22::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:14::print_word:75::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_char_cursor#12 print_byte::$2 ] main:2::print_dword:14::print_word:77::print_byte:71 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::$2 ] ) always clobbers reg byte a +Statement [64] *((byte*) print_char_cursor#44) ← (byte) print_char::ch#8 [ print_char_cursor#44 ] ( main:2::print_char:16 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_char:20 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_char:24 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_char:29 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_char:34 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_char:39 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:27::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:32::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:37::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:42::print_char:58 [ main::dw#18 print_line_cursor#37 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:18::print_byte:69::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:22::print_byte:69::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:69::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:14::print_word:77::print_byte:69::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:18::print_byte:71::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_word:22::print_byte:71::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:71::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_byte::b#6 print_char_cursor#44 ] main:2::print_dword:14::print_word:77::print_byte:71::print_char:58 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#6 print_char_cursor#44 ] main:2::print_byte:27::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:32::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:37::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_byte:42::print_char:61 [ main::dw#18 print_line_cursor#37 print_char_cursor#44 ] main:2::print_word:18::print_byte:69::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_char_cursor#44 ] main:2::print_word:22::print_byte:69::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:69::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_word::w#4 print_char_cursor#44 ] main:2::print_dword:14::print_word:77::print_byte:69::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_word::w#4 print_char_cursor#44 ] main:2::print_word:18::print_byte:71::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_word:22::print_byte:71::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:71::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_char_cursor#44 ] main:2::print_dword:14::print_word:77::print_byte:71::print_char:61 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#44 ] ) always clobbers reg byte y +Statement [68] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ print_byte::b#0 print_char_cursor#65 print_word::w#4 ] ( main:2::print_word:18 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] main:2::print_word:22 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] main:2::print_dword:14::print_word:75 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] main:2::print_dword:14::print_word:77 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_byte::b#0 print_char_cursor#65 print_word::w#4 ] ) always clobbers reg byte a +Statement [70] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ print_char_cursor#12 print_byte::b#1 ] ( main:2::print_word:18 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::b#1 ] main:2::print_word:22 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::b#1 ] main:2::print_dword:14::print_word:75 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_char_cursor#12 print_byte::b#1 ] main:2::print_dword:14::print_word:77 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_byte::b#1 ] ) always clobbers reg byte a +Statement [73] (word) print_word::w#0 ← > (dword) print_dword::dw#0 [ print_char_cursor#74 print_dword::dw#0 print_word::w#0 ] ( main:2::print_dword:14 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#74 print_dword::dw#0 print_word::w#0 ] ) always clobbers reg byte a +Statement [74] (byte*~) print_char_cursor#78 ← (byte*) print_char_cursor#74 [ print_dword::dw#0 print_word::w#0 print_char_cursor#78 ] ( main:2::print_dword:14 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_dword::dw#0 print_word::w#0 print_char_cursor#78 ] ) always clobbers reg byte a +Statement [76] (word) print_word::w#1 ← < (dword) print_dword::dw#0 [ print_char_cursor#12 print_word::w#1 ] ( main:2::print_dword:14 [ main::dw#18 print_line_cursor#37 main::dw2#10 print_char_cursor#12 print_word::w#1 ] ) always clobbers reg byte a +Statement [84] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:80 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [86] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:80 [ memset::dst#1 ] ) always clobbers reg byte a +Potential registers zp ZP_DWORD:2 [ main::dw#18 main::dw#1 ] : zp ZP_DWORD:2 , +Potential registers zp ZP_WORD:6 [ print_char_cursor#74 print_line_cursor#1 ] : zp ZP_WORD:6 , +Potential registers zp ZP_WORD:8 [ print_line_cursor#9 print_line_cursor#37 print_line_cursor#54 print_line_cursor#53 ] : zp ZP_WORD:8 , Potential registers zp ZP_BYTE:10 [ print_byte::b#6 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:10 , reg byte x , Potential registers zp ZP_BYTE:11 [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:12 [ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#75 ] : zp ZP_WORD:12 , +Potential registers zp ZP_WORD:12 [ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#78 ] : zp ZP_WORD:12 , Potential registers zp ZP_WORD:14 [ print_word::w#4 print_word::w#3 print_word::w#2 print_word::w#0 print_word::w#1 ] : zp ZP_WORD:14 , -Potential registers zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:16 , +Potential registers zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:16 , Potential registers zp ZP_WORD:18 [ main::$3 ] : zp ZP_WORD:18 , reg byte alu , Potential registers zp ZP_WORD:20 [ main::$32 ] : zp ZP_WORD:20 , Potential registers zp ZP_DWORD:22 [ main::dw2#1 ] : zp ZP_DWORD:22 , @@ -2040,40 +2076,40 @@ Potential registers zp ZP_BYTE:46 [ print_byte::$0 ] : zp ZP_BYTE:46 , reg byte Potential registers zp ZP_BYTE:47 [ print_byte::$2 ] : zp ZP_BYTE:47 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [] 428.32: zp ZP_WORD:8 [ print_line_cursor#9 print_line_cursor#15 print_line_cursor#38 print_line_cursor#37 ] 76.49: zp ZP_WORD:12 [ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#75 ] 55.47: zp ZP_WORD:6 [ print_char_cursor#31 print_line_cursor#1 ] -Uplift Scope [main] 22: zp ZP_WORD:18 [ main::$3 ] 22: zp ZP_WORD:20 [ main::$32 ] 22: zp ZP_WORD:26 [ main::$6 ] 22: zp ZP_WORD:28 [ main::$33 ] 22: zp ZP_WORD:38 [ main::$16 ] 22: zp ZP_WORD:40 [ main::$20 ] 22: zp ZP_WORD:42 [ main::$24 ] 22: zp ZP_WORD:44 [ main::$28 ] 12.65: zp ZP_DWORD:2 [ main::dw#10 main::dw#1 ] 7.33: zp ZP_DWORD:22 [ main::dw2#1 ] 3.14: zp ZP_DWORD:30 [ main::dw2#10 ] +Uplift Scope [] 428.33: zp ZP_WORD:8 [ print_line_cursor#9 print_line_cursor#37 print_line_cursor#54 print_line_cursor#53 ] 76.49: zp ZP_WORD:12 [ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#78 ] 47.87: zp ZP_WORD:6 [ print_char_cursor#74 print_line_cursor#1 ] +Uplift Scope [main] 22: zp ZP_WORD:18 [ main::$3 ] 22: zp ZP_WORD:20 [ main::$32 ] 22: zp ZP_WORD:26 [ main::$6 ] 22: zp ZP_WORD:28 [ main::$33 ] 22: zp ZP_WORD:38 [ main::$16 ] 22: zp ZP_WORD:40 [ main::$20 ] 22: zp ZP_WORD:42 [ main::$24 ] 22: zp ZP_WORD:44 [ main::$28 ] 12.41: zp ZP_DWORD:2 [ main::dw#18 main::dw#1 ] 7.33: zp ZP_DWORD:22 [ main::dw2#1 ] 3.14: zp ZP_DWORD:30 [ main::dw2#10 ] Uplift Scope [print_byte] 109: zp ZP_BYTE:10 [ print_byte::b#6 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:46 [ print_byte::$0 ] 4: zp ZP_BYTE:47 [ print_byte::$2 ] Uplift Scope [print_word] 60: zp ZP_WORD:14 [ print_word::w#4 print_word::w#3 print_word::w#2 print_word::w#0 print_word::w#1 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [memset] 33: zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ] Uplift Scope [print_char] 14: zp ZP_BYTE:11 [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] Uplift Scope [print_dword] 3.75: zp ZP_DWORD:34 [ print_dword::dw#0 ] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] -Uplifting [] best 10524 combination zp ZP_WORD:8 [ print_line_cursor#9 print_line_cursor#15 print_line_cursor#38 print_line_cursor#37 ] zp ZP_WORD:12 [ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#75 ] zp ZP_WORD:6 [ print_char_cursor#31 print_line_cursor#1 ] -Uplifting [main] best 10524 combination zp ZP_WORD:18 [ main::$3 ] zp ZP_WORD:20 [ main::$32 ] zp ZP_WORD:26 [ main::$6 ] zp ZP_WORD:28 [ main::$33 ] zp ZP_WORD:38 [ main::$16 ] zp ZP_WORD:40 [ main::$20 ] zp ZP_WORD:42 [ main::$24 ] zp ZP_WORD:44 [ main::$28 ] zp ZP_DWORD:2 [ main::dw#10 main::dw#1 ] zp ZP_DWORD:22 [ main::dw2#1 ] zp ZP_DWORD:30 [ main::dw2#10 ] -Uplifting [print_byte] best 10470 combination reg byte x [ print_byte::b#6 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -Uplifting [print_word] best 10470 combination zp ZP_WORD:14 [ print_word::w#4 print_word::w#3 print_word::w#2 print_word::w#0 print_word::w#1 ] -Uplifting [memset] best 10470 combination zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_char] best 10443 combination reg byte a [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] -Uplifting [print_dword] best 10443 combination zp ZP_DWORD:34 [ print_dword::dw#0 ] -Uplifting [RADIX] best 10443 combination -Uplifting [print_ln] best 10443 combination -Uplifting [print_cls] best 10443 combination +Uplifting [] best 10584 combination zp ZP_WORD:8 [ print_line_cursor#9 print_line_cursor#37 print_line_cursor#54 print_line_cursor#53 ] zp ZP_WORD:12 [ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#78 ] zp ZP_WORD:6 [ print_char_cursor#74 print_line_cursor#1 ] +Uplifting [main] best 10584 combination zp ZP_WORD:18 [ main::$3 ] zp ZP_WORD:20 [ main::$32 ] zp ZP_WORD:26 [ main::$6 ] zp ZP_WORD:28 [ main::$33 ] zp ZP_WORD:38 [ main::$16 ] zp ZP_WORD:40 [ main::$20 ] zp ZP_WORD:42 [ main::$24 ] zp ZP_WORD:44 [ main::$28 ] zp ZP_DWORD:2 [ main::dw#18 main::dw#1 ] zp ZP_DWORD:22 [ main::dw2#1 ] zp ZP_DWORD:30 [ main::dw2#10 ] +Uplifting [print_byte] best 10530 combination reg byte x [ print_byte::b#6 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [print_word] best 10530 combination zp ZP_WORD:14 [ print_word::w#4 print_word::w#3 print_word::w#2 print_word::w#0 print_word::w#1 ] +Uplifting [memset] best 10530 combination zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ] +Uplifting [print_char] best 10503 combination reg byte a [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] +Uplifting [print_dword] best 10503 combination zp ZP_DWORD:34 [ print_dword::dw#0 ] +Uplifting [RADIX] best 10503 combination +Uplifting [print_ln] best 10503 combination +Uplifting [print_cls] best 10503 combination Coalescing zero page register [ zp ZP_WORD:18 [ main::$3 ] ] with [ zp ZP_WORD:20 [ main::$32 ] ] - score: 1 Coalescing zero page register [ zp ZP_DWORD:22 [ main::dw2#1 ] ] with [ zp ZP_DWORD:30 [ main::dw2#10 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:26 [ main::$6 ] ] with [ zp ZP_WORD:28 [ main::$33 ] ] - score: 1 Coalescing zero page register [ zp ZP_DWORD:22 [ main::dw2#1 main::dw2#10 ] ] with [ zp ZP_DWORD:34 [ print_dword::dw#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:6 [ print_char_cursor#31 print_line_cursor#1 ] ] -Coalescing zero page register [ zp ZP_WORD:18 [ main::$3 main::$32 ] ] with [ zp ZP_WORD:12 [ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#75 ] ] +Coalescing zero page register [ zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:6 [ print_char_cursor#74 print_line_cursor#1 ] ] +Coalescing zero page register [ zp ZP_WORD:18 [ main::$3 main::$32 ] ] with [ zp ZP_WORD:12 [ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#78 ] ] Coalescing zero page register [ zp ZP_WORD:26 [ main::$6 main::$33 ] ] with [ zp ZP_WORD:14 [ print_word::w#4 print_word::w#3 print_word::w#2 print_word::w#0 print_word::w#1 ] ] -Coalescing zero page register [ zp ZP_WORD:38 [ main::$16 ] ] with [ zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 print_char_cursor#31 print_line_cursor#1 ] ] -Allocated (was zp ZP_WORD:8) zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#15 print_line_cursor#38 print_line_cursor#37 ] -Allocated (was zp ZP_WORD:18) zp ZP_WORD:8 [ main::$3 main::$32 print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#75 ] +Coalescing zero page register [ zp ZP_WORD:38 [ main::$16 ] ] with [ zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 print_char_cursor#74 print_line_cursor#1 ] ] +Allocated (was zp ZP_WORD:8) zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#37 print_line_cursor#54 print_line_cursor#53 ] +Allocated (was zp ZP_WORD:18) zp ZP_WORD:8 [ main::$3 main::$32 print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#78 ] Allocated (was zp ZP_DWORD:22) zp ZP_DWORD:10 [ main::dw2#1 main::dw2#10 print_dword::dw#0 ] Allocated (was zp ZP_WORD:26) zp ZP_WORD:14 [ main::$6 main::$33 print_word::w#4 print_word::w#3 print_word::w#2 print_word::w#0 print_word::w#1 ] -Allocated (was zp ZP_WORD:38) zp ZP_WORD:16 [ main::$16 memset::dst#2 memset::dst#1 print_char_cursor#31 print_line_cursor#1 ] +Allocated (was zp ZP_WORD:38) zp ZP_WORD:16 [ main::$16 memset::dst#4 memset::dst#1 print_char_cursor#74 print_line_cursor#1 ] Allocated (was zp ZP_WORD:40) zp ZP_WORD:18 [ main::$20 ] Allocated (was zp ZP_WORD:42) zp ZP_WORD:20 [ main::$24 ] Allocated (was zp ZP_WORD:44) zp ZP_WORD:22 [ main::$28 ] @@ -2087,11 +2123,11 @@ ASSEMBLER BEFORE OPTIMIZATION // Global Constants & labels .label print_line_cursor = $10 .label print_char_cursor = 8 - .label print_char_cursor_31 = $10 .label print_line_cursor_9 = 6 - .label print_line_cursor_15 = 6 .label print_line_cursor_37 = 6 - .label print_line_cursor_38 = 6 + .label print_char_cursor_74 = $10 + .label print_line_cursor_53 = 6 + .label print_line_cursor_54 = 6 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -2124,19 +2160,19 @@ main: { // [79] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls - // [6] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [6] phi (byte*) print_char_cursor#31 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [6] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [6] phi (byte*) print_char_cursor#74 = (byte*) 1024 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$400 - sta print_char_cursor_31 + sta print_char_cursor_74 lda #>$400 - sta print_char_cursor_31+1 - // [6] phi (byte*) print_line_cursor#15 = (byte*) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1 + sta print_char_cursor_74+1 + // [6] phi (byte*) print_line_cursor#37 = (byte*) 1024 [phi:main->main::@2#1] -- pbuz1=pbuc1 lda #<$400 - sta print_line_cursor_15 + sta print_line_cursor_37 lda #>$400 - sta print_line_cursor_15+1 - // [6] phi (dword) main::dw#10 = (dword) $12345678 [phi:main->main::@1#2] -- vduz1=vduc1 + sta print_line_cursor_37+1 + // [6] phi (dword) main::dw#18 = (dword) $12345678 [phi:main->main::@2#2] -- vduz1=vduc1 lda #<$12345678 sta dw lda #>$12345678 @@ -2145,35 +2181,15 @@ main: { sta dw+2 lda #>$12345678>>$10 sta dw+3 - jmp b1 - // main::@1 - b1: - // [7] if((dword) main::dw#10!=(dword) $12345690) goto main::@2 -- vduz1_neq_vduc1_then_la1 - lda dw+3 - cmp #>$12345690>>$10 - bne b2 - lda dw+2 - cmp #<$12345690>>$10 - bne b2 - lda dw+1 - cmp #>$12345690 - bne b2 - lda dw - cmp #<$12345690 - bne b2 - jmp breturn - // main::@return - breturn: - // [8] return - rts + jmp b2 // main::@2 b2: - // [9] (word~) main::$3 ← > (dword) main::dw#10 -- vwuz1=_hi_vduz2 + // [7] (word~) main::$3 ← > (dword) main::dw#18 -- vwuz1=_hi_vduz2 lda dw+2 sta _3 lda dw+3 sta _3+1 - // [10] (word~) main::$32 ← (word~) main::$3 + (word) $1111 -- vwuz1=vwuz1_plus_vwuc1 + // [8] (word~) main::$32 ← (word~) main::$3 + (word) $1111 -- vwuz1=vwuz1_plus_vwuc1 clc lda _32 adc #<$1111 @@ -2181,7 +2197,7 @@ main: { lda _32+1 adc #>$1111 sta _32+1 - // [11] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 -- vduz1=vduz2_sethi_vwuz3 + // [9] (dword) main::dw2#1 ← (dword) main::dw#18 hi= (word~) main::$32 -- vduz1=vduz2_sethi_vwuz3 lda dw sta dw2 lda dw+1 @@ -2190,12 +2206,12 @@ main: { sta dw2+2 lda _32+1 sta dw2+3 - // [12] (word~) main::$6 ← < (dword) main::dw#10 -- vwuz1=_lo_vduz2 + // [10] (word~) main::$6 ← < (dword) main::dw#18 -- vwuz1=_lo_vduz2 lda dw sta _6 lda dw+1 sta _6+1 - // [13] (word~) main::$33 ← (word~) main::$6 + (word) $1111 -- vwuz1=vwuz1_plus_vwuc1 + // [11] (word~) main::$33 ← (word~) main::$6 + (word) $1111 -- vwuz1=vwuz1_plus_vwuc1 clc lda _33 adc #<$1111 @@ -2203,20 +2219,20 @@ main: { lda _33+1 adc #>$1111 sta _33+1 - // [14] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 -- vduz1=vduz1_setlo_vwuz2 + // [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 -- vduz1=vduz1_setlo_vwuz2 lda _33 sta dw2 lda _33+1 sta dw2+1 - // [15] (dword) print_dword::dw#0 ← (dword) main::dw2#10 - // [16] call print_dword + // [13] (dword) print_dword::dw#0 ← (dword) main::dw2#10 + // [14] call print_dword jsr print_dword - // [17] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [15] phi from main::@2 to main::@3 [phi:main::@2->main::@3] b3_from_b2: jmp b3 // main::@3 b3: - // [18] call print_char + // [16] call print_char // [63] phi from main::@3 to print_char [phi:main::@3->print_char] print_char_from_b3: // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@3->print_char#0] -- register_copy @@ -2226,23 +2242,23 @@ main: { jmp b4 // main::@4 b4: - // [19] (word) print_word::w#2 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 + // [17] (word) print_word::w#2 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 lda dw2+2 sta print_word.w lda dw2+3 sta print_word.w+1 - // [20] call print_word + // [18] call print_word // [67] phi from main::@4 to print_word [phi:main::@4->print_word] print_word_from_b4: // [67] phi (byte*) print_char_cursor#65 = (byte*) print_char_cursor#12 [phi:main::@4->print_word#0] -- register_copy // [67] phi (word) print_word::w#4 = (word) print_word::w#2 [phi:main::@4->print_word#1] -- register_copy jsr print_word - // [21] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // [19] phi from main::@4 to main::@5 [phi:main::@4->main::@5] b5_from_b4: jmp b5 // main::@5 b5: - // [22] call print_char + // [20] call print_char // [63] phi from main::@5 to print_char [phi:main::@5->print_char] print_char_from_b5: // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@5->print_char#0] -- register_copy @@ -2252,23 +2268,23 @@ main: { jmp b6 // main::@6 b6: - // [23] (word) print_word::w#3 ← < (dword) main::dw2#10 -- vwuz1=_lo_vduz2 + // [21] (word) print_word::w#3 ← < (dword) main::dw2#10 -- vwuz1=_lo_vduz2 lda dw2 sta print_word.w lda dw2+1 sta print_word.w+1 - // [24] call print_word + // [22] call print_word // [67] phi from main::@6 to print_word [phi:main::@6->print_word] print_word_from_b6: // [67] phi (byte*) print_char_cursor#65 = (byte*) print_char_cursor#12 [phi:main::@6->print_word#0] -- register_copy // [67] phi (word) print_word::w#4 = (word) print_word::w#3 [phi:main::@6->print_word#1] -- register_copy jsr print_word - // [25] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + // [23] phi from main::@6 to main::@7 [phi:main::@6->main::@7] b7_from_b6: jmp b7 // main::@7 b7: - // [26] call print_char + // [24] call print_char // [63] phi from main::@7 to print_char [phi:main::@7->print_char] print_char_from_b7: // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@7->print_char#0] -- register_copy @@ -2278,26 +2294,26 @@ main: { jmp b8 // main::@8 b8: - // [27] (word~) main::$16 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 + // [25] (word~) main::$16 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 lda dw2+2 sta _16 lda dw2+3 sta _16+1 - // [28] (byte) print_byte::b#2 ← > (word~) main::$16 -- vbuxx=_hi_vwuz1 + // [26] (byte) print_byte::b#2 ← > (word~) main::$16 -- vbuxx=_hi_vwuz1 lda _16+1 tax - // [29] call print_byte + // [27] call print_byte // [55] phi from main::@8 to print_byte [phi:main::@8->print_byte] print_byte_from_b8: // [55] phi (byte*) print_char_cursor#67 = (byte*) print_char_cursor#12 [phi:main::@8->print_byte#0] -- register_copy // [55] phi (byte) print_byte::b#6 = (byte) print_byte::b#2 [phi:main::@8->print_byte#1] -- register_copy jsr print_byte - // [30] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [28] phi from main::@8 to main::@9 [phi:main::@8->main::@9] b9_from_b8: jmp b9 // main::@9 b9: - // [31] call print_char + // [29] call print_char // [63] phi from main::@9 to print_char [phi:main::@9->print_char] print_char_from_b9: // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@9->print_char#0] -- register_copy @@ -2307,26 +2323,26 @@ main: { jmp b10 // main::@10 b10: - // [32] (word~) main::$20 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 + // [30] (word~) main::$20 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 lda dw2+2 sta _20 lda dw2+3 sta _20+1 - // [33] (byte) print_byte::b#3 ← < (word~) main::$20 -- vbuxx=_lo_vwuz1 + // [31] (byte) print_byte::b#3 ← < (word~) main::$20 -- vbuxx=_lo_vwuz1 lda _20 tax - // [34] call print_byte + // [32] call print_byte // [55] phi from main::@10 to print_byte [phi:main::@10->print_byte] print_byte_from_b10: // [55] phi (byte*) print_char_cursor#67 = (byte*) print_char_cursor#12 [phi:main::@10->print_byte#0] -- register_copy // [55] phi (byte) print_byte::b#6 = (byte) print_byte::b#3 [phi:main::@10->print_byte#1] -- register_copy jsr print_byte - // [35] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [33] phi from main::@10 to main::@11 [phi:main::@10->main::@11] b11_from_b10: jmp b11 // main::@11 b11: - // [36] call print_char + // [34] call print_char // [63] phi from main::@11 to print_char [phi:main::@11->print_char] print_char_from_b11: // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@11->print_char#0] -- register_copy @@ -2336,26 +2352,26 @@ main: { jmp b12 // main::@12 b12: - // [37] (word~) main::$24 ← < (dword) main::dw2#10 -- vwuz1=_lo_vduz2 + // [35] (word~) main::$24 ← < (dword) main::dw2#10 -- vwuz1=_lo_vduz2 lda dw2 sta _24 lda dw2+1 sta _24+1 - // [38] (byte) print_byte::b#4 ← > (word~) main::$24 -- vbuxx=_hi_vwuz1 + // [36] (byte) print_byte::b#4 ← > (word~) main::$24 -- vbuxx=_hi_vwuz1 lda _24+1 tax - // [39] call print_byte + // [37] call print_byte // [55] phi from main::@12 to print_byte [phi:main::@12->print_byte] print_byte_from_b12: // [55] phi (byte*) print_char_cursor#67 = (byte*) print_char_cursor#12 [phi:main::@12->print_byte#0] -- register_copy // [55] phi (byte) print_byte::b#6 = (byte) print_byte::b#4 [phi:main::@12->print_byte#1] -- register_copy jsr print_byte - // [40] phi from main::@12 to main::@13 [phi:main::@12->main::@13] + // [38] phi from main::@12 to main::@13 [phi:main::@12->main::@13] b13_from_b12: jmp b13 // main::@13 b13: - // [41] call print_char + // [39] call print_char // [63] phi from main::@13 to print_char [phi:main::@13->print_char] print_char_from_b13: // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@13->print_char#0] -- register_copy @@ -2365,33 +2381,33 @@ main: { jmp b14 // main::@14 b14: - // [42] (word~) main::$28 ← < (dword) main::dw2#10 -- vwuz1=_lo_vduz2 + // [40] (word~) main::$28 ← < (dword) main::dw2#10 -- vwuz1=_lo_vduz2 lda dw2 sta _28 lda dw2+1 sta _28+1 - // [43] (byte) print_byte::b#5 ← < (word~) main::$28 -- vbuxx=_lo_vwuz1 + // [41] (byte) print_byte::b#5 ← < (word~) main::$28 -- vbuxx=_lo_vwuz1 lda _28 tax - // [44] call print_byte + // [42] call print_byte // [55] phi from main::@14 to print_byte [phi:main::@14->print_byte] print_byte_from_b14: // [55] phi (byte*) print_char_cursor#67 = (byte*) print_char_cursor#12 [phi:main::@14->print_byte#0] -- register_copy // [55] phi (byte) print_byte::b#6 = (byte) print_byte::b#5 [phi:main::@14->print_byte#1] -- register_copy jsr print_byte - // [45] phi from main::@14 to main::@15 [phi:main::@14->main::@15] + // [43] phi from main::@14 to main::@15 [phi:main::@14->main::@15] b15_from_b14: jmp b15 // main::@15 b15: - // [46] call print_ln + // [44] call print_ln // [49] phi from main::@15 to print_ln [phi:main::@15->print_ln] print_ln_from_b15: jsr print_ln jmp b16 // main::@16 b16: - // [47] (dword) main::dw#1 ← ++ (dword) main::dw#10 -- vduz1=_inc_vduz1 + // [45] (dword) main::dw#1 ← ++ (dword) main::dw#18 -- vduz1=_inc_vduz1 inc dw bne !+ inc dw+1 @@ -2400,17 +2416,40 @@ main: { bne !+ inc dw+3 !: - // [48] (byte*~) print_line_cursor#38 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 - lda print_line_cursor - sta print_line_cursor_38 - lda print_line_cursor+1 - sta print_line_cursor_38+1 - // [6] phi from main::@16 to main::@1 [phi:main::@16->main::@1] - b1_from_b16: - // [6] phi (byte*) print_char_cursor#31 = (byte*) print_line_cursor#1 [phi:main::@16->main::@1#0] -- register_copy - // [6] phi (byte*) print_line_cursor#15 = (byte*~) print_line_cursor#38 [phi:main::@16->main::@1#1] -- register_copy - // [6] phi (dword) main::dw#10 = (dword) main::dw#1 [phi:main::@16->main::@1#2] -- register_copy jmp b1 + // main::@1 + b1: + // [46] if((dword) main::dw#1!=(dword) $12345690) goto main::@17 -- vduz1_neq_vduc1_then_la1 + lda dw+3 + cmp #>$12345690>>$10 + bne b17 + lda dw+2 + cmp #<$12345690>>$10 + bne b17 + lda dw+1 + cmp #>$12345690 + bne b17 + lda dw + cmp #<$12345690 + bne b17 + jmp breturn + // main::@return + breturn: + // [47] return + rts + // main::@17 + b17: + // [48] (byte*~) print_line_cursor#54 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_line_cursor_54 + lda print_line_cursor+1 + sta print_line_cursor_54+1 + // [6] phi from main::@17 to main::@2 [phi:main::@17->main::@2] + b2_from_b17: + // [6] phi (byte*) print_char_cursor#74 = (byte*) print_line_cursor#1 [phi:main::@17->main::@2#0] -- register_copy + // [6] phi (byte*) print_line_cursor#37 = (byte*~) print_line_cursor#54 [phi:main::@17->main::@2#1] -- register_copy + // [6] phi (dword) main::dw#18 = (dword) main::dw#1 [phi:main::@17->main::@2#2] -- register_copy + jmp b2 } // print_ln // Print a newline @@ -2418,7 +2457,7 @@ print_ln: { // [50] phi from print_ln print_ln::@2 to print_ln::@1 [phi:print_ln/print_ln::@2->print_ln::@1] b1_from_print_ln: b1_from_b2: - // [50] phi (byte*) print_line_cursor#9 = (byte*) print_line_cursor#15 [phi:print_ln/print_ln::@2->print_ln::@1#0] -- register_copy + // [50] phi (byte*) print_line_cursor#9 = (byte*) print_line_cursor#37 [phi:print_ln/print_ln::@2->print_ln::@1#0] -- register_copy jmp b1 // print_ln::@1 b1: @@ -2446,11 +2485,11 @@ print_ln: { rts // print_ln::@2 b2: - // [54] (byte*~) print_line_cursor#37 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [54] (byte*~) print_line_cursor#53 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor - sta print_line_cursor_37 + sta print_line_cursor_53 lda print_line_cursor+1 - sta print_line_cursor_37+1 + sta print_line_cursor_53+1 jmp b1_from_b2 } // print_byte @@ -2552,15 +2591,15 @@ print_dword: { sta print_word.w lda dw+3 sta print_word.w+1 - // [74] (byte*~) print_char_cursor#75 ← (byte*) print_char_cursor#31 -- pbuz1=pbuz2 - lda print_char_cursor_31 + // [74] (byte*~) print_char_cursor#78 ← (byte*) print_char_cursor#74 -- pbuz1=pbuz2 + lda print_char_cursor_74 sta print_char_cursor - lda print_char_cursor_31+1 + lda print_char_cursor_74+1 sta print_char_cursor+1 // [75] call print_word // [67] phi from print_dword to print_word [phi:print_dword->print_word] print_word_from_print_dword: - // [67] phi (byte*) print_char_cursor#65 = (byte*~) print_char_cursor#75 [phi:print_dword->print_word#0] -- register_copy + // [67] phi (byte*) print_char_cursor#65 = (byte*~) print_char_cursor#78 [phi:print_dword->print_word#0] -- register_copy // [67] phi (word) print_word::w#4 = (word) print_word::w#0 [phi:print_dword->print_word#1] -- register_copy jsr print_word jmp b1 @@ -2604,43 +2643,44 @@ memset: { .label str = $400 .label end = str+num .label dst = $10 - // [83] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [83] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [83] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [83] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [83] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [84] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [85] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [83] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [83] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [86] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #@1] // @1 @@ -2920,18 +2969,18 @@ main: { // [5] call print_cls // [79] phi from main to print_cls [phi:main->print_cls] jsr print_cls - // [6] phi from main to main::@1 [phi:main->main::@1] - // [6] phi (byte*) print_char_cursor#31 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [6] phi from main to main::@2 [phi:main->main::@2] + // [6] phi (byte*) print_char_cursor#74 = (byte*) 1024 [phi:main->main::@2#0] -- pbuz1=pbuc1 lda #<$400 - sta print_char_cursor_31 + sta print_char_cursor_74 lda #>$400 - sta print_char_cursor_31+1 - // [6] phi (byte*) print_line_cursor#15 = (byte*) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1 + sta print_char_cursor_74+1 + // [6] phi (byte*) print_line_cursor#37 = (byte*) 1024 [phi:main->main::@2#1] -- pbuz1=pbuc1 lda #<$400 - sta print_line_cursor_15 + sta print_line_cursor_37 lda #>$400 - sta print_line_cursor_15+1 - // [6] phi (dword) main::dw#10 = (dword) $12345678 [phi:main->main::@1#2] -- vduz1=vduc1 + sta print_line_cursor_37+1 + // [6] phi (dword) main::dw#18 = (dword) $12345678 [phi:main->main::@2#2] -- vduz1=vduc1 lda #<$12345678 sta dw lda #>$12345678 @@ -2940,36 +2989,16 @@ main: { sta dw+2 lda #>$12345678>>$10 sta dw+3 - // main::@1 - b1: - // for( dword dw = $12345678; dw != $12345690; dw++ ) - // [7] if((dword) main::dw#10!=(dword) $12345690) goto main::@2 -- vduz1_neq_vduc1_then_la1 - lda dw+3 - cmp #>$12345690>>$10 - bne b2 - lda dw+2 - cmp #<$12345690>>$10 - bne b2 - lda dw+1 - cmp #>$12345690 - bne b2 - lda dw - cmp #<$12345690 - bne b2 - // main::@return - // } - // [8] return - rts // main::@2 b2: // >dw - // [9] (word~) main::$3 ← > (dword) main::dw#10 -- vwuz1=_hi_vduz2 + // [7] (word~) main::$3 ← > (dword) main::dw#18 -- vwuz1=_hi_vduz2 lda dw+2 sta _3 lda dw+3 sta _3+1 // >dw2 = (>dw) + $1111 - // [10] (word~) main::$32 ← (word~) main::$3 + (word) $1111 -- vwuz1=vwuz1_plus_vwuc1 + // [8] (word~) main::$32 ← (word~) main::$3 + (word) $1111 -- vwuz1=vwuz1_plus_vwuc1 clc lda _32 adc #<$1111 @@ -2977,7 +3006,7 @@ main: { lda _32+1 adc #>$1111 sta _32+1 - // [11] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 -- vduz1=vduz2_sethi_vwuz3 + // [9] (dword) main::dw2#1 ← (dword) main::dw#18 hi= (word~) main::$32 -- vduz1=vduz2_sethi_vwuz3 lda dw sta dw2 lda dw+1 @@ -2987,13 +3016,13 @@ main: { lda _32+1 sta dw2+3 // $1111 sta _33+1 - // [14] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 -- vduz1=vduz1_setlo_vwuz2 + // [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 -- vduz1=vduz1_setlo_vwuz2 lda _33 sta dw2 lda _33+1 sta dw2+1 // print_dword(dw2) - // [15] (dword) print_dword::dw#0 ← (dword) main::dw2#10 - // [16] call print_dword + // [13] (dword) print_dword::dw#0 ← (dword) main::dw2#10 + // [14] call print_dword jsr print_dword - // [17] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [15] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // print_char(' ') - // [18] call print_char + // [16] call print_char // [63] phi from main::@3 to print_char [phi:main::@3->print_char] // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@3->print_char#0] -- register_copy // [63] phi (byte) print_char::ch#8 = (byte) ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 @@ -3021,20 +3050,20 @@ main: { jsr print_char // main::@4 // print_word(>dw2) - // [19] (word) print_word::w#2 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 + // [17] (word) print_word::w#2 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 lda dw2+2 sta print_word.w lda dw2+3 sta print_word.w+1 - // [20] call print_word + // [18] call print_word // [67] phi from main::@4 to print_word [phi:main::@4->print_word] // [67] phi (byte*) print_char_cursor#65 = (byte*) print_char_cursor#12 [phi:main::@4->print_word#0] -- register_copy // [67] phi (word) print_word::w#4 = (word) print_word::w#2 [phi:main::@4->print_word#1] -- register_copy jsr print_word - // [21] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // [19] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // print_char(' ') - // [22] call print_char + // [20] call print_char // [63] phi from main::@5 to print_char [phi:main::@5->print_char] // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@5->print_char#0] -- register_copy // [63] phi (byte) print_char::ch#8 = (byte) ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 @@ -3042,20 +3071,20 @@ main: { jsr print_char // main::@6 // print_word(print_word] // [67] phi (byte*) print_char_cursor#65 = (byte*) print_char_cursor#12 [phi:main::@6->print_word#0] -- register_copy // [67] phi (word) print_word::w#4 = (word) print_word::w#3 [phi:main::@6->print_word#1] -- register_copy jsr print_word - // [25] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + // [23] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // print_char(' ') - // [26] call print_char + // [24] call print_char // [63] phi from main::@7 to print_char [phi:main::@7->print_char] // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@7->print_char#0] -- register_copy // [63] phi (byte) print_char::ch#8 = (byte) ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 @@ -3063,23 +3092,23 @@ main: { jsr print_char // main::@8 // >dw2 - // [27] (word~) main::$16 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 + // [25] (word~) main::$16 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 lda dw2+2 sta _16 lda dw2+3 sta _16+1 // print_byte(> >dw2) - // [28] (byte) print_byte::b#2 ← > (word~) main::$16 -- vbuxx=_hi_vwuz1 + // [26] (byte) print_byte::b#2 ← > (word~) main::$16 -- vbuxx=_hi_vwuz1 tax - // [29] call print_byte + // [27] call print_byte // [55] phi from main::@8 to print_byte [phi:main::@8->print_byte] // [55] phi (byte*) print_char_cursor#67 = (byte*) print_char_cursor#12 [phi:main::@8->print_byte#0] -- register_copy // [55] phi (byte) print_byte::b#6 = (byte) print_byte::b#2 [phi:main::@8->print_byte#1] -- register_copy jsr print_byte - // [30] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [28] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // print_char(' ') - // [31] call print_char + // [29] call print_char // [63] phi from main::@9 to print_char [phi:main::@9->print_char] // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@9->print_char#0] -- register_copy // [63] phi (byte) print_char::ch#8 = (byte) ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 @@ -3087,24 +3116,24 @@ main: { jsr print_char // main::@10 // >dw2 - // [32] (word~) main::$20 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 + // [30] (word~) main::$20 ← > (dword) main::dw2#10 -- vwuz1=_hi_vduz2 lda dw2+2 sta _20 lda dw2+3 sta _20+1 // print_byte(< >dw2) - // [33] (byte) print_byte::b#3 ← < (word~) main::$20 -- vbuxx=_lo_vwuz1 + // [31] (byte) print_byte::b#3 ← < (word~) main::$20 -- vbuxx=_lo_vwuz1 lda _20 tax - // [34] call print_byte + // [32] call print_byte // [55] phi from main::@10 to print_byte [phi:main::@10->print_byte] // [55] phi (byte*) print_char_cursor#67 = (byte*) print_char_cursor#12 [phi:main::@10->print_byte#0] -- register_copy // [55] phi (byte) print_byte::b#6 = (byte) print_byte::b#3 [phi:main::@10->print_byte#1] -- register_copy jsr print_byte - // [35] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [33] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // print_char(' ') - // [36] call print_char + // [34] call print_char // [63] phi from main::@11 to print_char [phi:main::@11->print_char] // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@11->print_char#0] -- register_copy // [63] phi (byte) print_char::ch#8 = (byte) ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 @@ -3112,23 +3141,23 @@ main: { jsr print_char // main::@12 // (word~) main::$24 -- vbuxx=_hi_vwuz1 + // [36] (byte) print_byte::b#4 ← > (word~) main::$24 -- vbuxx=_hi_vwuz1 tax - // [39] call print_byte + // [37] call print_byte // [55] phi from main::@12 to print_byte [phi:main::@12->print_byte] // [55] phi (byte*) print_char_cursor#67 = (byte*) print_char_cursor#12 [phi:main::@12->print_byte#0] -- register_copy // [55] phi (byte) print_byte::b#6 = (byte) print_byte::b#4 [phi:main::@12->print_byte#1] -- register_copy jsr print_byte - // [40] phi from main::@12 to main::@13 [phi:main::@12->main::@13] + // [38] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // print_char(' ') - // [41] call print_char + // [39] call print_char // [63] phi from main::@13 to print_char [phi:main::@13->print_char] // [63] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:main::@13->print_char#0] -- register_copy // [63] phi (byte) print_char::ch#8 = (byte) ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 @@ -3136,29 +3165,29 @@ main: { jsr print_char // main::@14 // print_byte] // [55] phi (byte*) print_char_cursor#67 = (byte*) print_char_cursor#12 [phi:main::@14->print_byte#0] -- register_copy // [55] phi (byte) print_byte::b#6 = (byte) print_byte::b#5 [phi:main::@14->print_byte#1] -- register_copy jsr print_byte - // [45] phi from main::@14 to main::@15 [phi:main::@14->main::@15] + // [43] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // print_ln() - // [46] call print_ln + // [44] call print_ln // [49] phi from main::@15 to print_ln [phi:main::@15->print_ln] jsr print_ln // main::@16 // for( dword dw = $12345678; dw != $12345690; dw++ ) - // [47] (dword) main::dw#1 ← ++ (dword) main::dw#10 -- vduz1=_inc_vduz1 + // [45] (dword) main::dw#1 ← ++ (dword) main::dw#18 -- vduz1=_inc_vduz1 inc dw bne !+ inc dw+1 @@ -3167,22 +3196,42 @@ main: { bne !+ inc dw+3 !: - // [48] (byte*~) print_line_cursor#38 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // main::@1 + // [46] if((dword) main::dw#1!=(dword) $12345690) goto main::@17 -- vduz1_neq_vduc1_then_la1 + lda dw+3 + cmp #>$12345690>>$10 + bne b17 + lda dw+2 + cmp #<$12345690>>$10 + bne b17 + lda dw+1 + cmp #>$12345690 + bne b17 + lda dw + cmp #<$12345690 + bne b17 + // main::@return + // } + // [47] return + rts + // main::@17 + b17: + // [48] (byte*~) print_line_cursor#54 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor - sta print_line_cursor_38 + sta print_line_cursor_54 lda print_line_cursor+1 - sta print_line_cursor_38+1 - // [6] phi from main::@16 to main::@1 [phi:main::@16->main::@1] - // [6] phi (byte*) print_char_cursor#31 = (byte*) print_line_cursor#1 [phi:main::@16->main::@1#0] -- register_copy - // [6] phi (byte*) print_line_cursor#15 = (byte*~) print_line_cursor#38 [phi:main::@16->main::@1#1] -- register_copy - // [6] phi (dword) main::dw#10 = (dword) main::dw#1 [phi:main::@16->main::@1#2] -- register_copy - jmp b1 + sta print_line_cursor_54+1 + // [6] phi from main::@17 to main::@2 [phi:main::@17->main::@2] + // [6] phi (byte*) print_char_cursor#74 = (byte*) print_line_cursor#1 [phi:main::@17->main::@2#0] -- register_copy + // [6] phi (byte*) print_line_cursor#37 = (byte*~) print_line_cursor#54 [phi:main::@17->main::@2#1] -- register_copy + // [6] phi (dword) main::dw#18 = (dword) main::dw#1 [phi:main::@17->main::@2#2] -- register_copy + jmp b2 } // print_ln // Print a newline print_ln: { // [50] phi from print_ln print_ln::@2 to print_ln::@1 [phi:print_ln/print_ln::@2->print_ln::@1] - // [50] phi (byte*) print_line_cursor#9 = (byte*) print_line_cursor#15 [phi:print_ln/print_ln::@2->print_ln::@1#0] -- register_copy + // [50] phi (byte*) print_line_cursor#9 = (byte*) print_line_cursor#37 [phi:print_ln/print_ln::@2->print_ln::@1#0] -- register_copy // print_ln::@1 b1: // print_line_cursor + $28 @@ -3209,11 +3258,11 @@ print_ln: { rts // print_ln::@2 b2: - // [54] (byte*~) print_line_cursor#37 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [54] (byte*~) print_line_cursor#53 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor - sta print_line_cursor_37 + sta print_line_cursor_53 lda print_line_cursor+1 - sta print_line_cursor_37+1 + sta print_line_cursor_53+1 jmp b1 } // print_byte @@ -3313,15 +3362,15 @@ print_dword: { sta print_word.w lda dw+3 sta print_word.w+1 - // [74] (byte*~) print_char_cursor#75 ← (byte*) print_char_cursor#31 -- pbuz1=pbuz2 - lda print_char_cursor_31 + // [74] (byte*~) print_char_cursor#78 ← (byte*) print_char_cursor#74 -- pbuz1=pbuz2 + lda print_char_cursor_74 sta print_char_cursor - lda print_char_cursor_31+1 + lda print_char_cursor_74+1 sta print_char_cursor+1 // print_word(>dw) // [75] call print_word // [67] phi from print_dword to print_word [phi:print_dword->print_word] - // [67] phi (byte*) print_char_cursor#65 = (byte*~) print_char_cursor#75 [phi:print_dword->print_word#0] -- register_copy + // [67] phi (byte*) print_char_cursor#65 = (byte*~) print_char_cursor#78 [phi:print_dword->print_word#0] -- register_copy // [67] phi (word) print_word::w#4 = (word) print_word::w#0 [phi:print_dword->print_word#1] -- register_copy jsr print_word // print_dword::@1 @@ -3361,16 +3410,29 @@ memset: { .label str = $400 .label end = str+num .label dst = $10 - // [83] phi from memset to memset::@1 [phi:memset->memset::@1] - // [83] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [83] phi from memset to memset::@2 [phi:memset->memset::@2] + // [83] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [83] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [83] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [84] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [85] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [86] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -3379,24 +3441,8 @@ memset: { bne b2 // memset::@return // } - // [85] return + // [87] return rts - // memset::@2 - b2: - // *dst = c - // [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [83] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [83] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/test-lowhigh.sym b/src/test/ref/test-lowhigh.sym index 4468c5713..5e31d329a 100644 --- a/src/test/ref/test-lowhigh.sym +++ b/src/test/ref/test-lowhigh.sym @@ -22,6 +22,7 @@ (label) main::@14 (label) main::@15 (label) main::@16 +(label) main::@17 (label) main::@2 (label) main::@3 (label) main::@4 @@ -33,7 +34,7 @@ (label) main::@return (dword) main::dw (dword) main::dw#1 dw zp ZP_DWORD:2 11.0 -(dword) main::dw#10 dw zp ZP_DWORD:2 1.65 +(dword) main::dw#18 dw zp ZP_DWORD:2 1.4102564102564101 (dword) main::dw2 (dword) main::dw2#1 dw2 zp ZP_DWORD:10 7.333333333333333 (dword) main::dw2#10 dw2 zp ZP_DWORD:10 3.142857142857143 @@ -44,8 +45,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:16 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:16 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:16 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:16 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -74,11 +75,11 @@ (byte) print_char::ch#8 reg byte a 6.0 (byte*) print_char_cursor (byte*) print_char_cursor#12 print_char_cursor zp ZP_WORD:8 4.820000000000001 -(byte*) print_char_cursor#31 print_char_cursor#31 zp ZP_WORD:16 1.3 (byte*) print_char_cursor#44 print_char_cursor zp ZP_WORD:8 37.0 (byte*) print_char_cursor#65 print_char_cursor zp ZP_WORD:8 14.0 (byte*) print_char_cursor#67 print_char_cursor zp ZP_WORD:8 16.666666666666664 -(byte*~) print_char_cursor#75 print_char_cursor zp ZP_WORD:8 4.0 +(byte*) print_char_cursor#74 print_char_cursor#74 zp ZP_WORD:16 1.4444444444444446 +(byte*~) print_char_cursor#78 print_char_cursor zp ZP_WORD:8 4.0 (void()) print_cls() (label) print_cls::@return (void()) print_dword((dword) print_dword::dw) @@ -89,10 +90,10 @@ (byte[]) print_hextab (const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef" (byte*) print_line_cursor -(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:16 54.16666666666666 -(byte*) print_line_cursor#15 print_line_cursor#15 zp ZP_WORD:6 0.325 -(byte*~) print_line_cursor#37 print_line_cursor#37 zp ZP_WORD:6 202.0 -(byte*~) print_line_cursor#38 print_line_cursor#38 zp ZP_WORD:6 22.0 +(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:16 46.42857142857143 +(byte*) print_line_cursor#37 print_line_cursor#37 zp ZP_WORD:6 0.3333333333333333 +(byte*~) print_line_cursor#53 print_line_cursor#53 zp ZP_WORD:6 202.0 +(byte*~) print_line_cursor#54 print_line_cursor#54 zp ZP_WORD:6 22.0 (byte*) print_line_cursor#9 print_line_cursor#9 zp ZP_WORD:6 204.0 (void()) print_ln() (label) print_ln::@1 @@ -109,14 +110,14 @@ (word) print_word::w#3 w zp ZP_WORD:14 22.0 (word) print_word::w#4 w zp ZP_WORD:14 9.999999999999998 -zp ZP_DWORD:2 [ main::dw#10 main::dw#1 ] -zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#15 print_line_cursor#38 print_line_cursor#37 ] +zp ZP_DWORD:2 [ main::dw#18 main::dw#1 ] +zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#37 print_line_cursor#54 print_line_cursor#53 ] reg byte x [ print_byte::b#6 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] -zp ZP_WORD:8 [ main::$3 main::$32 print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#75 ] +zp ZP_WORD:8 [ main::$3 main::$32 print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#78 ] zp ZP_DWORD:10 [ main::dw2#1 main::dw2#10 print_dword::dw#0 ] zp ZP_WORD:14 [ main::$6 main::$33 print_word::w#4 print_word::w#3 print_word::w#2 print_word::w#0 print_word::w#1 ] -zp ZP_WORD:16 [ main::$16 memset::dst#2 memset::dst#1 print_char_cursor#31 print_line_cursor#1 ] +zp ZP_WORD:16 [ main::$16 memset::dst#4 memset::dst#1 print_char_cursor#74 print_line_cursor#1 ] zp ZP_WORD:18 [ main::$20 ] zp ZP_WORD:20 [ main::$24 ] zp ZP_WORD:22 [ main::$28 ] diff --git a/src/test/ref/test-multiply-16bit.asm b/src/test/ref/test-multiply-16bit.asm index e7cc2a147..11ee5e380 100644 --- a/src/test/ref/test-multiply-16bit.asm +++ b/src/test/ref/test-multiply-16bit.asm @@ -1115,14 +1115,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [311] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [311] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [311] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [312] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [311] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [314] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [312] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [315] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [313] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [311] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [311] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [314] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp # (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$13 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$13 ] ) always clobbers reg byte a Statement [303] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y Statement [305] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a -Statement [312] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:308 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [314] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:308 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [312] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:308 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [314] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:308 [ memset::dst#1 ] ) always clobbers reg byte a Statement [4] *((const byte*) BGCOL#0) ← (byte) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [13] (byte*~) print_char_cursor#222 ← (byte*) print_line_cursor#1 [ print_char_cursor#222 print_line_cursor#1 ] ( main:2::mul16s_compare:11 [ print_char_cursor#222 print_line_cursor#1 ] ) always clobbers reg byte a Statement [17] (signed word) mul16s_compare::a#1 ← (signed word) mul16s_compare::a#2 + (signed word) $d2b [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#2 mul16s_compare::j#10 ] ( main:2::mul16s_compare:11 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#2 mul16s_compare::j#10 ] ) always clobbers reg byte a @@ -8121,8 +8133,8 @@ Statement [301] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 [ mul Statement [302] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$13 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$13 ] ) always clobbers reg byte a Statement [303] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y Statement [305] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a -Statement [312] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:308 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [314] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:308 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [312] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:308 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [314] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:308 [ memset::dst#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] : zp ZP_BYTE:2 , Potential registers zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] : zp ZP_WORD:3 , Potential registers zp ZP_WORD:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 ] : zp ZP_WORD:5 , @@ -8165,7 +8177,7 @@ Potential registers zp ZP_BYTE:84 [ mulf_init::x_255#2 mulf_init::x_255#1 ] : zp Potential registers zp ZP_WORD:85 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp ZP_WORD:85 , Potential registers zp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#4 ] : zp ZP_BYTE:87 , reg byte x , Potential registers zp ZP_WORD:88 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp ZP_WORD:88 , -Potential registers zp ZP_WORD:90 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:90 , +Potential registers zp ZP_WORD:90 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:90 , Potential registers zp ZP_WORD:92 [ muls16s::a#0 ] : zp ZP_WORD:92 , Potential registers zp ZP_WORD:94 [ muls16s::b#0 ] : zp ZP_WORD:94 , Potential registers zp ZP_DWORD:96 [ muls16s::return#2 ] : zp ZP_DWORD:96 , @@ -8228,7 +8240,7 @@ Uplift Scope [mul16s] 202: zp ZP_DWORD:108 [ mul16s::return#2 ] 34.33: zp ZP_DWO Uplift Scope [mulf16s] 202: zp ZP_DWORD:120 [ mulf16s::return#2 ] 34.33: zp ZP_DWORD:158 [ mulf16s::return#0 ] 16.5: zp ZP_DWORD:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] 9.36: zp ZP_WORD:118 [ mulf16s::b#0 ] 7.36: zp ZP_WORD:116 [ mulf16s::a#0 ] 4: zp ZP_WORD:150 [ mulf16s::$9 ] 4: zp ZP_WORD:152 [ mulf16s::$16 ] 4: zp ZP_WORD:154 [ mulf16s::$13 ] 4: zp ZP_WORD:156 [ mulf16s::$17 ] Uplift Scope [] 237.59: zp ZP_WORD:24 [ print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#222 print_char_cursor#132 print_char_cursor#22 print_char_cursor#183 print_char_cursor#145 print_char_cursor#190 print_char_cursor#1 ] 34.6: zp ZP_WORD:9 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ] Uplift Scope [mulf_init] 47.67: zp ZP_WORD:88 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 26.89: zp ZP_WORD:82 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 25.14: zp ZP_WORD:76 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 23.1: zp ZP_BYTE:81 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp ZP_BYTE:227 [ mulf_init::$9 ] 22: zp ZP_BYTE:228 [ mulf_init::$12 ] 22: zp ZP_BYTE:229 [ mulf_init::$13 ] 15.4: zp ZP_BYTE:84 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 15.12: zp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#4 ] 13.54: zp ZP_BYTE:78 [ mulf_init::c#2 mulf_init::c#1 ] 11.92: zp ZP_WORD:85 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 10.08: zp ZP_WORD:79 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:90 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [memset] 33: zp ZP_WORD:90 [ memset::dst#4 memset::dst#1 ] Uplift Scope [print_word] 24.67: zp ZP_WORD:22 [ print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 ] Uplift Scope [print_sdword] 22: zp ZP_DWORD:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 ] Uplift Scope [print_dword] 20: zp ZP_DWORD:18 [ print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 ] @@ -8242,41 +8254,41 @@ Uplift Scope [print_ln] Uplift Scope [print_cls] Uplift Scope [main] -Uplifting [muls16s] best 548951 combination zp ZP_DWORD:57 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 ] zp ZP_WORD:55 [ muls16s::j#2 muls16s::j#1 ] zp ZP_WORD:61 [ muls16s::i#2 muls16s::i#1 ] zp ZP_DWORD:96 [ muls16s::return#2 ] zp ZP_WORD:94 [ muls16s::b#0 ] zp ZP_WORD:92 [ muls16s::a#0 ] -Uplifting [mul16u] best 542951 combination zp ZP_DWORD:47 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:51 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:45 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:43 [ mul16u::b#1 ] zp ZP_DWORD:195 [ mul16u::return#3 ] zp ZP_WORD:41 [ mul16u::b#0 ] zp ZP_DWORD:166 [ mul16u::return#2 ] -Uplifting [muls16u] best 542951 combination zp ZP_WORD:70 [ muls16u::i#2 muls16u::i#1 ] zp ZP_DWORD:72 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] zp ZP_DWORD:187 [ muls16u::return#2 ] zp ZP_WORD:185 [ muls16u::b#0 ] zp ZP_WORD:183 [ muls16u::a#0 ] -Uplifting [mul16u_compare] best 540851 combination zp ZP_WORD:64 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] reg byte x [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] reg byte y [ mul16u_compare::j#10 mul16u_compare::j#1 ] zp ZP_WORD:66 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] zp ZP_BYTE:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] zp ZP_DWORD:207 [ mul16u_compare::mf#0 ] zp ZP_DWORD:191 [ mul16u_compare::ms#0 ] zp ZP_DWORD:199 [ mul16u_compare::mn#0 ] -Uplifting [mul16s_compare] best 538751 combination zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] reg byte x [ mul16s_compare::ok#3 mul16s_compare::ok#4 ] reg byte y [ mul16s_compare::j#10 mul16s_compare::j#1 ] zp ZP_WORD:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 ] zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] zp ZP_DWORD:124 [ mul16s_compare::mf#0 ] zp ZP_DWORD:100 [ mul16s_compare::ms#0 ] zp ZP_DWORD:112 [ mul16s_compare::mn#0 ] -Uplifting [mulf16u] best 538751 combination zp ZP_WORD:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 ] zp ZP_WORD:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 ] zp ZP_DWORD:203 [ mulf16u::return#3 ] zp ZP_DWORD:162 [ mulf16u::return#0 ] zp ZP_DWORD:146 [ mulf16u::return#2 ] -Uplifting [print_str] best 538751 combination zp ZP_WORD:11 [ print_str::str#15 print_str::str#17 print_str::str#0 ] -Uplifting [mul16s] best 538751 combination zp ZP_DWORD:108 [ mul16s::return#2 ] zp ZP_DWORD:178 [ mul16s::return#0 ] zp ZP_DWORD:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp ZP_WORD:106 [ mul16s::b#0 ] zp ZP_WORD:104 [ mul16s::a#0 ] zp ZP_WORD:170 [ mul16s::$9 ] zp ZP_WORD:172 [ mul16s::$16 ] zp ZP_WORD:174 [ mul16s::$13 ] zp ZP_WORD:176 [ mul16s::$17 ] -Uplifting [mulf16s] best 538751 combination zp ZP_DWORD:120 [ mulf16s::return#2 ] zp ZP_DWORD:158 [ mulf16s::return#0 ] zp ZP_DWORD:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] zp ZP_WORD:118 [ mulf16s::b#0 ] zp ZP_WORD:116 [ mulf16s::a#0 ] zp ZP_WORD:150 [ mulf16s::$9 ] zp ZP_WORD:152 [ mulf16s::$16 ] zp ZP_WORD:154 [ mulf16s::$13 ] zp ZP_WORD:156 [ mulf16s::$17 ] -Uplifting [] best 538751 combination zp ZP_WORD:24 [ print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#222 print_char_cursor#132 print_char_cursor#22 print_char_cursor#183 print_char_cursor#145 print_char_cursor#190 print_char_cursor#1 ] zp ZP_WORD:9 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ] -Uplifting [mulf_init] best 538501 combination zp ZP_WORD:88 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp ZP_WORD:82 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp ZP_WORD:76 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$9 ] reg byte a [ mulf_init::$12 ] reg byte a [ mulf_init::$13 ] zp ZP_BYTE:84 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#4 ] zp ZP_BYTE:78 [ mulf_init::c#2 mulf_init::c#1 ] zp ZP_WORD:85 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp ZP_WORD:79 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplifting [muls16s] best 548981 combination zp ZP_DWORD:57 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 ] zp ZP_WORD:55 [ muls16s::j#2 muls16s::j#1 ] zp ZP_WORD:61 [ muls16s::i#2 muls16s::i#1 ] zp ZP_DWORD:96 [ muls16s::return#2 ] zp ZP_WORD:94 [ muls16s::b#0 ] zp ZP_WORD:92 [ muls16s::a#0 ] +Uplifting [mul16u] best 542981 combination zp ZP_DWORD:47 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:51 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:45 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:43 [ mul16u::b#1 ] zp ZP_DWORD:195 [ mul16u::return#3 ] zp ZP_WORD:41 [ mul16u::b#0 ] zp ZP_DWORD:166 [ mul16u::return#2 ] +Uplifting [muls16u] best 542981 combination zp ZP_WORD:70 [ muls16u::i#2 muls16u::i#1 ] zp ZP_DWORD:72 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] zp ZP_DWORD:187 [ muls16u::return#2 ] zp ZP_WORD:185 [ muls16u::b#0 ] zp ZP_WORD:183 [ muls16u::a#0 ] +Uplifting [mul16u_compare] best 540881 combination zp ZP_WORD:64 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] reg byte x [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] reg byte y [ mul16u_compare::j#10 mul16u_compare::j#1 ] zp ZP_WORD:66 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] zp ZP_BYTE:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] zp ZP_DWORD:207 [ mul16u_compare::mf#0 ] zp ZP_DWORD:191 [ mul16u_compare::ms#0 ] zp ZP_DWORD:199 [ mul16u_compare::mn#0 ] +Uplifting [mul16s_compare] best 538781 combination zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] reg byte x [ mul16s_compare::ok#3 mul16s_compare::ok#4 ] reg byte y [ mul16s_compare::j#10 mul16s_compare::j#1 ] zp ZP_WORD:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 ] zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] zp ZP_DWORD:124 [ mul16s_compare::mf#0 ] zp ZP_DWORD:100 [ mul16s_compare::ms#0 ] zp ZP_DWORD:112 [ mul16s_compare::mn#0 ] +Uplifting [mulf16u] best 538781 combination zp ZP_WORD:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 ] zp ZP_WORD:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 ] zp ZP_DWORD:203 [ mulf16u::return#3 ] zp ZP_DWORD:162 [ mulf16u::return#0 ] zp ZP_DWORD:146 [ mulf16u::return#2 ] +Uplifting [print_str] best 538781 combination zp ZP_WORD:11 [ print_str::str#15 print_str::str#17 print_str::str#0 ] +Uplifting [mul16s] best 538781 combination zp ZP_DWORD:108 [ mul16s::return#2 ] zp ZP_DWORD:178 [ mul16s::return#0 ] zp ZP_DWORD:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp ZP_WORD:106 [ mul16s::b#0 ] zp ZP_WORD:104 [ mul16s::a#0 ] zp ZP_WORD:170 [ mul16s::$9 ] zp ZP_WORD:172 [ mul16s::$16 ] zp ZP_WORD:174 [ mul16s::$13 ] zp ZP_WORD:176 [ mul16s::$17 ] +Uplifting [mulf16s] best 538781 combination zp ZP_DWORD:120 [ mulf16s::return#2 ] zp ZP_DWORD:158 [ mulf16s::return#0 ] zp ZP_DWORD:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] zp ZP_WORD:118 [ mulf16s::b#0 ] zp ZP_WORD:116 [ mulf16s::a#0 ] zp ZP_WORD:150 [ mulf16s::$9 ] zp ZP_WORD:152 [ mulf16s::$16 ] zp ZP_WORD:154 [ mulf16s::$13 ] zp ZP_WORD:156 [ mulf16s::$17 ] +Uplifting [] best 538781 combination zp ZP_WORD:24 [ print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#222 print_char_cursor#132 print_char_cursor#22 print_char_cursor#183 print_char_cursor#145 print_char_cursor#190 print_char_cursor#1 ] zp ZP_WORD:9 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ] +Uplifting [mulf_init] best 538531 combination zp ZP_WORD:88 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp ZP_WORD:82 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp ZP_WORD:76 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$9 ] reg byte a [ mulf_init::$12 ] reg byte a [ mulf_init::$13 ] zp ZP_BYTE:84 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#4 ] zp ZP_BYTE:78 [ mulf_init::c#2 mulf_init::c#1 ] zp ZP_WORD:85 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp ZP_WORD:79 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [memset] best 538501 combination zp ZP_WORD:90 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_word] best 538501 combination zp ZP_WORD:22 [ print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 ] -Uplifting [print_sdword] best 538501 combination zp ZP_DWORD:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 ] -Uplifting [print_dword] best 538501 combination zp ZP_DWORD:18 [ print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 ] -Uplifting [print_byte] best 538487 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -Uplifting [print_sword] best 538487 combination zp ZP_WORD:27 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] -Uplifting [print_char] best 538466 combination reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -Uplifting [mul16u_error] best 538466 combination zp ZP_WORD:211 [ mul16u_error::a#0 ] zp ZP_WORD:213 [ mul16u_error::b#0 ] zp ZP_DWORD:215 [ mul16u_error::ms#0 ] zp ZP_DWORD:219 [ mul16u_error::mn#0 ] zp ZP_DWORD:223 [ mul16u_error::mf#0 ] -Uplifting [mul16s_error] best 538466 combination zp ZP_WORD:128 [ mul16s_error::a#0 ] zp ZP_WORD:130 [ mul16s_error::b#0 ] zp ZP_DWORD:132 [ mul16s_error::ms#0 ] zp ZP_DWORD:136 [ mul16s_error::mn#0 ] zp ZP_DWORD:140 [ mul16s_error::mf#0 ] -Uplifting [RADIX] best 538466 combination -Uplifting [print_ln] best 538466 combination -Uplifting [print_cls] best 538466 combination -Uplifting [main] best 538466 combination +Uplifting [memset] best 538531 combination zp ZP_WORD:90 [ memset::dst#4 memset::dst#1 ] +Uplifting [print_word] best 538531 combination zp ZP_WORD:22 [ print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 ] +Uplifting [print_sdword] best 538531 combination zp ZP_DWORD:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 ] +Uplifting [print_dword] best 538531 combination zp ZP_DWORD:18 [ print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 ] +Uplifting [print_byte] best 538517 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [print_sword] best 538517 combination zp ZP_WORD:27 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] +Uplifting [print_char] best 538496 combination reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] +Uplifting [mul16u_error] best 538496 combination zp ZP_WORD:211 [ mul16u_error::a#0 ] zp ZP_WORD:213 [ mul16u_error::b#0 ] zp ZP_DWORD:215 [ mul16u_error::ms#0 ] zp ZP_DWORD:219 [ mul16u_error::mn#0 ] zp ZP_DWORD:223 [ mul16u_error::mf#0 ] +Uplifting [mul16s_error] best 538496 combination zp ZP_WORD:128 [ mul16s_error::a#0 ] zp ZP_WORD:130 [ mul16s_error::b#0 ] zp ZP_DWORD:132 [ mul16s_error::ms#0 ] zp ZP_DWORD:136 [ mul16s_error::mn#0 ] zp ZP_DWORD:140 [ mul16s_error::mf#0 ] +Uplifting [RADIX] best 538496 combination +Uplifting [print_ln] best 538496 combination +Uplifting [print_cls] best 538496 combination +Uplifting [main] best 538496 combination Attempting to uplift remaining variables inzp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] -Uplifting [mul16s_compare] best 538466 combination zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] +Uplifting [mul16s_compare] best 538496 combination zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] -Uplifting [mul16u_compare] best 538466 combination zp ZP_BYTE:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] +Uplifting [mul16u_compare] best 538496 combination zp ZP_BYTE:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:84 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Uplifting [mulf_init] best 538326 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Uplifting [mulf_init] best 538356 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#4 ] -Uplifting [mulf_init] best 538326 combination zp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#4 ] +Uplifting [mulf_init] best 538356 combination zp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:78 [ mulf_init::c#2 mulf_init::c#1 ] -Uplifting [mulf_init] best 538326 combination zp ZP_BYTE:78 [ mulf_init::c#2 mulf_init::c#1 ] +Uplifting [mulf_init] best 538356 combination zp ZP_BYTE:78 [ mulf_init::c#2 mulf_init::c#1 ] Coalescing zero page register [ zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] ] with [ zp ZP_WORD:92 [ muls16s::a#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 ] ] with [ zp ZP_WORD:104 [ mul16s::a#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 ] ] with [ zp ZP_WORD:116 [ mulf16s::a#0 ] ] - score: 1 @@ -8335,11 +8347,11 @@ Coalescing zero page register [ zp ZP_WORD:76 [ mulf_init::sqr1_lo#2 mulf_init:: Coalescing zero page register [ zp ZP_WORD:79 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] ] with [ zp ZP_WORD:9 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ] ] Coalescing zero page register [ zp ZP_WORD:82 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] ] with [ zp ZP_WORD:24 [ print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#222 print_char_cursor#132 print_char_cursor#22 print_char_cursor#183 print_char_cursor#145 print_char_cursor#190 print_char_cursor#1 ] ] Coalescing zero page register [ zp ZP_WORD:85 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] with [ zp ZP_WORD:45 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] -Coalescing zero page register [ zp ZP_WORD:90 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:88 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] +Coalescing zero page register [ zp ZP_WORD:90 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:88 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] Coalescing zero page register [ zp ZP_WORD:170 [ mul16s::$9 mul16s::$16 ] ] with [ zp ZP_WORD:150 [ mulf16s::$9 mulf16s::$16 ] ] Coalescing zero page register [ zp ZP_WORD:174 [ mul16s::$13 mul16s::$17 ] ] with [ zp ZP_WORD:154 [ mulf16s::$13 mulf16s::$17 ] ] Coalescing zero page register [ zp ZP_BYTE:78 [ mulf_init::c#2 mulf_init::c#1 ] ] with [ zp ZP_BYTE:63 [ mul16u_compare::i#12 mul16u_compare::i#1 mul16s_compare::i#12 mul16s_compare::i#1 ] ] -Coalescing zero page register [ zp ZP_WORD:90 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] with [ zp ZP_WORD:41 [ mul16u::b#0 print_str::str#15 print_str::str#17 print_str::str#0 ] ] +Coalescing zero page register [ zp ZP_WORD:90 [ memset::dst#4 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] with [ zp ZP_WORD:41 [ mul16u::b#0 print_str::str#15 print_str::str#17 print_str::str#0 ] ] Coalescing zero page register [ zp ZP_WORD:170 [ mul16s::$9 mul16s::$16 mulf16s::$9 mulf16s::$16 ] ] with [ zp ZP_WORD:55 [ muls16s::j#2 muls16s::j#1 mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] ] Coalescing zero page register [ zp ZP_WORD:174 [ mul16s::$13 mul16s::$17 mulf16s::$13 mulf16s::$17 ] ] with [ zp ZP_WORD:61 [ muls16s::i#2 muls16s::i#1 mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ] ] Allocated (was zp ZP_DWORD:13) zp ZP_DWORD:2 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 mul16s_error::ms#0 mul16s_compare::ms#0 mul16u_compare::ms#0 mul16u_error::ms#0 muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 muls16s::return#2 muls16u::return#0 muls16u::m#3 muls16u::m#1 muls16u::return#2 ] @@ -8352,7 +8364,7 @@ Allocated (was zp ZP_WORD:79) zp ZP_WORD:19 [ mulf_init::sqr1_hi#2 mulf_init::sq Allocated (was zp ZP_WORD:82) zp ZP_WORD:21 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#222 print_char_cursor#132 print_char_cursor#22 print_char_cursor#183 print_char_cursor#145 print_char_cursor#190 print_char_cursor#1 ] Allocated (was zp ZP_WORD:85) zp ZP_WORD:23 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] Allocated (was zp ZP_BYTE:87) zp ZP_BYTE:25 [ mulf_init::dir#2 mulf_init::dir#4 ] -Allocated (was zp ZP_WORD:90) zp ZP_WORD:26 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 mul16u::b#0 print_str::str#15 print_str::str#17 print_str::str#0 ] +Allocated (was zp ZP_WORD:90) zp ZP_WORD:26 [ memset::dst#4 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 mul16u::b#0 print_str::str#15 print_str::str#17 print_str::str#0 ] Allocated (was zp ZP_WORD:170) zp ZP_WORD:28 [ mul16s::$9 mul16s::$16 mulf16s::$9 mulf16s::$16 muls16s::j#2 muls16s::j#1 mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] Allocated (was zp ZP_WORD:174) zp ZP_WORD:30 [ mul16s::$13 mul16s::$17 mulf16s::$13 mulf16s::$17 muls16s::i#2 muls16s::i#1 mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ] @@ -10512,43 +10524,44 @@ memset: { .label str = $400 .label end = str+num .label dst = $1a - // [311] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [311] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [311] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [311] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [312] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [311] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [314] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [312] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [315] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [313] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [311] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [311] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [314] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [311] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [311] phi from memset to memset::@2 [phi:memset->memset::@2] + // [311] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [311] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [311] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [312] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [312] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [313] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [314] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -13466,24 +13497,8 @@ memset: { bne b2 // memset::@return // } - // [313] return + // [315] return rts - // memset::@2 - b2: - // *dst = c - // [314] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [315] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [311] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [311] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/test-multiply-16bit.sym b/src/test/ref/test-multiply-16bit.sym index cb3b14763..57143e914 100644 --- a/src/test/ref/test-multiply-16bit.sym +++ b/src/test/ref/test-multiply-16bit.sym @@ -19,8 +19,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:26 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:26 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:26 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:26 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -465,7 +465,7 @@ zp ZP_WORD:21 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_char_cursor#137 reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp ZP_WORD:23 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_BYTE:25 [ mulf_init::dir#2 mulf_init::dir#4 ] -zp ZP_WORD:26 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 mul16u::b#0 print_str::str#15 print_str::str#17 print_str::str#0 ] +zp ZP_WORD:26 [ memset::dst#4 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 mul16u::b#0 print_str::str#15 print_str::str#17 print_str::str#0 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] zp ZP_WORD:28 [ mul16s::$9 mul16s::$16 mulf16s::$9 mulf16s::$16 muls16s::j#2 muls16s::j#1 mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] diff --git a/src/test/ref/test-multiply-8bit.asm b/src/test/ref/test-multiply-8bit.asm index b55cc5476..4b7babaa0 100644 --- a/src/test/ref/test-multiply-8bit.asm +++ b/src/test/ref/test-multiply-8bit.asm @@ -3,7 +3,7 @@ :BasicUpstart(main) .pc = $80d "Program" .label BGCOL = $d021 - .label print_char_cursor = 6 + .label print_char_cursor = 7 .label print_line_cursor = 2 main: { lda #5 @@ -18,17 +18,6 @@ main: { } // Perform all possible signed byte multiplications (slow and fast) and compare the results mul8s_compare: { - .label ms = 4 - .label mf = $a - .label mn = 8 - .label a = $c - .label b = $f - lda #-$80 - sta a - b1: - lda #-$80 - cmp a - bne b2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 @@ -40,109 +29,8 @@ mul8s_compare: { jsr print_str jsr print_ln rts - b2: - lda #-$80 - sta b - b3: - lda #-$80 - cmp b - bne b4 - inc a - jmp b1 - b4: - ldx b - jsr muls8s - lda a - ldx b - jsr mulf8s - ldy b - jsr mul8s - lda ms - cmp mf - bne !+ - lda ms+1 - cmp mf+1 - beq b5 - !: - ldx #0 - jmp b6 - b5: - ldx #1 - b6: - lda ms - cmp mn - bne !+ - lda ms+1 - cmp mn+1 - beq b7 - !: - ldx #0 - b7: - cpx #0 - bne b8 - lda #2 - sta BGCOL - ldx a - jsr mul8s_error - rts - b8: - inc b - jmp b3 str: .text "signed multiply results match!@" } -// mul8s_error(signed byte register(X) a, signed byte zeropage($f) b, signed word zeropage(4) ms, signed word zeropage(8) mn, signed word zeropage($a) mf) -mul8s_error: { - .label b = $f - .label ms = 4 - .label mn = 8 - .label mf = $a - lda print_line_cursor - sta print_char_cursor - lda print_line_cursor+1 - sta print_char_cursor+1 - lda #str - sta print_str.str+1 - jsr print_str - jsr print_sbyte - lda #str1 - sta print_str.str+1 - jsr print_str - ldx b - jsr print_sbyte - lda #str2 - sta print_str.str+1 - jsr print_str - jsr print_sword - lda #str3 - sta print_str.str+1 - jsr print_str - lda mn - sta print_sword.w - lda mn+1 - sta print_sword.w+1 - jsr print_sword - lda #str4 - sta print_str.str+1 - jsr print_str - lda mf - sta print_sword.w - lda mf+1 - sta print_sword.w+1 - jsr print_sword - jsr print_ln - rts - str: .text "signed multiply mismatch @" -} // Print a newline print_ln: { b1: @@ -163,73 +51,10 @@ print_ln: { !: rts } -// Print a signed word as HEX -// print_sword(signed word zeropage(4) w) -print_sword: { - .label w = 4 - lda w+1 - bmi b1 - lda #' ' - jsr print_char - b2: - jsr print_word - rts - b1: - lda #'-' - jsr print_char - sec - lda #0 - sbc w - sta w - lda #0 - sbc w+1 - sta w+1 - jmp b2 -} -// Print a single char -// print_char(byte register(A) ch) -print_char: { - ldy #0 - sta (print_char_cursor),y - inc print_char_cursor - bne !+ - inc print_char_cursor+1 - !: - rts -} -// Print a word as HEX -// print_word(word zeropage(4) w) -print_word: { - .label w = 4 - lda w+1 - tax - jsr print_byte - lda w - tax - jsr print_byte - rts -} -// Print a byte as HEX -// print_byte(byte register(X) b) -print_byte: { - txa - lsr - lsr - lsr - lsr - tay - lda print_hextab,y - jsr print_char - lda #$f - axs #0 - lda print_hextab,x - jsr print_char - rts -} // Print a zero-terminated string -// print_str(byte* zeropage($d) str) +// print_str(byte* zeropage($c) str) print_str: { - .label str = $d + .label str = $c b1: ldy #0 lda (str),y @@ -250,237 +75,13 @@ print_str: { !: jmp b1 } -// Print a signed byte as HEX -// print_sbyte(signed byte register(X) b) -print_sbyte: { - cpx #0 - bmi b1 - lda #' ' - jsr print_char - b2: - jsr print_byte - rts - b1: - lda #'-' - jsr print_char - txa - eor #$ff - clc - adc #1 - tax - jmp b2 -} -// Multiply of two signed bytes to a signed word -// Fixes offsets introduced by using unsigned multiplication -// mul8s(signed byte zeropage($c) a, signed byte register(Y) b) -mul8s: { - .label m = 8 - .label a = $c - ldx a - tya - sta mul8u.mb - lda #0 - sta mul8u.mb+1 - jsr mul8u - lda a - cmp #0 - bpl b1 - lda m+1 - sty $ff - sec - sbc $ff - sta m+1 - b1: - cpy #0 - bpl b2 - lda m+1 - sec - sbc a - sta m+1 - b2: - rts -} -// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word -// mul8u(byte register(X) a, byte register(A) b) -mul8u: { - .label mb = $d - .label res = 8 - .label return = 8 - lda #<0 - sta res - sta res+1 - b1: - cpx #0 - bne b2 - rts - b2: - txa - and #1 - cmp #0 - beq b3 - lda res - clc - adc mb - sta res - lda res+1 - adc mb+1 - sta res+1 - b3: - txa - lsr - tax - asl mb - rol mb+1 - jmp b1 -} -// Fast multiply two signed bytes to a word result -// mulf8s(signed byte register(A) a, signed byte register(X) b) -mulf8s: { - .label return = $a - jsr mulf8u_prepare - stx mulf8s_prepared.b - jsr mulf8s_prepared - rts -} -// Calculate fast multiply with a prepared unsigned byte to a word result -// The prepared number is set by calling mulf8s_prepare(byte a) -// mulf8s_prepared(signed byte zeropage($f) b) -mulf8s_prepared: { - .label memA = $fd - .label m = $a - .label b = $f - ldx b - jsr mulf8u_prepared - lda memA - cmp #0 - bpl b1 - lda m+1 - sec - sbc b - sta m+1 - b1: - lda b - cmp #0 - bpl b2 - lda m+1 - sec - sbc memA - sta m+1 - b2: - rts -} -// Calculate fast multiply with a prepared unsigned byte to a word result -// The prepared number is set by calling mulf8u_prepare(byte a) -// mulf8u_prepared(byte register(X) b) -mulf8u_prepared: { - .label resL = $fe - .label memB = $ff - .label return = $a - stx memB - sec - sm1: - lda mulf_sqr1_lo,x - sm2: - sbc mulf_sqr2_lo,x - sta resL - sm3: - lda mulf_sqr1_hi,x - sm4: - sbc mulf_sqr2_hi,x - sta memB - lda resL - sta return - lda memB - sta return+1 - rts -} -// Prepare for fast multiply with an unsigned byte to a word result -// mulf8u_prepare(byte register(A) a) -mulf8u_prepare: { - .label memA = $fd - sta memA - sta mulf8u_prepared.sm1+1 - sta mulf8u_prepared.sm3+1 - eor #$ff - sta mulf8u_prepared.sm2+1 - sta mulf8u_prepared.sm4+1 - rts -} -// Slow multiplication of signed bytes -// Perform a signed multiplication by repeated addition/subtraction -// muls8s(signed byte zeropage($c) a, signed byte register(X) b) -muls8s: { - .label m = 4 - .label return = 4 - .label a = $c - lda a - bmi b8 - cmp #1 - bmi b7 - lda #<0 - sta m - sta m+1 - tay - b3: - cpy a - bne b4 - rts - b7: - lda #<0 - sta return - sta return+1 - rts - b4: - txa - sta $fe - ora #$7f - bmi !+ - lda #0 - !: - sta $ff - clc - lda m - adc $fe - sta m - lda m+1 - adc $ff - sta m+1 - iny - jmp b3 - b8: - lda #<0 - sta m - sta m+1 - tay - b5: - cpy a - bne b6 - rts - b6: - txa - sta $fe - ora #$7f - bmi !+ - lda #0 - !: - sta $ff - sec - lda m - sbc $fe - sta m - lda m+1 - sbc $ff - sta m+1 - dey - jmp b5 -} // Perform all possible byte multiplications (slow and fast) and compare the results mul8u_compare: { .label ms = 4 - .label mf = $a - .label mn = 8 - .label b = $f - .label a = $c + .label mf = $e + .label mn = 9 + .label b = $b + .label a = 6 lda #0 sta a b1: @@ -494,9 +95,6 @@ mul8u_compare: { jsr mulf8u ldx a lda b - sta mul8u.mb - lda #0 - sta mul8u.mb+1 jsr mul8u lda ms cmp mf @@ -544,12 +142,12 @@ mul8u_compare: { rts str: .text "multiply results match!@" } -// mul8u_error(byte register(X) a, byte zeropage($f) b, word zeropage(4) ms, word zeropage(8) mn, word zeropage($a) mf) +// mul8u_error(byte register(X) a, byte zeropage($b) b, word zeropage(4) ms, word zeropage(9) mn, word zeropage($e) mf) mul8u_error: { - .label b = $f + .label b = $b .label ms = 4 - .label mn = 8 - .label mf = $a + .label mn = 9 + .label mf = $e lda #str @@ -593,21 +191,133 @@ mul8u_error: { rts str: .text "multiply mismatch @" } +// Print a word as HEX +// print_word(word zeropage(4) w) +print_word: { + .label w = 4 + lda w+1 + tax + jsr print_byte + lda w + tax + jsr print_byte + rts +} +// Print a byte as HEX +// print_byte(byte register(X) b) +print_byte: { + txa + lsr + lsr + lsr + lsr + tay + lda print_hextab,y + jsr print_char + lda #$f + axs #0 + lda print_hextab,x + jsr print_char + rts +} +// Print a single char +// print_char(byte register(A) ch) +print_char: { + ldy #0 + sta (print_char_cursor),y + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + rts +} +// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word +// mul8u(byte register(X) a, byte register(A) b) +mul8u: { + .label mb = $c + .label res = 9 + .label return = 9 + sta mb + lda #0 + sta mb+1 + sta res + sta res+1 + b1: + cpx #0 + bne b2 + rts + b2: + txa + and #1 + cmp #0 + beq b3 + lda res + clc + adc mb + sta res + lda res+1 + adc mb+1 + sta res+1 + b3: + txa + lsr + tax + asl mb + rol mb+1 + jmp b1 +} // Fast multiply two unsigned bytes to a word result // mulf8u(byte register(A) a, byte register(X) b) mulf8u: { - .label return = $a + .label return = $e jsr mulf8u_prepare jsr mulf8u_prepared rts } +// Calculate fast multiply with a prepared unsigned byte to a word result +// The prepared number is set by calling mulf8u_prepare(byte a) +// mulf8u_prepared(byte register(X) b) +mulf8u_prepared: { + .label resL = $fe + .label memB = $ff + .label return = $e + stx memB + sec + sm1: + lda mulf_sqr1_lo,x + sm2: + sbc mulf_sqr2_lo,x + sta resL + sm3: + lda mulf_sqr1_hi,x + sm4: + sbc mulf_sqr2_hi,x + sta memB + lda resL + sta return + lda memB + sta return+1 + rts +} +// Prepare for fast multiply with an unsigned byte to a word result +// mulf8u_prepare(byte register(A) a) +mulf8u_prepare: { + .label memA = $fd + sta memA + sta mulf8u_prepared.sm1+1 + sta mulf8u_prepared.sm3+1 + eor #$ff + sta mulf8u_prepared.sm2+1 + sta mulf8u_prepared.sm4+1 + rts +} // Slow multiplication of unsigned bytes // Calculate an unsigned multiplication by repeated addition -// muls8u(byte zeropage($c) a, byte register(X) b) +// muls8u(byte zeropage(6) a, byte register(X) b) muls8u: { .label return = 4 .label m = 4 - .label a = $c + .label a = 6 lda a cmp #0 beq b4 @@ -777,13 +487,13 @@ mulf_init_asm: { } // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4) mulf_init: { - .label c = $f - .label sqr1_hi = 6 - .label sqr = $d + .label c = 6 + .label sqr1_hi = 7 + .label sqr = $e .label sqr1_lo = 4 - .label sqr2_hi = $a - .label sqr2_lo = 8 - .label dir = $c + .label sqr2_hi = $c + .label sqr2_lo = 9 + .label dir = $b ldx #0 lda #str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp # (word) print_word::w#6 - [102] call print_byte - to:print_word::@1 -print_word::@1: scope:[print_word] from print_word - [103] (byte) print_byte::b#2 ← < (word) print_word::w#6 - [104] call print_byte - to:print_word::@return -print_word::@return: scope:[print_word] from print_word::@1 - [105] return - to:@return -print_byte: scope:[print_byte] from mul8u_error::@1 mul8u_error::@3 print_sbyte::@2 print_word print_word::@1 - [106] (byte*) print_char_cursor#143 ← phi( mul8u_error::@1/(byte*) print_char_cursor#134 mul8u_error::@3/(byte*) print_char_cursor#134 print_sbyte::@2/(byte*) print_char_cursor#19 print_word/(byte*) print_char_cursor#142 print_word::@1/(byte*) print_char_cursor#19 ) - [106] (byte) print_byte::b#5 ← phi( mul8u_error::@1/(byte) print_byte::b#3 mul8u_error::@3/(byte) print_byte::b#4 print_sbyte::@2/(byte) print_byte::b#0 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 ) - [107] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 - [108] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) - [109] call print_char - to:print_byte::@1 -print_byte::@1: scope:[print_byte] from print_byte - [110] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f - [111] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) - [112] call print_char - to:print_byte::@return -print_byte::@return: scope:[print_byte] from print_byte::@1 - [113] return - to:@return -print_str: scope:[print_str] from mul8s_compare::@2 mul8s_error mul8s_error::@2 mul8s_error::@4 mul8s_error::@6 mul8s_error::@8 mul8u_compare::@9 mul8u_error mul8u_error::@2 mul8u_error::@4 mul8u_error::@6 mul8u_error::@8 mulf_tables_cmp::@3 mulf_tables_cmp::@5 mulf_tables_cmp::@9 - [114] (byte*) print_char_cursor#155 ← phi( mul8s_compare::@2/(byte*~) print_char_cursor#193 mul8s_error/(byte*~) print_char_cursor#194 mul8s_error::@2/(byte*) print_char_cursor#19 mul8s_error::@4/(byte*) print_char_cursor#19 mul8s_error::@6/(byte*) print_char_cursor#19 mul8s_error::@8/(byte*) print_char_cursor#19 mul8u_compare::@9/(byte*) print_char_cursor#100 mul8u_error/(byte*) print_char_cursor#100 mul8u_error::@2/(byte*) print_char_cursor#19 mul8u_error::@4/(byte*) print_char_cursor#19 mul8u_error::@6/(byte*) print_char_cursor#19 mul8u_error::@8/(byte*) print_char_cursor#19 mulf_tables_cmp::@9/(byte*) print_char_cursor#19 mulf_tables_cmp::@3/(byte*) 1024 mulf_tables_cmp::@5/(byte*) 1024 ) - [114] (byte*) print_str::str#18 ← phi( mul8s_compare::@2/(const string) mul8s_compare::str mul8s_error/(const string) mul8s_error::str mul8s_error::@2/(const string) str1 mul8s_error::@4/(const string) str2 mul8s_error::@6/(const string) str3 mul8s_error::@8/(const string) str4 mul8u_compare::@9/(const string) mul8u_compare::str mul8u_error/(const string) mul8u_error::str mul8u_error::@2/(const string) str1 mul8u_error::@4/(const string) str2 mul8u_error::@6/(const string) str3 mul8u_error::@8/(const string) str4 mulf_tables_cmp::@9/(const string) mulf_tables_cmp::str2 mulf_tables_cmp::@3/(const string) mulf_tables_cmp::str mulf_tables_cmp::@5/(const string) mulf_tables_cmp::str1 ) +print_str: scope:[print_str] from mul8s_compare::@1 mul8u_compare::@9 mul8u_error mul8u_error::@2 mul8u_error::@4 mul8u_error::@6 mul8u_error::@8 mulf_tables_cmp::@3 mulf_tables_cmp::@5 mulf_tables_cmp::@9 + [28] (byte*) print_char_cursor#155 ← phi( mul8s_compare::@1/(byte*~) print_char_cursor#193 mul8u_compare::@9/(byte*) print_char_cursor#100 mul8u_error/(byte*) print_char_cursor#100 mul8u_error::@2/(byte*) print_char_cursor#19 mul8u_error::@4/(byte*) print_char_cursor#19 mul8u_error::@6/(byte*) print_char_cursor#19 mul8u_error::@8/(byte*) print_char_cursor#19 mulf_tables_cmp::@9/(byte*) print_char_cursor#19 mulf_tables_cmp::@3/(byte*) 1024 mulf_tables_cmp::@5/(byte*) 1024 ) + [28] (byte*) print_str::str#18 ← phi( mul8s_compare::@1/(const string) mul8s_compare::str mul8u_compare::@9/(const string) mul8u_compare::str mul8u_error/(const string) mul8u_error::str mul8u_error::@2/(const string) str1 mul8u_error::@4/(const string) str2 mul8u_error::@6/(const string) str3 mul8u_error::@8/(const string) str4 mulf_tables_cmp::@9/(const string) mulf_tables_cmp::str2 mulf_tables_cmp::@3/(const string) mulf_tables_cmp::str mulf_tables_cmp::@5/(const string) mulf_tables_cmp::str1 ) to:print_str::@1 print_str::@1: scope:[print_str] from print_str print_str::@2 - [115] (byte*) print_char_cursor#134 ← phi( print_str/(byte*) print_char_cursor#155 print_str::@2/(byte*) print_char_cursor#1 ) - [115] (byte*) print_str::str#16 ← phi( print_str/(byte*) print_str::str#18 print_str::@2/(byte*) print_str::str#0 ) - [116] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 + [29] (byte*) print_char_cursor#134 ← phi( print_str/(byte*) print_char_cursor#155 print_str::@2/(byte*) print_char_cursor#1 ) + [29] (byte*) print_str::str#16 ← phi( print_str/(byte*) print_str::str#18 print_str::@2/(byte*) print_str::str#0 ) + [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 - [117] return + [31] return to:@return print_str::@2: scope:[print_str] from print_str::@1 - [118] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) - [119] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#134 - [120] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#16 + [32] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) + [33] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#134 + [34] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#16 to:print_str::@1 -print_sbyte: scope:[print_sbyte] from mul8s_error::@1 mul8s_error::@3 - [121] (signed byte) print_sbyte::b#3 ← phi( mul8s_error::@1/(signed byte) print_sbyte::b#1 mul8s_error::@3/(signed byte) print_sbyte::b#2 ) - [122] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 - to:print_sbyte::@3 -print_sbyte::@3: scope:[print_sbyte] from print_sbyte - [123] phi() - [124] call print_char - to:print_sbyte::@2 -print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@3 print_sbyte::@4 - [125] (signed byte) print_sbyte::b#5 ← phi( print_sbyte::@4/(signed byte) print_sbyte::b#0 print_sbyte::@3/(signed byte) print_sbyte::b#3 ) - [126] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 - [127] call print_byte - to:print_sbyte::@return -print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@2 - [128] return +mul8u_compare: scope:[mul8u_compare] from main::@4 + [35] phi() + to:mul8u_compare::@1 +mul8u_compare::@1: scope:[mul8u_compare] from mul8u_compare mul8u_compare::@8 + [36] (byte) mul8u_compare::a#7 ← phi( mul8u_compare/(byte) 0 mul8u_compare::@8/(byte) mul8u_compare::a#1 ) + to:mul8u_compare::@2 +mul8u_compare::@2: scope:[mul8u_compare] from mul8u_compare::@1 mul8u_compare::@5 + [37] (byte) mul8u_compare::b#10 ← phi( mul8u_compare::@1/(byte) 0 mul8u_compare::@5/(byte) mul8u_compare::b#1 ) + [38] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 + [39] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 + [40] call muls8u + [41] (word) muls8u::return#2 ← (word) muls8u::return#0 + to:mul8u_compare::@10 +mul8u_compare::@10: scope:[mul8u_compare] from mul8u_compare::@2 + [42] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 + [43] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 + [44] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 + [45] call mulf8u + [46] (word) mulf8u::return#2 ← (word) mulf8u::return#0 + to:mul8u_compare::@11 +mul8u_compare::@11: scope:[mul8u_compare] from mul8u_compare::@10 + [47] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 + [48] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 + [49] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 + [50] call mul8u + [51] (word) mul8u::return#3 ← (word) mul8u::res#2 + to:mul8u_compare::@12 +mul8u_compare::@12: scope:[mul8u_compare] from mul8u_compare::@11 + [52] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 + [53] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 + to:mul8u_compare::@6 +mul8u_compare::@6: scope:[mul8u_compare] from mul8u_compare::@12 + [54] phi() + to:mul8u_compare::@3 +mul8u_compare::@3: scope:[mul8u_compare] from mul8u_compare::@12 mul8u_compare::@6 + [55] (byte) mul8u_compare::ok#4 ← phi( mul8u_compare::@12/(byte) 1 mul8u_compare::@6/(byte) 0 ) + [56] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 + to:mul8u_compare::@4 +mul8u_compare::@14: scope:[mul8u_compare] from mul8u_compare::@3 + [57] phi() + to:mul8u_compare::@4 +mul8u_compare::@4: scope:[mul8u_compare] from mul8u_compare::@14 mul8u_compare::@3 + [58] (byte) mul8u_compare::ok#3 ← phi( mul8u_compare::@14/(byte) mul8u_compare::ok#4 mul8u_compare::@3/(byte) 0 ) + [59] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 + to:mul8u_compare::@7 +mul8u_compare::@7: scope:[mul8u_compare] from mul8u_compare::@4 + [60] *((const byte*) BGCOL#0) ← (byte) 2 + [61] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 + [62] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 + [63] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 + [64] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 + [65] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 + [66] call mul8u_error + to:mul8u_compare::@return +mul8u_compare::@return: scope:[mul8u_compare] from mul8u_compare::@13 mul8u_compare::@7 + [67] return to:@return -print_sbyte::@1: scope:[print_sbyte] from print_sbyte - [129] phi() - [130] call print_char - to:print_sbyte::@4 -print_sbyte::@4: scope:[print_sbyte] from print_sbyte::@1 - [131] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 - to:print_sbyte::@2 -mul8s: scope:[mul8s] from mul8s_compare::@13 - [132] (byte) mul8u::a#1 ← (byte)(signed byte) mul8s::a#0 - [133] (byte) mul8u::b#0 ← (byte)(signed byte) mul8s::b#0 - [134] call mul8u - [135] (word) mul8u::return#2 ← (word) mul8u::res#2 - to:mul8s::@5 -mul8s::@5: scope:[mul8s] from mul8s - [136] (word) mul8s::m#0 ← (word) mul8u::return#2 - [137] if((signed byte) mul8s::a#0>=(signed byte) 0) goto mul8s::@1 - to:mul8s::@3 -mul8s::@3: scope:[mul8s] from mul8s::@5 - [138] (byte~) mul8s::$9 ← > (word) mul8s::m#0 - [139] (byte~) mul8s::$16 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::b#0 - [140] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$16 - to:mul8s::@1 -mul8s::@1: scope:[mul8s] from mul8s::@3 mul8s::@5 - [141] (word) mul8s::m#5 ← phi( mul8s::@3/(word) mul8s::m#1 mul8s::@5/(word) mul8s::m#0 ) - [142] if((signed byte) mul8s::b#0>=(signed byte) 0) goto mul8s::@2 - to:mul8s::@4 -mul8s::@4: scope:[mul8s] from mul8s::@1 - [143] (byte~) mul8s::$13 ← > (word) mul8s::m#5 - [144] (byte~) mul8s::$17 ← (byte~) mul8s::$13 - (byte)(signed byte) mul8s::a#0 - [145] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17 - to:mul8s::@2 -mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 - [146] (word) mul8s::m#4 ← phi( mul8s::@1/(word) mul8s::m#5 mul8s::@4/(word) mul8s::m#2 ) - to:mul8s::@return -mul8s::@return: scope:[mul8s] from mul8s::@2 - [147] return +mul8u_compare::@5: scope:[mul8u_compare] from mul8u_compare::@4 + [68] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 + [69] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 + to:mul8u_compare::@8 +mul8u_compare::@8: scope:[mul8u_compare] from mul8u_compare::@5 + [70] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 + [71] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 + to:mul8u_compare::@9 +mul8u_compare::@9: scope:[mul8u_compare] from mul8u_compare::@8 + [72] phi() + [73] call print_str + to:mul8u_compare::@13 +mul8u_compare::@13: scope:[mul8u_compare] from mul8u_compare::@9 + [74] phi() + [75] call print_ln + to:mul8u_compare::@return +mul8u_error: scope:[mul8u_error] from mul8u_compare::@7 + [76] phi() + [77] call print_str + to:mul8u_error::@1 +mul8u_error::@1: scope:[mul8u_error] from mul8u_error + [78] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 + [79] call print_byte + to:mul8u_error::@2 +mul8u_error::@2: scope:[mul8u_error] from mul8u_error::@1 + [80] phi() + [81] call print_str + to:mul8u_error::@3 +mul8u_error::@3: scope:[mul8u_error] from mul8u_error::@2 + [82] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 + [83] call print_byte + to:mul8u_error::@4 +mul8u_error::@4: scope:[mul8u_error] from mul8u_error::@3 + [84] phi() + [85] call print_str + to:mul8u_error::@5 +mul8u_error::@5: scope:[mul8u_error] from mul8u_error::@4 + [86] (word) print_word::w#3 ← (word) mul8u_error::ms#0 + [87] call print_word + to:mul8u_error::@6 +mul8u_error::@6: scope:[mul8u_error] from mul8u_error::@5 + [88] phi() + [89] call print_str + to:mul8u_error::@7 +mul8u_error::@7: scope:[mul8u_error] from mul8u_error::@6 + [90] (word) print_word::w#4 ← (word) mul8u_error::mn#0 + [91] call print_word + to:mul8u_error::@8 +mul8u_error::@8: scope:[mul8u_error] from mul8u_error::@7 + [92] phi() + [93] call print_str + to:mul8u_error::@9 +mul8u_error::@9: scope:[mul8u_error] from mul8u_error::@8 + [94] (word) print_word::w#5 ← (word) mul8u_error::mf#0 + [95] call print_word + to:mul8u_error::@10 +mul8u_error::@10: scope:[mul8u_error] from mul8u_error::@9 + [96] phi() + [97] call print_ln + to:mul8u_error::@return +mul8u_error::@return: scope:[mul8u_error] from mul8u_error::@10 + [98] return to:@return -mul8u: scope:[mul8u] from mul8s mul8u_compare::@11 - [148] (byte) mul8u::a#6 ← phi( mul8s/(byte) mul8u::a#1 mul8u_compare::@11/(byte) mul8u::a#2 ) - [148] (word) mul8u::mb#0 ← phi( mul8s/(byte) mul8u::b#0 mul8u_compare::@11/(byte) mul8u::b#1 ) +print_word: scope:[print_word] from mul8u_error::@5 mul8u_error::@7 mul8u_error::@9 mulf_tables_cmp::@10 mulf_tables_cmp::@8 + [99] (word) print_word::w#6 ← phi( mul8u_error::@5/(word) print_word::w#3 mul8u_error::@7/(word) print_word::w#4 mul8u_error::@9/(word) print_word::w#5 mulf_tables_cmp::@8/(word) print_word::w#1 mulf_tables_cmp::@10/(word) print_word::w#2 ) + [100] (byte) print_byte::b#1 ← > (word) print_word::w#6 + [101] call print_byte + to:print_word::@1 +print_word::@1: scope:[print_word] from print_word + [102] (byte) print_byte::b#2 ← < (word) print_word::w#6 + [103] call print_byte + to:print_word::@return +print_word::@return: scope:[print_word] from print_word::@1 + [104] return + to:@return +print_byte: scope:[print_byte] from mul8u_error::@1 mul8u_error::@3 print_word print_word::@1 + [105] (byte*) print_char_cursor#143 ← phi( mul8u_error::@1/(byte*) print_char_cursor#134 mul8u_error::@3/(byte*) print_char_cursor#134 print_word/(byte*) print_char_cursor#134 print_word::@1/(byte*) print_char_cursor#19 ) + [105] (byte) print_byte::b#5 ← phi( mul8u_error::@1/(byte) print_byte::b#3 mul8u_error::@3/(byte) print_byte::b#4 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 ) + [106] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 + [107] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) + [108] call print_char + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + [109] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f + [110] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) + [111] call print_char + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@1 + [112] return + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 + [113] (byte*) print_char_cursor#86 ← phi( print_byte/(byte*) print_char_cursor#143 print_byte::@1/(byte*) print_char_cursor#19 ) + [113] (byte) print_char::ch#6 ← phi( print_byte/(byte) print_char::ch#4 print_byte::@1/(byte) print_char::ch#5 ) + [114] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 + [115] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#86 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [116] return + to:@return +mul8u: scope:[mul8u] from mul8u_compare::@11 + [117] phi() to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [149] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) - [149] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) - [149] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) - [150] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 + [118] (word) mul8u::mb#2 ← phi( mul8u/(byte) mul8u::b#1 mul8u::@3/(word) mul8u::mb#1 ) + [118] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [118] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#2 mul8u::@3/(byte) mul8u::a#0 ) + [119] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 to:mul8u::@return mul8u::@return: scope:[mul8u] from mul8u::@1 - [151] return + [120] return to:@return mul8u::@2: scope:[mul8u] from mul8u::@1 - [152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 - [153] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 + [121] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 + [122] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 to:mul8u::@4 mul8u::@4: scope:[mul8u] from mul8u::@2 - [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 + [123] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 to:mul8u::@3 mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4 - [155] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) - [156] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 - [157] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 + [124] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) + [125] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 + [126] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 to:mul8u::@1 -mulf8s: scope:[mulf8s] from mul8s_compare::@12 - [158] phi() - to:mulf8s::mulf8s_prepare1 -mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s - [159] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 - [160] call mulf8u_prepare - to:mulf8s::@1 -mulf8s::@1: scope:[mulf8s] from mulf8s::mulf8s_prepare1 - [161] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 - [162] call mulf8s_prepared - to:mulf8s::@2 -mulf8s::@2: scope:[mulf8s] from mulf8s::@1 - [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 - to:mulf8s::@return -mulf8s::@return: scope:[mulf8s] from mulf8s::@2 - [164] return +mulf8u: scope:[mulf8u] from mul8u_compare::@10 + [127] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 + [128] call mulf8u_prepare + to:mulf8u::@1 +mulf8u::@1: scope:[mulf8u] from mulf8u + [129] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 + [130] call mulf8u_prepared + [131] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + to:mulf8u::@2 +mulf8u::@2: scope:[mulf8u] from mulf8u::@1 + [132] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 + to:mulf8u::@return +mulf8u::@return: scope:[mulf8u] from mulf8u::@2 + [133] return to:@return -mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@1 - [165] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 - [166] call mulf8u_prepared - [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 - to:mulf8s_prepared::@5 -mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared - [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 - [169] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(signed byte) 0) goto mulf8s_prepared::@1 - to:mulf8s_prepared::@3 -mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5 - [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 - [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 - [172] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 - to:mulf8s_prepared::@1 -mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5 - [173] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) - [174] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 - to:mulf8s_prepared::@4 -mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1 - [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 - [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) - [177] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 - to:mulf8s_prepared::@2 -mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4 - [178] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) - to:mulf8s_prepared::@return -mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 - [179] return - to:@return -mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared mulf8u::@1 - [180] (byte) mulf8u_prepared::b#2 ← phi( mulf8s_prepared/(byte) mulf8u_prepared::b#1 mulf8u::@1/(byte) mulf8u_prepared::b#0 ) - [181] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#2 +mulf8u_prepared: scope:[mulf8u_prepared] from mulf8u::@1 + [134] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#0 asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } - [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) + [136] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) to:mulf8u_prepared::@return mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared - [184] return + [137] return to:@return -mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1 mulf8u - [185] (byte) mulf8u_prepare::a#2 ← phi( mulf8s::mulf8s_prepare1/(byte) mulf8u_prepare::a#1 mulf8u/(byte) mulf8u_prepare::a#0 ) - [186] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2 +mulf8u_prepare: scope:[mulf8u_prepare] from mulf8u + [138] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#0 asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } to:mulf8u_prepare::@return mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare - [188] return - to:@return -muls8s: scope:[muls8s] from mul8s_compare::@4 - [189] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 - to:muls8s::@2 -muls8s::@2: scope:[muls8s] from muls8s - [190] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 - to:muls8s::@3 -muls8s::@3: scope:[muls8s] from muls8s::@2 muls8s::@4 - [191] (signed word) muls8s::m#3 ← phi( muls8s::@2/(signed byte) 0 muls8s::@4/(signed word) muls8s::m#1 ) - [191] (signed byte) muls8s::j#2 ← phi( muls8s::@2/(signed byte) 0 muls8s::@4/(signed byte) muls8s::j#1 ) - [192] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 - to:muls8s::@1 -muls8s::@1: scope:[muls8s] from muls8s::@2 muls8s::@3 muls8s::@5 - [193] (signed word) muls8s::return#0 ← phi( muls8s::@5/(signed word) muls8s::m#5 muls8s::@2/(signed byte) 0 muls8s::@3/(signed word) muls8s::m#3 ) - to:muls8s::@return -muls8s::@return: scope:[muls8s] from muls8s::@1 - [194] return - to:@return -muls8s::@4: scope:[muls8s] from muls8s::@3 - [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 - [196] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 - to:muls8s::@3 -muls8s::@5: scope:[muls8s] from muls8s muls8s::@6 - [197] (signed word) muls8s::m#5 ← phi( muls8s/(signed byte) 0 muls8s::@6/(signed word) muls8s::m#2 ) - [197] (signed byte) muls8s::i#2 ← phi( muls8s/(signed byte) 0 muls8s::@6/(signed byte) muls8s::i#1 ) - [198] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 - to:muls8s::@1 -muls8s::@6: scope:[muls8s] from muls8s::@5 - [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 - [200] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 - to:muls8s::@5 -mul8u_compare: scope:[mul8u_compare] from main::@4 - [201] phi() - to:mul8u_compare::@1 -mul8u_compare::@1: scope:[mul8u_compare] from mul8u_compare mul8u_compare::@8 - [202] (byte) mul8u_compare::a#7 ← phi( mul8u_compare/(byte) 0 mul8u_compare::@8/(byte) mul8u_compare::a#1 ) - to:mul8u_compare::@2 -mul8u_compare::@2: scope:[mul8u_compare] from mul8u_compare::@1 mul8u_compare::@5 - [203] (byte) mul8u_compare::b#10 ← phi( mul8u_compare::@1/(byte) 0 mul8u_compare::@5/(byte) mul8u_compare::b#1 ) - [204] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 - [205] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 - [206] call muls8u - [207] (word) muls8u::return#2 ← (word) muls8u::return#0 - to:mul8u_compare::@10 -mul8u_compare::@10: scope:[mul8u_compare] from mul8u_compare::@2 - [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 - [209] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 - [210] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 - [211] call mulf8u - [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 - to:mul8u_compare::@11 -mul8u_compare::@11: scope:[mul8u_compare] from mul8u_compare::@10 - [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 - [214] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 - [215] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 - [216] call mul8u - [217] (word) mul8u::return#3 ← (word) mul8u::res#2 - to:mul8u_compare::@12 -mul8u_compare::@12: scope:[mul8u_compare] from mul8u_compare::@11 - [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 - [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 - to:mul8u_compare::@6 -mul8u_compare::@6: scope:[mul8u_compare] from mul8u_compare::@12 - [220] phi() - to:mul8u_compare::@3 -mul8u_compare::@3: scope:[mul8u_compare] from mul8u_compare::@12 mul8u_compare::@6 - [221] (byte) mul8u_compare::ok#4 ← phi( mul8u_compare::@12/(byte) 1 mul8u_compare::@6/(byte) 0 ) - [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 - to:mul8u_compare::@4 -mul8u_compare::@14: scope:[mul8u_compare] from mul8u_compare::@3 - [223] phi() - to:mul8u_compare::@4 -mul8u_compare::@4: scope:[mul8u_compare] from mul8u_compare::@14 mul8u_compare::@3 - [224] (byte) mul8u_compare::ok#3 ← phi( mul8u_compare::@14/(byte) mul8u_compare::ok#4 mul8u_compare::@3/(byte) 0 ) - [225] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 - to:mul8u_compare::@7 -mul8u_compare::@7: scope:[mul8u_compare] from mul8u_compare::@4 - [226] *((const byte*) BGCOL#0) ← (byte) 2 - [227] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 - [228] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 - [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 - [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 - [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 - [232] call mul8u_error - to:mul8u_compare::@return -mul8u_compare::@return: scope:[mul8u_compare] from mul8u_compare::@13 mul8u_compare::@7 - [233] return - to:@return -mul8u_compare::@5: scope:[mul8u_compare] from mul8u_compare::@4 - [234] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 - [235] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 - to:mul8u_compare::@8 -mul8u_compare::@8: scope:[mul8u_compare] from mul8u_compare::@5 - [236] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 - [237] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 - to:mul8u_compare::@9 -mul8u_compare::@9: scope:[mul8u_compare] from mul8u_compare::@8 - [238] phi() - [239] call print_str - to:mul8u_compare::@13 -mul8u_compare::@13: scope:[mul8u_compare] from mul8u_compare::@9 - [240] phi() - [241] call print_ln - to:mul8u_compare::@return -mul8u_error: scope:[mul8u_error] from mul8u_compare::@7 - [242] phi() - [243] call print_str - to:mul8u_error::@1 -mul8u_error::@1: scope:[mul8u_error] from mul8u_error - [244] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 - [245] call print_byte - to:mul8u_error::@2 -mul8u_error::@2: scope:[mul8u_error] from mul8u_error::@1 - [246] phi() - [247] call print_str - to:mul8u_error::@3 -mul8u_error::@3: scope:[mul8u_error] from mul8u_error::@2 - [248] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 - [249] call print_byte - to:mul8u_error::@4 -mul8u_error::@4: scope:[mul8u_error] from mul8u_error::@3 - [250] phi() - [251] call print_str - to:mul8u_error::@5 -mul8u_error::@5: scope:[mul8u_error] from mul8u_error::@4 - [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 - [253] call print_word - to:mul8u_error::@6 -mul8u_error::@6: scope:[mul8u_error] from mul8u_error::@5 - [254] phi() - [255] call print_str - to:mul8u_error::@7 -mul8u_error::@7: scope:[mul8u_error] from mul8u_error::@6 - [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 - [257] call print_word - to:mul8u_error::@8 -mul8u_error::@8: scope:[mul8u_error] from mul8u_error::@7 - [258] phi() - [259] call print_str - to:mul8u_error::@9 -mul8u_error::@9: scope:[mul8u_error] from mul8u_error::@8 - [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 - [261] call print_word - to:mul8u_error::@10 -mul8u_error::@10: scope:[mul8u_error] from mul8u_error::@9 - [262] phi() - [263] call print_ln - to:mul8u_error::@return -mul8u_error::@return: scope:[mul8u_error] from mul8u_error::@10 - [264] return - to:@return -mulf8u: scope:[mulf8u] from mul8u_compare::@10 - [265] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 - [266] call mulf8u_prepare - to:mulf8u::@1 -mulf8u::@1: scope:[mulf8u] from mulf8u - [267] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 - [268] call mulf8u_prepared - [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 - to:mulf8u::@2 -mulf8u::@2: scope:[mulf8u] from mulf8u::@1 - [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 - to:mulf8u::@return -mulf8u::@return: scope:[mulf8u] from mulf8u::@2 - [271] return + [140] return to:@return muls8u: scope:[muls8u] from mul8u_compare::@2 - [272] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 + [141] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 to:muls8u::@2 muls8u::@2: scope:[muls8u] from muls8u muls8u::@3 - [273] (word) muls8u::m#3 ← phi( muls8u/(byte) 0 muls8u::@3/(word) muls8u::m#1 ) - [273] (byte) muls8u::i#2 ← phi( muls8u/(byte) 0 muls8u::@3/(byte) muls8u::i#1 ) - [274] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 + [142] (word) muls8u::m#3 ← phi( muls8u/(byte) 0 muls8u::@3/(word) muls8u::m#1 ) + [142] (byte) muls8u::i#2 ← phi( muls8u/(byte) 0 muls8u::@3/(byte) muls8u::i#1 ) + [143] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 to:muls8u::@1 muls8u::@1: scope:[muls8u] from muls8u muls8u::@2 - [275] (word) muls8u::return#0 ← phi( muls8u/(byte) 0 muls8u::@2/(word) muls8u::m#3 ) + [144] (word) muls8u::return#0 ← phi( muls8u/(byte) 0 muls8u::@2/(word) muls8u::m#3 ) to:muls8u::@return muls8u::@return: scope:[muls8u] from muls8u::@1 - [276] return + [145] return to:@return muls8u::@3: scope:[muls8u] from muls8u::@2 - [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 - [278] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 + [146] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 + [147] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 to:muls8u::@2 mulf_tables_cmp: scope:[mulf_tables_cmp] from main::@3 - [279] phi() + [148] phi() to:mulf_tables_cmp::@1 mulf_tables_cmp::@1: scope:[mulf_tables_cmp] from mulf_tables_cmp mulf_tables_cmp::@4 - [280] (byte*) mulf_tables_cmp::asm_sqr#2 ← phi( mulf_tables_cmp/(const byte[$200]) mula_sqr1_lo#0 mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::asm_sqr#1 ) - [280] (byte*) mulf_tables_cmp::kc_sqr#2 ← phi( mulf_tables_cmp/(const byte[$200]) mulf_sqr1_lo#0 mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::kc_sqr#1 ) - [281] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 + [149] (byte*) mulf_tables_cmp::asm_sqr#2 ← phi( mulf_tables_cmp/(const byte[$200]) mula_sqr1_lo#0 mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::asm_sqr#1 ) + [149] (byte*) mulf_tables_cmp::kc_sqr#2 ← phi( mulf_tables_cmp/(const byte[$200]) mulf_sqr1_lo#0 mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::kc_sqr#1 ) + [150] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 to:mulf_tables_cmp::@3 mulf_tables_cmp::@3: scope:[mulf_tables_cmp] from mulf_tables_cmp::@1 - [282] phi() - [283] call print_str + [151] phi() + [152] call print_str to:mulf_tables_cmp::@6 mulf_tables_cmp::@6: scope:[mulf_tables_cmp] from mulf_tables_cmp::@3 - [284] phi() - [285] call print_ln + [153] phi() + [154] call print_ln to:mulf_tables_cmp::@7 mulf_tables_cmp::@7: scope:[mulf_tables_cmp] from mulf_tables_cmp::@6 - [286] (byte*~) print_char_cursor#230 ← (byte*) print_line_cursor#1 + [155] (byte*~) print_char_cursor#213 ← (byte*) print_line_cursor#1 to:mulf_tables_cmp::@return mulf_tables_cmp::@return: scope:[mulf_tables_cmp] from mulf_tables_cmp::@10 mulf_tables_cmp::@7 - [287] (byte*) print_line_cursor#11 ← phi( mulf_tables_cmp::@7/(byte*) print_line_cursor#1 mulf_tables_cmp::@10/(byte*) 1024 ) - [287] (byte*) print_char_cursor#100 ← phi( mulf_tables_cmp::@7/(byte*~) print_char_cursor#230 mulf_tables_cmp::@10/(byte*) print_char_cursor#19 ) - [288] return + [156] (byte*) print_line_cursor#11 ← phi( mulf_tables_cmp::@7/(byte*) print_line_cursor#1 mulf_tables_cmp::@10/(byte*) 1024 ) + [156] (byte*) print_char_cursor#100 ← phi( mulf_tables_cmp::@7/(byte*~) print_char_cursor#213 mulf_tables_cmp::@10/(byte*) print_char_cursor#19 ) + [157] return to:@return mulf_tables_cmp::@2: scope:[mulf_tables_cmp] from mulf_tables_cmp::@1 - [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 + [158] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 to:mulf_tables_cmp::@5 mulf_tables_cmp::@5: scope:[mulf_tables_cmp] from mulf_tables_cmp::@2 - [290] *((const byte*) BGCOL#0) ← (byte) 2 - [291] call print_str + [159] *((const byte*) BGCOL#0) ← (byte) 2 + [160] call print_str to:mulf_tables_cmp::@8 mulf_tables_cmp::@8: scope:[mulf_tables_cmp] from mulf_tables_cmp::@5 - [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 - [293] call print_word + [161] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 + [162] call print_word to:mulf_tables_cmp::@9 mulf_tables_cmp::@9: scope:[mulf_tables_cmp] from mulf_tables_cmp::@8 - [294] phi() - [295] call print_str + [163] phi() + [164] call print_str to:mulf_tables_cmp::@10 mulf_tables_cmp::@10: scope:[mulf_tables_cmp] from mulf_tables_cmp::@9 - [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 - [297] call print_word + [165] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 + [166] call print_word to:mulf_tables_cmp::@return mulf_tables_cmp::@4: scope:[mulf_tables_cmp] from mulf_tables_cmp::@2 - [298] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 - [299] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 + [167] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 + [168] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 to:mulf_tables_cmp::@1 mulf_init_asm: scope:[mulf_init_asm] from main::@2 asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- } - [301] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) - [302] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) - [303] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) - [304] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) + [170] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) + [171] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) + [172] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) + [173] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) to:mulf_init_asm::@return mulf_init_asm::@return: scope:[mulf_init_asm] from mulf_init_asm - [305] return + [174] return to:@return mulf_init: scope:[mulf_init] from main::@1 - [306] phi() + [175] phi() to:mulf_init::@1 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 - [307] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) - [307] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[$200]) mulf_sqr1_hi#0+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [307] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) - [307] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) - [307] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[$200]) mulf_sqr1_lo#0+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) - [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 + [176] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) + [176] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[$200]) mulf_sqr1_hi#0+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) + [176] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [176] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) + [176] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[$200]) mulf_sqr1_lo#0+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) + [177] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 to:mulf_init::@5 mulf_init::@5: scope:[mulf_init] from mulf_init::@1 mulf_init::@8 - [309] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) - [309] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte[$200]) mulf_sqr2_hi#0 ) - [309] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) - [309] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte[$200]) mulf_sqr2_lo#0 ) - [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 + [178] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) + [178] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte[$200]) mulf_sqr2_hi#0 ) + [178] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) + [178] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte[$200]) mulf_sqr2_lo#0 ) + [179] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 to:mulf_init::@7 mulf_init::@7: scope:[mulf_init] from mulf_init::@5 - [311] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) - [312] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) + [180] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) + [181] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) to:mulf_init::@return mulf_init::@return: scope:[mulf_init] from mulf_init::@7 - [313] return + [182] return to:@return mulf_init::@6: scope:[mulf_init] from mulf_init::@5 - [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) - [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) - [316] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 - [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 - [318] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 + [183] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) + [184] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) + [185] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 + [186] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + [187] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 to:mulf_init::@8 mulf_init::@9: scope:[mulf_init] from mulf_init::@6 - [319] phi() + [188] phi() to:mulf_init::@8 mulf_init::@8: scope:[mulf_init] from mulf_init::@6 mulf_init::@9 - [320] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) - [321] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 + [189] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) + [190] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 to:mulf_init::@5 mulf_init::@2: scope:[mulf_init] from mulf_init::@1 - [322] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 - [323] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 - [324] if((byte~) mulf_init::$9!=(byte) 0) goto mulf_init::@3 + [191] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 + [192] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 + [193] if((byte~) mulf_init::$9!=(byte) 0) goto mulf_init::@3 to:mulf_init::@4 mulf_init::@4: scope:[mulf_init] from mulf_init::@2 - [325] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 - [326] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 + [194] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 + [195] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 to:mulf_init::@3 mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 - [327] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) - [327] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) - [328] (byte~) mulf_init::$12 ← < (word) mulf_init::sqr#3 - [329] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 - [330] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 - [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 - [332] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 - [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 - [334] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 + [196] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) + [196] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) + [197] (byte~) mulf_init::$12 ← < (word) mulf_init::sqr#3 + [198] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 + [199] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 + [200] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 + [201] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 + [202] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 + [203] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 to:mulf_init::@1 print_cls: scope:[print_cls] from main - [335] phi() - [336] call memset + [204] phi() + [205] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [337] return + [206] return to:@return memset: scope:[memset] from print_cls - [338] phi() + [207] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [208] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [209] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [210] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [339] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [211] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [341] return + [212] return to:@return -memset::@2: scope:[memset] from memset::@1 - [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [343] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 diff --git a/src/test/ref/test-multiply-8bit.log b/src/test/ref/test-multiply-8bit.log index 6e30e56aa..4b439b854 100644 --- a/src/test/ref/test-multiply-8bit.log +++ b/src/test/ref/test-multiply-8bit.log @@ -3687,6 +3687,8 @@ Resolved ranged next value [543] mul8u_compare::a#1 ← ++ mul8u_compare::a#7 to Resolved ranged comparison value [545] if(mul8u_compare::a#1!=rangelast(0,$ff)) goto mul8u_compare::@1 to (number) 0 Eliminating unused variable (void*) memset::return#2 and assignment [58] (void*) memset::return#2 ← (void*) memset::str#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) 0 in if((byte) mul8u_compare::b#1!=(number) 0) goto mul8u_compare::@2 Adding number conversion cast (unumber) 0 in if((byte) mul8u_compare::a#1!=(number) 0) goto mul8u_compare::@1 Successful SSA optimization PassNAddNumberTypeConversions @@ -3696,6 +3698,25 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (signed byte) mul8s_compare::a#1 = (signed byte) mul8s_compare::a#10 +Alias (signed byte) mul8s_compare::b#1 = (signed byte) mul8s_compare::b#10 +Alias (signed byte) mul8s_compare::a#20 = (signed byte) mul8s_compare::a#21 (signed byte) mul8s_compare::a#24 (signed byte) mul8s_compare::a#22 +Alias (signed byte) mul8s_compare::a#16 = (signed byte) mul8s_compare::a#17 (signed byte) mul8s_compare::a#18 (signed byte) mul8s_compare::a#28 (signed byte) mul8s_compare::a#27 +Alias (signed byte) mul8s_compare::b#13 = (signed byte) mul8s_compare::b#14 (signed byte) mul8s_compare::b#15 (signed byte) mul8s_compare::b#22 (signed byte) mul8s_compare::b#21 +Alias (signed byte) mul8s_compare::a#25 = (signed byte) mul8s_compare::a#26 +Alias (signed byte) mul8s_compare::b#19 = (signed byte) mul8s_compare::b#20 +Alias (signed byte) mul8s_compare::b#16 = (signed byte) mul8s_compare::b#18 (signed byte) mul8s_compare::b#17 +Alias (signed byte) mul8s_compare::a#23 = (signed byte) mul8s_compare::a#30 +Successful SSA optimization Pass2AliasElimination +Alias (signed byte) mul8s_compare::a#16 = (signed byte) mul8s_compare::a#25 (signed byte) mul8s_compare::a#20 +Alias (signed byte) mul8s_compare::b#13 = (signed byte) mul8s_compare::b#19 (signed byte) mul8s_compare::b#16 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (signed byte) mul8s_compare::a#16 (signed byte) mul8s_compare::a#23 +Identical Phi Values (signed byte) mul8s_compare::a#29 (const signed byte) mul8s_compare::a#0 +Identical Phi Values (signed byte) mul8s_compare::b#23 (const signed byte) mul8s_compare::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (signed byte) mul8s_compare::a#19 (signed byte) mul8s_compare::a#23 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [88] (byte*) mulf_init::sqr1_hi#0 ← (const byte[$200]) mulf_sqr1_hi#0 + (byte) 1 Constant right-side identified [89] (byte*) mulf_init::sqr1_lo#0 ← (const byte[$200]) mulf_sqr1_lo#0 + (byte) 1 Constant right-side identified [91] (byte*~) mulf_init::$7 ← (const byte[$200]) mulf_sqr1_lo#0 + (word) $200 @@ -3720,23 +3741,254 @@ Successful SSA optimization Pass2ConstantIdentification Constant value identified (byte*)memset::str#0 in [0] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0 Constant value identified (byte*)memset::str#0 in [2] (byte*) memset::dst#0 ← (byte*)(const void*) memset::str#0 Successful SSA optimization Pass2ConstantValues +Removing PHI-reference to removed block (mul8s_compare::@1_1) in block mul8s_compare::@2 +if() condition always false - eliminating [333] if((const signed byte) mul8s_compare::a#0!=(signed byte) -$80) goto mul8s_compare::@2 +Removing PHI-reference to removed block (mul8s_compare::@4_1) in block mul8s_compare::@5 +if() condition always false - eliminating [335] if((const signed byte) mul8s_compare::b#0!=(signed byte) -$80) goto mul8s_compare::@5 +Successful SSA optimization Pass2ConstantIfs +Eliminating unused constant (const signed byte) mul8s_compare::a#0 +Eliminating unused constant (const signed byte) mul8s_compare::b#0 +Successful SSA optimization PassNEliminateUnusedVars +Eliminating variable (signed word) print_sword::w#4 from unused block print_sword +Eliminating variable (signed word) print_sword::w#0 from unused block print_sword::@5 +Eliminating variable (signed word) print_sword::w#6 from unused block print_sword::@2 +Eliminating variable (word) print_word::w#0 from unused block print_sword::@2 +Eliminating variable (signed byte) print_sbyte::b#3 from unused block print_sbyte +Eliminating variable (signed byte) print_sbyte::b#0 from unused block print_sbyte::@5 +Eliminating variable (signed byte) print_sbyte::b#5 from unused block print_sbyte::@2 +Eliminating variable (byte) print_byte::b#0 from unused block print_sbyte::@2 +Eliminating variable (byte) mul8u::a#1 from unused block mul8s +Eliminating variable (byte) mul8u::b#0 from unused block mul8s +Eliminating variable (word) mul8u::return#2 from unused block mul8s +Eliminating variable (word) mul8s::m#0 from unused block mul8s::@6 +Eliminating variable (word) mul8s::m#5 from unused block mul8s::@1 +Eliminating variable (byte~) mul8s::$9 from unused block mul8s::@3 +Eliminating variable (byte~) mul8s::$10 from unused block mul8s::@3 +Eliminating variable (byte~) mul8s::$16 from unused block mul8s::@3 +Eliminating variable (word) mul8s::m#1 from unused block mul8s::@3 +Eliminating variable (word) mul8s::m#4 from unused block mul8s::@2 +Eliminating variable (signed word) mul8s::return#0 from unused block mul8s::@2 +Eliminating variable (byte~) mul8s::$13 from unused block mul8s::@4 +Eliminating variable (byte~) mul8s::$14 from unused block mul8s::@4 +Eliminating variable (byte~) mul8s::$17 from unused block mul8s::@4 +Eliminating variable (word) mul8s::m#2 from unused block mul8s::@4 +Eliminating variable (byte) mulf8u_prepared::b#1 from unused block mulf8s_prepared +Eliminating variable (word) mulf8u_prepared::return#3 from unused block mulf8s_prepared +Eliminating variable (word) mulf8s_prepared::m#0 from unused block mulf8s_prepared::@6 +Eliminating variable (word) mulf8s_prepared::m#5 from unused block mulf8s_prepared::@1 +Eliminating variable (byte~) mulf8s_prepared::$8 from unused block mulf8s_prepared::@3 +Eliminating variable (byte~) mulf8s_prepared::$9 from unused block mulf8s_prepared::@3 +Eliminating variable (byte~) mulf8s_prepared::$15 from unused block mulf8s_prepared::@3 +Eliminating variable (word) mulf8s_prepared::m#1 from unused block mulf8s_prepared::@3 +Eliminating variable (word) mulf8s_prepared::m#4 from unused block mulf8s_prepared::@2 +Eliminating variable (signed word) mulf8s_prepared::return#0 from unused block mulf8s_prepared::@2 +Eliminating variable (byte~) mulf8s_prepared::$12 from unused block mulf8s_prepared::@4 +Eliminating variable (byte~) mulf8s_prepared::$13 from unused block mulf8s_prepared::@4 +Eliminating variable (byte~) mulf8s_prepared::$16 from unused block mulf8s_prepared::@4 +Eliminating variable (word) mulf8s_prepared::m#2 from unused block mulf8s_prepared::@4 +Eliminating variable (byte) mulf8u_prepare::a#1 from unused block mulf8s::mulf8s_prepare1 +Eliminating variable (signed byte) mulf8s_prepared::b#0 from unused block mulf8s::@2 +Eliminating variable (signed word) mulf8s_prepared::return#2 from unused block mulf8s::@2 +Eliminating variable (signed word) mulf8s::return#0 from unused block mulf8s::@4 +Eliminating variable (signed byte) muls8s::j#2 from unused block muls8s::@8 +Eliminating variable (signed word) muls8s::m#3 from unused block muls8s::@8 +Eliminating variable (signed word) muls8s::m#1 from unused block muls8s::@9 +Eliminating variable (signed byte) muls8s::j#1 from unused block muls8s::@9 +Eliminating variable (signed word) muls8s::return#0 from unused block muls8s::@3 +Eliminating variable (signed byte) muls8s::i#2 from unused block muls8s::@14 +Eliminating variable (signed word) muls8s::m#5 from unused block muls8s::@14 +Eliminating variable (signed word) muls8s::m#2 from unused block muls8s::@15 +Eliminating variable (signed byte) muls8s::i#1 from unused block muls8s::@15 +Eliminating variable (signed byte) mul8s_compare::a#23 from unused block mul8s_compare::@2 +Eliminating variable (signed byte) mul8s_compare::b#13 from unused block mul8s_compare::@5 +Eliminating variable (signed byte) muls8s::a#0 from unused block mul8s_compare::@5 +Eliminating variable (signed byte) muls8s::b#0 from unused block mul8s_compare::@5 +Eliminating variable (signed word) muls8s::return#2 from unused block mul8s_compare::@5 +Eliminating variable (signed word) mul8s_compare::ms#0 from unused block mul8s_compare::@22 +Eliminating variable (signed byte) mulf8s::a#0 from unused block mul8s_compare::@22 +Eliminating variable (signed byte) mulf8s::b#0 from unused block mul8s_compare::@22 +Eliminating variable (signed word) mulf8s::return#2 from unused block mul8s_compare::@22 +Eliminating variable (signed word) mul8s_compare::mf#0 from unused block mul8s_compare::@23 +Eliminating variable (signed byte) mul8s::a#0 from unused block mul8s_compare::@23 +Eliminating variable (signed byte) mul8s::b#0 from unused block mul8s_compare::@23 +Eliminating variable (signed word) mul8s::return#2 from unused block mul8s_compare::@23 +Eliminating variable (signed word) mul8s_compare::mn#0 from unused block mul8s_compare::@24 +Eliminating variable (signed byte) mul8s_compare::a#1 from unused block mul8s_compare::@6 +Eliminating variable (byte) mul8s_compare::ok#4 from unused block mul8s_compare::@7 +Eliminating variable (byte) mul8s_compare::ok#3 from unused block mul8s_compare::@8 +Eliminating variable (signed byte) mul8s_compare::b#1 from unused block mul8s_compare::@9 +Eliminating variable (signed byte) mul8s_error::a#0 from unused block mul8s_compare::@14 +Eliminating variable (signed byte) mul8s_error::b#0 from unused block mul8s_compare::@14 +Eliminating variable (signed word) mul8s_error::ms#0 from unused block mul8s_compare::@14 +Eliminating variable (signed word) mul8s_error::mn#0 from unused block mul8s_compare::@14 +Eliminating variable (signed word) mul8s_error::mf#0 from unused block mul8s_compare::@14 +Eliminating variable (signed byte) print_sbyte::b#1 from unused block mul8s_error::@1 +Eliminating variable (signed byte) print_sbyte::b#2 from unused block mul8s_error::@3 +Eliminating variable (signed word) print_sword::w#1 from unused block mul8s_error::@5 +Eliminating variable (signed word) print_sword::w#2 from unused block mul8s_error::@7 +Eliminating variable (signed word) print_sword::w#3 from unused block mul8s_error::@9 +Removing unused procedure print_sword +Removing unused procedure block print_sword +Removing unused procedure block print_sword::@1 +Removing PHI-reference to removed block (print_sword::@1) in block print_char +Removing PHI-reference to removed block (print_sword::@1) in block print_char +Removing unused procedure block print_sword::@5 +Removing PHI-reference to removed block (print_sword::@5) in block print_sword::@2 +Removing unused procedure block print_sword::@3 +Removing PHI-reference to removed block (print_sword::@3) in block print_char +Removing PHI-reference to removed block (print_sword::@3) in block print_char +Removing unused procedure block print_sword::@6 +Removing PHI-reference to removed block (print_sword::@6) in block print_sword::@2 +Removing unused procedure block print_sword::@2 +Removing PHI-reference to removed block (print_sword::@2) in block print_word +Removing PHI-reference to removed block (print_sword::@2) in block print_word +Removing unused procedure block print_sword::@7 +Removing unused procedure block print_sword::@return +Removing unused procedure print_sbyte +Removing unused procedure block print_sbyte +Removing unused procedure block print_sbyte::@1 +Removing PHI-reference to removed block (print_sbyte::@1) in block print_char +Removing PHI-reference to removed block (print_sbyte::@1) in block print_char +Removing unused procedure block print_sbyte::@5 +Removing PHI-reference to removed block (print_sbyte::@5) in block print_sbyte::@2 +Removing unused procedure block print_sbyte::@3 +Removing PHI-reference to removed block (print_sbyte::@3) in block print_char +Removing PHI-reference to removed block (print_sbyte::@3) in block print_char +Removing unused procedure block print_sbyte::@6 +Removing PHI-reference to removed block (print_sbyte::@6) in block print_sbyte::@2 +Removing unused procedure block print_sbyte::@2 +Removing PHI-reference to removed block (print_sbyte::@2) in block print_byte +Removing PHI-reference to removed block (print_sbyte::@2) in block print_byte +Removing unused procedure block print_sbyte::@7 +Removing unused procedure block print_sbyte::@return +Removing unused procedure mul8s +Removing unused procedure block mul8s +Removing PHI-reference to removed block (mul8s) in block mul8u +Removing PHI-reference to removed block (mul8s) in block mul8u +Removing unused procedure block mul8s::@6 +Removing PHI-reference to removed block (mul8s::@6) in block mul8s::@1 +Removing unused procedure block mul8s::@1 +Removing PHI-reference to removed block (mul8s::@1) in block mul8s::@2 +Removing unused procedure block mul8s::@3 +Removing unused procedure block mul8s::@2 +Removing unused procedure block mul8s::@4 +Removing unused procedure block mul8s::@return +Removing unused procedure mulf8s_prepared +Removing unused procedure block mulf8s_prepared +Removing PHI-reference to removed block (mulf8s_prepared) in block mulf8u_prepared +Removing unused procedure block mulf8s_prepared::@6 +Removing PHI-reference to removed block (mulf8s_prepared::@6) in block mulf8s_prepared::@1 +Removing unused procedure block mulf8s_prepared::@1 +Removing PHI-reference to removed block (mulf8s_prepared::@1) in block mulf8s_prepared::@2 +Removing unused procedure block mulf8s_prepared::@3 +Removing unused procedure block mulf8s_prepared::@2 +Removing unused procedure block mulf8s_prepared::@4 +Removing unused procedure block mulf8s_prepared::@return +Removing unused procedure mulf8s +Removing unused procedure block mulf8s +Removing unused procedure block mulf8s::mulf8s_prepare1 +Removing PHI-reference to removed block (mulf8s::mulf8s_prepare1) in block mulf8u_prepare +Removing unused procedure block mulf8s::@3 +Removing unused procedure block mulf8s::@2 +Removing unused procedure block mulf8s::@4 +Removing unused procedure block mulf8s::@return +Removing unused procedure muls8s +Removing unused procedure block muls8s +Removing unused procedure block muls8s::@1 +Removing PHI-reference to removed block (muls8s::@1) in block muls8s::@14 +Removing PHI-reference to removed block (muls8s::@1) in block muls8s::@14 +Removing unused procedure block muls8s::@4 +Removing PHI-reference to removed block (muls8s::@4) in block muls8s::@3 +Removing unused procedure block muls8s::@5 +Removing PHI-reference to removed block (muls8s::@5) in block muls8s::@8 +Removing PHI-reference to removed block (muls8s::@5) in block muls8s::@8 +Removing unused procedure block muls8s::@8 +Removing PHI-reference to removed block (muls8s::@8) in block muls8s::@3 +Removing unused procedure block muls8s::@9 +Removing unused procedure block muls8s::@3 +Removing unused procedure block muls8s::@14 +Removing unused procedure block muls8s::@15 +Removing unused procedure block muls8s::@return +Removing PHI-reference to removed block (mul8s_compare::@1) in block mul8s_compare::@2 +Removing unused block mul8s_compare::@1 +Removing unused block mul8s_compare::@2 +Removing PHI-reference to removed block (mul8s_compare::@4) in block mul8s_compare::@5 +Removing unused block mul8s_compare::@4 +Removing unused block mul8s_compare::@5 +Removing unused block mul8s_compare::@22 +Removing unused block mul8s_compare::@23 +Removing PHI-reference to removed block (mul8s_compare::@24) in block mul8s_compare::@7 +Removing unused block mul8s_compare::@24 +Removing unused block mul8s_compare::@6 +Removing PHI-reference to removed block (mul8s_compare::@7) in block mul8s_compare::@8 +Removing unused block mul8s_compare::@7 +Removing unused block mul8s_compare::@12 +Removing unused block mul8s_compare::@8 +Removing unused block mul8s_compare::@13 +Removing unused block mul8s_compare::@9 +Removing unused block mul8s_compare::@14 +Removing unused block mul8s_compare::@25 +Removing unused procedure mul8s_error +Removing unused procedure block mul8s_error +Removing PHI-reference to removed block (mul8s_error) in block print_str +Removing PHI-reference to removed block (mul8s_error) in block print_str +Removing unused procedure block mul8s_error::@1 +Removing unused procedure block mul8s_error::@2 +Removing PHI-reference to removed block (mul8s_error::@2) in block print_str +Removing PHI-reference to removed block (mul8s_error::@2) in block print_str +Removing unused procedure block mul8s_error::@3 +Removing unused procedure block mul8s_error::@4 +Removing PHI-reference to removed block (mul8s_error::@4) in block print_str +Removing PHI-reference to removed block (mul8s_error::@4) in block print_str +Removing unused procedure block mul8s_error::@5 +Removing unused procedure block mul8s_error::@6 +Removing PHI-reference to removed block (mul8s_error::@6) in block print_str +Removing PHI-reference to removed block (mul8s_error::@6) in block print_str +Removing unused procedure block mul8s_error::@7 +Removing unused procedure block mul8s_error::@8 +Removing PHI-reference to removed block (mul8s_error::@8) in block print_str +Removing PHI-reference to removed block (mul8s_error::@8) in block print_str +Removing unused procedure block mul8s_error::@9 +Removing unused procedure block mul8s_error::@10 +Removing PHI-reference to removed block (mul8s_error::@10) in block print_ln +Removing PHI-reference to removed block (mul8s_error::@10) in block print_ln +Removing unused procedure block mul8s_error::@11 +Removing unused procedure block mul8s_error::@return +Removing unused block mul8s_compare::@4_1 +Successful SSA optimization Pass2EliminateUnusedBlocks +Identical Phi Values (byte*) print_char_cursor#142 (byte*) print_char_cursor#134 +Identical Phi Values (word) mul8u::mb#0 (byte) mul8u::b#1 +Identical Phi Values (byte) mul8u::a#6 (byte) mul8u::a#2 +Identical Phi Values (byte) mulf8u_prepare::a#2 (byte) mulf8u_prepare::a#0 +Identical Phi Values (byte) mulf8u_prepared::b#2 (byte) mulf8u_prepared::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant (const byte*) memset::$2 = (byte*)memset::str#0 Constant (const byte*) memset::dst#0 = (byte*)memset::str#0 Successful SSA optimization Pass2ConstantIdentification +Eliminating unused constant (const byte*) print_str::str#11 +Eliminating unused constant (const byte*) print_str::str#12 +Eliminating unused constant (const byte*) print_str::str#13 +Eliminating unused constant (const byte*) print_str::str#14 +Eliminating unused constant (const byte*) print_str::str#15 +Eliminating unused constant (const byte) print_char::ch#0 +Eliminating unused constant (const byte) print_char::ch#1 +Eliminating unused constant (const byte) print_char::ch#2 +Eliminating unused constant (const byte) print_char::ch#3 +Eliminating unused constant (const byte) mul8s_compare::ok#0 +Eliminating unused constant (const byte) mul8s_compare::ok#1 +Eliminating unused constant (const byte) mul8s_compare::ok#2 +Successful SSA optimization PassNEliminateUnusedVars Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Successful SSA optimization Pass2ConstantIdentification -Inlining Noop Cast [74] (byte~) mul8s::$10 ← (byte)(signed byte) mul8s::b#0 keeping mul8s::b#0 -Inlining Noop Cast [78] (signed word) mul8s::return#0 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4 -Inlining Noop Cast [80] (byte~) mul8s::$14 ← (byte)(signed byte) mul8s::a#0 keeping mul8s::a#0 -Inlining Noop Cast [135] (byte~) mulf8s_prepared::$9 ← (byte)(signed byte) mulf8s_prepared::b#0 keeping mulf8s_prepared::b#0 -Inlining Noop Cast [139] (signed word) mulf8s_prepared::return#0 ← (signed word)(word) mulf8s_prepared::m#4 keeping mulf8s_prepared::m#4 -Inlining Noop Cast [141] (byte~) mulf8s_prepared::$13 ← (byte)*((const signed byte*) mulf8s_prepared::memA#0) keeping *(mulf8s_prepared::memA#0) -Successful SSA optimization Pass2NopCastInlining -Inlining Noop Cast [149] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4 keeping mulf8s_prepared::m#4 -Inlining Noop Cast [273] (signed word) mul8s::return#2 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4 -Successful SSA optimization Pass2NopCastInlining +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) memset::dst#1 = (byte*) memset::dst#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) memset::dst#5 (const byte*) memset::dst#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [184] if((const byte*) memset::dst#0!=(const byte*) memset::end#0) goto memset::@5 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte*) memset::dst#0 Inlining constant with var siblings (const byte*) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#2 @@ -3748,15 +4000,6 @@ Inlining constant with var siblings (const byte*) print_str::str#7 Inlining constant with var siblings (const byte*) print_str::str#8 Inlining constant with var siblings (const byte*) print_str::str#9 Inlining constant with var siblings (const byte*) print_str::str#10 -Inlining constant with var siblings (const byte*) print_str::str#11 -Inlining constant with var siblings (const byte*) print_str::str#12 -Inlining constant with var siblings (const byte*) print_str::str#13 -Inlining constant with var siblings (const byte*) print_str::str#14 -Inlining constant with var siblings (const byte*) print_str::str#15 -Inlining constant with var siblings (const byte) print_char::ch#0 -Inlining constant with var siblings (const byte) print_char::ch#1 -Inlining constant with var siblings (const byte) print_char::ch#2 -Inlining constant with var siblings (const byte) print_char::ch#3 Inlining constant with var siblings (const word) mul8u::res#0 Inlining constant with var siblings (const word) mulf_init::sqr#0 Inlining constant with var siblings (const byte) mulf_init::x_2#0 @@ -3770,9 +4013,6 @@ Inlining constant with var siblings (const byte*) mulf_init::sqr1_hi#0 Inlining constant with var siblings (const byte*) mulf_init::sqr1_lo#0 Inlining constant with var siblings (const word) muls8u::m#0 Inlining constant with var siblings (const byte) muls8u::i#0 -Inlining constant with var siblings (const signed word) muls8s::m#0 -Inlining constant with var siblings (const signed byte) muls8s::i#0 -Inlining constant with var siblings (const signed byte) muls8s::j#0 Inlining constant with var siblings (const byte*) mulf_tables_cmp::asm_sqr#0 Inlining constant with var siblings (const byte*) mulf_tables_cmp::kc_sqr#0 Inlining constant with var siblings (const byte) mul8u_compare::a#0 @@ -3780,37 +4020,42 @@ Inlining constant with var siblings (const byte) mul8u_compare::b#0 Inlining constant with var siblings (const byte) mul8u_compare::ok#0 Inlining constant with var siblings (const byte) mul8u_compare::ok#1 Inlining constant with var siblings (const byte) mul8u_compare::ok#2 -Inlining constant with var siblings (const signed byte) mul8s_compare::a#0 -Inlining constant with var siblings (const signed byte) mul8s_compare::b#0 -Inlining constant with var siblings (const byte) mul8s_compare::ok#0 -Inlining constant with var siblings (const byte) mul8s_compare::ok#1 -Inlining constant with var siblings (const byte) mul8s_compare::ok#2 Inlining constant with var siblings (const byte*) print_line_cursor#0 +Constant inlined mulf_init::c#0 = (byte) 0 Constant inlined mulf_init::sqr2_lo#0 = (const byte[$200]) mulf_sqr2_lo#0 Constant inlined mulf_init::sqr2_hi#0 = (const byte[$200]) mulf_sqr2_hi#0 Constant inlined mul8u_compare::ok#2 = (byte) 0 +Constant inlined mulf_init::$2 = (const byte[$200]) mulf_sqr2_lo#0+(word) $1ff Constant inlined mul8u_compare::ok#1 = (byte) 0 +Constant inlined print_str::str#10 = (const string) mul8s_compare::str Constant inlined mul8u_compare::ok#0 = (byte) 1 Constant inlined $0 = (const byte[]) print_hextab#0 -Constant inlined mul8s_compare::b#0 = (signed byte) -$80 +Constant inlined mulf_init::$4 = (const byte[$200]) mulf_sqr2_hi#0+(word) $1ff +Constant inlined mulf_init::$3 = (const byte[$200]) mulf_sqr1_lo#0+(word) $100 +Constant inlined mulf_init::$5 = (const byte[$200]) mulf_sqr1_hi#0+(word) $100 Constant inlined mulf_init::dir#1 = (byte) 1 +Constant inlined mul8u_compare::a#0 = (byte) 0 +Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 Constant inlined mulf_init::dir#0 = (byte) $ff +Constant inlined mulf_tables_cmp::$2 = (const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4 Constant inlined mulf_init::x_255#0 = (byte) -1 Constant inlined mulf_tables_cmp::kc_sqr#0 = (const byte[$200]) mulf_sqr1_lo#0 Constant inlined mul8u_compare::b#0 = (byte) 0 Constant inlined mulf_init::x_2#0 = (byte) 0 +Constant inlined mulf_init::sqr#0 = (byte) 0 +Constant inlined muls8u::i#0 = (byte) 0 +Constant inlined muls8u::m#0 = (byte) 0 Constant inlined print_line_cursor#0 = (byte*) 1024 -Constant inlined mul8s_compare::ok#0 = (byte) 1 -Constant inlined mul8s_compare::ok#1 = (byte) 0 -Constant inlined muls8s::m#0 = (signed byte) 0 -Constant inlined muls8s::i#0 = (signed byte) 0 +Constant inlined mulf_init::$7 = (const byte[$200]) mulf_sqr1_lo#0+(word) $200 Constant inlined print_str::str#9 = (const string) str4 Constant inlined mul8u::res#0 = (byte) 0 Constant inlined mulf_init::sqr1_hi#0 = (const byte[$200]) mulf_sqr1_hi#0+(byte) 1 -Constant inlined mul8s_compare::ok#2 = (byte) 0 +Constant inlined mulf_tables_cmp::asm_sqr#0 = (const byte[$200]) mula_sqr1_lo#0 Constant inlined mulf_init::sqr1_lo#0 = (const byte[$200]) mulf_sqr1_lo#0+(byte) 1 Constant inlined print_str::str#4 = (const string) mul8u_compare::str +Constant inlined mul8u_error::str1 = (const string) str1 Constant inlined print_str::str#3 = (const string) mulf_tables_cmp::str2 +Constant inlined mul8u_error::str2 = (const string) str2 Constant inlined mulf_init::$15 = (const byte[$200]) mulf_sqr2_lo#0+(word) $1ff Constant inlined print_str::str#2 = (const string) mulf_tables_cmp::str1 Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 @@ -3818,56 +4063,19 @@ Constant inlined print_str::str#1 = (const string) mulf_tables_cmp::str Constant inlined print_str::str#8 = (const string) str3 Constant inlined print_str::str#7 = (const string) str2 Constant inlined print_str::str#6 = (const string) str1 -Constant inlined print_str::str#5 = (const string) mul8u_error::str -Constant inlined mulf_init::c#0 = (byte) 0 -Constant inlined print_str::str#13 = (const string) str2 -Constant inlined print_str::str#12 = (const string) str1 -Constant inlined print_str::str#11 = (const string) mul8s_error::str -Constant inlined mulf_init::$2 = (const byte[$200]) mulf_sqr2_lo#0+(word) $1ff -Constant inlined print_str::str#10 = (const string) mul8s_compare::str -Constant inlined mulf_init::$4 = (const byte[$200]) mulf_sqr2_hi#0+(word) $1ff -Constant inlined mulf_init::$3 = (const byte[$200]) mulf_sqr1_lo#0+(word) $100 -Constant inlined print_str::str#15 = (const string) str4 -Constant inlined print_str::str#14 = (const string) str3 -Constant inlined mulf_init::$5 = (const byte[$200]) mulf_sqr1_hi#0+(word) $100 -Constant inlined mul8u_compare::a#0 = (byte) 0 -Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 -Constant inlined mul8s_compare::a#0 = (signed byte) -$80 -Constant inlined mulf_tables_cmp::$2 = (const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4 -Constant inlined mulf_init::sqr#0 = (byte) 0 -Constant inlined muls8u::i#0 = (byte) 0 -Constant inlined mul8s_error::str1 = (const string) str1 -Constant inlined mul8s_error::str2 = (const string) str2 -Constant inlined mul8s_error::str3 = (const string) str3 -Constant inlined muls8u::m#0 = (byte) 0 -Constant inlined mul8s_error::str4 = (const string) str4 -Constant inlined print_char::ch#3 = (byte) ' ' -Constant inlined mulf_init::$7 = (const byte[$200]) mulf_sqr1_lo#0+(word) $200 -Constant inlined print_char::ch#2 = (byte) '-' -Constant inlined muls8s::j#0 = (signed byte) 0 -Constant inlined mulf_tables_cmp::asm_sqr#0 = (const byte[$200]) mula_sqr1_lo#0 -Constant inlined print_char::ch#1 = (byte) ' ' -Constant inlined print_char::ch#0 = (byte) '-' -Constant inlined mul8u_error::str1 = (const string) str1 -Constant inlined mul8u_error::str2 = (const string) str2 Constant inlined mul8u_error::str3 = (const string) str3 +Constant inlined print_str::str#5 = (const string) mul8u_error::str Constant inlined mul8u_error::str4 = (const string) str4 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting memset::@10(between memset::@4 and memset::@5) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) Added new block during phi lifting mul8u::@10(between mul8u::@2 and mul8u::@4) -Added new block during phi lifting mul8s::@7(between mul8s::@6 and mul8s::@1) -Added new block during phi lifting mul8s::@8(between mul8s::@1 and mul8s::@2) Added new block during phi lifting mulf_init::@17(between mulf_init::@2 and mulf_init::@4) Added new block during phi lifting mulf_init::@18(between mulf_init::@10 and mulf_init::@12) -Added new block during phi lifting mulf8s_prepared::@7(between mulf8s_prepared::@6 and mulf8s_prepared::@1) -Added new block during phi lifting mulf8s_prepared::@8(between mulf8s_prepared::@1 and mulf8s_prepared::@2) Added new block during phi lifting muls8u::@10(between muls8u::@4 and muls8u::@1) -Added new block during phi lifting muls8s::@20(between muls8s::@14 and muls8s::@3) -Added new block during phi lifting muls8s::@21(between muls8s::@8 and muls8s::@3) Added new block during phi lifting mul8u_compare::@18(between mul8u_compare::@10 and mul8u_compare::@1) Added new block during phi lifting mul8u_compare::@19(between mul8u_compare::@5 and mul8u_compare::@2) Added new block during phi lifting mul8u_compare::@20(between mul8u_compare::@3 and mul8u_compare::@4) -Added new block during phi lifting mul8s_compare::@26(between mul8s_compare::@7 and mul8s_compare::@8) Adding NOP phi() at start of @begin Adding NOP phi() at start of @12 Adding NOP phi() at start of @29 @@ -3884,28 +4092,18 @@ Adding NOP phi() at start of main::@4 Adding NOP phi() at start of main::@5 Adding NOP phi() at start of main::@6 Adding NOP phi() at start of mul8s_compare +Adding NOP phi() at start of mul8s_compare::@1_1 Adding NOP phi() at start of mul8s_compare::@21 -Adding NOP phi() at start of mul8s_compare::@2 -Adding NOP phi() at start of mul8s_compare::@12 -Adding NOP phi() at start of mul8s_compare::@13 -Adding NOP phi() at start of mul8s_compare::@25 -Adding NOP phi() at start of mul8s_error::@11 Adding NOP phi() at start of print_ln::@2 -Adding NOP phi() at start of print_sword::@7 -Adding NOP phi() at start of print_word::@2 -Adding NOP phi() at start of print_byte::@2 -Adding NOP phi() at start of print_sbyte::@7 -Adding NOP phi() at start of mul8u::@3 -Adding NOP phi() at start of mulf8s -Adding NOP phi() at start of mulf8s::@3 -Adding NOP phi() at start of muls8s::@5 -Adding NOP phi() at start of muls8s::@1 Adding NOP phi() at start of mul8u_compare Adding NOP phi() at start of mul8u_compare::@6 Adding NOP phi() at start of mul8u_compare::@7 Adding NOP phi() at start of mul8u_compare::@15 Adding NOP phi() at start of mul8u_compare::@17 Adding NOP phi() at start of mul8u_error::@11 +Adding NOP phi() at start of print_word::@2 +Adding NOP phi() at start of print_byte::@2 +Adding NOP phi() at start of mul8u::@3 Adding NOP phi() at start of muls8u::@2 Adding NOP phi() at start of mulf_tables_cmp Adding NOP phi() at start of mulf_tables_cmp::@3 @@ -3916,152 +4114,93 @@ Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@4_1 Adding NOP phi() at start of memset::@1 CALL GRAPH Calls in [] to main:7 Calls in [main] to print_cls:11 mulf_init:13 mulf_init_asm:15 mulf_tables_cmp:17 mul8u_compare:19 mul8s_compare:21 -Calls in [mul8s_compare] to print_str:28 print_ln:31 muls8s:41 mulf8s:46 mul8s:51 mul8s_error:66 -Calls in [mul8s_error] to print_str:72 print_sbyte:75 print_str:77 print_sbyte:80 print_str:82 print_sword:85 print_str:87 print_sword:90 print_str:92 print_sword:95 print_ln:98 -Calls in [print_sword] to print_char:112 print_word:118 print_char:122 -Calls in [print_word] to print_byte:133 print_byte:137 -Calls in [print_byte] to print_char:145 print_char:150 -Calls in [print_sbyte] to print_char:167 print_byte:173 print_char:177 -Calls in [mul8s] to mul8u:184 -Calls in [mulf8s] to mulf8u_prepare:223 mulf8s_prepared:226 -Calls in [mulf8s_prepared] to mulf8u_prepared:231 -Calls in [mul8u_compare] to muls8u:283 mulf8u:288 mul8u:295 mul8u_error:311 print_str:319 print_ln:322 -Calls in [mul8u_error] to print_str:328 print_byte:332 print_str:334 print_byte:338 print_str:340 print_word:344 print_str:346 print_word:350 print_str:352 print_word:356 print_ln:359 -Calls in [mulf8u] to mulf8u_prepare:364 mulf8u_prepared:367 -Calls in [mulf_tables_cmp] to print_str:386 print_ln:388 print_str:395 print_word:399 print_str:401 print_word:405 -Calls in [print_cls] to memset:462 +Calls in [mul8s_compare] to print_str:27 print_ln:30 +Calls in [mul8u_compare] to muls8u:57 mulf8u:62 mul8u:67 mul8u_error:83 print_str:91 print_ln:94 +Calls in [mul8u_error] to print_str:100 print_byte:104 print_str:106 print_byte:110 print_str:112 print_word:115 print_str:117 print_word:120 print_str:122 print_word:125 print_ln:128 +Calls in [print_word] to print_byte:135 print_byte:139 +Calls in [print_byte] to print_char:147 print_char:152 +Calls in [mulf8u] to mulf8u_prepare:177 mulf8u_prepared:179 +Calls in [mulf_tables_cmp] to print_str:205 print_ln:207 print_str:214 print_word:217 print_str:219 print_word:222 +Calls in [print_cls] to memset:279 -Created 62 initial phi equivalence classes -Not coalescing [27] print_char_cursor#193 ← print_line_cursor#1 -Coalesced [29] print_line_cursor#119 ← print_line_cursor#1 -Coalesced [30] print_char_cursor#208 ← print_char_cursor#134 -Coalesced [38] mul8s_compare::a#16 ← mul8s_compare::a#1 -Coalesced [69] mul8s_compare::b#13 ← mul8s_compare::b#1 -Coalesced [70] mul8s_compare::ok#5 ← mul8s_compare::ok#4 -Not coalescing [71] print_char_cursor#194 ← print_line_cursor#1 -Coalesced [74] print_sbyte::b#9 ← print_sbyte::b#1 -Coalesced [76] print_char_cursor#195 ← print_char_cursor#19 -Coalesced [79] print_sbyte::b#10 ← print_sbyte::b#2 -Coalesced (already) [81] print_char_cursor#196 ← print_char_cursor#19 -Coalesced [84] print_sword::w#10 ← print_sword::w#1 -Coalesced (already) [86] print_char_cursor#197 ← print_char_cursor#19 -Coalesced [89] print_sword::w#11 ← print_sword::w#2 -Coalesced (already) [91] print_char_cursor#198 ← print_char_cursor#19 -Coalesced [94] print_sword::w#12 ← print_sword::w#3 -Coalesced (already) [96] print_line_cursor#120 ← print_line_cursor#1 -Coalesced [97] print_char_cursor#209 ← print_char_cursor#19 -Coalesced [102] print_line_cursor#123 ← print_line_cursor#45 -Coalesced (already) [108] print_line_cursor#124 ← print_line_cursor#1 -Coalesced [111] print_char_cursor#229 ← print_char_cursor#134 -Coalesced [113] print_sword::w#14 ← print_sword::w#4 -Coalesced [116] print_word::w#13 ← print_word::w#0 -Coalesced [117] print_char_cursor#218 ← print_char_cursor#19 -Coalesced (already) [121] print_char_cursor#228 ← print_char_cursor#134 -Coalesced [124] print_sword::w#13 ← print_sword::w#0 -Coalesced [131] print_byte::b#10 ← print_byte::b#1 -Coalesced [132] print_char_cursor#222 ← print_char_cursor#142 -Coalesced [135] print_byte::b#11 ← print_byte::b#2 -Coalesced (already) [136] print_char_cursor#223 ← print_char_cursor#19 -Coalesced [143] print_char::ch#7 ← print_char::ch#4 -Coalesced (already) [144] print_char_cursor#224 ← print_char_cursor#143 -Coalesced [148] print_char::ch#8 ← print_char::ch#5 -Coalesced (already) [149] print_char_cursor#225 ← print_char_cursor#19 -Coalesced [154] print_str::str#19 ← print_str::str#18 -Coalesced (already) [155] print_char_cursor#206 ← print_char_cursor#155 -Coalesced [162] print_str::str#20 ← print_str::str#0 -Coalesced [163] print_char_cursor#207 ← print_char_cursor#1 -Coalesced (already) [166] print_char_cursor#227 ← print_char_cursor#134 -Coalesced [168] print_sbyte::b#12 ← print_sbyte::b#3 -Coalesced [171] print_byte::b#9 ← print_byte::b#0 -Coalesced (already) [172] print_char_cursor#221 ← print_char_cursor#19 -Coalesced (already) [176] print_char_cursor#226 ← print_char_cursor#134 -Coalesced [179] print_sbyte::b#11 ← print_sbyte::b#0 -Coalesced [182] mul8u::mb#6 ← mul8u::b#0 -Coalesced [183] mul8u::a#8 ← mul8u::a#1 -Coalesced [191] mul8s::m#7 ← mul8s::m#1 -Coalesced [197] mul8s::m#10 ← mul8s::m#2 -Coalesced [200] mul8s::m#9 ← mul8s::m#5 -Coalesced [201] mul8s::m#8 ← mul8s::m#0 -Coalesced [203] mul8u::a#10 ← mul8u::a#6 -Coalesced [204] mul8u::mb#8 ← mul8u::mb#0 -Coalesced [212] mul8u::res#9 ← mul8u::res#1 -Coalesced [216] mul8u::a#11 ← mul8u::a#0 -Coalesced [217] mul8u::res#7 ← mul8u::res#6 -Coalesced [218] mul8u::mb#9 ← mul8u::mb#1 -Coalesced (already) [219] mul8u::res#8 ← mul8u::res#2 -Coalesced [222] mulf8u_prepare::a#3 ← mulf8u_prepare::a#1 -Coalesced [230] mulf8u_prepared::b#3 ← mulf8u_prepared::b#1 -Coalesced [238] mulf8s_prepared::m#7 ← mulf8s_prepared::m#1 -Coalesced [244] mulf8s_prepared::m#10 ← mulf8s_prepared::m#2 -Coalesced [247] mulf8s_prepared::m#9 ← mulf8s_prepared::m#5 -Coalesced [248] mulf8s_prepared::m#8 ← mulf8s_prepared::m#0 -Coalesced [263] muls8s::return#6 ← muls8s::m#3 -Coalesced [268] muls8s::j#4 ← muls8s::j#1 -Coalesced [269] muls8s::m#11 ← muls8s::m#1 -Coalesced [273] muls8s::return#5 ← muls8s::m#5 -Coalesced [276] muls8s::i#4 ← muls8s::i#1 -Coalesced [277] muls8s::m#12 ← muls8s::m#2 -Coalesced [293] mul8u::mb#7 ← mul8u::b#1 -Coalesced [294] mul8u::a#9 ← mul8u::a#2 -Coalesced [318] print_char_cursor#199 ← print_char_cursor#100 -Coalesced [320] print_line_cursor#121 ← print_line_cursor#11 -Coalesced (already) [321] print_char_cursor#210 ← print_char_cursor#134 -Coalesced [324] mul8u_compare::a#14 ← mul8u_compare::a#1 -Coalesced [325] mul8u_compare::b#12 ← mul8u_compare::b#1 -Coalesced [326] mul8u_compare::ok#5 ← mul8u_compare::ok#4 -Coalesced (already) [327] print_char_cursor#200 ← print_char_cursor#100 -Coalesced [330] print_byte::b#7 ← print_byte::b#3 -Coalesced (already) [331] print_char_cursor#219 ← print_char_cursor#134 -Coalesced (already) [333] print_char_cursor#201 ← print_char_cursor#19 -Coalesced [336] print_byte::b#8 ← print_byte::b#4 -Coalesced (already) [337] print_char_cursor#220 ← print_char_cursor#134 -Coalesced (already) [339] print_char_cursor#202 ← print_char_cursor#19 -Coalesced [342] print_word::w#8 ← print_word::w#3 -Coalesced (already) [343] print_char_cursor#213 ← print_char_cursor#134 -Coalesced (already) [345] print_char_cursor#203 ← print_char_cursor#19 -Coalesced [348] print_word::w#9 ← print_word::w#4 -Coalesced (already) [349] print_char_cursor#214 ← print_char_cursor#134 -Coalesced (already) [351] print_char_cursor#204 ← print_char_cursor#19 -Coalesced [354] print_word::w#10 ← print_word::w#5 -Coalesced (already) [355] print_char_cursor#215 ← print_char_cursor#134 -Coalesced (already) [357] print_line_cursor#122 ← print_line_cursor#11 -Coalesced (already) [358] print_char_cursor#211 ← print_char_cursor#19 -Coalesced [363] mulf8u_prepare::a#4 ← mulf8u_prepare::a#0 -Coalesced [366] mulf8u_prepared::b#4 ← mulf8u_prepared::b#0 -Coalesced [375] muls8u::return#5 ← muls8u::m#3 -Coalesced [380] muls8u::i#4 ← muls8u::i#1 -Coalesced [381] muls8u::m#6 ← muls8u::m#1 -Coalesced (already) [387] print_char_cursor#212 ← print_char_cursor#134 -Not coalescing [389] print_char_cursor#230 ← print_line_cursor#1 -Coalesced (already) [390] print_line_cursor#125 ← print_line_cursor#1 -Coalesced [397] print_word::w#11 ← print_word::w#1 -Coalesced (already) [398] print_char_cursor#216 ← print_char_cursor#134 -Coalesced (already) [400] print_char_cursor#205 ← print_char_cursor#19 -Coalesced [403] print_word::w#12 ← print_word::w#2 -Coalesced (already) [404] print_char_cursor#217 ← print_char_cursor#134 -Coalesced (already) [406] print_char_cursor#231 ← print_char_cursor#19 -Coalesced [409] mulf_tables_cmp::kc_sqr#9 ← mulf_tables_cmp::kc_sqr#1 -Coalesced [410] mulf_tables_cmp::asm_sqr#7 ← mulf_tables_cmp::asm_sqr#1 -Coalesced [434] mulf_init::sqr2_lo#6 ← mulf_init::sqr2_lo#1 -Coalesced [435] mulf_init::x_255#6 ← mulf_init::x_255#1 -Coalesced [436] mulf_init::sqr2_hi#6 ← mulf_init::sqr2_hi#1 -Coalesced [437] mulf_init::dir#5 ← mulf_init::dir#4 -Coalesced (already) [438] mulf_init::dir#6 ← mulf_init::dir#2 -Coalesced [444] mulf_init::sqr#9 ← mulf_init::sqr#2 -Coalesced [445] mulf_init::x_2#8 ← mulf_init::x_2#1 -Coalesced [454] mulf_init::sqr1_lo#6 ← mulf_init::sqr1_lo#1 -Coalesced [455] mulf_init::c#6 ← mulf_init::c#1 -Coalesced [456] mulf_init::sqr#7 ← mulf_init::sqr#1 -Coalesced [457] mulf_init::sqr1_hi#6 ← mulf_init::sqr1_hi#1 -Coalesced [458] mulf_init::x_2#6 ← mulf_init::x_2#2 -Coalesced [459] mulf_init::sqr#8 ← mulf_init::sqr#4 -Coalesced (already) [460] mulf_init::x_2#7 ← mulf_init::x_2#3 -Coalesced [473] memset::dst#4 ← memset::dst#1 -Coalesced down to 38 phi equivalence classes +Created 40 initial phi equivalence classes +Not coalescing [26] print_char_cursor#193 ← print_line_cursor#1 +Coalesced [28] print_line_cursor#119 ← print_line_cursor#1 +Coalesced [29] print_char_cursor#203 ← print_char_cursor#134 +Coalesced [34] print_line_cursor#122 ← print_line_cursor#45 +Coalesced (already) [40] print_line_cursor#123 ← print_line_cursor#1 +Coalesced [42] print_str::str#19 ← print_str::str#18 +Coalesced [43] print_char_cursor#201 ← print_char_cursor#155 +Coalesced [50] print_str::str#20 ← print_str::str#0 +Coalesced [51] print_char_cursor#202 ← print_char_cursor#1 +Coalesced [90] print_char_cursor#194 ← print_char_cursor#100 +Coalesced [92] print_line_cursor#120 ← print_line_cursor#11 +Coalesced (already) [93] print_char_cursor#204 ← print_char_cursor#134 +Coalesced [96] mul8u_compare::a#14 ← mul8u_compare::a#1 +Coalesced [97] mul8u_compare::b#12 ← mul8u_compare::b#1 +Coalesced [98] mul8u_compare::ok#5 ← mul8u_compare::ok#4 +Coalesced (already) [99] print_char_cursor#195 ← print_char_cursor#100 +Coalesced [102] print_byte::b#7 ← print_byte::b#3 +Coalesced [103] print_char_cursor#207 ← print_char_cursor#134 +Coalesced [105] print_char_cursor#196 ← print_char_cursor#19 +Coalesced [108] print_byte::b#8 ← print_byte::b#4 +Coalesced (already) [109] print_char_cursor#208 ← print_char_cursor#134 +Coalesced (already) [111] print_char_cursor#197 ← print_char_cursor#19 +Coalesced [114] print_word::w#8 ← print_word::w#3 +Coalesced (already) [116] print_char_cursor#198 ← print_char_cursor#19 +Coalesced [119] print_word::w#9 ← print_word::w#4 +Coalesced (already) [121] print_char_cursor#199 ← print_char_cursor#19 +Coalesced [124] print_word::w#10 ← print_word::w#5 +Coalesced (already) [126] print_line_cursor#121 ← print_line_cursor#11 +Coalesced (already) [127] print_char_cursor#205 ← print_char_cursor#19 +Coalesced [133] print_byte::b#9 ← print_byte::b#1 +Coalesced (already) [134] print_char_cursor#209 ← print_char_cursor#134 +Coalesced [137] print_byte::b#10 ← print_byte::b#2 +Coalesced (already) [138] print_char_cursor#210 ← print_char_cursor#19 +Coalesced [145] print_char::ch#7 ← print_char::ch#4 +Coalesced [146] print_char_cursor#211 ← print_char_cursor#143 +Coalesced [150] print_char::ch#8 ← print_char::ch#5 +Coalesced (already) [151] print_char_cursor#212 ← print_char_cursor#19 +Coalesced [159] mul8u::a#8 ← mul8u::a#2 +Coalesced [160] mul8u::mb#6 ← mul8u::b#1 +Coalesced [168] mul8u::res#9 ← mul8u::res#1 +Coalesced [172] mul8u::a#9 ← mul8u::a#0 +Coalesced [173] mul8u::res#7 ← mul8u::res#6 +Coalesced [174] mul8u::mb#7 ← mul8u::mb#1 +Coalesced (already) [175] mul8u::res#8 ← mul8u::res#2 +Coalesced [194] muls8u::return#5 ← muls8u::m#3 +Coalesced [199] muls8u::i#4 ← muls8u::i#1 +Coalesced [200] muls8u::m#6 ← muls8u::m#1 +Coalesced (already) [206] print_char_cursor#206 ← print_char_cursor#134 +Not coalescing [208] print_char_cursor#213 ← print_line_cursor#1 +Coalesced (already) [209] print_line_cursor#124 ← print_line_cursor#1 +Coalesced [216] print_word::w#11 ← print_word::w#1 +Coalesced (already) [218] print_char_cursor#200 ← print_char_cursor#19 +Coalesced [221] print_word::w#12 ← print_word::w#2 +Coalesced (already) [223] print_char_cursor#214 ← print_char_cursor#19 +Coalesced [226] mulf_tables_cmp::kc_sqr#9 ← mulf_tables_cmp::kc_sqr#1 +Coalesced [227] mulf_tables_cmp::asm_sqr#7 ← mulf_tables_cmp::asm_sqr#1 +Coalesced [251] mulf_init::sqr2_lo#6 ← mulf_init::sqr2_lo#1 +Coalesced [252] mulf_init::x_255#6 ← mulf_init::x_255#1 +Coalesced [253] mulf_init::sqr2_hi#6 ← mulf_init::sqr2_hi#1 +Coalesced [254] mulf_init::dir#5 ← mulf_init::dir#4 +Coalesced (already) [255] mulf_init::dir#6 ← mulf_init::dir#2 +Coalesced [261] mulf_init::sqr#9 ← mulf_init::sqr#2 +Coalesced [262] mulf_init::x_2#8 ← mulf_init::x_2#1 +Coalesced [271] mulf_init::sqr1_lo#6 ← mulf_init::sqr1_lo#1 +Coalesced [272] mulf_init::c#6 ← mulf_init::c#1 +Coalesced [273] mulf_init::sqr#7 ← mulf_init::sqr#1 +Coalesced [274] mulf_init::sqr1_hi#6 ← mulf_init::sqr1_hi#1 +Coalesced [275] mulf_init::x_2#6 ← mulf_init::x_2#2 +Coalesced [276] mulf_init::sqr#8 ← mulf_init::sqr#4 +Coalesced (already) [277] mulf_init::x_2#7 ← mulf_init::x_2#3 +Coalesced [291] memset::dst#6 ← memset::dst#1 +Coalesced down to 26 phi equivalence classes Culled Empty Block (label) @12 Culled Empty Block (label) @29 Culled Empty Block (label) @41 @@ -4069,36 +4208,20 @@ Culled Empty Block (label) @50 Culled Empty Block (label) @53 Culled Empty Block (label) @60 Culled Empty Block (label) main::@6 +Culled Empty Block (label) mul8s_compare::@1_1 Culled Empty Block (label) mul8s_compare::@21 -Culled Empty Block (label) mul8s_compare::@2 -Culled Empty Block (label) mul8s_compare::@13 -Culled Empty Block (label) mul8s_compare::@25 -Culled Empty Block (label) mul8s_error::@11 Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) print_ln::@3 -Culled Empty Block (label) print_sword::@6 -Culled Empty Block (label) print_sword::@7 -Culled Empty Block (label) print_word::@2 -Culled Empty Block (label) print_byte::@2 -Culled Empty Block (label) print_sbyte::@6 -Culled Empty Block (label) print_sbyte::@7 -Culled Empty Block (label) mul8s::@8 -Culled Empty Block (label) mul8s::@7 -Culled Empty Block (label) mul8u::@3 -Culled Empty Block (label) mul8u::@10 -Culled Empty Block (label) mulf8s::@3 -Culled Empty Block (label) mulf8s_prepared::@8 -Culled Empty Block (label) mulf8s_prepared::@7 -Culled Empty Block (label) muls8s::@5 -Culled Empty Block (label) muls8s::@21 -Culled Empty Block (label) muls8s::@1 -Culled Empty Block (label) muls8s::@20 Culled Empty Block (label) mul8u_compare::@7 Culled Empty Block (label) mul8u_compare::@15 Culled Empty Block (label) mul8u_compare::@17 Culled Empty Block (label) mul8u_compare::@18 Culled Empty Block (label) mul8u_compare::@19 Culled Empty Block (label) mul8u_error::@11 +Culled Empty Block (label) print_word::@2 +Culled Empty Block (label) print_byte::@2 +Culled Empty Block (label) mul8u::@3 +Culled Empty Block (label) mul8u::@10 Culled Empty Block (label) muls8u::@2 Culled Empty Block (label) muls8u::@10 Culled Empty Block (label) mulf_tables_cmp::@15 @@ -4107,15 +4230,14 @@ Culled Empty Block (label) mulf_init::@15 Culled Empty Block (label) mulf_init::@17 Culled Empty Block (label) print_cls::@1 Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@4_1 Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@10 Renumbering block @59 to @1 Renumbering block memset::@4 to memset::@1 Renumbering block memset::@5 to memset::@2 -Renumbering block print_sword::@5 to print_sword::@4 -Renumbering block print_sbyte::@5 to print_sbyte::@4 Renumbering block mul8u::@4 to mul8u::@3 Renumbering block mul8u::@7 to mul8u::@4 -Renumbering block mul8s::@6 to mul8s::@5 Renumbering block mulf_init::@4 to mulf_init::@3 Renumbering block mulf_init::@7 to mulf_init::@4 Renumbering block mulf_init::@9 to mulf_init::@5 @@ -4125,17 +4247,8 @@ Renumbering block mulf_init::@12 to mulf_init::@8 Renumbering block mulf_init::@18 to mulf_init::@9 Renumbering block mulf8u::@2 to mulf8u::@1 Renumbering block mulf8u::@3 to mulf8u::@2 -Renumbering block mulf8s_prepared::@6 to mulf8s_prepared::@5 -Renumbering block mulf8s::@2 to mulf8s::@1 -Renumbering block mulf8s::@4 to mulf8s::@2 Renumbering block muls8u::@4 to muls8u::@2 Renumbering block muls8u::@5 to muls8u::@3 -Renumbering block muls8s::@3 to muls8s::@1 -Renumbering block muls8s::@4 to muls8s::@2 -Renumbering block muls8s::@8 to muls8s::@3 -Renumbering block muls8s::@9 to muls8s::@4 -Renumbering block muls8s::@14 to muls8s::@5 -Renumbering block muls8s::@15 to muls8s::@6 Renumbering block mulf_tables_cmp::@7 to mulf_tables_cmp::@5 Renumbering block mulf_tables_cmp::@10 to mulf_tables_cmp::@6 Renumbering block mulf_tables_cmp::@11 to mulf_tables_cmp::@7 @@ -4150,20 +4263,8 @@ Renumbering block mul8u_compare::@13 to mul8u_compare::@11 Renumbering block mul8u_compare::@14 to mul8u_compare::@12 Renumbering block mul8u_compare::@16 to mul8u_compare::@13 Renumbering block mul8u_compare::@20 to mul8u_compare::@14 -Renumbering block mul8s_compare::@3 to mul8s_compare::@2 -Renumbering block mul8s_compare::@4 to mul8s_compare::@3 -Renumbering block mul8s_compare::@5 to mul8s_compare::@4 -Renumbering block mul8s_compare::@6 to mul8s_compare::@5 -Renumbering block mul8s_compare::@7 to mul8s_compare::@6 -Renumbering block mul8s_compare::@8 to mul8s_compare::@7 -Renumbering block mul8s_compare::@9 to mul8s_compare::@8 -Renumbering block mul8s_compare::@12 to mul8s_compare::@9 -Renumbering block mul8s_compare::@14 to mul8s_compare::@10 -Renumbering block mul8s_compare::@20 to mul8s_compare::@11 -Renumbering block mul8s_compare::@22 to mul8s_compare::@12 -Renumbering block mul8s_compare::@23 to mul8s_compare::@13 -Renumbering block mul8s_compare::@24 to mul8s_compare::@14 -Renumbering block mul8s_compare::@26 to mul8s_compare::@15 +Renumbering block mul8s_compare::@3 to mul8s_compare::@1 +Renumbering block mul8s_compare::@20 to mul8s_compare::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -4173,19 +4274,7 @@ Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::@4 Adding NOP phi() at start of main::@5 Adding NOP phi() at start of mul8s_compare -Adding NOP phi() at start of mul8s_compare::@11 -Adding NOP phi() at start of mul8s_compare::@9 -Adding NOP phi() at start of mul8s_compare::@15 -Adding NOP phi() at start of mul8s_error::@2 -Adding NOP phi() at start of mul8s_error::@4 -Adding NOP phi() at start of mul8s_error::@6 -Adding NOP phi() at start of mul8s_error::@8 -Adding NOP phi() at start of mul8s_error::@10 -Adding NOP phi() at start of print_sword::@3 -Adding NOP phi() at start of print_sword::@1 -Adding NOP phi() at start of print_sbyte::@3 -Adding NOP phi() at start of print_sbyte::@1 -Adding NOP phi() at start of mulf8s +Adding NOP phi() at start of mul8s_compare::@2 Adding NOP phi() at start of mul8u_compare Adding NOP phi() at start of mul8u_compare::@6 Adding NOP phi() at start of mul8u_compare::@14 @@ -4197,6 +4286,7 @@ Adding NOP phi() at start of mul8u_error::@4 Adding NOP phi() at start of mul8u_error::@6 Adding NOP phi() at start of mul8u_error::@8 Adding NOP phi() at start of mul8u_error::@10 +Adding NOP phi() at start of mul8u Adding NOP phi() at start of mulf_tables_cmp Adding NOP phi() at start of mulf_tables_cmp::@3 Adding NOP phi() at start of mulf_tables_cmp::@6 @@ -4246,674 +4336,411 @@ main::@return: scope:[main] from main::@5 mul8s_compare: scope:[mul8s_compare] from main::@5 [17] phi() to:mul8s_compare::@1 -mul8s_compare::@1: scope:[mul8s_compare] from mul8s_compare mul8s_compare::@5 - [18] (signed byte) mul8s_compare::a#10 ← phi( mul8s_compare/(signed byte) -$80 mul8s_compare::@5/(signed byte) mul8s_compare::a#1 ) - [19] if((signed byte) mul8s_compare::a#10!=(signed byte) -$80) goto mul8s_compare::@3 +mul8s_compare::@1: scope:[mul8s_compare] from mul8s_compare + [18] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 + [19] call print_str to:mul8s_compare::@2 mul8s_compare::@2: scope:[mul8s_compare] from mul8s_compare::@1 - [20] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 - [21] call print_str - to:mul8s_compare::@11 -mul8s_compare::@11: scope:[mul8s_compare] from mul8s_compare::@2 - [22] phi() - [23] call print_ln + [20] phi() + [21] call print_ln to:mul8s_compare::@return -mul8s_compare::@return: scope:[mul8s_compare] from mul8s_compare::@10 mul8s_compare::@11 - [24] return +mul8s_compare::@return: scope:[mul8s_compare] from mul8s_compare::@2 + [22] return to:@return -mul8s_compare::@3: scope:[mul8s_compare] from mul8s_compare::@1 mul8s_compare::@8 - [25] (signed byte) mul8s_compare::b#10 ← phi( mul8s_compare::@1/(signed byte) -$80 mul8s_compare::@8/(signed byte) mul8s_compare::b#1 ) - [26] if((signed byte) mul8s_compare::b#10!=(signed byte) -$80) goto mul8s_compare::@4 - to:mul8s_compare::@5 -mul8s_compare::@5: scope:[mul8s_compare] from mul8s_compare::@3 - [27] (signed byte) mul8s_compare::a#1 ← ++ (signed byte) mul8s_compare::a#10 - to:mul8s_compare::@1 -mul8s_compare::@4: scope:[mul8s_compare] from mul8s_compare::@3 - [28] (signed byte) muls8s::a#0 ← (signed byte) mul8s_compare::a#10 - [29] (signed byte) muls8s::b#0 ← (signed byte) mul8s_compare::b#10 - [30] call muls8s - [31] (signed word) muls8s::return#2 ← (signed word) muls8s::return#0 - to:mul8s_compare::@12 -mul8s_compare::@12: scope:[mul8s_compare] from mul8s_compare::@4 - [32] (signed word) mul8s_compare::ms#0 ← (signed word) muls8s::return#2 - [33] (signed byte) mulf8s::a#0 ← (signed byte) mul8s_compare::a#10 - [34] (signed byte) mulf8s::b#0 ← (signed byte) mul8s_compare::b#10 - [35] call mulf8s - [36] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 - to:mul8s_compare::@13 -mul8s_compare::@13: scope:[mul8s_compare] from mul8s_compare::@12 - [37] (signed word) mul8s_compare::mf#0 ← (signed word) mulf8s::return#2 - [38] (signed byte) mul8s::a#0 ← (signed byte) mul8s_compare::a#10 - [39] (signed byte) mul8s::b#0 ← (signed byte) mul8s_compare::b#10 - [40] call mul8s - to:mul8s_compare::@14 -mul8s_compare::@14: scope:[mul8s_compare] from mul8s_compare::@13 - [41] (signed word) mul8s_compare::mn#0 ← (signed word)(word) mul8s::m#4 - [42] if((signed word) mul8s_compare::ms#0==(signed word) mul8s_compare::mf#0) goto mul8s_compare::@6 - to:mul8s_compare::@9 -mul8s_compare::@9: scope:[mul8s_compare] from mul8s_compare::@14 - [43] phi() - to:mul8s_compare::@6 -mul8s_compare::@6: scope:[mul8s_compare] from mul8s_compare::@14 mul8s_compare::@9 - [44] (byte) mul8s_compare::ok#4 ← phi( mul8s_compare::@9/(byte) 0 mul8s_compare::@14/(byte) 1 ) - [45] if((signed word) mul8s_compare::ms#0==(signed word) mul8s_compare::mn#0) goto mul8s_compare::@15 - to:mul8s_compare::@7 -mul8s_compare::@15: scope:[mul8s_compare] from mul8s_compare::@6 - [46] phi() - to:mul8s_compare::@7 -mul8s_compare::@7: scope:[mul8s_compare] from mul8s_compare::@15 mul8s_compare::@6 - [47] (byte) mul8s_compare::ok#3 ← phi( mul8s_compare::@6/(byte) 0 mul8s_compare::@15/(byte) mul8s_compare::ok#4 ) - [48] if((byte) mul8s_compare::ok#3!=(byte) 0) goto mul8s_compare::@8 - to:mul8s_compare::@10 -mul8s_compare::@10: scope:[mul8s_compare] from mul8s_compare::@7 - [49] *((const byte*) BGCOL#0) ← (byte) 2 - [50] (signed byte) mul8s_error::a#0 ← (signed byte) mul8s_compare::a#10 - [51] (signed byte) mul8s_error::b#0 ← (signed byte) mul8s_compare::b#10 - [52] (signed word) mul8s_error::ms#0 ← (signed word) mul8s_compare::ms#0 - [53] (signed word) mul8s_error::mn#0 ← (signed word) mul8s_compare::mn#0 - [54] (signed word) mul8s_error::mf#0 ← (signed word) mul8s_compare::mf#0 - [55] call mul8s_error - to:mul8s_compare::@return -mul8s_compare::@8: scope:[mul8s_compare] from mul8s_compare::@7 - [56] (signed byte) mul8s_compare::b#1 ← ++ (signed byte) mul8s_compare::b#10 - to:mul8s_compare::@3 -mul8s_error: scope:[mul8s_error] from mul8s_compare::@10 - [57] (byte*~) print_char_cursor#194 ← (byte*) print_line_cursor#1 - [58] call print_str - to:mul8s_error::@1 -mul8s_error::@1: scope:[mul8s_error] from mul8s_error - [59] (signed byte) print_sbyte::b#1 ← (signed byte) mul8s_error::a#0 - [60] call print_sbyte - to:mul8s_error::@2 -mul8s_error::@2: scope:[mul8s_error] from mul8s_error::@1 - [61] phi() - [62] call print_str - to:mul8s_error::@3 -mul8s_error::@3: scope:[mul8s_error] from mul8s_error::@2 - [63] (signed byte) print_sbyte::b#2 ← (signed byte) mul8s_error::b#0 - [64] call print_sbyte - to:mul8s_error::@4 -mul8s_error::@4: scope:[mul8s_error] from mul8s_error::@3 - [65] phi() - [66] call print_str - to:mul8s_error::@5 -mul8s_error::@5: scope:[mul8s_error] from mul8s_error::@4 - [67] (signed word) print_sword::w#1 ← (signed word) mul8s_error::ms#0 - [68] call print_sword - to:mul8s_error::@6 -mul8s_error::@6: scope:[mul8s_error] from mul8s_error::@5 - [69] phi() - [70] call print_str - to:mul8s_error::@7 -mul8s_error::@7: scope:[mul8s_error] from mul8s_error::@6 - [71] (signed word) print_sword::w#2 ← (signed word) mul8s_error::mn#0 - [72] call print_sword - to:mul8s_error::@8 -mul8s_error::@8: scope:[mul8s_error] from mul8s_error::@7 - [73] phi() - [74] call print_str - to:mul8s_error::@9 -mul8s_error::@9: scope:[mul8s_error] from mul8s_error::@8 - [75] (signed word) print_sword::w#3 ← (signed word) mul8s_error::mf#0 - [76] call print_sword - to:mul8s_error::@10 -mul8s_error::@10: scope:[mul8s_error] from mul8s_error::@9 - [77] phi() - [78] call print_ln - to:mul8s_error::@return -mul8s_error::@return: scope:[mul8s_error] from mul8s_error::@10 - [79] return - to:@return -print_ln: scope:[print_ln] from mul8s_compare::@11 mul8s_error::@10 mul8u_compare::@13 mul8u_error::@10 mulf_tables_cmp::@6 - [80] (byte*) print_char_cursor#135 ← phi( mul8s_compare::@11/(byte*) print_char_cursor#134 mul8s_error::@10/(byte*) print_char_cursor#19 mul8u_compare::@13/(byte*) print_char_cursor#134 mul8u_error::@10/(byte*) print_char_cursor#19 mulf_tables_cmp::@6/(byte*) print_char_cursor#134 ) - [80] (byte*) print_line_cursor#45 ← phi( mul8s_compare::@11/(byte*) print_line_cursor#1 mul8s_error::@10/(byte*) print_line_cursor#1 mul8u_compare::@13/(byte*) print_line_cursor#11 mul8u_error::@10/(byte*) print_line_cursor#11 mulf_tables_cmp::@6/(byte*) 1024 ) +print_ln: scope:[print_ln] from mul8s_compare::@2 mul8u_compare::@13 mul8u_error::@10 mulf_tables_cmp::@6 + [23] (byte*) print_char_cursor#135 ← phi( mul8s_compare::@2/(byte*) print_char_cursor#134 mul8u_compare::@13/(byte*) print_char_cursor#134 mul8u_error::@10/(byte*) print_char_cursor#19 mulf_tables_cmp::@6/(byte*) print_char_cursor#134 ) + [23] (byte*) print_line_cursor#45 ← phi( mul8s_compare::@2/(byte*) print_line_cursor#1 mul8u_compare::@13/(byte*) print_line_cursor#11 mul8u_error::@10/(byte*) print_line_cursor#11 mulf_tables_cmp::@6/(byte*) 1024 ) to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 - [81] (byte*) print_line_cursor#23 ← phi( print_ln/(byte*) print_line_cursor#45 print_ln::@1/(byte*) print_line_cursor#1 ) - [82] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 - [83] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 + [24] (byte*) print_line_cursor#23 ← phi( print_ln/(byte*) print_line_cursor#45 print_ln::@1/(byte*) print_line_cursor#1 ) + [25] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 + [26] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 to:print_ln::@return print_ln::@return: scope:[print_ln] from print_ln::@1 - [84] return + [27] return to:@return -print_sword: scope:[print_sword] from mul8s_error::@5 mul8s_error::@7 mul8s_error::@9 - [85] (signed word) print_sword::w#4 ← phi( mul8s_error::@5/(signed word) print_sword::w#1 mul8s_error::@7/(signed word) print_sword::w#2 mul8s_error::@9/(signed word) print_sword::w#3 ) - [86] if((signed word) print_sword::w#4<(signed byte) 0) goto print_sword::@1 - to:print_sword::@3 -print_sword::@3: scope:[print_sword] from print_sword - [87] phi() - [88] call print_char - to:print_sword::@2 -print_sword::@2: scope:[print_sword] from print_sword::@3 print_sword::@4 - [89] (signed word) print_sword::w#6 ← phi( print_sword::@4/(signed word) print_sword::w#0 print_sword::@3/(signed word) print_sword::w#4 ) - [90] (word) print_word::w#0 ← (word)(signed word) print_sword::w#6 - [91] call print_word - to:print_sword::@return -print_sword::@return: scope:[print_sword] from print_sword::@2 - [92] return - to:@return -print_sword::@1: scope:[print_sword] from print_sword - [93] phi() - [94] call print_char - to:print_sword::@4 -print_sword::@4: scope:[print_sword] from print_sword::@1 - [95] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#4 - to:print_sword::@2 -print_char: scope:[print_char] from print_byte print_byte::@1 print_sbyte::@1 print_sbyte::@3 print_sword::@1 print_sword::@3 - [96] (byte*) print_char_cursor#86 ← phi( print_byte/(byte*) print_char_cursor#143 print_byte::@1/(byte*) print_char_cursor#19 print_sbyte::@1/(byte*) print_char_cursor#134 print_sbyte::@3/(byte*) print_char_cursor#134 print_sword::@1/(byte*) print_char_cursor#134 print_sword::@3/(byte*) print_char_cursor#134 ) - [96] (byte) print_char::ch#6 ← phi( print_byte/(byte) print_char::ch#4 print_byte::@1/(byte) print_char::ch#5 print_sbyte::@1/(byte) '-' print_sbyte::@3/(byte) ' ' print_sword::@1/(byte) '-' print_sword::@3/(byte) ' ' ) - [97] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 - [98] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#86 - to:print_char::@return -print_char::@return: scope:[print_char] from print_char - [99] return - to:@return -print_word: scope:[print_word] from mul8u_error::@5 mul8u_error::@7 mul8u_error::@9 mulf_tables_cmp::@10 mulf_tables_cmp::@8 print_sword::@2 - [100] (byte*) print_char_cursor#142 ← phi( mul8u_error::@5/(byte*) print_char_cursor#134 mul8u_error::@7/(byte*) print_char_cursor#134 mul8u_error::@9/(byte*) print_char_cursor#134 mulf_tables_cmp::@8/(byte*) print_char_cursor#134 mulf_tables_cmp::@10/(byte*) print_char_cursor#134 print_sword::@2/(byte*) print_char_cursor#19 ) - [100] (word) print_word::w#6 ← phi( mul8u_error::@5/(word) print_word::w#3 mul8u_error::@7/(word) print_word::w#4 mul8u_error::@9/(word) print_word::w#5 mulf_tables_cmp::@8/(word) print_word::w#1 mulf_tables_cmp::@10/(word) print_word::w#2 print_sword::@2/(word) print_word::w#0 ) - [101] (byte) print_byte::b#1 ← > (word) print_word::w#6 - [102] call print_byte - to:print_word::@1 -print_word::@1: scope:[print_word] from print_word - [103] (byte) print_byte::b#2 ← < (word) print_word::w#6 - [104] call print_byte - to:print_word::@return -print_word::@return: scope:[print_word] from print_word::@1 - [105] return - to:@return -print_byte: scope:[print_byte] from mul8u_error::@1 mul8u_error::@3 print_sbyte::@2 print_word print_word::@1 - [106] (byte*) print_char_cursor#143 ← phi( mul8u_error::@1/(byte*) print_char_cursor#134 mul8u_error::@3/(byte*) print_char_cursor#134 print_sbyte::@2/(byte*) print_char_cursor#19 print_word/(byte*) print_char_cursor#142 print_word::@1/(byte*) print_char_cursor#19 ) - [106] (byte) print_byte::b#5 ← phi( mul8u_error::@1/(byte) print_byte::b#3 mul8u_error::@3/(byte) print_byte::b#4 print_sbyte::@2/(byte) print_byte::b#0 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 ) - [107] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 - [108] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) - [109] call print_char - to:print_byte::@1 -print_byte::@1: scope:[print_byte] from print_byte - [110] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f - [111] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) - [112] call print_char - to:print_byte::@return -print_byte::@return: scope:[print_byte] from print_byte::@1 - [113] return - to:@return -print_str: scope:[print_str] from mul8s_compare::@2 mul8s_error mul8s_error::@2 mul8s_error::@4 mul8s_error::@6 mul8s_error::@8 mul8u_compare::@9 mul8u_error mul8u_error::@2 mul8u_error::@4 mul8u_error::@6 mul8u_error::@8 mulf_tables_cmp::@3 mulf_tables_cmp::@5 mulf_tables_cmp::@9 - [114] (byte*) print_char_cursor#155 ← phi( mul8s_compare::@2/(byte*~) print_char_cursor#193 mul8s_error/(byte*~) print_char_cursor#194 mul8s_error::@2/(byte*) print_char_cursor#19 mul8s_error::@4/(byte*) print_char_cursor#19 mul8s_error::@6/(byte*) print_char_cursor#19 mul8s_error::@8/(byte*) print_char_cursor#19 mul8u_compare::@9/(byte*) print_char_cursor#100 mul8u_error/(byte*) print_char_cursor#100 mul8u_error::@2/(byte*) print_char_cursor#19 mul8u_error::@4/(byte*) print_char_cursor#19 mul8u_error::@6/(byte*) print_char_cursor#19 mul8u_error::@8/(byte*) print_char_cursor#19 mulf_tables_cmp::@9/(byte*) print_char_cursor#19 mulf_tables_cmp::@3/(byte*) 1024 mulf_tables_cmp::@5/(byte*) 1024 ) - [114] (byte*) print_str::str#18 ← phi( mul8s_compare::@2/(const string) mul8s_compare::str mul8s_error/(const string) mul8s_error::str mul8s_error::@2/(const string) str1 mul8s_error::@4/(const string) str2 mul8s_error::@6/(const string) str3 mul8s_error::@8/(const string) str4 mul8u_compare::@9/(const string) mul8u_compare::str mul8u_error/(const string) mul8u_error::str mul8u_error::@2/(const string) str1 mul8u_error::@4/(const string) str2 mul8u_error::@6/(const string) str3 mul8u_error::@8/(const string) str4 mulf_tables_cmp::@9/(const string) mulf_tables_cmp::str2 mulf_tables_cmp::@3/(const string) mulf_tables_cmp::str mulf_tables_cmp::@5/(const string) mulf_tables_cmp::str1 ) +print_str: scope:[print_str] from mul8s_compare::@1 mul8u_compare::@9 mul8u_error mul8u_error::@2 mul8u_error::@4 mul8u_error::@6 mul8u_error::@8 mulf_tables_cmp::@3 mulf_tables_cmp::@5 mulf_tables_cmp::@9 + [28] (byte*) print_char_cursor#155 ← phi( mul8s_compare::@1/(byte*~) print_char_cursor#193 mul8u_compare::@9/(byte*) print_char_cursor#100 mul8u_error/(byte*) print_char_cursor#100 mul8u_error::@2/(byte*) print_char_cursor#19 mul8u_error::@4/(byte*) print_char_cursor#19 mul8u_error::@6/(byte*) print_char_cursor#19 mul8u_error::@8/(byte*) print_char_cursor#19 mulf_tables_cmp::@9/(byte*) print_char_cursor#19 mulf_tables_cmp::@3/(byte*) 1024 mulf_tables_cmp::@5/(byte*) 1024 ) + [28] (byte*) print_str::str#18 ← phi( mul8s_compare::@1/(const string) mul8s_compare::str mul8u_compare::@9/(const string) mul8u_compare::str mul8u_error/(const string) mul8u_error::str mul8u_error::@2/(const string) str1 mul8u_error::@4/(const string) str2 mul8u_error::@6/(const string) str3 mul8u_error::@8/(const string) str4 mulf_tables_cmp::@9/(const string) mulf_tables_cmp::str2 mulf_tables_cmp::@3/(const string) mulf_tables_cmp::str mulf_tables_cmp::@5/(const string) mulf_tables_cmp::str1 ) to:print_str::@1 print_str::@1: scope:[print_str] from print_str print_str::@2 - [115] (byte*) print_char_cursor#134 ← phi( print_str/(byte*) print_char_cursor#155 print_str::@2/(byte*) print_char_cursor#1 ) - [115] (byte*) print_str::str#16 ← phi( print_str/(byte*) print_str::str#18 print_str::@2/(byte*) print_str::str#0 ) - [116] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 + [29] (byte*) print_char_cursor#134 ← phi( print_str/(byte*) print_char_cursor#155 print_str::@2/(byte*) print_char_cursor#1 ) + [29] (byte*) print_str::str#16 ← phi( print_str/(byte*) print_str::str#18 print_str::@2/(byte*) print_str::str#0 ) + [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 - [117] return + [31] return to:@return print_str::@2: scope:[print_str] from print_str::@1 - [118] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) - [119] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#134 - [120] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#16 + [32] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) + [33] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#134 + [34] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#16 to:print_str::@1 -print_sbyte: scope:[print_sbyte] from mul8s_error::@1 mul8s_error::@3 - [121] (signed byte) print_sbyte::b#3 ← phi( mul8s_error::@1/(signed byte) print_sbyte::b#1 mul8s_error::@3/(signed byte) print_sbyte::b#2 ) - [122] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 - to:print_sbyte::@3 -print_sbyte::@3: scope:[print_sbyte] from print_sbyte - [123] phi() - [124] call print_char - to:print_sbyte::@2 -print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@3 print_sbyte::@4 - [125] (signed byte) print_sbyte::b#5 ← phi( print_sbyte::@4/(signed byte) print_sbyte::b#0 print_sbyte::@3/(signed byte) print_sbyte::b#3 ) - [126] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 - [127] call print_byte - to:print_sbyte::@return -print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@2 - [128] return +mul8u_compare: scope:[mul8u_compare] from main::@4 + [35] phi() + to:mul8u_compare::@1 +mul8u_compare::@1: scope:[mul8u_compare] from mul8u_compare mul8u_compare::@8 + [36] (byte) mul8u_compare::a#7 ← phi( mul8u_compare/(byte) 0 mul8u_compare::@8/(byte) mul8u_compare::a#1 ) + to:mul8u_compare::@2 +mul8u_compare::@2: scope:[mul8u_compare] from mul8u_compare::@1 mul8u_compare::@5 + [37] (byte) mul8u_compare::b#10 ← phi( mul8u_compare::@1/(byte) 0 mul8u_compare::@5/(byte) mul8u_compare::b#1 ) + [38] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 + [39] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 + [40] call muls8u + [41] (word) muls8u::return#2 ← (word) muls8u::return#0 + to:mul8u_compare::@10 +mul8u_compare::@10: scope:[mul8u_compare] from mul8u_compare::@2 + [42] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 + [43] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 + [44] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 + [45] call mulf8u + [46] (word) mulf8u::return#2 ← (word) mulf8u::return#0 + to:mul8u_compare::@11 +mul8u_compare::@11: scope:[mul8u_compare] from mul8u_compare::@10 + [47] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 + [48] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 + [49] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 + [50] call mul8u + [51] (word) mul8u::return#3 ← (word) mul8u::res#2 + to:mul8u_compare::@12 +mul8u_compare::@12: scope:[mul8u_compare] from mul8u_compare::@11 + [52] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 + [53] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 + to:mul8u_compare::@6 +mul8u_compare::@6: scope:[mul8u_compare] from mul8u_compare::@12 + [54] phi() + to:mul8u_compare::@3 +mul8u_compare::@3: scope:[mul8u_compare] from mul8u_compare::@12 mul8u_compare::@6 + [55] (byte) mul8u_compare::ok#4 ← phi( mul8u_compare::@12/(byte) 1 mul8u_compare::@6/(byte) 0 ) + [56] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 + to:mul8u_compare::@4 +mul8u_compare::@14: scope:[mul8u_compare] from mul8u_compare::@3 + [57] phi() + to:mul8u_compare::@4 +mul8u_compare::@4: scope:[mul8u_compare] from mul8u_compare::@14 mul8u_compare::@3 + [58] (byte) mul8u_compare::ok#3 ← phi( mul8u_compare::@14/(byte) mul8u_compare::ok#4 mul8u_compare::@3/(byte) 0 ) + [59] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 + to:mul8u_compare::@7 +mul8u_compare::@7: scope:[mul8u_compare] from mul8u_compare::@4 + [60] *((const byte*) BGCOL#0) ← (byte) 2 + [61] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 + [62] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 + [63] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 + [64] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 + [65] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 + [66] call mul8u_error + to:mul8u_compare::@return +mul8u_compare::@return: scope:[mul8u_compare] from mul8u_compare::@13 mul8u_compare::@7 + [67] return to:@return -print_sbyte::@1: scope:[print_sbyte] from print_sbyte - [129] phi() - [130] call print_char - to:print_sbyte::@4 -print_sbyte::@4: scope:[print_sbyte] from print_sbyte::@1 - [131] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 - to:print_sbyte::@2 -mul8s: scope:[mul8s] from mul8s_compare::@13 - [132] (byte) mul8u::a#1 ← (byte)(signed byte) mul8s::a#0 - [133] (byte) mul8u::b#0 ← (byte)(signed byte) mul8s::b#0 - [134] call mul8u - [135] (word) mul8u::return#2 ← (word) mul8u::res#2 - to:mul8s::@5 -mul8s::@5: scope:[mul8s] from mul8s - [136] (word) mul8s::m#0 ← (word) mul8u::return#2 - [137] if((signed byte) mul8s::a#0>=(signed byte) 0) goto mul8s::@1 - to:mul8s::@3 -mul8s::@3: scope:[mul8s] from mul8s::@5 - [138] (byte~) mul8s::$9 ← > (word) mul8s::m#0 - [139] (byte~) mul8s::$16 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::b#0 - [140] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$16 - to:mul8s::@1 -mul8s::@1: scope:[mul8s] from mul8s::@3 mul8s::@5 - [141] (word) mul8s::m#5 ← phi( mul8s::@3/(word) mul8s::m#1 mul8s::@5/(word) mul8s::m#0 ) - [142] if((signed byte) mul8s::b#0>=(signed byte) 0) goto mul8s::@2 - to:mul8s::@4 -mul8s::@4: scope:[mul8s] from mul8s::@1 - [143] (byte~) mul8s::$13 ← > (word) mul8s::m#5 - [144] (byte~) mul8s::$17 ← (byte~) mul8s::$13 - (byte)(signed byte) mul8s::a#0 - [145] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17 - to:mul8s::@2 -mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 - [146] (word) mul8s::m#4 ← phi( mul8s::@1/(word) mul8s::m#5 mul8s::@4/(word) mul8s::m#2 ) - to:mul8s::@return -mul8s::@return: scope:[mul8s] from mul8s::@2 - [147] return +mul8u_compare::@5: scope:[mul8u_compare] from mul8u_compare::@4 + [68] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 + [69] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 + to:mul8u_compare::@8 +mul8u_compare::@8: scope:[mul8u_compare] from mul8u_compare::@5 + [70] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 + [71] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 + to:mul8u_compare::@9 +mul8u_compare::@9: scope:[mul8u_compare] from mul8u_compare::@8 + [72] phi() + [73] call print_str + to:mul8u_compare::@13 +mul8u_compare::@13: scope:[mul8u_compare] from mul8u_compare::@9 + [74] phi() + [75] call print_ln + to:mul8u_compare::@return +mul8u_error: scope:[mul8u_error] from mul8u_compare::@7 + [76] phi() + [77] call print_str + to:mul8u_error::@1 +mul8u_error::@1: scope:[mul8u_error] from mul8u_error + [78] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 + [79] call print_byte + to:mul8u_error::@2 +mul8u_error::@2: scope:[mul8u_error] from mul8u_error::@1 + [80] phi() + [81] call print_str + to:mul8u_error::@3 +mul8u_error::@3: scope:[mul8u_error] from mul8u_error::@2 + [82] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 + [83] call print_byte + to:mul8u_error::@4 +mul8u_error::@4: scope:[mul8u_error] from mul8u_error::@3 + [84] phi() + [85] call print_str + to:mul8u_error::@5 +mul8u_error::@5: scope:[mul8u_error] from mul8u_error::@4 + [86] (word) print_word::w#3 ← (word) mul8u_error::ms#0 + [87] call print_word + to:mul8u_error::@6 +mul8u_error::@6: scope:[mul8u_error] from mul8u_error::@5 + [88] phi() + [89] call print_str + to:mul8u_error::@7 +mul8u_error::@7: scope:[mul8u_error] from mul8u_error::@6 + [90] (word) print_word::w#4 ← (word) mul8u_error::mn#0 + [91] call print_word + to:mul8u_error::@8 +mul8u_error::@8: scope:[mul8u_error] from mul8u_error::@7 + [92] phi() + [93] call print_str + to:mul8u_error::@9 +mul8u_error::@9: scope:[mul8u_error] from mul8u_error::@8 + [94] (word) print_word::w#5 ← (word) mul8u_error::mf#0 + [95] call print_word + to:mul8u_error::@10 +mul8u_error::@10: scope:[mul8u_error] from mul8u_error::@9 + [96] phi() + [97] call print_ln + to:mul8u_error::@return +mul8u_error::@return: scope:[mul8u_error] from mul8u_error::@10 + [98] return to:@return -mul8u: scope:[mul8u] from mul8s mul8u_compare::@11 - [148] (byte) mul8u::a#6 ← phi( mul8s/(byte) mul8u::a#1 mul8u_compare::@11/(byte) mul8u::a#2 ) - [148] (word) mul8u::mb#0 ← phi( mul8s/(byte) mul8u::b#0 mul8u_compare::@11/(byte) mul8u::b#1 ) +print_word: scope:[print_word] from mul8u_error::@5 mul8u_error::@7 mul8u_error::@9 mulf_tables_cmp::@10 mulf_tables_cmp::@8 + [99] (word) print_word::w#6 ← phi( mul8u_error::@5/(word) print_word::w#3 mul8u_error::@7/(word) print_word::w#4 mul8u_error::@9/(word) print_word::w#5 mulf_tables_cmp::@8/(word) print_word::w#1 mulf_tables_cmp::@10/(word) print_word::w#2 ) + [100] (byte) print_byte::b#1 ← > (word) print_word::w#6 + [101] call print_byte + to:print_word::@1 +print_word::@1: scope:[print_word] from print_word + [102] (byte) print_byte::b#2 ← < (word) print_word::w#6 + [103] call print_byte + to:print_word::@return +print_word::@return: scope:[print_word] from print_word::@1 + [104] return + to:@return +print_byte: scope:[print_byte] from mul8u_error::@1 mul8u_error::@3 print_word print_word::@1 + [105] (byte*) print_char_cursor#143 ← phi( mul8u_error::@1/(byte*) print_char_cursor#134 mul8u_error::@3/(byte*) print_char_cursor#134 print_word/(byte*) print_char_cursor#134 print_word::@1/(byte*) print_char_cursor#19 ) + [105] (byte) print_byte::b#5 ← phi( mul8u_error::@1/(byte) print_byte::b#3 mul8u_error::@3/(byte) print_byte::b#4 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 ) + [106] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 + [107] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) + [108] call print_char + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + [109] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f + [110] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) + [111] call print_char + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@1 + [112] return + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 + [113] (byte*) print_char_cursor#86 ← phi( print_byte/(byte*) print_char_cursor#143 print_byte::@1/(byte*) print_char_cursor#19 ) + [113] (byte) print_char::ch#6 ← phi( print_byte/(byte) print_char::ch#4 print_byte::@1/(byte) print_char::ch#5 ) + [114] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 + [115] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#86 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [116] return + to:@return +mul8u: scope:[mul8u] from mul8u_compare::@11 + [117] phi() to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [149] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) - [149] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) - [149] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) - [150] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 + [118] (word) mul8u::mb#2 ← phi( mul8u/(byte) mul8u::b#1 mul8u::@3/(word) mul8u::mb#1 ) + [118] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [118] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#2 mul8u::@3/(byte) mul8u::a#0 ) + [119] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 to:mul8u::@return mul8u::@return: scope:[mul8u] from mul8u::@1 - [151] return + [120] return to:@return mul8u::@2: scope:[mul8u] from mul8u::@1 - [152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 - [153] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 + [121] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 + [122] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 to:mul8u::@4 mul8u::@4: scope:[mul8u] from mul8u::@2 - [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 + [123] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 to:mul8u::@3 mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4 - [155] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) - [156] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 - [157] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 + [124] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) + [125] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 + [126] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 to:mul8u::@1 -mulf8s: scope:[mulf8s] from mul8s_compare::@12 - [158] phi() - to:mulf8s::mulf8s_prepare1 -mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s - [159] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 - [160] call mulf8u_prepare - to:mulf8s::@1 -mulf8s::@1: scope:[mulf8s] from mulf8s::mulf8s_prepare1 - [161] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 - [162] call mulf8s_prepared - to:mulf8s::@2 -mulf8s::@2: scope:[mulf8s] from mulf8s::@1 - [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 - to:mulf8s::@return -mulf8s::@return: scope:[mulf8s] from mulf8s::@2 - [164] return +mulf8u: scope:[mulf8u] from mul8u_compare::@10 + [127] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 + [128] call mulf8u_prepare + to:mulf8u::@1 +mulf8u::@1: scope:[mulf8u] from mulf8u + [129] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 + [130] call mulf8u_prepared + [131] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + to:mulf8u::@2 +mulf8u::@2: scope:[mulf8u] from mulf8u::@1 + [132] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 + to:mulf8u::@return +mulf8u::@return: scope:[mulf8u] from mulf8u::@2 + [133] return to:@return -mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@1 - [165] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 - [166] call mulf8u_prepared - [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 - to:mulf8s_prepared::@5 -mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared - [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 - [169] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(signed byte) 0) goto mulf8s_prepared::@1 - to:mulf8s_prepared::@3 -mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5 - [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 - [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 - [172] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 - to:mulf8s_prepared::@1 -mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5 - [173] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) - [174] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 - to:mulf8s_prepared::@4 -mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1 - [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 - [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) - [177] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 - to:mulf8s_prepared::@2 -mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4 - [178] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) - to:mulf8s_prepared::@return -mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 - [179] return - to:@return -mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared mulf8u::@1 - [180] (byte) mulf8u_prepared::b#2 ← phi( mulf8s_prepared/(byte) mulf8u_prepared::b#1 mulf8u::@1/(byte) mulf8u_prepared::b#0 ) - [181] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#2 +mulf8u_prepared: scope:[mulf8u_prepared] from mulf8u::@1 + [134] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#0 asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } - [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) + [136] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) to:mulf8u_prepared::@return mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared - [184] return + [137] return to:@return -mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1 mulf8u - [185] (byte) mulf8u_prepare::a#2 ← phi( mulf8s::mulf8s_prepare1/(byte) mulf8u_prepare::a#1 mulf8u/(byte) mulf8u_prepare::a#0 ) - [186] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2 +mulf8u_prepare: scope:[mulf8u_prepare] from mulf8u + [138] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#0 asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } to:mulf8u_prepare::@return mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare - [188] return - to:@return -muls8s: scope:[muls8s] from mul8s_compare::@4 - [189] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 - to:muls8s::@2 -muls8s::@2: scope:[muls8s] from muls8s - [190] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 - to:muls8s::@3 -muls8s::@3: scope:[muls8s] from muls8s::@2 muls8s::@4 - [191] (signed word) muls8s::m#3 ← phi( muls8s::@2/(signed byte) 0 muls8s::@4/(signed word) muls8s::m#1 ) - [191] (signed byte) muls8s::j#2 ← phi( muls8s::@2/(signed byte) 0 muls8s::@4/(signed byte) muls8s::j#1 ) - [192] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 - to:muls8s::@1 -muls8s::@1: scope:[muls8s] from muls8s::@2 muls8s::@3 muls8s::@5 - [193] (signed word) muls8s::return#0 ← phi( muls8s::@5/(signed word) muls8s::m#5 muls8s::@2/(signed byte) 0 muls8s::@3/(signed word) muls8s::m#3 ) - to:muls8s::@return -muls8s::@return: scope:[muls8s] from muls8s::@1 - [194] return - to:@return -muls8s::@4: scope:[muls8s] from muls8s::@3 - [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 - [196] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 - to:muls8s::@3 -muls8s::@5: scope:[muls8s] from muls8s muls8s::@6 - [197] (signed word) muls8s::m#5 ← phi( muls8s/(signed byte) 0 muls8s::@6/(signed word) muls8s::m#2 ) - [197] (signed byte) muls8s::i#2 ← phi( muls8s/(signed byte) 0 muls8s::@6/(signed byte) muls8s::i#1 ) - [198] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 - to:muls8s::@1 -muls8s::@6: scope:[muls8s] from muls8s::@5 - [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 - [200] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 - to:muls8s::@5 -mul8u_compare: scope:[mul8u_compare] from main::@4 - [201] phi() - to:mul8u_compare::@1 -mul8u_compare::@1: scope:[mul8u_compare] from mul8u_compare mul8u_compare::@8 - [202] (byte) mul8u_compare::a#7 ← phi( mul8u_compare/(byte) 0 mul8u_compare::@8/(byte) mul8u_compare::a#1 ) - to:mul8u_compare::@2 -mul8u_compare::@2: scope:[mul8u_compare] from mul8u_compare::@1 mul8u_compare::@5 - [203] (byte) mul8u_compare::b#10 ← phi( mul8u_compare::@1/(byte) 0 mul8u_compare::@5/(byte) mul8u_compare::b#1 ) - [204] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 - [205] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 - [206] call muls8u - [207] (word) muls8u::return#2 ← (word) muls8u::return#0 - to:mul8u_compare::@10 -mul8u_compare::@10: scope:[mul8u_compare] from mul8u_compare::@2 - [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 - [209] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 - [210] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 - [211] call mulf8u - [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 - to:mul8u_compare::@11 -mul8u_compare::@11: scope:[mul8u_compare] from mul8u_compare::@10 - [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 - [214] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 - [215] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 - [216] call mul8u - [217] (word) mul8u::return#3 ← (word) mul8u::res#2 - to:mul8u_compare::@12 -mul8u_compare::@12: scope:[mul8u_compare] from mul8u_compare::@11 - [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 - [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 - to:mul8u_compare::@6 -mul8u_compare::@6: scope:[mul8u_compare] from mul8u_compare::@12 - [220] phi() - to:mul8u_compare::@3 -mul8u_compare::@3: scope:[mul8u_compare] from mul8u_compare::@12 mul8u_compare::@6 - [221] (byte) mul8u_compare::ok#4 ← phi( mul8u_compare::@12/(byte) 1 mul8u_compare::@6/(byte) 0 ) - [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 - to:mul8u_compare::@4 -mul8u_compare::@14: scope:[mul8u_compare] from mul8u_compare::@3 - [223] phi() - to:mul8u_compare::@4 -mul8u_compare::@4: scope:[mul8u_compare] from mul8u_compare::@14 mul8u_compare::@3 - [224] (byte) mul8u_compare::ok#3 ← phi( mul8u_compare::@14/(byte) mul8u_compare::ok#4 mul8u_compare::@3/(byte) 0 ) - [225] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 - to:mul8u_compare::@7 -mul8u_compare::@7: scope:[mul8u_compare] from mul8u_compare::@4 - [226] *((const byte*) BGCOL#0) ← (byte) 2 - [227] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 - [228] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 - [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 - [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 - [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 - [232] call mul8u_error - to:mul8u_compare::@return -mul8u_compare::@return: scope:[mul8u_compare] from mul8u_compare::@13 mul8u_compare::@7 - [233] return - to:@return -mul8u_compare::@5: scope:[mul8u_compare] from mul8u_compare::@4 - [234] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 - [235] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 - to:mul8u_compare::@8 -mul8u_compare::@8: scope:[mul8u_compare] from mul8u_compare::@5 - [236] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 - [237] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 - to:mul8u_compare::@9 -mul8u_compare::@9: scope:[mul8u_compare] from mul8u_compare::@8 - [238] phi() - [239] call print_str - to:mul8u_compare::@13 -mul8u_compare::@13: scope:[mul8u_compare] from mul8u_compare::@9 - [240] phi() - [241] call print_ln - to:mul8u_compare::@return -mul8u_error: scope:[mul8u_error] from mul8u_compare::@7 - [242] phi() - [243] call print_str - to:mul8u_error::@1 -mul8u_error::@1: scope:[mul8u_error] from mul8u_error - [244] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 - [245] call print_byte - to:mul8u_error::@2 -mul8u_error::@2: scope:[mul8u_error] from mul8u_error::@1 - [246] phi() - [247] call print_str - to:mul8u_error::@3 -mul8u_error::@3: scope:[mul8u_error] from mul8u_error::@2 - [248] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 - [249] call print_byte - to:mul8u_error::@4 -mul8u_error::@4: scope:[mul8u_error] from mul8u_error::@3 - [250] phi() - [251] call print_str - to:mul8u_error::@5 -mul8u_error::@5: scope:[mul8u_error] from mul8u_error::@4 - [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 - [253] call print_word - to:mul8u_error::@6 -mul8u_error::@6: scope:[mul8u_error] from mul8u_error::@5 - [254] phi() - [255] call print_str - to:mul8u_error::@7 -mul8u_error::@7: scope:[mul8u_error] from mul8u_error::@6 - [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 - [257] call print_word - to:mul8u_error::@8 -mul8u_error::@8: scope:[mul8u_error] from mul8u_error::@7 - [258] phi() - [259] call print_str - to:mul8u_error::@9 -mul8u_error::@9: scope:[mul8u_error] from mul8u_error::@8 - [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 - [261] call print_word - to:mul8u_error::@10 -mul8u_error::@10: scope:[mul8u_error] from mul8u_error::@9 - [262] phi() - [263] call print_ln - to:mul8u_error::@return -mul8u_error::@return: scope:[mul8u_error] from mul8u_error::@10 - [264] return - to:@return -mulf8u: scope:[mulf8u] from mul8u_compare::@10 - [265] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 - [266] call mulf8u_prepare - to:mulf8u::@1 -mulf8u::@1: scope:[mulf8u] from mulf8u - [267] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 - [268] call mulf8u_prepared - [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 - to:mulf8u::@2 -mulf8u::@2: scope:[mulf8u] from mulf8u::@1 - [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 - to:mulf8u::@return -mulf8u::@return: scope:[mulf8u] from mulf8u::@2 - [271] return + [140] return to:@return muls8u: scope:[muls8u] from mul8u_compare::@2 - [272] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 + [141] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 to:muls8u::@2 muls8u::@2: scope:[muls8u] from muls8u muls8u::@3 - [273] (word) muls8u::m#3 ← phi( muls8u/(byte) 0 muls8u::@3/(word) muls8u::m#1 ) - [273] (byte) muls8u::i#2 ← phi( muls8u/(byte) 0 muls8u::@3/(byte) muls8u::i#1 ) - [274] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 + [142] (word) muls8u::m#3 ← phi( muls8u/(byte) 0 muls8u::@3/(word) muls8u::m#1 ) + [142] (byte) muls8u::i#2 ← phi( muls8u/(byte) 0 muls8u::@3/(byte) muls8u::i#1 ) + [143] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 to:muls8u::@1 muls8u::@1: scope:[muls8u] from muls8u muls8u::@2 - [275] (word) muls8u::return#0 ← phi( muls8u/(byte) 0 muls8u::@2/(word) muls8u::m#3 ) + [144] (word) muls8u::return#0 ← phi( muls8u/(byte) 0 muls8u::@2/(word) muls8u::m#3 ) to:muls8u::@return muls8u::@return: scope:[muls8u] from muls8u::@1 - [276] return + [145] return to:@return muls8u::@3: scope:[muls8u] from muls8u::@2 - [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 - [278] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 + [146] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 + [147] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 to:muls8u::@2 mulf_tables_cmp: scope:[mulf_tables_cmp] from main::@3 - [279] phi() + [148] phi() to:mulf_tables_cmp::@1 mulf_tables_cmp::@1: scope:[mulf_tables_cmp] from mulf_tables_cmp mulf_tables_cmp::@4 - [280] (byte*) mulf_tables_cmp::asm_sqr#2 ← phi( mulf_tables_cmp/(const byte[$200]) mula_sqr1_lo#0 mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::asm_sqr#1 ) - [280] (byte*) mulf_tables_cmp::kc_sqr#2 ← phi( mulf_tables_cmp/(const byte[$200]) mulf_sqr1_lo#0 mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::kc_sqr#1 ) - [281] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 + [149] (byte*) mulf_tables_cmp::asm_sqr#2 ← phi( mulf_tables_cmp/(const byte[$200]) mula_sqr1_lo#0 mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::asm_sqr#1 ) + [149] (byte*) mulf_tables_cmp::kc_sqr#2 ← phi( mulf_tables_cmp/(const byte[$200]) mulf_sqr1_lo#0 mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::kc_sqr#1 ) + [150] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 to:mulf_tables_cmp::@3 mulf_tables_cmp::@3: scope:[mulf_tables_cmp] from mulf_tables_cmp::@1 - [282] phi() - [283] call print_str + [151] phi() + [152] call print_str to:mulf_tables_cmp::@6 mulf_tables_cmp::@6: scope:[mulf_tables_cmp] from mulf_tables_cmp::@3 - [284] phi() - [285] call print_ln + [153] phi() + [154] call print_ln to:mulf_tables_cmp::@7 mulf_tables_cmp::@7: scope:[mulf_tables_cmp] from mulf_tables_cmp::@6 - [286] (byte*~) print_char_cursor#230 ← (byte*) print_line_cursor#1 + [155] (byte*~) print_char_cursor#213 ← (byte*) print_line_cursor#1 to:mulf_tables_cmp::@return mulf_tables_cmp::@return: scope:[mulf_tables_cmp] from mulf_tables_cmp::@10 mulf_tables_cmp::@7 - [287] (byte*) print_line_cursor#11 ← phi( mulf_tables_cmp::@7/(byte*) print_line_cursor#1 mulf_tables_cmp::@10/(byte*) 1024 ) - [287] (byte*) print_char_cursor#100 ← phi( mulf_tables_cmp::@7/(byte*~) print_char_cursor#230 mulf_tables_cmp::@10/(byte*) print_char_cursor#19 ) - [288] return + [156] (byte*) print_line_cursor#11 ← phi( mulf_tables_cmp::@7/(byte*) print_line_cursor#1 mulf_tables_cmp::@10/(byte*) 1024 ) + [156] (byte*) print_char_cursor#100 ← phi( mulf_tables_cmp::@7/(byte*~) print_char_cursor#213 mulf_tables_cmp::@10/(byte*) print_char_cursor#19 ) + [157] return to:@return mulf_tables_cmp::@2: scope:[mulf_tables_cmp] from mulf_tables_cmp::@1 - [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 + [158] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 to:mulf_tables_cmp::@5 mulf_tables_cmp::@5: scope:[mulf_tables_cmp] from mulf_tables_cmp::@2 - [290] *((const byte*) BGCOL#0) ← (byte) 2 - [291] call print_str + [159] *((const byte*) BGCOL#0) ← (byte) 2 + [160] call print_str to:mulf_tables_cmp::@8 mulf_tables_cmp::@8: scope:[mulf_tables_cmp] from mulf_tables_cmp::@5 - [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 - [293] call print_word + [161] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 + [162] call print_word to:mulf_tables_cmp::@9 mulf_tables_cmp::@9: scope:[mulf_tables_cmp] from mulf_tables_cmp::@8 - [294] phi() - [295] call print_str + [163] phi() + [164] call print_str to:mulf_tables_cmp::@10 mulf_tables_cmp::@10: scope:[mulf_tables_cmp] from mulf_tables_cmp::@9 - [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 - [297] call print_word + [165] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 + [166] call print_word to:mulf_tables_cmp::@return mulf_tables_cmp::@4: scope:[mulf_tables_cmp] from mulf_tables_cmp::@2 - [298] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 - [299] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 + [167] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 + [168] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 to:mulf_tables_cmp::@1 mulf_init_asm: scope:[mulf_init_asm] from main::@2 asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- } - [301] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) - [302] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) - [303] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) - [304] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) + [170] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) + [171] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) + [172] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) + [173] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) to:mulf_init_asm::@return mulf_init_asm::@return: scope:[mulf_init_asm] from mulf_init_asm - [305] return + [174] return to:@return mulf_init: scope:[mulf_init] from main::@1 - [306] phi() + [175] phi() to:mulf_init::@1 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 - [307] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) - [307] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[$200]) mulf_sqr1_hi#0+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [307] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) - [307] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) - [307] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[$200]) mulf_sqr1_lo#0+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) - [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 + [176] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) + [176] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[$200]) mulf_sqr1_hi#0+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) + [176] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [176] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) + [176] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[$200]) mulf_sqr1_lo#0+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) + [177] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 to:mulf_init::@5 mulf_init::@5: scope:[mulf_init] from mulf_init::@1 mulf_init::@8 - [309] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) - [309] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte[$200]) mulf_sqr2_hi#0 ) - [309] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) - [309] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte[$200]) mulf_sqr2_lo#0 ) - [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 + [178] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) + [178] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte[$200]) mulf_sqr2_hi#0 ) + [178] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) + [178] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte[$200]) mulf_sqr2_lo#0 ) + [179] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 to:mulf_init::@7 mulf_init::@7: scope:[mulf_init] from mulf_init::@5 - [311] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) - [312] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) + [180] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) + [181] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) to:mulf_init::@return mulf_init::@return: scope:[mulf_init] from mulf_init::@7 - [313] return + [182] return to:@return mulf_init::@6: scope:[mulf_init] from mulf_init::@5 - [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) - [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) - [316] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 - [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 - [318] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 + [183] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) + [184] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) + [185] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 + [186] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + [187] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 to:mulf_init::@8 mulf_init::@9: scope:[mulf_init] from mulf_init::@6 - [319] phi() + [188] phi() to:mulf_init::@8 mulf_init::@8: scope:[mulf_init] from mulf_init::@6 mulf_init::@9 - [320] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) - [321] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 + [189] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) + [190] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 to:mulf_init::@5 mulf_init::@2: scope:[mulf_init] from mulf_init::@1 - [322] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 - [323] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 - [324] if((byte~) mulf_init::$9!=(byte) 0) goto mulf_init::@3 + [191] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 + [192] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 + [193] if((byte~) mulf_init::$9!=(byte) 0) goto mulf_init::@3 to:mulf_init::@4 mulf_init::@4: scope:[mulf_init] from mulf_init::@2 - [325] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 - [326] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 + [194] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 + [195] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 to:mulf_init::@3 mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 - [327] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) - [327] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) - [328] (byte~) mulf_init::$12 ← < (word) mulf_init::sqr#3 - [329] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 - [330] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 - [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 - [332] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 - [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 - [334] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 + [196] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) + [196] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) + [197] (byte~) mulf_init::$12 ← < (word) mulf_init::sqr#3 + [198] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 + [199] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 + [200] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 + [201] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 + [202] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 + [203] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 to:mulf_init::@1 print_cls: scope:[print_cls] from main - [335] phi() - [336] call memset + [204] phi() + [205] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [337] return + [206] return to:@return memset: scope:[memset] from print_cls - [338] phi() + [207] phi() + to:memset::@2 +memset::@2: scope:[memset] from memset memset::@1 + [208] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 ) + [209] *((byte*) memset::dst#4) ← (const byte) memset::c#0 + [210] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [339] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset::@2 + [211] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [341] return + [212] return to:@return -memset::@2: scope:[memset] from memset::@1 - [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [343] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 VARIABLE REGISTER WEIGHTS @@ -4922,76 +4749,35 @@ VARIABLE REGISTER WEIGHTS (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst -(byte*) memset::dst#1 22.0 -(byte*) memset::dst#2 14.666666666666666 +(byte*) memset::dst#1 16.5 +(byte*) memset::dst#4 16.5 (byte*) memset::end (word) memset::num (void*) memset::return (void*) memset::str -(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) -(byte~) mul8s::$13 4.0 -(byte~) mul8s::$16 4.0 -(byte~) mul8s::$17 4.0 -(byte~) mul8s::$9 4.0 -(signed byte) mul8s::a -(signed byte) mul8s::a#0 7.357142857142858 -(signed byte) mul8s::b -(signed byte) mul8s::b#0 9.363636363636363 -(word) mul8s::m -(word) mul8s::m#0 2.0 -(word) mul8s::m#1 4.0 -(word) mul8s::m#2 4.0 -(word) mul8s::m#4 1.3333333333333333 -(word) mul8s::m#5 2.5 -(signed word) mul8s::return (void()) mul8s_compare() (signed byte) mul8s_compare::a -(signed byte) mul8s_compare::a#1 22.0 -(signed byte) mul8s_compare::a#10 12.518518518518519 (signed byte) mul8s_compare::b -(signed byte) mul8s_compare::b#1 202.0 -(signed byte) mul8s_compare::b#10 24.319999999999997 (signed word) mul8s_compare::mf -(signed word) mul8s_compare::mf#0 12.0 (signed word) mul8s_compare::mn -(signed word) mul8s_compare::mn#0 17.0 (signed word) mul8s_compare::ms -(signed word) mul8s_compare::ms#0 15.249999999999998 (byte) mul8s_compare::ok -(byte) mul8s_compare::ok#3 202.0 -(byte) mul8s_compare::ok#4 33.666666666666664 -(void()) mul8s_error((signed byte) mul8s_error::a , (signed byte) mul8s_error::b , (signed word) mul8s_error::ms , (signed word) mul8s_error::mn , (signed word) mul8s_error::mf) -(signed byte) mul8s_error::a -(signed byte) mul8s_error::a#0 0.5714285714285714 -(signed byte) mul8s_error::b -(signed byte) mul8s_error::b#0 0.4 -(signed word) mul8s_error::mf -(signed word) mul8s_error::mf#0 0.21052631578947367 -(signed word) mul8s_error::mn -(signed word) mul8s_error::mn#0 0.25 -(signed word) mul8s_error::ms -(signed word) mul8s_error::ms#0 0.3076923076923077 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) (byte~) mul8u::$1 2002.0 (byte) mul8u::a (byte) mul8u::a#0 1001.0 -(byte) mul8u::a#1 2.0 -(byte) mul8u::a#2 101.0 +(byte) mul8u::a#2 34.33333333333333 (byte) mul8u::a#3 667.6666666666667 -(byte) mul8u::a#6 105.0 (byte) mul8u::b -(byte) mul8u::b#0 4.0 -(byte) mul8u::b#1 202.0 +(byte) mul8u::b#1 51.5 (word) mul8u::mb -(word) mul8u::mb#0 105.0 (word) mul8u::mb#1 2002.0 (word) mul8u::mb#2 429.2857142857143 (word) mul8u::res (word) mul8u::res#1 2002.0 -(word) mul8u::res#2 443.7142857142857 +(word) mul8u::res#2 517.3333333333334 (word) mul8u::res#6 1001.0 (word) mul8u::return -(word) mul8u::return#2 4.0 (word) mul8u::return#3 202.0 (void()) mul8u_compare() (byte) mul8u_compare::a @@ -5024,31 +4810,6 @@ VARIABLE REGISTER WEIGHTS (byte[$200]) mula_sqr1_lo (byte[$200]) mula_sqr2_hi (byte[$200]) mula_sqr2_lo -(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) -(signed byte) mulf8s::a -(signed byte) mulf8s::a#0 33.666666666666664 -(signed byte) mulf8s::b -(signed byte) mulf8s::b#0 25.75 -(byte~) mulf8s::mulf8s_prepare1_$0 -(signed byte) mulf8s::mulf8s_prepare1_a -(signed word) mulf8s::return -(signed word) mulf8s::return#0 34.33333333333333 -(signed word) mulf8s::return#2 202.0 -(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) -(byte~) mulf8s_prepared::$12 4.0 -(byte~) mulf8s_prepared::$15 4.0 -(byte~) mulf8s_prepared::$16 4.0 -(byte~) mulf8s_prepared::$8 4.0 -(signed byte) mulf8s_prepared::b -(signed byte) mulf8s_prepared::b#0 0.4 -(word) mulf8s_prepared::m -(word) mulf8s_prepared::m#0 2.0 -(word) mulf8s_prepared::m#1 4.0 -(word) mulf8s_prepared::m#2 4.0 -(word) mulf8s_prepared::m#4 1.3333333333333333 -(word) mulf8s_prepared::m#5 2.5 -(signed byte*) mulf8s_prepared::memA -(signed word) mulf8s_prepared::return (word()) mulf8u((byte) mulf8u::a , (byte) mulf8u::b) (byte) mulf8u::a (byte) mulf8u::a#0 51.5 @@ -5060,20 +4821,15 @@ VARIABLE REGISTER WEIGHTS (void()) mulf8u_prepare((byte) mulf8u_prepare::a) (byte) mulf8u_prepare::a (byte) mulf8u_prepare::a#0 4.0 -(byte) mulf8u_prepare::a#1 4.0 -(byte) mulf8u_prepare::a#2 6.0 (byte*) mulf8u_prepare::memA (word()) mulf8u_prepared((byte) mulf8u_prepared::b) (byte) mulf8u_prepared::b (byte) mulf8u_prepared::b#0 4.0 -(byte) mulf8u_prepared::b#1 4.0 -(byte) mulf8u_prepared::b#2 6.0 (byte*) mulf8u_prepared::memB (byte*) mulf8u_prepared::resL (word) mulf8u_prepared::return -(word) mulf8u_prepared::return#0 1.5 +(word) mulf8u_prepared::return#0 1.3333333333333333 (word) mulf8u_prepared::return#2 4.0 -(word) mulf8u_prepared::return#3 4.0 (void()) mulf_init() (byte~) mulf_init::$12 22.0 (byte~) mulf_init::$13 22.0 @@ -5121,25 +4877,6 @@ VARIABLE REGISTER WEIGHTS (byte*) mulf_tables_cmp::kc_sqr (byte*) mulf_tables_cmp::kc_sqr#1 22.0 (byte*) mulf_tables_cmp::kc_sqr#2 4.4 -(signed word()) muls8s((signed byte) muls8s::a , (signed byte) muls8s::b) -(signed byte) muls8s::a -(signed byte) muls8s::a#0 175.58333333333334 -(signed byte) muls8s::b -(signed byte) muls8s::b#0 191.1818181818182 -(signed byte) muls8s::i -(signed byte) muls8s::i#1 2002.0 -(signed byte) muls8s::i#2 1001.0 -(signed byte) muls8s::j -(signed byte) muls8s::j#1 2002.0 -(signed byte) muls8s::j#2 1001.0 -(signed word) muls8s::m -(signed word) muls8s::m#1 1001.0 -(signed word) muls8s::m#2 1001.0 -(signed word) muls8s::m#3 1501.5 -(signed word) muls8s::m#5 1501.5 -(signed word) muls8s::return -(signed word) muls8s::return#0 701.0 -(signed word) muls8s::return#2 202.0 (word()) muls8u((byte) muls8u::a , (byte) muls8u::b) (byte) muls8u::a (byte) muls8u::a#0 157.71428571428572 @@ -5158,12 +4895,11 @@ VARIABLE REGISTER WEIGHTS (byte~) print_byte::$0 4.0 (byte~) print_byte::$2 4.0 (byte) print_byte::b -(byte) print_byte::b#0 4.0 (byte) print_byte::b#1 4.0 (byte) print_byte::b#2 4.0 (byte) print_byte::b#3 4.0 (byte) print_byte::b#4 4.0 -(byte) print_byte::b#5 3.5 +(byte) print_byte::b#5 3.0 (void()) print_char((byte) print_char::ch) (byte) print_char::ch (byte) print_char::ch#4 4.0 @@ -5172,84 +4908,52 @@ VARIABLE REGISTER WEIGHTS (byte*) print_char_cursor (byte*) print_char_cursor#1 11.0 (byte*) print_char_cursor#100 0.1951219512195122 -(byte*) print_char_cursor#134 1.5 -(byte*) print_char_cursor#135 5.25 -(byte*) print_char_cursor#142 7.0 -(byte*) print_char_cursor#143 3.9999999999999996 -(byte*) print_char_cursor#155 28.0 -(byte*) print_char_cursor#19 0.7083333333333331 +(byte*) print_char_cursor#134 1.8076923076923077 +(byte*) print_char_cursor#135 4.75 +(byte*) print_char_cursor#143 3.333333333333333 +(byte*) print_char_cursor#155 18.0 +(byte*) print_char_cursor#19 0.8333333333333334 (byte*~) print_char_cursor#193 4.0 -(byte*~) print_char_cursor#194 4.0 -(byte*~) print_char_cursor#230 4.0 -(byte*) print_char_cursor#86 8.0 +(byte*~) print_char_cursor#213 4.0 +(byte*) print_char_cursor#86 4.0 (void()) print_cls() (byte[]) print_hextab (byte*) print_line_cursor -(byte*) print_line_cursor#1 0.6428571428571428 +(byte*) print_line_cursor#1 2.5625 (byte*) print_line_cursor#11 0.09523809523809523 (byte*) print_line_cursor#23 24.0 -(byte*) print_line_cursor#45 10.0 +(byte*) print_line_cursor#45 8.0 (void()) print_ln() -(void()) print_sbyte((signed byte) print_sbyte::b) -(signed byte) print_sbyte::b -(signed byte) print_sbyte::b#0 4.0 -(signed byte) print_sbyte::b#1 4.0 -(signed byte) print_sbyte::b#2 4.0 -(signed byte) print_sbyte::b#3 1.6666666666666665 -(signed byte) print_sbyte::b#5 4.0 (byte*) print_screen (void()) print_str((byte*) print_str::str) (byte*) print_str::str (byte*) print_str::str#0 22.0 (byte*) print_str::str#16 11.5 (byte*) print_str::str#18 2.0 -(void()) print_sword((signed word) print_sword::w) -(signed word) print_sword::w -(signed word) print_sword::w#0 4.0 -(signed word) print_sword::w#1 4.0 -(signed word) print_sword::w#2 4.0 -(signed word) print_sword::w#3 4.0 -(signed word) print_sword::w#4 1.9999999999999998 -(signed word) print_sword::w#6 4.0 (void()) print_word((word) print_word::w) (word) print_word::w -(word) print_word::w#0 4.0 (word) print_word::w#1 4.0 (word) print_word::w#2 4.0 (word) print_word::w#3 4.0 (word) print_word::w#4 4.0 (word) print_word::w#5 4.0 -(word) print_word::w#6 5.333333333333333 +(word) print_word::w#6 4.666666666666666 -Not consolidating phi with different size mul8u::mb#0 mul8u::b#0 -Not consolidating phi with different size mul8u::mb#0 mul8u::b#1 +Not consolidating phi with different size mul8u::mb#2 mul8u::b#1 Initial phi equivalence classes -[ mul8s_compare::a#10 mul8s_compare::a#1 ] -[ mul8s_compare::b#10 mul8s_compare::b#1 ] -[ mul8s_compare::ok#3 mul8s_compare::ok#4 ] [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] -[ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 ] -[ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -[ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] -[ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] -[ print_char_cursor#155 print_char_cursor#193 print_char_cursor#194 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#230 ] [ print_str::str#16 print_str::str#18 print_str::str#0 ] -[ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] -[ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] -[ mul8u::b#0 ] -[ mul8u::b#1 ] -[ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] -[ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] -[ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] -[ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] -[ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] -[ muls8s::j#2 muls8s::j#1 ] -[ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] -[ muls8s::i#2 muls8s::i#1 ] [ mul8u_compare::a#7 mul8u_compare::a#1 ] [ mul8u_compare::b#10 mul8u_compare::b#1 ] [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] +[ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 ] +[ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#1 print_byte::b#2 ] +[ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] +[ print_char_cursor#86 print_char_cursor#143 print_char_cursor#155 print_char_cursor#193 print_char_cursor#100 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#1 print_char_cursor#213 ] +[ mul8u::a#3 mul8u::a#2 mul8u::a#0 ] +[ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] +[ mul8u::mb#2 mul8u::mb#1 ] +[ mul8u::b#1 ] [ muls8u::i#2 muls8u::i#1 ] [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] @@ -5263,39 +4967,7 @@ Initial phi equivalence classes [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] [ mulf_init::dir#2 mulf_init::dir#4 ] [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] -[ memset::dst#2 memset::dst#1 ] -Added variable muls8s::a#0 to zero page equivalence class [ muls8s::a#0 ] -Added variable muls8s::b#0 to zero page equivalence class [ muls8s::b#0 ] -Added variable muls8s::return#2 to zero page equivalence class [ muls8s::return#2 ] -Added variable mul8s_compare::ms#0 to zero page equivalence class [ mul8s_compare::ms#0 ] -Added variable mulf8s::a#0 to zero page equivalence class [ mulf8s::a#0 ] -Added variable mulf8s::b#0 to zero page equivalence class [ mulf8s::b#0 ] -Added variable mulf8s::return#2 to zero page equivalence class [ mulf8s::return#2 ] -Added variable mul8s_compare::mf#0 to zero page equivalence class [ mul8s_compare::mf#0 ] -Added variable mul8s::a#0 to zero page equivalence class [ mul8s::a#0 ] -Added variable mul8s::b#0 to zero page equivalence class [ mul8s::b#0 ] -Added variable mul8s_compare::mn#0 to zero page equivalence class [ mul8s_compare::mn#0 ] -Added variable mul8s_error::a#0 to zero page equivalence class [ mul8s_error::a#0 ] -Added variable mul8s_error::b#0 to zero page equivalence class [ mul8s_error::b#0 ] -Added variable mul8s_error::ms#0 to zero page equivalence class [ mul8s_error::ms#0 ] -Added variable mul8s_error::mn#0 to zero page equivalence class [ mul8s_error::mn#0 ] -Added variable mul8s_error::mf#0 to zero page equivalence class [ mul8s_error::mf#0 ] -Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] -Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] -Added variable mul8u::return#2 to zero page equivalence class [ mul8u::return#2 ] -Added variable mul8s::$9 to zero page equivalence class [ mul8s::$9 ] -Added variable mul8s::$16 to zero page equivalence class [ mul8s::$16 ] -Added variable mul8s::$13 to zero page equivalence class [ mul8s::$13 ] -Added variable mul8s::$17 to zero page equivalence class [ mul8s::$17 ] -Added variable mul8u::$1 to zero page equivalence class [ mul8u::$1 ] -Added variable mulf8s_prepared::b#0 to zero page equivalence class [ mulf8s_prepared::b#0 ] -Added variable mulf8s::return#0 to zero page equivalence class [ mulf8s::return#0 ] -Added variable mulf8u_prepared::return#3 to zero page equivalence class [ mulf8u_prepared::return#3 ] -Added variable mulf8s_prepared::$8 to zero page equivalence class [ mulf8s_prepared::$8 ] -Added variable mulf8s_prepared::$15 to zero page equivalence class [ mulf8s_prepared::$15 ] -Added variable mulf8s_prepared::$12 to zero page equivalence class [ mulf8s_prepared::$12 ] -Added variable mulf8s_prepared::$16 to zero page equivalence class [ mulf8s_prepared::$16 ] -Added variable mulf8u_prepared::return#0 to zero page equivalence class [ mulf8u_prepared::return#0 ] +[ memset::dst#4 memset::dst#1 ] Added variable muls8u::a#0 to zero page equivalence class [ muls8u::a#0 ] Added variable muls8u::b#0 to zero page equivalence class [ muls8u::b#0 ] Added variable muls8u::return#2 to zero page equivalence class [ muls8u::return#2 ] @@ -5311,38 +4983,31 @@ Added variable mul8u_error::b#0 to zero page equivalence class [ mul8u_error::b# Added variable mul8u_error::ms#0 to zero page equivalence class [ mul8u_error::ms#0 ] Added variable mul8u_error::mn#0 to zero page equivalence class [ mul8u_error::mn#0 ] Added variable mul8u_error::mf#0 to zero page equivalence class [ mul8u_error::mf#0 ] +Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] +Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] +Added variable mul8u::$1 to zero page equivalence class [ mul8u::$1 ] +Added variable mulf8u_prepare::a#0 to zero page equivalence class [ mulf8u_prepare::a#0 ] +Added variable mulf8u_prepared::b#0 to zero page equivalence class [ mulf8u_prepared::b#0 ] Added variable mulf8u_prepared::return#2 to zero page equivalence class [ mulf8u_prepared::return#2 ] Added variable mulf8u::return#0 to zero page equivalence class [ mulf8u::return#0 ] +Added variable mulf8u_prepared::return#0 to zero page equivalence class [ mulf8u_prepared::return#0 ] Added variable mulf_init::$9 to zero page equivalence class [ mulf_init::$9 ] Added variable mulf_init::$12 to zero page equivalence class [ mulf_init::$12 ] Added variable mulf_init::$13 to zero page equivalence class [ mulf_init::$13 ] Complete equivalence classes -[ mul8s_compare::a#10 mul8s_compare::a#1 ] -[ mul8s_compare::b#10 mul8s_compare::b#1 ] -[ mul8s_compare::ok#3 mul8s_compare::ok#4 ] [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] -[ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 ] -[ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -[ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] -[ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] -[ print_char_cursor#155 print_char_cursor#193 print_char_cursor#194 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#230 ] [ print_str::str#16 print_str::str#18 print_str::str#0 ] -[ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] -[ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] -[ mul8u::b#0 ] -[ mul8u::b#1 ] -[ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] -[ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] -[ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] -[ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] -[ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] -[ muls8s::j#2 muls8s::j#1 ] -[ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] -[ muls8s::i#2 muls8s::i#1 ] [ mul8u_compare::a#7 mul8u_compare::a#1 ] [ mul8u_compare::b#10 mul8u_compare::b#1 ] [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] +[ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 ] +[ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#1 print_byte::b#2 ] +[ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] +[ print_char_cursor#86 print_char_cursor#143 print_char_cursor#155 print_char_cursor#193 print_char_cursor#100 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#1 print_char_cursor#213 ] +[ mul8u::a#3 mul8u::a#2 mul8u::a#0 ] +[ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] +[ mul8u::mb#2 mul8u::mb#1 ] +[ mul8u::b#1 ] [ muls8u::i#2 muls8u::i#1 ] [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] @@ -5356,39 +5021,7 @@ Complete equivalence classes [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] [ mulf_init::dir#2 mulf_init::dir#4 ] [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] -[ memset::dst#2 memset::dst#1 ] -[ muls8s::a#0 ] -[ muls8s::b#0 ] -[ muls8s::return#2 ] -[ mul8s_compare::ms#0 ] -[ mulf8s::a#0 ] -[ mulf8s::b#0 ] -[ mulf8s::return#2 ] -[ mul8s_compare::mf#0 ] -[ mul8s::a#0 ] -[ mul8s::b#0 ] -[ mul8s_compare::mn#0 ] -[ mul8s_error::a#0 ] -[ mul8s_error::b#0 ] -[ mul8s_error::ms#0 ] -[ mul8s_error::mn#0 ] -[ mul8s_error::mf#0 ] -[ print_byte::$0 ] -[ print_byte::$2 ] -[ mul8u::return#2 ] -[ mul8s::$9 ] -[ mul8s::$16 ] -[ mul8s::$13 ] -[ mul8s::$17 ] -[ mul8u::$1 ] -[ mulf8s_prepared::b#0 ] -[ mulf8s::return#0 ] -[ mulf8u_prepared::return#3 ] -[ mulf8s_prepared::$8 ] -[ mulf8s_prepared::$15 ] -[ mulf8s_prepared::$12 ] -[ mulf8s_prepared::$16 ] -[ mulf8u_prepared::return#0 ] +[ memset::dst#4 memset::dst#1 ] [ muls8u::a#0 ] [ muls8u::b#0 ] [ muls8u::return#2 ] @@ -5404,103 +5037,70 @@ Complete equivalence classes [ mul8u_error::ms#0 ] [ mul8u_error::mn#0 ] [ mul8u_error::mf#0 ] +[ print_byte::$0 ] +[ print_byte::$2 ] +[ mul8u::$1 ] +[ mulf8u_prepare::a#0 ] +[ mulf8u_prepared::b#0 ] [ mulf8u_prepared::return#2 ] [ mulf8u::return#0 ] +[ mulf8u_prepared::return#0 ] [ mulf_init::$9 ] [ mulf_init::$12 ] [ mulf_init::$13 ] -Allocated zp ZP_BYTE:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] -Allocated zp ZP_BYTE:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] -Allocated zp ZP_BYTE:4 [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] -Allocated zp ZP_WORD:5 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] -Allocated zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 ] -Allocated zp ZP_BYTE:9 [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -Allocated zp ZP_WORD:10 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] -Allocated zp ZP_BYTE:12 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] -Allocated zp ZP_WORD:13 [ print_char_cursor#155 print_char_cursor#193 print_char_cursor#194 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#230 ] -Allocated zp ZP_WORD:15 [ print_str::str#16 print_str::str#18 print_str::str#0 ] -Allocated zp ZP_BYTE:17 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] -Allocated zp ZP_WORD:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] -Allocated zp ZP_BYTE:20 [ mul8u::b#0 ] -Allocated zp ZP_BYTE:21 [ mul8u::b#1 ] -Allocated zp ZP_BYTE:22 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] -Allocated zp ZP_WORD:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -Allocated zp ZP_WORD:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] -Allocated zp ZP_WORD:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] -Allocated zp ZP_BYTE:29 [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] -Allocated zp ZP_BYTE:30 [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] -Allocated zp ZP_BYTE:31 [ muls8s::j#2 muls8s::j#1 ] -Allocated zp ZP_WORD:32 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] -Allocated zp ZP_BYTE:34 [ muls8s::i#2 muls8s::i#1 ] -Allocated zp ZP_BYTE:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] -Allocated zp ZP_BYTE:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] -Allocated zp ZP_BYTE:37 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] -Allocated zp ZP_BYTE:38 [ muls8u::i#2 muls8u::i#1 ] -Allocated zp ZP_WORD:39 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] -Allocated zp ZP_WORD:41 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] -Allocated zp ZP_WORD:43 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] -Allocated zp ZP_WORD:45 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] -Allocated zp ZP_BYTE:47 [ mulf_init::c#2 mulf_init::c#1 ] -Allocated zp ZP_WORD:48 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -Allocated zp ZP_BYTE:50 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Allocated zp ZP_WORD:51 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] -Allocated zp ZP_BYTE:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Allocated zp ZP_WORD:54 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] -Allocated zp ZP_BYTE:56 [ mulf_init::dir#2 mulf_init::dir#4 ] -Allocated zp ZP_WORD:57 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] -Allocated zp ZP_WORD:59 [ memset::dst#2 memset::dst#1 ] -Allocated zp ZP_BYTE:61 [ muls8s::a#0 ] -Allocated zp ZP_BYTE:62 [ muls8s::b#0 ] -Allocated zp ZP_WORD:63 [ muls8s::return#2 ] -Allocated zp ZP_WORD:65 [ mul8s_compare::ms#0 ] -Allocated zp ZP_BYTE:67 [ mulf8s::a#0 ] -Allocated zp ZP_BYTE:68 [ mulf8s::b#0 ] -Allocated zp ZP_WORD:69 [ mulf8s::return#2 ] -Allocated zp ZP_WORD:71 [ mul8s_compare::mf#0 ] -Allocated zp ZP_BYTE:73 [ mul8s::a#0 ] -Allocated zp ZP_BYTE:74 [ mul8s::b#0 ] -Allocated zp ZP_WORD:75 [ mul8s_compare::mn#0 ] -Allocated zp ZP_BYTE:77 [ mul8s_error::a#0 ] -Allocated zp ZP_BYTE:78 [ mul8s_error::b#0 ] -Allocated zp ZP_WORD:79 [ mul8s_error::ms#0 ] -Allocated zp ZP_WORD:81 [ mul8s_error::mn#0 ] -Allocated zp ZP_WORD:83 [ mul8s_error::mf#0 ] -Allocated zp ZP_BYTE:85 [ print_byte::$0 ] -Allocated zp ZP_BYTE:86 [ print_byte::$2 ] -Allocated zp ZP_WORD:87 [ mul8u::return#2 ] -Allocated zp ZP_BYTE:89 [ mul8s::$9 ] -Allocated zp ZP_BYTE:90 [ mul8s::$16 ] -Allocated zp ZP_BYTE:91 [ mul8s::$13 ] -Allocated zp ZP_BYTE:92 [ mul8s::$17 ] -Allocated zp ZP_BYTE:93 [ mul8u::$1 ] -Allocated zp ZP_BYTE:94 [ mulf8s_prepared::b#0 ] -Allocated zp ZP_WORD:95 [ mulf8s::return#0 ] -Allocated zp ZP_WORD:97 [ mulf8u_prepared::return#3 ] -Allocated zp ZP_BYTE:99 [ mulf8s_prepared::$8 ] -Allocated zp ZP_BYTE:100 [ mulf8s_prepared::$15 ] -Allocated zp ZP_BYTE:101 [ mulf8s_prepared::$12 ] -Allocated zp ZP_BYTE:102 [ mulf8s_prepared::$16 ] -Allocated zp ZP_WORD:103 [ mulf8u_prepared::return#0 ] -Allocated zp ZP_BYTE:105 [ muls8u::a#0 ] -Allocated zp ZP_BYTE:106 [ muls8u::b#0 ] -Allocated zp ZP_WORD:107 [ muls8u::return#2 ] -Allocated zp ZP_WORD:109 [ mul8u_compare::ms#0 ] -Allocated zp ZP_BYTE:111 [ mulf8u::a#0 ] -Allocated zp ZP_BYTE:112 [ mulf8u::b#0 ] -Allocated zp ZP_WORD:113 [ mulf8u::return#2 ] -Allocated zp ZP_WORD:115 [ mul8u_compare::mf#0 ] -Allocated zp ZP_WORD:117 [ mul8u::return#3 ] -Allocated zp ZP_WORD:119 [ mul8u_compare::mn#0 ] -Allocated zp ZP_BYTE:121 [ mul8u_error::a#0 ] -Allocated zp ZP_BYTE:122 [ mul8u_error::b#0 ] -Allocated zp ZP_WORD:123 [ mul8u_error::ms#0 ] -Allocated zp ZP_WORD:125 [ mul8u_error::mn#0 ] -Allocated zp ZP_WORD:127 [ mul8u_error::mf#0 ] -Allocated zp ZP_WORD:129 [ mulf8u_prepared::return#2 ] -Allocated zp ZP_WORD:131 [ mulf8u::return#0 ] -Allocated zp ZP_BYTE:133 [ mulf_init::$9 ] -Allocated zp ZP_BYTE:134 [ mulf_init::$12 ] -Allocated zp ZP_BYTE:135 [ mulf_init::$13 ] +Allocated zp ZP_WORD:2 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] +Allocated zp ZP_WORD:4 [ print_str::str#16 print_str::str#18 print_str::str#0 ] +Allocated zp ZP_BYTE:6 [ mul8u_compare::a#7 mul8u_compare::a#1 ] +Allocated zp ZP_BYTE:7 [ mul8u_compare::b#10 mul8u_compare::b#1 ] +Allocated zp ZP_BYTE:8 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] +Allocated zp ZP_WORD:9 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 ] +Allocated zp ZP_BYTE:11 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#1 print_byte::b#2 ] +Allocated zp ZP_BYTE:12 [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] +Allocated zp ZP_WORD:13 [ print_char_cursor#86 print_char_cursor#143 print_char_cursor#155 print_char_cursor#193 print_char_cursor#100 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#1 print_char_cursor#213 ] +Allocated zp ZP_BYTE:15 [ mul8u::a#3 mul8u::a#2 mul8u::a#0 ] +Allocated zp ZP_WORD:16 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] +Allocated zp ZP_WORD:18 [ mul8u::mb#2 mul8u::mb#1 ] +Allocated zp ZP_BYTE:20 [ mul8u::b#1 ] +Allocated zp ZP_BYTE:21 [ muls8u::i#2 muls8u::i#1 ] +Allocated zp ZP_WORD:22 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] +Allocated zp ZP_WORD:24 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] +Allocated zp ZP_WORD:26 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] +Allocated zp ZP_WORD:28 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] +Allocated zp ZP_BYTE:30 [ mulf_init::c#2 mulf_init::c#1 ] +Allocated zp ZP_WORD:31 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Allocated zp ZP_BYTE:33 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Allocated zp ZP_WORD:34 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] +Allocated zp ZP_BYTE:36 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Allocated zp ZP_WORD:37 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] +Allocated zp ZP_BYTE:39 [ mulf_init::dir#2 mulf_init::dir#4 ] +Allocated zp ZP_WORD:40 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] +Allocated zp ZP_WORD:42 [ memset::dst#4 memset::dst#1 ] +Allocated zp ZP_BYTE:44 [ muls8u::a#0 ] +Allocated zp ZP_BYTE:45 [ muls8u::b#0 ] +Allocated zp ZP_WORD:46 [ muls8u::return#2 ] +Allocated zp ZP_WORD:48 [ mul8u_compare::ms#0 ] +Allocated zp ZP_BYTE:50 [ mulf8u::a#0 ] +Allocated zp ZP_BYTE:51 [ mulf8u::b#0 ] +Allocated zp ZP_WORD:52 [ mulf8u::return#2 ] +Allocated zp ZP_WORD:54 [ mul8u_compare::mf#0 ] +Allocated zp ZP_WORD:56 [ mul8u::return#3 ] +Allocated zp ZP_WORD:58 [ mul8u_compare::mn#0 ] +Allocated zp ZP_BYTE:60 [ mul8u_error::a#0 ] +Allocated zp ZP_BYTE:61 [ mul8u_error::b#0 ] +Allocated zp ZP_WORD:62 [ mul8u_error::ms#0 ] +Allocated zp ZP_WORD:64 [ mul8u_error::mn#0 ] +Allocated zp ZP_WORD:66 [ mul8u_error::mf#0 ] +Allocated zp ZP_BYTE:68 [ print_byte::$0 ] +Allocated zp ZP_BYTE:69 [ print_byte::$2 ] +Allocated zp ZP_BYTE:70 [ mul8u::$1 ] +Allocated zp ZP_BYTE:71 [ mulf8u_prepare::a#0 ] +Allocated zp ZP_BYTE:72 [ mulf8u_prepared::b#0 ] +Allocated zp ZP_WORD:73 [ mulf8u_prepared::return#2 ] +Allocated zp ZP_WORD:75 [ mulf8u::return#0 ] +Allocated zp ZP_WORD:77 [ mulf8u_prepared::return#0 ] +Allocated zp ZP_BYTE:79 [ mulf_init::$9 ] +Allocated zp ZP_BYTE:80 [ mulf_init::$12 ] +Allocated zp ZP_BYTE:81 [ mulf_init::$13 ] INITIAL ASM Target platform is c64basic @@ -5513,7 +5113,7 @@ Target platform is c64basic // Global Constants & labels .label BGCOL = $d021 .label print_char_cursor = $d - .label print_line_cursor = 5 + .label print_line_cursor = 2 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -5534,7 +5134,7 @@ main: { lda #5 sta BGCOL // [5] call print_cls - // [335] phi from main to print_cls [phi:main->print_cls] + // [204] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [6] phi from main to main::@1 [phi:main->main::@1] @@ -5543,7 +5143,7 @@ main: { // main::@1 b1: // [7] call mulf_init - // [306] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] + // [175] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] mulf_init_from_b1: jsr mulf_init // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -5559,7 +5159,7 @@ main: { // main::@3 b3: // [11] call mulf_tables_cmp - // [279] phi from main::@3 to mulf_tables_cmp [phi:main::@3->mulf_tables_cmp] + // [148] phi from main::@3 to mulf_tables_cmp [phi:main::@3->mulf_tables_cmp] mulf_tables_cmp_from_b3: jsr mulf_tables_cmp // [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -5568,7 +5168,7 @@ main: { // main::@4 b4: // [13] call mul8u_compare - // [201] phi from main::@4 to mul8u_compare [phi:main::@4->mul8u_compare] + // [35] phi from main::@4 to mul8u_compare [phi:main::@4->mul8u_compare] mul8u_compare_from_b4: jsr mul8u_compare // [14] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -5589,410 +5189,53 @@ main: { // mul8s_compare // Perform all possible signed byte multiplications (slow and fast) and compare the results mul8s_compare: { - .label ms = $41 - .label mf = $47 - .label mn = $4b - .label a = 2 - .label b = 3 - .label ok = 4 - // [18] phi from mul8s_compare to mul8s_compare::@1 [phi:mul8s_compare->mul8s_compare::@1] - b1_from_mul8s_compare: - // [18] phi (signed byte) mul8s_compare::a#10 = (signed byte) -$80 [phi:mul8s_compare->mul8s_compare::@1#0] -- vbsz1=vbsc1 - lda #-$80 - sta a jmp b1 // mul8s_compare::@1 b1: - // [19] if((signed byte) mul8s_compare::a#10!=(signed byte) -$80) goto mul8s_compare::@3 -- vbsz1_neq_vbsc1_then_la1 - lda #-$80 - cmp a - bne b3_from_b1 - jmp b2 - // mul8s_compare::@2 - b2: - // [20] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [18] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 - // [21] call print_str - // [114] phi from mul8s_compare::@2 to print_str [phi:mul8s_compare::@2->print_str] - print_str_from_b2: - // [114] phi (byte*) print_char_cursor#155 = (byte*~) print_char_cursor#193 [phi:mul8s_compare::@2->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mul8s_compare::str [phi:mul8s_compare::@2->print_str#1] -- pbuz1=pbuc1 + // [19] call print_str + // [28] phi from mul8s_compare::@1 to print_str [phi:mul8s_compare::@1->print_str] + print_str_from_b1: + // [28] phi (byte*) print_char_cursor#155 = (byte*~) print_char_cursor#193 [phi:mul8s_compare::@1->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) mul8s_compare::str [phi:mul8s_compare::@1->print_str#1] -- pbuz1=pbuc1 lda #str sta print_str.str+1 jsr print_str - // [22] phi from mul8s_compare::@2 to mul8s_compare::@11 [phi:mul8s_compare::@2->mul8s_compare::@11] - b11_from_b2: - jmp b11 - // mul8s_compare::@11 - b11: - // [23] call print_ln - // [80] phi from mul8s_compare::@11 to print_ln [phi:mul8s_compare::@11->print_ln] - print_ln_from_b11: - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8s_compare::@11->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#1 [phi:mul8s_compare::@11->print_ln#1] -- register_copy + // [20] phi from mul8s_compare::@1 to mul8s_compare::@2 [phi:mul8s_compare::@1->mul8s_compare::@2] + b2_from_b1: + jmp b2 + // mul8s_compare::@2 + b2: + // [21] call print_ln + // [23] phi from mul8s_compare::@2 to print_ln [phi:mul8s_compare::@2->print_ln] + print_ln_from_b2: + // [23] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8s_compare::@2->print_ln#0] -- register_copy + // [23] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#1 [phi:mul8s_compare::@2->print_ln#1] -- register_copy jsr print_ln jmp breturn // mul8s_compare::@return breturn: - // [24] return + // [22] return rts - // [25] phi from mul8s_compare::@1 to mul8s_compare::@3 [phi:mul8s_compare::@1->mul8s_compare::@3] - b3_from_b1: - // [25] phi (signed byte) mul8s_compare::b#10 = (signed byte) -$80 [phi:mul8s_compare::@1->mul8s_compare::@3#0] -- vbsz1=vbsc1 - lda #-$80 - sta b - jmp b3 - // mul8s_compare::@3 - b3: - // [26] if((signed byte) mul8s_compare::b#10!=(signed byte) -$80) goto mul8s_compare::@4 -- vbsz1_neq_vbsc1_then_la1 - lda #-$80 - cmp b - bne b4 - jmp b5 - // mul8s_compare::@5 - b5: - // [27] (signed byte) mul8s_compare::a#1 ← ++ (signed byte) mul8s_compare::a#10 -- vbsz1=_inc_vbsz1 - inc a - // [18] phi from mul8s_compare::@5 to mul8s_compare::@1 [phi:mul8s_compare::@5->mul8s_compare::@1] - b1_from_b5: - // [18] phi (signed byte) mul8s_compare::a#10 = (signed byte) mul8s_compare::a#1 [phi:mul8s_compare::@5->mul8s_compare::@1#0] -- register_copy - jmp b1 - // mul8s_compare::@4 - b4: - // [28] (signed byte) muls8s::a#0 ← (signed byte) mul8s_compare::a#10 -- vbsz1=vbsz2 - lda a - sta muls8s.a - // [29] (signed byte) muls8s::b#0 ← (signed byte) mul8s_compare::b#10 -- vbsz1=vbsz2 - lda b - sta muls8s.b - // [30] call muls8s - jsr muls8s - // [31] (signed word) muls8s::return#2 ← (signed word) muls8s::return#0 -- vwsz1=vwsz2 - lda muls8s.return - sta muls8s.return_2 - lda muls8s.return+1 - sta muls8s.return_2+1 - jmp b12 - // mul8s_compare::@12 - b12: - // [32] (signed word) mul8s_compare::ms#0 ← (signed word) muls8s::return#2 -- vwsz1=vwsz2 - lda muls8s.return_2 - sta ms - lda muls8s.return_2+1 - sta ms+1 - // [33] (signed byte) mulf8s::a#0 ← (signed byte) mul8s_compare::a#10 -- vbsz1=vbsz2 - lda a - sta mulf8s.a - // [34] (signed byte) mulf8s::b#0 ← (signed byte) mul8s_compare::b#10 -- vbsz1=vbsz2 - lda b - sta mulf8s.b - // [35] call mulf8s - // [158] phi from mul8s_compare::@12 to mulf8s [phi:mul8s_compare::@12->mulf8s] - mulf8s_from_b12: - jsr mulf8s - // [36] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 -- vwsz1=vwsz2 - lda mulf8s.return - sta mulf8s.return_2 - lda mulf8s.return+1 - sta mulf8s.return_2+1 - jmp b13 - // mul8s_compare::@13 - b13: - // [37] (signed word) mul8s_compare::mf#0 ← (signed word) mulf8s::return#2 -- vwsz1=vwsz2 - lda mulf8s.return_2 - sta mf - lda mulf8s.return_2+1 - sta mf+1 - // [38] (signed byte) mul8s::a#0 ← (signed byte) mul8s_compare::a#10 -- vbsz1=vbsz2 - lda a - sta mul8s.a - // [39] (signed byte) mul8s::b#0 ← (signed byte) mul8s_compare::b#10 -- vbsz1=vbsz2 - lda b - sta mul8s.b - // [40] call mul8s - jsr mul8s - jmp b14 - // mul8s_compare::@14 - b14: - // [41] (signed word) mul8s_compare::mn#0 ← (signed word)(word) mul8s::m#4 -- vwsz1=vwsz2 - lda mul8s.m - sta mn - lda mul8s.m+1 - sta mn+1 - // [42] if((signed word) mul8s_compare::ms#0==(signed word) mul8s_compare::mf#0) goto mul8s_compare::@6 -- vwsz1_eq_vwsz2_then_la1 - lda ms - cmp mf - bne !+ - lda ms+1 - cmp mf+1 - beq b6_from_b14 - !: - // [43] phi from mul8s_compare::@14 to mul8s_compare::@9 [phi:mul8s_compare::@14->mul8s_compare::@9] - b9_from_b14: - jmp b9 - // mul8s_compare::@9 - b9: - // [44] phi from mul8s_compare::@9 to mul8s_compare::@6 [phi:mul8s_compare::@9->mul8s_compare::@6] - b6_from_b9: - // [44] phi (byte) mul8s_compare::ok#4 = (byte) 0 [phi:mul8s_compare::@9->mul8s_compare::@6#0] -- vbuz1=vbuc1 - lda #0 - sta ok - jmp b6 - // [44] phi from mul8s_compare::@14 to mul8s_compare::@6 [phi:mul8s_compare::@14->mul8s_compare::@6] - b6_from_b14: - // [44] phi (byte) mul8s_compare::ok#4 = (byte) 1 [phi:mul8s_compare::@14->mul8s_compare::@6#0] -- vbuz1=vbuc1 - lda #1 - sta ok - jmp b6 - // mul8s_compare::@6 - b6: - // [45] if((signed word) mul8s_compare::ms#0==(signed word) mul8s_compare::mn#0) goto mul8s_compare::@15 -- vwsz1_eq_vwsz2_then_la1 - lda ms - cmp mn - bne !+ - lda ms+1 - cmp mn+1 - beq b15_from_b6 - !: - // [47] phi from mul8s_compare::@6 to mul8s_compare::@7 [phi:mul8s_compare::@6->mul8s_compare::@7] - b7_from_b6: - // [47] phi (byte) mul8s_compare::ok#3 = (byte) 0 [phi:mul8s_compare::@6->mul8s_compare::@7#0] -- vbuz1=vbuc1 - lda #0 - sta ok - jmp b7 - // [46] phi from mul8s_compare::@6 to mul8s_compare::@15 [phi:mul8s_compare::@6->mul8s_compare::@15] - b15_from_b6: - jmp b15 - // mul8s_compare::@15 - b15: - // [47] phi from mul8s_compare::@15 to mul8s_compare::@7 [phi:mul8s_compare::@15->mul8s_compare::@7] - b7_from_b15: - // [47] phi (byte) mul8s_compare::ok#3 = (byte) mul8s_compare::ok#4 [phi:mul8s_compare::@15->mul8s_compare::@7#0] -- register_copy - jmp b7 - // mul8s_compare::@7 - b7: - // [48] if((byte) mul8s_compare::ok#3!=(byte) 0) goto mul8s_compare::@8 -- vbuz1_neq_0_then_la1 - lda ok - cmp #0 - bne b8 - jmp b10 - // mul8s_compare::@10 - b10: - // [49] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta BGCOL - // [50] (signed byte) mul8s_error::a#0 ← (signed byte) mul8s_compare::a#10 -- vbsz1=vbsz2 - lda a - sta mul8s_error.a - // [51] (signed byte) mul8s_error::b#0 ← (signed byte) mul8s_compare::b#10 -- vbsz1=vbsz2 - lda b - sta mul8s_error.b - // [52] (signed word) mul8s_error::ms#0 ← (signed word) mul8s_compare::ms#0 -- vwsz1=vwsz2 - lda ms - sta mul8s_error.ms - lda ms+1 - sta mul8s_error.ms+1 - // [53] (signed word) mul8s_error::mn#0 ← (signed word) mul8s_compare::mn#0 -- vwsz1=vwsz2 - lda mn - sta mul8s_error.mn - lda mn+1 - sta mul8s_error.mn+1 - // [54] (signed word) mul8s_error::mf#0 ← (signed word) mul8s_compare::mf#0 -- vwsz1=vwsz2 - lda mf - sta mul8s_error.mf - lda mf+1 - sta mul8s_error.mf+1 - // [55] call mul8s_error - jsr mul8s_error - jmp breturn - // mul8s_compare::@8 - b8: - // [56] (signed byte) mul8s_compare::b#1 ← ++ (signed byte) mul8s_compare::b#10 -- vbsz1=_inc_vbsz1 - inc b - // [25] phi from mul8s_compare::@8 to mul8s_compare::@3 [phi:mul8s_compare::@8->mul8s_compare::@3] - b3_from_b8: - // [25] phi (signed byte) mul8s_compare::b#10 = (signed byte) mul8s_compare::b#1 [phi:mul8s_compare::@8->mul8s_compare::@3#0] -- register_copy - jmp b3 str: .text "signed multiply results match!@" -} - // mul8s_error -// mul8s_error(signed byte zeropage($4d) a, signed byte zeropage($4e) b, signed word zeropage($4f) ms, signed word zeropage($51) mn, signed word zeropage($53) mf) -mul8s_error: { - .label a = $4d - .label b = $4e - .label ms = $4f - .label mn = $51 - .label mf = $53 - // [57] (byte*~) print_char_cursor#194 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 - lda print_line_cursor - sta print_char_cursor - lda print_line_cursor+1 - sta print_char_cursor+1 - // [58] call print_str - // [114] phi from mul8s_error to print_str [phi:mul8s_error->print_str] - print_str_from_mul8s_error: - // [114] phi (byte*) print_char_cursor#155 = (byte*~) print_char_cursor#194 [phi:mul8s_error->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mul8s_error::str [phi:mul8s_error->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - jmp b1 - // mul8s_error::@1 - b1: - // [59] (signed byte) print_sbyte::b#1 ← (signed byte) mul8s_error::a#0 -- vbsz1=vbsz2 - lda a - sta print_sbyte.b - // [60] call print_sbyte - // [121] phi from mul8s_error::@1 to print_sbyte [phi:mul8s_error::@1->print_sbyte] - print_sbyte_from_b1: - // [121] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#1 [phi:mul8s_error::@1->print_sbyte#0] -- register_copy - jsr print_sbyte - // [61] phi from mul8s_error::@1 to mul8s_error::@2 [phi:mul8s_error::@1->mul8s_error::@2] - b2_from_b1: - jmp b2 - // mul8s_error::@2 - b2: - // [62] call print_str - // [114] phi from mul8s_error::@2 to print_str [phi:mul8s_error::@2->print_str] - print_str_from_b2: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8s_error::@2->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8s_error::@2->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - jmp b3 - // mul8s_error::@3 - b3: - // [63] (signed byte) print_sbyte::b#2 ← (signed byte) mul8s_error::b#0 -- vbsz1=vbsz2 - lda b - sta print_sbyte.b - // [64] call print_sbyte - // [121] phi from mul8s_error::@3 to print_sbyte [phi:mul8s_error::@3->print_sbyte] - print_sbyte_from_b3: - // [121] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#2 [phi:mul8s_error::@3->print_sbyte#0] -- register_copy - jsr print_sbyte - // [65] phi from mul8s_error::@3 to mul8s_error::@4 [phi:mul8s_error::@3->mul8s_error::@4] - b4_from_b3: - jmp b4 - // mul8s_error::@4 - b4: - // [66] call print_str - // [114] phi from mul8s_error::@4 to print_str [phi:mul8s_error::@4->print_str] - print_str_from_b4: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8s_error::@4->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8s_error::@4->print_str#1] -- pbuz1=pbuc1 - lda #str2 - sta print_str.str+1 - jsr print_str - jmp b5 - // mul8s_error::@5 - b5: - // [67] (signed word) print_sword::w#1 ← (signed word) mul8s_error::ms#0 -- vwsz1=vwsz2 - lda ms - sta print_sword.w - lda ms+1 - sta print_sword.w+1 - // [68] call print_sword - // [85] phi from mul8s_error::@5 to print_sword [phi:mul8s_error::@5->print_sword] - print_sword_from_b5: - // [85] phi (signed word) print_sword::w#4 = (signed word) print_sword::w#1 [phi:mul8s_error::@5->print_sword#0] -- register_copy - jsr print_sword - // [69] phi from mul8s_error::@5 to mul8s_error::@6 [phi:mul8s_error::@5->mul8s_error::@6] - b6_from_b5: - jmp b6 - // mul8s_error::@6 - b6: - // [70] call print_str - // [114] phi from mul8s_error::@6 to print_str [phi:mul8s_error::@6->print_str] - print_str_from_b6: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8s_error::@6->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8s_error::@6->print_str#1] -- pbuz1=pbuc1 - lda #str3 - sta print_str.str+1 - jsr print_str - jmp b7 - // mul8s_error::@7 - b7: - // [71] (signed word) print_sword::w#2 ← (signed word) mul8s_error::mn#0 -- vwsz1=vwsz2 - lda mn - sta print_sword.w - lda mn+1 - sta print_sword.w+1 - // [72] call print_sword - // [85] phi from mul8s_error::@7 to print_sword [phi:mul8s_error::@7->print_sword] - print_sword_from_b7: - // [85] phi (signed word) print_sword::w#4 = (signed word) print_sword::w#2 [phi:mul8s_error::@7->print_sword#0] -- register_copy - jsr print_sword - // [73] phi from mul8s_error::@7 to mul8s_error::@8 [phi:mul8s_error::@7->mul8s_error::@8] - b8_from_b7: - jmp b8 - // mul8s_error::@8 - b8: - // [74] call print_str - // [114] phi from mul8s_error::@8 to print_str [phi:mul8s_error::@8->print_str] - print_str_from_b8: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8s_error::@8->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8s_error::@8->print_str#1] -- pbuz1=pbuc1 - lda #str4 - sta print_str.str+1 - jsr print_str - jmp b9 - // mul8s_error::@9 - b9: - // [75] (signed word) print_sword::w#3 ← (signed word) mul8s_error::mf#0 -- vwsz1=vwsz2 - lda mf - sta print_sword.w - lda mf+1 - sta print_sword.w+1 - // [76] call print_sword - // [85] phi from mul8s_error::@9 to print_sword [phi:mul8s_error::@9->print_sword] - print_sword_from_b9: - // [85] phi (signed word) print_sword::w#4 = (signed word) print_sword::w#3 [phi:mul8s_error::@9->print_sword#0] -- register_copy - jsr print_sword - // [77] phi from mul8s_error::@9 to mul8s_error::@10 [phi:mul8s_error::@9->mul8s_error::@10] - b10_from_b9: - jmp b10 - // mul8s_error::@10 - b10: - // [78] call print_ln - // [80] phi from mul8s_error::@10 to print_ln [phi:mul8s_error::@10->print_ln] - print_ln_from_b10: - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#19 [phi:mul8s_error::@10->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#1 [phi:mul8s_error::@10->print_ln#1] -- register_copy - jsr print_ln - jmp breturn - // mul8s_error::@return - breturn: - // [79] return - rts - str: .text "signed multiply mismatch @" } // print_ln // Print a newline print_ln: { - // [81] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + // [24] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] b1_from_print_ln: b1_from_b1: - // [81] phi (byte*) print_line_cursor#23 = (byte*) print_line_cursor#45 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + // [24] phi (byte*) print_line_cursor#23 = (byte*) print_line_cursor#45 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy jmp b1 // print_ln::@1 b1: - // [82] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [25] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc print_line_cursor @@ -6000,7 +5243,7 @@ print_ln: { bcc !+ inc print_line_cursor+1 !: - // [83] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 + // [26] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 lda print_line_cursor+1 cmp print_char_cursor+1 bcc b1_from_b1 @@ -6012,192 +5255,23 @@ print_ln: { jmp breturn // print_ln::@return breturn: - // [84] return - rts -} - // print_sword -// Print a signed word as HEX -// print_sword(signed word zeropage(7) w) -print_sword: { - .label w = 7 - // [86] if((signed word) print_sword::w#4<(signed byte) 0) goto print_sword::@1 -- vwsz1_lt_0_then_la1 - lda w+1 - bmi b1_from_print_sword - // [87] phi from print_sword to print_sword::@3 [phi:print_sword->print_sword::@3] - b3_from_print_sword: - jmp b3 - // print_sword::@3 - b3: - // [88] call print_char - // [96] phi from print_sword::@3 to print_char [phi:print_sword::@3->print_char] - print_char_from_b3: - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#134 [phi:print_sword::@3->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) ' ' [phi:print_sword::@3->print_char#1] -- vbuz1=vbuc1 - lda #' ' - sta print_char.ch - jsr print_char - // [89] phi from print_sword::@3 print_sword::@4 to print_sword::@2 [phi:print_sword::@3/print_sword::@4->print_sword::@2] - b2_from_b3: - b2_from_b4: - // [89] phi (signed word) print_sword::w#6 = (signed word) print_sword::w#4 [phi:print_sword::@3/print_sword::@4->print_sword::@2#0] -- register_copy - jmp b2 - // print_sword::@2 - b2: - // [90] (word) print_word::w#0 ← (word)(signed word) print_sword::w#6 -- vwuz1=vwuz2 - lda w - sta print_word.w - lda w+1 - sta print_word.w+1 - // [91] call print_word - // [100] phi from print_sword::@2 to print_word [phi:print_sword::@2->print_word] - print_word_from_b2: - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#19 [phi:print_sword::@2->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#0 [phi:print_sword::@2->print_word#1] -- register_copy - jsr print_word - jmp breturn - // print_sword::@return - breturn: - // [92] return - rts - // [93] phi from print_sword to print_sword::@1 [phi:print_sword->print_sword::@1] - b1_from_print_sword: - jmp b1 - // print_sword::@1 - b1: - // [94] call print_char - // [96] phi from print_sword::@1 to print_char [phi:print_sword::@1->print_char] - print_char_from_b1: - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#134 [phi:print_sword::@1->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) '-' [phi:print_sword::@1->print_char#1] -- vbuz1=vbuc1 - lda #'-' - sta print_char.ch - jsr print_char - jmp b4 - // print_sword::@4 - b4: - // [95] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#4 -- vwsz1=_neg_vwsz1 - sec - lda #0 - sbc w - sta w - lda #0 - sbc w+1 - sta w+1 - jmp b2_from_b4 -} - // print_char -// Print a single char -// print_char(byte zeropage(9) ch) -print_char: { - .label ch = 9 - // [97] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 -- _deref_pbuz1=vbuz2 - lda ch - ldy #0 - sta (print_char_cursor),y - // [98] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#86 -- pbuz1=_inc_pbuz1 - inc print_char_cursor - bne !+ - inc print_char_cursor+1 - !: - jmp breturn - // print_char::@return - breturn: - // [99] return - rts -} - // print_word -// Print a word as HEX -// print_word(word zeropage($a) w) -print_word: { - .label w = $a - // [101] (byte) print_byte::b#1 ← > (word) print_word::w#6 -- vbuz1=_hi_vwuz2 - lda w+1 - sta print_byte.b - // [102] call print_byte - // [106] phi from print_word to print_byte [phi:print_word->print_byte] - print_byte_from_print_word: - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#142 [phi:print_word->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy - jsr print_byte - jmp b1 - // print_word::@1 - b1: - // [103] (byte) print_byte::b#2 ← < (word) print_word::w#6 -- vbuz1=_lo_vwuz2 - lda w - sta print_byte.b - // [104] call print_byte - // [106] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] - print_byte_from_b1: - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#19 [phi:print_word::@1->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy - jsr print_byte - jmp breturn - // print_word::@return - breturn: - // [105] return - rts -} - // print_byte -// Print a byte as HEX -// print_byte(byte zeropage($c) b) -print_byte: { - .label _0 = $55 - .label _2 = $56 - .label b = $c - // [107] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuz1=vbuz2_ror_4 - lda b - lsr - lsr - lsr - lsr - sta _0 - // [108] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy _0 - lda print_hextab,y - sta print_char.ch - // [109] call print_char - // [96] phi from print_byte to print_char [phi:print_byte->print_char] - print_char_from_print_byte: - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#143 [phi:print_byte->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) print_char::ch#4 [phi:print_byte->print_char#1] -- register_copy - jsr print_char - jmp b1 - // print_byte::@1 - b1: - // [110] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 - lda #$f - and b - sta _2 - // [111] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy _2 - lda print_hextab,y - sta print_char.ch - // [112] call print_char - // [96] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] - print_char_from_b1: - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#19 [phi:print_byte::@1->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) print_char::ch#5 [phi:print_byte::@1->print_char#1] -- register_copy - jsr print_char - jmp breturn - // print_byte::@return - breturn: - // [113] return + // [27] return rts } // print_str // Print a zero-terminated string -// print_str(byte* zeropage($f) str) +// print_str(byte* zeropage(4) str) print_str: { - .label str = $f - // [115] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + .label str = 4 + // [29] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] b1_from_print_str: b1_from_b2: - // [115] phi (byte*) print_char_cursor#134 = (byte*) print_char_cursor#155 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy - // [115] phi (byte*) print_str::str#16 = (byte*) print_str::str#18 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + // [29] phi (byte*) print_char_cursor#134 = (byte*) print_char_cursor#155 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + // [29] phi (byte*) print_str::str#16 = (byte*) print_str::str#18 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy jmp b1 // print_str::@1 b1: - // [116] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 ldy #0 lda (str),y cmp #'@' @@ -6205,237 +5279,570 @@ print_str: { jmp breturn // print_str::@return breturn: - // [117] return + // [31] return rts // print_str::@2 b2: - // [118] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) -- _deref_pbuz1=_deref_pbuz2 + // [32] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (str),y ldy #0 sta (print_char_cursor),y - // [119] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#134 -- pbuz1=_inc_pbuz1 + // [33] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#134 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 !: - // [120] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#16 -- pbuz1=_inc_pbuz1 + // [34] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#16 -- pbuz1=_inc_pbuz1 inc str bne !+ inc str+1 !: jmp b1_from_b2 } - // print_sbyte -// Print a signed byte as HEX -// print_sbyte(signed byte zeropage($11) b) -print_sbyte: { - .label b = $11 - // [122] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 -- vbsz1_lt_0_then_la1 - lda b - bmi b1_from_print_sbyte - // [123] phi from print_sbyte to print_sbyte::@3 [phi:print_sbyte->print_sbyte::@3] - b3_from_print_sbyte: - jmp b3 - // print_sbyte::@3 - b3: - // [124] call print_char - // [96] phi from print_sbyte::@3 to print_char [phi:print_sbyte::@3->print_char] - print_char_from_b3: - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#134 [phi:print_sbyte::@3->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) ' ' [phi:print_sbyte::@3->print_char#1] -- vbuz1=vbuc1 - lda #' ' - sta print_char.ch - jsr print_char - // [125] phi from print_sbyte::@3 print_sbyte::@4 to print_sbyte::@2 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2] - b2_from_b3: - b2_from_b4: - // [125] phi (signed byte) print_sbyte::b#5 = (signed byte) print_sbyte::b#3 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2#0] -- register_copy - jmp b2 - // print_sbyte::@2 - b2: - // [126] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 -- vbuz1=vbuz2 - lda b - sta print_byte.b - // [127] call print_byte - // [106] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] - print_byte_from_b2: - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#19 [phi:print_sbyte::@2->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#0 [phi:print_sbyte::@2->print_byte#1] -- register_copy - jsr print_byte - jmp breturn - // print_sbyte::@return - breturn: - // [128] return - rts - // [129] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] - b1_from_print_sbyte: + // mul8u_compare +// Perform all possible byte multiplications (slow and fast) and compare the results +mul8u_compare: { + .label ms = $30 + .label mf = $36 + .label mn = $3a + .label b = 7 + .label a = 6 + .label ok = 8 + // [36] phi from mul8u_compare to mul8u_compare::@1 [phi:mul8u_compare->mul8u_compare::@1] + b1_from_mul8u_compare: + // [36] phi (byte) mul8u_compare::a#7 = (byte) 0 [phi:mul8u_compare->mul8u_compare::@1#0] -- vbuz1=vbuc1 + lda #0 + sta a jmp b1 - // print_sbyte::@1 + // [36] phi from mul8u_compare::@8 to mul8u_compare::@1 [phi:mul8u_compare::@8->mul8u_compare::@1] + b1_from_b8: + // [36] phi (byte) mul8u_compare::a#7 = (byte) mul8u_compare::a#1 [phi:mul8u_compare::@8->mul8u_compare::@1#0] -- register_copy + jmp b1 + // mul8u_compare::@1 b1: - // [130] call print_char - // [96] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] - print_char_from_b1: - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#134 [phi:print_sbyte::@1->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuz1=vbuc1 - lda #'-' - sta print_char.ch - jsr print_char - jmp b4 - // print_sbyte::@4 - b4: - // [131] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 -- vbsz1=_neg_vbsz1 - lda b - eor #$ff - clc - adc #1 + // [37] phi from mul8u_compare::@1 to mul8u_compare::@2 [phi:mul8u_compare::@1->mul8u_compare::@2] + b2_from_b1: + // [37] phi (byte) mul8u_compare::b#10 = (byte) 0 [phi:mul8u_compare::@1->mul8u_compare::@2#0] -- vbuz1=vbuc1 + lda #0 sta b - jmp b2_from_b4 -} - // mul8s -// Multiply of two signed bytes to a signed word -// Fixes offsets introduced by using unsigned multiplication -// mul8s(signed byte zeropage($49) a, signed byte zeropage($4a) b) -mul8s: { - .label _9 = $59 - .label _13 = $5b - .label _16 = $5a - .label _17 = $5c - .label m = $12 - .label a = $49 - .label b = $4a - // [132] (byte) mul8u::a#1 ← (byte)(signed byte) mul8s::a#0 -- vbuz1=vbuz2 + jmp b2 + // [37] phi from mul8u_compare::@5 to mul8u_compare::@2 [phi:mul8u_compare::@5->mul8u_compare::@2] + b2_from_b5: + // [37] phi (byte) mul8u_compare::b#10 = (byte) mul8u_compare::b#1 [phi:mul8u_compare::@5->mul8u_compare::@2#0] -- register_copy + jmp b2 + // mul8u_compare::@2 + b2: + // [38] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 + lda a + sta muls8u.a + // [39] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 + lda b + sta muls8u.b + // [40] call muls8u + jsr muls8u + // [41] (word) muls8u::return#2 ← (word) muls8u::return#0 -- vwuz1=vwuz2 + lda muls8u.return + sta muls8u.return_2 + lda muls8u.return+1 + sta muls8u.return_2+1 + jmp b10 + // mul8u_compare::@10 + b10: + // [42] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 -- vwuz1=vwuz2 + lda muls8u.return_2 + sta ms + lda muls8u.return_2+1 + sta ms+1 + // [43] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 + lda a + sta mulf8u.a + // [44] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 + lda b + sta mulf8u.b + // [45] call mulf8u + jsr mulf8u + // [46] (word) mulf8u::return#2 ← (word) mulf8u::return#0 -- vwuz1=vwuz2 + lda mulf8u.return + sta mulf8u.return_2 + lda mulf8u.return+1 + sta mulf8u.return_2+1 + jmp b11 + // mul8u_compare::@11 + b11: + // [47] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 -- vwuz1=vwuz2 + lda mulf8u.return_2 + sta mf + lda mulf8u.return_2+1 + sta mf+1 + // [48] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 lda a sta mul8u.a - // [133] (byte) mul8u::b#0 ← (byte)(signed byte) mul8s::b#0 -- vbuz1=vbuz2 + // [49] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 lda b sta mul8u.b - // [134] call mul8u - // [148] phi from mul8s to mul8u [phi:mul8s->mul8u] - mul8u_from_mul8s: - // [148] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:mul8s->mul8u#0] -- register_copy - // [148] phi (word) mul8u::mb#0 = (byte) mul8u::b#0 [phi:mul8s->mul8u#1] -- vwuz1=vbuz2 - lda mul8u.b - sta mul8u.mb - lda #0 - sta mul8u.mb+1 + // [50] call mul8u + // [117] phi from mul8u_compare::@11 to mul8u [phi:mul8u_compare::@11->mul8u] + mul8u_from_b11: jsr mul8u - // [135] (word) mul8u::return#2 ← (word) mul8u::res#2 -- vwuz1=vwuz2 + // [51] (word) mul8u::return#3 ← (word) mul8u::res#2 -- vwuz1=vwuz2 lda mul8u.res sta mul8u.return lda mul8u.res+1 sta mul8u.return+1 - jmp b5 - // mul8s::@5 - b5: - // [136] (word) mul8s::m#0 ← (word) mul8u::return#2 -- vwuz1=vwuz2 + jmp b12 + // mul8u_compare::@12 + b12: + // [52] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 -- vwuz1=vwuz2 lda mul8u.return - sta m + sta mn lda mul8u.return+1 - sta m+1 - // [137] if((signed byte) mul8s::a#0>=(signed byte) 0) goto mul8s::@1 -- vbsz1_ge_0_then_la1 - lda a - cmp #0 - bpl b1_from_b5 + sta mn+1 + // [53] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 -- vwuz1_eq_vwuz2_then_la1 + lda ms + cmp mf + bne !+ + lda ms+1 + cmp mf+1 + beq b3_from_b12 + !: + // [54] phi from mul8u_compare::@12 to mul8u_compare::@6 [phi:mul8u_compare::@12->mul8u_compare::@6] + b6_from_b12: + jmp b6 + // mul8u_compare::@6 + b6: + // [55] phi from mul8u_compare::@6 to mul8u_compare::@3 [phi:mul8u_compare::@6->mul8u_compare::@3] + b3_from_b6: + // [55] phi (byte) mul8u_compare::ok#4 = (byte) 0 [phi:mul8u_compare::@6->mul8u_compare::@3#0] -- vbuz1=vbuc1 + lda #0 + sta ok jmp b3 - // mul8s::@3 + // [55] phi from mul8u_compare::@12 to mul8u_compare::@3 [phi:mul8u_compare::@12->mul8u_compare::@3] + b3_from_b12: + // [55] phi (byte) mul8u_compare::ok#4 = (byte) 1 [phi:mul8u_compare::@12->mul8u_compare::@3#0] -- vbuz1=vbuc1 + lda #1 + sta ok + jmp b3 + // mul8u_compare::@3 b3: - // [138] (byte~) mul8s::$9 ← > (word) mul8s::m#0 -- vbuz1=_hi_vwuz2 - lda m+1 - sta _9 - // [139] (byte~) mul8s::$16 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::b#0 -- vbuz1=vbuz2_minus_vbuz3 - lda _9 - sec - sbc b - sta _16 - // [140] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$16 -- vwuz1=vwuz1_sethi_vbuz2 - lda _16 - sta m+1 - // [141] phi from mul8s::@3 mul8s::@5 to mul8s::@1 [phi:mul8s::@3/mul8s::@5->mul8s::@1] - b1_from_b3: - b1_from_b5: - // [141] phi (word) mul8s::m#5 = (word) mul8s::m#1 [phi:mul8s::@3/mul8s::@5->mul8s::@1#0] -- register_copy - jmp b1 - // mul8s::@1 - b1: - // [142] if((signed byte) mul8s::b#0>=(signed byte) 0) goto mul8s::@2 -- vbsz1_ge_0_then_la1 + // [56] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 -- vwuz1_eq_vwuz2_then_la1 + lda ms + cmp mn + bne !+ + lda ms+1 + cmp mn+1 + beq b14_from_b3 + !: + // [58] phi from mul8u_compare::@3 to mul8u_compare::@4 [phi:mul8u_compare::@3->mul8u_compare::@4] + b4_from_b3: + // [58] phi (byte) mul8u_compare::ok#3 = (byte) 0 [phi:mul8u_compare::@3->mul8u_compare::@4#0] -- vbuz1=vbuc1 + lda #0 + sta ok + jmp b4 + // [57] phi from mul8u_compare::@3 to mul8u_compare::@14 [phi:mul8u_compare::@3->mul8u_compare::@14] + b14_from_b3: + jmp b14 + // mul8u_compare::@14 + b14: + // [58] phi from mul8u_compare::@14 to mul8u_compare::@4 [phi:mul8u_compare::@14->mul8u_compare::@4] + b4_from_b14: + // [58] phi (byte) mul8u_compare::ok#3 = (byte) mul8u_compare::ok#4 [phi:mul8u_compare::@14->mul8u_compare::@4#0] -- register_copy + jmp b4 + // mul8u_compare::@4 + b4: + // [59] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 -- vbuz1_neq_0_then_la1 + lda ok + cmp #0 + bne b5 + jmp b7 + // mul8u_compare::@7 + b7: + // [60] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 + lda #2 + sta BGCOL + // [61] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 + lda a + sta mul8u_error.a + // [62] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 + lda b + sta mul8u_error.b + // [63] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 -- vwuz1=vwuz2 + lda ms + sta mul8u_error.ms + lda ms+1 + sta mul8u_error.ms+1 + // [64] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 -- vwuz1=vwuz2 + lda mn + sta mul8u_error.mn + lda mn+1 + sta mul8u_error.mn+1 + // [65] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 -- vwuz1=vwuz2 + lda mf + sta mul8u_error.mf + lda mf+1 + sta mul8u_error.mf+1 + // [66] call mul8u_error + // [76] phi from mul8u_compare::@7 to mul8u_error [phi:mul8u_compare::@7->mul8u_error] + mul8u_error_from_b7: + jsr mul8u_error + jmp breturn + // mul8u_compare::@return + breturn: + // [67] return + rts + // mul8u_compare::@5 + b5: + // [68] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 -- vbuz1=_inc_vbuz1 + inc b + // [69] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 -- vbuz1_neq_0_then_la1 lda b cmp #0 - bpl b2_from_b1 - jmp b4 - // mul8s::@4 - b4: - // [143] (byte~) mul8s::$13 ← > (word) mul8s::m#5 -- vbuz1=_hi_vwuz2 - lda m+1 - sta _13 - // [144] (byte~) mul8s::$17 ← (byte~) mul8s::$13 - (byte)(signed byte) mul8s::a#0 -- vbuz1=vbuz2_minus_vbuz3 - lda _13 - sec - sbc a - sta _17 - // [145] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17 -- vwuz1=vwuz1_sethi_vbuz2 - lda _17 - sta m+1 - // [146] phi from mul8s::@1 mul8s::@4 to mul8s::@2 [phi:mul8s::@1/mul8s::@4->mul8s::@2] - b2_from_b1: - b2_from_b4: - // [146] phi (word) mul8s::m#4 = (word) mul8s::m#5 [phi:mul8s::@1/mul8s::@4->mul8s::@2#0] -- register_copy - jmp b2 - // mul8s::@2 - b2: + bne b2_from_b5 + jmp b8 + // mul8u_compare::@8 + b8: + // [70] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 -- vbuz1=_inc_vbuz1 + inc a + // [71] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 -- vbuz1_neq_0_then_la1 + lda a + cmp #0 + bne b1_from_b8 + // [72] phi from mul8u_compare::@8 to mul8u_compare::@9 [phi:mul8u_compare::@8->mul8u_compare::@9] + b9_from_b8: + jmp b9 + // mul8u_compare::@9 + b9: + // [73] call print_str + // [28] phi from mul8u_compare::@9 to print_str [phi:mul8u_compare::@9->print_str] + print_str_from_b9: + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_compare::@9->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) mul8u_compare::str [phi:mul8u_compare::@9->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + // [74] phi from mul8u_compare::@9 to mul8u_compare::@13 [phi:mul8u_compare::@9->mul8u_compare::@13] + b13_from_b9: + jmp b13 + // mul8u_compare::@13 + b13: + // [75] call print_ln + // [23] phi from mul8u_compare::@13 to print_ln [phi:mul8u_compare::@13->print_ln] + print_ln_from_b13: + // [23] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8u_compare::@13->print_ln#0] -- register_copy + // [23] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_compare::@13->print_ln#1] -- register_copy + jsr print_ln jmp breturn - // mul8s::@return + str: .text "multiply results match!@" +} + // mul8u_error +// mul8u_error(byte zeropage($3c) a, byte zeropage($3d) b, word zeropage($3e) ms, word zeropage($40) mn, word zeropage($42) mf) +mul8u_error: { + .label a = $3c + .label b = $3d + .label ms = $3e + .label mn = $40 + .label mf = $42 + // [77] call print_str + // [28] phi from mul8u_error to print_str [phi:mul8u_error->print_str] + print_str_from_mul8u_error: + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_error->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) mul8u_error::str [phi:mul8u_error->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + jmp b1 + // mul8u_error::@1 + b1: + // [78] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 -- vbuz1=vbuz2 + lda a + sta print_byte.b + // [79] call print_byte + // [105] phi from mul8u_error::@1 to print_byte [phi:mul8u_error::@1->print_byte] + print_byte_from_b1: + // [105] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@1->print_byte#0] -- register_copy + // [105] phi (byte) print_byte::b#5 = (byte) print_byte::b#3 [phi:mul8u_error::@1->print_byte#1] -- register_copy + jsr print_byte + // [80] phi from mul8u_error::@1 to mul8u_error::@2 [phi:mul8u_error::@1->mul8u_error::@2] + b2_from_b1: + jmp b2 + // mul8u_error::@2 + b2: + // [81] call print_str + // [28] phi from mul8u_error::@2 to print_str [phi:mul8u_error::@2->print_str] + print_str_from_b2: + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@2->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + jmp b3 + // mul8u_error::@3 + b3: + // [82] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 -- vbuz1=vbuz2 + lda b + sta print_byte.b + // [83] call print_byte + // [105] phi from mul8u_error::@3 to print_byte [phi:mul8u_error::@3->print_byte] + print_byte_from_b3: + // [105] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@3->print_byte#0] -- register_copy + // [105] phi (byte) print_byte::b#5 = (byte) print_byte::b#4 [phi:mul8u_error::@3->print_byte#1] -- register_copy + jsr print_byte + // [84] phi from mul8u_error::@3 to mul8u_error::@4 [phi:mul8u_error::@3->mul8u_error::@4] + b4_from_b3: + jmp b4 + // mul8u_error::@4 + b4: + // [85] call print_str + // [28] phi from mul8u_error::@4 to print_str [phi:mul8u_error::@4->print_str] + print_str_from_b4: + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@4->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1 + lda #str2 + sta print_str.str+1 + jsr print_str + jmp b5 + // mul8u_error::@5 + b5: + // [86] (word) print_word::w#3 ← (word) mul8u_error::ms#0 -- vwuz1=vwuz2 + lda ms + sta print_word.w + lda ms+1 + sta print_word.w+1 + // [87] call print_word + // [99] phi from mul8u_error::@5 to print_word [phi:mul8u_error::@5->print_word] + print_word_from_b5: + // [99] phi (word) print_word::w#6 = (word) print_word::w#3 [phi:mul8u_error::@5->print_word#0] -- register_copy + jsr print_word + // [88] phi from mul8u_error::@5 to mul8u_error::@6 [phi:mul8u_error::@5->mul8u_error::@6] + b6_from_b5: + jmp b6 + // mul8u_error::@6 + b6: + // [89] call print_str + // [28] phi from mul8u_error::@6 to print_str [phi:mul8u_error::@6->print_str] + print_str_from_b6: + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@6->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1 + lda #str3 + sta print_str.str+1 + jsr print_str + jmp b7 + // mul8u_error::@7 + b7: + // [90] (word) print_word::w#4 ← (word) mul8u_error::mn#0 -- vwuz1=vwuz2 + lda mn + sta print_word.w + lda mn+1 + sta print_word.w+1 + // [91] call print_word + // [99] phi from mul8u_error::@7 to print_word [phi:mul8u_error::@7->print_word] + print_word_from_b7: + // [99] phi (word) print_word::w#6 = (word) print_word::w#4 [phi:mul8u_error::@7->print_word#0] -- register_copy + jsr print_word + // [92] phi from mul8u_error::@7 to mul8u_error::@8 [phi:mul8u_error::@7->mul8u_error::@8] + b8_from_b7: + jmp b8 + // mul8u_error::@8 + b8: + // [93] call print_str + // [28] phi from mul8u_error::@8 to print_str [phi:mul8u_error::@8->print_str] + print_str_from_b8: + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@8->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1 + lda #str4 + sta print_str.str+1 + jsr print_str + jmp b9 + // mul8u_error::@9 + b9: + // [94] (word) print_word::w#5 ← (word) mul8u_error::mf#0 -- vwuz1=vwuz2 + lda mf + sta print_word.w + lda mf+1 + sta print_word.w+1 + // [95] call print_word + // [99] phi from mul8u_error::@9 to print_word [phi:mul8u_error::@9->print_word] + print_word_from_b9: + // [99] phi (word) print_word::w#6 = (word) print_word::w#5 [phi:mul8u_error::@9->print_word#0] -- register_copy + jsr print_word + // [96] phi from mul8u_error::@9 to mul8u_error::@10 [phi:mul8u_error::@9->mul8u_error::@10] + b10_from_b9: + jmp b10 + // mul8u_error::@10 + b10: + // [97] call print_ln + // [23] phi from mul8u_error::@10 to print_ln [phi:mul8u_error::@10->print_ln] + print_ln_from_b10: + // [23] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#19 [phi:mul8u_error::@10->print_ln#0] -- register_copy + // [23] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_error::@10->print_ln#1] -- register_copy + jsr print_ln + jmp breturn + // mul8u_error::@return breturn: - // [147] return + // [98] return + rts + str: .text "multiply mismatch @" +} + // print_word +// Print a word as HEX +// print_word(word zeropage(9) w) +print_word: { + .label w = 9 + // [100] (byte) print_byte::b#1 ← > (word) print_word::w#6 -- vbuz1=_hi_vwuz2 + lda w+1 + sta print_byte.b + // [101] call print_byte + // [105] phi from print_word to print_byte [phi:print_word->print_byte] + print_byte_from_print_word: + // [105] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:print_word->print_byte#0] -- register_copy + // [105] phi (byte) print_byte::b#5 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy + jsr print_byte + jmp b1 + // print_word::@1 + b1: + // [102] (byte) print_byte::b#2 ← < (word) print_word::w#6 -- vbuz1=_lo_vwuz2 + lda w + sta print_byte.b + // [103] call print_byte + // [105] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] + print_byte_from_b1: + // [105] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#19 [phi:print_word::@1->print_byte#0] -- register_copy + // [105] phi (byte) print_byte::b#5 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy + jsr print_byte + jmp breturn + // print_word::@return + breturn: + // [104] return + rts +} + // print_byte +// Print a byte as HEX +// print_byte(byte zeropage($b) b) +print_byte: { + .label _0 = $44 + .label _2 = $45 + .label b = $b + // [106] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + lda b + lsr + lsr + lsr + lsr + sta _0 + // [107] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy _0 + lda print_hextab,y + sta print_char.ch + // [108] call print_char + // [113] phi from print_byte to print_char [phi:print_byte->print_char] + print_char_from_print_byte: + // [113] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#143 [phi:print_byte->print_char#0] -- register_copy + // [113] phi (byte) print_char::ch#6 = (byte) print_char::ch#4 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + jmp b1 + // print_byte::@1 + b1: + // [109] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + lda #$f + and b + sta _2 + // [110] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy _2 + lda print_hextab,y + sta print_char.ch + // [111] call print_char + // [113] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + print_char_from_b1: + // [113] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#19 [phi:print_byte::@1->print_char#0] -- register_copy + // [113] phi (byte) print_char::ch#6 = (byte) print_char::ch#5 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + jmp breturn + // print_byte::@return + breturn: + // [112] return + rts +} + // print_char +// Print a single char +// print_char(byte zeropage($c) ch) +print_char: { + .label ch = $c + // [114] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 -- _deref_pbuz1=vbuz2 + lda ch + ldy #0 + sta (print_char_cursor),y + // [115] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#86 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + jmp breturn + // print_char::@return + breturn: + // [116] return rts } // mul8u // Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word -// mul8u(byte zeropage($16) a, byte zeropage($14) b) +// mul8u(byte zeropage($f) a, byte zeropage($14) b) mul8u: { - .label _1 = $5d - .label mb = $19 - .label a = $16 - .label res = $17 + .label _1 = $46 + .label a = $f + .label mb = $12 + .label res = $10 .label b = $14 - .label return = $57 - .label b_1 = $15 - .label return_3 = $75 - // [149] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + .label return = $38 + // [118] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] b1_from_mul8u: - // [149] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy - // [149] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [118] phi (word) mul8u::mb#2 = (byte) mul8u::b#1 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuz2 + lda b + sta mb + lda #0 + sta mb+1 + // [118] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 lda #<0 sta res lda #>0 sta res+1 - // [149] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy + // [118] phi (byte) mul8u::a#3 = (byte) mul8u::a#2 [phi:mul8u->mul8u::@1#2] -- register_copy jmp b1 // mul8u::@1 b1: - // [150] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuz1_neq_0_then_la1 + // [119] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuz1_neq_0_then_la1 lda a cmp #0 bne b2 jmp breturn // mul8u::@return breturn: - // [151] return + // [120] return rts // mul8u::@2 b2: - // [152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + // [121] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 lda #1 and a sta _1 - // [153] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuz1_eq_0_then_la1 + // [122] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuz1_eq_0_then_la1 lda _1 cmp #0 beq b3_from_b2 jmp b4 // mul8u::@4 b4: - // [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 + // [123] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 lda res clc adc mb @@ -6443,167 +5850,76 @@ mul8u: { lda res+1 adc mb+1 sta res+1 - // [155] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] + // [124] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] b3_from_b2: b3_from_b4: - // [155] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy + // [124] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy jmp b3 // mul8u::@3 b3: - // [156] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + // [125] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1 lsr a - // [157] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [126] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl mb rol mb+1 - // [149] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] + // [118] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] b1_from_b3: - // [149] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy - // [149] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy - // [149] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy + // [118] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy + // [118] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy + // [118] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy jmp b1 } - // mulf8s -// Fast multiply two signed bytes to a word result -// mulf8s(signed byte zeropage($43) a, signed byte zeropage($44) b) -mulf8s: { - .label return = $5f - .label a = $43 - .label b = $44 - .label return_2 = $45 - jmp mulf8s_prepare1 - // mulf8s::mulf8s_prepare1 - mulf8s_prepare1: - // [159] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 -- vbuz1=vbuz2 + // mulf8u +// Fast multiply two unsigned bytes to a word result +// mulf8u(byte zeropage($32) a, byte zeropage($33) b) +mulf8u: { + .label return = $4b + .label a = $32 + .label b = $33 + .label return_2 = $34 + // [127] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 -- vbuz1=vbuz2 lda a sta mulf8u_prepare.a - // [160] call mulf8u_prepare - // [185] phi from mulf8s::mulf8s_prepare1 to mulf8u_prepare [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare] - mulf8u_prepare_from_mulf8s_prepare1: - // [185] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#1 [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare#0] -- register_copy + // [128] call mulf8u_prepare jsr mulf8u_prepare jmp b1 - // mulf8s::@1 + // mulf8u::@1 b1: - // [161] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 -- vbsz1=vbsz2 - lda b - sta mulf8s_prepared.b - // [162] call mulf8s_prepared - jsr mulf8s_prepared - jmp b2 - // mulf8s::@2 - b2: - // [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 -- vwsz1=vwsz2 - lda mulf8s_prepared.m - sta return - lda mulf8s_prepared.m+1 - sta return+1 - jmp breturn - // mulf8s::@return - breturn: - // [164] return - rts -} - // mulf8s_prepared -// Calculate fast multiply with a prepared unsigned byte to a word result -// The prepared number is set by calling mulf8s_prepare(byte a) -// mulf8s_prepared(signed byte zeropage($5e) b) -mulf8s_prepared: { - .label memA = $fd - .label _8 = $63 - .label _12 = $65 - .label _15 = $64 - .label _16 = $66 - .label m = $1b - .label b = $5e - // [165] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuz1=vbuz2 + // [129] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 -- vbuz1=vbuz2 lda b sta mulf8u_prepared.b - // [166] call mulf8u_prepared - // [180] phi from mulf8s_prepared to mulf8u_prepared [phi:mulf8s_prepared->mulf8u_prepared] - mulf8u_prepared_from_mulf8s_prepared: - // [180] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#1 [phi:mulf8s_prepared->mulf8u_prepared#0] -- register_copy + // [130] call mulf8u_prepared jsr mulf8u_prepared - // [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 -- vwuz1=vwuz2 + // [131] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 -- vwuz1=vwuz2 lda mulf8u_prepared.return - sta mulf8u_prepared.return_3 + sta mulf8u_prepared.return_2 lda mulf8u_prepared.return+1 - sta mulf8u_prepared.return_3+1 - jmp b5 - // mulf8s_prepared::@5 - b5: - // [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 -- vwuz1=vwuz2 - lda mulf8u_prepared.return_3 - sta m - lda mulf8u_prepared.return_3+1 - sta m+1 - // [169] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 - lda memA - cmp #0 - bpl b1_from_b5 - jmp b3 - // mulf8s_prepared::@3 - b3: - // [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuz1=_hi_vwuz2 - lda m+1 - sta _8 - // [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuz1=vbuz2_minus_vbuz3 - lda _8 - sec - sbc b - sta _15 - // [172] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuz2 - lda _15 - sta m+1 - // [173] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] - b1_from_b3: - b1_from_b5: - // [173] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy - jmp b1 - // mulf8s_prepared::@1 - b1: - // [174] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 - lda b - cmp #0 - bpl b2_from_b1 - jmp b4 - // mulf8s_prepared::@4 - b4: - // [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuz1=_hi_vwuz2 - lda m+1 - sta _12 - // [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) -- vbuz1=vbuz2_minus__deref_pbuc1 - lda _12 - sec - sbc memA - sta _16 - // [177] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuz2 - lda _16 - sta m+1 - // [178] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] - b2_from_b1: - b2_from_b4: - // [178] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + sta mulf8u_prepared.return_2+1 jmp b2 - // mulf8s_prepared::@2 + // mulf8u::@2 b2: + // [132] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 -- vwuz1=vwuz2 + lda mulf8u_prepared.return_2 + sta return + lda mulf8u_prepared.return_2+1 + sta return+1 jmp breturn - // mulf8s_prepared::@return + // mulf8u::@return breturn: - // [179] return + // [133] return rts } // mulf8u_prepared // Calculate fast multiply with a prepared unsigned byte to a word result // The prepared number is set by calling mulf8u_prepare(byte a) -// mulf8u_prepared(byte zeropage($1d) b) +// mulf8u_prepared(byte zeropage($48) b) mulf8u_prepared: { .label resL = $fe .label memB = $ff - .label return = $67 - .label b = $1d - .label return_2 = $81 - .label return_3 = $61 - // [181] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#2 -- _deref_pbuc1=vbuz1 + .label return = $4d + .label b = $48 + .label return_2 = $49 + // [134] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#0 -- _deref_pbuc1=vbuz1 lda b sta memB // asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } @@ -6619,7 +5935,7 @@ mulf8u_prepared: { sm4: sbc mulf_sqr2_hi,x sta memB - // [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + // [136] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda resL sta return lda memB @@ -6627,16 +5943,16 @@ mulf8u_prepared: { jmp breturn // mulf8u_prepared::@return breturn: - // [184] return + // [137] return rts } // mulf8u_prepare // Prepare for fast multiply with an unsigned byte to a word result -// mulf8u_prepare(byte zeropage($1e) a) +// mulf8u_prepare(byte zeropage($47) a) mulf8u_prepare: { .label memA = $fd - .label a = $1e - // [186] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2 -- _deref_pbuc1=vbuz1 + .label a = $47 + // [138] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#0 -- _deref_pbuc1=vbuz1 lda a sta memA // asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } @@ -6649,624 +5965,48 @@ mulf8u_prepare: { jmp breturn // mulf8u_prepare::@return breturn: - // [188] return - rts -} - // muls8s -// Slow multiplication of signed bytes -// Perform a signed multiplication by repeated addition/subtraction -// muls8s(signed byte zeropage($3d) a, signed byte zeropage($3e) b) -muls8s: { - .label m = $20 - .label j = $1f - .label return = $20 - .label i = $22 - .label a = $3d - .label b = $3e - .label return_2 = $3f - // [189] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 -- vbsz1_lt_0_then_la1 - lda a - bmi b5_from_muls8s - jmp b2 - // muls8s::@2 - b2: - // [190] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 -- vbsz1_le_0_then_la1 - lda a - cmp #1 - bmi b1_from_b2 - // [191] phi from muls8s::@2 to muls8s::@3 [phi:muls8s::@2->muls8s::@3] - b3_from_b2: - // [191] phi (signed word) muls8s::m#3 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#0] -- vwsz1=vbsc1 - lda #<0 - sta m - lda #>0 - sta m+1 - // [191] phi (signed byte) muls8s::j#2 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#1] -- vbsz1=vbsc1 - lda #0 - sta j - jmp b3 - // muls8s::@3 - b3: - // [192] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 -- vbsz1_neq_vbsz2_then_la1 - lda j - cmp a - bne b4 - // [193] phi from muls8s::@3 muls8s::@5 to muls8s::@1 [phi:muls8s::@3/muls8s::@5->muls8s::@1] - b1_from_b3: - b1_from_b5: - // [193] phi (signed word) muls8s::return#0 = (signed word) muls8s::m#3 [phi:muls8s::@3/muls8s::@5->muls8s::@1#0] -- register_copy - jmp b1 - // [193] phi from muls8s::@2 to muls8s::@1 [phi:muls8s::@2->muls8s::@1] - b1_from_b2: - // [193] phi (signed word) muls8s::return#0 = (signed byte) 0 [phi:muls8s::@2->muls8s::@1#0] -- vwsz1=vbsc1 - lda #<0 - sta return - lda #>0 - sta return+1 - jmp b1 - // muls8s::@1 - b1: - jmp breturn - // muls8s::@return - breturn: - // [194] return - rts - // muls8s::@4 - b4: - // [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 -- vwsz1=vwsz1_plus_vbsz2 - lda b - sta $fe - ora #$7f - bmi !+ - lda #0 - !: - sta $ff - clc - lda m - adc $fe - sta m - lda m+1 - adc $ff - sta m+1 - // [196] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 -- vbsz1=_inc_vbsz1 - inc j - // [191] phi from muls8s::@4 to muls8s::@3 [phi:muls8s::@4->muls8s::@3] - b3_from_b4: - // [191] phi (signed word) muls8s::m#3 = (signed word) muls8s::m#1 [phi:muls8s::@4->muls8s::@3#0] -- register_copy - // [191] phi (signed byte) muls8s::j#2 = (signed byte) muls8s::j#1 [phi:muls8s::@4->muls8s::@3#1] -- register_copy - jmp b3 - // [197] phi from muls8s to muls8s::@5 [phi:muls8s->muls8s::@5] - b5_from_muls8s: - // [197] phi (signed word) muls8s::m#5 = (signed byte) 0 [phi:muls8s->muls8s::@5#0] -- vwsz1=vbsc1 - lda #<0 - sta m - lda #>0 - sta m+1 - // [197] phi (signed byte) muls8s::i#2 = (signed byte) 0 [phi:muls8s->muls8s::@5#1] -- vbsz1=vbsc1 - lda #0 - sta i - jmp b5 - // muls8s::@5 - b5: - // [198] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 -- vbsz1_neq_vbsz2_then_la1 - lda i - cmp a - bne b6 - jmp b1_from_b5 - // muls8s::@6 - b6: - // [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 -- vwsz1=vwsz1_minus_vbsz2 - lda b - sta $fe - ora #$7f - bmi !+ - lda #0 - !: - sta $ff - sec - lda m - sbc $fe - sta m - lda m+1 - sbc $ff - sta m+1 - // [200] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 -- vbsz1=_dec_vbsz1 - dec i - // [197] phi from muls8s::@6 to muls8s::@5 [phi:muls8s::@6->muls8s::@5] - b5_from_b6: - // [197] phi (signed word) muls8s::m#5 = (signed word) muls8s::m#2 [phi:muls8s::@6->muls8s::@5#0] -- register_copy - // [197] phi (signed byte) muls8s::i#2 = (signed byte) muls8s::i#1 [phi:muls8s::@6->muls8s::@5#1] -- register_copy - jmp b5 -} - // mul8u_compare -// Perform all possible byte multiplications (slow and fast) and compare the results -mul8u_compare: { - .label ms = $6d - .label mf = $73 - .label mn = $77 - .label b = $24 - .label a = $23 - .label ok = $25 - // [202] phi from mul8u_compare to mul8u_compare::@1 [phi:mul8u_compare->mul8u_compare::@1] - b1_from_mul8u_compare: - // [202] phi (byte) mul8u_compare::a#7 = (byte) 0 [phi:mul8u_compare->mul8u_compare::@1#0] -- vbuz1=vbuc1 - lda #0 - sta a - jmp b1 - // [202] phi from mul8u_compare::@8 to mul8u_compare::@1 [phi:mul8u_compare::@8->mul8u_compare::@1] - b1_from_b8: - // [202] phi (byte) mul8u_compare::a#7 = (byte) mul8u_compare::a#1 [phi:mul8u_compare::@8->mul8u_compare::@1#0] -- register_copy - jmp b1 - // mul8u_compare::@1 - b1: - // [203] phi from mul8u_compare::@1 to mul8u_compare::@2 [phi:mul8u_compare::@1->mul8u_compare::@2] - b2_from_b1: - // [203] phi (byte) mul8u_compare::b#10 = (byte) 0 [phi:mul8u_compare::@1->mul8u_compare::@2#0] -- vbuz1=vbuc1 - lda #0 - sta b - jmp b2 - // [203] phi from mul8u_compare::@5 to mul8u_compare::@2 [phi:mul8u_compare::@5->mul8u_compare::@2] - b2_from_b5: - // [203] phi (byte) mul8u_compare::b#10 = (byte) mul8u_compare::b#1 [phi:mul8u_compare::@5->mul8u_compare::@2#0] -- register_copy - jmp b2 - // mul8u_compare::@2 - b2: - // [204] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 - lda a - sta muls8u.a - // [205] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 - lda b - sta muls8u.b - // [206] call muls8u - jsr muls8u - // [207] (word) muls8u::return#2 ← (word) muls8u::return#0 -- vwuz1=vwuz2 - lda muls8u.return - sta muls8u.return_2 - lda muls8u.return+1 - sta muls8u.return_2+1 - jmp b10 - // mul8u_compare::@10 - b10: - // [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 -- vwuz1=vwuz2 - lda muls8u.return_2 - sta ms - lda muls8u.return_2+1 - sta ms+1 - // [209] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 - lda a - sta mulf8u.a - // [210] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 - lda b - sta mulf8u.b - // [211] call mulf8u - jsr mulf8u - // [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 -- vwuz1=vwuz2 - lda mulf8u.return - sta mulf8u.return_2 - lda mulf8u.return+1 - sta mulf8u.return_2+1 - jmp b11 - // mul8u_compare::@11 - b11: - // [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 -- vwuz1=vwuz2 - lda mulf8u.return_2 - sta mf - lda mulf8u.return_2+1 - sta mf+1 - // [214] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 - lda a - sta mul8u.a - // [215] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 - lda b - sta mul8u.b_1 - // [216] call mul8u - // [148] phi from mul8u_compare::@11 to mul8u [phi:mul8u_compare::@11->mul8u] - mul8u_from_b11: - // [148] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:mul8u_compare::@11->mul8u#0] -- register_copy - // [148] phi (word) mul8u::mb#0 = (byte) mul8u::b#1 [phi:mul8u_compare::@11->mul8u#1] -- vwuz1=vbuz2 - lda mul8u.b_1 - sta mul8u.mb - lda #0 - sta mul8u.mb+1 - jsr mul8u - // [217] (word) mul8u::return#3 ← (word) mul8u::res#2 -- vwuz1=vwuz2 - lda mul8u.res - sta mul8u.return_3 - lda mul8u.res+1 - sta mul8u.return_3+1 - jmp b12 - // mul8u_compare::@12 - b12: - // [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 -- vwuz1=vwuz2 - lda mul8u.return_3 - sta mn - lda mul8u.return_3+1 - sta mn+1 - // [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 -- vwuz1_eq_vwuz2_then_la1 - lda ms - cmp mf - bne !+ - lda ms+1 - cmp mf+1 - beq b3_from_b12 - !: - // [220] phi from mul8u_compare::@12 to mul8u_compare::@6 [phi:mul8u_compare::@12->mul8u_compare::@6] - b6_from_b12: - jmp b6 - // mul8u_compare::@6 - b6: - // [221] phi from mul8u_compare::@6 to mul8u_compare::@3 [phi:mul8u_compare::@6->mul8u_compare::@3] - b3_from_b6: - // [221] phi (byte) mul8u_compare::ok#4 = (byte) 0 [phi:mul8u_compare::@6->mul8u_compare::@3#0] -- vbuz1=vbuc1 - lda #0 - sta ok - jmp b3 - // [221] phi from mul8u_compare::@12 to mul8u_compare::@3 [phi:mul8u_compare::@12->mul8u_compare::@3] - b3_from_b12: - // [221] phi (byte) mul8u_compare::ok#4 = (byte) 1 [phi:mul8u_compare::@12->mul8u_compare::@3#0] -- vbuz1=vbuc1 - lda #1 - sta ok - jmp b3 - // mul8u_compare::@3 - b3: - // [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 -- vwuz1_eq_vwuz2_then_la1 - lda ms - cmp mn - bne !+ - lda ms+1 - cmp mn+1 - beq b14_from_b3 - !: - // [224] phi from mul8u_compare::@3 to mul8u_compare::@4 [phi:mul8u_compare::@3->mul8u_compare::@4] - b4_from_b3: - // [224] phi (byte) mul8u_compare::ok#3 = (byte) 0 [phi:mul8u_compare::@3->mul8u_compare::@4#0] -- vbuz1=vbuc1 - lda #0 - sta ok - jmp b4 - // [223] phi from mul8u_compare::@3 to mul8u_compare::@14 [phi:mul8u_compare::@3->mul8u_compare::@14] - b14_from_b3: - jmp b14 - // mul8u_compare::@14 - b14: - // [224] phi from mul8u_compare::@14 to mul8u_compare::@4 [phi:mul8u_compare::@14->mul8u_compare::@4] - b4_from_b14: - // [224] phi (byte) mul8u_compare::ok#3 = (byte) mul8u_compare::ok#4 [phi:mul8u_compare::@14->mul8u_compare::@4#0] -- register_copy - jmp b4 - // mul8u_compare::@4 - b4: - // [225] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 -- vbuz1_neq_0_then_la1 - lda ok - cmp #0 - bne b5 - jmp b7 - // mul8u_compare::@7 - b7: - // [226] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta BGCOL - // [227] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 - lda a - sta mul8u_error.a - // [228] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 - lda b - sta mul8u_error.b - // [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 -- vwuz1=vwuz2 - lda ms - sta mul8u_error.ms - lda ms+1 - sta mul8u_error.ms+1 - // [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 -- vwuz1=vwuz2 - lda mn - sta mul8u_error.mn - lda mn+1 - sta mul8u_error.mn+1 - // [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 -- vwuz1=vwuz2 - lda mf - sta mul8u_error.mf - lda mf+1 - sta mul8u_error.mf+1 - // [232] call mul8u_error - // [242] phi from mul8u_compare::@7 to mul8u_error [phi:mul8u_compare::@7->mul8u_error] - mul8u_error_from_b7: - jsr mul8u_error - jmp breturn - // mul8u_compare::@return - breturn: - // [233] return - rts - // mul8u_compare::@5 - b5: - // [234] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 -- vbuz1=_inc_vbuz1 - inc b - // [235] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 -- vbuz1_neq_0_then_la1 - lda b - cmp #0 - bne b2_from_b5 - jmp b8 - // mul8u_compare::@8 - b8: - // [236] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 -- vbuz1=_inc_vbuz1 - inc a - // [237] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 -- vbuz1_neq_0_then_la1 - lda a - cmp #0 - bne b1_from_b8 - // [238] phi from mul8u_compare::@8 to mul8u_compare::@9 [phi:mul8u_compare::@8->mul8u_compare::@9] - b9_from_b8: - jmp b9 - // mul8u_compare::@9 - b9: - // [239] call print_str - // [114] phi from mul8u_compare::@9 to print_str [phi:mul8u_compare::@9->print_str] - print_str_from_b9: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_compare::@9->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mul8u_compare::str [phi:mul8u_compare::@9->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - // [240] phi from mul8u_compare::@9 to mul8u_compare::@13 [phi:mul8u_compare::@9->mul8u_compare::@13] - b13_from_b9: - jmp b13 - // mul8u_compare::@13 - b13: - // [241] call print_ln - // [80] phi from mul8u_compare::@13 to print_ln [phi:mul8u_compare::@13->print_ln] - print_ln_from_b13: - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8u_compare::@13->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_compare::@13->print_ln#1] -- register_copy - jsr print_ln - jmp breturn - str: .text "multiply results match!@" -} - // mul8u_error -// mul8u_error(byte zeropage($79) a, byte zeropage($7a) b, word zeropage($7b) ms, word zeropage($7d) mn, word zeropage($7f) mf) -mul8u_error: { - .label a = $79 - .label b = $7a - .label ms = $7b - .label mn = $7d - .label mf = $7f - // [243] call print_str - // [114] phi from mul8u_error to print_str [phi:mul8u_error->print_str] - print_str_from_mul8u_error: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_error->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mul8u_error::str [phi:mul8u_error->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - jmp b1 - // mul8u_error::@1 - b1: - // [244] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 -- vbuz1=vbuz2 - lda a - sta print_byte.b - // [245] call print_byte - // [106] phi from mul8u_error::@1 to print_byte [phi:mul8u_error::@1->print_byte] - print_byte_from_b1: - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@1->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#3 [phi:mul8u_error::@1->print_byte#1] -- register_copy - jsr print_byte - // [246] phi from mul8u_error::@1 to mul8u_error::@2 [phi:mul8u_error::@1->mul8u_error::@2] - b2_from_b1: - jmp b2 - // mul8u_error::@2 - b2: - // [247] call print_str - // [114] phi from mul8u_error::@2 to print_str [phi:mul8u_error::@2->print_str] - print_str_from_b2: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@2->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - jmp b3 - // mul8u_error::@3 - b3: - // [248] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 -- vbuz1=vbuz2 - lda b - sta print_byte.b - // [249] call print_byte - // [106] phi from mul8u_error::@3 to print_byte [phi:mul8u_error::@3->print_byte] - print_byte_from_b3: - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@3->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#4 [phi:mul8u_error::@3->print_byte#1] -- register_copy - jsr print_byte - // [250] phi from mul8u_error::@3 to mul8u_error::@4 [phi:mul8u_error::@3->mul8u_error::@4] - b4_from_b3: - jmp b4 - // mul8u_error::@4 - b4: - // [251] call print_str - // [114] phi from mul8u_error::@4 to print_str [phi:mul8u_error::@4->print_str] - print_str_from_b4: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@4->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1 - lda #str2 - sta print_str.str+1 - jsr print_str - jmp b5 - // mul8u_error::@5 - b5: - // [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 -- vwuz1=vwuz2 - lda ms - sta print_word.w - lda ms+1 - sta print_word.w+1 - // [253] call print_word - // [100] phi from mul8u_error::@5 to print_word [phi:mul8u_error::@5->print_word] - print_word_from_b5: - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@5->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#3 [phi:mul8u_error::@5->print_word#1] -- register_copy - jsr print_word - // [254] phi from mul8u_error::@5 to mul8u_error::@6 [phi:mul8u_error::@5->mul8u_error::@6] - b6_from_b5: - jmp b6 - // mul8u_error::@6 - b6: - // [255] call print_str - // [114] phi from mul8u_error::@6 to print_str [phi:mul8u_error::@6->print_str] - print_str_from_b6: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@6->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1 - lda #str3 - sta print_str.str+1 - jsr print_str - jmp b7 - // mul8u_error::@7 - b7: - // [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 -- vwuz1=vwuz2 - lda mn - sta print_word.w - lda mn+1 - sta print_word.w+1 - // [257] call print_word - // [100] phi from mul8u_error::@7 to print_word [phi:mul8u_error::@7->print_word] - print_word_from_b7: - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@7->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#4 [phi:mul8u_error::@7->print_word#1] -- register_copy - jsr print_word - // [258] phi from mul8u_error::@7 to mul8u_error::@8 [phi:mul8u_error::@7->mul8u_error::@8] - b8_from_b7: - jmp b8 - // mul8u_error::@8 - b8: - // [259] call print_str - // [114] phi from mul8u_error::@8 to print_str [phi:mul8u_error::@8->print_str] - print_str_from_b8: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@8->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1 - lda #str4 - sta print_str.str+1 - jsr print_str - jmp b9 - // mul8u_error::@9 - b9: - // [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 -- vwuz1=vwuz2 - lda mf - sta print_word.w - lda mf+1 - sta print_word.w+1 - // [261] call print_word - // [100] phi from mul8u_error::@9 to print_word [phi:mul8u_error::@9->print_word] - print_word_from_b9: - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@9->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#5 [phi:mul8u_error::@9->print_word#1] -- register_copy - jsr print_word - // [262] phi from mul8u_error::@9 to mul8u_error::@10 [phi:mul8u_error::@9->mul8u_error::@10] - b10_from_b9: - jmp b10 - // mul8u_error::@10 - b10: - // [263] call print_ln - // [80] phi from mul8u_error::@10 to print_ln [phi:mul8u_error::@10->print_ln] - print_ln_from_b10: - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#19 [phi:mul8u_error::@10->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_error::@10->print_ln#1] -- register_copy - jsr print_ln - jmp breturn - // mul8u_error::@return - breturn: - // [264] return - rts - str: .text "multiply mismatch @" -} - // mulf8u -// Fast multiply two unsigned bytes to a word result -// mulf8u(byte zeropage($6f) a, byte zeropage($70) b) -mulf8u: { - .label return = $83 - .label a = $6f - .label b = $70 - .label return_2 = $71 - // [265] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 -- vbuz1=vbuz2 - lda a - sta mulf8u_prepare.a - // [266] call mulf8u_prepare - // [185] phi from mulf8u to mulf8u_prepare [phi:mulf8u->mulf8u_prepare] - mulf8u_prepare_from_mulf8u: - // [185] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#0 [phi:mulf8u->mulf8u_prepare#0] -- register_copy - jsr mulf8u_prepare - jmp b1 - // mulf8u::@1 - b1: - // [267] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 -- vbuz1=vbuz2 - lda b - sta mulf8u_prepared.b - // [268] call mulf8u_prepared - // [180] phi from mulf8u::@1 to mulf8u_prepared [phi:mulf8u::@1->mulf8u_prepared] - mulf8u_prepared_from_b1: - // [180] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#0 [phi:mulf8u::@1->mulf8u_prepared#0] -- register_copy - jsr mulf8u_prepared - // [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 -- vwuz1=vwuz2 - lda mulf8u_prepared.return - sta mulf8u_prepared.return_2 - lda mulf8u_prepared.return+1 - sta mulf8u_prepared.return_2+1 - jmp b2 - // mulf8u::@2 - b2: - // [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 -- vwuz1=vwuz2 - lda mulf8u_prepared.return_2 - sta return - lda mulf8u_prepared.return_2+1 - sta return+1 - jmp breturn - // mulf8u::@return - breturn: - // [271] return + // [140] return rts } // muls8u // Slow multiplication of unsigned bytes // Calculate an unsigned multiplication by repeated addition -// muls8u(byte zeropage($69) a, byte zeropage($6a) b) +// muls8u(byte zeropage($2c) a, byte zeropage($2d) b) muls8u: { - .label return = $27 - .label m = $27 - .label i = $26 - .label a = $69 - .label b = $6a - .label return_2 = $6b - // [272] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 -- vbuz1_eq_0_then_la1 + .label return = $16 + .label m = $16 + .label i = $15 + .label a = $2c + .label b = $2d + .label return_2 = $2e + // [141] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 -- vbuz1_eq_0_then_la1 lda a cmp #0 beq b1_from_muls8u - // [273] phi from muls8u to muls8u::@2 [phi:muls8u->muls8u::@2] + // [142] phi from muls8u to muls8u::@2 [phi:muls8u->muls8u::@2] b2_from_muls8u: - // [273] phi (word) muls8u::m#3 = (byte) 0 [phi:muls8u->muls8u::@2#0] -- vwuz1=vbuc1 + // [142] phi (word) muls8u::m#3 = (byte) 0 [phi:muls8u->muls8u::@2#0] -- vwuz1=vbuc1 lda #<0 sta m lda #>0 sta m+1 - // [273] phi (byte) muls8u::i#2 = (byte) 0 [phi:muls8u->muls8u::@2#1] -- vbuz1=vbuc1 + // [142] phi (byte) muls8u::i#2 = (byte) 0 [phi:muls8u->muls8u::@2#1] -- vbuz1=vbuc1 lda #0 sta i jmp b2 // muls8u::@2 b2: - // [274] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 -- vbuz1_neq_vbuz2_then_la1 + // [143] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 -- vbuz1_neq_vbuz2_then_la1 lda i cmp a bne b3 - // [275] phi from muls8u::@2 to muls8u::@1 [phi:muls8u::@2->muls8u::@1] + // [144] phi from muls8u::@2 to muls8u::@1 [phi:muls8u::@2->muls8u::@1] b1_from_b2: - // [275] phi (word) muls8u::return#0 = (word) muls8u::m#3 [phi:muls8u::@2->muls8u::@1#0] -- register_copy + // [144] phi (word) muls8u::return#0 = (word) muls8u::m#3 [phi:muls8u::@2->muls8u::@1#0] -- register_copy jmp b1 - // [275] phi from muls8u to muls8u::@1 [phi:muls8u->muls8u::@1] + // [144] phi from muls8u to muls8u::@1 [phi:muls8u->muls8u::@1] b1_from_muls8u: - // [275] phi (word) muls8u::return#0 = (byte) 0 [phi:muls8u->muls8u::@1#0] -- vwuz1=vbuc1 + // [144] phi (word) muls8u::return#0 = (byte) 0 [phi:muls8u->muls8u::@1#0] -- vwuz1=vbuc1 lda #<0 sta return lda #>0 @@ -7277,11 +6017,11 @@ muls8u: { jmp breturn // muls8u::@return breturn: - // [276] return + // [145] return rts // muls8u::@3 b3: - // [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 -- vwuz1=vwuz1_plus_vbuz2 + // [146] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 -- vwuz1=vwuz1_plus_vbuz2 lda b clc adc m @@ -7289,28 +6029,28 @@ muls8u: { bcc !+ inc m+1 !: - // [278] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 -- vbuz1=_inc_vbuz1 + // [147] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 -- vbuz1=_inc_vbuz1 inc i - // [273] phi from muls8u::@3 to muls8u::@2 [phi:muls8u::@3->muls8u::@2] + // [142] phi from muls8u::@3 to muls8u::@2 [phi:muls8u::@3->muls8u::@2] b2_from_b3: - // [273] phi (word) muls8u::m#3 = (word) muls8u::m#1 [phi:muls8u::@3->muls8u::@2#0] -- register_copy - // [273] phi (byte) muls8u::i#2 = (byte) muls8u::i#1 [phi:muls8u::@3->muls8u::@2#1] -- register_copy + // [142] phi (word) muls8u::m#3 = (word) muls8u::m#1 [phi:muls8u::@3->muls8u::@2#0] -- register_copy + // [142] phi (byte) muls8u::i#2 = (byte) muls8u::i#1 [phi:muls8u::@3->muls8u::@2#1] -- register_copy jmp b2 } // mulf_tables_cmp // Compare the ASM-based mul tables with the KC-based mul tables // Red screen on failure - green on success mulf_tables_cmp: { - .label asm_sqr = $2b - .label kc_sqr = $29 - // [280] phi from mulf_tables_cmp to mulf_tables_cmp::@1 [phi:mulf_tables_cmp->mulf_tables_cmp::@1] + .label asm_sqr = $1a + .label kc_sqr = $18 + // [149] phi from mulf_tables_cmp to mulf_tables_cmp::@1 [phi:mulf_tables_cmp->mulf_tables_cmp::@1] b1_from_mulf_tables_cmp: - // [280] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (const byte[$200]) mula_sqr1_lo#0 [phi:mulf_tables_cmp->mulf_tables_cmp::@1#0] -- pbuz1=pbuc1 + // [149] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (const byte[$200]) mula_sqr1_lo#0 [phi:mulf_tables_cmp->mulf_tables_cmp::@1#0] -- pbuz1=pbuc1 lda #mula_sqr1_lo sta asm_sqr+1 - // [280] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (const byte[$200]) mulf_sqr1_lo#0 [phi:mulf_tables_cmp->mulf_tables_cmp::@1#1] -- pbuz1=pbuc1 + // [149] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (const byte[$200]) mulf_sqr1_lo#0 [phi:mulf_tables_cmp->mulf_tables_cmp::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_lo @@ -7318,7 +6058,7 @@ mulf_tables_cmp: { jmp b1 // mulf_tables_cmp::@1 b1: - // [281] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 -- pbuz1_lt_pbuc1_then_la1 + // [150] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 -- pbuz1_lt_pbuc1_then_la1 lda kc_sqr+1 cmp #>mulf_sqr1_lo+$200*4 bcc b2 @@ -7327,35 +6067,35 @@ mulf_tables_cmp: { cmp #mulf_tables_cmp::@3] + // [151] phi from mulf_tables_cmp::@1 to mulf_tables_cmp::@3 [phi:mulf_tables_cmp::@1->mulf_tables_cmp::@3] b3_from_b1: jmp b3 // mulf_tables_cmp::@3 b3: - // [283] call print_str - // [114] phi from mulf_tables_cmp::@3 to print_str [phi:mulf_tables_cmp::@3->print_str] + // [152] call print_str + // [28] phi from mulf_tables_cmp::@3 to print_str [phi:mulf_tables_cmp::@3->print_str] print_str_from_b3: - // [114] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@3->print_str#0] -- pbuz1=pbuc1 + // [28] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@3->print_str#0] -- pbuz1=pbuc1 lda #<$400 sta print_char_cursor lda #>$400 sta print_char_cursor+1 - // [114] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str [phi:mulf_tables_cmp::@3->print_str#1] -- pbuz1=pbuc1 + // [28] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str [phi:mulf_tables_cmp::@3->print_str#1] -- pbuz1=pbuc1 lda #str sta print_str.str+1 jsr print_str - // [284] phi from mulf_tables_cmp::@3 to mulf_tables_cmp::@6 [phi:mulf_tables_cmp::@3->mulf_tables_cmp::@6] + // [153] phi from mulf_tables_cmp::@3 to mulf_tables_cmp::@6 [phi:mulf_tables_cmp::@3->mulf_tables_cmp::@6] b6_from_b3: jmp b6 // mulf_tables_cmp::@6 b6: - // [285] call print_ln - // [80] phi from mulf_tables_cmp::@6 to print_ln [phi:mulf_tables_cmp::@6->print_ln] + // [154] call print_ln + // [23] phi from mulf_tables_cmp::@6 to print_ln [phi:mulf_tables_cmp::@6->print_ln] print_ln_from_b6: - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@6->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) 1024 [phi:mulf_tables_cmp::@6->print_ln#1] -- pbuz1=pbuc1 + // [23] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@6->print_ln#0] -- register_copy + // [23] phi (byte*) print_line_cursor#45 = (byte*) 1024 [phi:mulf_tables_cmp::@6->print_ln#1] -- pbuz1=pbuc1 lda #<$400 sta print_line_cursor lda #>$400 @@ -7364,23 +6104,23 @@ mulf_tables_cmp: { jmp b7 // mulf_tables_cmp::@7 b7: - // [286] (byte*~) print_char_cursor#230 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [155] (byte*~) print_char_cursor#213 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 - // [287] phi from mulf_tables_cmp::@7 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return] + // [156] phi from mulf_tables_cmp::@7 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return] breturn_from_b7: - // [287] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#1 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#0] -- register_copy - // [287] phi (byte*) print_char_cursor#100 = (byte*~) print_char_cursor#230 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#1] -- register_copy + // [156] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#1 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#0] -- register_copy + // [156] phi (byte*) print_char_cursor#100 = (byte*~) print_char_cursor#213 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#1] -- register_copy jmp breturn // mulf_tables_cmp::@return breturn: - // [288] return + // [157] return rts // mulf_tables_cmp::@2 b2: - // [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 -- _deref_pbuz1_eq__deref_pbuz2_then_la1 + // [158] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 -- _deref_pbuz1_eq__deref_pbuz2_then_la1 ldy #0 lda (kc_sqr),y ldy #0 @@ -7389,18 +6129,18 @@ mulf_tables_cmp: { jmp b5 // mulf_tables_cmp::@5 b5: - // [290] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [159] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BGCOL - // [291] call print_str - // [114] phi from mulf_tables_cmp::@5 to print_str [phi:mulf_tables_cmp::@5->print_str] + // [160] call print_str + // [28] phi from mulf_tables_cmp::@5 to print_str [phi:mulf_tables_cmp::@5->print_str] print_str_from_b5: - // [114] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@5->print_str#0] -- pbuz1=pbuc1 + // [28] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@5->print_str#0] -- pbuz1=pbuc1 lda #<$400 sta print_char_cursor lda #>$400 sta print_char_cursor+1 - // [114] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str1 [phi:mulf_tables_cmp::@5->print_str#1] -- pbuz1=pbuc1 + // [28] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str1 [phi:mulf_tables_cmp::@5->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -7409,27 +6149,26 @@ mulf_tables_cmp: { jmp b8 // mulf_tables_cmp::@8 b8: - // [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 -- vwuz1=vwuz2 + // [161] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 -- vwuz1=vwuz2 lda asm_sqr sta print_word.w lda asm_sqr+1 sta print_word.w+1 - // [293] call print_word - // [100] phi from mulf_tables_cmp::@8 to print_word [phi:mulf_tables_cmp::@8->print_word] + // [162] call print_word + // [99] phi from mulf_tables_cmp::@8 to print_word [phi:mulf_tables_cmp::@8->print_word] print_word_from_b8: - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@8->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#1 [phi:mulf_tables_cmp::@8->print_word#1] -- register_copy + // [99] phi (word) print_word::w#6 = (word) print_word::w#1 [phi:mulf_tables_cmp::@8->print_word#0] -- register_copy jsr print_word - // [294] phi from mulf_tables_cmp::@8 to mulf_tables_cmp::@9 [phi:mulf_tables_cmp::@8->mulf_tables_cmp::@9] + // [163] phi from mulf_tables_cmp::@8 to mulf_tables_cmp::@9 [phi:mulf_tables_cmp::@8->mulf_tables_cmp::@9] b9_from_b8: jmp b9 // mulf_tables_cmp::@9 b9: - // [295] call print_str - // [114] phi from mulf_tables_cmp::@9 to print_str [phi:mulf_tables_cmp::@9->print_str] + // [164] call print_str + // [28] phi from mulf_tables_cmp::@9 to print_str [phi:mulf_tables_cmp::@9->print_str] print_str_from_b9: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@9->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str2 [phi:mulf_tables_cmp::@9->print_str#1] -- pbuz1=pbuc1 + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@9->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str2 [phi:mulf_tables_cmp::@9->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -7438,42 +6177,41 @@ mulf_tables_cmp: { jmp b10 // mulf_tables_cmp::@10 b10: - // [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 -- vwuz1=vwuz2 + // [165] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 -- vwuz1=vwuz2 lda kc_sqr sta print_word.w lda kc_sqr+1 sta print_word.w+1 - // [297] call print_word - // [100] phi from mulf_tables_cmp::@10 to print_word [phi:mulf_tables_cmp::@10->print_word] + // [166] call print_word + // [99] phi from mulf_tables_cmp::@10 to print_word [phi:mulf_tables_cmp::@10->print_word] print_word_from_b10: - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@10->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#2 [phi:mulf_tables_cmp::@10->print_word#1] -- register_copy + // [99] phi (word) print_word::w#6 = (word) print_word::w#2 [phi:mulf_tables_cmp::@10->print_word#0] -- register_copy jsr print_word - // [287] phi from mulf_tables_cmp::@10 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return] + // [156] phi from mulf_tables_cmp::@10 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return] breturn_from_b10: - // [287] phi (byte*) print_line_cursor#11 = (byte*) 1024 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#0] -- pbuz1=pbuc1 + // [156] phi (byte*) print_line_cursor#11 = (byte*) 1024 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#0] -- pbuz1=pbuc1 lda #<$400 sta print_line_cursor lda #>$400 sta print_line_cursor+1 - // [287] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#1] -- register_copy + // [156] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#1] -- register_copy jmp breturn // mulf_tables_cmp::@4 b4: - // [298] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 -- pbuz1=_inc_pbuz1 + // [167] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 -- pbuz1=_inc_pbuz1 inc asm_sqr bne !+ inc asm_sqr+1 !: - // [299] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 -- pbuz1=_inc_pbuz1 + // [168] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 -- pbuz1=_inc_pbuz1 inc kc_sqr bne !+ inc kc_sqr+1 !: - // [280] phi from mulf_tables_cmp::@4 to mulf_tables_cmp::@1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1] + // [149] phi from mulf_tables_cmp::@4 to mulf_tables_cmp::@1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1] b1_from_b4: - // [280] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (byte*) mulf_tables_cmp::asm_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#0] -- register_copy - // [280] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (byte*) mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy + // [149] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (byte*) mulf_tables_cmp::asm_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#0] -- register_copy + // [149] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (byte*) mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy jmp b1 str: .text "multiply tables match!@" str1: .text "multiply table mismatch at @" @@ -7524,58 +6262,58 @@ mulf_init_asm: { dey inx bne !- - // [301] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) -- _deref_pbuc1=_deref_pbuc2 + // [170] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr1_lo sta mem - // [302] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) -- _deref_pbuc1=_deref_pbuc2 + // [171] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr1_hi sta mem - // [303] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) -- _deref_pbuc1=_deref_pbuc2 + // [172] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr2_lo sta mem - // [304] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) -- _deref_pbuc1=_deref_pbuc2 + // [173] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr2_hi sta mem jmp breturn // mulf_init_asm::@return breturn: - // [305] return + // [174] return rts } // mulf_init // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4) mulf_init: { - .label _9 = $85 - .label _12 = $86 - .label _13 = $87 - .label c = $2f - .label sqr1_hi = $30 - .label sqr = $39 - .label sqr1_lo = $2d - .label x_2 = $32 - .label sqr2_hi = $36 - .label x_255 = $35 - .label sqr2_lo = $33 - .label dir = $38 - // [307] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + .label _9 = $4f + .label _12 = $50 + .label _13 = $51 + .label c = $1e + .label sqr1_hi = $1f + .label sqr = $28 + .label sqr1_lo = $1c + .label x_2 = $21 + .label sqr2_hi = $25 + .label x_255 = $24 + .label sqr2_lo = $22 + .label dir = $27 + // [176] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] b1_from_mulf_init: - // [307] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 + // [176] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 lda #0 sta x_2 - // [307] phi (byte*) mulf_init::sqr1_hi#2 = (const byte[$200]) mulf_sqr1_hi#0+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [176] phi (byte*) mulf_init::sqr1_hi#2 = (const byte[$200]) mulf_sqr1_hi#0+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta sqr1_hi+1 - // [307] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [176] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 lda #<0 sta sqr lda #>0 sta sqr+1 - // [307] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [176] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 lda #0 sta c - // [307] phi (byte*) mulf_init::sqr1_lo#2 = (const byte[$200]) mulf_sqr1_lo#0+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [176] phi (byte*) mulf_init::sqr1_lo#2 = (const byte[$200]) mulf_sqr1_lo#0+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -7583,27 +6321,27 @@ mulf_init: { jmp b1 // mulf_init::@1 b1: - // [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [177] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 lda sqr1_lo+1 cmp #>mulf_sqr1_lo+$200 bne b2 lda sqr1_lo cmp #mulf_init::@5] + // [178] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] b5_from_b1: - // [309] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [178] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta dir - // [309] phi (byte*) mulf_init::sqr2_hi#2 = (const byte[$200]) mulf_sqr2_hi#0 [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [178] phi (byte*) mulf_init::sqr2_hi#2 = (const byte[$200]) mulf_sqr2_hi#0 [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta sqr2_hi+1 - // [309] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuz1=vbuc1 + // [178] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuz1=vbuc1 lda #-1 sta x_255 - // [309] phi (byte*) mulf_init::sqr2_lo#2 = (const byte[$200]) mulf_sqr2_lo#0 [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [178] phi (byte*) mulf_init::sqr2_lo#2 = (const byte[$200]) mulf_sqr2_lo#0 [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -7611,7 +6349,7 @@ mulf_init: { jmp b5 // mulf_init::@5 b5: - // [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [179] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne b6 @@ -7621,123 +6359,123 @@ mulf_init: { jmp b7 // mulf_init::@7 b7: - // [311] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [180] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff - // [312] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [181] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff jmp breturn // mulf_init::@return breturn: - // [313] return + // [182] return rts // mulf_init::@6 b6: - // [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [183] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy x_255 lda mulf_sqr1_lo,y ldy #0 sta (sqr2_lo),y - // [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [184] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy x_255 lda mulf_sqr1_hi,y ldy #0 sta (sqr2_hi),y - // [316] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [185] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc sqr2_hi bne !+ inc sqr2_hi+1 !: - // [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuz1=vbuz1_plus_vbuz2 + // [186] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuz1=vbuz1_plus_vbuz2 lda x_255 clc adc dir sta x_255 - // [318] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuz1_neq_0_then_la1 + // [187] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuz1_neq_0_then_la1 lda x_255 cmp #0 bne b9_from_b6 - // [320] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [189] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] b8_from_b6: - // [320] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [189] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta dir jmp b8 - // [319] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [188] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] b9_from_b6: jmp b9 // mulf_init::@9 b9: - // [320] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [189] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] b8_from_b9: - // [320] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [189] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy jmp b8 // mulf_init::@8 b8: - // [321] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [190] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc sqr2_lo bne !+ inc sqr2_lo+1 !: - // [309] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [178] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] b5_from_b8: - // [309] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [309] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [309] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [309] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [178] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [178] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [178] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [178] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp b5 // mulf_init::@2 b2: - // [322] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [191] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc c - // [323] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + // [192] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 lda #1 and c sta _9 - // [324] if((byte~) mulf_init::$9!=(byte) 0) goto mulf_init::@3 -- vbuz1_neq_0_then_la1 + // [193] if((byte~) mulf_init::$9!=(byte) 0) goto mulf_init::@3 -- vbuz1_neq_0_then_la1 lda _9 cmp #0 bne b3_from_b2 jmp b4 // mulf_init::@4 b4: - // [325] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 + // [194] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 inc x_2 - // [326] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [195] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc sqr bne !+ inc sqr+1 !: - // [327] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [196] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] b3_from_b2: b3_from_b4: - // [327] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [327] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [196] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [196] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy jmp b3 // mulf_init::@3 b3: - // [328] (byte~) mulf_init::$12 ← < (word) mulf_init::sqr#3 -- vbuz1=_lo_vwuz2 + // [197] (byte~) mulf_init::$12 ← < (word) mulf_init::sqr#3 -- vbuz1=_lo_vwuz2 lda sqr sta _12 - // [329] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 -- _deref_pbuz1=vbuz2 + // [198] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 -- _deref_pbuz1=vbuz2 lda _12 ldy #0 sta (sqr1_lo),y - // [330] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 -- vbuz1=_hi_vwuz2 + // [199] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 -- vbuz1=_hi_vwuz2 lda sqr+1 sta _13 - // [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 -- _deref_pbuz1=vbuz2 + // [200] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 -- _deref_pbuz1=vbuz2 lda _13 ldy #0 sta (sqr1_hi),y - // [332] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [201] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc sqr1_hi bne !+ inc sqr1_hi+1 !: - // [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 + // [202] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 lda x_2 clc adc sqr @@ -7745,31 +6483,31 @@ mulf_init: { bcc !+ inc sqr+1 !: - // [334] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [203] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc sqr1_lo bne !+ inc sqr1_lo+1 !: - // [307] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [176] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] b1_from_b3: - // [307] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [307] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [307] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [307] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [307] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [176] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [176] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [176] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [176] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [176] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp b1 } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [336] call memset - // [338] phi from print_cls to memset [phi:print_cls->memset] + // [205] call memset + // [207] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp breturn // print_cls::@return breturn: - // [337] return + // [206] return rts } // memset @@ -7779,44 +6517,45 @@ memset: { .const num = $3e8 .label str = $400 .label end = str+num - .label dst = $3b - // [339] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [339] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + .label dst = $2a + // [208] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [208] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [208] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [209] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [343] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [210] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [339] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [339] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [211] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp # (word) print_word::w#6 [ print_word::w#6 print_char_cursor#142 print_byte::b#1 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91 [ print_line_cursor#1 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261 [ print_line_cursor#11 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:293 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:297 [ print_word::w#6 print_char_cursor#142 print_byte::b#1 ] ) always clobbers reg byte a -Statement [103] (byte) print_byte::b#2 ← < (word) print_word::w#6 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261 [ print_line_cursor#11 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:293 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:297 [ print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a -Statement [107] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_char_cursor#143 print_byte::b#5 print_byte::$0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102 [ print_line_cursor#1 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102 [ print_line_cursor#11 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102 [ print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104 [ print_line_cursor#1 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104 [ print_line_cursor#11 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104 [ print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:122 [ mul8u_error::b#0 ] -Statement [110] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102 [ print_line_cursor#1 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102 [ print_line_cursor#11 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102 [ print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104 [ print_line_cursor#11 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104 [ print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a -Statement [116] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:21 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:58 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:62 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:66 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:70 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:74 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:239 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:243 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:247 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:251 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:255 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:259 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:283 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:291 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:295 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:77 [ mul8s_error::a#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:121 [ mul8u_error::a#0 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:121 [ mul8u_error::a#0 ] -Statement [118] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:21 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:58 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:62 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:66 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:70 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:74 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:239 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:243 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:247 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:251 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:255 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:259 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:283 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:291 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:295 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y -Statement [131] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 [ print_char_cursor#19 print_sbyte::b#0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_sbyte::b#0 ] ) always clobbers reg byte a -Statement [135] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8s::a#0 mul8s::b#0 mul8u::return#2 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::return#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:73 [ mul8s::a#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:74 [ mul8s::b#0 ] -Statement [136] (word) mul8s::m#0 ← (word) mul8u::return#2 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8s::m#0 ] ) always clobbers reg byte a -Statement [138] (byte~) mul8s::$9 ← > (word) mul8s::m#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$9 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$9 ] ) always clobbers reg byte a -Statement [139] (byte~) mul8s::$16 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) always clobbers reg byte a -Statement [143] (byte~) mul8s::$13 ← > (word) mul8s::m#5 [ mul8s::a#0 mul8s::m#5 mul8s::$13 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::m#5 mul8s::$13 ] ) always clobbers reg byte a -Statement [144] (byte~) mul8s::$17 ← (byte~) mul8s::$13 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::m#5 mul8s::$17 ] ) always clobbers reg byte a -Statement [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8s_compare:15::mul8s:40::mul8u:134 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::mul8u_compare:13::mul8u:216 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] -Statement [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:2::mul8s_compare:15::mulf8s:35 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s::return#0 ] ) always clobbers reg byte a -Statement [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#3 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8u_prepared::return#3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:94 [ mulf8s_prepared::b#0 ] -Statement [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [169] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a -Statement [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a -Statement [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a -Statement [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a +Statement [18] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 [ print_char_cursor#193 print_line_cursor#1 ] ( main:2::mul8s_compare:15 [ print_char_cursor#193 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [25] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:21 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:75 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:66::print_ln:97 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:154 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a +Statement [26] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:21 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:75 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:66::print_ln:97 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:154 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a +Statement [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:19 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:73 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:77 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:81 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:85 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:89 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:93 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:152 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:160 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:164 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:60 [ mul8u_error::a#0 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:60 [ mul8u_error::a#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:61 [ mul8u_error::b#0 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:61 [ mul8u_error::b#0 ] +Statement [32] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:19 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:73 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:77 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:81 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:85 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:89 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:93 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:152 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:160 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:164 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y +Statement [41] (word) muls8u::return#2 ← (word) muls8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ mul8u_compare::a#7 mul8u_compare::a#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ mul8u_compare::b#10 mul8u_compare::b#1 ] +Statement [42] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ) always clobbers reg byte a +Statement [46] (word) mulf8u::return#2 ← (word) mulf8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ) always clobbers reg byte a +Statement [47] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ) always clobbers reg byte a +Statement [51] (word) mul8u::return#3 ← (word) mul8u::res#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ) always clobbers reg byte a +Statement [52] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a +Statement [53] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a +Statement [56] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] +Statement [60] *((const byte*) BGCOL#0) ← (byte) 2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a +Statement [63] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ) always clobbers reg byte a +Statement [64] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ) always clobbers reg byte a +Statement [65] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a +Statement [86] (word) print_word::w#3 ← (word) mul8u_error::ms#0 [ print_char_cursor#134 print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#3 ] ( main:2::mul8u_compare:13::mul8u_error:66 [ print_char_cursor#134 print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#3 ] ) always clobbers reg byte a +Statement [90] (word) print_word::w#4 ← (word) mul8u_error::mn#0 [ print_char_cursor#134 print_line_cursor#11 mul8u_error::mf#0 print_word::w#4 ] ( main:2::mul8u_compare:13::mul8u_error:66 [ print_char_cursor#134 print_line_cursor#11 mul8u_error::mf#0 print_word::w#4 ] ) always clobbers reg byte a +Statement [94] (word) print_word::w#5 ← (word) mul8u_error::mf#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ( main:2::mul8u_compare:13::mul8u_error:66 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ) always clobbers reg byte a +Statement [100] (byte) print_byte::b#1 ← > (word) print_word::w#6 [ print_char_cursor#134 print_word::w#6 print_byte::b#1 ] ( main:2::mul8u_compare:13::mul8u_error:66::print_word:87 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_word::w#6 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_word::w#6 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95 [ print_line_cursor#11 print_char_cursor#134 print_word::w#6 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:162 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_word::w#6 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:166 [ print_char_cursor#134 print_word::w#6 print_byte::b#1 ] ) always clobbers reg byte a +Statement [102] (byte) print_byte::b#2 ← < (word) print_word::w#6 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::mul8u_compare:13::mul8u_error:66::print_word:87 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95 [ print_line_cursor#11 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:162 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:166 [ print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a +Statement [106] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_byte::b#5 print_char_cursor#143 print_byte::$0 ] ( main:2::mul8u_compare:13::mul8u_error:66::print_byte:79 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_byte:83 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:101 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:101 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:101 [ print_line_cursor#11 print_word::w#6 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:101 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:101 [ print_word::w#6 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:103 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:103 [ print_line_cursor#11 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:103 [ print_line_cursor#11 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:103 [ mulf_tables_cmp::kc_sqr#2 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:103 [ print_byte::b#5 print_char_cursor#143 print_byte::$0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#1 print_byte::b#2 ] +Statement [109] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::mul8u_compare:13::mul8u_error:66::print_byte:79 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_byte:83 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:101 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:101 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:101 [ print_line_cursor#11 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:101 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:101 [ print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:103 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:103 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:103 [ print_line_cursor#11 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:103 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:103 [ print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a +Statement [114] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 [ print_char_cursor#86 ] ( main:2::mul8u_compare:13::mul8u_error:66::print_byte:79::print_char:108 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_byte:83::print_char:108 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:101::print_char:108 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:101::print_char:108 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:101::print_char:108 [ print_line_cursor#11 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:101::print_char:108 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:101::print_char:108 [ print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:103::print_char:108 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:103::print_char:108 [ print_line_cursor#11 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:103::print_char:108 [ print_line_cursor#11 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:103::print_char:108 [ mulf_tables_cmp::kc_sqr#2 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:103::print_char:108 [ print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_byte:79::print_char:111 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_byte:83::print_char:111 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:101::print_char:111 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:101::print_char:111 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:101::print_char:111 [ print_line_cursor#11 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:101::print_char:111 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:101::print_char:111 [ print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:103::print_char:111 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:103::print_char:111 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:103::print_char:111 [ print_line_cursor#11 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:103::print_char:111 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:103::print_char:111 [ print_char_cursor#86 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:11 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#1 print_byte::b#2 ] +Statement [123] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8u_compare:13::mul8u:50 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ mul8u::a#3 mul8u::a#2 mul8u::a#0 ] +Statement [131] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8u_prepared::return#2 ] ( main:2::mul8u_compare:13::mulf8u:45 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a +Statement [132] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 [ mulf8u::return#0 ] ( main:2::mul8u_compare:13::mulf8u:45 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#0 ] ) always clobbers reg byte a Statement asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:94 [ mulf8s_prepared::b#0 ] -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] -Statement [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) [ mulf8u_prepared::return#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162::mulf8u_prepared:166 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:2::mul8u_compare:13::mulf8u:211::mulf8u_prepared:268 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:6 [ mul8u_compare::a#7 mul8u_compare::a#1 ] +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:7 [ mul8u_compare::b#10 mul8u_compare::b#1 ] +Statement [136] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) [ mulf8u_prepared::return#0 ] ( main:2::mul8u_compare:13::mulf8u:45::mulf8u_prepared:130 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:68 [ mulf8s::b#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:112 [ mulf8u::b#0 ] -Statement [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::j#2 muls8s::m#1 ] ( main:2::mul8s_compare:15::muls8s:30 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::a#0 muls8s::b#0 muls8s::j#2 muls8s::m#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:61 [ muls8s::a#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:62 [ muls8s::b#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ muls8s::j#2 muls8s::j#1 ] -Statement [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#2 ] ( main:2::mul8s_compare:15::muls8s:30 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ muls8s::i#2 muls8s::i#1 ] -Statement [207] (word) muls8u::return#2 ← (word) muls8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ) always clobbers reg byte a -Statement [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ) always clobbers reg byte a -Statement [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ) always clobbers reg byte a -Statement [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ) always clobbers reg byte a -Statement [217] (word) mul8u::return#3 ← (word) mul8u::res#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ) always clobbers reg byte a -Statement [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a -Statement [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a -Statement [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] -Statement [226] *((const byte*) BGCOL#0) ← (byte) 2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a -Statement [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ) always clobbers reg byte a -Statement [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ) always clobbers reg byte a -Statement [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a -Statement [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#3 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13::mul8u_error:232 [ print_char_cursor#134 print_line_cursor#11 print_word::w#3 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a -Statement [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#4 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13::mul8u_error:232 [ print_char_cursor#134 print_line_cursor#11 print_word::w#4 mul8u_error::mf#0 ] ) always clobbers reg byte a -Statement [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ( main:2::mul8u_compare:13::mul8u_error:232 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ) always clobbers reg byte a -Statement [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8u_prepared::return#2 ] ( main:2::mul8u_compare:13::mulf8u:211 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a -Statement [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 [ mulf8u::return#0 ] ( main:2::mul8u_compare:13::mulf8u:211 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#0 ] ) always clobbers reg byte a -Statement [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 [ muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ( main:2::mul8u_compare:13::muls8u:206 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:105 [ muls8u::a#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:106 [ muls8u::b#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:38 [ muls8u::i#2 muls8u::i#1 ] -Statement [281] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a -Statement [286] (byte*~) print_char_cursor#230 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#230 ] ( main:2::mulf_tables_cmp:11 [ print_line_cursor#1 print_char_cursor#230 ] ) always clobbers reg byte a -Statement [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a reg byte y -Statement [290] *((const byte*) BGCOL#0) ← (byte) 2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a -Statement [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ) always clobbers reg byte a -Statement [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 [ print_char_cursor#134 print_word::w#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:51 [ mulf8u::b#0 ] +Statement [146] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 [ muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ( main:2::mul8u_compare:13::muls8u:40 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:44 [ muls8u::a#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:45 [ muls8u::b#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ muls8u::i#2 muls8u::i#1 ] +Statement [150] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a +Statement [155] (byte*~) print_char_cursor#213 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#213 ] ( main:2::mulf_tables_cmp:11 [ print_line_cursor#1 print_char_cursor#213 ] ) always clobbers reg byte a +Statement [158] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a reg byte y +Statement [159] *((const byte*) BGCOL#0) ← (byte) 2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a +Statement [161] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ) always clobbers reg byte a +Statement [165] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 [ print_char_cursor#134 print_word::w#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#2 ] ) always clobbers reg byte a Statement asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- } always clobbers reg byte a reg byte x reg byte y -Statement [301] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [302] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [303] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [304] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:47 [ mulf_init::c#2 mulf_init::c#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:50 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Statement [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:56 [ mulf_init::dir#2 mulf_init::dir#4 ] -Statement [311] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a -Statement [312] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a -Statement [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:56 [ mulf_init::dir#2 mulf_init::dir#4 ] -Statement [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a -Statement [323] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$9 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$9 ] ) always clobbers reg byte a -Statement [328] (byte~) mulf_init::$12 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$12 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$12 ] ) always clobbers reg byte a -Statement [329] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:47 [ mulf_init::c#2 mulf_init::c#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:50 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Statement [330] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$13 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$13 ] ) always clobbers reg byte a -Statement [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a -Statement [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:336 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:336 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [170] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [171] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [172] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [173] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [177] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ mulf_init::c#2 mulf_init::c#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Statement [179] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:39 [ mulf_init::dir#2 mulf_init::dir#4 ] +Statement [180] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a +Statement [181] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a +Statement [183] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:36 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:39 [ mulf_init::dir#2 mulf_init::dir#4 ] +Statement [184] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [186] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [192] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$9 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$9 ] ) always clobbers reg byte a +Statement [197] (byte~) mulf_init::$12 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$12 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$12 ] ) always clobbers reg byte a +Statement [198] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:30 [ mulf_init::c#2 mulf_init::c#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Statement [199] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$13 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$13 ] ) always clobbers reg byte a +Statement [200] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [202] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a +Statement [209] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:205 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [211] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:205 [ memset::dst#1 ] ) always clobbers reg byte a Statement [4] *((const byte*) BGCOL#0) ← (byte) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [20] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 [ print_char_cursor#193 print_line_cursor#1 ] ( main:2::mul8s_compare:15 [ print_char_cursor#193 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [31] (signed word) muls8s::return#2 ← (signed word) muls8s::return#0 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::return#2 ] ( main:2::mul8s_compare:15 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::return#2 ] ) always clobbers reg byte a -Statement [32] (signed word) mul8s_compare::ms#0 ← (signed word) muls8s::return#2 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 ] ( main:2::mul8s_compare:15 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 ] ) always clobbers reg byte a -Statement [36] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s::return#2 ] ( main:2::mul8s_compare:15 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s::return#2 ] ) always clobbers reg byte a -Statement [37] (signed word) mul8s_compare::mf#0 ← (signed word) mulf8s::return#2 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 ] ( main:2::mul8s_compare:15 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 ] ) always clobbers reg byte a -Statement [41] (signed word) mul8s_compare::mn#0 ← (signed word)(word) mul8s::m#4 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s_compare::mn#0 ] ( main:2::mul8s_compare:15 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s_compare::mn#0 ] ) always clobbers reg byte a -Statement [42] if((signed word) mul8s_compare::ms#0==(signed word) mul8s_compare::mf#0) goto mul8s_compare::@6 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s_compare::mn#0 ] ( main:2::mul8s_compare:15 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s_compare::mn#0 ] ) always clobbers reg byte a -Statement [45] if((signed word) mul8s_compare::ms#0==(signed word) mul8s_compare::mn#0) goto mul8s_compare::@15 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s_compare::mn#0 mul8s_compare::ok#4 ] ( main:2::mul8s_compare:15 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s_compare::mn#0 mul8s_compare::ok#4 ] ) always clobbers reg byte a -Statement [49] *((const byte*) BGCOL#0) ← (byte) 2 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s_compare::mn#0 ] ( main:2::mul8s_compare:15 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s_compare::mn#0 ] ) always clobbers reg byte a -Statement [52] (signed word) mul8s_error::ms#0 ← (signed word) mul8s_compare::ms#0 [ print_line_cursor#1 mul8s_compare::mf#0 mul8s_compare::mn#0 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 ] ( main:2::mul8s_compare:15 [ print_line_cursor#1 mul8s_compare::mf#0 mul8s_compare::mn#0 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 ] ) always clobbers reg byte a -Statement [53] (signed word) mul8s_error::mn#0 ← (signed word) mul8s_compare::mn#0 [ print_line_cursor#1 mul8s_compare::mf#0 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 ] ( main:2::mul8s_compare:15 [ print_line_cursor#1 mul8s_compare::mf#0 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 ] ) always clobbers reg byte a -Statement [54] (signed word) mul8s_error::mf#0 ← (signed word) mul8s_compare::mf#0 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 ] ( main:2::mul8s_compare:15 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 ] ) always clobbers reg byte a -Statement [57] (byte*~) print_char_cursor#194 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#194 ] ( main:2::mul8s_compare:15::mul8s_error:55 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#194 ] ) always clobbers reg byte a -Statement [67] (signed word) print_sword::w#1 ← (signed word) mul8s_error::ms#0 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#1 print_char_cursor#134 ] ( main:2::mul8s_compare:15::mul8s_error:55 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#1 print_char_cursor#134 ] ) always clobbers reg byte a -Statement [71] (signed word) print_sword::w#2 ← (signed word) mul8s_error::mn#0 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#2 print_char_cursor#134 ] ( main:2::mul8s_compare:15::mul8s_error:55 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#2 print_char_cursor#134 ] ) always clobbers reg byte a -Statement [75] (signed word) print_sword::w#3 ← (signed word) mul8s_error::mf#0 [ print_line_cursor#1 print_sword::w#3 print_char_cursor#134 ] ( main:2::mul8s_compare:15::mul8s_error:55 [ print_line_cursor#1 print_sword::w#3 print_char_cursor#134 ] ) always clobbers reg byte a -Statement [82] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:23 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8s_compare:15::mul8s_error:55::print_ln:78 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:241 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:232::print_ln:263 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:285 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a -Statement [83] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:23 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8s_compare:15::mul8s_error:55::print_ln:78 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:241 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:232::print_ln:263 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:285 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a -Statement [86] if((signed word) print_sword::w#4<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#134 print_sword::w#4 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_sword::w#4 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_sword::w#4 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76 [ print_line_cursor#1 print_char_cursor#134 print_sword::w#4 ] ) always clobbers reg byte a -Statement [90] (word) print_word::w#0 ← (word)(signed word) print_sword::w#6 [ print_char_cursor#19 print_word::w#0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_word::w#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_word::w#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] ) always clobbers reg byte a -Statement [95] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#4 [ print_char_cursor#19 print_sword::w#0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_sword::w#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_sword::w#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] ) always clobbers reg byte a -Statement [97] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 [ print_char_cursor#86 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_char:88 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_char:88 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_char:88 [ print_line_cursor#1 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_char:94 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_char:94 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_char:94 [ print_line_cursor#1 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102::print_char:109 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102::print_char:109 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102::print_char:109 [ print_line_cursor#11 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102::print_char:109 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102::print_char:109 [ print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104::print_char:109 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104::print_char:109 [ print_line_cursor#11 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104::print_char:109 [ print_line_cursor#11 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104::print_char:109 [ mulf_tables_cmp::kc_sqr#2 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104::print_char:109 [ print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127::print_char:109 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127::print_char:109 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245::print_char:109 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249::print_char:109 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102::print_char:112 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102::print_char:112 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102::print_char:112 [ print_line_cursor#11 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102::print_char:112 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102::print_char:112 [ print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104::print_char:112 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104::print_char:112 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104::print_char:112 [ print_line_cursor#11 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104::print_char:112 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104::print_char:112 [ print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127::print_char:112 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127::print_char:112 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245::print_char:112 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249::print_char:112 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_char:124 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_char:124 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_char:130 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_char:130 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] ) always clobbers reg byte y -Statement [101] (byte) print_byte::b#1 ← > (word) print_word::w#6 [ print_word::w#6 print_char_cursor#142 print_byte::b#1 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91 [ print_line_cursor#1 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261 [ print_line_cursor#11 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:293 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:297 [ print_word::w#6 print_char_cursor#142 print_byte::b#1 ] ) always clobbers reg byte a -Statement [103] (byte) print_byte::b#2 ← < (word) print_word::w#6 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261 [ print_line_cursor#11 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:293 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:297 [ print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a -Statement [107] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_char_cursor#143 print_byte::b#5 print_byte::$0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102 [ print_line_cursor#1 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102 [ print_line_cursor#11 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102 [ print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104 [ print_line_cursor#1 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104 [ print_line_cursor#11 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104 [ print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] ) always clobbers reg byte a -Statement [110] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102 [ print_line_cursor#1 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102 [ print_line_cursor#11 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102 [ print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104 [ print_line_cursor#11 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104 [ print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a -Statement [116] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:21 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:58 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:62 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:66 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:70 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:74 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:239 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:243 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:247 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:251 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:255 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:259 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:283 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:291 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:295 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y -Statement [118] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:21 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:58 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:62 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:66 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:70 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:74 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:239 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:243 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:247 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:251 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:255 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:259 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:283 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:291 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:295 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y -Statement [131] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 [ print_char_cursor#19 print_sbyte::b#0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_sbyte::b#0 ] ) always clobbers reg byte a -Statement [135] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8s::a#0 mul8s::b#0 mul8u::return#2 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::return#2 ] ) always clobbers reg byte a -Statement [136] (word) mul8s::m#0 ← (word) mul8u::return#2 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8s::m#0 ] ) always clobbers reg byte a -Statement [138] (byte~) mul8s::$9 ← > (word) mul8s::m#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$9 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$9 ] ) always clobbers reg byte a -Statement [139] (byte~) mul8s::$16 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) always clobbers reg byte a -Statement [143] (byte~) mul8s::$13 ← > (word) mul8s::m#5 [ mul8s::a#0 mul8s::m#5 mul8s::$13 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::m#5 mul8s::$13 ] ) always clobbers reg byte a -Statement [144] (byte~) mul8s::$17 ← (byte~) mul8s::$13 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::m#5 mul8s::$17 ] ) always clobbers reg byte a -Statement [152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::mul8s_compare:15::mul8s:40::mul8u:134 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::mul8u_compare:13::mul8u:216 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a -Statement [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8s_compare:15::mul8s:40::mul8u:134 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::mul8u_compare:13::mul8u:216 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a -Statement [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:2::mul8s_compare:15::mulf8s:35 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s::return#0 ] ) always clobbers reg byte a -Statement [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#3 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8u_prepared::return#3 ] ) always clobbers reg byte a -Statement [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [169] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a -Statement [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a -Statement [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a -Statement [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a +Statement [18] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 [ print_char_cursor#193 print_line_cursor#1 ] ( main:2::mul8s_compare:15 [ print_char_cursor#193 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [25] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:21 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:75 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:66::print_ln:97 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:154 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a +Statement [26] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:21 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:75 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:66::print_ln:97 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:154 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a +Statement [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:19 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:73 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:77 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:81 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:85 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:89 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:93 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:152 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:160 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:164 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y +Statement [32] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:19 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:73 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:77 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:81 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:85 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:89 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:93 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:152 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:160 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:164 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y +Statement [41] (word) muls8u::return#2 ← (word) muls8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ) always clobbers reg byte a +Statement [42] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ) always clobbers reg byte a +Statement [46] (word) mulf8u::return#2 ← (word) mulf8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ) always clobbers reg byte a +Statement [47] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ) always clobbers reg byte a +Statement [51] (word) mul8u::return#3 ← (word) mul8u::res#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ) always clobbers reg byte a +Statement [52] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a +Statement [53] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a +Statement [56] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ) always clobbers reg byte a +Statement [60] *((const byte*) BGCOL#0) ← (byte) 2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a +Statement [63] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ) always clobbers reg byte a +Statement [64] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ) always clobbers reg byte a +Statement [65] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a +Statement [86] (word) print_word::w#3 ← (word) mul8u_error::ms#0 [ print_char_cursor#134 print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#3 ] ( main:2::mul8u_compare:13::mul8u_error:66 [ print_char_cursor#134 print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#3 ] ) always clobbers reg byte a +Statement [90] (word) print_word::w#4 ← (word) mul8u_error::mn#0 [ print_char_cursor#134 print_line_cursor#11 mul8u_error::mf#0 print_word::w#4 ] ( main:2::mul8u_compare:13::mul8u_error:66 [ print_char_cursor#134 print_line_cursor#11 mul8u_error::mf#0 print_word::w#4 ] ) always clobbers reg byte a +Statement [94] (word) print_word::w#5 ← (word) mul8u_error::mf#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ( main:2::mul8u_compare:13::mul8u_error:66 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ) always clobbers reg byte a +Statement [100] (byte) print_byte::b#1 ← > (word) print_word::w#6 [ print_char_cursor#134 print_word::w#6 print_byte::b#1 ] ( main:2::mul8u_compare:13::mul8u_error:66::print_word:87 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_word::w#6 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_word::w#6 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95 [ print_line_cursor#11 print_char_cursor#134 print_word::w#6 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:162 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_word::w#6 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:166 [ print_char_cursor#134 print_word::w#6 print_byte::b#1 ] ) always clobbers reg byte a +Statement [102] (byte) print_byte::b#2 ← < (word) print_word::w#6 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::mul8u_compare:13::mul8u_error:66::print_word:87 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95 [ print_line_cursor#11 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:162 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:166 [ print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a +Statement [106] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_byte::b#5 print_char_cursor#143 print_byte::$0 ] ( main:2::mul8u_compare:13::mul8u_error:66::print_byte:79 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_byte:83 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:101 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:101 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:101 [ print_line_cursor#11 print_word::w#6 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:101 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:101 [ print_word::w#6 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:103 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:103 [ print_line_cursor#11 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:103 [ print_line_cursor#11 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:103 [ mulf_tables_cmp::kc_sqr#2 print_byte::b#5 print_char_cursor#143 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:103 [ print_byte::b#5 print_char_cursor#143 print_byte::$0 ] ) always clobbers reg byte a +Statement [109] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::mul8u_compare:13::mul8u_error:66::print_byte:79 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_byte:83 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:101 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:101 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:101 [ print_line_cursor#11 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:101 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:101 [ print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:103 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:103 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:103 [ print_line_cursor#11 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:103 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:103 [ print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a +Statement [114] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 [ print_char_cursor#86 ] ( main:2::mul8u_compare:13::mul8u_error:66::print_byte:79::print_char:108 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_byte:83::print_char:108 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:101::print_char:108 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:101::print_char:108 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:101::print_char:108 [ print_line_cursor#11 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:101::print_char:108 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:101::print_char:108 [ print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:103::print_char:108 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:103::print_char:108 [ print_line_cursor#11 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:103::print_char:108 [ print_line_cursor#11 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:103::print_char:108 [ mulf_tables_cmp::kc_sqr#2 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:103::print_char:108 [ print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_byte:79::print_char:111 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_byte:83::print_char:111 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:101::print_char:111 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:101::print_char:111 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:101::print_char:111 [ print_line_cursor#11 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:101::print_char:111 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:101::print_char:111 [ print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:87::print_byte:103::print_char:111 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:91::print_byte:103::print_char:111 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:66::print_word:95::print_byte:103::print_char:111 [ print_line_cursor#11 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:162::print_byte:103::print_char:111 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:166::print_byte:103::print_char:111 [ print_char_cursor#86 ] ) always clobbers reg byte y +Statement [121] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::mul8u_compare:13::mul8u:50 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [123] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8u_compare:13::mul8u:50 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [131] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8u_prepared::return#2 ] ( main:2::mul8u_compare:13::mulf8u:45 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a +Statement [132] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 [ mulf8u::return#0 ] ( main:2::mul8u_compare:13::mulf8u:45 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#0 ] ) always clobbers reg byte a Statement asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x -Statement [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) [ mulf8u_prepared::return#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162::mulf8u_prepared:166 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:2::mul8u_compare:13::mulf8u:211::mulf8u_prepared:268 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a +Statement [136] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) [ mulf8u_prepared::return#0 ] ( main:2::mul8u_compare:13::mulf8u:45::mulf8u_prepared:130 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } always clobbers reg byte a -Statement [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::j#2 muls8s::m#1 ] ( main:2::mul8s_compare:15::muls8s:30 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::a#0 muls8s::b#0 muls8s::j#2 muls8s::m#1 ] ) always clobbers reg byte a -Statement [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#2 ] ( main:2::mul8s_compare:15::muls8s:30 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#2 ] ) always clobbers reg byte a -Statement [207] (word) muls8u::return#2 ← (word) muls8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ) always clobbers reg byte a -Statement [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ) always clobbers reg byte a -Statement [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ) always clobbers reg byte a -Statement [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ) always clobbers reg byte a -Statement [217] (word) mul8u::return#3 ← (word) mul8u::res#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ) always clobbers reg byte a -Statement [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a -Statement [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a -Statement [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ) always clobbers reg byte a -Statement [226] *((const byte*) BGCOL#0) ← (byte) 2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a -Statement [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ) always clobbers reg byte a -Statement [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ) always clobbers reg byte a -Statement [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a -Statement [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#3 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13::mul8u_error:232 [ print_char_cursor#134 print_line_cursor#11 print_word::w#3 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a -Statement [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#4 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13::mul8u_error:232 [ print_char_cursor#134 print_line_cursor#11 print_word::w#4 mul8u_error::mf#0 ] ) always clobbers reg byte a -Statement [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ( main:2::mul8u_compare:13::mul8u_error:232 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ) always clobbers reg byte a -Statement [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8u_prepared::return#2 ] ( main:2::mul8u_compare:13::mulf8u:211 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a -Statement [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 [ mulf8u::return#0 ] ( main:2::mul8u_compare:13::mulf8u:211 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#0 ] ) always clobbers reg byte a -Statement [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 [ muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ( main:2::mul8u_compare:13::muls8u:206 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ) always clobbers reg byte a -Statement [281] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a -Statement [286] (byte*~) print_char_cursor#230 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#230 ] ( main:2::mulf_tables_cmp:11 [ print_line_cursor#1 print_char_cursor#230 ] ) always clobbers reg byte a -Statement [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a reg byte y -Statement [290] *((const byte*) BGCOL#0) ← (byte) 2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a -Statement [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ) always clobbers reg byte a -Statement [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 [ print_char_cursor#134 print_word::w#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#2 ] ) always clobbers reg byte a +Statement [146] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 [ muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ( main:2::mul8u_compare:13::muls8u:40 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ) always clobbers reg byte a +Statement [150] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a +Statement [155] (byte*~) print_char_cursor#213 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#213 ] ( main:2::mulf_tables_cmp:11 [ print_line_cursor#1 print_char_cursor#213 ] ) always clobbers reg byte a +Statement [158] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a reg byte y +Statement [159] *((const byte*) BGCOL#0) ← (byte) 2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a +Statement [161] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ) always clobbers reg byte a +Statement [165] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 [ print_char_cursor#134 print_word::w#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#2 ] ) always clobbers reg byte a Statement asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- } always clobbers reg byte a reg byte x reg byte y -Statement [301] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [302] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [303] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [304] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a -Statement [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a -Statement [311] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a -Statement [312] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a -Statement [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a -Statement [323] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$9 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$9 ] ) always clobbers reg byte a -Statement [328] (byte~) mulf_init::$12 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$12 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$12 ] ) always clobbers reg byte a -Statement [329] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [330] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$13 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$13 ] ) always clobbers reg byte a -Statement [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a -Statement [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:336 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:336 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_BYTE:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] : zp ZP_BYTE:2 , reg byte y , -Potential registers zp ZP_BYTE:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] : zp ZP_BYTE:3 , reg byte y , -Potential registers zp ZP_BYTE:4 [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:5 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] : zp ZP_WORD:5 , -Potential registers zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 ] : zp ZP_WORD:7 , -Potential registers zp ZP_BYTE:9 [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:10 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] : zp ZP_WORD:10 , -Potential registers zp ZP_BYTE:12 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] : zp ZP_BYTE:12 , reg byte x , -Potential registers zp ZP_WORD:13 [ print_char_cursor#155 print_char_cursor#193 print_char_cursor#194 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#230 ] : zp ZP_WORD:13 , -Potential registers zp ZP_WORD:15 [ print_str::str#16 print_str::str#18 print_str::str#0 ] : zp ZP_WORD:15 , -Potential registers zp ZP_BYTE:17 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , -Potential registers zp ZP_WORD:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] : zp ZP_WORD:18 , -Potential registers zp ZP_BYTE:20 [ mul8u::b#0 ] : zp ZP_BYTE:20 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:21 [ mul8u::b#1 ] : zp ZP_BYTE:21 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:22 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp ZP_WORD:23 , -Potential registers zp ZP_WORD:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] : zp ZP_WORD:25 , -Potential registers zp ZP_WORD:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] : zp ZP_WORD:27 , -Potential registers zp ZP_BYTE:29 [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:30 [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:31 [ muls8s::j#2 muls8s::j#1 ] : zp ZP_BYTE:31 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:32 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] : zp ZP_WORD:32 , -Potential registers zp ZP_BYTE:34 [ muls8s::i#2 muls8s::i#1 ] : zp ZP_BYTE:34 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] : zp ZP_BYTE:35 , reg byte y , -Potential registers zp ZP_BYTE:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] : zp ZP_BYTE:36 , reg byte y , -Potential registers zp ZP_BYTE:37 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] : zp ZP_BYTE:37 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:38 [ muls8u::i#2 muls8u::i#1 ] : zp ZP_BYTE:38 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:39 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] : zp ZP_WORD:39 , -Potential registers zp ZP_WORD:41 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] : zp ZP_WORD:41 , -Potential registers zp ZP_WORD:43 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] : zp ZP_WORD:43 , -Potential registers zp ZP_WORD:45 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] : zp ZP_WORD:45 , -Potential registers zp ZP_BYTE:47 [ mulf_init::c#2 mulf_init::c#1 ] : zp ZP_BYTE:47 , reg byte x , -Potential registers zp ZP_WORD:48 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] : zp ZP_WORD:48 , -Potential registers zp ZP_BYTE:50 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] : zp ZP_BYTE:50 , reg byte x , -Potential registers zp ZP_WORD:51 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] : zp ZP_WORD:51 , -Potential registers zp ZP_BYTE:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] : zp ZP_BYTE:53 , reg byte x , -Potential registers zp ZP_WORD:54 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp ZP_WORD:54 , -Potential registers zp ZP_BYTE:56 [ mulf_init::dir#2 mulf_init::dir#4 ] : zp ZP_BYTE:56 , reg byte x , -Potential registers zp ZP_WORD:57 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp ZP_WORD:57 , -Potential registers zp ZP_WORD:59 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:59 , -Potential registers zp ZP_BYTE:61 [ muls8s::a#0 ] : zp ZP_BYTE:61 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:62 [ muls8s::b#0 ] : zp ZP_BYTE:62 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:63 [ muls8s::return#2 ] : zp ZP_WORD:63 , -Potential registers zp ZP_WORD:65 [ mul8s_compare::ms#0 ] : zp ZP_WORD:65 , -Potential registers zp ZP_BYTE:67 [ mulf8s::a#0 ] : zp ZP_BYTE:67 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:68 [ mulf8s::b#0 ] : zp ZP_BYTE:68 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:69 [ mulf8s::return#2 ] : zp ZP_WORD:69 , -Potential registers zp ZP_WORD:71 [ mul8s_compare::mf#0 ] : zp ZP_WORD:71 , -Potential registers zp ZP_BYTE:73 [ mul8s::a#0 ] : zp ZP_BYTE:73 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:74 [ mul8s::b#0 ] : zp ZP_BYTE:74 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:75 [ mul8s_compare::mn#0 ] : zp ZP_WORD:75 , -Potential registers zp ZP_BYTE:77 [ mul8s_error::a#0 ] : zp ZP_BYTE:77 , reg byte x , -Potential registers zp ZP_BYTE:78 [ mul8s_error::b#0 ] : zp ZP_BYTE:78 , reg byte x , -Potential registers zp ZP_WORD:79 [ mul8s_error::ms#0 ] : zp ZP_WORD:79 , -Potential registers zp ZP_WORD:81 [ mul8s_error::mn#0 ] : zp ZP_WORD:81 , -Potential registers zp ZP_WORD:83 [ mul8s_error::mf#0 ] : zp ZP_WORD:83 , -Potential registers zp ZP_BYTE:85 [ print_byte::$0 ] : zp ZP_BYTE:85 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:86 [ print_byte::$2 ] : zp ZP_BYTE:86 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:87 [ mul8u::return#2 ] : zp ZP_WORD:87 , -Potential registers zp ZP_BYTE:89 [ mul8s::$9 ] : zp ZP_BYTE:89 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:90 [ mul8s::$16 ] : zp ZP_BYTE:90 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:91 [ mul8s::$13 ] : zp ZP_BYTE:91 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:92 [ mul8s::$17 ] : zp ZP_BYTE:92 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:93 [ mul8u::$1 ] : zp ZP_BYTE:93 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:94 [ mulf8s_prepared::b#0 ] : zp ZP_BYTE:94 , reg byte y , -Potential registers zp ZP_WORD:95 [ mulf8s::return#0 ] : zp ZP_WORD:95 , -Potential registers zp ZP_WORD:97 [ mulf8u_prepared::return#3 ] : zp ZP_WORD:97 , -Potential registers zp ZP_BYTE:99 [ mulf8s_prepared::$8 ] : zp ZP_BYTE:99 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:100 [ mulf8s_prepared::$15 ] : zp ZP_BYTE:100 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:101 [ mulf8s_prepared::$12 ] : zp ZP_BYTE:101 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:102 [ mulf8s_prepared::$16 ] : zp ZP_BYTE:102 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:103 [ mulf8u_prepared::return#0 ] : zp ZP_WORD:103 , -Potential registers zp ZP_BYTE:105 [ muls8u::a#0 ] : zp ZP_BYTE:105 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:106 [ muls8u::b#0 ] : zp ZP_BYTE:106 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:107 [ muls8u::return#2 ] : zp ZP_WORD:107 , -Potential registers zp ZP_WORD:109 [ mul8u_compare::ms#0 ] : zp ZP_WORD:109 , -Potential registers zp ZP_BYTE:111 [ mulf8u::a#0 ] : zp ZP_BYTE:111 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:112 [ mulf8u::b#0 ] : zp ZP_BYTE:112 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:113 [ mulf8u::return#2 ] : zp ZP_WORD:113 , -Potential registers zp ZP_WORD:115 [ mul8u_compare::mf#0 ] : zp ZP_WORD:115 , -Potential registers zp ZP_WORD:117 [ mul8u::return#3 ] : zp ZP_WORD:117 , -Potential registers zp ZP_WORD:119 [ mul8u_compare::mn#0 ] : zp ZP_WORD:119 , -Potential registers zp ZP_BYTE:121 [ mul8u_error::a#0 ] : zp ZP_BYTE:121 , reg byte x , -Potential registers zp ZP_BYTE:122 [ mul8u_error::b#0 ] : zp ZP_BYTE:122 , reg byte x , -Potential registers zp ZP_WORD:123 [ mul8u_error::ms#0 ] : zp ZP_WORD:123 , -Potential registers zp ZP_WORD:125 [ mul8u_error::mn#0 ] : zp ZP_WORD:125 , -Potential registers zp ZP_WORD:127 [ mul8u_error::mf#0 ] : zp ZP_WORD:127 , -Potential registers zp ZP_WORD:129 [ mulf8u_prepared::return#2 ] : zp ZP_WORD:129 , -Potential registers zp ZP_WORD:131 [ mulf8u::return#0 ] : zp ZP_WORD:131 , -Potential registers zp ZP_BYTE:133 [ mulf_init::$9 ] : zp ZP_BYTE:133 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:134 [ mulf_init::$12 ] : zp ZP_BYTE:134 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:135 [ mulf_init::$13 ] : zp ZP_BYTE:135 , reg byte a , reg byte x , reg byte y , +Statement [170] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [171] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [172] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [173] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [177] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a +Statement [179] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a +Statement [180] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a +Statement [181] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a +Statement [183] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [184] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [186] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [192] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$9 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$9 ] ) always clobbers reg byte a +Statement [197] (byte~) mulf_init::$12 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$12 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$12 ] ) always clobbers reg byte a +Statement [198] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [199] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$13 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$13 ] ) always clobbers reg byte a +Statement [200] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [202] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a +Statement [209] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:205 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [211] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:205 [ memset::dst#1 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] : zp ZP_WORD:2 , +Potential registers zp ZP_WORD:4 [ print_str::str#16 print_str::str#18 print_str::str#0 ] : zp ZP_WORD:4 , +Potential registers zp ZP_BYTE:6 [ mul8u_compare::a#7 mul8u_compare::a#1 ] : zp ZP_BYTE:6 , reg byte y , +Potential registers zp ZP_BYTE:7 [ mul8u_compare::b#10 mul8u_compare::b#1 ] : zp ZP_BYTE:7 , reg byte y , +Potential registers zp ZP_BYTE:8 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:9 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 ] : zp ZP_WORD:9 , +Potential registers zp ZP_BYTE:11 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#1 print_byte::b#2 ] : zp ZP_BYTE:11 , reg byte x , +Potential registers zp ZP_BYTE:12 [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:13 [ print_char_cursor#86 print_char_cursor#143 print_char_cursor#155 print_char_cursor#193 print_char_cursor#100 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#1 print_char_cursor#213 ] : zp ZP_WORD:13 , +Potential registers zp ZP_BYTE:15 [ mul8u::a#3 mul8u::a#2 mul8u::a#0 ] : zp ZP_BYTE:15 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:16 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp ZP_WORD:16 , +Potential registers zp ZP_WORD:18 [ mul8u::mb#2 mul8u::mb#1 ] : zp ZP_WORD:18 , +Potential registers zp ZP_BYTE:20 [ mul8u::b#1 ] : zp ZP_BYTE:20 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:21 [ muls8u::i#2 muls8u::i#1 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:22 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] : zp ZP_WORD:22 , +Potential registers zp ZP_WORD:24 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] : zp ZP_WORD:24 , +Potential registers zp ZP_WORD:26 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] : zp ZP_WORD:26 , +Potential registers zp ZP_WORD:28 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] : zp ZP_WORD:28 , +Potential registers zp ZP_BYTE:30 [ mulf_init::c#2 mulf_init::c#1 ] : zp ZP_BYTE:30 , reg byte x , +Potential registers zp ZP_WORD:31 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] : zp ZP_WORD:31 , +Potential registers zp ZP_BYTE:33 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] : zp ZP_BYTE:33 , reg byte x , +Potential registers zp ZP_WORD:34 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] : zp ZP_WORD:34 , +Potential registers zp ZP_BYTE:36 [ mulf_init::x_255#2 mulf_init::x_255#1 ] : zp ZP_BYTE:36 , reg byte x , +Potential registers zp ZP_WORD:37 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp ZP_WORD:37 , +Potential registers zp ZP_BYTE:39 [ mulf_init::dir#2 mulf_init::dir#4 ] : zp ZP_BYTE:39 , reg byte x , +Potential registers zp ZP_WORD:40 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp ZP_WORD:40 , +Potential registers zp ZP_WORD:42 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:42 , +Potential registers zp ZP_BYTE:44 [ muls8u::a#0 ] : zp ZP_BYTE:44 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:45 [ muls8u::b#0 ] : zp ZP_BYTE:45 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:46 [ muls8u::return#2 ] : zp ZP_WORD:46 , +Potential registers zp ZP_WORD:48 [ mul8u_compare::ms#0 ] : zp ZP_WORD:48 , +Potential registers zp ZP_BYTE:50 [ mulf8u::a#0 ] : zp ZP_BYTE:50 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:51 [ mulf8u::b#0 ] : zp ZP_BYTE:51 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:52 [ mulf8u::return#2 ] : zp ZP_WORD:52 , +Potential registers zp ZP_WORD:54 [ mul8u_compare::mf#0 ] : zp ZP_WORD:54 , +Potential registers zp ZP_WORD:56 [ mul8u::return#3 ] : zp ZP_WORD:56 , +Potential registers zp ZP_WORD:58 [ mul8u_compare::mn#0 ] : zp ZP_WORD:58 , +Potential registers zp ZP_BYTE:60 [ mul8u_error::a#0 ] : zp ZP_BYTE:60 , reg byte x , +Potential registers zp ZP_BYTE:61 [ mul8u_error::b#0 ] : zp ZP_BYTE:61 , reg byte x , +Potential registers zp ZP_WORD:62 [ mul8u_error::ms#0 ] : zp ZP_WORD:62 , +Potential registers zp ZP_WORD:64 [ mul8u_error::mn#0 ] : zp ZP_WORD:64 , +Potential registers zp ZP_WORD:66 [ mul8u_error::mf#0 ] : zp ZP_WORD:66 , +Potential registers zp ZP_BYTE:68 [ print_byte::$0 ] : zp ZP_BYTE:68 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:69 [ print_byte::$2 ] : zp ZP_BYTE:69 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:70 [ mul8u::$1 ] : zp ZP_BYTE:70 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:71 [ mulf8u_prepare::a#0 ] : zp ZP_BYTE:71 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:72 [ mulf8u_prepared::b#0 ] : zp ZP_BYTE:72 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:73 [ mulf8u_prepared::return#2 ] : zp ZP_WORD:73 , +Potential registers zp ZP_WORD:75 [ mulf8u::return#0 ] : zp ZP_WORD:75 , +Potential registers zp ZP_WORD:77 [ mulf8u_prepared::return#0 ] : zp ZP_WORD:77 , +Potential registers zp ZP_BYTE:79 [ mulf_init::$9 ] : zp ZP_BYTE:79 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:80 [ mulf_init::$12 ] : zp ZP_BYTE:80 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:81 [ mulf_init::$13 ] : zp ZP_BYTE:81 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [muls8s] 5,706: zp ZP_WORD:32 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] 3,003: zp ZP_BYTE:31 [ muls8s::j#2 muls8s::j#1 ] 3,003: zp ZP_BYTE:34 [ muls8s::i#2 muls8s::i#1 ] 202: zp ZP_WORD:63 [ muls8s::return#2 ] 191.18: zp ZP_BYTE:62 [ muls8s::b#0 ] 175.58: zp ZP_BYTE:61 [ muls8s::a#0 ] -Uplift Scope [mul8u] 3,446.71: zp ZP_WORD:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 2,536.29: zp ZP_WORD:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 2,002: zp ZP_BYTE:93 [ mul8u::$1 ] 1,876.67: zp ZP_BYTE:22 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] 202: zp ZP_BYTE:21 [ mul8u::b#1 ] 202: zp ZP_WORD:117 [ mul8u::return#3 ] 4: zp ZP_BYTE:20 [ mul8u::b#0 ] 4: zp ZP_WORD:87 [ mul8u::return#2 ] -Uplift Scope [muls8u] 3,003: zp ZP_BYTE:38 [ muls8u::i#2 muls8u::i#1 ] 2,869.83: zp ZP_WORD:39 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] 202: zp ZP_WORD:107 [ muls8u::return#2 ] 183.67: zp ZP_BYTE:106 [ muls8u::b#0 ] 157.71: zp ZP_BYTE:105 [ muls8u::a#0 ] -Uplift Scope [mul8s_compare] 235.67: zp ZP_BYTE:4 [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] 226.32: zp ZP_BYTE:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] 34.52: zp ZP_BYTE:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] 17: zp ZP_WORD:75 [ mul8s_compare::mn#0 ] 15.25: zp ZP_WORD:65 [ mul8s_compare::ms#0 ] 12: zp ZP_WORD:71 [ mul8s_compare::mf#0 ] -Uplift Scope [mul8u_compare] 235.67: zp ZP_BYTE:37 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] 171.78: zp ZP_BYTE:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] 28.61: zp ZP_BYTE:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] 17: zp ZP_WORD:119 [ mul8u_compare::mn#0 ] 14.52: zp ZP_WORD:109 [ mul8u_compare::ms#0 ] 11.33: zp ZP_WORD:115 [ mul8u_compare::mf#0 ] -Uplift Scope [mulf8u] 202: zp ZP_WORD:113 [ mulf8u::return#2 ] 51.5: zp ZP_BYTE:111 [ mulf8u::a#0 ] 34.33: zp ZP_BYTE:112 [ mulf8u::b#0 ] 34.33: zp ZP_WORD:131 [ mulf8u::return#0 ] -Uplift Scope [mulf8s] 202: zp ZP_WORD:69 [ mulf8s::return#2 ] 34.33: zp ZP_WORD:95 [ mulf8s::return#0 ] 33.67: zp ZP_BYTE:67 [ mulf8s::a#0 ] 25.75: zp ZP_BYTE:68 [ mulf8s::b#0 ] -Uplift Scope [mulf_init] 47.67: zp ZP_WORD:57 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 26.89: zp ZP_WORD:51 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 25.14: zp ZP_WORD:45 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 23.1: zp ZP_BYTE:50 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp ZP_BYTE:133 [ mulf_init::$9 ] 22: zp ZP_BYTE:134 [ mulf_init::$12 ] 22: zp ZP_BYTE:135 [ mulf_init::$13 ] 15.4: zp ZP_BYTE:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 15.12: zp ZP_BYTE:56 [ mulf_init::dir#2 mulf_init::dir#4 ] 13.54: zp ZP_BYTE:47 [ mulf_init::c#2 mulf_init::c#1 ] 11.92: zp ZP_WORD:54 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 10.08: zp ZP_WORD:48 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -Uplift Scope [] 77.65: zp ZP_WORD:13 [ print_char_cursor#155 print_char_cursor#193 print_char_cursor#194 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#230 ] 34.74: zp ZP_WORD:5 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] -Uplift Scope [mul8s] 13.83: zp ZP_WORD:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] 9.36: zp ZP_BYTE:74 [ mul8s::b#0 ] 7.36: zp ZP_BYTE:73 [ mul8s::a#0 ] 4: zp ZP_BYTE:89 [ mul8s::$9 ] 4: zp ZP_BYTE:90 [ mul8s::$16 ] 4: zp ZP_BYTE:91 [ mul8s::$13 ] 4: zp ZP_BYTE:92 [ mul8s::$17 ] -Uplift Scope [mulf_tables_cmp] 26.4: zp ZP_WORD:41 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] 17.6: zp ZP_WORD:43 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:59 [ memset::dst#2 memset::dst#1 ] -Uplift Scope [print_str] 35.5: zp ZP_WORD:15 [ print_str::str#16 print_str::str#18 print_str::str#0 ] -Uplift Scope [print_byte] 23.5: zp ZP_BYTE:12 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] 4: zp ZP_BYTE:85 [ print_byte::$0 ] 4: zp ZP_BYTE:86 [ print_byte::$2 ] -Uplift Scope [mulf8s_prepared] 13.83: zp ZP_WORD:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] 4: zp ZP_BYTE:99 [ mulf8s_prepared::$8 ] 4: zp ZP_BYTE:100 [ mulf8s_prepared::$15 ] 4: zp ZP_BYTE:101 [ mulf8s_prepared::$12 ] 4: zp ZP_BYTE:102 [ mulf8s_prepared::$16 ] 0.4: zp ZP_BYTE:94 [ mulf8s_prepared::b#0 ] -Uplift Scope [print_word] 29.33: zp ZP_WORD:10 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] -Uplift Scope [mulf8u_prepared] 14: zp ZP_BYTE:29 [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] 4: zp ZP_WORD:97 [ mulf8u_prepared::return#3 ] 4: zp ZP_WORD:129 [ mulf8u_prepared::return#2 ] 1.5: zp ZP_WORD:103 [ mulf8u_prepared::return#0 ] -Uplift Scope [print_sword] 22: zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 ] -Uplift Scope [print_sbyte] 17.67: zp ZP_BYTE:17 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] -Uplift Scope [print_char] 14: zp ZP_BYTE:9 [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -Uplift Scope [mulf8u_prepare] 14: zp ZP_BYTE:30 [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] -Uplift Scope [mul8u_error] 0.57: zp ZP_BYTE:121 [ mul8u_error::a#0 ] 0.4: zp ZP_BYTE:122 [ mul8u_error::b#0 ] 0.31: zp ZP_WORD:123 [ mul8u_error::ms#0 ] 0.25: zp ZP_WORD:125 [ mul8u_error::mn#0 ] 0.21: zp ZP_WORD:127 [ mul8u_error::mf#0 ] -Uplift Scope [mul8s_error] 0.57: zp ZP_BYTE:77 [ mul8s_error::a#0 ] 0.4: zp ZP_BYTE:78 [ mul8s_error::b#0 ] 0.31: zp ZP_WORD:79 [ mul8s_error::ms#0 ] 0.25: zp ZP_WORD:81 [ mul8s_error::mn#0 ] 0.21: zp ZP_WORD:83 [ mul8s_error::mf#0 ] +Uplift Scope [mul8u] 3,520.33: zp ZP_WORD:16 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 2,431.29: zp ZP_WORD:18 [ mul8u::mb#2 mul8u::mb#1 ] 2,002: zp ZP_BYTE:70 [ mul8u::$1 ] 1,703: zp ZP_BYTE:15 [ mul8u::a#3 mul8u::a#2 mul8u::a#0 ] 202: zp ZP_WORD:56 [ mul8u::return#3 ] 51.5: zp ZP_BYTE:20 [ mul8u::b#1 ] +Uplift Scope [muls8u] 3,003: zp ZP_BYTE:21 [ muls8u::i#2 muls8u::i#1 ] 2,869.83: zp ZP_WORD:22 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] 202: zp ZP_WORD:46 [ muls8u::return#2 ] 183.67: zp ZP_BYTE:45 [ muls8u::b#0 ] 157.71: zp ZP_BYTE:44 [ muls8u::a#0 ] +Uplift Scope [mul8u_compare] 235.67: zp ZP_BYTE:8 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] 171.78: zp ZP_BYTE:7 [ mul8u_compare::b#10 mul8u_compare::b#1 ] 28.61: zp ZP_BYTE:6 [ mul8u_compare::a#7 mul8u_compare::a#1 ] 17: zp ZP_WORD:58 [ mul8u_compare::mn#0 ] 14.52: zp ZP_WORD:48 [ mul8u_compare::ms#0 ] 11.33: zp ZP_WORD:54 [ mul8u_compare::mf#0 ] +Uplift Scope [mulf8u] 202: zp ZP_WORD:52 [ mulf8u::return#2 ] 51.5: zp ZP_BYTE:50 [ mulf8u::a#0 ] 34.33: zp ZP_BYTE:51 [ mulf8u::b#0 ] 34.33: zp ZP_WORD:75 [ mulf8u::return#0 ] +Uplift Scope [mulf_init] 47.67: zp ZP_WORD:40 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 26.89: zp ZP_WORD:34 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 25.14: zp ZP_WORD:28 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 23.1: zp ZP_BYTE:33 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp ZP_BYTE:79 [ mulf_init::$9 ] 22: zp ZP_BYTE:80 [ mulf_init::$12 ] 22: zp ZP_BYTE:81 [ mulf_init::$13 ] 15.4: zp ZP_BYTE:36 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 15.12: zp ZP_BYTE:39 [ mulf_init::dir#2 mulf_init::dir#4 ] 13.54: zp ZP_BYTE:30 [ mulf_init::c#2 mulf_init::c#1 ] 11.92: zp ZP_WORD:37 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 10.08: zp ZP_WORD:31 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplift Scope [] 51.92: zp ZP_WORD:13 [ print_char_cursor#86 print_char_cursor#143 print_char_cursor#155 print_char_cursor#193 print_char_cursor#100 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#1 print_char_cursor#213 ] 34.66: zp ZP_WORD:2 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] +Uplift Scope [mulf_tables_cmp] 26.4: zp ZP_WORD:24 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] 17.6: zp ZP_WORD:26 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] +Uplift Scope [print_str] 35.5: zp ZP_WORD:4 [ print_str::str#16 print_str::str#18 print_str::str#0 ] +Uplift Scope [memset] 33: zp ZP_WORD:42 [ memset::dst#4 memset::dst#1 ] +Uplift Scope [print_byte] 19: zp ZP_BYTE:11 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#1 print_byte::b#2 ] 4: zp ZP_BYTE:68 [ print_byte::$0 ] 4: zp ZP_BYTE:69 [ print_byte::$2 ] +Uplift Scope [print_word] 24.67: zp ZP_WORD:9 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 ] +Uplift Scope [print_char] 14: zp ZP_BYTE:12 [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] +Uplift Scope [mulf8u_prepared] 4: zp ZP_BYTE:72 [ mulf8u_prepared::b#0 ] 4: zp ZP_WORD:73 [ mulf8u_prepared::return#2 ] 1.33: zp ZP_WORD:77 [ mulf8u_prepared::return#0 ] +Uplift Scope [mulf8u_prepare] 4: zp ZP_BYTE:71 [ mulf8u_prepare::a#0 ] +Uplift Scope [mul8u_error] 0.57: zp ZP_BYTE:60 [ mul8u_error::a#0 ] 0.4: zp ZP_BYTE:61 [ mul8u_error::b#0 ] 0.31: zp ZP_WORD:62 [ mul8u_error::ms#0 ] 0.25: zp ZP_WORD:64 [ mul8u_error::mn#0 ] 0.21: zp ZP_WORD:66 [ mul8u_error::mf#0 ] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] Uplift Scope [main] Uplift Scope [mulf_init_asm] +Uplift Scope [mul8s_compare] -Uplifting [muls8s] best 312443 combination zp ZP_WORD:32 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] reg byte y [ muls8s::j#2 muls8s::j#1 ] reg byte y [ muls8s::i#2 muls8s::i#1 ] zp ZP_WORD:63 [ muls8s::return#2 ] reg byte x [ muls8s::b#0 ] zp ZP_BYTE:61 [ muls8s::a#0 ] -Uplifting [mul8u] best 302831 combination zp ZP_WORD:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] reg byte a [ mul8u::b#1 ] zp ZP_WORD:117 [ mul8u::return#3 ] reg byte a [ mul8u::b#0 ] zp ZP_WORD:87 [ mul8u::return#2 ] -Limited combination testing to 100 combinations of 192 possible. -Uplifting [muls8u] best 292531 combination reg byte y [ muls8u::i#2 muls8u::i#1 ] zp ZP_WORD:39 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] zp ZP_WORD:107 [ muls8u::return#2 ] reg byte x [ muls8u::b#0 ] zp ZP_BYTE:105 [ muls8u::a#0 ] -Uplifting [mul8s_compare] best 291331 combination reg byte x [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] zp ZP_BYTE:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] zp ZP_BYTE:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] zp ZP_WORD:75 [ mul8s_compare::mn#0 ] zp ZP_WORD:65 [ mul8s_compare::ms#0 ] zp ZP_WORD:71 [ mul8s_compare::mf#0 ] -Uplifting [mul8u_compare] best 290131 combination reg byte x [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] zp ZP_BYTE:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] zp ZP_BYTE:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] zp ZP_WORD:119 [ mul8u_compare::mn#0 ] zp ZP_WORD:109 [ mul8u_compare::ms#0 ] zp ZP_WORD:115 [ mul8u_compare::mf#0 ] -Uplifting [mulf8u] best 289525 combination zp ZP_WORD:113 [ mulf8u::return#2 ] reg byte a [ mulf8u::a#0 ] reg byte x [ mulf8u::b#0 ] zp ZP_WORD:131 [ mulf8u::return#0 ] -Uplifting [mulf8s] best 288919 combination zp ZP_WORD:69 [ mulf8s::return#2 ] zp ZP_WORD:95 [ mulf8s::return#0 ] reg byte a [ mulf8s::a#0 ] reg byte x [ mulf8s::b#0 ] -Uplifting [mulf_init] best 288669 combination zp ZP_WORD:57 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp ZP_WORD:51 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp ZP_WORD:45 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$9 ] reg byte a [ mulf_init::$12 ] reg byte a [ mulf_init::$13 ] zp ZP_BYTE:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp ZP_BYTE:56 [ mulf_init::dir#2 mulf_init::dir#4 ] zp ZP_BYTE:47 [ mulf_init::c#2 mulf_init::c#1 ] zp ZP_WORD:54 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp ZP_WORD:48 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplifting [mul8u] best 164920 combination zp ZP_WORD:16 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:18 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#3 mul8u::a#2 mul8u::a#0 ] zp ZP_WORD:56 [ mul8u::return#3 ] reg byte a [ mul8u::b#1 ] +Uplifting [muls8u] best 154620 combination reg byte y [ muls8u::i#2 muls8u::i#1 ] zp ZP_WORD:22 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] zp ZP_WORD:46 [ muls8u::return#2 ] reg byte x [ muls8u::b#0 ] zp ZP_BYTE:44 [ muls8u::a#0 ] +Uplifting [mul8u_compare] best 153420 combination reg byte x [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] zp ZP_BYTE:7 [ mul8u_compare::b#10 mul8u_compare::b#1 ] zp ZP_BYTE:6 [ mul8u_compare::a#7 mul8u_compare::a#1 ] zp ZP_WORD:58 [ mul8u_compare::mn#0 ] zp ZP_WORD:48 [ mul8u_compare::ms#0 ] zp ZP_WORD:54 [ mul8u_compare::mf#0 ] +Uplifting [mulf8u] best 152814 combination zp ZP_WORD:52 [ mulf8u::return#2 ] reg byte a [ mulf8u::a#0 ] reg byte x [ mulf8u::b#0 ] zp ZP_WORD:75 [ mulf8u::return#0 ] +Uplifting [mulf_init] best 152564 combination zp ZP_WORD:40 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp ZP_WORD:34 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp ZP_WORD:28 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$9 ] reg byte a [ mulf_init::$12 ] reg byte a [ mulf_init::$13 ] zp ZP_BYTE:36 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp ZP_BYTE:39 [ mulf_init::dir#2 mulf_init::dir#4 ] zp ZP_BYTE:30 [ mulf_init::c#2 mulf_init::c#1 ] zp ZP_WORD:37 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp ZP_WORD:31 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [] best 288669 combination zp ZP_WORD:13 [ print_char_cursor#155 print_char_cursor#193 print_char_cursor#194 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#230 ] zp ZP_WORD:5 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] -Uplifting [mul8s] best 288356 combination zp ZP_WORD:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] reg byte y [ mul8s::b#0 ] zp ZP_BYTE:73 [ mul8s::a#0 ] reg byte a [ mul8s::$9 ] reg byte a [ mul8s::$16 ] zp ZP_BYTE:91 [ mul8s::$13 ] zp ZP_BYTE:92 [ mul8s::$17 ] -Limited combination testing to 100 combinations of 2304 possible. -Uplifting [mulf_tables_cmp] best 288356 combination zp ZP_WORD:41 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] zp ZP_WORD:43 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] -Uplifting [memset] best 288356 combination zp ZP_WORD:59 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_str] best 288356 combination zp ZP_WORD:15 [ print_str::str#16 print_str::str#18 print_str::str#0 ] -Uplifting [print_byte] best 288333 combination reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -Uplifting [mulf8s_prepared] best 288309 combination zp ZP_WORD:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] reg byte a [ mulf8s_prepared::$8 ] reg byte a [ mulf8s_prepared::$15 ] reg byte a [ mulf8s_prepared::$12 ] reg byte a [ mulf8s_prepared::$16 ] zp ZP_BYTE:94 [ mulf8s_prepared::b#0 ] -Limited combination testing to 100 combinations of 512 possible. -Uplifting [print_word] best 288309 combination zp ZP_WORD:10 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] -Uplifting [mulf8u_prepared] best 288300 combination reg byte x [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] zp ZP_WORD:97 [ mulf8u_prepared::return#3 ] zp ZP_WORD:129 [ mulf8u_prepared::return#2 ] zp ZP_WORD:103 [ mulf8u_prepared::return#0 ] -Uplifting [print_sword] best 288300 combination zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 ] -Uplifting [print_sbyte] best 288288 combination reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] -Uplifting [print_char] best 288267 combination reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -Uplifting [mulf8u_prepare] best 288258 combination reg byte a [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] -Uplifting [mul8u_error] best 288252 combination reg byte x [ mul8u_error::a#0 ] zp ZP_BYTE:122 [ mul8u_error::b#0 ] zp ZP_WORD:123 [ mul8u_error::ms#0 ] zp ZP_WORD:125 [ mul8u_error::mn#0 ] zp ZP_WORD:127 [ mul8u_error::mf#0 ] -Uplifting [mul8s_error] best 288246 combination reg byte x [ mul8s_error::a#0 ] zp ZP_BYTE:78 [ mul8s_error::b#0 ] zp ZP_WORD:79 [ mul8s_error::ms#0 ] zp ZP_WORD:81 [ mul8s_error::mn#0 ] zp ZP_WORD:83 [ mul8s_error::mf#0 ] -Uplifting [RADIX] best 288246 combination -Uplifting [print_ln] best 288246 combination -Uplifting [print_cls] best 288246 combination -Uplifting [main] best 288246 combination -Uplifting [mulf_init_asm] best 288246 combination -Attempting to uplift remaining variables inzp ZP_BYTE:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] -Uplifting [mul8s_compare] best 288246 combination zp ZP_BYTE:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:61 [ muls8s::a#0 ] -Uplifting [muls8s] best 288246 combination zp ZP_BYTE:61 [ muls8s::a#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] -Uplifting [mul8u_compare] best 288246 combination zp ZP_BYTE:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:105 [ muls8u::a#0 ] -Uplifting [muls8u] best 288246 combination zp ZP_BYTE:105 [ muls8u::a#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] -Uplifting [mul8s_compare] best 288246 combination zp ZP_BYTE:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] -Uplifting [mul8u_compare] best 288246 combination zp ZP_BYTE:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Uplifting [mulf_init] best 288106 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:56 [ mulf_init::dir#2 mulf_init::dir#4 ] -Uplifting [mulf_init] best 288106 combination zp ZP_BYTE:56 [ mulf_init::dir#2 mulf_init::dir#4 ] -Attempting to uplift remaining variables inzp ZP_BYTE:47 [ mulf_init::c#2 mulf_init::c#1 ] -Uplifting [mulf_init] best 288106 combination zp ZP_BYTE:47 [ mulf_init::c#2 mulf_init::c#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:73 [ mul8s::a#0 ] -Uplifting [mul8s] best 288106 combination zp ZP_BYTE:73 [ mul8s::a#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:91 [ mul8s::$13 ] -Uplifting [mul8s] best 288100 combination reg byte a [ mul8s::$13 ] -Attempting to uplift remaining variables inzp ZP_BYTE:92 [ mul8s::$17 ] -Uplifting [mul8s] best 288094 combination reg byte a [ mul8s::$17 ] -Attempting to uplift remaining variables inzp ZP_BYTE:78 [ mul8s_error::b#0 ] -Uplifting [mul8s_error] best 288094 combination zp ZP_BYTE:78 [ mul8s_error::b#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:94 [ mulf8s_prepared::b#0 ] -Uplifting [mulf8s_prepared] best 288094 combination zp ZP_BYTE:94 [ mulf8s_prepared::b#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:122 [ mul8u_error::b#0 ] -Uplifting [mul8u_error] best 288094 combination zp ZP_BYTE:122 [ mul8u_error::b#0 ] -Coalescing zero page register [ zp ZP_BYTE:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] ] with [ zp ZP_BYTE:61 [ muls8s::a#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_BYTE:2 [ mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 ] ] with [ zp ZP_BYTE:73 [ mul8s::a#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_BYTE:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] ] with [ zp ZP_BYTE:78 [ mul8s_error::b#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 ] ] with [ zp ZP_WORD:10 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] ] with [ zp ZP_WORD:79 [ mul8s_error::ms#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] ] with [ zp ZP_WORD:75 [ mul8s_compare::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 ] ] with [ zp ZP_WORD:87 [ mul8u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp ZP_WORD:117 [ mul8u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] ] with [ zp ZP_WORD:95 [ mulf8s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 ] ] with [ zp ZP_WORD:97 [ mulf8u_prepared::return#3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:32 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] ] with [ zp ZP_WORD:63 [ muls8s::return#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_BYTE:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] ] with [ zp ZP_BYTE:105 [ muls8u::a#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_BYTE:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] ] with [ zp ZP_BYTE:122 [ mul8u_error::b#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:39 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] ] with [ zp ZP_WORD:107 [ muls8u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:69 [ mulf8s::return#2 ] ] with [ zp ZP_WORD:71 [ mul8s_compare::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:103 [ mulf8u_prepared::return#0 ] ] with [ zp ZP_WORD:129 [ mulf8u_prepared::return#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:109 [ mul8u_compare::ms#0 ] ] with [ zp ZP_WORD:123 [ mul8u_error::ms#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:113 [ mulf8u::return#2 ] ] with [ zp ZP_WORD:115 [ mul8u_compare::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:113 [ mulf8u::return#2 mul8u_compare::mf#0 ] ] with [ zp ZP_WORD:131 [ mulf8u::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:119 [ mul8u_compare::mn#0 ] ] with [ zp ZP_WORD:125 [ mul8u_error::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 ] ] with [ zp ZP_WORD:43 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] ] with [ zp ZP_WORD:65 [ mul8s_compare::ms#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 ] ] with [ zp ZP_WORD:109 [ mul8u_compare::ms#0 mul8u_error::ms#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 ] ] with [ zp ZP_WORD:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 ] ] with [ zp ZP_WORD:81 [ mul8s_error::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 ] ] with [ zp ZP_WORD:69 [ mulf8s::return#2 mul8s_compare::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 ] ] with [ zp ZP_WORD:103 [ mulf8u_prepared::return#0 mulf8u_prepared::return#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:113 [ mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 ] ] with [ zp ZP_WORD:127 [ mul8u_error::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 ] ] with [ zp ZP_WORD:32 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 ] ] with [ zp ZP_WORD:39 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8s_error::mn#0 ] ] with [ zp ZP_WORD:119 [ mul8u_compare::mn#0 mul8u_error::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 ] ] with [ zp ZP_WORD:83 [ mul8s_error::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 mul8s_error::mf#0 ] ] with [ zp ZP_WORD:113 [ mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] ] with [ zp ZP_WORD:15 [ print_str::str#16 print_str::str#18 print_str::str#0 ] ] -Coalescing zero page register [ zp ZP_BYTE:35 [ mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 ] ] with [ zp ZP_BYTE:2 [ mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 ] ] -Coalescing zero page register [ zp ZP_BYTE:36 [ mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 ] ] with [ zp ZP_BYTE:3 [ mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 ] ] -Coalescing zero page register [ zp ZP_WORD:41 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] ] with [ zp ZP_WORD:5 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] ] -Coalescing zero page register [ zp ZP_WORD:45 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ] with [ zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] ] -Coalescing zero page register [ zp ZP_WORD:48 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] ] with [ zp ZP_WORD:13 [ print_char_cursor#155 print_char_cursor#193 print_char_cursor#194 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#230 ] ] -Coalescing zero page register [ zp ZP_WORD:51 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] ] with [ zp ZP_WORD:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8s_error::mn#0 mul8u_compare::mn#0 mul8u_error::mn#0 ] ] -Coalescing zero page register [ zp ZP_WORD:54 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] with [ zp ZP_WORD:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 mul8s_error::mf#0 mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 ] ] -Coalescing zero page register [ zp ZP_WORD:59 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:57 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] -Coalescing zero page register [ zp ZP_BYTE:94 [ mulf8s_prepared::b#0 ] ] with [ zp ZP_BYTE:47 [ mulf_init::c#2 mulf_init::c#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:56 [ mulf_init::dir#2 mulf_init::dir#4 ] ] with [ zp ZP_BYTE:35 [ mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 ] ] -Coalescing zero page register [ zp ZP_WORD:59 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] with [ zp ZP_WORD:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 print_str::str#16 print_str::str#18 print_str::str#0 ] ] -Coalescing zero page register [ zp ZP_BYTE:94 [ mulf8s_prepared::b#0 mulf_init::c#2 mulf_init::c#1 ] ] with [ zp ZP_BYTE:36 [ mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 ] ] -Allocated (was zp ZP_WORD:41) zp ZP_WORD:2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] -Allocated (was zp ZP_WORD:45) zp ZP_WORD:4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] -Allocated (was zp ZP_WORD:48) zp ZP_WORD:6 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 print_char_cursor#155 print_char_cursor#193 print_char_cursor#194 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#230 ] -Allocated (was zp ZP_WORD:51) zp ZP_WORD:8 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8s_error::mn#0 mul8u_compare::mn#0 mul8u_error::mn#0 ] -Allocated (was zp ZP_WORD:54) zp ZP_WORD:10 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 mul8s_error::mf#0 mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 ] -Allocated (was zp ZP_BYTE:56) zp ZP_BYTE:12 [ mulf_init::dir#2 mulf_init::dir#4 mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 ] -Allocated (was zp ZP_WORD:59) zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 print_str::str#16 print_str::str#18 print_str::str#0 ] -Allocated (was zp ZP_BYTE:94) zp ZP_BYTE:15 [ mulf8s_prepared::b#0 mulf_init::c#2 mulf_init::c#1 mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 ] +Uplifting [] best 152564 combination zp ZP_WORD:13 [ print_char_cursor#86 print_char_cursor#143 print_char_cursor#155 print_char_cursor#193 print_char_cursor#100 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#1 print_char_cursor#213 ] zp ZP_WORD:2 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] +Uplifting [mulf_tables_cmp] best 152564 combination zp ZP_WORD:24 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] zp ZP_WORD:26 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] +Uplifting [print_str] best 152564 combination zp ZP_WORD:4 [ print_str::str#16 print_str::str#18 print_str::str#0 ] +Uplifting [memset] best 152564 combination zp ZP_WORD:42 [ memset::dst#4 memset::dst#1 ] +Uplifting [print_byte] best 152544 combination reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#1 print_byte::b#2 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [print_word] best 152544 combination zp ZP_WORD:9 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 ] +Uplifting [print_char] best 152535 combination reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] +Uplifting [mulf8u_prepared] best 152529 combination reg byte x [ mulf8u_prepared::b#0 ] zp ZP_WORD:73 [ mulf8u_prepared::return#2 ] zp ZP_WORD:77 [ mulf8u_prepared::return#0 ] +Uplifting [mulf8u_prepare] best 152523 combination reg byte a [ mulf8u_prepare::a#0 ] +Uplifting [mul8u_error] best 152517 combination reg byte x [ mul8u_error::a#0 ] zp ZP_BYTE:61 [ mul8u_error::b#0 ] zp ZP_WORD:62 [ mul8u_error::ms#0 ] zp ZP_WORD:64 [ mul8u_error::mn#0 ] zp ZP_WORD:66 [ mul8u_error::mf#0 ] +Uplifting [RADIX] best 152517 combination +Uplifting [print_ln] best 152517 combination +Uplifting [print_cls] best 152517 combination +Uplifting [main] best 152517 combination +Uplifting [mulf_init_asm] best 152517 combination +Uplifting [mul8s_compare] best 152517 combination +Attempting to uplift remaining variables inzp ZP_BYTE:7 [ mul8u_compare::b#10 mul8u_compare::b#1 ] +Uplifting [mul8u_compare] best 152517 combination zp ZP_BYTE:7 [ mul8u_compare::b#10 mul8u_compare::b#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:44 [ muls8u::a#0 ] +Uplifting [muls8u] best 152517 combination zp ZP_BYTE:44 [ muls8u::a#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:6 [ mul8u_compare::a#7 mul8u_compare::a#1 ] +Uplifting [mul8u_compare] best 152517 combination zp ZP_BYTE:6 [ mul8u_compare::a#7 mul8u_compare::a#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:36 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Uplifting [mulf_init] best 152377 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:39 [ mulf_init::dir#2 mulf_init::dir#4 ] +Uplifting [mulf_init] best 152377 combination zp ZP_BYTE:39 [ mulf_init::dir#2 mulf_init::dir#4 ] +Attempting to uplift remaining variables inzp ZP_BYTE:30 [ mulf_init::c#2 mulf_init::c#1 ] +Uplifting [mulf_init] best 152377 combination zp ZP_BYTE:30 [ mulf_init::c#2 mulf_init::c#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:61 [ mul8u_error::b#0 ] +Uplifting [mul8u_error] best 152377 combination zp ZP_BYTE:61 [ mul8u_error::b#0 ] +Coalescing zero page register [ zp ZP_BYTE:6 [ mul8u_compare::a#7 mul8u_compare::a#1 ] ] with [ zp ZP_BYTE:44 [ muls8u::a#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_BYTE:7 [ mul8u_compare::b#10 mul8u_compare::b#1 ] ] with [ zp ZP_BYTE:61 [ mul8u_error::b#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:9 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 ] ] with [ zp ZP_WORD:26 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:9 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] ] with [ zp ZP_WORD:62 [ mul8u_error::ms#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:16 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp ZP_WORD:56 [ mul8u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:22 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] ] with [ zp ZP_WORD:46 [ muls8u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:52 [ mulf8u::return#2 ] ] with [ zp ZP_WORD:54 [ mul8u_compare::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:52 [ mulf8u::return#2 mul8u_compare::mf#0 ] ] with [ zp ZP_WORD:75 [ mulf8u::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:58 [ mul8u_compare::mn#0 ] ] with [ zp ZP_WORD:64 [ mul8u_error::mn#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:73 [ mulf8u_prepared::return#2 ] ] with [ zp ZP_WORD:77 [ mulf8u_prepared::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:9 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8u_error::ms#0 ] ] with [ zp ZP_WORD:48 [ mul8u_compare::ms#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:16 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 ] ] with [ zp ZP_WORD:58 [ mul8u_compare::mn#0 mul8u_error::mn#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:52 [ mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 ] ] with [ zp ZP_WORD:66 [ mul8u_error::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:52 [ mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 ] ] with [ zp ZP_WORD:73 [ mulf8u_prepared::return#2 mulf8u_prepared::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:9 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8u_error::ms#0 mul8u_compare::ms#0 ] ] with [ zp ZP_WORD:22 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:18 [ mul8u::mb#2 mul8u::mb#1 ] ] with [ zp ZP_WORD:4 [ print_str::str#16 print_str::str#18 print_str::str#0 ] ] +Coalescing zero page register [ zp ZP_WORD:24 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] ] with [ zp ZP_WORD:2 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] ] +Coalescing zero page register [ zp ZP_WORD:28 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ] with [ zp ZP_WORD:9 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8u_error::ms#0 mul8u_compare::ms#0 muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] ] +Coalescing zero page register [ zp ZP_BYTE:30 [ mulf_init::c#2 mulf_init::c#1 ] ] with [ zp ZP_BYTE:6 [ mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 ] ] +Coalescing zero page register [ zp ZP_WORD:31 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] ] with [ zp ZP_WORD:13 [ print_char_cursor#86 print_char_cursor#143 print_char_cursor#155 print_char_cursor#193 print_char_cursor#100 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#1 print_char_cursor#213 ] ] +Coalescing zero page register [ zp ZP_WORD:34 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] ] with [ zp ZP_WORD:16 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8u_compare::mn#0 mul8u_error::mn#0 ] ] +Coalescing zero page register [ zp ZP_BYTE:39 [ mulf_init::dir#2 mulf_init::dir#4 ] ] with [ zp ZP_BYTE:7 [ mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 ] ] +Coalescing zero page register [ zp ZP_WORD:42 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:37 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] +Coalescing zero page register [ zp ZP_WORD:52 [ mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 mulf8u_prepared::return#2 mulf8u_prepared::return#0 ] ] with [ zp ZP_WORD:40 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] +Coalescing zero page register [ zp ZP_WORD:42 [ memset::dst#4 memset::dst#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] with [ zp ZP_WORD:18 [ mul8u::mb#2 mul8u::mb#1 print_str::str#16 print_str::str#18 print_str::str#0 ] ] +Allocated (was zp ZP_WORD:24) zp ZP_WORD:2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] +Allocated (was zp ZP_WORD:28) zp ZP_WORD:4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8u_error::ms#0 mul8u_compare::ms#0 muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] +Allocated (was zp ZP_BYTE:30) zp ZP_BYTE:6 [ mulf_init::c#2 mulf_init::c#1 mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 ] +Allocated (was zp ZP_WORD:31) zp ZP_WORD:7 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 print_char_cursor#86 print_char_cursor#143 print_char_cursor#155 print_char_cursor#193 print_char_cursor#100 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#1 print_char_cursor#213 ] +Allocated (was zp ZP_WORD:34) zp ZP_WORD:9 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8u_compare::mn#0 mul8u_error::mn#0 ] +Allocated (was zp ZP_BYTE:39) zp ZP_BYTE:11 [ mulf_init::dir#2 mulf_init::dir#4 mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 ] +Allocated (was zp ZP_WORD:42) zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mul8u::mb#2 mul8u::mb#1 print_str::str#16 print_str::str#18 print_str::str#0 ] +Allocated (was zp ZP_WORD:52) zp ZP_WORD:14 [ mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 mulf8u_prepared::return#2 mulf8u_prepared::return#0 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -8333,7 +6890,7 @@ ASSEMBLER BEFORE OPTIMIZATION .pc = $80d "Program" // Global Constants & labels .label BGCOL = $d021 - .label print_char_cursor = 6 + .label print_char_cursor = 7 .label print_line_cursor = 2 // @begin bbegin: @@ -8355,7 +6912,7 @@ main: { lda #5 sta BGCOL // [5] call print_cls - // [335] phi from main to print_cls [phi:main->print_cls] + // [204] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [6] phi from main to main::@1 [phi:main->main::@1] @@ -8364,7 +6921,7 @@ main: { // main::@1 b1: // [7] call mulf_init - // [306] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] + // [175] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] mulf_init_from_b1: jsr mulf_init // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -8380,7 +6937,7 @@ main: { // main::@3 b3: // [11] call mulf_tables_cmp - // [279] phi from main::@3 to mulf_tables_cmp [phi:main::@3->mulf_tables_cmp] + // [148] phi from main::@3 to mulf_tables_cmp [phi:main::@3->mulf_tables_cmp] mulf_tables_cmp_from_b3: jsr mulf_tables_cmp // [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -8389,7 +6946,7 @@ main: { // main::@4 b4: // [13] call mul8u_compare - // [201] phi from main::@4 to mul8u_compare [phi:main::@4->mul8u_compare] + // [35] phi from main::@4 to mul8u_compare [phi:main::@4->mul8u_compare] mul8u_compare_from_b4: jsr mul8u_compare // [14] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -8410,354 +6967,53 @@ main: { // mul8s_compare // Perform all possible signed byte multiplications (slow and fast) and compare the results mul8s_compare: { - .label ms = 4 - .label mf = $a - .label mn = 8 - .label a = $c - .label b = $f - // [18] phi from mul8s_compare to mul8s_compare::@1 [phi:mul8s_compare->mul8s_compare::@1] - b1_from_mul8s_compare: - // [18] phi (signed byte) mul8s_compare::a#10 = (signed byte) -$80 [phi:mul8s_compare->mul8s_compare::@1#0] -- vbsz1=vbsc1 - lda #-$80 - sta a jmp b1 // mul8s_compare::@1 b1: - // [19] if((signed byte) mul8s_compare::a#10!=(signed byte) -$80) goto mul8s_compare::@3 -- vbsz1_neq_vbsc1_then_la1 - lda #-$80 - cmp a - bne b3_from_b1 - jmp b2 - // mul8s_compare::@2 - b2: - // [20] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [18] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 - // [21] call print_str - // [114] phi from mul8s_compare::@2 to print_str [phi:mul8s_compare::@2->print_str] - print_str_from_b2: - // [114] phi (byte*) print_char_cursor#155 = (byte*~) print_char_cursor#193 [phi:mul8s_compare::@2->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mul8s_compare::str [phi:mul8s_compare::@2->print_str#1] -- pbuz1=pbuc1 + // [19] call print_str + // [28] phi from mul8s_compare::@1 to print_str [phi:mul8s_compare::@1->print_str] + print_str_from_b1: + // [28] phi (byte*) print_char_cursor#155 = (byte*~) print_char_cursor#193 [phi:mul8s_compare::@1->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) mul8s_compare::str [phi:mul8s_compare::@1->print_str#1] -- pbuz1=pbuc1 lda #str sta print_str.str+1 jsr print_str - // [22] phi from mul8s_compare::@2 to mul8s_compare::@11 [phi:mul8s_compare::@2->mul8s_compare::@11] - b11_from_b2: - jmp b11 - // mul8s_compare::@11 - b11: - // [23] call print_ln - // [80] phi from mul8s_compare::@11 to print_ln [phi:mul8s_compare::@11->print_ln] - print_ln_from_b11: - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8s_compare::@11->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#1 [phi:mul8s_compare::@11->print_ln#1] -- register_copy + // [20] phi from mul8s_compare::@1 to mul8s_compare::@2 [phi:mul8s_compare::@1->mul8s_compare::@2] + b2_from_b1: + jmp b2 + // mul8s_compare::@2 + b2: + // [21] call print_ln + // [23] phi from mul8s_compare::@2 to print_ln [phi:mul8s_compare::@2->print_ln] + print_ln_from_b2: + // [23] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8s_compare::@2->print_ln#0] -- register_copy + // [23] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#1 [phi:mul8s_compare::@2->print_ln#1] -- register_copy jsr print_ln jmp breturn // mul8s_compare::@return breturn: - // [24] return + // [22] return rts - // [25] phi from mul8s_compare::@1 to mul8s_compare::@3 [phi:mul8s_compare::@1->mul8s_compare::@3] - b3_from_b1: - // [25] phi (signed byte) mul8s_compare::b#10 = (signed byte) -$80 [phi:mul8s_compare::@1->mul8s_compare::@3#0] -- vbsz1=vbsc1 - lda #-$80 - sta b - jmp b3 - // mul8s_compare::@3 - b3: - // [26] if((signed byte) mul8s_compare::b#10!=(signed byte) -$80) goto mul8s_compare::@4 -- vbsz1_neq_vbsc1_then_la1 - lda #-$80 - cmp b - bne b4 - jmp b5 - // mul8s_compare::@5 - b5: - // [27] (signed byte) mul8s_compare::a#1 ← ++ (signed byte) mul8s_compare::a#10 -- vbsz1=_inc_vbsz1 - inc a - // [18] phi from mul8s_compare::@5 to mul8s_compare::@1 [phi:mul8s_compare::@5->mul8s_compare::@1] - b1_from_b5: - // [18] phi (signed byte) mul8s_compare::a#10 = (signed byte) mul8s_compare::a#1 [phi:mul8s_compare::@5->mul8s_compare::@1#0] -- register_copy - jmp b1 - // mul8s_compare::@4 - b4: - // [28] (signed byte) muls8s::a#0 ← (signed byte) mul8s_compare::a#10 - // [29] (signed byte) muls8s::b#0 ← (signed byte) mul8s_compare::b#10 -- vbsxx=vbsz1 - ldx b - // [30] call muls8s - jsr muls8s - // [31] (signed word) muls8s::return#2 ← (signed word) muls8s::return#0 - jmp b12 - // mul8s_compare::@12 - b12: - // [32] (signed word) mul8s_compare::ms#0 ← (signed word) muls8s::return#2 - // [33] (signed byte) mulf8s::a#0 ← (signed byte) mul8s_compare::a#10 -- vbsaa=vbsz1 - lda a - // [34] (signed byte) mulf8s::b#0 ← (signed byte) mul8s_compare::b#10 -- vbsxx=vbsz1 - ldx b - // [35] call mulf8s - // [158] phi from mul8s_compare::@12 to mulf8s [phi:mul8s_compare::@12->mulf8s] - mulf8s_from_b12: - jsr mulf8s - // [36] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 - jmp b13 - // mul8s_compare::@13 - b13: - // [37] (signed word) mul8s_compare::mf#0 ← (signed word) mulf8s::return#2 - // [38] (signed byte) mul8s::a#0 ← (signed byte) mul8s_compare::a#10 - // [39] (signed byte) mul8s::b#0 ← (signed byte) mul8s_compare::b#10 -- vbsyy=vbsz1 - ldy b - // [40] call mul8s - jsr mul8s - jmp b14 - // mul8s_compare::@14 - b14: - // [41] (signed word) mul8s_compare::mn#0 ← (signed word)(word) mul8s::m#4 - // [42] if((signed word) mul8s_compare::ms#0==(signed word) mul8s_compare::mf#0) goto mul8s_compare::@6 -- vwsz1_eq_vwsz2_then_la1 - lda ms - cmp mf - bne !+ - lda ms+1 - cmp mf+1 - beq b6_from_b14 - !: - // [43] phi from mul8s_compare::@14 to mul8s_compare::@9 [phi:mul8s_compare::@14->mul8s_compare::@9] - b9_from_b14: - jmp b9 - // mul8s_compare::@9 - b9: - // [44] phi from mul8s_compare::@9 to mul8s_compare::@6 [phi:mul8s_compare::@9->mul8s_compare::@6] - b6_from_b9: - // [44] phi (byte) mul8s_compare::ok#4 = (byte) 0 [phi:mul8s_compare::@9->mul8s_compare::@6#0] -- vbuxx=vbuc1 - ldx #0 - jmp b6 - // [44] phi from mul8s_compare::@14 to mul8s_compare::@6 [phi:mul8s_compare::@14->mul8s_compare::@6] - b6_from_b14: - // [44] phi (byte) mul8s_compare::ok#4 = (byte) 1 [phi:mul8s_compare::@14->mul8s_compare::@6#0] -- vbuxx=vbuc1 - ldx #1 - jmp b6 - // mul8s_compare::@6 - b6: - // [45] if((signed word) mul8s_compare::ms#0==(signed word) mul8s_compare::mn#0) goto mul8s_compare::@15 -- vwsz1_eq_vwsz2_then_la1 - lda ms - cmp mn - bne !+ - lda ms+1 - cmp mn+1 - beq b15_from_b6 - !: - // [47] phi from mul8s_compare::@6 to mul8s_compare::@7 [phi:mul8s_compare::@6->mul8s_compare::@7] - b7_from_b6: - // [47] phi (byte) mul8s_compare::ok#3 = (byte) 0 [phi:mul8s_compare::@6->mul8s_compare::@7#0] -- vbuxx=vbuc1 - ldx #0 - jmp b7 - // [46] phi from mul8s_compare::@6 to mul8s_compare::@15 [phi:mul8s_compare::@6->mul8s_compare::@15] - b15_from_b6: - jmp b15 - // mul8s_compare::@15 - b15: - // [47] phi from mul8s_compare::@15 to mul8s_compare::@7 [phi:mul8s_compare::@15->mul8s_compare::@7] - b7_from_b15: - // [47] phi (byte) mul8s_compare::ok#3 = (byte) mul8s_compare::ok#4 [phi:mul8s_compare::@15->mul8s_compare::@7#0] -- register_copy - jmp b7 - // mul8s_compare::@7 - b7: - // [48] if((byte) mul8s_compare::ok#3!=(byte) 0) goto mul8s_compare::@8 -- vbuxx_neq_0_then_la1 - cpx #0 - bne b8 - jmp b10 - // mul8s_compare::@10 - b10: - // [49] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta BGCOL - // [50] (signed byte) mul8s_error::a#0 ← (signed byte) mul8s_compare::a#10 -- vbsxx=vbsz1 - ldx a - // [51] (signed byte) mul8s_error::b#0 ← (signed byte) mul8s_compare::b#10 - // [52] (signed word) mul8s_error::ms#0 ← (signed word) mul8s_compare::ms#0 - // [53] (signed word) mul8s_error::mn#0 ← (signed word) mul8s_compare::mn#0 - // [54] (signed word) mul8s_error::mf#0 ← (signed word) mul8s_compare::mf#0 - // [55] call mul8s_error - jsr mul8s_error - jmp breturn - // mul8s_compare::@8 - b8: - // [56] (signed byte) mul8s_compare::b#1 ← ++ (signed byte) mul8s_compare::b#10 -- vbsz1=_inc_vbsz1 - inc b - // [25] phi from mul8s_compare::@8 to mul8s_compare::@3 [phi:mul8s_compare::@8->mul8s_compare::@3] - b3_from_b8: - // [25] phi (signed byte) mul8s_compare::b#10 = (signed byte) mul8s_compare::b#1 [phi:mul8s_compare::@8->mul8s_compare::@3#0] -- register_copy - jmp b3 str: .text "signed multiply results match!@" -} - // mul8s_error -// mul8s_error(signed byte register(X) a, signed byte zeropage($f) b, signed word zeropage(4) ms, signed word zeropage(8) mn, signed word zeropage($a) mf) -mul8s_error: { - .label b = $f - .label ms = 4 - .label mn = 8 - .label mf = $a - // [57] (byte*~) print_char_cursor#194 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 - lda print_line_cursor - sta print_char_cursor - lda print_line_cursor+1 - sta print_char_cursor+1 - // [58] call print_str - // [114] phi from mul8s_error to print_str [phi:mul8s_error->print_str] - print_str_from_mul8s_error: - // [114] phi (byte*) print_char_cursor#155 = (byte*~) print_char_cursor#194 [phi:mul8s_error->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mul8s_error::str [phi:mul8s_error->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - jmp b1 - // mul8s_error::@1 - b1: - // [59] (signed byte) print_sbyte::b#1 ← (signed byte) mul8s_error::a#0 - // [60] call print_sbyte - // [121] phi from mul8s_error::@1 to print_sbyte [phi:mul8s_error::@1->print_sbyte] - print_sbyte_from_b1: - // [121] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#1 [phi:mul8s_error::@1->print_sbyte#0] -- register_copy - jsr print_sbyte - // [61] phi from mul8s_error::@1 to mul8s_error::@2 [phi:mul8s_error::@1->mul8s_error::@2] - b2_from_b1: - jmp b2 - // mul8s_error::@2 - b2: - // [62] call print_str - // [114] phi from mul8s_error::@2 to print_str [phi:mul8s_error::@2->print_str] - print_str_from_b2: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8s_error::@2->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8s_error::@2->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - jmp b3 - // mul8s_error::@3 - b3: - // [63] (signed byte) print_sbyte::b#2 ← (signed byte) mul8s_error::b#0 -- vbsxx=vbsz1 - ldx b - // [64] call print_sbyte - // [121] phi from mul8s_error::@3 to print_sbyte [phi:mul8s_error::@3->print_sbyte] - print_sbyte_from_b3: - // [121] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#2 [phi:mul8s_error::@3->print_sbyte#0] -- register_copy - jsr print_sbyte - // [65] phi from mul8s_error::@3 to mul8s_error::@4 [phi:mul8s_error::@3->mul8s_error::@4] - b4_from_b3: - jmp b4 - // mul8s_error::@4 - b4: - // [66] call print_str - // [114] phi from mul8s_error::@4 to print_str [phi:mul8s_error::@4->print_str] - print_str_from_b4: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8s_error::@4->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8s_error::@4->print_str#1] -- pbuz1=pbuc1 - lda #str2 - sta print_str.str+1 - jsr print_str - jmp b5 - // mul8s_error::@5 - b5: - // [67] (signed word) print_sword::w#1 ← (signed word) mul8s_error::ms#0 - // [68] call print_sword - // [85] phi from mul8s_error::@5 to print_sword [phi:mul8s_error::@5->print_sword] - print_sword_from_b5: - // [85] phi (signed word) print_sword::w#4 = (signed word) print_sword::w#1 [phi:mul8s_error::@5->print_sword#0] -- register_copy - jsr print_sword - // [69] phi from mul8s_error::@5 to mul8s_error::@6 [phi:mul8s_error::@5->mul8s_error::@6] - b6_from_b5: - jmp b6 - // mul8s_error::@6 - b6: - // [70] call print_str - // [114] phi from mul8s_error::@6 to print_str [phi:mul8s_error::@6->print_str] - print_str_from_b6: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8s_error::@6->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8s_error::@6->print_str#1] -- pbuz1=pbuc1 - lda #str3 - sta print_str.str+1 - jsr print_str - jmp b7 - // mul8s_error::@7 - b7: - // [71] (signed word) print_sword::w#2 ← (signed word) mul8s_error::mn#0 -- vwsz1=vwsz2 - lda mn - sta print_sword.w - lda mn+1 - sta print_sword.w+1 - // [72] call print_sword - // [85] phi from mul8s_error::@7 to print_sword [phi:mul8s_error::@7->print_sword] - print_sword_from_b7: - // [85] phi (signed word) print_sword::w#4 = (signed word) print_sword::w#2 [phi:mul8s_error::@7->print_sword#0] -- register_copy - jsr print_sword - // [73] phi from mul8s_error::@7 to mul8s_error::@8 [phi:mul8s_error::@7->mul8s_error::@8] - b8_from_b7: - jmp b8 - // mul8s_error::@8 - b8: - // [74] call print_str - // [114] phi from mul8s_error::@8 to print_str [phi:mul8s_error::@8->print_str] - print_str_from_b8: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8s_error::@8->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8s_error::@8->print_str#1] -- pbuz1=pbuc1 - lda #str4 - sta print_str.str+1 - jsr print_str - jmp b9 - // mul8s_error::@9 - b9: - // [75] (signed word) print_sword::w#3 ← (signed word) mul8s_error::mf#0 -- vwsz1=vwsz2 - lda mf - sta print_sword.w - lda mf+1 - sta print_sword.w+1 - // [76] call print_sword - // [85] phi from mul8s_error::@9 to print_sword [phi:mul8s_error::@9->print_sword] - print_sword_from_b9: - // [85] phi (signed word) print_sword::w#4 = (signed word) print_sword::w#3 [phi:mul8s_error::@9->print_sword#0] -- register_copy - jsr print_sword - // [77] phi from mul8s_error::@9 to mul8s_error::@10 [phi:mul8s_error::@9->mul8s_error::@10] - b10_from_b9: - jmp b10 - // mul8s_error::@10 - b10: - // [78] call print_ln - // [80] phi from mul8s_error::@10 to print_ln [phi:mul8s_error::@10->print_ln] - print_ln_from_b10: - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#19 [phi:mul8s_error::@10->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#1 [phi:mul8s_error::@10->print_ln#1] -- register_copy - jsr print_ln - jmp breturn - // mul8s_error::@return - breturn: - // [79] return - rts - str: .text "signed multiply mismatch @" } // print_ln // Print a newline print_ln: { - // [81] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + // [24] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] b1_from_print_ln: b1_from_b1: - // [81] phi (byte*) print_line_cursor#23 = (byte*) print_line_cursor#45 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + // [24] phi (byte*) print_line_cursor#23 = (byte*) print_line_cursor#45 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy jmp b1 // print_ln::@1 b1: - // [82] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [25] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc print_line_cursor @@ -8765,7 +7021,7 @@ print_ln: { bcc !+ inc print_line_cursor+1 !: - // [83] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 + // [26] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 lda print_line_cursor+1 cmp print_char_cursor+1 bcc b1_from_b1 @@ -8777,176 +7033,23 @@ print_ln: { jmp breturn // print_ln::@return breturn: - // [84] return - rts -} - // print_sword -// Print a signed word as HEX -// print_sword(signed word zeropage(4) w) -print_sword: { - .label w = 4 - // [86] if((signed word) print_sword::w#4<(signed byte) 0) goto print_sword::@1 -- vwsz1_lt_0_then_la1 - lda w+1 - bmi b1_from_print_sword - // [87] phi from print_sword to print_sword::@3 [phi:print_sword->print_sword::@3] - b3_from_print_sword: - jmp b3 - // print_sword::@3 - b3: - // [88] call print_char - // [96] phi from print_sword::@3 to print_char [phi:print_sword::@3->print_char] - print_char_from_b3: - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#134 [phi:print_sword::@3->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) ' ' [phi:print_sword::@3->print_char#1] -- vbuaa=vbuc1 - lda #' ' - jsr print_char - // [89] phi from print_sword::@3 print_sword::@4 to print_sword::@2 [phi:print_sword::@3/print_sword::@4->print_sword::@2] - b2_from_b3: - b2_from_b4: - // [89] phi (signed word) print_sword::w#6 = (signed word) print_sword::w#4 [phi:print_sword::@3/print_sword::@4->print_sword::@2#0] -- register_copy - jmp b2 - // print_sword::@2 - b2: - // [90] (word) print_word::w#0 ← (word)(signed word) print_sword::w#6 - // [91] call print_word - // [100] phi from print_sword::@2 to print_word [phi:print_sword::@2->print_word] - print_word_from_b2: - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#19 [phi:print_sword::@2->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#0 [phi:print_sword::@2->print_word#1] -- register_copy - jsr print_word - jmp breturn - // print_sword::@return - breturn: - // [92] return - rts - // [93] phi from print_sword to print_sword::@1 [phi:print_sword->print_sword::@1] - b1_from_print_sword: - jmp b1 - // print_sword::@1 - b1: - // [94] call print_char - // [96] phi from print_sword::@1 to print_char [phi:print_sword::@1->print_char] - print_char_from_b1: - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#134 [phi:print_sword::@1->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) '-' [phi:print_sword::@1->print_char#1] -- vbuaa=vbuc1 - lda #'-' - jsr print_char - jmp b4 - // print_sword::@4 - b4: - // [95] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#4 -- vwsz1=_neg_vwsz1 - sec - lda #0 - sbc w - sta w - lda #0 - sbc w+1 - sta w+1 - jmp b2_from_b4 -} - // print_char -// Print a single char -// print_char(byte register(A) ch) -print_char: { - // [97] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 -- _deref_pbuz1=vbuaa - ldy #0 - sta (print_char_cursor),y - // [98] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#86 -- pbuz1=_inc_pbuz1 - inc print_char_cursor - bne !+ - inc print_char_cursor+1 - !: - jmp breturn - // print_char::@return - breturn: - // [99] return - rts -} - // print_word -// Print a word as HEX -// print_word(word zeropage(4) w) -print_word: { - .label w = 4 - // [101] (byte) print_byte::b#1 ← > (word) print_word::w#6 -- vbuxx=_hi_vwuz1 - lda w+1 - tax - // [102] call print_byte - // [106] phi from print_word to print_byte [phi:print_word->print_byte] - print_byte_from_print_word: - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#142 [phi:print_word->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy - jsr print_byte - jmp b1 - // print_word::@1 - b1: - // [103] (byte) print_byte::b#2 ← < (word) print_word::w#6 -- vbuxx=_lo_vwuz1 - lda w - tax - // [104] call print_byte - // [106] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] - print_byte_from_b1: - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#19 [phi:print_word::@1->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy - jsr print_byte - jmp breturn - // print_word::@return - breturn: - // [105] return - rts -} - // print_byte -// Print a byte as HEX -// print_byte(byte register(X) b) -print_byte: { - // [107] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuaa=vbuxx_ror_4 - txa - lsr - lsr - lsr - lsr - // [108] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa - tay - lda print_hextab,y - // [109] call print_char - // [96] phi from print_byte to print_char [phi:print_byte->print_char] - print_char_from_print_byte: - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#143 [phi:print_byte->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) print_char::ch#4 [phi:print_byte->print_char#1] -- register_copy - jsr print_char - jmp b1 - // print_byte::@1 - b1: - // [110] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 - lda #$f - axs #0 - // [111] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx - lda print_hextab,x - // [112] call print_char - // [96] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] - print_char_from_b1: - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#19 [phi:print_byte::@1->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) print_char::ch#5 [phi:print_byte::@1->print_char#1] -- register_copy - jsr print_char - jmp breturn - // print_byte::@return - breturn: - // [113] return + // [27] return rts } // print_str // Print a zero-terminated string -// print_str(byte* zeropage($d) str) +// print_str(byte* zeropage($c) str) print_str: { - .label str = $d - // [115] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + .label str = $c + // [29] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] b1_from_print_str: b1_from_b2: - // [115] phi (byte*) print_char_cursor#134 = (byte*) print_char_cursor#155 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy - // [115] phi (byte*) print_str::str#16 = (byte*) print_str::str#18 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + // [29] phi (byte*) print_char_cursor#134 = (byte*) print_char_cursor#155 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + // [29] phi (byte*) print_str::str#16 = (byte*) print_str::str#18 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy jmp b1 // print_str::@1 b1: - // [116] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 ldy #0 lda (str),y cmp #'@' @@ -8954,200 +7057,494 @@ print_str: { jmp breturn // print_str::@return breturn: - // [117] return + // [31] return rts // print_str::@2 b2: - // [118] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) -- _deref_pbuz1=_deref_pbuz2 + // [32] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (str),y ldy #0 sta (print_char_cursor),y - // [119] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#134 -- pbuz1=_inc_pbuz1 + // [33] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#134 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 !: - // [120] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#16 -- pbuz1=_inc_pbuz1 + // [34] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#16 -- pbuz1=_inc_pbuz1 inc str bne !+ inc str+1 !: jmp b1_from_b2 } - // print_sbyte -// Print a signed byte as HEX -// print_sbyte(signed byte register(X) b) -print_sbyte: { - // [122] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 -- vbsxx_lt_0_then_la1 - cpx #0 - bmi b1_from_print_sbyte - // [123] phi from print_sbyte to print_sbyte::@3 [phi:print_sbyte->print_sbyte::@3] - b3_from_print_sbyte: - jmp b3 - // print_sbyte::@3 - b3: - // [124] call print_char - // [96] phi from print_sbyte::@3 to print_char [phi:print_sbyte::@3->print_char] - print_char_from_b3: - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#134 [phi:print_sbyte::@3->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) ' ' [phi:print_sbyte::@3->print_char#1] -- vbuaa=vbuc1 - lda #' ' - jsr print_char - // [125] phi from print_sbyte::@3 print_sbyte::@4 to print_sbyte::@2 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2] - b2_from_b3: - b2_from_b4: - // [125] phi (signed byte) print_sbyte::b#5 = (signed byte) print_sbyte::b#3 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2#0] -- register_copy - jmp b2 - // print_sbyte::@2 - b2: - // [126] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 - // [127] call print_byte - // [106] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] - print_byte_from_b2: - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#19 [phi:print_sbyte::@2->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#0 [phi:print_sbyte::@2->print_byte#1] -- register_copy - jsr print_byte - jmp breturn - // print_sbyte::@return - breturn: - // [128] return - rts - // [129] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] - b1_from_print_sbyte: - jmp b1 - // print_sbyte::@1 - b1: - // [130] call print_char - // [96] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] - print_char_from_b1: - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#134 [phi:print_sbyte::@1->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuaa=vbuc1 - lda #'-' - jsr print_char - jmp b4 - // print_sbyte::@4 - b4: - // [131] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 -- vbsxx=_neg_vbsxx - txa - eor #$ff - clc - adc #1 - tax - jmp b2_from_b4 -} - // mul8s -// Multiply of two signed bytes to a signed word -// Fixes offsets introduced by using unsigned multiplication -// mul8s(signed byte zeropage($c) a, signed byte register(Y) b) -mul8s: { - .label m = 8 - .label a = $c - // [132] (byte) mul8u::a#1 ← (byte)(signed byte) mul8s::a#0 -- vbuxx=vbuz1 - ldx a - // [133] (byte) mul8u::b#0 ← (byte)(signed byte) mul8s::b#0 -- vbuaa=vbuyy - tya - // [134] call mul8u - // [148] phi from mul8s to mul8u [phi:mul8s->mul8u] - mul8u_from_mul8s: - // [148] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:mul8s->mul8u#0] -- register_copy - // [148] phi (word) mul8u::mb#0 = (byte) mul8u::b#0 [phi:mul8s->mul8u#1] -- vwuz1=vbuaa - sta mul8u.mb + // mul8u_compare +// Perform all possible byte multiplications (slow and fast) and compare the results +mul8u_compare: { + .label ms = 4 + .label mf = $e + .label mn = 9 + .label b = $b + .label a = 6 + // [36] phi from mul8u_compare to mul8u_compare::@1 [phi:mul8u_compare->mul8u_compare::@1] + b1_from_mul8u_compare: + // [36] phi (byte) mul8u_compare::a#7 = (byte) 0 [phi:mul8u_compare->mul8u_compare::@1#0] -- vbuz1=vbuc1 lda #0 - sta mul8u.mb+1 + sta a + jmp b1 + // [36] phi from mul8u_compare::@8 to mul8u_compare::@1 [phi:mul8u_compare::@8->mul8u_compare::@1] + b1_from_b8: + // [36] phi (byte) mul8u_compare::a#7 = (byte) mul8u_compare::a#1 [phi:mul8u_compare::@8->mul8u_compare::@1#0] -- register_copy + jmp b1 + // mul8u_compare::@1 + b1: + // [37] phi from mul8u_compare::@1 to mul8u_compare::@2 [phi:mul8u_compare::@1->mul8u_compare::@2] + b2_from_b1: + // [37] phi (byte) mul8u_compare::b#10 = (byte) 0 [phi:mul8u_compare::@1->mul8u_compare::@2#0] -- vbuz1=vbuc1 + lda #0 + sta b + jmp b2 + // [37] phi from mul8u_compare::@5 to mul8u_compare::@2 [phi:mul8u_compare::@5->mul8u_compare::@2] + b2_from_b5: + // [37] phi (byte) mul8u_compare::b#10 = (byte) mul8u_compare::b#1 [phi:mul8u_compare::@5->mul8u_compare::@2#0] -- register_copy + jmp b2 + // mul8u_compare::@2 + b2: + // [38] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 + // [39] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 + ldx b + // [40] call muls8u + jsr muls8u + // [41] (word) muls8u::return#2 ← (word) muls8u::return#0 + jmp b10 + // mul8u_compare::@10 + b10: + // [42] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 + // [43] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuaa=vbuz1 + lda a + // [44] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 + ldx b + // [45] call mulf8u + jsr mulf8u + // [46] (word) mulf8u::return#2 ← (word) mulf8u::return#0 + jmp b11 + // mul8u_compare::@11 + b11: + // [47] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 + // [48] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 + ldx a + // [49] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 -- vbuaa=vbuz1 + lda b + // [50] call mul8u + // [117] phi from mul8u_compare::@11 to mul8u [phi:mul8u_compare::@11->mul8u] + mul8u_from_b11: jsr mul8u - // [135] (word) mul8u::return#2 ← (word) mul8u::res#2 - jmp b5 - // mul8s::@5 + // [51] (word) mul8u::return#3 ← (word) mul8u::res#2 + jmp b12 + // mul8u_compare::@12 + b12: + // [52] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 + // [53] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 -- vwuz1_eq_vwuz2_then_la1 + lda ms + cmp mf + bne !+ + lda ms+1 + cmp mf+1 + beq b3_from_b12 + !: + // [54] phi from mul8u_compare::@12 to mul8u_compare::@6 [phi:mul8u_compare::@12->mul8u_compare::@6] + b6_from_b12: + jmp b6 + // mul8u_compare::@6 + b6: + // [55] phi from mul8u_compare::@6 to mul8u_compare::@3 [phi:mul8u_compare::@6->mul8u_compare::@3] + b3_from_b6: + // [55] phi (byte) mul8u_compare::ok#4 = (byte) 0 [phi:mul8u_compare::@6->mul8u_compare::@3#0] -- vbuxx=vbuc1 + ldx #0 + jmp b3 + // [55] phi from mul8u_compare::@12 to mul8u_compare::@3 [phi:mul8u_compare::@12->mul8u_compare::@3] + b3_from_b12: + // [55] phi (byte) mul8u_compare::ok#4 = (byte) 1 [phi:mul8u_compare::@12->mul8u_compare::@3#0] -- vbuxx=vbuc1 + ldx #1 + jmp b3 + // mul8u_compare::@3 + b3: + // [56] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 -- vwuz1_eq_vwuz2_then_la1 + lda ms + cmp mn + bne !+ + lda ms+1 + cmp mn+1 + beq b14_from_b3 + !: + // [58] phi from mul8u_compare::@3 to mul8u_compare::@4 [phi:mul8u_compare::@3->mul8u_compare::@4] + b4_from_b3: + // [58] phi (byte) mul8u_compare::ok#3 = (byte) 0 [phi:mul8u_compare::@3->mul8u_compare::@4#0] -- vbuxx=vbuc1 + ldx #0 + jmp b4 + // [57] phi from mul8u_compare::@3 to mul8u_compare::@14 [phi:mul8u_compare::@3->mul8u_compare::@14] + b14_from_b3: + jmp b14 + // mul8u_compare::@14 + b14: + // [58] phi from mul8u_compare::@14 to mul8u_compare::@4 [phi:mul8u_compare::@14->mul8u_compare::@4] + b4_from_b14: + // [58] phi (byte) mul8u_compare::ok#3 = (byte) mul8u_compare::ok#4 [phi:mul8u_compare::@14->mul8u_compare::@4#0] -- register_copy + jmp b4 + // mul8u_compare::@4 + b4: + // [59] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 -- vbuxx_neq_0_then_la1 + cpx #0 + bne b5 + jmp b7 + // mul8u_compare::@7 + b7: + // [60] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 + lda #2 + sta BGCOL + // [61] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 + ldx a + // [62] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 + // [63] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 + // [64] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 + // [65] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 + // [66] call mul8u_error + // [76] phi from mul8u_compare::@7 to mul8u_error [phi:mul8u_compare::@7->mul8u_error] + mul8u_error_from_b7: + jsr mul8u_error + jmp breturn + // mul8u_compare::@return + breturn: + // [67] return + rts + // mul8u_compare::@5 b5: - // [136] (word) mul8s::m#0 ← (word) mul8u::return#2 - // [137] if((signed byte) mul8s::a#0>=(signed byte) 0) goto mul8s::@1 -- vbsz1_ge_0_then_la1 + // [68] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 -- vbuz1=_inc_vbuz1 + inc b + // [69] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 -- vbuz1_neq_0_then_la1 + lda b + cmp #0 + bne b2_from_b5 + jmp b8 + // mul8u_compare::@8 + b8: + // [70] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 -- vbuz1=_inc_vbuz1 + inc a + // [71] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 -- vbuz1_neq_0_then_la1 lda a cmp #0 - bpl b1_from_b5 - jmp b3 - // mul8s::@3 - b3: - // [138] (byte~) mul8s::$9 ← > (word) mul8s::m#0 -- vbuaa=_hi_vwuz1 - lda m+1 - // [139] (byte~) mul8s::$16 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::b#0 -- vbuaa=vbuaa_minus_vbuyy - sty $ff - sec - sbc $ff - // [140] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$16 -- vwuz1=vwuz1_sethi_vbuaa - sta m+1 - // [141] phi from mul8s::@3 mul8s::@5 to mul8s::@1 [phi:mul8s::@3/mul8s::@5->mul8s::@1] - b1_from_b3: - b1_from_b5: - // [141] phi (word) mul8s::m#5 = (word) mul8s::m#1 [phi:mul8s::@3/mul8s::@5->mul8s::@1#0] -- register_copy - jmp b1 - // mul8s::@1 - b1: - // [142] if((signed byte) mul8s::b#0>=(signed byte) 0) goto mul8s::@2 -- vbsyy_ge_0_then_la1 - cpy #0 - bpl b2_from_b1 - jmp b4 - // mul8s::@4 - b4: - // [143] (byte~) mul8s::$13 ← > (word) mul8s::m#5 -- vbuaa=_hi_vwuz1 - lda m+1 - // [144] (byte~) mul8s::$17 ← (byte~) mul8s::$13 - (byte)(signed byte) mul8s::a#0 -- vbuaa=vbuaa_minus_vbuz1 - sec - sbc a - // [145] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17 -- vwuz1=vwuz1_sethi_vbuaa - sta m+1 - // [146] phi from mul8s::@1 mul8s::@4 to mul8s::@2 [phi:mul8s::@1/mul8s::@4->mul8s::@2] - b2_from_b1: - b2_from_b4: - // [146] phi (word) mul8s::m#4 = (word) mul8s::m#5 [phi:mul8s::@1/mul8s::@4->mul8s::@2#0] -- register_copy - jmp b2 - // mul8s::@2 - b2: + bne b1_from_b8 + // [72] phi from mul8u_compare::@8 to mul8u_compare::@9 [phi:mul8u_compare::@8->mul8u_compare::@9] + b9_from_b8: + jmp b9 + // mul8u_compare::@9 + b9: + // [73] call print_str + // [28] phi from mul8u_compare::@9 to print_str [phi:mul8u_compare::@9->print_str] + print_str_from_b9: + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_compare::@9->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) mul8u_compare::str [phi:mul8u_compare::@9->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + // [74] phi from mul8u_compare::@9 to mul8u_compare::@13 [phi:mul8u_compare::@9->mul8u_compare::@13] + b13_from_b9: + jmp b13 + // mul8u_compare::@13 + b13: + // [75] call print_ln + // [23] phi from mul8u_compare::@13 to print_ln [phi:mul8u_compare::@13->print_ln] + print_ln_from_b13: + // [23] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8u_compare::@13->print_ln#0] -- register_copy + // [23] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_compare::@13->print_ln#1] -- register_copy + jsr print_ln jmp breturn - // mul8s::@return + str: .text "multiply results match!@" +} + // mul8u_error +// mul8u_error(byte register(X) a, byte zeropage($b) b, word zeropage(4) ms, word zeropage(9) mn, word zeropage($e) mf) +mul8u_error: { + .label b = $b + .label ms = 4 + .label mn = 9 + .label mf = $e + // [77] call print_str + // [28] phi from mul8u_error to print_str [phi:mul8u_error->print_str] + print_str_from_mul8u_error: + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_error->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) mul8u_error::str [phi:mul8u_error->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + jmp b1 + // mul8u_error::@1 + b1: + // [78] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 + // [79] call print_byte + // [105] phi from mul8u_error::@1 to print_byte [phi:mul8u_error::@1->print_byte] + print_byte_from_b1: + // [105] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@1->print_byte#0] -- register_copy + // [105] phi (byte) print_byte::b#5 = (byte) print_byte::b#3 [phi:mul8u_error::@1->print_byte#1] -- register_copy + jsr print_byte + // [80] phi from mul8u_error::@1 to mul8u_error::@2 [phi:mul8u_error::@1->mul8u_error::@2] + b2_from_b1: + jmp b2 + // mul8u_error::@2 + b2: + // [81] call print_str + // [28] phi from mul8u_error::@2 to print_str [phi:mul8u_error::@2->print_str] + print_str_from_b2: + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@2->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + jmp b3 + // mul8u_error::@3 + b3: + // [82] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 -- vbuxx=vbuz1 + ldx b + // [83] call print_byte + // [105] phi from mul8u_error::@3 to print_byte [phi:mul8u_error::@3->print_byte] + print_byte_from_b3: + // [105] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@3->print_byte#0] -- register_copy + // [105] phi (byte) print_byte::b#5 = (byte) print_byte::b#4 [phi:mul8u_error::@3->print_byte#1] -- register_copy + jsr print_byte + // [84] phi from mul8u_error::@3 to mul8u_error::@4 [phi:mul8u_error::@3->mul8u_error::@4] + b4_from_b3: + jmp b4 + // mul8u_error::@4 + b4: + // [85] call print_str + // [28] phi from mul8u_error::@4 to print_str [phi:mul8u_error::@4->print_str] + print_str_from_b4: + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@4->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1 + lda #str2 + sta print_str.str+1 + jsr print_str + jmp b5 + // mul8u_error::@5 + b5: + // [86] (word) print_word::w#3 ← (word) mul8u_error::ms#0 + // [87] call print_word + // [99] phi from mul8u_error::@5 to print_word [phi:mul8u_error::@5->print_word] + print_word_from_b5: + // [99] phi (word) print_word::w#6 = (word) print_word::w#3 [phi:mul8u_error::@5->print_word#0] -- register_copy + jsr print_word + // [88] phi from mul8u_error::@5 to mul8u_error::@6 [phi:mul8u_error::@5->mul8u_error::@6] + b6_from_b5: + jmp b6 + // mul8u_error::@6 + b6: + // [89] call print_str + // [28] phi from mul8u_error::@6 to print_str [phi:mul8u_error::@6->print_str] + print_str_from_b6: + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@6->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1 + lda #str3 + sta print_str.str+1 + jsr print_str + jmp b7 + // mul8u_error::@7 + b7: + // [90] (word) print_word::w#4 ← (word) mul8u_error::mn#0 -- vwuz1=vwuz2 + lda mn + sta print_word.w + lda mn+1 + sta print_word.w+1 + // [91] call print_word + // [99] phi from mul8u_error::@7 to print_word [phi:mul8u_error::@7->print_word] + print_word_from_b7: + // [99] phi (word) print_word::w#6 = (word) print_word::w#4 [phi:mul8u_error::@7->print_word#0] -- register_copy + jsr print_word + // [92] phi from mul8u_error::@7 to mul8u_error::@8 [phi:mul8u_error::@7->mul8u_error::@8] + b8_from_b7: + jmp b8 + // mul8u_error::@8 + b8: + // [93] call print_str + // [28] phi from mul8u_error::@8 to print_str [phi:mul8u_error::@8->print_str] + print_str_from_b8: + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@8->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1 + lda #str4 + sta print_str.str+1 + jsr print_str + jmp b9 + // mul8u_error::@9 + b9: + // [94] (word) print_word::w#5 ← (word) mul8u_error::mf#0 -- vwuz1=vwuz2 + lda mf + sta print_word.w + lda mf+1 + sta print_word.w+1 + // [95] call print_word + // [99] phi from mul8u_error::@9 to print_word [phi:mul8u_error::@9->print_word] + print_word_from_b9: + // [99] phi (word) print_word::w#6 = (word) print_word::w#5 [phi:mul8u_error::@9->print_word#0] -- register_copy + jsr print_word + // [96] phi from mul8u_error::@9 to mul8u_error::@10 [phi:mul8u_error::@9->mul8u_error::@10] + b10_from_b9: + jmp b10 + // mul8u_error::@10 + b10: + // [97] call print_ln + // [23] phi from mul8u_error::@10 to print_ln [phi:mul8u_error::@10->print_ln] + print_ln_from_b10: + // [23] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#19 [phi:mul8u_error::@10->print_ln#0] -- register_copy + // [23] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_error::@10->print_ln#1] -- register_copy + jsr print_ln + jmp breturn + // mul8u_error::@return breturn: - // [147] return + // [98] return + rts + str: .text "multiply mismatch @" +} + // print_word +// Print a word as HEX +// print_word(word zeropage(4) w) +print_word: { + .label w = 4 + // [100] (byte) print_byte::b#1 ← > (word) print_word::w#6 -- vbuxx=_hi_vwuz1 + lda w+1 + tax + // [101] call print_byte + // [105] phi from print_word to print_byte [phi:print_word->print_byte] + print_byte_from_print_word: + // [105] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:print_word->print_byte#0] -- register_copy + // [105] phi (byte) print_byte::b#5 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy + jsr print_byte + jmp b1 + // print_word::@1 + b1: + // [102] (byte) print_byte::b#2 ← < (word) print_word::w#6 -- vbuxx=_lo_vwuz1 + lda w + tax + // [103] call print_byte + // [105] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] + print_byte_from_b1: + // [105] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#19 [phi:print_word::@1->print_byte#0] -- register_copy + // [105] phi (byte) print_byte::b#5 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy + jsr print_byte + jmp breturn + // print_word::@return + breturn: + // [104] return + rts +} + // print_byte +// Print a byte as HEX +// print_byte(byte register(X) b) +print_byte: { + // [106] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuaa=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + // [107] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa + tay + lda print_hextab,y + // [108] call print_char + // [113] phi from print_byte to print_char [phi:print_byte->print_char] + print_char_from_print_byte: + // [113] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#143 [phi:print_byte->print_char#0] -- register_copy + // [113] phi (byte) print_char::ch#6 = (byte) print_char::ch#4 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + jmp b1 + // print_byte::@1 + b1: + // [109] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 + lda #$f + axs #0 + // [110] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx + lda print_hextab,x + // [111] call print_char + // [113] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + print_char_from_b1: + // [113] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#19 [phi:print_byte::@1->print_char#0] -- register_copy + // [113] phi (byte) print_char::ch#6 = (byte) print_char::ch#5 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + jmp breturn + // print_byte::@return + breturn: + // [112] return + rts +} + // print_char +// Print a single char +// print_char(byte register(A) ch) +print_char: { + // [114] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 -- _deref_pbuz1=vbuaa + ldy #0 + sta (print_char_cursor),y + // [115] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#86 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + jmp breturn + // print_char::@return + breturn: + // [116] return rts } // mul8u // Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word // mul8u(byte register(X) a, byte register(A) b) mul8u: { - .label mb = $d - .label res = 8 - .label return = 8 - // [149] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + .label mb = $c + .label res = 9 + .label return = 9 + // [118] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] b1_from_mul8u: - // [149] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy - // [149] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [118] phi (word) mul8u::mb#2 = (byte) mul8u::b#1 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuaa + sta mb + lda #0 + sta mb+1 + // [118] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 lda #<0 sta res lda #>0 sta res+1 - // [149] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy + // [118] phi (byte) mul8u::a#3 = (byte) mul8u::a#2 [phi:mul8u->mul8u::@1#2] -- register_copy jmp b1 // mul8u::@1 b1: - // [150] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 + // [119] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 cpx #0 bne b2 jmp breturn // mul8u::@return breturn: - // [151] return + // [120] return rts // mul8u::@2 b2: - // [152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + // [121] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 txa and #1 - // [153] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 + // [122] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq b3_from_b2 jmp b4 // mul8u::@4 b4: - // [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 + // [123] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 lda res clc adc mb @@ -9155,124 +7552,50 @@ mul8u: { lda res+1 adc mb+1 sta res+1 - // [155] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] + // [124] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] b3_from_b2: b3_from_b4: - // [155] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy + // [124] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy jmp b3 // mul8u::@3 b3: - // [156] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [125] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [157] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [126] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl mb rol mb+1 - // [149] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] + // [118] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] b1_from_b3: - // [149] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy - // [149] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy - // [149] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy + // [118] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy + // [118] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy + // [118] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy jmp b1 } - // mulf8s -// Fast multiply two signed bytes to a word result -// mulf8s(signed byte register(A) a, signed byte register(X) b) -mulf8s: { - .label return = $a - jmp mulf8s_prepare1 - // mulf8s::mulf8s_prepare1 - mulf8s_prepare1: - // [159] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 - // [160] call mulf8u_prepare - // [185] phi from mulf8s::mulf8s_prepare1 to mulf8u_prepare [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare] - mulf8u_prepare_from_mulf8s_prepare1: - // [185] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#1 [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare#0] -- register_copy + // mulf8u +// Fast multiply two unsigned bytes to a word result +// mulf8u(byte register(A) a, byte register(X) b) +mulf8u: { + .label return = $e + // [127] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 + // [128] call mulf8u_prepare jsr mulf8u_prepare jmp b1 - // mulf8s::@1 + // mulf8u::@1 b1: - // [161] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 -- vbsz1=vbsxx - stx mulf8s_prepared.b - // [162] call mulf8s_prepared - jsr mulf8s_prepared - jmp b2 - // mulf8s::@2 - b2: - // [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 - jmp breturn - // mulf8s::@return - breturn: - // [164] return - rts -} - // mulf8s_prepared -// Calculate fast multiply with a prepared unsigned byte to a word result -// The prepared number is set by calling mulf8s_prepare(byte a) -// mulf8s_prepared(signed byte zeropage($f) b) -mulf8s_prepared: { - .label memA = $fd - .label m = $a - .label b = $f - // [165] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuxx=vbuz1 - ldx b - // [166] call mulf8u_prepared - // [180] phi from mulf8s_prepared to mulf8u_prepared [phi:mulf8s_prepared->mulf8u_prepared] - mulf8u_prepared_from_mulf8s_prepared: - // [180] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#1 [phi:mulf8s_prepared->mulf8u_prepared#0] -- register_copy + // [129] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 + // [130] call mulf8u_prepared jsr mulf8u_prepared - // [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 - jmp b5 - // mulf8s_prepared::@5 - b5: - // [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 - // [169] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 - lda memA - cmp #0 - bpl b1_from_b5 - jmp b3 - // mulf8s_prepared::@3 - b3: - // [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 - lda m+1 - // [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 - sec - sbc b - // [172] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa - sta m+1 - // [173] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] - b1_from_b3: - b1_from_b5: - // [173] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy - jmp b1 - // mulf8s_prepared::@1 - b1: - // [174] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 - lda b - cmp #0 - bpl b2_from_b1 - jmp b4 - // mulf8s_prepared::@4 - b4: - // [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 - lda m+1 - // [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) -- vbuaa=vbuaa_minus__deref_pbuc1 - sec - sbc memA - // [177] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa - sta m+1 - // [178] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] - b2_from_b1: - b2_from_b4: - // [178] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + // [131] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 jmp b2 - // mulf8s_prepared::@2 + // mulf8u::@2 b2: + // [132] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 jmp breturn - // mulf8s_prepared::@return + // mulf8u::@return breturn: - // [179] return + // [133] return rts } // mulf8u_prepared @@ -9282,8 +7605,8 @@ mulf8s_prepared: { mulf8u_prepared: { .label resL = $fe .label memB = $ff - .label return = $a - // [181] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#2 -- _deref_pbuc1=vbuxx + .label return = $e + // [134] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#0 -- _deref_pbuc1=vbuxx stx memB // asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } ldx memB @@ -9298,7 +7621,7 @@ mulf8u_prepared: { sm4: sbc mulf_sqr2_hi,x sta memB - // [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + // [136] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda resL sta return lda memB @@ -9306,7 +7629,7 @@ mulf8u_prepared: { jmp breturn // mulf8u_prepared::@return breturn: - // [184] return + // [137] return rts } // mulf8u_prepare @@ -9314,7 +7637,7 @@ mulf8u_prepared: { // mulf8u_prepare(byte register(A) a) mulf8u_prepare: { .label memA = $fd - // [186] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2 -- _deref_pbuc1=vbuaa + // [138] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#0 -- _deref_pbuc1=vbuaa sta memA // asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } lda memA @@ -9326,536 +7649,43 @@ mulf8u_prepare: { jmp breturn // mulf8u_prepare::@return breturn: - // [188] return - rts -} - // muls8s -// Slow multiplication of signed bytes -// Perform a signed multiplication by repeated addition/subtraction -// muls8s(signed byte zeropage($c) a, signed byte register(X) b) -muls8s: { - .label m = 4 - .label return = 4 - .label a = $c - // [189] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 -- vbsz1_lt_0_then_la1 - lda a - bmi b5_from_muls8s - jmp b2 - // muls8s::@2 - b2: - // [190] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 -- vbsz1_le_0_then_la1 - lda a - cmp #1 - bmi b1_from_b2 - // [191] phi from muls8s::@2 to muls8s::@3 [phi:muls8s::@2->muls8s::@3] - b3_from_b2: - // [191] phi (signed word) muls8s::m#3 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#0] -- vwsz1=vbsc1 - lda #<0 - sta m - lda #>0 - sta m+1 - // [191] phi (signed byte) muls8s::j#2 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#1] -- vbsyy=vbsc1 - ldy #0 - jmp b3 - // muls8s::@3 - b3: - // [192] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 -- vbsyy_neq_vbsz1_then_la1 - cpy a - bne b4 - // [193] phi from muls8s::@3 muls8s::@5 to muls8s::@1 [phi:muls8s::@3/muls8s::@5->muls8s::@1] - b1_from_b3: - b1_from_b5: - // [193] phi (signed word) muls8s::return#0 = (signed word) muls8s::m#3 [phi:muls8s::@3/muls8s::@5->muls8s::@1#0] -- register_copy - jmp b1 - // [193] phi from muls8s::@2 to muls8s::@1 [phi:muls8s::@2->muls8s::@1] - b1_from_b2: - // [193] phi (signed word) muls8s::return#0 = (signed byte) 0 [phi:muls8s::@2->muls8s::@1#0] -- vwsz1=vbsc1 - lda #<0 - sta return - lda #>0 - sta return+1 - jmp b1 - // muls8s::@1 - b1: - jmp breturn - // muls8s::@return - breturn: - // [194] return - rts - // muls8s::@4 - b4: - // [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 -- vwsz1=vwsz1_plus_vbsxx - txa - sta $fe - ora #$7f - bmi !+ - lda #0 - !: - sta $ff - clc - lda m - adc $fe - sta m - lda m+1 - adc $ff - sta m+1 - // [196] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 -- vbsyy=_inc_vbsyy - iny - // [191] phi from muls8s::@4 to muls8s::@3 [phi:muls8s::@4->muls8s::@3] - b3_from_b4: - // [191] phi (signed word) muls8s::m#3 = (signed word) muls8s::m#1 [phi:muls8s::@4->muls8s::@3#0] -- register_copy - // [191] phi (signed byte) muls8s::j#2 = (signed byte) muls8s::j#1 [phi:muls8s::@4->muls8s::@3#1] -- register_copy - jmp b3 - // [197] phi from muls8s to muls8s::@5 [phi:muls8s->muls8s::@5] - b5_from_muls8s: - // [197] phi (signed word) muls8s::m#5 = (signed byte) 0 [phi:muls8s->muls8s::@5#0] -- vwsz1=vbsc1 - lda #<0 - sta m - lda #>0 - sta m+1 - // [197] phi (signed byte) muls8s::i#2 = (signed byte) 0 [phi:muls8s->muls8s::@5#1] -- vbsyy=vbsc1 - ldy #0 - jmp b5 - // muls8s::@5 - b5: - // [198] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 -- vbsyy_neq_vbsz1_then_la1 - cpy a - bne b6 - jmp b1_from_b5 - // muls8s::@6 - b6: - // [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 -- vwsz1=vwsz1_minus_vbsxx - txa - sta $fe - ora #$7f - bmi !+ - lda #0 - !: - sta $ff - sec - lda m - sbc $fe - sta m - lda m+1 - sbc $ff - sta m+1 - // [200] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 -- vbsyy=_dec_vbsyy - dey - // [197] phi from muls8s::@6 to muls8s::@5 [phi:muls8s::@6->muls8s::@5] - b5_from_b6: - // [197] phi (signed word) muls8s::m#5 = (signed word) muls8s::m#2 [phi:muls8s::@6->muls8s::@5#0] -- register_copy - // [197] phi (signed byte) muls8s::i#2 = (signed byte) muls8s::i#1 [phi:muls8s::@6->muls8s::@5#1] -- register_copy - jmp b5 -} - // mul8u_compare -// Perform all possible byte multiplications (slow and fast) and compare the results -mul8u_compare: { - .label ms = 4 - .label mf = $a - .label mn = 8 - .label b = $f - .label a = $c - // [202] phi from mul8u_compare to mul8u_compare::@1 [phi:mul8u_compare->mul8u_compare::@1] - b1_from_mul8u_compare: - // [202] phi (byte) mul8u_compare::a#7 = (byte) 0 [phi:mul8u_compare->mul8u_compare::@1#0] -- vbuz1=vbuc1 - lda #0 - sta a - jmp b1 - // [202] phi from mul8u_compare::@8 to mul8u_compare::@1 [phi:mul8u_compare::@8->mul8u_compare::@1] - b1_from_b8: - // [202] phi (byte) mul8u_compare::a#7 = (byte) mul8u_compare::a#1 [phi:mul8u_compare::@8->mul8u_compare::@1#0] -- register_copy - jmp b1 - // mul8u_compare::@1 - b1: - // [203] phi from mul8u_compare::@1 to mul8u_compare::@2 [phi:mul8u_compare::@1->mul8u_compare::@2] - b2_from_b1: - // [203] phi (byte) mul8u_compare::b#10 = (byte) 0 [phi:mul8u_compare::@1->mul8u_compare::@2#0] -- vbuz1=vbuc1 - lda #0 - sta b - jmp b2 - // [203] phi from mul8u_compare::@5 to mul8u_compare::@2 [phi:mul8u_compare::@5->mul8u_compare::@2] - b2_from_b5: - // [203] phi (byte) mul8u_compare::b#10 = (byte) mul8u_compare::b#1 [phi:mul8u_compare::@5->mul8u_compare::@2#0] -- register_copy - jmp b2 - // mul8u_compare::@2 - b2: - // [204] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 - // [205] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 - ldx b - // [206] call muls8u - jsr muls8u - // [207] (word) muls8u::return#2 ← (word) muls8u::return#0 - jmp b10 - // mul8u_compare::@10 - b10: - // [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 - // [209] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuaa=vbuz1 - lda a - // [210] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 - ldx b - // [211] call mulf8u - jsr mulf8u - // [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 - jmp b11 - // mul8u_compare::@11 - b11: - // [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 - // [214] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 - ldx a - // [215] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 -- vbuaa=vbuz1 - lda b - // [216] call mul8u - // [148] phi from mul8u_compare::@11 to mul8u [phi:mul8u_compare::@11->mul8u] - mul8u_from_b11: - // [148] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:mul8u_compare::@11->mul8u#0] -- register_copy - // [148] phi (word) mul8u::mb#0 = (byte) mul8u::b#1 [phi:mul8u_compare::@11->mul8u#1] -- vwuz1=vbuaa - sta mul8u.mb - lda #0 - sta mul8u.mb+1 - jsr mul8u - // [217] (word) mul8u::return#3 ← (word) mul8u::res#2 - jmp b12 - // mul8u_compare::@12 - b12: - // [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 - // [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 -- vwuz1_eq_vwuz2_then_la1 - lda ms - cmp mf - bne !+ - lda ms+1 - cmp mf+1 - beq b3_from_b12 - !: - // [220] phi from mul8u_compare::@12 to mul8u_compare::@6 [phi:mul8u_compare::@12->mul8u_compare::@6] - b6_from_b12: - jmp b6 - // mul8u_compare::@6 - b6: - // [221] phi from mul8u_compare::@6 to mul8u_compare::@3 [phi:mul8u_compare::@6->mul8u_compare::@3] - b3_from_b6: - // [221] phi (byte) mul8u_compare::ok#4 = (byte) 0 [phi:mul8u_compare::@6->mul8u_compare::@3#0] -- vbuxx=vbuc1 - ldx #0 - jmp b3 - // [221] phi from mul8u_compare::@12 to mul8u_compare::@3 [phi:mul8u_compare::@12->mul8u_compare::@3] - b3_from_b12: - // [221] phi (byte) mul8u_compare::ok#4 = (byte) 1 [phi:mul8u_compare::@12->mul8u_compare::@3#0] -- vbuxx=vbuc1 - ldx #1 - jmp b3 - // mul8u_compare::@3 - b3: - // [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 -- vwuz1_eq_vwuz2_then_la1 - lda ms - cmp mn - bne !+ - lda ms+1 - cmp mn+1 - beq b14_from_b3 - !: - // [224] phi from mul8u_compare::@3 to mul8u_compare::@4 [phi:mul8u_compare::@3->mul8u_compare::@4] - b4_from_b3: - // [224] phi (byte) mul8u_compare::ok#3 = (byte) 0 [phi:mul8u_compare::@3->mul8u_compare::@4#0] -- vbuxx=vbuc1 - ldx #0 - jmp b4 - // [223] phi from mul8u_compare::@3 to mul8u_compare::@14 [phi:mul8u_compare::@3->mul8u_compare::@14] - b14_from_b3: - jmp b14 - // mul8u_compare::@14 - b14: - // [224] phi from mul8u_compare::@14 to mul8u_compare::@4 [phi:mul8u_compare::@14->mul8u_compare::@4] - b4_from_b14: - // [224] phi (byte) mul8u_compare::ok#3 = (byte) mul8u_compare::ok#4 [phi:mul8u_compare::@14->mul8u_compare::@4#0] -- register_copy - jmp b4 - // mul8u_compare::@4 - b4: - // [225] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 -- vbuxx_neq_0_then_la1 - cpx #0 - bne b5 - jmp b7 - // mul8u_compare::@7 - b7: - // [226] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta BGCOL - // [227] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 - ldx a - // [228] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 - // [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 - // [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 - // [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 - // [232] call mul8u_error - // [242] phi from mul8u_compare::@7 to mul8u_error [phi:mul8u_compare::@7->mul8u_error] - mul8u_error_from_b7: - jsr mul8u_error - jmp breturn - // mul8u_compare::@return - breturn: - // [233] return - rts - // mul8u_compare::@5 - b5: - // [234] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 -- vbuz1=_inc_vbuz1 - inc b - // [235] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 -- vbuz1_neq_0_then_la1 - lda b - cmp #0 - bne b2_from_b5 - jmp b8 - // mul8u_compare::@8 - b8: - // [236] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 -- vbuz1=_inc_vbuz1 - inc a - // [237] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 -- vbuz1_neq_0_then_la1 - lda a - cmp #0 - bne b1_from_b8 - // [238] phi from mul8u_compare::@8 to mul8u_compare::@9 [phi:mul8u_compare::@8->mul8u_compare::@9] - b9_from_b8: - jmp b9 - // mul8u_compare::@9 - b9: - // [239] call print_str - // [114] phi from mul8u_compare::@9 to print_str [phi:mul8u_compare::@9->print_str] - print_str_from_b9: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_compare::@9->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mul8u_compare::str [phi:mul8u_compare::@9->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - // [240] phi from mul8u_compare::@9 to mul8u_compare::@13 [phi:mul8u_compare::@9->mul8u_compare::@13] - b13_from_b9: - jmp b13 - // mul8u_compare::@13 - b13: - // [241] call print_ln - // [80] phi from mul8u_compare::@13 to print_ln [phi:mul8u_compare::@13->print_ln] - print_ln_from_b13: - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8u_compare::@13->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_compare::@13->print_ln#1] -- register_copy - jsr print_ln - jmp breturn - str: .text "multiply results match!@" -} - // mul8u_error -// mul8u_error(byte register(X) a, byte zeropage($f) b, word zeropage(4) ms, word zeropage(8) mn, word zeropage($a) mf) -mul8u_error: { - .label b = $f - .label ms = 4 - .label mn = 8 - .label mf = $a - // [243] call print_str - // [114] phi from mul8u_error to print_str [phi:mul8u_error->print_str] - print_str_from_mul8u_error: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_error->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mul8u_error::str [phi:mul8u_error->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - jmp b1 - // mul8u_error::@1 - b1: - // [244] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 - // [245] call print_byte - // [106] phi from mul8u_error::@1 to print_byte [phi:mul8u_error::@1->print_byte] - print_byte_from_b1: - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@1->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#3 [phi:mul8u_error::@1->print_byte#1] -- register_copy - jsr print_byte - // [246] phi from mul8u_error::@1 to mul8u_error::@2 [phi:mul8u_error::@1->mul8u_error::@2] - b2_from_b1: - jmp b2 - // mul8u_error::@2 - b2: - // [247] call print_str - // [114] phi from mul8u_error::@2 to print_str [phi:mul8u_error::@2->print_str] - print_str_from_b2: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@2->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - jmp b3 - // mul8u_error::@3 - b3: - // [248] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 -- vbuxx=vbuz1 - ldx b - // [249] call print_byte - // [106] phi from mul8u_error::@3 to print_byte [phi:mul8u_error::@3->print_byte] - print_byte_from_b3: - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@3->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#4 [phi:mul8u_error::@3->print_byte#1] -- register_copy - jsr print_byte - // [250] phi from mul8u_error::@3 to mul8u_error::@4 [phi:mul8u_error::@3->mul8u_error::@4] - b4_from_b3: - jmp b4 - // mul8u_error::@4 - b4: - // [251] call print_str - // [114] phi from mul8u_error::@4 to print_str [phi:mul8u_error::@4->print_str] - print_str_from_b4: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@4->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1 - lda #str2 - sta print_str.str+1 - jsr print_str - jmp b5 - // mul8u_error::@5 - b5: - // [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 - // [253] call print_word - // [100] phi from mul8u_error::@5 to print_word [phi:mul8u_error::@5->print_word] - print_word_from_b5: - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@5->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#3 [phi:mul8u_error::@5->print_word#1] -- register_copy - jsr print_word - // [254] phi from mul8u_error::@5 to mul8u_error::@6 [phi:mul8u_error::@5->mul8u_error::@6] - b6_from_b5: - jmp b6 - // mul8u_error::@6 - b6: - // [255] call print_str - // [114] phi from mul8u_error::@6 to print_str [phi:mul8u_error::@6->print_str] - print_str_from_b6: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@6->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1 - lda #str3 - sta print_str.str+1 - jsr print_str - jmp b7 - // mul8u_error::@7 - b7: - // [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 -- vwuz1=vwuz2 - lda mn - sta print_word.w - lda mn+1 - sta print_word.w+1 - // [257] call print_word - // [100] phi from mul8u_error::@7 to print_word [phi:mul8u_error::@7->print_word] - print_word_from_b7: - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@7->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#4 [phi:mul8u_error::@7->print_word#1] -- register_copy - jsr print_word - // [258] phi from mul8u_error::@7 to mul8u_error::@8 [phi:mul8u_error::@7->mul8u_error::@8] - b8_from_b7: - jmp b8 - // mul8u_error::@8 - b8: - // [259] call print_str - // [114] phi from mul8u_error::@8 to print_str [phi:mul8u_error::@8->print_str] - print_str_from_b8: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@8->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1 - lda #str4 - sta print_str.str+1 - jsr print_str - jmp b9 - // mul8u_error::@9 - b9: - // [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 -- vwuz1=vwuz2 - lda mf - sta print_word.w - lda mf+1 - sta print_word.w+1 - // [261] call print_word - // [100] phi from mul8u_error::@9 to print_word [phi:mul8u_error::@9->print_word] - print_word_from_b9: - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@9->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#5 [phi:mul8u_error::@9->print_word#1] -- register_copy - jsr print_word - // [262] phi from mul8u_error::@9 to mul8u_error::@10 [phi:mul8u_error::@9->mul8u_error::@10] - b10_from_b9: - jmp b10 - // mul8u_error::@10 - b10: - // [263] call print_ln - // [80] phi from mul8u_error::@10 to print_ln [phi:mul8u_error::@10->print_ln] - print_ln_from_b10: - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#19 [phi:mul8u_error::@10->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_error::@10->print_ln#1] -- register_copy - jsr print_ln - jmp breturn - // mul8u_error::@return - breturn: - // [264] return - rts - str: .text "multiply mismatch @" -} - // mulf8u -// Fast multiply two unsigned bytes to a word result -// mulf8u(byte register(A) a, byte register(X) b) -mulf8u: { - .label return = $a - // [265] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 - // [266] call mulf8u_prepare - // [185] phi from mulf8u to mulf8u_prepare [phi:mulf8u->mulf8u_prepare] - mulf8u_prepare_from_mulf8u: - // [185] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#0 [phi:mulf8u->mulf8u_prepare#0] -- register_copy - jsr mulf8u_prepare - jmp b1 - // mulf8u::@1 - b1: - // [267] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 - // [268] call mulf8u_prepared - // [180] phi from mulf8u::@1 to mulf8u_prepared [phi:mulf8u::@1->mulf8u_prepared] - mulf8u_prepared_from_b1: - // [180] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#0 [phi:mulf8u::@1->mulf8u_prepared#0] -- register_copy - jsr mulf8u_prepared - // [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 - jmp b2 - // mulf8u::@2 - b2: - // [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 - jmp breturn - // mulf8u::@return - breturn: - // [271] return + // [140] return rts } // muls8u // Slow multiplication of unsigned bytes // Calculate an unsigned multiplication by repeated addition -// muls8u(byte zeropage($c) a, byte register(X) b) +// muls8u(byte zeropage(6) a, byte register(X) b) muls8u: { .label return = 4 .label m = 4 - .label a = $c - // [272] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 -- vbuz1_eq_0_then_la1 + .label a = 6 + // [141] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 -- vbuz1_eq_0_then_la1 lda a cmp #0 beq b1_from_muls8u - // [273] phi from muls8u to muls8u::@2 [phi:muls8u->muls8u::@2] + // [142] phi from muls8u to muls8u::@2 [phi:muls8u->muls8u::@2] b2_from_muls8u: - // [273] phi (word) muls8u::m#3 = (byte) 0 [phi:muls8u->muls8u::@2#0] -- vwuz1=vbuc1 + // [142] phi (word) muls8u::m#3 = (byte) 0 [phi:muls8u->muls8u::@2#0] -- vwuz1=vbuc1 lda #<0 sta m lda #>0 sta m+1 - // [273] phi (byte) muls8u::i#2 = (byte) 0 [phi:muls8u->muls8u::@2#1] -- vbuyy=vbuc1 + // [142] phi (byte) muls8u::i#2 = (byte) 0 [phi:muls8u->muls8u::@2#1] -- vbuyy=vbuc1 ldy #0 jmp b2 // muls8u::@2 b2: - // [274] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 -- vbuyy_neq_vbuz1_then_la1 + // [143] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 -- vbuyy_neq_vbuz1_then_la1 cpy a bne b3 - // [275] phi from muls8u::@2 to muls8u::@1 [phi:muls8u::@2->muls8u::@1] + // [144] phi from muls8u::@2 to muls8u::@1 [phi:muls8u::@2->muls8u::@1] b1_from_b2: - // [275] phi (word) muls8u::return#0 = (word) muls8u::m#3 [phi:muls8u::@2->muls8u::@1#0] -- register_copy + // [144] phi (word) muls8u::return#0 = (word) muls8u::m#3 [phi:muls8u::@2->muls8u::@1#0] -- register_copy jmp b1 - // [275] phi from muls8u to muls8u::@1 [phi:muls8u->muls8u::@1] + // [144] phi from muls8u to muls8u::@1 [phi:muls8u->muls8u::@1] b1_from_muls8u: - // [275] phi (word) muls8u::return#0 = (byte) 0 [phi:muls8u->muls8u::@1#0] -- vwuz1=vbuc1 + // [144] phi (word) muls8u::return#0 = (byte) 0 [phi:muls8u->muls8u::@1#0] -- vwuz1=vbuc1 lda #<0 sta return lda #>0 @@ -9866,11 +7696,11 @@ muls8u: { jmp breturn // muls8u::@return breturn: - // [276] return + // [145] return rts // muls8u::@3 b3: - // [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 -- vwuz1=vwuz1_plus_vbuxx + // [146] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 -- vwuz1=vwuz1_plus_vbuxx txa clc adc m @@ -9878,12 +7708,12 @@ muls8u: { bcc !+ inc m+1 !: - // [278] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 -- vbuyy=_inc_vbuyy + // [147] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 -- vbuyy=_inc_vbuyy iny - // [273] phi from muls8u::@3 to muls8u::@2 [phi:muls8u::@3->muls8u::@2] + // [142] phi from muls8u::@3 to muls8u::@2 [phi:muls8u::@3->muls8u::@2] b2_from_b3: - // [273] phi (word) muls8u::m#3 = (word) muls8u::m#1 [phi:muls8u::@3->muls8u::@2#0] -- register_copy - // [273] phi (byte) muls8u::i#2 = (byte) muls8u::i#1 [phi:muls8u::@3->muls8u::@2#1] -- register_copy + // [142] phi (word) muls8u::m#3 = (word) muls8u::m#1 [phi:muls8u::@3->muls8u::@2#0] -- register_copy + // [142] phi (byte) muls8u::i#2 = (byte) muls8u::i#1 [phi:muls8u::@3->muls8u::@2#1] -- register_copy jmp b2 } // mulf_tables_cmp @@ -9892,14 +7722,14 @@ muls8u: { mulf_tables_cmp: { .label asm_sqr = 4 .label kc_sqr = 2 - // [280] phi from mulf_tables_cmp to mulf_tables_cmp::@1 [phi:mulf_tables_cmp->mulf_tables_cmp::@1] + // [149] phi from mulf_tables_cmp to mulf_tables_cmp::@1 [phi:mulf_tables_cmp->mulf_tables_cmp::@1] b1_from_mulf_tables_cmp: - // [280] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (const byte[$200]) mula_sqr1_lo#0 [phi:mulf_tables_cmp->mulf_tables_cmp::@1#0] -- pbuz1=pbuc1 + // [149] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (const byte[$200]) mula_sqr1_lo#0 [phi:mulf_tables_cmp->mulf_tables_cmp::@1#0] -- pbuz1=pbuc1 lda #mula_sqr1_lo sta asm_sqr+1 - // [280] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (const byte[$200]) mulf_sqr1_lo#0 [phi:mulf_tables_cmp->mulf_tables_cmp::@1#1] -- pbuz1=pbuc1 + // [149] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (const byte[$200]) mulf_sqr1_lo#0 [phi:mulf_tables_cmp->mulf_tables_cmp::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_lo @@ -9907,7 +7737,7 @@ mulf_tables_cmp: { jmp b1 // mulf_tables_cmp::@1 b1: - // [281] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 -- pbuz1_lt_pbuc1_then_la1 + // [150] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte[$200]) mulf_sqr1_lo#0+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 -- pbuz1_lt_pbuc1_then_la1 lda kc_sqr+1 cmp #>mulf_sqr1_lo+$200*4 bcc b2 @@ -9916,35 +7746,35 @@ mulf_tables_cmp: { cmp #mulf_tables_cmp::@3] + // [151] phi from mulf_tables_cmp::@1 to mulf_tables_cmp::@3 [phi:mulf_tables_cmp::@1->mulf_tables_cmp::@3] b3_from_b1: jmp b3 // mulf_tables_cmp::@3 b3: - // [283] call print_str - // [114] phi from mulf_tables_cmp::@3 to print_str [phi:mulf_tables_cmp::@3->print_str] + // [152] call print_str + // [28] phi from mulf_tables_cmp::@3 to print_str [phi:mulf_tables_cmp::@3->print_str] print_str_from_b3: - // [114] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@3->print_str#0] -- pbuz1=pbuc1 + // [28] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@3->print_str#0] -- pbuz1=pbuc1 lda #<$400 sta print_char_cursor lda #>$400 sta print_char_cursor+1 - // [114] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str [phi:mulf_tables_cmp::@3->print_str#1] -- pbuz1=pbuc1 + // [28] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str [phi:mulf_tables_cmp::@3->print_str#1] -- pbuz1=pbuc1 lda #str sta print_str.str+1 jsr print_str - // [284] phi from mulf_tables_cmp::@3 to mulf_tables_cmp::@6 [phi:mulf_tables_cmp::@3->mulf_tables_cmp::@6] + // [153] phi from mulf_tables_cmp::@3 to mulf_tables_cmp::@6 [phi:mulf_tables_cmp::@3->mulf_tables_cmp::@6] b6_from_b3: jmp b6 // mulf_tables_cmp::@6 b6: - // [285] call print_ln - // [80] phi from mulf_tables_cmp::@6 to print_ln [phi:mulf_tables_cmp::@6->print_ln] + // [154] call print_ln + // [23] phi from mulf_tables_cmp::@6 to print_ln [phi:mulf_tables_cmp::@6->print_ln] print_ln_from_b6: - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@6->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) 1024 [phi:mulf_tables_cmp::@6->print_ln#1] -- pbuz1=pbuc1 + // [23] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@6->print_ln#0] -- register_copy + // [23] phi (byte*) print_line_cursor#45 = (byte*) 1024 [phi:mulf_tables_cmp::@6->print_ln#1] -- pbuz1=pbuc1 lda #<$400 sta print_line_cursor lda #>$400 @@ -9953,23 +7783,23 @@ mulf_tables_cmp: { jmp b7 // mulf_tables_cmp::@7 b7: - // [286] (byte*~) print_char_cursor#230 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [155] (byte*~) print_char_cursor#213 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 - // [287] phi from mulf_tables_cmp::@7 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return] + // [156] phi from mulf_tables_cmp::@7 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return] breturn_from_b7: - // [287] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#1 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#0] -- register_copy - // [287] phi (byte*) print_char_cursor#100 = (byte*~) print_char_cursor#230 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#1] -- register_copy + // [156] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#1 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#0] -- register_copy + // [156] phi (byte*) print_char_cursor#100 = (byte*~) print_char_cursor#213 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#1] -- register_copy jmp breturn // mulf_tables_cmp::@return breturn: - // [288] return + // [157] return rts // mulf_tables_cmp::@2 b2: - // [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 -- _deref_pbuz1_eq__deref_pbuz2_then_la1 + // [158] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 -- _deref_pbuz1_eq__deref_pbuz2_then_la1 ldy #0 lda (kc_sqr),y ldy #0 @@ -9978,18 +7808,18 @@ mulf_tables_cmp: { jmp b5 // mulf_tables_cmp::@5 b5: - // [290] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [159] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BGCOL - // [291] call print_str - // [114] phi from mulf_tables_cmp::@5 to print_str [phi:mulf_tables_cmp::@5->print_str] + // [160] call print_str + // [28] phi from mulf_tables_cmp::@5 to print_str [phi:mulf_tables_cmp::@5->print_str] print_str_from_b5: - // [114] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@5->print_str#0] -- pbuz1=pbuc1 + // [28] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@5->print_str#0] -- pbuz1=pbuc1 lda #<$400 sta print_char_cursor lda #>$400 sta print_char_cursor+1 - // [114] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str1 [phi:mulf_tables_cmp::@5->print_str#1] -- pbuz1=pbuc1 + // [28] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str1 [phi:mulf_tables_cmp::@5->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -9998,23 +7828,22 @@ mulf_tables_cmp: { jmp b8 // mulf_tables_cmp::@8 b8: - // [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 - // [293] call print_word - // [100] phi from mulf_tables_cmp::@8 to print_word [phi:mulf_tables_cmp::@8->print_word] + // [161] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 + // [162] call print_word + // [99] phi from mulf_tables_cmp::@8 to print_word [phi:mulf_tables_cmp::@8->print_word] print_word_from_b8: - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@8->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#1 [phi:mulf_tables_cmp::@8->print_word#1] -- register_copy + // [99] phi (word) print_word::w#6 = (word) print_word::w#1 [phi:mulf_tables_cmp::@8->print_word#0] -- register_copy jsr print_word - // [294] phi from mulf_tables_cmp::@8 to mulf_tables_cmp::@9 [phi:mulf_tables_cmp::@8->mulf_tables_cmp::@9] + // [163] phi from mulf_tables_cmp::@8 to mulf_tables_cmp::@9 [phi:mulf_tables_cmp::@8->mulf_tables_cmp::@9] b9_from_b8: jmp b9 // mulf_tables_cmp::@9 b9: - // [295] call print_str - // [114] phi from mulf_tables_cmp::@9 to print_str [phi:mulf_tables_cmp::@9->print_str] + // [164] call print_str + // [28] phi from mulf_tables_cmp::@9 to print_str [phi:mulf_tables_cmp::@9->print_str] print_str_from_b9: - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@9->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str2 [phi:mulf_tables_cmp::@9->print_str#1] -- pbuz1=pbuc1 + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@9->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str2 [phi:mulf_tables_cmp::@9->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -10023,42 +7852,41 @@ mulf_tables_cmp: { jmp b10 // mulf_tables_cmp::@10 b10: - // [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 -- vwuz1=vwuz2 + // [165] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 -- vwuz1=vwuz2 lda kc_sqr sta print_word.w lda kc_sqr+1 sta print_word.w+1 - // [297] call print_word - // [100] phi from mulf_tables_cmp::@10 to print_word [phi:mulf_tables_cmp::@10->print_word] + // [166] call print_word + // [99] phi from mulf_tables_cmp::@10 to print_word [phi:mulf_tables_cmp::@10->print_word] print_word_from_b10: - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@10->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#2 [phi:mulf_tables_cmp::@10->print_word#1] -- register_copy + // [99] phi (word) print_word::w#6 = (word) print_word::w#2 [phi:mulf_tables_cmp::@10->print_word#0] -- register_copy jsr print_word - // [287] phi from mulf_tables_cmp::@10 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return] + // [156] phi from mulf_tables_cmp::@10 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return] breturn_from_b10: - // [287] phi (byte*) print_line_cursor#11 = (byte*) 1024 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#0] -- pbuz1=pbuc1 + // [156] phi (byte*) print_line_cursor#11 = (byte*) 1024 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#0] -- pbuz1=pbuc1 lda #<$400 sta print_line_cursor lda #>$400 sta print_line_cursor+1 - // [287] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#1] -- register_copy + // [156] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#1] -- register_copy jmp breturn // mulf_tables_cmp::@4 b4: - // [298] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 -- pbuz1=_inc_pbuz1 + // [167] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 -- pbuz1=_inc_pbuz1 inc asm_sqr bne !+ inc asm_sqr+1 !: - // [299] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 -- pbuz1=_inc_pbuz1 + // [168] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 -- pbuz1=_inc_pbuz1 inc kc_sqr bne !+ inc kc_sqr+1 !: - // [280] phi from mulf_tables_cmp::@4 to mulf_tables_cmp::@1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1] + // [149] phi from mulf_tables_cmp::@4 to mulf_tables_cmp::@1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1] b1_from_b4: - // [280] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (byte*) mulf_tables_cmp::asm_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#0] -- register_copy - // [280] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (byte*) mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy + // [149] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (byte*) mulf_tables_cmp::asm_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#0] -- register_copy + // [149] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (byte*) mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy jmp b1 str: .text "multiply tables match!@" str1: .text "multiply table mismatch at @" @@ -10109,52 +7937,52 @@ mulf_init_asm: { dey inx bne !- - // [301] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) -- _deref_pbuc1=_deref_pbuc2 + // [170] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr1_lo sta mem - // [302] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) -- _deref_pbuc1=_deref_pbuc2 + // [171] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr1_hi sta mem - // [303] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) -- _deref_pbuc1=_deref_pbuc2 + // [172] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr2_lo sta mem - // [304] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) -- _deref_pbuc1=_deref_pbuc2 + // [173] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr2_hi sta mem jmp breturn // mulf_init_asm::@return breturn: - // [305] return + // [174] return rts } // mulf_init // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4) mulf_init: { - .label c = $f - .label sqr1_hi = 6 - .label sqr = $d + .label c = 6 + .label sqr1_hi = 7 + .label sqr = $e .label sqr1_lo = 4 - .label sqr2_hi = $a - .label sqr2_lo = 8 - .label dir = $c - // [307] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + .label sqr2_hi = $c + .label sqr2_lo = 9 + .label dir = $b + // [176] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] b1_from_mulf_init: - // [307] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 + // [176] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [307] phi (byte*) mulf_init::sqr1_hi#2 = (const byte[$200]) mulf_sqr1_hi#0+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [176] phi (byte*) mulf_init::sqr1_hi#2 = (const byte[$200]) mulf_sqr1_hi#0+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta sqr1_hi+1 - // [307] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [176] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 lda #<0 sta sqr lda #>0 sta sqr+1 - // [307] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [176] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 lda #0 sta c - // [307] phi (byte*) mulf_init::sqr1_lo#2 = (const byte[$200]) mulf_sqr1_lo#0+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [176] phi (byte*) mulf_init::sqr1_lo#2 = (const byte[$200]) mulf_sqr1_lo#0+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -10162,26 +7990,26 @@ mulf_init: { jmp b1 // mulf_init::@1 b1: - // [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [177] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 lda sqr1_lo+1 cmp #>mulf_sqr1_lo+$200 bne b2 lda sqr1_lo cmp #mulf_init::@5] + // [178] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] b5_from_b1: - // [309] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [178] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta dir - // [309] phi (byte*) mulf_init::sqr2_hi#2 = (const byte[$200]) mulf_sqr2_hi#0 [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [178] phi (byte*) mulf_init::sqr2_hi#2 = (const byte[$200]) mulf_sqr2_hi#0 [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta sqr2_hi+1 - // [309] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 + // [178] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 ldx #-1 - // [309] phi (byte*) mulf_init::sqr2_lo#2 = (const byte[$200]) mulf_sqr2_lo#0 [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [178] phi (byte*) mulf_init::sqr2_lo#2 = (const byte[$200]) mulf_sqr2_lo#0 [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -10189,7 +8017,7 @@ mulf_init: { jmp b5 // mulf_init::@5 b5: - // [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [179] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne b6 @@ -10199,114 +8027,114 @@ mulf_init: { jmp b7 // mulf_init::@7 b7: - // [311] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [180] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff - // [312] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [181] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff jmp breturn // mulf_init::@return breturn: - // [313] return + // [182] return rts // mulf_init::@6 b6: - // [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [183] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_lo,x ldy #0 sta (sqr2_lo),y - // [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [184] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_hi,x ldy #0 sta (sqr2_hi),y - // [316] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [185] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc sqr2_hi bne !+ inc sqr2_hi+1 !: - // [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 + // [186] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 txa clc adc dir tax - // [318] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 + // [187] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 cpx #0 bne b9_from_b6 - // [320] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [189] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] b8_from_b6: - // [320] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [189] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta dir jmp b8 - // [319] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [188] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] b9_from_b6: jmp b9 // mulf_init::@9 b9: - // [320] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [189] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] b8_from_b9: - // [320] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [189] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy jmp b8 // mulf_init::@8 b8: - // [321] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [190] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc sqr2_lo bne !+ inc sqr2_lo+1 !: - // [309] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [178] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] b5_from_b8: - // [309] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [309] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [309] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [309] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [178] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [178] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [178] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [178] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp b5 // mulf_init::@2 b2: - // [322] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [191] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc c - // [323] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 + // [192] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 lda #1 and c - // [324] if((byte~) mulf_init::$9!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 + // [193] if((byte~) mulf_init::$9!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 cmp #0 bne b3_from_b2 jmp b4 // mulf_init::@4 b4: - // [325] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx + // [194] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx inx - // [326] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [195] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc sqr bne !+ inc sqr+1 !: - // [327] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [196] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] b3_from_b2: b3_from_b4: - // [327] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [327] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [196] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [196] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy jmp b3 // mulf_init::@3 b3: - // [328] (byte~) mulf_init::$12 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 + // [197] (byte~) mulf_init::$12 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 lda sqr - // [329] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 -- _deref_pbuz1=vbuaa + // [198] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$12 -- _deref_pbuz1=vbuaa ldy #0 sta (sqr1_lo),y - // [330] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 + // [199] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 lda sqr+1 - // [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 -- _deref_pbuz1=vbuaa + // [200] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 -- _deref_pbuz1=vbuaa ldy #0 sta (sqr1_hi),y - // [332] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [201] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc sqr1_hi bne !+ inc sqr1_hi+1 !: - // [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx + // [202] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx txa clc adc sqr @@ -10314,31 +8142,31 @@ mulf_init: { bcc !+ inc sqr+1 !: - // [334] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [203] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc sqr1_lo bne !+ inc sqr1_lo+1 !: - // [307] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [176] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] b1_from_b3: - // [307] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [307] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [307] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [307] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [307] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [176] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [176] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [176] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [176] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [176] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp b1 } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [336] call memset - // [338] phi from print_cls to memset [phi:print_cls->memset] + // [205] call memset + // [207] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp breturn // print_cls::@return breturn: - // [337] return + // [206] return rts } // memset @@ -10348,44 +8176,45 @@ memset: { .const num = $3e8 .label str = $400 .label end = str+num - .label dst = $d - // [339] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [339] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + .label dst = $c + // [208] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [208] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [208] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [209] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [343] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [210] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [339] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [339] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [211] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #0 Removing instruction ldx memB Removing instruction lda memA Removing instruction lda #>0 Replacing instruction ldy #0 with TAY Removing instruction lda #>0 -Removing instruction lda #>0 -Replacing instruction ldy #0 with TAY -Removing instruction lda #>0 -Replacing instruction ldy #0 with TAY -Removing instruction lda #>0 Removing instruction ldy #0 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 @@ -10572,24 +8345,17 @@ Removing instruction lda #0 Removing instruction ldy #0 Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label b15_from_b6 with b7 Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 -Replacing label b1_from_print_sword with b1 -Replacing label b2_from_b4 with b2 Replacing label b1_from_b2 with b1 -Replacing label b1_from_print_sbyte with b1 -Replacing label b2_from_b4 with b2 -Replacing label b1_from_b5 with b1 -Replacing label b2_from_b1 with b2 -Replacing label b3_from_b2 with b3 -Replacing label b1_from_b5 with b1 -Replacing label b2_from_b1 with b2 Replacing label b14_from_b3 with b4 Replacing label b2_from_b5 with b2 Replacing label b1_from_b8 with b1 +Replacing label b3_from_b2 with b3 Replacing label b9_from_b6 with b8 Replacing label b3_from_b2 with b3 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction bend_from_b1: @@ -10602,59 +8368,12 @@ Removing instruction b4_from_b3: Removing instruction mul8u_compare_from_b4: Removing instruction b5_from_b4: Removing instruction mul8s_compare_from_b5: -Removing instruction b11_from_b2: -Removing instruction print_ln_from_b11: -Removing instruction b9_from_b14: -Removing instruction b6_from_b9: -Removing instruction b15_from_b6: -Removing instruction b15: -Removing instruction b7_from_b15: -Removing instruction print_sbyte_from_b1: Removing instruction b2_from_b1: -Removing instruction print_str_from_b2: -Removing instruction b4_from_b3: -Removing instruction print_str_from_b4: -Removing instruction print_sword_from_b5: -Removing instruction b6_from_b5: -Removing instruction print_str_from_b6: -Removing instruction b8_from_b7: -Removing instruction print_str_from_b8: -Removing instruction b10_from_b9: -Removing instruction print_ln_from_b10: +Removing instruction print_ln_from_b2: Removing instruction b1_from_print_ln: Removing instruction b1_from_b1: -Removing instruction b3_from_print_sword: -Removing instruction print_char_from_b3: -Removing instruction b2_from_b3: -Removing instruction b2_from_b4: -Removing instruction print_word_from_b2: -Removing instruction b1_from_print_sword: -Removing instruction print_char_from_b1: Removing instruction b1_from_print_str: Removing instruction b1_from_b2: -Removing instruction b3_from_print_sbyte: -Removing instruction print_char_from_b3: -Removing instruction b2_from_b3: -Removing instruction b2_from_b4: -Removing instruction print_byte_from_b2: -Removing instruction b1_from_print_sbyte: -Removing instruction print_char_from_b1: -Removing instruction b1_from_b3: -Removing instruction b1_from_b5: -Removing instruction b2_from_b1: -Removing instruction b2_from_b4: -Removing instruction breturn: -Removing instruction b3_from_b2: -Removing instruction b3_from_b4: -Removing instruction mulf8u_prepare_from_mulf8s_prepare1: -Removing instruction breturn: -Removing instruction b1_from_b3: -Removing instruction b1_from_b5: -Removing instruction b2_from_b1: -Removing instruction b2_from_b4: -Removing instruction breturn: -Removing instruction b1_from_b3: -Removing instruction breturn: Removing instruction b1_from_b8: Removing instruction b2_from_b1: Removing instruction b2_from_b5: @@ -10679,7 +8398,8 @@ Removing instruction b8_from_b7: Removing instruction print_str_from_b8: Removing instruction b10_from_b9: Removing instruction print_ln_from_b10: -Removing instruction mulf8u_prepared_from_b1: +Removing instruction b3_from_b2: +Removing instruction b3_from_b4: Removing instruction breturn: Removing instruction breturn: Removing instruction b3_from_b1: @@ -10695,6 +8415,7 @@ Removing instruction b9: Removing instruction b8_from_b9: Removing instruction b3_from_b2: Removing instruction b3_from_b4: +Removing instruction b2_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction print_cls_from_main: @@ -10704,73 +8425,12 @@ Removing instruction b3: Removing instruction b4: Removing instruction b5: Removing instruction breturn: -Removing instruction b1_from_mul8s_compare: -Removing instruction b2: -Removing instruction print_str_from_b2: -Removing instruction b11: -Removing instruction b5: -Removing instruction b1_from_b5: -Removing instruction b12: -Removing instruction mulf8s_from_b12: -Removing instruction b13: -Removing instruction b14: -Removing instruction b9: -Removing instruction b7_from_b6: -Removing instruction b10: -Removing instruction b3_from_b8: -Removing instruction print_str_from_mul8s_error: Removing instruction b1: +Removing instruction print_str_from_b1: Removing instruction b2: -Removing instruction b3: -Removing instruction print_sbyte_from_b3: -Removing instruction b4: -Removing instruction b5: -Removing instruction b6: -Removing instruction b7: -Removing instruction print_sword_from_b7: -Removing instruction b8: -Removing instruction b9: -Removing instruction print_sword_from_b9: -Removing instruction b10: Removing instruction breturn: Removing instruction breturn: -Removing instruction b3: Removing instruction breturn: -Removing instruction b4: -Removing instruction breturn: -Removing instruction print_byte_from_print_word: -Removing instruction b1: -Removing instruction print_byte_from_b1: -Removing instruction breturn: -Removing instruction print_char_from_print_byte: -Removing instruction b1: -Removing instruction print_char_from_b1: -Removing instruction breturn: -Removing instruction breturn: -Removing instruction b3: -Removing instruction breturn: -Removing instruction b4: -Removing instruction mul8u_from_mul8s: -Removing instruction b5: -Removing instruction b3: -Removing instruction b4: -Removing instruction b1_from_mul8u: -Removing instruction breturn: -Removing instruction b4: -Removing instruction b1_from_b3: -Removing instruction mulf8s_prepare1: -Removing instruction b1: -Removing instruction b2: -Removing instruction mulf8u_prepared_from_mulf8s_prepared: -Removing instruction b5: -Removing instruction b3: -Removing instruction b4: -Removing instruction breturn: -Removing instruction breturn: -Removing instruction b2: -Removing instruction b3_from_b2: -Removing instruction b3_from_b4: -Removing instruction b5_from_b6: Removing instruction b1_from_mul8u_compare: Removing instruction b10: Removing instruction b11: @@ -10798,9 +8458,23 @@ Removing instruction b9: Removing instruction print_word_from_b9: Removing instruction b10: Removing instruction breturn: -Removing instruction mulf8u_prepare_from_mulf8u: +Removing instruction print_byte_from_print_word: +Removing instruction b1: +Removing instruction print_byte_from_b1: +Removing instruction breturn: +Removing instruction print_char_from_print_byte: +Removing instruction b1: +Removing instruction print_char_from_b1: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction b1_from_mul8u: +Removing instruction breturn: +Removing instruction b4: +Removing instruction b1_from_b3: Removing instruction b1: Removing instruction b2: +Removing instruction breturn: +Removing instruction breturn: Removing instruction b2_from_muls8u: Removing instruction b1_from_b2: Removing instruction b2_from_b3: @@ -10827,47 +8501,31 @@ Removing instruction b4: Removing instruction b1_from_b3: Removing instruction memset_from_print_cls: Removing instruction breturn: -Removing instruction b1_from_memset: +Removing instruction b2_from_memset: +Removing instruction b1: Removing instruction breturn: -Removing instruction b1_from_b2: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp b1 -Skipping double jump to b1 in jmp b1_from_b5 -Replacing jump to rts with rts in jmp breturn -Replacing jump to rts with rts in jmp b1 Replacing jump to rts with rts in jmp breturn Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b3_from_b1 to b2 -Relabelling long label b6_from_b14 to b5 -Relabelling long label b1_from_b5 to b2 -Relabelling long label b1_from_b2 to b7 -Relabelling long label b5_from_muls8s to b8 Relabelling long label b3_from_b12 to b6 Relabelling long label b1_from_muls8u to b4 Succesful ASM optimization Pass5RelabelLongLabels -Removing instruction jmp b7 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b4 Removing instruction jmp b8 +Removing instruction jmp b2 Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda a -Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction bbegin: Removing instruction breturn: -Removing instruction b2: -Removing instruction breturn: Removing instruction b1: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Replacing jump to rts with rts in jmp b1 -Succesful ASM optimization Pass5DoubleJumpElimination -Removing instruction b1: -Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE (label) @1 @@ -10893,8 +8551,8 @@ FINAL SYMBOL TABLE (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:13 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:13 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:12 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:12 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -10902,84 +8560,17 @@ FINAL SYMBOL TABLE (void*) memset::return (void*) memset::str (const void*) memset::str#0 str = (void*)(byte*) 1024 -(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) -(byte~) mul8s::$13 reg byte a 4.0 -(byte~) mul8s::$16 reg byte a 4.0 -(byte~) mul8s::$17 reg byte a 4.0 -(byte~) mul8s::$9 reg byte a 4.0 -(label) mul8s::@1 -(label) mul8s::@2 -(label) mul8s::@3 -(label) mul8s::@4 -(label) mul8s::@5 -(label) mul8s::@return -(signed byte) mul8s::a -(signed byte) mul8s::a#0 a zp ZP_BYTE:12 7.357142857142858 -(signed byte) mul8s::b -(signed byte) mul8s::b#0 reg byte y 9.363636363636363 -(word) mul8s::m -(word) mul8s::m#0 m zp ZP_WORD:8 2.0 -(word) mul8s::m#1 m zp ZP_WORD:8 4.0 -(word) mul8s::m#2 m zp ZP_WORD:8 4.0 -(word) mul8s::m#4 m zp ZP_WORD:8 1.3333333333333333 -(word) mul8s::m#5 m zp ZP_WORD:8 2.5 -(signed word) mul8s::return (void()) mul8s_compare() (label) mul8s_compare::@1 -(label) mul8s_compare::@10 -(label) mul8s_compare::@11 -(label) mul8s_compare::@12 -(label) mul8s_compare::@13 -(label) mul8s_compare::@14 -(label) mul8s_compare::@15 (label) mul8s_compare::@2 -(label) mul8s_compare::@3 -(label) mul8s_compare::@4 -(label) mul8s_compare::@5 -(label) mul8s_compare::@6 -(label) mul8s_compare::@7 -(label) mul8s_compare::@8 -(label) mul8s_compare::@9 (label) mul8s_compare::@return (signed byte) mul8s_compare::a -(signed byte) mul8s_compare::a#1 a zp ZP_BYTE:12 22.0 -(signed byte) mul8s_compare::a#10 a zp ZP_BYTE:12 12.518518518518519 (signed byte) mul8s_compare::b -(signed byte) mul8s_compare::b#1 b zp ZP_BYTE:15 202.0 -(signed byte) mul8s_compare::b#10 b zp ZP_BYTE:15 24.319999999999997 (signed word) mul8s_compare::mf -(signed word) mul8s_compare::mf#0 mf zp ZP_WORD:10 12.0 (signed word) mul8s_compare::mn -(signed word) mul8s_compare::mn#0 mn zp ZP_WORD:8 17.0 (signed word) mul8s_compare::ms -(signed word) mul8s_compare::ms#0 ms zp ZP_WORD:4 15.249999999999998 (byte) mul8s_compare::ok -(byte) mul8s_compare::ok#3 reg byte x 202.0 -(byte) mul8s_compare::ok#4 reg byte x 33.666666666666664 (const string) mul8s_compare::str str = (string) "signed multiply results match!@" -(void()) mul8s_error((signed byte) mul8s_error::a , (signed byte) mul8s_error::b , (signed word) mul8s_error::ms , (signed word) mul8s_error::mn , (signed word) mul8s_error::mf) -(label) mul8s_error::@1 -(label) mul8s_error::@10 -(label) mul8s_error::@2 -(label) mul8s_error::@3 -(label) mul8s_error::@4 -(label) mul8s_error::@5 -(label) mul8s_error::@6 -(label) mul8s_error::@7 -(label) mul8s_error::@8 -(label) mul8s_error::@9 -(label) mul8s_error::@return -(signed byte) mul8s_error::a -(signed byte) mul8s_error::a#0 reg byte x 0.5714285714285714 -(signed byte) mul8s_error::b -(signed byte) mul8s_error::b#0 b zp ZP_BYTE:15 0.4 -(signed word) mul8s_error::mf -(signed word) mul8s_error::mf#0 mf zp ZP_WORD:10 0.21052631578947367 -(signed word) mul8s_error::mn -(signed word) mul8s_error::mn#0 mn zp ZP_WORD:8 0.25 -(signed word) mul8s_error::ms -(signed word) mul8s_error::ms#0 ms zp ZP_WORD:4 0.3076923076923077 -(const string) mul8s_error::str str = (string) "signed multiply mismatch @" (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) (byte~) mul8u::$1 reg byte a 2002.0 (label) mul8u::@1 @@ -10989,24 +8580,19 @@ FINAL SYMBOL TABLE (label) mul8u::@return (byte) mul8u::a (byte) mul8u::a#0 reg byte x 1001.0 -(byte) mul8u::a#1 reg byte x 2.0 -(byte) mul8u::a#2 reg byte x 101.0 +(byte) mul8u::a#2 reg byte x 34.33333333333333 (byte) mul8u::a#3 reg byte x 667.6666666666667 -(byte) mul8u::a#6 reg byte x 105.0 (byte) mul8u::b -(byte) mul8u::b#0 reg byte a 4.0 -(byte) mul8u::b#1 reg byte a 202.0 +(byte) mul8u::b#1 reg byte a 51.5 (word) mul8u::mb -(word) mul8u::mb#0 mb zp ZP_WORD:13 105.0 -(word) mul8u::mb#1 mb zp ZP_WORD:13 2002.0 -(word) mul8u::mb#2 mb zp ZP_WORD:13 429.2857142857143 +(word) mul8u::mb#1 mb zp ZP_WORD:12 2002.0 +(word) mul8u::mb#2 mb zp ZP_WORD:12 429.2857142857143 (word) mul8u::res -(word) mul8u::res#1 res zp ZP_WORD:8 2002.0 -(word) mul8u::res#2 res zp ZP_WORD:8 443.7142857142857 -(word) mul8u::res#6 res zp ZP_WORD:8 1001.0 +(word) mul8u::res#1 res zp ZP_WORD:9 2002.0 +(word) mul8u::res#2 res zp ZP_WORD:9 517.3333333333334 +(word) mul8u::res#6 res zp ZP_WORD:9 1001.0 (word) mul8u::return -(word) mul8u::return#2 return zp ZP_WORD:8 4.0 -(word) mul8u::return#3 return zp ZP_WORD:8 202.0 +(word) mul8u::return#3 return zp ZP_WORD:9 202.0 (void()) mul8u_compare() (label) mul8u_compare::@1 (label) mul8u_compare::@10 @@ -11024,15 +8610,15 @@ FINAL SYMBOL TABLE (label) mul8u_compare::@9 (label) mul8u_compare::@return (byte) mul8u_compare::a -(byte) mul8u_compare::a#1 a zp ZP_BYTE:12 16.5 -(byte) mul8u_compare::a#7 a zp ZP_BYTE:12 12.11111111111111 +(byte) mul8u_compare::a#1 a zp ZP_BYTE:6 16.5 +(byte) mul8u_compare::a#7 a zp ZP_BYTE:6 12.11111111111111 (byte) mul8u_compare::b -(byte) mul8u_compare::b#1 b zp ZP_BYTE:15 151.5 -(byte) mul8u_compare::b#10 b zp ZP_BYTE:15 20.279999999999998 +(byte) mul8u_compare::b#1 b zp ZP_BYTE:11 151.5 +(byte) mul8u_compare::b#10 b zp ZP_BYTE:11 20.279999999999998 (word) mul8u_compare::mf -(word) mul8u_compare::mf#0 mf zp ZP_WORD:10 11.333333333333332 +(word) mul8u_compare::mf#0 mf zp ZP_WORD:14 11.333333333333332 (word) mul8u_compare::mn -(word) mul8u_compare::mn#0 mn zp ZP_WORD:8 17.0 +(word) mul8u_compare::mn#0 mn zp ZP_WORD:9 17.0 (word) mul8u_compare::ms (word) mul8u_compare::ms#0 ms zp ZP_WORD:4 14.523809523809522 (byte) mul8u_compare::ok @@ -11054,11 +8640,11 @@ FINAL SYMBOL TABLE (byte) mul8u_error::a (byte) mul8u_error::a#0 reg byte x 0.5714285714285714 (byte) mul8u_error::b -(byte) mul8u_error::b#0 b zp ZP_BYTE:15 0.4 +(byte) mul8u_error::b#0 b zp ZP_BYTE:11 0.4 (word) mul8u_error::mf -(word) mul8u_error::mf#0 mf zp ZP_WORD:10 0.21052631578947367 +(word) mul8u_error::mf#0 mf zp ZP_WORD:14 0.21052631578947367 (word) mul8u_error::mn -(word) mul8u_error::mn#0 mn zp ZP_WORD:8 0.25 +(word) mul8u_error::mn#0 mn zp ZP_WORD:9 0.25 (word) mul8u_error::ms (word) mul8u_error::ms#0 ms zp ZP_WORD:4 0.3076923076923077 (const string) mul8u_error::str str = (string) "multiply mismatch @" @@ -11070,42 +8656,6 @@ FINAL SYMBOL TABLE (const byte[$200]) mula_sqr2_hi#0 mula_sqr2_hi = { fill( $200, 0) } (byte[$200]) mula_sqr2_lo (const byte[$200]) mula_sqr2_lo#0 mula_sqr2_lo = { fill( $200, 0) } -(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) -(label) mulf8s::@1 -(label) mulf8s::@2 -(label) mulf8s::@return -(signed byte) mulf8s::a -(signed byte) mulf8s::a#0 reg byte a 33.666666666666664 -(signed byte) mulf8s::b -(signed byte) mulf8s::b#0 reg byte x 25.75 -(label) mulf8s::mulf8s_prepare1 -(byte~) mulf8s::mulf8s_prepare1_$0 -(signed byte) mulf8s::mulf8s_prepare1_a -(signed word) mulf8s::return -(signed word) mulf8s::return#0 return zp ZP_WORD:10 34.33333333333333 -(signed word) mulf8s::return#2 return zp ZP_WORD:10 202.0 -(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) -(byte~) mulf8s_prepared::$12 reg byte a 4.0 -(byte~) mulf8s_prepared::$15 reg byte a 4.0 -(byte~) mulf8s_prepared::$16 reg byte a 4.0 -(byte~) mulf8s_prepared::$8 reg byte a 4.0 -(label) mulf8s_prepared::@1 -(label) mulf8s_prepared::@2 -(label) mulf8s_prepared::@3 -(label) mulf8s_prepared::@4 -(label) mulf8s_prepared::@5 -(label) mulf8s_prepared::@return -(signed byte) mulf8s_prepared::b -(signed byte) mulf8s_prepared::b#0 b zp ZP_BYTE:15 0.4 -(word) mulf8s_prepared::m -(word) mulf8s_prepared::m#0 m zp ZP_WORD:10 2.0 -(word) mulf8s_prepared::m#1 m zp ZP_WORD:10 4.0 -(word) mulf8s_prepared::m#2 m zp ZP_WORD:10 4.0 -(word) mulf8s_prepared::m#4 m zp ZP_WORD:10 1.3333333333333333 -(word) mulf8s_prepared::m#5 m zp ZP_WORD:10 2.5 -(signed byte*) mulf8s_prepared::memA -(const signed byte*) mulf8s_prepared::memA#0 memA = (signed byte*) 253 -(signed word) mulf8s_prepared::return (word()) mulf8u((byte) mulf8u::a , (byte) mulf8u::b) (label) mulf8u::@1 (label) mulf8u::@2 @@ -11115,30 +8665,25 @@ FINAL SYMBOL TABLE (byte) mulf8u::b (byte) mulf8u::b#0 reg byte x 34.33333333333333 (word) mulf8u::return -(word) mulf8u::return#0 return zp ZP_WORD:10 34.33333333333333 -(word) mulf8u::return#2 return zp ZP_WORD:10 202.0 +(word) mulf8u::return#0 return zp ZP_WORD:14 34.33333333333333 +(word) mulf8u::return#2 return zp ZP_WORD:14 202.0 (void()) mulf8u_prepare((byte) mulf8u_prepare::a) (label) mulf8u_prepare::@return (byte) mulf8u_prepare::a (byte) mulf8u_prepare::a#0 reg byte a 4.0 -(byte) mulf8u_prepare::a#1 reg byte a 4.0 -(byte) mulf8u_prepare::a#2 reg byte a 6.0 (byte*) mulf8u_prepare::memA (const byte*) mulf8u_prepare::memA#0 memA = (byte*) 253 (word()) mulf8u_prepared((byte) mulf8u_prepared::b) (label) mulf8u_prepared::@return (byte) mulf8u_prepared::b (byte) mulf8u_prepared::b#0 reg byte x 4.0 -(byte) mulf8u_prepared::b#1 reg byte x 4.0 -(byte) mulf8u_prepared::b#2 reg byte x 6.0 (byte*) mulf8u_prepared::memB (const byte*) mulf8u_prepared::memB#0 memB = (byte*) 255 (byte*) mulf8u_prepared::resL (const byte*) mulf8u_prepared::resL#0 resL = (byte*) 254 (word) mulf8u_prepared::return -(word) mulf8u_prepared::return#0 return zp ZP_WORD:10 1.5 -(word) mulf8u_prepared::return#2 return zp ZP_WORD:10 4.0 -(word) mulf8u_prepared::return#3 return zp ZP_WORD:10 4.0 +(word) mulf8u_prepared::return#0 return zp ZP_WORD:14 1.3333333333333333 +(word) mulf8u_prepared::return#2 return zp ZP_WORD:14 4.0 (void()) mulf_init() (byte~) mulf_init::$12 reg byte a 22.0 (byte~) mulf_init::$13 reg byte a 22.0 @@ -11154,28 +8699,28 @@ FINAL SYMBOL TABLE (label) mulf_init::@9 (label) mulf_init::@return (byte) mulf_init::c -(byte) mulf_init::c#1 c zp ZP_BYTE:15 2.5384615384615383 -(byte) mulf_init::c#2 c zp ZP_BYTE:15 11.0 +(byte) mulf_init::c#1 c zp ZP_BYTE:6 2.5384615384615383 +(byte) mulf_init::c#2 c zp ZP_BYTE:6 11.0 (byte) mulf_init::dir -(byte) mulf_init::dir#2 dir zp ZP_BYTE:12 4.125 -(byte) mulf_init::dir#4 dir zp ZP_BYTE:12 11.0 +(byte) mulf_init::dir#2 dir zp ZP_BYTE:11 4.125 +(byte) mulf_init::dir#4 dir zp ZP_BYTE:11 11.0 (word) mulf_init::sqr -(word) mulf_init::sqr#1 sqr zp ZP_WORD:13 11.0 -(word) mulf_init::sqr#2 sqr zp ZP_WORD:13 22.0 -(word) mulf_init::sqr#3 sqr zp ZP_WORD:13 9.166666666666666 -(word) mulf_init::sqr#4 sqr zp ZP_WORD:13 5.5 +(word) mulf_init::sqr#1 sqr zp ZP_WORD:14 11.0 +(word) mulf_init::sqr#2 sqr zp ZP_WORD:14 22.0 +(word) mulf_init::sqr#3 sqr zp ZP_WORD:14 9.166666666666666 +(word) mulf_init::sqr#4 sqr zp ZP_WORD:14 5.5 (byte*) mulf_init::sqr1_hi -(byte*) mulf_init::sqr1_hi#1 sqr1_hi zp ZP_WORD:6 7.333333333333333 -(byte*) mulf_init::sqr1_hi#2 sqr1_hi zp ZP_WORD:6 2.75 +(byte*) mulf_init::sqr1_hi#1 sqr1_hi zp ZP_WORD:7 7.333333333333333 +(byte*) mulf_init::sqr1_hi#2 sqr1_hi zp ZP_WORD:7 2.75 (byte*) mulf_init::sqr1_lo (byte*) mulf_init::sqr1_lo#1 sqr1_lo zp ZP_WORD:4 22.0 (byte*) mulf_init::sqr1_lo#2 sqr1_lo zp ZP_WORD:4 3.142857142857143 (byte*) mulf_init::sqr2_hi -(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp ZP_WORD:10 3.6666666666666665 -(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp ZP_WORD:10 8.25 +(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp ZP_WORD:12 3.6666666666666665 +(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp ZP_WORD:12 8.25 (byte*) mulf_init::sqr2_lo -(byte*) mulf_init::sqr2_lo#1 sqr2_lo zp ZP_WORD:8 22.0 -(byte*) mulf_init::sqr2_lo#2 sqr2_lo zp ZP_WORD:8 4.888888888888889 +(byte*) mulf_init::sqr2_lo#1 sqr2_lo zp ZP_WORD:9 22.0 +(byte*) mulf_init::sqr2_lo#2 sqr2_lo zp ZP_WORD:9 4.888888888888889 (byte) mulf_init::x_2 (byte) mulf_init::x_2#1 reg byte x 11.0 (byte) mulf_init::x_2#2 reg byte x 5.5 @@ -11216,39 +8761,13 @@ FINAL SYMBOL TABLE (const string) mulf_tables_cmp::str str = (string) "multiply tables match!@" (const string) mulf_tables_cmp::str1 str1 = (string) "multiply table mismatch at @" (const string) mulf_tables_cmp::str2 str2 = (string) " / @" -(signed word()) muls8s((signed byte) muls8s::a , (signed byte) muls8s::b) -(label) muls8s::@1 -(label) muls8s::@2 -(label) muls8s::@3 -(label) muls8s::@4 -(label) muls8s::@5 -(label) muls8s::@6 -(label) muls8s::@return -(signed byte) muls8s::a -(signed byte) muls8s::a#0 a zp ZP_BYTE:12 175.58333333333334 -(signed byte) muls8s::b -(signed byte) muls8s::b#0 reg byte x 191.1818181818182 -(signed byte) muls8s::i -(signed byte) muls8s::i#1 reg byte y 2002.0 -(signed byte) muls8s::i#2 reg byte y 1001.0 -(signed byte) muls8s::j -(signed byte) muls8s::j#1 reg byte y 2002.0 -(signed byte) muls8s::j#2 reg byte y 1001.0 -(signed word) muls8s::m -(signed word) muls8s::m#1 m zp ZP_WORD:4 1001.0 -(signed word) muls8s::m#2 m zp ZP_WORD:4 1001.0 -(signed word) muls8s::m#3 m zp ZP_WORD:4 1501.5 -(signed word) muls8s::m#5 m zp ZP_WORD:4 1501.5 -(signed word) muls8s::return -(signed word) muls8s::return#0 return zp ZP_WORD:4 701.0 -(signed word) muls8s::return#2 return zp ZP_WORD:4 202.0 (word()) muls8u((byte) muls8u::a , (byte) muls8u::b) (label) muls8u::@1 (label) muls8u::@2 (label) muls8u::@3 (label) muls8u::@return (byte) muls8u::a -(byte) muls8u::a#0 a zp ZP_BYTE:12 157.71428571428572 +(byte) muls8u::a#0 a zp ZP_BYTE:6 157.71428571428572 (byte) muls8u::b (byte) muls8u::b#0 reg byte x 183.66666666666669 (byte) muls8u::i @@ -11266,12 +8785,11 @@ FINAL SYMBOL TABLE (label) print_byte::@1 (label) print_byte::@return (byte) print_byte::b -(byte) print_byte::b#0 reg byte x 4.0 (byte) print_byte::b#1 reg byte x 4.0 (byte) print_byte::b#2 reg byte x 4.0 (byte) print_byte::b#3 reg byte x 4.0 (byte) print_byte::b#4 reg byte x 4.0 -(byte) print_byte::b#5 reg byte x 3.5 +(byte) print_byte::b#5 reg byte x 3.0 (void()) print_char((byte) print_char::ch) (label) print_char::@return (byte) print_char::ch @@ -11279,130 +8797,84 @@ FINAL SYMBOL TABLE (byte) print_char::ch#5 reg byte a 4.0 (byte) print_char::ch#6 reg byte a 6.0 (byte*) print_char_cursor -(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:6 11.0 -(byte*) print_char_cursor#100 print_char_cursor zp ZP_WORD:6 0.1951219512195122 -(byte*) print_char_cursor#134 print_char_cursor zp ZP_WORD:6 1.5 -(byte*) print_char_cursor#135 print_char_cursor zp ZP_WORD:6 5.25 -(byte*) print_char_cursor#142 print_char_cursor zp ZP_WORD:6 7.0 -(byte*) print_char_cursor#143 print_char_cursor zp ZP_WORD:6 3.9999999999999996 -(byte*) print_char_cursor#155 print_char_cursor zp ZP_WORD:6 28.0 -(byte*) print_char_cursor#19 print_char_cursor zp ZP_WORD:6 0.7083333333333331 -(byte*~) print_char_cursor#193 print_char_cursor zp ZP_WORD:6 4.0 -(byte*~) print_char_cursor#194 print_char_cursor zp ZP_WORD:6 4.0 -(byte*~) print_char_cursor#230 print_char_cursor zp ZP_WORD:6 4.0 -(byte*) print_char_cursor#86 print_char_cursor zp ZP_WORD:6 8.0 +(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:7 11.0 +(byte*) print_char_cursor#100 print_char_cursor zp ZP_WORD:7 0.1951219512195122 +(byte*) print_char_cursor#134 print_char_cursor zp ZP_WORD:7 1.8076923076923077 +(byte*) print_char_cursor#135 print_char_cursor zp ZP_WORD:7 4.75 +(byte*) print_char_cursor#143 print_char_cursor zp ZP_WORD:7 3.333333333333333 +(byte*) print_char_cursor#155 print_char_cursor zp ZP_WORD:7 18.0 +(byte*) print_char_cursor#19 print_char_cursor zp ZP_WORD:7 0.8333333333333334 +(byte*~) print_char_cursor#193 print_char_cursor zp ZP_WORD:7 4.0 +(byte*~) print_char_cursor#213 print_char_cursor zp ZP_WORD:7 4.0 +(byte*) print_char_cursor#86 print_char_cursor zp ZP_WORD:7 4.0 (void()) print_cls() (label) print_cls::@return (byte[]) print_hextab (const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef" (byte*) print_line_cursor -(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:2 0.6428571428571428 +(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:2 2.5625 (byte*) print_line_cursor#11 print_line_cursor zp ZP_WORD:2 0.09523809523809523 (byte*) print_line_cursor#23 print_line_cursor zp ZP_WORD:2 24.0 -(byte*) print_line_cursor#45 print_line_cursor zp ZP_WORD:2 10.0 +(byte*) print_line_cursor#45 print_line_cursor zp ZP_WORD:2 8.0 (void()) print_ln() (label) print_ln::@1 (label) print_ln::@return -(void()) print_sbyte((signed byte) print_sbyte::b) -(label) print_sbyte::@1 -(label) print_sbyte::@2 -(label) print_sbyte::@3 -(label) print_sbyte::@4 -(label) print_sbyte::@return -(signed byte) print_sbyte::b -(signed byte) print_sbyte::b#0 reg byte x 4.0 -(signed byte) print_sbyte::b#1 reg byte x 4.0 -(signed byte) print_sbyte::b#2 reg byte x 4.0 -(signed byte) print_sbyte::b#3 reg byte x 1.6666666666666665 -(signed byte) print_sbyte::b#5 reg byte x 4.0 (byte*) print_screen (void()) print_str((byte*) print_str::str) (label) print_str::@1 (label) print_str::@2 (label) print_str::@return (byte*) print_str::str -(byte*) print_str::str#0 str zp ZP_WORD:13 22.0 -(byte*) print_str::str#16 str zp ZP_WORD:13 11.5 -(byte*) print_str::str#18 str zp ZP_WORD:13 2.0 -(void()) print_sword((signed word) print_sword::w) -(label) print_sword::@1 -(label) print_sword::@2 -(label) print_sword::@3 -(label) print_sword::@4 -(label) print_sword::@return -(signed word) print_sword::w -(signed word) print_sword::w#0 w zp ZP_WORD:4 4.0 -(signed word) print_sword::w#1 w zp ZP_WORD:4 4.0 -(signed word) print_sword::w#2 w zp ZP_WORD:4 4.0 -(signed word) print_sword::w#3 w zp ZP_WORD:4 4.0 -(signed word) print_sword::w#4 w zp ZP_WORD:4 1.9999999999999998 -(signed word) print_sword::w#6 w zp ZP_WORD:4 4.0 +(byte*) print_str::str#0 str zp ZP_WORD:12 22.0 +(byte*) print_str::str#16 str zp ZP_WORD:12 11.5 +(byte*) print_str::str#18 str zp ZP_WORD:12 2.0 (void()) print_word((word) print_word::w) (label) print_word::@1 (label) print_word::@return (word) print_word::w -(word) print_word::w#0 w zp ZP_WORD:4 4.0 (word) print_word::w#1 w zp ZP_WORD:4 4.0 (word) print_word::w#2 w zp ZP_WORD:4 4.0 (word) print_word::w#3 w zp ZP_WORD:4 4.0 (word) print_word::w#4 w zp ZP_WORD:4 4.0 (word) print_word::w#5 w zp ZP_WORD:4 4.0 -(word) print_word::w#6 w zp ZP_WORD:4 5.333333333333333 +(word) print_word::w#6 w zp ZP_WORD:4 4.666666666666666 (const string) str1 str1 = (string) "*@" (const string) str2 str2 = (string) " slow:@" (const string) str3 str3 = (string) " / normal:@" (const string) str4 str4 = (string) " / fast:@" -reg byte x [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] -reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] -reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] -reg byte a [ mul8u::b#0 ] -reg byte a [ mul8u::b#1 ] -reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] -reg byte x [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] -reg byte a [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] -reg byte y [ muls8s::j#2 muls8s::j#1 ] -reg byte y [ muls8s::i#2 muls8s::i#1 ] reg byte x [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] +reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#1 print_byte::b#2 ] +reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] +reg byte x [ mul8u::a#3 mul8u::a#2 mul8u::a#0 ] +reg byte a [ mul8u::b#1 ] reg byte y [ muls8u::i#2 muls8u::i#1 ] zp ZP_WORD:2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] -zp ZP_WORD:4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] -zp ZP_WORD:6 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 print_char_cursor#155 print_char_cursor#193 print_char_cursor#194 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#230 ] +zp ZP_WORD:4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8u_error::ms#0 mul8u_compare::ms#0 muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] +zp ZP_BYTE:6 [ mulf_init::c#2 mulf_init::c#1 mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 ] +zp ZP_WORD:7 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 print_char_cursor#86 print_char_cursor#143 print_char_cursor#155 print_char_cursor#193 print_char_cursor#100 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#1 print_char_cursor#213 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -zp ZP_WORD:8 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8s_error::mn#0 mul8u_compare::mn#0 mul8u_error::mn#0 ] +zp ZP_WORD:9 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8u_compare::mn#0 mul8u_error::mn#0 ] reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] -zp ZP_WORD:10 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 mul8s_error::mf#0 mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 ] -zp ZP_BYTE:12 [ mulf_init::dir#2 mulf_init::dir#4 mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 ] -zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 print_str::str#16 print_str::str#18 print_str::str#0 ] -reg byte x [ muls8s::b#0 ] -reg byte a [ mulf8s::a#0 ] -reg byte x [ mulf8s::b#0 ] -reg byte y [ mul8s::b#0 ] -reg byte x [ mul8s_error::a#0 ] -reg byte a [ print_byte::$0 ] -reg byte x [ print_byte::$2 ] -reg byte a [ mul8s::$9 ] -reg byte a [ mul8s::$16 ] -reg byte a [ mul8s::$13 ] -reg byte a [ mul8s::$17 ] -reg byte a [ mul8u::$1 ] -zp ZP_BYTE:15 [ mulf8s_prepared::b#0 mulf_init::c#2 mulf_init::c#1 mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 ] -reg byte a [ mulf8s_prepared::$8 ] -reg byte a [ mulf8s_prepared::$15 ] -reg byte a [ mulf8s_prepared::$12 ] -reg byte a [ mulf8s_prepared::$16 ] +zp ZP_BYTE:11 [ mulf_init::dir#2 mulf_init::dir#4 mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 ] +zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mul8u::mb#2 mul8u::mb#1 print_str::str#16 print_str::str#18 print_str::str#0 ] reg byte x [ muls8u::b#0 ] reg byte a [ mulf8u::a#0 ] reg byte x [ mulf8u::b#0 ] +zp ZP_WORD:14 [ mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 mulf8u_prepared::return#2 mulf8u_prepared::return#0 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] reg byte x [ mul8u_error::a#0 ] +reg byte a [ print_byte::$0 ] +reg byte x [ print_byte::$2 ] +reg byte a [ mul8u::$1 ] +reg byte a [ mulf8u_prepare::a#0 ] +reg byte x [ mulf8u_prepared::b#0 ] reg byte a [ mulf_init::$9 ] reg byte a [ mulf_init::$12 ] reg byte a [ mulf_init::$13 ] FINAL ASSEMBLER -Score: 238859 +Score: 118965 // File Comments // Test the fast multiplication library @@ -11412,7 +8884,7 @@ Score: 238859 .pc = $80d "Program" // Global Constants & labels .label BGCOL = $d021 - .label print_char_cursor = 6 + .label print_char_cursor = 7 .label print_line_cursor = 2 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] @@ -11428,13 +8900,13 @@ main: { sta BGCOL // print_cls() // [5] call print_cls - // [335] phi from main to print_cls [phi:main->print_cls] + // [204] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [6] phi from main to main::@1 [phi:main->main::@1] // main::@1 // mulf_init() // [7] call mulf_init - // [306] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] + // [175] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] jsr mulf_init // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -11445,13 +8917,13 @@ main: { // main::@3 // mulf_tables_cmp() // [11] call mulf_tables_cmp - // [279] phi from main::@3 to mulf_tables_cmp [phi:main::@3->mulf_tables_cmp] + // [148] phi from main::@3 to mulf_tables_cmp [phi:main::@3->mulf_tables_cmp] jsr mulf_tables_cmp // [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // mul8u_compare() // [13] call mul8u_compare - // [201] phi from main::@4 to mul8u_compare [phi:main::@4->mul8u_compare] + // [35] phi from main::@4 to mul8u_compare [phi:main::@4->mul8u_compare] jsr mul8u_compare // [14] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -11467,308 +8939,45 @@ main: { // mul8s_compare // Perform all possible signed byte multiplications (slow and fast) and compare the results mul8s_compare: { - .label ms = 4 - .label mf = $a - .label mn = 8 - .label a = $c - .label b = $f - // [18] phi from mul8s_compare to mul8s_compare::@1 [phi:mul8s_compare->mul8s_compare::@1] - // [18] phi (signed byte) mul8s_compare::a#10 = (signed byte) -$80 [phi:mul8s_compare->mul8s_compare::@1#0] -- vbsz1=vbsc1 - lda #-$80 - sta a // mul8s_compare::@1 - b1: - // for(signed byte a = -128; a!=-128; a++) - // [19] if((signed byte) mul8s_compare::a#10!=(signed byte) -$80) goto mul8s_compare::@3 -- vbsz1_neq_vbsc1_then_la1 - lda #-$80 - cmp a - bne b2 - // mul8s_compare::@2 - // [20] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [18] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 // print_str("signed multiply results match!") - // [21] call print_str - // [114] phi from mul8s_compare::@2 to print_str [phi:mul8s_compare::@2->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*~) print_char_cursor#193 [phi:mul8s_compare::@2->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mul8s_compare::str [phi:mul8s_compare::@2->print_str#1] -- pbuz1=pbuc1 + // [19] call print_str + // [28] phi from mul8s_compare::@1 to print_str [phi:mul8s_compare::@1->print_str] + // [28] phi (byte*) print_char_cursor#155 = (byte*~) print_char_cursor#193 [phi:mul8s_compare::@1->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) mul8s_compare::str [phi:mul8s_compare::@1->print_str#1] -- pbuz1=pbuc1 lda #str sta print_str.str+1 jsr print_str - // [22] phi from mul8s_compare::@2 to mul8s_compare::@11 [phi:mul8s_compare::@2->mul8s_compare::@11] - // mul8s_compare::@11 + // [20] phi from mul8s_compare::@1 to mul8s_compare::@2 [phi:mul8s_compare::@1->mul8s_compare::@2] + // mul8s_compare::@2 // print_ln() - // [23] call print_ln - // [80] phi from mul8s_compare::@11 to print_ln [phi:mul8s_compare::@11->print_ln] - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8s_compare::@11->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#1 [phi:mul8s_compare::@11->print_ln#1] -- register_copy + // [21] call print_ln + // [23] phi from mul8s_compare::@2 to print_ln [phi:mul8s_compare::@2->print_ln] + // [23] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8s_compare::@2->print_ln#0] -- register_copy + // [23] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#1 [phi:mul8s_compare::@2->print_ln#1] -- register_copy jsr print_ln // mul8s_compare::@return // } - // [24] return + // [22] return rts - // [25] phi from mul8s_compare::@1 to mul8s_compare::@3 [phi:mul8s_compare::@1->mul8s_compare::@3] - b2: - // [25] phi (signed byte) mul8s_compare::b#10 = (signed byte) -$80 [phi:mul8s_compare::@1->mul8s_compare::@3#0] -- vbsz1=vbsc1 - lda #-$80 - sta b - // mul8s_compare::@3 - b3: - // for(signed byte b = -128; b!=-128; b++) - // [26] if((signed byte) mul8s_compare::b#10!=(signed byte) -$80) goto mul8s_compare::@4 -- vbsz1_neq_vbsc1_then_la1 - lda #-$80 - cmp b - bne b4 - // mul8s_compare::@5 - // for(signed byte a = -128; a!=-128; a++) - // [27] (signed byte) mul8s_compare::a#1 ← ++ (signed byte) mul8s_compare::a#10 -- vbsz1=_inc_vbsz1 - inc a - // [18] phi from mul8s_compare::@5 to mul8s_compare::@1 [phi:mul8s_compare::@5->mul8s_compare::@1] - // [18] phi (signed byte) mul8s_compare::a#10 = (signed byte) mul8s_compare::a#1 [phi:mul8s_compare::@5->mul8s_compare::@1#0] -- register_copy - jmp b1 - // mul8s_compare::@4 - b4: - // muls8s(a, b) - // [28] (signed byte) muls8s::a#0 ← (signed byte) mul8s_compare::a#10 - // [29] (signed byte) muls8s::b#0 ← (signed byte) mul8s_compare::b#10 -- vbsxx=vbsz1 - ldx b - // [30] call muls8s - jsr muls8s - // [31] (signed word) muls8s::return#2 ← (signed word) muls8s::return#0 - // mul8s_compare::@12 - // ms = muls8s(a, b) - // [32] (signed word) mul8s_compare::ms#0 ← (signed word) muls8s::return#2 - // mulf8s(a,b) - // [33] (signed byte) mulf8s::a#0 ← (signed byte) mul8s_compare::a#10 -- vbsaa=vbsz1 - lda a - // [34] (signed byte) mulf8s::b#0 ← (signed byte) mul8s_compare::b#10 -- vbsxx=vbsz1 - ldx b - // [35] call mulf8s - // [158] phi from mul8s_compare::@12 to mulf8s [phi:mul8s_compare::@12->mulf8s] - jsr mulf8s - // mulf8s(a,b) - // [36] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 - // mul8s_compare::@13 - // mf = mulf8s(a,b) - // [37] (signed word) mul8s_compare::mf#0 ← (signed word) mulf8s::return#2 - // mul8s(a,b) - // [38] (signed byte) mul8s::a#0 ← (signed byte) mul8s_compare::a#10 - // [39] (signed byte) mul8s::b#0 ← (signed byte) mul8s_compare::b#10 -- vbsyy=vbsz1 - ldy b - // [40] call mul8s - jsr mul8s - // mul8s_compare::@14 - // mn = mul8s(a,b) - // [41] (signed word) mul8s_compare::mn#0 ← (signed word)(word) mul8s::m#4 - // if(ms!=mf) - // [42] if((signed word) mul8s_compare::ms#0==(signed word) mul8s_compare::mf#0) goto mul8s_compare::@6 -- vwsz1_eq_vwsz2_then_la1 - lda ms - cmp mf - bne !+ - lda ms+1 - cmp mf+1 - beq b5 - !: - // [43] phi from mul8s_compare::@14 to mul8s_compare::@9 [phi:mul8s_compare::@14->mul8s_compare::@9] - // mul8s_compare::@9 - // [44] phi from mul8s_compare::@9 to mul8s_compare::@6 [phi:mul8s_compare::@9->mul8s_compare::@6] - // [44] phi (byte) mul8s_compare::ok#4 = (byte) 0 [phi:mul8s_compare::@9->mul8s_compare::@6#0] -- vbuxx=vbuc1 - ldx #0 - jmp b6 - // [44] phi from mul8s_compare::@14 to mul8s_compare::@6 [phi:mul8s_compare::@14->mul8s_compare::@6] - b5: - // [44] phi (byte) mul8s_compare::ok#4 = (byte) 1 [phi:mul8s_compare::@14->mul8s_compare::@6#0] -- vbuxx=vbuc1 - ldx #1 - // mul8s_compare::@6 - b6: - // if(ms!=mn) - // [45] if((signed word) mul8s_compare::ms#0==(signed word) mul8s_compare::mn#0) goto mul8s_compare::@15 -- vwsz1_eq_vwsz2_then_la1 - lda ms - cmp mn - bne !+ - lda ms+1 - cmp mn+1 - beq b7 - !: - // [47] phi from mul8s_compare::@6 to mul8s_compare::@7 [phi:mul8s_compare::@6->mul8s_compare::@7] - // [47] phi (byte) mul8s_compare::ok#3 = (byte) 0 [phi:mul8s_compare::@6->mul8s_compare::@7#0] -- vbuxx=vbuc1 - ldx #0 - // [46] phi from mul8s_compare::@6 to mul8s_compare::@15 [phi:mul8s_compare::@6->mul8s_compare::@15] - // mul8s_compare::@15 - // [47] phi from mul8s_compare::@15 to mul8s_compare::@7 [phi:mul8s_compare::@15->mul8s_compare::@7] - // [47] phi (byte) mul8s_compare::ok#3 = (byte) mul8s_compare::ok#4 [phi:mul8s_compare::@15->mul8s_compare::@7#0] -- register_copy - // mul8s_compare::@7 - b7: - // if(ok==0) - // [48] if((byte) mul8s_compare::ok#3!=(byte) 0) goto mul8s_compare::@8 -- vbuxx_neq_0_then_la1 - cpx #0 - bne b8 - // mul8s_compare::@10 - // *BGCOL = 2 - // [49] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta BGCOL - // mul8s_error(a,b, ms, mn, mf) - // [50] (signed byte) mul8s_error::a#0 ← (signed byte) mul8s_compare::a#10 -- vbsxx=vbsz1 - ldx a - // [51] (signed byte) mul8s_error::b#0 ← (signed byte) mul8s_compare::b#10 - // [52] (signed word) mul8s_error::ms#0 ← (signed word) mul8s_compare::ms#0 - // [53] (signed word) mul8s_error::mn#0 ← (signed word) mul8s_compare::mn#0 - // [54] (signed word) mul8s_error::mf#0 ← (signed word) mul8s_compare::mf#0 - // [55] call mul8s_error - jsr mul8s_error - rts - // mul8s_compare::@8 - b8: - // for(signed byte b = -128; b!=-128; b++) - // [56] (signed byte) mul8s_compare::b#1 ← ++ (signed byte) mul8s_compare::b#10 -- vbsz1=_inc_vbsz1 - inc b - // [25] phi from mul8s_compare::@8 to mul8s_compare::@3 [phi:mul8s_compare::@8->mul8s_compare::@3] - // [25] phi (signed byte) mul8s_compare::b#10 = (signed byte) mul8s_compare::b#1 [phi:mul8s_compare::@8->mul8s_compare::@3#0] -- register_copy - jmp b3 str: .text "signed multiply results match!@" -} - // mul8s_error -// mul8s_error(signed byte register(X) a, signed byte zeropage($f) b, signed word zeropage(4) ms, signed word zeropage(8) mn, signed word zeropage($a) mf) -mul8s_error: { - .label b = $f - .label ms = 4 - .label mn = 8 - .label mf = $a - // [57] (byte*~) print_char_cursor#194 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 - lda print_line_cursor - sta print_char_cursor - lda print_line_cursor+1 - sta print_char_cursor+1 - // print_str("signed multiply mismatch ") - // [58] call print_str - // [114] phi from mul8s_error to print_str [phi:mul8s_error->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*~) print_char_cursor#194 [phi:mul8s_error->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mul8s_error::str [phi:mul8s_error->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - // mul8s_error::@1 - // print_sbyte(a) - // [59] (signed byte) print_sbyte::b#1 ← (signed byte) mul8s_error::a#0 - // [60] call print_sbyte - // [121] phi from mul8s_error::@1 to print_sbyte [phi:mul8s_error::@1->print_sbyte] - // [121] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#1 [phi:mul8s_error::@1->print_sbyte#0] -- register_copy - jsr print_sbyte - // [61] phi from mul8s_error::@1 to mul8s_error::@2 [phi:mul8s_error::@1->mul8s_error::@2] - // mul8s_error::@2 - // print_str("*") - // [62] call print_str - // [114] phi from mul8s_error::@2 to print_str [phi:mul8s_error::@2->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8s_error::@2->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8s_error::@2->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - // mul8s_error::@3 - // print_sbyte(b) - // [63] (signed byte) print_sbyte::b#2 ← (signed byte) mul8s_error::b#0 -- vbsxx=vbsz1 - ldx b - // [64] call print_sbyte - // [121] phi from mul8s_error::@3 to print_sbyte [phi:mul8s_error::@3->print_sbyte] - // [121] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#2 [phi:mul8s_error::@3->print_sbyte#0] -- register_copy - jsr print_sbyte - // [65] phi from mul8s_error::@3 to mul8s_error::@4 [phi:mul8s_error::@3->mul8s_error::@4] - // mul8s_error::@4 - // print_str(" slow:") - // [66] call print_str - // [114] phi from mul8s_error::@4 to print_str [phi:mul8s_error::@4->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8s_error::@4->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8s_error::@4->print_str#1] -- pbuz1=pbuc1 - lda #str2 - sta print_str.str+1 - jsr print_str - // mul8s_error::@5 - // print_sword(ms) - // [67] (signed word) print_sword::w#1 ← (signed word) mul8s_error::ms#0 - // [68] call print_sword - // [85] phi from mul8s_error::@5 to print_sword [phi:mul8s_error::@5->print_sword] - // [85] phi (signed word) print_sword::w#4 = (signed word) print_sword::w#1 [phi:mul8s_error::@5->print_sword#0] -- register_copy - jsr print_sword - // [69] phi from mul8s_error::@5 to mul8s_error::@6 [phi:mul8s_error::@5->mul8s_error::@6] - // mul8s_error::@6 - // print_str(" / normal:") - // [70] call print_str - // [114] phi from mul8s_error::@6 to print_str [phi:mul8s_error::@6->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8s_error::@6->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8s_error::@6->print_str#1] -- pbuz1=pbuc1 - lda #str3 - sta print_str.str+1 - jsr print_str - // mul8s_error::@7 - // print_sword(mn) - // [71] (signed word) print_sword::w#2 ← (signed word) mul8s_error::mn#0 -- vwsz1=vwsz2 - lda mn - sta print_sword.w - lda mn+1 - sta print_sword.w+1 - // [72] call print_sword - // [85] phi from mul8s_error::@7 to print_sword [phi:mul8s_error::@7->print_sword] - // [85] phi (signed word) print_sword::w#4 = (signed word) print_sword::w#2 [phi:mul8s_error::@7->print_sword#0] -- register_copy - jsr print_sword - // [73] phi from mul8s_error::@7 to mul8s_error::@8 [phi:mul8s_error::@7->mul8s_error::@8] - // mul8s_error::@8 - // print_str(" / fast:") - // [74] call print_str - // [114] phi from mul8s_error::@8 to print_str [phi:mul8s_error::@8->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8s_error::@8->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8s_error::@8->print_str#1] -- pbuz1=pbuc1 - lda #str4 - sta print_str.str+1 - jsr print_str - // mul8s_error::@9 - // print_sword(mf) - // [75] (signed word) print_sword::w#3 ← (signed word) mul8s_error::mf#0 -- vwsz1=vwsz2 - lda mf - sta print_sword.w - lda mf+1 - sta print_sword.w+1 - // [76] call print_sword - // [85] phi from mul8s_error::@9 to print_sword [phi:mul8s_error::@9->print_sword] - // [85] phi (signed word) print_sword::w#4 = (signed word) print_sword::w#3 [phi:mul8s_error::@9->print_sword#0] -- register_copy - jsr print_sword - // [77] phi from mul8s_error::@9 to mul8s_error::@10 [phi:mul8s_error::@9->mul8s_error::@10] - // mul8s_error::@10 - // print_ln() - // [78] call print_ln - // [80] phi from mul8s_error::@10 to print_ln [phi:mul8s_error::@10->print_ln] - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#19 [phi:mul8s_error::@10->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#1 [phi:mul8s_error::@10->print_ln#1] -- register_copy - jsr print_ln - // mul8s_error::@return - // } - // [79] return - rts - str: .text "signed multiply mismatch @" } // print_ln // Print a newline print_ln: { - // [81] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] - // [81] phi (byte*) print_line_cursor#23 = (byte*) print_line_cursor#45 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + // [24] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + // [24] phi (byte*) print_line_cursor#23 = (byte*) print_line_cursor#45 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy // print_ln::@1 b1: // print_line_cursor + $28 - // [82] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [25] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc print_line_cursor @@ -11777,7 +8986,7 @@ print_ln: { inc print_line_cursor+1 !: // while (print_line_cursorprint_sword::@3] - // print_sword::@3 - // print_char(' ') - // [88] call print_char - // [96] phi from print_sword::@3 to print_char [phi:print_sword::@3->print_char] - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#134 [phi:print_sword::@3->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) ' ' [phi:print_sword::@3->print_char#1] -- vbuaa=vbuc1 - lda #' ' - jsr print_char - // [89] phi from print_sword::@3 print_sword::@4 to print_sword::@2 [phi:print_sword::@3/print_sword::@4->print_sword::@2] - // [89] phi (signed word) print_sword::w#6 = (signed word) print_sword::w#4 [phi:print_sword::@3/print_sword::@4->print_sword::@2#0] -- register_copy - // print_sword::@2 - b2: - // print_word((word)w) - // [90] (word) print_word::w#0 ← (word)(signed word) print_sword::w#6 - // [91] call print_word - // [100] phi from print_sword::@2 to print_word [phi:print_sword::@2->print_word] - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#19 [phi:print_sword::@2->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#0 [phi:print_sword::@2->print_word#1] -- register_copy - jsr print_word - // print_sword::@return - // } - // [92] return - rts - // [93] phi from print_sword to print_sword::@1 [phi:print_sword->print_sword::@1] - // print_sword::@1 + // print_str +// Print a zero-terminated string +// print_str(byte* zeropage($c) str) +print_str: { + .label str = $c + // [29] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + // [29] phi (byte*) print_char_cursor#134 = (byte*) print_char_cursor#155 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + // [29] phi (byte*) print_str::str#16 = (byte*) print_str::str#18 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + // print_str::@1 b1: - // print_char('-') - // [94] call print_char - // [96] phi from print_sword::@1 to print_char [phi:print_sword::@1->print_char] - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#134 [phi:print_sword::@1->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) '-' [phi:print_sword::@1->print_char#1] -- vbuaa=vbuc1 - lda #'-' - jsr print_char - // print_sword::@4 - // w = -w - // [95] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#4 -- vwsz1=_neg_vwsz1 - sec - lda #0 - sbc w - sta w - lda #0 - sbc w+1 - sta w+1 - jmp b2 -} - // print_char -// Print a single char -// print_char(byte register(A) ch) -print_char: { - // *(print_char_cursor++) = ch - // [97] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 -- _deref_pbuz1=vbuaa + // while(*str!='@') + // [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 ldy #0 + lda (str),y + cmp #'@' + bne b2 + // print_str::@return + // } + // [31] return + rts + // print_str::@2 + b2: + // *(print_char_cursor++) = *(str++) + // [32] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y sta (print_char_cursor),y - // *(print_char_cursor++) = ch; - // [98] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#86 -- pbuz1=_inc_pbuz1 + // *(print_char_cursor++) = *(str++); + // [33] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#134 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 !: - // print_char::@return + // [34] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#16 -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1 +} + // mul8u_compare +// Perform all possible byte multiplications (slow and fast) and compare the results +mul8u_compare: { + .label ms = 4 + .label mf = $e + .label mn = 9 + .label b = $b + .label a = 6 + // [36] phi from mul8u_compare to mul8u_compare::@1 [phi:mul8u_compare->mul8u_compare::@1] + // [36] phi (byte) mul8u_compare::a#7 = (byte) 0 [phi:mul8u_compare->mul8u_compare::@1#0] -- vbuz1=vbuc1 + lda #0 + sta a + // [36] phi from mul8u_compare::@8 to mul8u_compare::@1 [phi:mul8u_compare::@8->mul8u_compare::@1] + // [36] phi (byte) mul8u_compare::a#7 = (byte) mul8u_compare::a#1 [phi:mul8u_compare::@8->mul8u_compare::@1#0] -- register_copy + // mul8u_compare::@1 + b1: + // [37] phi from mul8u_compare::@1 to mul8u_compare::@2 [phi:mul8u_compare::@1->mul8u_compare::@2] + // [37] phi (byte) mul8u_compare::b#10 = (byte) 0 [phi:mul8u_compare::@1->mul8u_compare::@2#0] -- vbuz1=vbuc1 + lda #0 + sta b + // [37] phi from mul8u_compare::@5 to mul8u_compare::@2 [phi:mul8u_compare::@5->mul8u_compare::@2] + // [37] phi (byte) mul8u_compare::b#10 = (byte) mul8u_compare::b#1 [phi:mul8u_compare::@5->mul8u_compare::@2#0] -- register_copy + // mul8u_compare::@2 + b2: + // muls8u(a, b) + // [38] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 + // [39] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 + ldx b + // [40] call muls8u + jsr muls8u + // [41] (word) muls8u::return#2 ← (word) muls8u::return#0 + // mul8u_compare::@10 + // ms = muls8u(a, b) + // [42] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 + // mulf8u(a,b) + // [43] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuaa=vbuz1 + lda a + // [44] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 + ldx b + // [45] call mulf8u + jsr mulf8u + // [46] (word) mulf8u::return#2 ← (word) mulf8u::return#0 + // mul8u_compare::@11 + // mf = mulf8u(a,b) + // [47] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 + // mul8u(a,b) + // [48] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 + ldx a + // [49] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 -- vbuaa=vbuz1 + lda b + // [50] call mul8u + // [117] phi from mul8u_compare::@11 to mul8u [phi:mul8u_compare::@11->mul8u] + jsr mul8u + // mul8u(a,b) + // [51] (word) mul8u::return#3 ← (word) mul8u::res#2 + // mul8u_compare::@12 + // mn = mul8u(a,b) + // [52] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 + // if(ms!=mf) + // [53] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 -- vwuz1_eq_vwuz2_then_la1 + lda ms + cmp mf + bne !+ + lda ms+1 + cmp mf+1 + beq b6 + !: + // [54] phi from mul8u_compare::@12 to mul8u_compare::@6 [phi:mul8u_compare::@12->mul8u_compare::@6] + // mul8u_compare::@6 + // [55] phi from mul8u_compare::@6 to mul8u_compare::@3 [phi:mul8u_compare::@6->mul8u_compare::@3] + // [55] phi (byte) mul8u_compare::ok#4 = (byte) 0 [phi:mul8u_compare::@6->mul8u_compare::@3#0] -- vbuxx=vbuc1 + ldx #0 + jmp b3 + // [55] phi from mul8u_compare::@12 to mul8u_compare::@3 [phi:mul8u_compare::@12->mul8u_compare::@3] + b6: + // [55] phi (byte) mul8u_compare::ok#4 = (byte) 1 [phi:mul8u_compare::@12->mul8u_compare::@3#0] -- vbuxx=vbuc1 + ldx #1 + // mul8u_compare::@3 + b3: + // if(ms!=mn) + // [56] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 -- vwuz1_eq_vwuz2_then_la1 + lda ms + cmp mn + bne !+ + lda ms+1 + cmp mn+1 + beq b4 + !: + // [58] phi from mul8u_compare::@3 to mul8u_compare::@4 [phi:mul8u_compare::@3->mul8u_compare::@4] + // [58] phi (byte) mul8u_compare::ok#3 = (byte) 0 [phi:mul8u_compare::@3->mul8u_compare::@4#0] -- vbuxx=vbuc1 + ldx #0 + // [57] phi from mul8u_compare::@3 to mul8u_compare::@14 [phi:mul8u_compare::@3->mul8u_compare::@14] + // mul8u_compare::@14 + // [58] phi from mul8u_compare::@14 to mul8u_compare::@4 [phi:mul8u_compare::@14->mul8u_compare::@4] + // [58] phi (byte) mul8u_compare::ok#3 = (byte) mul8u_compare::ok#4 [phi:mul8u_compare::@14->mul8u_compare::@4#0] -- register_copy + // mul8u_compare::@4 + b4: + // if(ok==0) + // [59] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 -- vbuxx_neq_0_then_la1 + cpx #0 + bne b5 + // mul8u_compare::@7 + // *BGCOL = 2 + // [60] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 + lda #2 + sta BGCOL + // mul8u_error(a,b, ms, mn, mf) + // [61] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 + ldx a + // [62] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 + // [63] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 + // [64] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 + // [65] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 + // [66] call mul8u_error + // [76] phi from mul8u_compare::@7 to mul8u_error [phi:mul8u_compare::@7->mul8u_error] + jsr mul8u_error + // mul8u_compare::@return // } - // [99] return + // [67] return rts + // mul8u_compare::@5 + b5: + // for(byte b: 0..255) + // [68] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 -- vbuz1=_inc_vbuz1 + inc b + // [69] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 -- vbuz1_neq_0_then_la1 + lda b + cmp #0 + bne b2 + // mul8u_compare::@8 + // for(byte a: 0..255) + // [70] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 -- vbuz1=_inc_vbuz1 + inc a + // [71] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 -- vbuz1_neq_0_then_la1 + lda a + cmp #0 + bne b1 + // [72] phi from mul8u_compare::@8 to mul8u_compare::@9 [phi:mul8u_compare::@8->mul8u_compare::@9] + // mul8u_compare::@9 + // print_str("multiply results match!") + // [73] call print_str + // [28] phi from mul8u_compare::@9 to print_str [phi:mul8u_compare::@9->print_str] + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_compare::@9->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) mul8u_compare::str [phi:mul8u_compare::@9->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + // [74] phi from mul8u_compare::@9 to mul8u_compare::@13 [phi:mul8u_compare::@9->mul8u_compare::@13] + // mul8u_compare::@13 + // print_ln() + // [75] call print_ln + // [23] phi from mul8u_compare::@13 to print_ln [phi:mul8u_compare::@13->print_ln] + // [23] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8u_compare::@13->print_ln#0] -- register_copy + // [23] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_compare::@13->print_ln#1] -- register_copy + jsr print_ln + rts + str: .text "multiply results match!@" +} + // mul8u_error +// mul8u_error(byte register(X) a, byte zeropage($b) b, word zeropage(4) ms, word zeropage(9) mn, word zeropage($e) mf) +mul8u_error: { + .label b = $b + .label ms = 4 + .label mn = 9 + .label mf = $e + // print_str("multiply mismatch ") + // [77] call print_str + // [28] phi from mul8u_error to print_str [phi:mul8u_error->print_str] + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_error->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) mul8u_error::str [phi:mul8u_error->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + // mul8u_error::@1 + // print_byte(a) + // [78] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 + // [79] call print_byte + // [105] phi from mul8u_error::@1 to print_byte [phi:mul8u_error::@1->print_byte] + // [105] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@1->print_byte#0] -- register_copy + // [105] phi (byte) print_byte::b#5 = (byte) print_byte::b#3 [phi:mul8u_error::@1->print_byte#1] -- register_copy + jsr print_byte + // [80] phi from mul8u_error::@1 to mul8u_error::@2 [phi:mul8u_error::@1->mul8u_error::@2] + // mul8u_error::@2 + // print_str("*") + // [81] call print_str + // [28] phi from mul8u_error::@2 to print_str [phi:mul8u_error::@2->print_str] + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@2->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + // mul8u_error::@3 + // print_byte(b) + // [82] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 -- vbuxx=vbuz1 + ldx b + // [83] call print_byte + // [105] phi from mul8u_error::@3 to print_byte [phi:mul8u_error::@3->print_byte] + // [105] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@3->print_byte#0] -- register_copy + // [105] phi (byte) print_byte::b#5 = (byte) print_byte::b#4 [phi:mul8u_error::@3->print_byte#1] -- register_copy + jsr print_byte + // [84] phi from mul8u_error::@3 to mul8u_error::@4 [phi:mul8u_error::@3->mul8u_error::@4] + // mul8u_error::@4 + // print_str(" slow:") + // [85] call print_str + // [28] phi from mul8u_error::@4 to print_str [phi:mul8u_error::@4->print_str] + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@4->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1 + lda #str2 + sta print_str.str+1 + jsr print_str + // mul8u_error::@5 + // print_word(ms) + // [86] (word) print_word::w#3 ← (word) mul8u_error::ms#0 + // [87] call print_word + // [99] phi from mul8u_error::@5 to print_word [phi:mul8u_error::@5->print_word] + // [99] phi (word) print_word::w#6 = (word) print_word::w#3 [phi:mul8u_error::@5->print_word#0] -- register_copy + jsr print_word + // [88] phi from mul8u_error::@5 to mul8u_error::@6 [phi:mul8u_error::@5->mul8u_error::@6] + // mul8u_error::@6 + // print_str(" / normal:") + // [89] call print_str + // [28] phi from mul8u_error::@6 to print_str [phi:mul8u_error::@6->print_str] + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@6->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1 + lda #str3 + sta print_str.str+1 + jsr print_str + // mul8u_error::@7 + // print_word(mn) + // [90] (word) print_word::w#4 ← (word) mul8u_error::mn#0 -- vwuz1=vwuz2 + lda mn + sta print_word.w + lda mn+1 + sta print_word.w+1 + // [91] call print_word + // [99] phi from mul8u_error::@7 to print_word [phi:mul8u_error::@7->print_word] + // [99] phi (word) print_word::w#6 = (word) print_word::w#4 [phi:mul8u_error::@7->print_word#0] -- register_copy + jsr print_word + // [92] phi from mul8u_error::@7 to mul8u_error::@8 [phi:mul8u_error::@7->mul8u_error::@8] + // mul8u_error::@8 + // print_str(" / fast:") + // [93] call print_str + // [28] phi from mul8u_error::@8 to print_str [phi:mul8u_error::@8->print_str] + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@8->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1 + lda #str4 + sta print_str.str+1 + jsr print_str + // mul8u_error::@9 + // print_word(mf) + // [94] (word) print_word::w#5 ← (word) mul8u_error::mf#0 -- vwuz1=vwuz2 + lda mf + sta print_word.w + lda mf+1 + sta print_word.w+1 + // [95] call print_word + // [99] phi from mul8u_error::@9 to print_word [phi:mul8u_error::@9->print_word] + // [99] phi (word) print_word::w#6 = (word) print_word::w#5 [phi:mul8u_error::@9->print_word#0] -- register_copy + jsr print_word + // [96] phi from mul8u_error::@9 to mul8u_error::@10 [phi:mul8u_error::@9->mul8u_error::@10] + // mul8u_error::@10 + // print_ln() + // [97] call print_ln + // [23] phi from mul8u_error::@10 to print_ln [phi:mul8u_error::@10->print_ln] + // [23] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#19 [phi:mul8u_error::@10->print_ln#0] -- register_copy + // [23] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_error::@10->print_ln#1] -- register_copy + jsr print_ln + // mul8u_error::@return + // } + // [98] return + rts + str: .text "multiply mismatch @" } // print_word // Print a word as HEX @@ -11871,27 +9331,27 @@ print_char: { print_word: { .label w = 4 // print_byte(>w) - // [101] (byte) print_byte::b#1 ← > (word) print_word::w#6 -- vbuxx=_hi_vwuz1 + // [100] (byte) print_byte::b#1 ← > (word) print_word::w#6 -- vbuxx=_hi_vwuz1 lda w+1 tax - // [102] call print_byte - // [106] phi from print_word to print_byte [phi:print_word->print_byte] - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#142 [phi:print_word->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy + // [101] call print_byte + // [105] phi from print_word to print_byte [phi:print_word->print_byte] + // [105] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:print_word->print_byte#0] -- register_copy + // [105] phi (byte) print_byte::b#5 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy jsr print_byte // print_word::@1 // print_byte(print_byte] - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#19 [phi:print_word::@1->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy + // [103] call print_byte + // [105] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] + // [105] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#19 [phi:print_word::@1->print_byte#0] -- register_copy + // [105] phi (byte) print_byte::b#5 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy jsr print_byte // print_word::@return // } - // [105] return + // [104] return rts } // print_byte @@ -11899,236 +9359,97 @@ print_word: { // print_byte(byte register(X) b) print_byte: { // b>>4 - // [107] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuaa=vbuxx_ror_4 + // [106] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr lsr lsr // print_char(print_hextab[b>>4]) - // [108] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa + // [107] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa tay lda print_hextab,y - // [109] call print_char - // [96] phi from print_byte to print_char [phi:print_byte->print_char] - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#143 [phi:print_byte->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) print_char::ch#4 [phi:print_byte->print_char#1] -- register_copy + // [108] call print_char + // [113] phi from print_byte to print_char [phi:print_byte->print_char] + // [113] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#143 [phi:print_byte->print_char#0] -- register_copy + // [113] phi (byte) print_char::ch#6 = (byte) print_char::ch#4 [phi:print_byte->print_char#1] -- register_copy jsr print_char // print_byte::@1 // b&$f - // [110] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 + // [109] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 // print_char(print_hextab[b&$f]) - // [111] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx + // [110] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx lda print_hextab,x - // [112] call print_char - // [96] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#19 [phi:print_byte::@1->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) print_char::ch#5 [phi:print_byte::@1->print_char#1] -- register_copy + // [111] call print_char + // [113] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + // [113] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#19 [phi:print_byte::@1->print_char#0] -- register_copy + // [113] phi (byte) print_char::ch#6 = (byte) print_char::ch#5 [phi:print_byte::@1->print_char#1] -- register_copy jsr print_char // print_byte::@return // } - // [113] return + // [112] return rts } - // print_str -// Print a zero-terminated string -// print_str(byte* zeropage($d) str) -print_str: { - .label str = $d - // [115] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] - // [115] phi (byte*) print_char_cursor#134 = (byte*) print_char_cursor#155 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy - // [115] phi (byte*) print_str::str#16 = (byte*) print_str::str#18 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy - // print_str::@1 - b1: - // while(*str!='@') - // [116] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // print_char +// Print a single char +// print_char(byte register(A) ch) +print_char: { + // *(print_char_cursor++) = ch + // [114] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 -- _deref_pbuz1=vbuaa ldy #0 - lda (str),y - cmp #'@' - bne b2 - // print_str::@return - // } - // [117] return - rts - // print_str::@2 - b2: - // *(print_char_cursor++) = *(str++) - // [118] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (str),y sta (print_char_cursor),y - // *(print_char_cursor++) = *(str++); - // [119] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#134 -- pbuz1=_inc_pbuz1 + // *(print_char_cursor++) = ch; + // [115] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#86 -- pbuz1=_inc_pbuz1 inc print_char_cursor bne !+ inc print_char_cursor+1 !: - // [120] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#16 -- pbuz1=_inc_pbuz1 - inc str - bne !+ - inc str+1 - !: - jmp b1 -} - // print_sbyte -// Print a signed byte as HEX -// print_sbyte(signed byte register(X) b) -print_sbyte: { - // if(b<0) - // [122] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 -- vbsxx_lt_0_then_la1 - cpx #0 - bmi b1 - // [123] phi from print_sbyte to print_sbyte::@3 [phi:print_sbyte->print_sbyte::@3] - // print_sbyte::@3 - // print_char(' ') - // [124] call print_char - // [96] phi from print_sbyte::@3 to print_char [phi:print_sbyte::@3->print_char] - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#134 [phi:print_sbyte::@3->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) ' ' [phi:print_sbyte::@3->print_char#1] -- vbuaa=vbuc1 - lda #' ' - jsr print_char - // [125] phi from print_sbyte::@3 print_sbyte::@4 to print_sbyte::@2 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2] - // [125] phi (signed byte) print_sbyte::b#5 = (signed byte) print_sbyte::b#3 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2#0] -- register_copy - // print_sbyte::@2 - b2: - // print_byte((byte)b) - // [126] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 - // [127] call print_byte - // [106] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#19 [phi:print_sbyte::@2->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#0 [phi:print_sbyte::@2->print_byte#1] -- register_copy - jsr print_byte - // print_sbyte::@return + // print_char::@return // } - // [128] return - rts - // [129] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] - // print_sbyte::@1 - b1: - // print_char('-') - // [130] call print_char - // [96] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] - // [96] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#134 [phi:print_sbyte::@1->print_char#0] -- register_copy - // [96] phi (byte) print_char::ch#6 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuaa=vbuc1 - lda #'-' - jsr print_char - // print_sbyte::@4 - // b = -b - // [131] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 -- vbsxx=_neg_vbsxx - txa - eor #$ff - clc - adc #1 - tax - jmp b2 -} - // mul8s -// Multiply of two signed bytes to a signed word -// Fixes offsets introduced by using unsigned multiplication -// mul8s(signed byte zeropage($c) a, signed byte register(Y) b) -mul8s: { - .label m = 8 - .label a = $c - // mul8u((byte)a, (byte) b) - // [132] (byte) mul8u::a#1 ← (byte)(signed byte) mul8s::a#0 -- vbuxx=vbuz1 - ldx a - // [133] (byte) mul8u::b#0 ← (byte)(signed byte) mul8s::b#0 -- vbuaa=vbuyy - tya - // [134] call mul8u - // [148] phi from mul8s to mul8u [phi:mul8s->mul8u] - // [148] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:mul8s->mul8u#0] -- register_copy - // [148] phi (word) mul8u::mb#0 = (byte) mul8u::b#0 [phi:mul8s->mul8u#1] -- vwuz1=vbuaa - sta mul8u.mb - lda #0 - sta mul8u.mb+1 - jsr mul8u - // mul8u((byte)a, (byte) b) - // [135] (word) mul8u::return#2 ← (word) mul8u::res#2 - // mul8s::@5 - // m = mul8u((byte)a, (byte) b) - // [136] (word) mul8s::m#0 ← (word) mul8u::return#2 - // if(a<0) - // [137] if((signed byte) mul8s::a#0>=(signed byte) 0) goto mul8s::@1 -- vbsz1_ge_0_then_la1 - lda a - cmp #0 - bpl b1 - // mul8s::@3 - // >m - // [138] (byte~) mul8s::$9 ← > (word) mul8s::m#0 -- vbuaa=_hi_vwuz1 - lda m+1 - // >m = (>m)-(byte)b - // [139] (byte~) mul8s::$16 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::b#0 -- vbuaa=vbuaa_minus_vbuyy - sty $ff - sec - sbc $ff - // [140] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$16 -- vwuz1=vwuz1_sethi_vbuaa - sta m+1 - // [141] phi from mul8s::@3 mul8s::@5 to mul8s::@1 [phi:mul8s::@3/mul8s::@5->mul8s::@1] - // [141] phi (word) mul8s::m#5 = (word) mul8s::m#1 [phi:mul8s::@3/mul8s::@5->mul8s::@1#0] -- register_copy - // mul8s::@1 - b1: - // if(b<0) - // [142] if((signed byte) mul8s::b#0>=(signed byte) 0) goto mul8s::@2 -- vbsyy_ge_0_then_la1 - cpy #0 - bpl b2 - // mul8s::@4 - // >m - // [143] (byte~) mul8s::$13 ← > (word) mul8s::m#5 -- vbuaa=_hi_vwuz1 - lda m+1 - // >m = (>m)-(byte)a - // [144] (byte~) mul8s::$17 ← (byte~) mul8s::$13 - (byte)(signed byte) mul8s::a#0 -- vbuaa=vbuaa_minus_vbuz1 - sec - sbc a - // [145] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17 -- vwuz1=vwuz1_sethi_vbuaa - sta m+1 - // [146] phi from mul8s::@1 mul8s::@4 to mul8s::@2 [phi:mul8s::@1/mul8s::@4->mul8s::@2] - // [146] phi (word) mul8s::m#4 = (word) mul8s::m#5 [phi:mul8s::@1/mul8s::@4->mul8s::@2#0] -- register_copy - // mul8s::@2 - b2: - // mul8s::@return - // } - // [147] return + // [116] return rts } // mul8u // Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word // mul8u(byte register(X) a, byte register(A) b) mul8u: { - .label mb = $d - .label res = 8 - .label return = 8 - // [149] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - // [149] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy - // [149] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 - lda #<0 + .label mb = $c + .label res = 9 + .label return = 9 + // [118] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + // [118] phi (word) mul8u::mb#2 = (byte) mul8u::b#1 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuaa + sta mb + lda #0 + sta mb+1 + // [118] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 sta res sta res+1 - // [149] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy + // [118] phi (byte) mul8u::a#3 = (byte) mul8u::a#2 [phi:mul8u->mul8u::@1#2] -- register_copy // mul8u::@1 b1: // while(a!=0) - // [150] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 + // [119] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 cpx #0 bne b2 // mul8u::@return // } - // [151] return + // [120] return rts // mul8u::@2 b2: // a&1 - // [152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + // [121] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 txa and #1 // if( (a&1) != 0) - // [153] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 + // [122] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq b3 // mul8u::@4 // res = res + mb - // [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 + // [123] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 lda res clc adc mb @@ -12136,111 +9457,45 @@ mul8u: { lda res+1 adc mb+1 sta res+1 - // [155] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] - // [155] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy + // [124] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] + // [124] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy // mul8u::@3 b3: // a = a>>1 - // [156] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [125] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax // mb = mb<<1 - // [157] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [126] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl mb rol mb+1 - // [149] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] - // [149] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy - // [149] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy - // [149] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy + // [118] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] + // [118] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy + // [118] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy + // [118] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy jmp b1 } - // mulf8s -// Fast multiply two signed bytes to a word result -// mulf8s(signed byte register(A) a, signed byte register(X) b) -mulf8s: { - .label return = $a - // mulf8s::mulf8s_prepare1 - // mulf8u_prepare((byte)a) - // [159] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 - // [160] call mulf8u_prepare - // [185] phi from mulf8s::mulf8s_prepare1 to mulf8u_prepare [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare] - // [185] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#1 [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare#0] -- register_copy + // mulf8u +// Fast multiply two unsigned bytes to a word result +// mulf8u(byte register(A) a, byte register(X) b) +mulf8u: { + .label return = $e + // mulf8u_prepare(a) + // [127] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 + // [128] call mulf8u_prepare jsr mulf8u_prepare - // mulf8s::@1 - // mulf8s_prepared(b) - // [161] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 -- vbsz1=vbsxx - stx mulf8s_prepared.b - // [162] call mulf8s_prepared - jsr mulf8s_prepared - // mulf8s::@2 - // [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 - // mulf8s::@return - // } - // [164] return - rts -} - // mulf8s_prepared -// Calculate fast multiply with a prepared unsigned byte to a word result -// The prepared number is set by calling mulf8s_prepare(byte a) -// mulf8s_prepared(signed byte zeropage($f) b) -mulf8s_prepared: { - .label memA = $fd - .label m = $a - .label b = $f - // mulf8u_prepared((byte) b) - // [165] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuxx=vbuz1 - ldx b - // [166] call mulf8u_prepared - // [180] phi from mulf8s_prepared to mulf8u_prepared [phi:mulf8s_prepared->mulf8u_prepared] - // [180] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#1 [phi:mulf8s_prepared->mulf8u_prepared#0] -- register_copy + // mulf8u::@1 + // mulf8u_prepared(b) + // [129] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 + // [130] call mulf8u_prepared jsr mulf8u_prepared - // mulf8u_prepared((byte) b) - // [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 - // mulf8s_prepared::@5 - // m = mulf8u_prepared((byte) b) - // [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 - // if(*memA<0) - // [169] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 - lda memA - cmp #0 - bpl b1 - // mulf8s_prepared::@3 - // >m - // [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 - lda m+1 - // >m = (>m)-(byte)b - // [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 - sec - sbc b - // [172] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa - sta m+1 - // [173] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] - // [173] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy - // mulf8s_prepared::@1 - b1: - // if(b<0) - // [174] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 - lda b - cmp #0 - bpl b2 - // mulf8s_prepared::@4 - // >m - // [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 - lda m+1 - // >m = (>m)-(byte)*memA - // [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) -- vbuaa=vbuaa_minus__deref_pbuc1 - sec - sbc memA - // [177] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa - sta m+1 - // [178] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] - // [178] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy - // mulf8s_prepared::@2 - b2: - // mulf8s_prepared::@return + // [131] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + // mulf8u::@2 + // [132] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 + // mulf8u::@return // } - // [179] return + // [133] return rts } // mulf8u_prepared @@ -12250,9 +9505,9 @@ mulf8s_prepared: { mulf8u_prepared: { .label resL = $fe .label memB = $ff - .label return = $a + .label return = $e // *memB = b - // [181] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#2 -- _deref_pbuc1=vbuxx + // [134] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#0 -- _deref_pbuc1=vbuxx stx memB // asm // asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } @@ -12268,14 +9523,14 @@ mulf8u_prepared: { sbc mulf_sqr2_hi,x sta memB // return { *memB, *resL }; - // [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + // [136] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda resL sta return lda memB sta return+1 // mulf8u_prepared::@return // } - // [184] return + // [137] return rts } // mulf8u_prepare @@ -12284,7 +9539,7 @@ mulf8u_prepared: { mulf8u_prepare: { .label memA = $fd // *memA = a - // [186] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2 -- _deref_pbuc1=vbuaa + // [138] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#0 -- _deref_pbuc1=vbuaa sta memA // asm // asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } @@ -12295,483 +9550,53 @@ mulf8u_prepare: { sta mulf8u_prepared.sm4+1 // mulf8u_prepare::@return // } - // [188] return - rts -} - // muls8s -// Slow multiplication of signed bytes -// Perform a signed multiplication by repeated addition/subtraction -// muls8s(signed byte zeropage($c) a, signed byte register(X) b) -muls8s: { - .label m = 4 - .label return = 4 - .label a = $c - // if(a<0) - // [189] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 -- vbsz1_lt_0_then_la1 - lda a - bmi b8 - // muls8s::@2 - // if (a>0) - // [190] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 -- vbsz1_le_0_then_la1 - cmp #1 - bmi b7 - // [191] phi from muls8s::@2 to muls8s::@3 [phi:muls8s::@2->muls8s::@3] - // [191] phi (signed word) muls8s::m#3 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#0] -- vwsz1=vbsc1 - lda #<0 - sta m - sta m+1 - // [191] phi (signed byte) muls8s::j#2 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#1] -- vbsyy=vbsc1 - tay - // muls8s::@3 - b3: - // for(signed byte j = 0; j!=a; j++) - // [192] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 -- vbsyy_neq_vbsz1_then_la1 - cpy a - bne b4 - // [193] phi from muls8s::@3 muls8s::@5 to muls8s::@1 [phi:muls8s::@3/muls8s::@5->muls8s::@1] - // [193] phi (signed word) muls8s::return#0 = (signed word) muls8s::m#3 [phi:muls8s::@3/muls8s::@5->muls8s::@1#0] -- register_copy - rts - // [193] phi from muls8s::@2 to muls8s::@1 [phi:muls8s::@2->muls8s::@1] - b7: - // [193] phi (signed word) muls8s::return#0 = (signed byte) 0 [phi:muls8s::@2->muls8s::@1#0] -- vwsz1=vbsc1 - lda #<0 - sta return - sta return+1 - // muls8s::@1 - // muls8s::@return - // } - // [194] return - rts - // muls8s::@4 - b4: - // m = m + b - // [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 -- vwsz1=vwsz1_plus_vbsxx - txa - sta $fe - ora #$7f - bmi !+ - lda #0 - !: - sta $ff - clc - lda m - adc $fe - sta m - lda m+1 - adc $ff - sta m+1 - // for(signed byte j = 0; j!=a; j++) - // [196] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 -- vbsyy=_inc_vbsyy - iny - // [191] phi from muls8s::@4 to muls8s::@3 [phi:muls8s::@4->muls8s::@3] - // [191] phi (signed word) muls8s::m#3 = (signed word) muls8s::m#1 [phi:muls8s::@4->muls8s::@3#0] -- register_copy - // [191] phi (signed byte) muls8s::j#2 = (signed byte) muls8s::j#1 [phi:muls8s::@4->muls8s::@3#1] -- register_copy - jmp b3 - // [197] phi from muls8s to muls8s::@5 [phi:muls8s->muls8s::@5] - b8: - // [197] phi (signed word) muls8s::m#5 = (signed byte) 0 [phi:muls8s->muls8s::@5#0] -- vwsz1=vbsc1 - lda #<0 - sta m - sta m+1 - // [197] phi (signed byte) muls8s::i#2 = (signed byte) 0 [phi:muls8s->muls8s::@5#1] -- vbsyy=vbsc1 - tay - // muls8s::@5 - b5: - // for(signed byte i = 0; i!=a; i--) - // [198] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 -- vbsyy_neq_vbsz1_then_la1 - cpy a - bne b6 - rts - // muls8s::@6 - b6: - // m = m - b - // [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 -- vwsz1=vwsz1_minus_vbsxx - txa - sta $fe - ora #$7f - bmi !+ - lda #0 - !: - sta $ff - sec - lda m - sbc $fe - sta m - lda m+1 - sbc $ff - sta m+1 - // for(signed byte i = 0; i!=a; i--) - // [200] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 -- vbsyy=_dec_vbsyy - dey - // [197] phi from muls8s::@6 to muls8s::@5 [phi:muls8s::@6->muls8s::@5] - // [197] phi (signed word) muls8s::m#5 = (signed word) muls8s::m#2 [phi:muls8s::@6->muls8s::@5#0] -- register_copy - // [197] phi (signed byte) muls8s::i#2 = (signed byte) muls8s::i#1 [phi:muls8s::@6->muls8s::@5#1] -- register_copy - jmp b5 -} - // mul8u_compare -// Perform all possible byte multiplications (slow and fast) and compare the results -mul8u_compare: { - .label ms = 4 - .label mf = $a - .label mn = 8 - .label b = $f - .label a = $c - // [202] phi from mul8u_compare to mul8u_compare::@1 [phi:mul8u_compare->mul8u_compare::@1] - // [202] phi (byte) mul8u_compare::a#7 = (byte) 0 [phi:mul8u_compare->mul8u_compare::@1#0] -- vbuz1=vbuc1 - lda #0 - sta a - // [202] phi from mul8u_compare::@8 to mul8u_compare::@1 [phi:mul8u_compare::@8->mul8u_compare::@1] - // [202] phi (byte) mul8u_compare::a#7 = (byte) mul8u_compare::a#1 [phi:mul8u_compare::@8->mul8u_compare::@1#0] -- register_copy - // mul8u_compare::@1 - b1: - // [203] phi from mul8u_compare::@1 to mul8u_compare::@2 [phi:mul8u_compare::@1->mul8u_compare::@2] - // [203] phi (byte) mul8u_compare::b#10 = (byte) 0 [phi:mul8u_compare::@1->mul8u_compare::@2#0] -- vbuz1=vbuc1 - lda #0 - sta b - // [203] phi from mul8u_compare::@5 to mul8u_compare::@2 [phi:mul8u_compare::@5->mul8u_compare::@2] - // [203] phi (byte) mul8u_compare::b#10 = (byte) mul8u_compare::b#1 [phi:mul8u_compare::@5->mul8u_compare::@2#0] -- register_copy - // mul8u_compare::@2 - b2: - // muls8u(a, b) - // [204] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 - // [205] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 - ldx b - // [206] call muls8u - jsr muls8u - // [207] (word) muls8u::return#2 ← (word) muls8u::return#0 - // mul8u_compare::@10 - // ms = muls8u(a, b) - // [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 - // mulf8u(a,b) - // [209] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuaa=vbuz1 - lda a - // [210] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 - ldx b - // [211] call mulf8u - jsr mulf8u - // [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 - // mul8u_compare::@11 - // mf = mulf8u(a,b) - // [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 - // mul8u(a,b) - // [214] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 - ldx a - // [215] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 -- vbuaa=vbuz1 - lda b - // [216] call mul8u - // [148] phi from mul8u_compare::@11 to mul8u [phi:mul8u_compare::@11->mul8u] - // [148] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:mul8u_compare::@11->mul8u#0] -- register_copy - // [148] phi (word) mul8u::mb#0 = (byte) mul8u::b#1 [phi:mul8u_compare::@11->mul8u#1] -- vwuz1=vbuaa - sta mul8u.mb - lda #0 - sta mul8u.mb+1 - jsr mul8u - // mul8u(a,b) - // [217] (word) mul8u::return#3 ← (word) mul8u::res#2 - // mul8u_compare::@12 - // mn = mul8u(a,b) - // [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 - // if(ms!=mf) - // [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 -- vwuz1_eq_vwuz2_then_la1 - lda ms - cmp mf - bne !+ - lda ms+1 - cmp mf+1 - beq b6 - !: - // [220] phi from mul8u_compare::@12 to mul8u_compare::@6 [phi:mul8u_compare::@12->mul8u_compare::@6] - // mul8u_compare::@6 - // [221] phi from mul8u_compare::@6 to mul8u_compare::@3 [phi:mul8u_compare::@6->mul8u_compare::@3] - // [221] phi (byte) mul8u_compare::ok#4 = (byte) 0 [phi:mul8u_compare::@6->mul8u_compare::@3#0] -- vbuxx=vbuc1 - ldx #0 - jmp b3 - // [221] phi from mul8u_compare::@12 to mul8u_compare::@3 [phi:mul8u_compare::@12->mul8u_compare::@3] - b6: - // [221] phi (byte) mul8u_compare::ok#4 = (byte) 1 [phi:mul8u_compare::@12->mul8u_compare::@3#0] -- vbuxx=vbuc1 - ldx #1 - // mul8u_compare::@3 - b3: - // if(ms!=mn) - // [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 -- vwuz1_eq_vwuz2_then_la1 - lda ms - cmp mn - bne !+ - lda ms+1 - cmp mn+1 - beq b4 - !: - // [224] phi from mul8u_compare::@3 to mul8u_compare::@4 [phi:mul8u_compare::@3->mul8u_compare::@4] - // [224] phi (byte) mul8u_compare::ok#3 = (byte) 0 [phi:mul8u_compare::@3->mul8u_compare::@4#0] -- vbuxx=vbuc1 - ldx #0 - // [223] phi from mul8u_compare::@3 to mul8u_compare::@14 [phi:mul8u_compare::@3->mul8u_compare::@14] - // mul8u_compare::@14 - // [224] phi from mul8u_compare::@14 to mul8u_compare::@4 [phi:mul8u_compare::@14->mul8u_compare::@4] - // [224] phi (byte) mul8u_compare::ok#3 = (byte) mul8u_compare::ok#4 [phi:mul8u_compare::@14->mul8u_compare::@4#0] -- register_copy - // mul8u_compare::@4 - b4: - // if(ok==0) - // [225] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 -- vbuxx_neq_0_then_la1 - cpx #0 - bne b5 - // mul8u_compare::@7 - // *BGCOL = 2 - // [226] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta BGCOL - // mul8u_error(a,b, ms, mn, mf) - // [227] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 - ldx a - // [228] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 - // [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 - // [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 - // [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 - // [232] call mul8u_error - // [242] phi from mul8u_compare::@7 to mul8u_error [phi:mul8u_compare::@7->mul8u_error] - jsr mul8u_error - // mul8u_compare::@return - // } - // [233] return - rts - // mul8u_compare::@5 - b5: - // for(byte b: 0..255) - // [234] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 -- vbuz1=_inc_vbuz1 - inc b - // [235] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 -- vbuz1_neq_0_then_la1 - lda b - cmp #0 - bne b2 - // mul8u_compare::@8 - // for(byte a: 0..255) - // [236] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 -- vbuz1=_inc_vbuz1 - inc a - // [237] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 -- vbuz1_neq_0_then_la1 - lda a - cmp #0 - bne b1 - // [238] phi from mul8u_compare::@8 to mul8u_compare::@9 [phi:mul8u_compare::@8->mul8u_compare::@9] - // mul8u_compare::@9 - // print_str("multiply results match!") - // [239] call print_str - // [114] phi from mul8u_compare::@9 to print_str [phi:mul8u_compare::@9->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_compare::@9->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mul8u_compare::str [phi:mul8u_compare::@9->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - // [240] phi from mul8u_compare::@9 to mul8u_compare::@13 [phi:mul8u_compare::@9->mul8u_compare::@13] - // mul8u_compare::@13 - // print_ln() - // [241] call print_ln - // [80] phi from mul8u_compare::@13 to print_ln [phi:mul8u_compare::@13->print_ln] - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8u_compare::@13->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_compare::@13->print_ln#1] -- register_copy - jsr print_ln - rts - str: .text "multiply results match!@" -} - // mul8u_error -// mul8u_error(byte register(X) a, byte zeropage($f) b, word zeropage(4) ms, word zeropage(8) mn, word zeropage($a) mf) -mul8u_error: { - .label b = $f - .label ms = 4 - .label mn = 8 - .label mf = $a - // print_str("multiply mismatch ") - // [243] call print_str - // [114] phi from mul8u_error to print_str [phi:mul8u_error->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_error->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mul8u_error::str [phi:mul8u_error->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - // mul8u_error::@1 - // print_byte(a) - // [244] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 - // [245] call print_byte - // [106] phi from mul8u_error::@1 to print_byte [phi:mul8u_error::@1->print_byte] - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@1->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#3 [phi:mul8u_error::@1->print_byte#1] -- register_copy - jsr print_byte - // [246] phi from mul8u_error::@1 to mul8u_error::@2 [phi:mul8u_error::@1->mul8u_error::@2] - // mul8u_error::@2 - // print_str("*") - // [247] call print_str - // [114] phi from mul8u_error::@2 to print_str [phi:mul8u_error::@2->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@2->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - // mul8u_error::@3 - // print_byte(b) - // [248] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 -- vbuxx=vbuz1 - ldx b - // [249] call print_byte - // [106] phi from mul8u_error::@3 to print_byte [phi:mul8u_error::@3->print_byte] - // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@3->print_byte#0] -- register_copy - // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#4 [phi:mul8u_error::@3->print_byte#1] -- register_copy - jsr print_byte - // [250] phi from mul8u_error::@3 to mul8u_error::@4 [phi:mul8u_error::@3->mul8u_error::@4] - // mul8u_error::@4 - // print_str(" slow:") - // [251] call print_str - // [114] phi from mul8u_error::@4 to print_str [phi:mul8u_error::@4->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@4->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1 - lda #str2 - sta print_str.str+1 - jsr print_str - // mul8u_error::@5 - // print_word(ms) - // [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 - // [253] call print_word - // [100] phi from mul8u_error::@5 to print_word [phi:mul8u_error::@5->print_word] - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@5->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#3 [phi:mul8u_error::@5->print_word#1] -- register_copy - jsr print_word - // [254] phi from mul8u_error::@5 to mul8u_error::@6 [phi:mul8u_error::@5->mul8u_error::@6] - // mul8u_error::@6 - // print_str(" / normal:") - // [255] call print_str - // [114] phi from mul8u_error::@6 to print_str [phi:mul8u_error::@6->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@6->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1 - lda #str3 - sta print_str.str+1 - jsr print_str - // mul8u_error::@7 - // print_word(mn) - // [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 -- vwuz1=vwuz2 - lda mn - sta print_word.w - lda mn+1 - sta print_word.w+1 - // [257] call print_word - // [100] phi from mul8u_error::@7 to print_word [phi:mul8u_error::@7->print_word] - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@7->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#4 [phi:mul8u_error::@7->print_word#1] -- register_copy - jsr print_word - // [258] phi from mul8u_error::@7 to mul8u_error::@8 [phi:mul8u_error::@7->mul8u_error::@8] - // mul8u_error::@8 - // print_str(" / fast:") - // [259] call print_str - // [114] phi from mul8u_error::@8 to print_str [phi:mul8u_error::@8->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@8->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1 - lda #str4 - sta print_str.str+1 - jsr print_str - // mul8u_error::@9 - // print_word(mf) - // [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 -- vwuz1=vwuz2 - lda mf - sta print_word.w - lda mf+1 - sta print_word.w+1 - // [261] call print_word - // [100] phi from mul8u_error::@9 to print_word [phi:mul8u_error::@9->print_word] - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@9->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#5 [phi:mul8u_error::@9->print_word#1] -- register_copy - jsr print_word - // [262] phi from mul8u_error::@9 to mul8u_error::@10 [phi:mul8u_error::@9->mul8u_error::@10] - // mul8u_error::@10 - // print_ln() - // [263] call print_ln - // [80] phi from mul8u_error::@10 to print_ln [phi:mul8u_error::@10->print_ln] - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#19 [phi:mul8u_error::@10->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_error::@10->print_ln#1] -- register_copy - jsr print_ln - // mul8u_error::@return - // } - // [264] return - rts - str: .text "multiply mismatch @" -} - // mulf8u -// Fast multiply two unsigned bytes to a word result -// mulf8u(byte register(A) a, byte register(X) b) -mulf8u: { - .label return = $a - // mulf8u_prepare(a) - // [265] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 - // [266] call mulf8u_prepare - // [185] phi from mulf8u to mulf8u_prepare [phi:mulf8u->mulf8u_prepare] - // [185] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#0 [phi:mulf8u->mulf8u_prepare#0] -- register_copy - jsr mulf8u_prepare - // mulf8u::@1 - // mulf8u_prepared(b) - // [267] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 - // [268] call mulf8u_prepared - // [180] phi from mulf8u::@1 to mulf8u_prepared [phi:mulf8u::@1->mulf8u_prepared] - // [180] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#0 [phi:mulf8u::@1->mulf8u_prepared#0] -- register_copy - jsr mulf8u_prepared - // mulf8u_prepared(b) - // [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 - // mulf8u::@2 - // [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 - // mulf8u::@return - // } - // [271] return + // [140] return rts } // muls8u // Slow multiplication of unsigned bytes // Calculate an unsigned multiplication by repeated addition -// muls8u(byte zeropage($c) a, byte register(X) b) +// muls8u(byte zeropage(6) a, byte register(X) b) muls8u: { .label return = 4 .label m = 4 - .label a = $c + .label a = 6 // if(a!=0) - // [272] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 -- vbuz1_eq_0_then_la1 + // [141] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 -- vbuz1_eq_0_then_la1 lda a cmp #0 beq b4 - // [273] phi from muls8u to muls8u::@2 [phi:muls8u->muls8u::@2] - // [273] phi (word) muls8u::m#3 = (byte) 0 [phi:muls8u->muls8u::@2#0] -- vwuz1=vbuc1 + // [142] phi from muls8u to muls8u::@2 [phi:muls8u->muls8u::@2] + // [142] phi (word) muls8u::m#3 = (byte) 0 [phi:muls8u->muls8u::@2#0] -- vwuz1=vbuc1 lda #<0 sta m sta m+1 - // [273] phi (byte) muls8u::i#2 = (byte) 0 [phi:muls8u->muls8u::@2#1] -- vbuyy=vbuc1 + // [142] phi (byte) muls8u::i#2 = (byte) 0 [phi:muls8u->muls8u::@2#1] -- vbuyy=vbuc1 tay // muls8u::@2 b2: // for(byte i = 0; i!=a; i++) - // [274] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 -- vbuyy_neq_vbuz1_then_la1 + // [143] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 -- vbuyy_neq_vbuz1_then_la1 cpy a bne b3 - // [275] phi from muls8u::@2 to muls8u::@1 [phi:muls8u::@2->muls8u::@1] - // [275] phi (word) muls8u::return#0 = (word) muls8u::m#3 [phi:muls8u::@2->muls8u::@1#0] -- register_copy + // [144] phi from muls8u::@2 to muls8u::@1 [phi:muls8u::@2->muls8u::@1] + // [144] phi (word) muls8u::return#0 = (word) muls8u::m#3 [phi:muls8u::@2->muls8u::@1#0] -- register_copy rts - // [275] phi from muls8u to muls8u::@1 [phi:muls8u->muls8u::@1] + // [144] phi from muls8u to muls8u::@1 [phi:muls8u->muls8u::@1] b4: - // [275] phi (word) muls8u::return#0 = (byte) 0 [phi:muls8u->muls8u::@1#0] -- vwuz1=vbuc1 + // [144] phi (word) muls8u::return#0 = (byte) 0 [phi:muls8u->muls8u::@1#0] -- vwuz1=vbuc1 lda #<0 sta return sta return+1 // muls8u::@1 // muls8u::@return // } - // [276] return + // [145] return rts // muls8u::@3 b3: // m = m + b - // [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 -- vwuz1=vwuz1_plus_vbuxx + // [146] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 -- vwuz1=vwuz1_plus_vbuxx txa clc adc m @@ -12780,11 +9605,11 @@ muls8u: { inc m+1 !: // for(byte i = 0; i!=a; i++) - // [278] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 -- vbuyy=_inc_vbuyy + // [147] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 -- vbuyy=_inc_vbuyy iny - // [273] phi from muls8u::@3 to muls8u::@2 [phi:muls8u::@3->muls8u::@2] - // [273] phi (word) muls8u::m#3 = (word) muls8u::m#1 [phi:muls8u::@3->muls8u::@2#0] -- register_copy - // [273] phi (byte) muls8u::i#2 = (byte) muls8u::i#1 [phi:muls8u::@3->muls8u::@2#1] -- register_copy + // [142] phi from muls8u::@3 to muls8u::@2 [phi:muls8u::@3->muls8u::@2] + // [142] phi (word) muls8u::m#3 = (word) muls8u::m#1 [phi:muls8u::@3->muls8u::@2#0] -- register_copy + // [142] phi (byte) muls8u::i#2 = (byte) muls8u::i#1 [phi:muls8u::@3->muls8u::@2#1] -- register_copy jmp b2 } // mulf_tables_cmp @@ -12793,13 +9618,13 @@ muls8u: { mulf_tables_cmp: { .label asm_sqr = 4 .label kc_sqr = 2 - // [280] phi from mulf_tables_cmp to mulf_tables_cmp::@1 [phi:mulf_tables_cmp->mulf_tables_cmp::@1] - // [280] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (const byte[$200]) mula_sqr1_lo#0 [phi:mulf_tables_cmp->mulf_tables_cmp::@1#0] -- pbuz1=pbuc1 + // [149] phi from mulf_tables_cmp to mulf_tables_cmp::@1 [phi:mulf_tables_cmp->mulf_tables_cmp::@1] + // [149] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (const byte[$200]) mula_sqr1_lo#0 [phi:mulf_tables_cmp->mulf_tables_cmp::@1#0] -- pbuz1=pbuc1 lda #mula_sqr1_lo sta asm_sqr+1 - // [280] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (const byte[$200]) mulf_sqr1_lo#0 [phi:mulf_tables_cmp->mulf_tables_cmp::@1#1] -- pbuz1=pbuc1 + // [149] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (const byte[$200]) mulf_sqr1_lo#0 [phi:mulf_tables_cmp->mulf_tables_cmp::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_lo @@ -12807,7 +9632,7 @@ mulf_tables_cmp: { // mulf_tables_cmp::@1 b1: // for( byte* kc_sqr=mulf_sqr1_lo; kc_sqrmulf_sqr1_lo+$200*4 bcc b2 @@ -12816,69 +9641,69 @@ mulf_tables_cmp: { cmp #mulf_tables_cmp::@3] + // [151] phi from mulf_tables_cmp::@1 to mulf_tables_cmp::@3 [phi:mulf_tables_cmp::@1->mulf_tables_cmp::@3] // mulf_tables_cmp::@3 // print_str("multiply tables match!") - // [283] call print_str - // [114] phi from mulf_tables_cmp::@3 to print_str [phi:mulf_tables_cmp::@3->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@3->print_str#0] -- pbuz1=pbuc1 + // [152] call print_str + // [28] phi from mulf_tables_cmp::@3 to print_str [phi:mulf_tables_cmp::@3->print_str] + // [28] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@3->print_str#0] -- pbuz1=pbuc1 lda #<$400 sta print_char_cursor lda #>$400 sta print_char_cursor+1 - // [114] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str [phi:mulf_tables_cmp::@3->print_str#1] -- pbuz1=pbuc1 + // [28] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str [phi:mulf_tables_cmp::@3->print_str#1] -- pbuz1=pbuc1 lda #str sta print_str.str+1 jsr print_str - // [284] phi from mulf_tables_cmp::@3 to mulf_tables_cmp::@6 [phi:mulf_tables_cmp::@3->mulf_tables_cmp::@6] + // [153] phi from mulf_tables_cmp::@3 to mulf_tables_cmp::@6 [phi:mulf_tables_cmp::@3->mulf_tables_cmp::@6] // mulf_tables_cmp::@6 // print_ln() - // [285] call print_ln - // [80] phi from mulf_tables_cmp::@6 to print_ln [phi:mulf_tables_cmp::@6->print_ln] - // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@6->print_ln#0] -- register_copy - // [80] phi (byte*) print_line_cursor#45 = (byte*) 1024 [phi:mulf_tables_cmp::@6->print_ln#1] -- pbuz1=pbuc1 + // [154] call print_ln + // [23] phi from mulf_tables_cmp::@6 to print_ln [phi:mulf_tables_cmp::@6->print_ln] + // [23] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@6->print_ln#0] -- register_copy + // [23] phi (byte*) print_line_cursor#45 = (byte*) 1024 [phi:mulf_tables_cmp::@6->print_ln#1] -- pbuz1=pbuc1 lda #<$400 sta print_line_cursor lda #>$400 sta print_line_cursor+1 jsr print_ln // mulf_tables_cmp::@7 - // [286] (byte*~) print_char_cursor#230 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [155] (byte*~) print_char_cursor#213 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda print_line_cursor sta print_char_cursor lda print_line_cursor+1 sta print_char_cursor+1 - // [287] phi from mulf_tables_cmp::@7 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return] - // [287] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#1 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#0] -- register_copy - // [287] phi (byte*) print_char_cursor#100 = (byte*~) print_char_cursor#230 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#1] -- register_copy + // [156] phi from mulf_tables_cmp::@7 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return] + // [156] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#1 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#0] -- register_copy + // [156] phi (byte*) print_char_cursor#100 = (byte*~) print_char_cursor#213 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#1] -- register_copy // mulf_tables_cmp::@return // } - // [288] return + // [157] return rts // mulf_tables_cmp::@2 b2: // if(*kc_sqr != *asm_sqr) - // [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 -- _deref_pbuz1_eq__deref_pbuz2_then_la1 + // [158] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 -- _deref_pbuz1_eq__deref_pbuz2_then_la1 ldy #0 lda (kc_sqr),y cmp (asm_sqr),y beq b4 // mulf_tables_cmp::@5 // *BGCOL = 2 - // [290] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [159] *((const byte*) BGCOL#0) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BGCOL // print_str("multiply table mismatch at ") - // [291] call print_str - // [114] phi from mulf_tables_cmp::@5 to print_str [phi:mulf_tables_cmp::@5->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@5->print_str#0] -- pbuz1=pbuc1 + // [160] call print_str + // [28] phi from mulf_tables_cmp::@5 to print_str [phi:mulf_tables_cmp::@5->print_str] + // [28] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@5->print_str#0] -- pbuz1=pbuc1 lda #<$400 sta print_char_cursor lda #>$400 sta print_char_cursor+1 - // [114] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str1 [phi:mulf_tables_cmp::@5->print_str#1] -- pbuz1=pbuc1 + // [28] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str1 [phi:mulf_tables_cmp::@5->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -12886,19 +9711,18 @@ mulf_tables_cmp: { jsr print_str // mulf_tables_cmp::@8 // print_word((word)asm_sqr) - // [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 - // [293] call print_word - // [100] phi from mulf_tables_cmp::@8 to print_word [phi:mulf_tables_cmp::@8->print_word] - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@8->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#1 [phi:mulf_tables_cmp::@8->print_word#1] -- register_copy + // [161] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 + // [162] call print_word + // [99] phi from mulf_tables_cmp::@8 to print_word [phi:mulf_tables_cmp::@8->print_word] + // [99] phi (word) print_word::w#6 = (word) print_word::w#1 [phi:mulf_tables_cmp::@8->print_word#0] -- register_copy jsr print_word - // [294] phi from mulf_tables_cmp::@8 to mulf_tables_cmp::@9 [phi:mulf_tables_cmp::@8->mulf_tables_cmp::@9] + // [163] phi from mulf_tables_cmp::@8 to mulf_tables_cmp::@9 [phi:mulf_tables_cmp::@8->mulf_tables_cmp::@9] // mulf_tables_cmp::@9 // print_str(" / ") - // [295] call print_str - // [114] phi from mulf_tables_cmp::@9 to print_str [phi:mulf_tables_cmp::@9->print_str] - // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@9->print_str#0] -- register_copy - // [114] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str2 [phi:mulf_tables_cmp::@9->print_str#1] -- pbuz1=pbuc1 + // [164] call print_str + // [28] phi from mulf_tables_cmp::@9 to print_str [phi:mulf_tables_cmp::@9->print_str] + // [28] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@9->print_str#0] -- register_copy + // [28] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str2 [phi:mulf_tables_cmp::@9->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -12906,41 +9730,40 @@ mulf_tables_cmp: { jsr print_str // mulf_tables_cmp::@10 // print_word((word)kc_sqr) - // [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 -- vwuz1=vwuz2 + // [165] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 -- vwuz1=vwuz2 lda kc_sqr sta print_word.w lda kc_sqr+1 sta print_word.w+1 - // [297] call print_word - // [100] phi from mulf_tables_cmp::@10 to print_word [phi:mulf_tables_cmp::@10->print_word] - // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@10->print_word#0] -- register_copy - // [100] phi (word) print_word::w#6 = (word) print_word::w#2 [phi:mulf_tables_cmp::@10->print_word#1] -- register_copy + // [166] call print_word + // [99] phi from mulf_tables_cmp::@10 to print_word [phi:mulf_tables_cmp::@10->print_word] + // [99] phi (word) print_word::w#6 = (word) print_word::w#2 [phi:mulf_tables_cmp::@10->print_word#0] -- register_copy jsr print_word - // [287] phi from mulf_tables_cmp::@10 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return] - // [287] phi (byte*) print_line_cursor#11 = (byte*) 1024 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#0] -- pbuz1=pbuc1 + // [156] phi from mulf_tables_cmp::@10 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return] + // [156] phi (byte*) print_line_cursor#11 = (byte*) 1024 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#0] -- pbuz1=pbuc1 lda #<$400 sta print_line_cursor lda #>$400 sta print_line_cursor+1 - // [287] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#1] -- register_copy + // [156] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#1] -- register_copy rts // mulf_tables_cmp::@4 b4: // asm_sqr++; - // [298] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 -- pbuz1=_inc_pbuz1 + // [167] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 -- pbuz1=_inc_pbuz1 inc asm_sqr bne !+ inc asm_sqr+1 !: // for( byte* kc_sqr=mulf_sqr1_lo; kc_sqrmulf_tables_cmp::@1] - // [280] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (byte*) mulf_tables_cmp::asm_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#0] -- register_copy - // [280] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (byte*) mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy + // [149] phi from mulf_tables_cmp::@4 to mulf_tables_cmp::@1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1] + // [149] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (byte*) mulf_tables_cmp::asm_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#0] -- register_copy + // [149] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (byte*) mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy jmp b1 str: .text "multiply tables match!@" str1: .text "multiply table mismatch at @" @@ -12993,51 +9816,51 @@ mulf_init_asm: { inx bne !- // *mem = *mula_sqr1_lo - // [301] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) -- _deref_pbuc1=_deref_pbuc2 + // [170] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_lo#0) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr1_lo sta mem // *mem = *mula_sqr1_hi - // [302] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) -- _deref_pbuc1=_deref_pbuc2 + // [171] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr1_hi#0) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr1_hi sta mem // *mem = *mula_sqr2_lo - // [303] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) -- _deref_pbuc1=_deref_pbuc2 + // [172] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_lo#0) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr2_lo sta mem // *mem = *mula_sqr2_hi - // [304] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) -- _deref_pbuc1=_deref_pbuc2 + // [173] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[$200]) mula_sqr2_hi#0) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr2_hi sta mem // mulf_init_asm::@return // } - // [305] return + // [174] return rts } // mulf_init // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4) mulf_init: { - .label c = $f - .label sqr1_hi = 6 - .label sqr = $d + .label c = 6 + .label sqr1_hi = 7 + .label sqr = $e .label sqr1_lo = 4 - .label sqr2_hi = $a - .label sqr2_lo = 8 - .label dir = $c - // [307] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] - // [307] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 + .label sqr2_hi = $c + .label sqr2_lo = 9 + .label dir = $b + // [176] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + // [176] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [307] phi (byte*) mulf_init::sqr1_hi#2 = (const byte[$200]) mulf_sqr1_hi#0+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [176] phi (byte*) mulf_init::sqr1_hi#2 = (const byte[$200]) mulf_sqr1_hi#0+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta sqr1_hi+1 - // [307] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [176] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 txa sta sqr sta sqr+1 - // [307] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [176] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 sta c - // [307] phi (byte*) mulf_init::sqr1_lo#2 = (const byte[$200]) mulf_sqr1_lo#0+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [176] phi (byte*) mulf_init::sqr1_lo#2 = (const byte[$200]) mulf_sqr1_lo#0+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -13045,25 +9868,25 @@ mulf_init: { // mulf_init::@1 b1: // for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) - // [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [177] if((byte*) mulf_init::sqr1_lo#2!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 lda sqr1_lo+1 cmp #>mulf_sqr1_lo+$200 bne b2 lda sqr1_lo cmp #mulf_init::@5] - // [309] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [178] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] + // [178] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta dir - // [309] phi (byte*) mulf_init::sqr2_hi#2 = (const byte[$200]) mulf_sqr2_hi#0 [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [178] phi (byte*) mulf_init::sqr2_hi#2 = (const byte[$200]) mulf_sqr2_hi#0 [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta sqr2_hi+1 - // [309] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 + // [178] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 ldx #-1 - // [309] phi (byte*) mulf_init::sqr2_lo#2 = (const byte[$200]) mulf_sqr2_lo#0 [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [178] phi (byte*) mulf_init::sqr2_lo#2 = (const byte[$200]) mulf_sqr2_lo#0 [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -13071,7 +9894,7 @@ mulf_init: { // mulf_init::@5 b5: // for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) - // [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [179] if((byte*) mulf_init::sqr2_lo#2!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne b6 @@ -13080,116 +9903,116 @@ mulf_init: { bne b6 // mulf_init::@7 // *(mulf_sqr2_lo+511) = *(mulf_sqr1_lo+256) - // [311] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [180] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff // *(mulf_sqr2_hi+511) = *(mulf_sqr1_hi+256) - // [312] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [181] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff // mulf_init::@return // } - // [313] return + // [182] return rts // mulf_init::@6 b6: // *sqr2_lo = mulf_sqr1_lo[x_255] - // [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [183] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_lo,x ldy #0 sta (sqr2_lo),y // *sqr2_hi++ = mulf_sqr1_hi[x_255] - // [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [184] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_hi,x sta (sqr2_hi),y // *sqr2_hi++ = mulf_sqr1_hi[x_255]; - // [316] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [185] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc sqr2_hi bne !+ inc sqr2_hi+1 !: // x_255 = x_255 + dir - // [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 + // [186] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 txa clc adc dir tax // if(x_255==0) - // [318] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 + // [187] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 cpx #0 bne b8 - // [320] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] - // [320] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [189] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [189] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta dir - // [319] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [188] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] // mulf_init::@9 - // [320] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] - // [320] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [189] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [189] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy // mulf_init::@8 b8: // for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) - // [321] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [190] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc sqr2_lo bne !+ inc sqr2_lo+1 !: - // [309] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] - // [309] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [309] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [309] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [309] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [178] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [178] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [178] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [178] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [178] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp b5 // mulf_init::@2 b2: // if((++c&1)==0) - // [322] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [191] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc c // ++c&1 - // [323] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 + // [192] (byte~) mulf_init::$9 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 lda #1 and c // if((++c&1)==0) - // [324] if((byte~) mulf_init::$9!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 + // [193] if((byte~) mulf_init::$9!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 cmp #0 bne b3 // mulf_init::@4 // x_2++; - // [325] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx + // [194] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx inx // sqr++; - // [326] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [195] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc sqr bne !+ inc sqr+1 !: - // [327] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] - // [327] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [327] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [196] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [196] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [196] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy // mulf_init::@3 b3: // sqr - // [330] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 + // [199] (byte~) mulf_init::$13 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 lda sqr+1 // *sqr1_hi++ = >sqr - // [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 -- _deref_pbuz1=vbuaa + // [200] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$13 -- _deref_pbuz1=vbuaa sta (sqr1_hi),y // *sqr1_hi++ = >sqr; - // [332] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [201] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc sqr1_hi bne !+ inc sqr1_hi+1 !: // sqr = sqr + x_2 - // [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx + // [202] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx txa clc adc sqr @@ -13198,29 +10021,29 @@ mulf_init: { inc sqr+1 !: // for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) - // [334] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [203] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc sqr1_lo bne !+ inc sqr1_lo+1 !: - // [307] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] - // [307] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [307] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [307] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [307] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [307] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [176] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [176] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [176] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [176] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [176] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [176] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp b1 } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) - // [336] call memset - // [338] phi from print_cls to memset [phi:print_cls->memset] + // [205] call memset + // [207] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } - // [337] return + // [206] return rts } // memset @@ -13230,17 +10053,30 @@ memset: { .const num = $3e8 .label str = $400 .label end = str+num - .label dst = $d - // [339] phi from memset to memset::@1 [phi:memset->memset::@1] - // [339] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + .label dst = $c + // [208] phi from memset to memset::@2 [phi:memset->memset::@2] + // [208] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [208] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [208] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [209] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [210] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [211] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -13249,24 +10085,8 @@ memset: { bne b2 // memset::@return // } - // [341] return + // [212] return rts - // memset::@2 - b2: - // *dst = c - // [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [343] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [339] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [339] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/test-multiply-8bit.sym b/src/test/ref/test-multiply-8bit.sym index 7245e98a7..660162611 100644 --- a/src/test/ref/test-multiply-8bit.sym +++ b/src/test/ref/test-multiply-8bit.sym @@ -21,8 +21,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:13 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:13 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:12 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:12 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -30,84 +30,17 @@ (void*) memset::return (void*) memset::str (const void*) memset::str#0 str = (void*)(byte*) 1024 -(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) -(byte~) mul8s::$13 reg byte a 4.0 -(byte~) mul8s::$16 reg byte a 4.0 -(byte~) mul8s::$17 reg byte a 4.0 -(byte~) mul8s::$9 reg byte a 4.0 -(label) mul8s::@1 -(label) mul8s::@2 -(label) mul8s::@3 -(label) mul8s::@4 -(label) mul8s::@5 -(label) mul8s::@return -(signed byte) mul8s::a -(signed byte) mul8s::a#0 a zp ZP_BYTE:12 7.357142857142858 -(signed byte) mul8s::b -(signed byte) mul8s::b#0 reg byte y 9.363636363636363 -(word) mul8s::m -(word) mul8s::m#0 m zp ZP_WORD:8 2.0 -(word) mul8s::m#1 m zp ZP_WORD:8 4.0 -(word) mul8s::m#2 m zp ZP_WORD:8 4.0 -(word) mul8s::m#4 m zp ZP_WORD:8 1.3333333333333333 -(word) mul8s::m#5 m zp ZP_WORD:8 2.5 -(signed word) mul8s::return (void()) mul8s_compare() (label) mul8s_compare::@1 -(label) mul8s_compare::@10 -(label) mul8s_compare::@11 -(label) mul8s_compare::@12 -(label) mul8s_compare::@13 -(label) mul8s_compare::@14 -(label) mul8s_compare::@15 (label) mul8s_compare::@2 -(label) mul8s_compare::@3 -(label) mul8s_compare::@4 -(label) mul8s_compare::@5 -(label) mul8s_compare::@6 -(label) mul8s_compare::@7 -(label) mul8s_compare::@8 -(label) mul8s_compare::@9 (label) mul8s_compare::@return (signed byte) mul8s_compare::a -(signed byte) mul8s_compare::a#1 a zp ZP_BYTE:12 22.0 -(signed byte) mul8s_compare::a#10 a zp ZP_BYTE:12 12.518518518518519 (signed byte) mul8s_compare::b -(signed byte) mul8s_compare::b#1 b zp ZP_BYTE:15 202.0 -(signed byte) mul8s_compare::b#10 b zp ZP_BYTE:15 24.319999999999997 (signed word) mul8s_compare::mf -(signed word) mul8s_compare::mf#0 mf zp ZP_WORD:10 12.0 (signed word) mul8s_compare::mn -(signed word) mul8s_compare::mn#0 mn zp ZP_WORD:8 17.0 (signed word) mul8s_compare::ms -(signed word) mul8s_compare::ms#0 ms zp ZP_WORD:4 15.249999999999998 (byte) mul8s_compare::ok -(byte) mul8s_compare::ok#3 reg byte x 202.0 -(byte) mul8s_compare::ok#4 reg byte x 33.666666666666664 (const string) mul8s_compare::str str = (string) "signed multiply results match!@" -(void()) mul8s_error((signed byte) mul8s_error::a , (signed byte) mul8s_error::b , (signed word) mul8s_error::ms , (signed word) mul8s_error::mn , (signed word) mul8s_error::mf) -(label) mul8s_error::@1 -(label) mul8s_error::@10 -(label) mul8s_error::@2 -(label) mul8s_error::@3 -(label) mul8s_error::@4 -(label) mul8s_error::@5 -(label) mul8s_error::@6 -(label) mul8s_error::@7 -(label) mul8s_error::@8 -(label) mul8s_error::@9 -(label) mul8s_error::@return -(signed byte) mul8s_error::a -(signed byte) mul8s_error::a#0 reg byte x 0.5714285714285714 -(signed byte) mul8s_error::b -(signed byte) mul8s_error::b#0 b zp ZP_BYTE:15 0.4 -(signed word) mul8s_error::mf -(signed word) mul8s_error::mf#0 mf zp ZP_WORD:10 0.21052631578947367 -(signed word) mul8s_error::mn -(signed word) mul8s_error::mn#0 mn zp ZP_WORD:8 0.25 -(signed word) mul8s_error::ms -(signed word) mul8s_error::ms#0 ms zp ZP_WORD:4 0.3076923076923077 -(const string) mul8s_error::str str = (string) "signed multiply mismatch @" (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) (byte~) mul8u::$1 reg byte a 2002.0 (label) mul8u::@1 @@ -117,24 +50,19 @@ (label) mul8u::@return (byte) mul8u::a (byte) mul8u::a#0 reg byte x 1001.0 -(byte) mul8u::a#1 reg byte x 2.0 -(byte) mul8u::a#2 reg byte x 101.0 +(byte) mul8u::a#2 reg byte x 34.33333333333333 (byte) mul8u::a#3 reg byte x 667.6666666666667 -(byte) mul8u::a#6 reg byte x 105.0 (byte) mul8u::b -(byte) mul8u::b#0 reg byte a 4.0 -(byte) mul8u::b#1 reg byte a 202.0 +(byte) mul8u::b#1 reg byte a 51.5 (word) mul8u::mb -(word) mul8u::mb#0 mb zp ZP_WORD:13 105.0 -(word) mul8u::mb#1 mb zp ZP_WORD:13 2002.0 -(word) mul8u::mb#2 mb zp ZP_WORD:13 429.2857142857143 +(word) mul8u::mb#1 mb zp ZP_WORD:12 2002.0 +(word) mul8u::mb#2 mb zp ZP_WORD:12 429.2857142857143 (word) mul8u::res -(word) mul8u::res#1 res zp ZP_WORD:8 2002.0 -(word) mul8u::res#2 res zp ZP_WORD:8 443.7142857142857 -(word) mul8u::res#6 res zp ZP_WORD:8 1001.0 +(word) mul8u::res#1 res zp ZP_WORD:9 2002.0 +(word) mul8u::res#2 res zp ZP_WORD:9 517.3333333333334 +(word) mul8u::res#6 res zp ZP_WORD:9 1001.0 (word) mul8u::return -(word) mul8u::return#2 return zp ZP_WORD:8 4.0 -(word) mul8u::return#3 return zp ZP_WORD:8 202.0 +(word) mul8u::return#3 return zp ZP_WORD:9 202.0 (void()) mul8u_compare() (label) mul8u_compare::@1 (label) mul8u_compare::@10 @@ -152,15 +80,15 @@ (label) mul8u_compare::@9 (label) mul8u_compare::@return (byte) mul8u_compare::a -(byte) mul8u_compare::a#1 a zp ZP_BYTE:12 16.5 -(byte) mul8u_compare::a#7 a zp ZP_BYTE:12 12.11111111111111 +(byte) mul8u_compare::a#1 a zp ZP_BYTE:6 16.5 +(byte) mul8u_compare::a#7 a zp ZP_BYTE:6 12.11111111111111 (byte) mul8u_compare::b -(byte) mul8u_compare::b#1 b zp ZP_BYTE:15 151.5 -(byte) mul8u_compare::b#10 b zp ZP_BYTE:15 20.279999999999998 +(byte) mul8u_compare::b#1 b zp ZP_BYTE:11 151.5 +(byte) mul8u_compare::b#10 b zp ZP_BYTE:11 20.279999999999998 (word) mul8u_compare::mf -(word) mul8u_compare::mf#0 mf zp ZP_WORD:10 11.333333333333332 +(word) mul8u_compare::mf#0 mf zp ZP_WORD:14 11.333333333333332 (word) mul8u_compare::mn -(word) mul8u_compare::mn#0 mn zp ZP_WORD:8 17.0 +(word) mul8u_compare::mn#0 mn zp ZP_WORD:9 17.0 (word) mul8u_compare::ms (word) mul8u_compare::ms#0 ms zp ZP_WORD:4 14.523809523809522 (byte) mul8u_compare::ok @@ -182,11 +110,11 @@ (byte) mul8u_error::a (byte) mul8u_error::a#0 reg byte x 0.5714285714285714 (byte) mul8u_error::b -(byte) mul8u_error::b#0 b zp ZP_BYTE:15 0.4 +(byte) mul8u_error::b#0 b zp ZP_BYTE:11 0.4 (word) mul8u_error::mf -(word) mul8u_error::mf#0 mf zp ZP_WORD:10 0.21052631578947367 +(word) mul8u_error::mf#0 mf zp ZP_WORD:14 0.21052631578947367 (word) mul8u_error::mn -(word) mul8u_error::mn#0 mn zp ZP_WORD:8 0.25 +(word) mul8u_error::mn#0 mn zp ZP_WORD:9 0.25 (word) mul8u_error::ms (word) mul8u_error::ms#0 ms zp ZP_WORD:4 0.3076923076923077 (const string) mul8u_error::str str = (string) "multiply mismatch @" @@ -198,42 +126,6 @@ (const byte[$200]) mula_sqr2_hi#0 mula_sqr2_hi = { fill( $200, 0) } (byte[$200]) mula_sqr2_lo (const byte[$200]) mula_sqr2_lo#0 mula_sqr2_lo = { fill( $200, 0) } -(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) -(label) mulf8s::@1 -(label) mulf8s::@2 -(label) mulf8s::@return -(signed byte) mulf8s::a -(signed byte) mulf8s::a#0 reg byte a 33.666666666666664 -(signed byte) mulf8s::b -(signed byte) mulf8s::b#0 reg byte x 25.75 -(label) mulf8s::mulf8s_prepare1 -(byte~) mulf8s::mulf8s_prepare1_$0 -(signed byte) mulf8s::mulf8s_prepare1_a -(signed word) mulf8s::return -(signed word) mulf8s::return#0 return zp ZP_WORD:10 34.33333333333333 -(signed word) mulf8s::return#2 return zp ZP_WORD:10 202.0 -(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) -(byte~) mulf8s_prepared::$12 reg byte a 4.0 -(byte~) mulf8s_prepared::$15 reg byte a 4.0 -(byte~) mulf8s_prepared::$16 reg byte a 4.0 -(byte~) mulf8s_prepared::$8 reg byte a 4.0 -(label) mulf8s_prepared::@1 -(label) mulf8s_prepared::@2 -(label) mulf8s_prepared::@3 -(label) mulf8s_prepared::@4 -(label) mulf8s_prepared::@5 -(label) mulf8s_prepared::@return -(signed byte) mulf8s_prepared::b -(signed byte) mulf8s_prepared::b#0 b zp ZP_BYTE:15 0.4 -(word) mulf8s_prepared::m -(word) mulf8s_prepared::m#0 m zp ZP_WORD:10 2.0 -(word) mulf8s_prepared::m#1 m zp ZP_WORD:10 4.0 -(word) mulf8s_prepared::m#2 m zp ZP_WORD:10 4.0 -(word) mulf8s_prepared::m#4 m zp ZP_WORD:10 1.3333333333333333 -(word) mulf8s_prepared::m#5 m zp ZP_WORD:10 2.5 -(signed byte*) mulf8s_prepared::memA -(const signed byte*) mulf8s_prepared::memA#0 memA = (signed byte*) 253 -(signed word) mulf8s_prepared::return (word()) mulf8u((byte) mulf8u::a , (byte) mulf8u::b) (label) mulf8u::@1 (label) mulf8u::@2 @@ -243,30 +135,25 @@ (byte) mulf8u::b (byte) mulf8u::b#0 reg byte x 34.33333333333333 (word) mulf8u::return -(word) mulf8u::return#0 return zp ZP_WORD:10 34.33333333333333 -(word) mulf8u::return#2 return zp ZP_WORD:10 202.0 +(word) mulf8u::return#0 return zp ZP_WORD:14 34.33333333333333 +(word) mulf8u::return#2 return zp ZP_WORD:14 202.0 (void()) mulf8u_prepare((byte) mulf8u_prepare::a) (label) mulf8u_prepare::@return (byte) mulf8u_prepare::a (byte) mulf8u_prepare::a#0 reg byte a 4.0 -(byte) mulf8u_prepare::a#1 reg byte a 4.0 -(byte) mulf8u_prepare::a#2 reg byte a 6.0 (byte*) mulf8u_prepare::memA (const byte*) mulf8u_prepare::memA#0 memA = (byte*) 253 (word()) mulf8u_prepared((byte) mulf8u_prepared::b) (label) mulf8u_prepared::@return (byte) mulf8u_prepared::b (byte) mulf8u_prepared::b#0 reg byte x 4.0 -(byte) mulf8u_prepared::b#1 reg byte x 4.0 -(byte) mulf8u_prepared::b#2 reg byte x 6.0 (byte*) mulf8u_prepared::memB (const byte*) mulf8u_prepared::memB#0 memB = (byte*) 255 (byte*) mulf8u_prepared::resL (const byte*) mulf8u_prepared::resL#0 resL = (byte*) 254 (word) mulf8u_prepared::return -(word) mulf8u_prepared::return#0 return zp ZP_WORD:10 1.5 -(word) mulf8u_prepared::return#2 return zp ZP_WORD:10 4.0 -(word) mulf8u_prepared::return#3 return zp ZP_WORD:10 4.0 +(word) mulf8u_prepared::return#0 return zp ZP_WORD:14 1.3333333333333333 +(word) mulf8u_prepared::return#2 return zp ZP_WORD:14 4.0 (void()) mulf_init() (byte~) mulf_init::$12 reg byte a 22.0 (byte~) mulf_init::$13 reg byte a 22.0 @@ -282,28 +169,28 @@ (label) mulf_init::@9 (label) mulf_init::@return (byte) mulf_init::c -(byte) mulf_init::c#1 c zp ZP_BYTE:15 2.5384615384615383 -(byte) mulf_init::c#2 c zp ZP_BYTE:15 11.0 +(byte) mulf_init::c#1 c zp ZP_BYTE:6 2.5384615384615383 +(byte) mulf_init::c#2 c zp ZP_BYTE:6 11.0 (byte) mulf_init::dir -(byte) mulf_init::dir#2 dir zp ZP_BYTE:12 4.125 -(byte) mulf_init::dir#4 dir zp ZP_BYTE:12 11.0 +(byte) mulf_init::dir#2 dir zp ZP_BYTE:11 4.125 +(byte) mulf_init::dir#4 dir zp ZP_BYTE:11 11.0 (word) mulf_init::sqr -(word) mulf_init::sqr#1 sqr zp ZP_WORD:13 11.0 -(word) mulf_init::sqr#2 sqr zp ZP_WORD:13 22.0 -(word) mulf_init::sqr#3 sqr zp ZP_WORD:13 9.166666666666666 -(word) mulf_init::sqr#4 sqr zp ZP_WORD:13 5.5 +(word) mulf_init::sqr#1 sqr zp ZP_WORD:14 11.0 +(word) mulf_init::sqr#2 sqr zp ZP_WORD:14 22.0 +(word) mulf_init::sqr#3 sqr zp ZP_WORD:14 9.166666666666666 +(word) mulf_init::sqr#4 sqr zp ZP_WORD:14 5.5 (byte*) mulf_init::sqr1_hi -(byte*) mulf_init::sqr1_hi#1 sqr1_hi zp ZP_WORD:6 7.333333333333333 -(byte*) mulf_init::sqr1_hi#2 sqr1_hi zp ZP_WORD:6 2.75 +(byte*) mulf_init::sqr1_hi#1 sqr1_hi zp ZP_WORD:7 7.333333333333333 +(byte*) mulf_init::sqr1_hi#2 sqr1_hi zp ZP_WORD:7 2.75 (byte*) mulf_init::sqr1_lo (byte*) mulf_init::sqr1_lo#1 sqr1_lo zp ZP_WORD:4 22.0 (byte*) mulf_init::sqr1_lo#2 sqr1_lo zp ZP_WORD:4 3.142857142857143 (byte*) mulf_init::sqr2_hi -(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp ZP_WORD:10 3.6666666666666665 -(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp ZP_WORD:10 8.25 +(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp ZP_WORD:12 3.6666666666666665 +(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp ZP_WORD:12 8.25 (byte*) mulf_init::sqr2_lo -(byte*) mulf_init::sqr2_lo#1 sqr2_lo zp ZP_WORD:8 22.0 -(byte*) mulf_init::sqr2_lo#2 sqr2_lo zp ZP_WORD:8 4.888888888888889 +(byte*) mulf_init::sqr2_lo#1 sqr2_lo zp ZP_WORD:9 22.0 +(byte*) mulf_init::sqr2_lo#2 sqr2_lo zp ZP_WORD:9 4.888888888888889 (byte) mulf_init::x_2 (byte) mulf_init::x_2#1 reg byte x 11.0 (byte) mulf_init::x_2#2 reg byte x 5.5 @@ -344,39 +231,13 @@ (const string) mulf_tables_cmp::str str = (string) "multiply tables match!@" (const string) mulf_tables_cmp::str1 str1 = (string) "multiply table mismatch at @" (const string) mulf_tables_cmp::str2 str2 = (string) " / @" -(signed word()) muls8s((signed byte) muls8s::a , (signed byte) muls8s::b) -(label) muls8s::@1 -(label) muls8s::@2 -(label) muls8s::@3 -(label) muls8s::@4 -(label) muls8s::@5 -(label) muls8s::@6 -(label) muls8s::@return -(signed byte) muls8s::a -(signed byte) muls8s::a#0 a zp ZP_BYTE:12 175.58333333333334 -(signed byte) muls8s::b -(signed byte) muls8s::b#0 reg byte x 191.1818181818182 -(signed byte) muls8s::i -(signed byte) muls8s::i#1 reg byte y 2002.0 -(signed byte) muls8s::i#2 reg byte y 1001.0 -(signed byte) muls8s::j -(signed byte) muls8s::j#1 reg byte y 2002.0 -(signed byte) muls8s::j#2 reg byte y 1001.0 -(signed word) muls8s::m -(signed word) muls8s::m#1 m zp ZP_WORD:4 1001.0 -(signed word) muls8s::m#2 m zp ZP_WORD:4 1001.0 -(signed word) muls8s::m#3 m zp ZP_WORD:4 1501.5 -(signed word) muls8s::m#5 m zp ZP_WORD:4 1501.5 -(signed word) muls8s::return -(signed word) muls8s::return#0 return zp ZP_WORD:4 701.0 -(signed word) muls8s::return#2 return zp ZP_WORD:4 202.0 (word()) muls8u((byte) muls8u::a , (byte) muls8u::b) (label) muls8u::@1 (label) muls8u::@2 (label) muls8u::@3 (label) muls8u::@return (byte) muls8u::a -(byte) muls8u::a#0 a zp ZP_BYTE:12 157.71428571428572 +(byte) muls8u::a#0 a zp ZP_BYTE:6 157.71428571428572 (byte) muls8u::b (byte) muls8u::b#0 reg byte x 183.66666666666669 (byte) muls8u::i @@ -394,12 +255,11 @@ (label) print_byte::@1 (label) print_byte::@return (byte) print_byte::b -(byte) print_byte::b#0 reg byte x 4.0 (byte) print_byte::b#1 reg byte x 4.0 (byte) print_byte::b#2 reg byte x 4.0 (byte) print_byte::b#3 reg byte x 4.0 (byte) print_byte::b#4 reg byte x 4.0 -(byte) print_byte::b#5 reg byte x 3.5 +(byte) print_byte::b#5 reg byte x 3.0 (void()) print_char((byte) print_char::ch) (label) print_char::@return (byte) print_char::ch @@ -407,123 +267,77 @@ (byte) print_char::ch#5 reg byte a 4.0 (byte) print_char::ch#6 reg byte a 6.0 (byte*) print_char_cursor -(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:6 11.0 -(byte*) print_char_cursor#100 print_char_cursor zp ZP_WORD:6 0.1951219512195122 -(byte*) print_char_cursor#134 print_char_cursor zp ZP_WORD:6 1.5 -(byte*) print_char_cursor#135 print_char_cursor zp ZP_WORD:6 5.25 -(byte*) print_char_cursor#142 print_char_cursor zp ZP_WORD:6 7.0 -(byte*) print_char_cursor#143 print_char_cursor zp ZP_WORD:6 3.9999999999999996 -(byte*) print_char_cursor#155 print_char_cursor zp ZP_WORD:6 28.0 -(byte*) print_char_cursor#19 print_char_cursor zp ZP_WORD:6 0.7083333333333331 -(byte*~) print_char_cursor#193 print_char_cursor zp ZP_WORD:6 4.0 -(byte*~) print_char_cursor#194 print_char_cursor zp ZP_WORD:6 4.0 -(byte*~) print_char_cursor#230 print_char_cursor zp ZP_WORD:6 4.0 -(byte*) print_char_cursor#86 print_char_cursor zp ZP_WORD:6 8.0 +(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:7 11.0 +(byte*) print_char_cursor#100 print_char_cursor zp ZP_WORD:7 0.1951219512195122 +(byte*) print_char_cursor#134 print_char_cursor zp ZP_WORD:7 1.8076923076923077 +(byte*) print_char_cursor#135 print_char_cursor zp ZP_WORD:7 4.75 +(byte*) print_char_cursor#143 print_char_cursor zp ZP_WORD:7 3.333333333333333 +(byte*) print_char_cursor#155 print_char_cursor zp ZP_WORD:7 18.0 +(byte*) print_char_cursor#19 print_char_cursor zp ZP_WORD:7 0.8333333333333334 +(byte*~) print_char_cursor#193 print_char_cursor zp ZP_WORD:7 4.0 +(byte*~) print_char_cursor#213 print_char_cursor zp ZP_WORD:7 4.0 +(byte*) print_char_cursor#86 print_char_cursor zp ZP_WORD:7 4.0 (void()) print_cls() (label) print_cls::@return (byte[]) print_hextab (const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef" (byte*) print_line_cursor -(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:2 0.6428571428571428 +(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:2 2.5625 (byte*) print_line_cursor#11 print_line_cursor zp ZP_WORD:2 0.09523809523809523 (byte*) print_line_cursor#23 print_line_cursor zp ZP_WORD:2 24.0 -(byte*) print_line_cursor#45 print_line_cursor zp ZP_WORD:2 10.0 +(byte*) print_line_cursor#45 print_line_cursor zp ZP_WORD:2 8.0 (void()) print_ln() (label) print_ln::@1 (label) print_ln::@return -(void()) print_sbyte((signed byte) print_sbyte::b) -(label) print_sbyte::@1 -(label) print_sbyte::@2 -(label) print_sbyte::@3 -(label) print_sbyte::@4 -(label) print_sbyte::@return -(signed byte) print_sbyte::b -(signed byte) print_sbyte::b#0 reg byte x 4.0 -(signed byte) print_sbyte::b#1 reg byte x 4.0 -(signed byte) print_sbyte::b#2 reg byte x 4.0 -(signed byte) print_sbyte::b#3 reg byte x 1.6666666666666665 -(signed byte) print_sbyte::b#5 reg byte x 4.0 (byte*) print_screen (void()) print_str((byte*) print_str::str) (label) print_str::@1 (label) print_str::@2 (label) print_str::@return (byte*) print_str::str -(byte*) print_str::str#0 str zp ZP_WORD:13 22.0 -(byte*) print_str::str#16 str zp ZP_WORD:13 11.5 -(byte*) print_str::str#18 str zp ZP_WORD:13 2.0 -(void()) print_sword((signed word) print_sword::w) -(label) print_sword::@1 -(label) print_sword::@2 -(label) print_sword::@3 -(label) print_sword::@4 -(label) print_sword::@return -(signed word) print_sword::w -(signed word) print_sword::w#0 w zp ZP_WORD:4 4.0 -(signed word) print_sword::w#1 w zp ZP_WORD:4 4.0 -(signed word) print_sword::w#2 w zp ZP_WORD:4 4.0 -(signed word) print_sword::w#3 w zp ZP_WORD:4 4.0 -(signed word) print_sword::w#4 w zp ZP_WORD:4 1.9999999999999998 -(signed word) print_sword::w#6 w zp ZP_WORD:4 4.0 +(byte*) print_str::str#0 str zp ZP_WORD:12 22.0 +(byte*) print_str::str#16 str zp ZP_WORD:12 11.5 +(byte*) print_str::str#18 str zp ZP_WORD:12 2.0 (void()) print_word((word) print_word::w) (label) print_word::@1 (label) print_word::@return (word) print_word::w -(word) print_word::w#0 w zp ZP_WORD:4 4.0 (word) print_word::w#1 w zp ZP_WORD:4 4.0 (word) print_word::w#2 w zp ZP_WORD:4 4.0 (word) print_word::w#3 w zp ZP_WORD:4 4.0 (word) print_word::w#4 w zp ZP_WORD:4 4.0 (word) print_word::w#5 w zp ZP_WORD:4 4.0 -(word) print_word::w#6 w zp ZP_WORD:4 5.333333333333333 +(word) print_word::w#6 w zp ZP_WORD:4 4.666666666666666 (const string) str1 str1 = (string) "*@" (const string) str2 str2 = (string) " slow:@" (const string) str3 str3 = (string) " / normal:@" (const string) str4 str4 = (string) " / fast:@" -reg byte x [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] -reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] -reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] -reg byte a [ mul8u::b#0 ] -reg byte a [ mul8u::b#1 ] -reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] -reg byte x [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] -reg byte a [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] -reg byte y [ muls8s::j#2 muls8s::j#1 ] -reg byte y [ muls8s::i#2 muls8s::i#1 ] reg byte x [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] +reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#1 print_byte::b#2 ] +reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] +reg byte x [ mul8u::a#3 mul8u::a#2 mul8u::a#0 ] +reg byte a [ mul8u::b#1 ] reg byte y [ muls8u::i#2 muls8u::i#1 ] zp ZP_WORD:2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] -zp ZP_WORD:4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] -zp ZP_WORD:6 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 print_char_cursor#155 print_char_cursor#193 print_char_cursor#194 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#230 ] +zp ZP_WORD:4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8u_error::ms#0 mul8u_compare::ms#0 muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] +zp ZP_BYTE:6 [ mulf_init::c#2 mulf_init::c#1 mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 ] +zp ZP_WORD:7 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 print_char_cursor#86 print_char_cursor#143 print_char_cursor#155 print_char_cursor#193 print_char_cursor#100 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#1 print_char_cursor#213 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -zp ZP_WORD:8 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8s_error::mn#0 mul8u_compare::mn#0 mul8u_error::mn#0 ] +zp ZP_WORD:9 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8u_compare::mn#0 mul8u_error::mn#0 ] reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] -zp ZP_WORD:10 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 mul8s_error::mf#0 mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 ] -zp ZP_BYTE:12 [ mulf_init::dir#2 mulf_init::dir#4 mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 ] -zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 print_str::str#16 print_str::str#18 print_str::str#0 ] -reg byte x [ muls8s::b#0 ] -reg byte a [ mulf8s::a#0 ] -reg byte x [ mulf8s::b#0 ] -reg byte y [ mul8s::b#0 ] -reg byte x [ mul8s_error::a#0 ] -reg byte a [ print_byte::$0 ] -reg byte x [ print_byte::$2 ] -reg byte a [ mul8s::$9 ] -reg byte a [ mul8s::$16 ] -reg byte a [ mul8s::$13 ] -reg byte a [ mul8s::$17 ] -reg byte a [ mul8u::$1 ] -zp ZP_BYTE:15 [ mulf8s_prepared::b#0 mulf_init::c#2 mulf_init::c#1 mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 ] -reg byte a [ mulf8s_prepared::$8 ] -reg byte a [ mulf8s_prepared::$15 ] -reg byte a [ mulf8s_prepared::$12 ] -reg byte a [ mulf8s_prepared::$16 ] +zp ZP_BYTE:11 [ mulf_init::dir#2 mulf_init::dir#4 mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 ] +zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mul8u::mb#2 mul8u::mb#1 print_str::str#16 print_str::str#18 print_str::str#0 ] reg byte x [ muls8u::b#0 ] reg byte a [ mulf8u::a#0 ] reg byte x [ mulf8u::b#0 ] +zp ZP_WORD:14 [ mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 mulf8u_prepared::return#2 mulf8u_prepared::return#0 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] reg byte x [ mul8u_error::a#0 ] +reg byte a [ print_byte::$0 ] +reg byte x [ print_byte::$2 ] +reg byte a [ mul8u::$1 ] +reg byte a [ mulf8u_prepare::a#0 ] +reg byte x [ mulf8u_prepared::b#0 ] reg byte a [ mulf_init::$9 ] reg byte a [ mulf_init::$12 ] reg byte a [ mulf_init::$13 ] diff --git a/src/test/ref/test-scroll-up.asm b/src/test/ref/test-scroll-up.asm index 89dd3cbf2..e0604024f 100644 --- a/src/test/ref/test-scroll-up.asm +++ b/src/test/ref/test-scroll-up.asm @@ -17,33 +17,12 @@ scrollup3: { lda #<0 sta line sta line+1 - b1: - lda line+1 - cmp #>$28*$18 - bcc b2 - bne !+ - lda line - cmp #<$28*$18 - bcc b2 - !: - rts b2: lda line sta l2 lda line+1 sta l2+1 ldx #0 - b3: - cpx #$28 - bcc b4 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - jmp b1 b4: lda l2 clc @@ -67,7 +46,24 @@ scrollup3: { inc l2+1 !: inx - jmp b3 + cpx #$28 + bcc b4 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: + lda line+1 + cmp #>$28*$18 + bcc b2 + bne !+ + lda line + cmp #<$28*$18 + bcc b2 + !: + rts } scrollup2: { .label line1 = 3 @@ -115,30 +111,9 @@ scrollup1: { lda #<0 sta line sta line+1 - b1: - lda line+1 - cmp #>$28*$18 - bcc b4 - bne !+ - lda line - cmp #<$28*$18 - bcc b4 - !: - rts - b4: - ldx #0 b2: - cpx #$28 - bcc b3 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - jmp b1 - b3: + ldx #0 + b4: txa clc adc line @@ -171,5 +146,22 @@ scrollup1: { lda (_5),y sta (_6),y inx - jmp b2 + cpx #$28 + bcc b4 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: + lda line+1 + cmp #>$28*$18 + bcc b2 + bne !+ + lda line + cmp #<$28*$18 + bcc b2 + !: + rts } diff --git a/src/test/ref/test-scroll-up.cfg b/src/test/ref/test-scroll-up.cfg index a6213abf6..e8d06e15c 100644 --- a/src/test/ref/test-scroll-up.cfg +++ b/src/test/ref/test-scroll-up.cfg @@ -24,32 +24,34 @@ main::@return: scope:[main] from main::@2 to:@return scrollup3: scope:[scrollup3] from main::@2 [11] phi() - to:scrollup3::@1 -scrollup3::@1: scope:[scrollup3] from scrollup3 scrollup3::@5 - [12] (word) scrollup3::line#2 ← phi( scrollup3/(byte) 0 scrollup3::@5/(word) scrollup3::line#1 ) - [13] if((word) scrollup3::line#2<(word)(number) $28*(number) $18) goto scrollup3::@2 - to:scrollup3::@return -scrollup3::@return: scope:[scrollup3] from scrollup3::@1 - [14] return - to:@return -scrollup3::@2: scope:[scrollup3] from scrollup3::@1 - [15] (word~) scrollup3::l2#4 ← (word) scrollup3::line#2 + to:scrollup3::@2 +scrollup3::@2: scope:[scrollup3] from scrollup3 scrollup3::@1 + [12] (word) scrollup3::line#10 ← phi( scrollup3::@1/(word) scrollup3::line#1 scrollup3/(byte) 0 ) + to:scrollup3::@4_1 +scrollup3::@4_1: scope:[scrollup3] from scrollup3::@2 + [13] (word~) scrollup3::l2#7 ← (word) scrollup3::line#10 + to:scrollup3::@4 +scrollup3::@4: scope:[scrollup3] from scrollup3::@3 scrollup3::@4_1 + [14] (word) scrollup3::l2#4 ← phi( scrollup3::@3/(word) scrollup3::l2#1 scrollup3::@4_1/(word~) scrollup3::l2#7 ) + [14] (byte) scrollup3::c#4 ← phi( scrollup3::@3/(byte) scrollup3::c#1 scrollup3::@4_1/(byte) 0 ) + [15] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#4 + [16] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#4 + [17] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) + [18] (word) scrollup3::l2#1 ← ++ (word) scrollup3::l2#4 + [19] (byte) scrollup3::c#1 ← ++ (byte) scrollup3::c#4 to:scrollup3::@3 -scrollup3::@3: scope:[scrollup3] from scrollup3::@2 scrollup3::@4 - [16] (word) scrollup3::l2#2 ← phi( scrollup3::@2/(word~) scrollup3::l2#4 scrollup3::@4/(word) scrollup3::l2#1 ) - [16] (byte) scrollup3::c#2 ← phi( scrollup3::@2/(byte) 0 scrollup3::@4/(byte) scrollup3::c#1 ) - [17] if((byte) scrollup3::c#2<(byte) $28) goto scrollup3::@4 +scrollup3::@3: scope:[scrollup3] from scrollup3::@4 + [20] if((byte) scrollup3::c#1<(byte) $28) goto scrollup3::@4 to:scrollup3::@5 scrollup3::@5: scope:[scrollup3] from scrollup3::@3 - [18] (word) scrollup3::line#1 ← (word) scrollup3::line#2 + (byte) $28 + [21] (word) scrollup3::line#1 ← (word) scrollup3::line#10 + (byte) $28 to:scrollup3::@1 -scrollup3::@4: scope:[scrollup3] from scrollup3::@3 - [19] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#2 - [20] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#2 - [21] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) - [22] (word) scrollup3::l2#1 ← ++ (word) scrollup3::l2#2 - [23] (byte) scrollup3::c#1 ← ++ (byte) scrollup3::c#2 - to:scrollup3::@3 +scrollup3::@1: scope:[scrollup3] from scrollup3::@5 + [22] if((word) scrollup3::line#1<(word)(number) $28*(number) $18) goto scrollup3::@2 + to:scrollup3::@return +scrollup3::@return: scope:[scrollup3] from scrollup3::@1 + [23] return + to:@return scrollup2: scope:[scrollup2] from main::@1 [24] phi() to:scrollup2::@1 @@ -77,26 +79,28 @@ scrollup2::@return: scope:[scrollup2] from scrollup2::@3 to:@return scrollup1: scope:[scrollup1] from main [35] phi() + to:scrollup1::@2 +scrollup1::@2: scope:[scrollup1] from scrollup1 scrollup1::@1 + [36] (word) scrollup1::line#10 ← phi( scrollup1::@1/(word) scrollup1::line#1 scrollup1/(byte) 0 ) + to:scrollup1::@4 +scrollup1::@4: scope:[scrollup1] from scrollup1::@2 scrollup1::@3 + [37] (byte) scrollup1::c#4 ← phi( scrollup1::@3/(byte) scrollup1::c#1 scrollup1::@2/(byte) 0 ) + [38] (word~) scrollup1::$2 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 + [39] (word~) scrollup1::$4 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 + [40] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 + [41] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 + [42] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) + [43] (byte) scrollup1::c#1 ← ++ (byte) scrollup1::c#4 + to:scrollup1::@3 +scrollup1::@3: scope:[scrollup1] from scrollup1::@4 + [44] if((byte) scrollup1::c#1<(byte) $28) goto scrollup1::@4 + to:scrollup1::@5 +scrollup1::@5: scope:[scrollup1] from scrollup1::@3 + [45] (word) scrollup1::line#1 ← (word) scrollup1::line#10 + (byte) $28 to:scrollup1::@1 -scrollup1::@1: scope:[scrollup1] from scrollup1 scrollup1::@4 - [36] (word) scrollup1::line#2 ← phi( scrollup1/(byte) 0 scrollup1::@4/(word) scrollup1::line#1 ) - [37] if((word) scrollup1::line#2<(word)(number) $28*(number) $18) goto scrollup1::@2 +scrollup1::@1: scope:[scrollup1] from scrollup1::@5 + [46] if((word) scrollup1::line#1<(word)(number) $28*(number) $18) goto scrollup1::@2 to:scrollup1::@return scrollup1::@return: scope:[scrollup1] from scrollup1::@1 - [38] return + [47] return to:@return -scrollup1::@2: scope:[scrollup1] from scrollup1::@1 scrollup1::@3 - [39] (byte) scrollup1::c#2 ← phi( scrollup1::@1/(byte) 0 scrollup1::@3/(byte) scrollup1::c#1 ) - [40] if((byte) scrollup1::c#2<(byte) $28) goto scrollup1::@3 - to:scrollup1::@4 -scrollup1::@4: scope:[scrollup1] from scrollup1::@2 - [41] (word) scrollup1::line#1 ← (word) scrollup1::line#2 + (byte) $28 - to:scrollup1::@1 -scrollup1::@3: scope:[scrollup1] from scrollup1::@2 - [42] (word~) scrollup1::$2 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 - [43] (word~) scrollup1::$4 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 - [44] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 - [45] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 - [46] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) - [47] (byte) scrollup1::c#1 ← ++ (byte) scrollup1::c#2 - to:scrollup1::@2 diff --git a/src/test/ref/test-scroll-up.log b/src/test/ref/test-scroll-up.log index 2f8010870..49e78c476 100644 --- a/src/test/ref/test-scroll-up.log +++ b/src/test/ref/test-scroll-up.log @@ -334,6 +334,10 @@ De-inlining pointer[w] to *(pointer+w) [18] *((const byte*) screen#0 + (word~) De-inlining pointer[w] to *(pointer+w) [53] *((const byte*) screen#0 + (word) scrollup3::l2#2) ← *((const byte*) screen#0 + (word~) scrollup3::$2) De-inlining pointer[w] to *(pointer+w) [53] *((const byte*) screen#0 + (word) scrollup3::l2#2) ← *((byte*~) scrollup3::$3) Successful SSA optimization Pass2DeInlineWordDerefIdx +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $28 in if((byte) scrollup2::c#1!=(number) $28) goto scrollup2::@2 Adding number conversion cast (unumber) $18 in if((byte) scrollup2::l#1!=(number) $18) goto scrollup2::@1 Successful SSA optimization PassNAddNumberTypeConversions @@ -343,10 +347,35 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $18 Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [17] (byte*) scrollup2::line2#0 ← (const byte*) screen#0 + (byte) $28 +Alias (word) scrollup1::line#1 = (word) scrollup1::line#2 +Alias (byte) scrollup1::c#1 = (byte) scrollup1::c#2 +Alias (word) scrollup1::line#7 = (word) scrollup1::line#9 +Alias (word) scrollup3::line#1 = (word) scrollup3::line#2 +Alias (byte) scrollup3::c#1 = (byte) scrollup3::c#2 +Alias (word) scrollup3::l2#1 = (word) scrollup3::l2#2 +Alias (word) scrollup3::line#11 = (word) scrollup3::line#9 +Alias (word) scrollup1::line#10 = (word) scrollup1::line#11 +Alias (word) scrollup3::line#10 = (word) scrollup3::l2#5 (word) scrollup3::line#8 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (word) scrollup1::line#7 (word) scrollup1::line#10 +Identical Phi Values (word) scrollup3::line#11 (word) scrollup3::line#10 +Identical Phi Values (byte) scrollup1::c#5 (const byte) scrollup1::c#0 +Identical Phi Values (word) scrollup1::line#12 (const word) scrollup1::line#0 +Identical Phi Values (byte) scrollup3::c#5 (const byte) scrollup3::c#0 +Identical Phi Values (word) scrollup3::line#12 (const word) scrollup3::line#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (word) scrollup1::line#8 (word) scrollup1::line#10 +Identical Phi Values (word) scrollup3::line#7 (word) scrollup3::line#10 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [21] (byte*) scrollup2::line2#0 ← (const byte*) screen#0 + (byte) $28 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) scrollup2::line2#0 = screen#0+$28 Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [50] if((const byte) scrollup1::c#0<(byte) $28) goto scrollup1::@5 +if() condition always true - replacing block destination [52] if((const word) scrollup1::line#0<(word)(number) $28*(number) $18) goto scrollup1::@2 +if() condition always true - replacing block destination [54] if((const byte) scrollup3::c#0<(byte) $28) goto scrollup3::@5 +if() condition always true - replacing block destination [56] if((const word) scrollup3::line#0<(word)(number) $28*(number) $18) goto scrollup3::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const word) scrollup1::line#0 Inlining constant with var siblings (const byte) scrollup1::c#0 Inlining constant with var siblings (const byte) scrollup2::l#0 @@ -368,10 +397,14 @@ Consolidated constant in assignment scrollup1::$5 Consolidated constant in assignment scrollup3::$3 Successful SSA optimization Pass2ConstantAdditionElimination Alias (word~) scrollup1::$4 = (word~) scrollup1::$3 -Alias (word) scrollup3::l2#2 = (word~) scrollup3::$2 +Alias (word) scrollup3::l2#4 = (word~) scrollup3::$2 Successful SSA optimization Pass2AliasElimination +Added new block during phi lifting scrollup1::@13(between scrollup1::@1 and scrollup1::@2) +Added new block during phi lifting scrollup1::@14(between scrollup1::@4 and scrollup1::@5) Added new block during phi lifting scrollup2::@5(between scrollup2::@3 and scrollup2::@1) Added new block during phi lifting scrollup2::@6(between scrollup2::@2 and scrollup2::@2) +Added new block during phi lifting scrollup3::@13(between scrollup3::@1 and scrollup3::@2) +Added new block during phi lifting scrollup3::@14(between scrollup3::@4 and scrollup3::@5) Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @5 @@ -381,38 +414,46 @@ Adding NOP phi() at start of main::@1 Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@3 Adding NOP phi() at start of scrollup3 +Adding NOP phi() at start of scrollup3::@1_1 Adding NOP phi() at start of scrollup2 Adding NOP phi() at start of scrollup1 -Adding NOP phi() at start of scrollup1::@2 +Adding NOP phi() at start of scrollup1::@1_1 +Adding NOP phi() at start of scrollup1::@4_1 CALL GRAPH Calls in [] to main:2 Calls in [main] to scrollup1:6 scrollup2:8 scrollup3:10 Created 11 initial phi equivalence classes -Not coalescing [17] scrollup3::l2#4 ← scrollup3::line#2 -Coalesced [21] scrollup3::line#7 ← scrollup3::line#1 -Coalesced [27] scrollup3::c#4 ← scrollup3::c#1 -Coalesced [28] scrollup3::l2#5 ← scrollup3::l2#1 -Coalesced [31] scrollup2::line2#6 ← scrollup2::line2#3 -Coalesced [32] scrollup2::line1#6 ← scrollup2::line1#3 -Coalesced [42] scrollup2::line2#5 ← scrollup2::line2#1 -Coalesced [43] scrollup2::line1#5 ← scrollup2::line1#1 -Coalesced [44] scrollup2::l#5 ← scrollup2::l#1 -Coalesced (already) [45] scrollup2::line2#7 ← scrollup2::line2#1 -Coalesced (already) [46] scrollup2::line1#7 ← scrollup2::line1#1 -Coalesced [47] scrollup2::c#3 ← scrollup2::c#1 -Coalesced [56] scrollup1::line#7 ← scrollup1::line#1 -Coalesced [63] scrollup1::c#4 ← scrollup1::c#1 +Not coalescing [16] scrollup3::l2#7 ← scrollup3::line#10 +Coalesced [27] scrollup3::line#13 ← scrollup3::line#1 +Coalesced [28] scrollup3::c#6 ← scrollup3::c#1 +Coalesced [29] scrollup3::l2#6 ← scrollup3::l2#1 +Coalesced [32] scrollup2::line2#6 ← scrollup2::line2#3 +Coalesced [33] scrollup2::line1#6 ← scrollup2::line1#3 +Coalesced [43] scrollup2::line2#5 ← scrollup2::line2#1 +Coalesced [44] scrollup2::line1#5 ← scrollup2::line1#1 +Coalesced [45] scrollup2::l#5 ← scrollup2::l#1 +Coalesced (already) [46] scrollup2::line2#7 ← scrollup2::line2#1 +Coalesced (already) [47] scrollup2::line1#7 ← scrollup2::line1#1 +Coalesced [48] scrollup2::c#3 ← scrollup2::c#1 +Coalesced [64] scrollup1::line#13 ← scrollup1::line#1 +Coalesced [65] scrollup1::c#6 ← scrollup1::c#1 Coalesced down to 9 phi equivalence classes Culled Empty Block (label) @5 Culled Empty Block (label) main::@3 +Culled Empty Block (label) scrollup3::@1_1 +Culled Empty Block (label) scrollup3::@13 +Culled Empty Block (label) scrollup3::@14 Culled Empty Block (label) scrollup2::@5 Culled Empty Block (label) scrollup2::@6 -Culled Empty Block (label) scrollup1::@2 +Culled Empty Block (label) scrollup1::@1_1 +Culled Empty Block (label) scrollup1::@4_1 +Culled Empty Block (label) scrollup1::@13 +Culled Empty Block (label) scrollup1::@14 Renumbering block @4 to @1 -Renumbering block scrollup1::@4 to scrollup1::@2 -Renumbering block scrollup1::@5 to scrollup1::@3 -Renumbering block scrollup1::@6 to scrollup1::@4 +Renumbering block scrollup1::@4 to scrollup1::@3 +Renumbering block scrollup1::@5 to scrollup1::@4 +Renumbering block scrollup1::@6 to scrollup1::@5 Renumbering block scrollup3::@4 to scrollup3::@3 Renumbering block scrollup3::@5 to scrollup3::@4 Renumbering block scrollup3::@6 to scrollup3::@5 @@ -453,32 +494,34 @@ main::@return: scope:[main] from main::@2 to:@return scrollup3: scope:[scrollup3] from main::@2 [11] phi() - to:scrollup3::@1 -scrollup3::@1: scope:[scrollup3] from scrollup3 scrollup3::@5 - [12] (word) scrollup3::line#2 ← phi( scrollup3/(byte) 0 scrollup3::@5/(word) scrollup3::line#1 ) - [13] if((word) scrollup3::line#2<(word)(number) $28*(number) $18) goto scrollup3::@2 - to:scrollup3::@return -scrollup3::@return: scope:[scrollup3] from scrollup3::@1 - [14] return - to:@return -scrollup3::@2: scope:[scrollup3] from scrollup3::@1 - [15] (word~) scrollup3::l2#4 ← (word) scrollup3::line#2 + to:scrollup3::@2 +scrollup3::@2: scope:[scrollup3] from scrollup3 scrollup3::@1 + [12] (word) scrollup3::line#10 ← phi( scrollup3::@1/(word) scrollup3::line#1 scrollup3/(byte) 0 ) + to:scrollup3::@4_1 +scrollup3::@4_1: scope:[scrollup3] from scrollup3::@2 + [13] (word~) scrollup3::l2#7 ← (word) scrollup3::line#10 + to:scrollup3::@4 +scrollup3::@4: scope:[scrollup3] from scrollup3::@3 scrollup3::@4_1 + [14] (word) scrollup3::l2#4 ← phi( scrollup3::@3/(word) scrollup3::l2#1 scrollup3::@4_1/(word~) scrollup3::l2#7 ) + [14] (byte) scrollup3::c#4 ← phi( scrollup3::@3/(byte) scrollup3::c#1 scrollup3::@4_1/(byte) 0 ) + [15] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#4 + [16] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#4 + [17] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) + [18] (word) scrollup3::l2#1 ← ++ (word) scrollup3::l2#4 + [19] (byte) scrollup3::c#1 ← ++ (byte) scrollup3::c#4 to:scrollup3::@3 -scrollup3::@3: scope:[scrollup3] from scrollup3::@2 scrollup3::@4 - [16] (word) scrollup3::l2#2 ← phi( scrollup3::@2/(word~) scrollup3::l2#4 scrollup3::@4/(word) scrollup3::l2#1 ) - [16] (byte) scrollup3::c#2 ← phi( scrollup3::@2/(byte) 0 scrollup3::@4/(byte) scrollup3::c#1 ) - [17] if((byte) scrollup3::c#2<(byte) $28) goto scrollup3::@4 +scrollup3::@3: scope:[scrollup3] from scrollup3::@4 + [20] if((byte) scrollup3::c#1<(byte) $28) goto scrollup3::@4 to:scrollup3::@5 scrollup3::@5: scope:[scrollup3] from scrollup3::@3 - [18] (word) scrollup3::line#1 ← (word) scrollup3::line#2 + (byte) $28 + [21] (word) scrollup3::line#1 ← (word) scrollup3::line#10 + (byte) $28 to:scrollup3::@1 -scrollup3::@4: scope:[scrollup3] from scrollup3::@3 - [19] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#2 - [20] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#2 - [21] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) - [22] (word) scrollup3::l2#1 ← ++ (word) scrollup3::l2#2 - [23] (byte) scrollup3::c#1 ← ++ (byte) scrollup3::c#2 - to:scrollup3::@3 +scrollup3::@1: scope:[scrollup3] from scrollup3::@5 + [22] if((word) scrollup3::line#1<(word)(number) $28*(number) $18) goto scrollup3::@2 + to:scrollup3::@return +scrollup3::@return: scope:[scrollup3] from scrollup3::@1 + [23] return + to:@return scrollup2: scope:[scrollup2] from main::@1 [24] phi() to:scrollup2::@1 @@ -506,29 +549,31 @@ scrollup2::@return: scope:[scrollup2] from scrollup2::@3 to:@return scrollup1: scope:[scrollup1] from main [35] phi() + to:scrollup1::@2 +scrollup1::@2: scope:[scrollup1] from scrollup1 scrollup1::@1 + [36] (word) scrollup1::line#10 ← phi( scrollup1::@1/(word) scrollup1::line#1 scrollup1/(byte) 0 ) + to:scrollup1::@4 +scrollup1::@4: scope:[scrollup1] from scrollup1::@2 scrollup1::@3 + [37] (byte) scrollup1::c#4 ← phi( scrollup1::@3/(byte) scrollup1::c#1 scrollup1::@2/(byte) 0 ) + [38] (word~) scrollup1::$2 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 + [39] (word~) scrollup1::$4 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 + [40] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 + [41] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 + [42] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) + [43] (byte) scrollup1::c#1 ← ++ (byte) scrollup1::c#4 + to:scrollup1::@3 +scrollup1::@3: scope:[scrollup1] from scrollup1::@4 + [44] if((byte) scrollup1::c#1<(byte) $28) goto scrollup1::@4 + to:scrollup1::@5 +scrollup1::@5: scope:[scrollup1] from scrollup1::@3 + [45] (word) scrollup1::line#1 ← (word) scrollup1::line#10 + (byte) $28 to:scrollup1::@1 -scrollup1::@1: scope:[scrollup1] from scrollup1 scrollup1::@4 - [36] (word) scrollup1::line#2 ← phi( scrollup1/(byte) 0 scrollup1::@4/(word) scrollup1::line#1 ) - [37] if((word) scrollup1::line#2<(word)(number) $28*(number) $18) goto scrollup1::@2 +scrollup1::@1: scope:[scrollup1] from scrollup1::@5 + [46] if((word) scrollup1::line#1<(word)(number) $28*(number) $18) goto scrollup1::@2 to:scrollup1::@return scrollup1::@return: scope:[scrollup1] from scrollup1::@1 - [38] return + [47] return to:@return -scrollup1::@2: scope:[scrollup1] from scrollup1::@1 scrollup1::@3 - [39] (byte) scrollup1::c#2 ← phi( scrollup1::@1/(byte) 0 scrollup1::@3/(byte) scrollup1::c#1 ) - [40] if((byte) scrollup1::c#2<(byte) $28) goto scrollup1::@3 - to:scrollup1::@4 -scrollup1::@4: scope:[scrollup1] from scrollup1::@2 - [41] (word) scrollup1::line#1 ← (word) scrollup1::line#2 + (byte) $28 - to:scrollup1::@1 -scrollup1::@3: scope:[scrollup1] from scrollup1::@2 - [42] (word~) scrollup1::$2 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 - [43] (word~) scrollup1::$4 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 - [44] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 - [45] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 - [46] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) - [47] (byte) scrollup1::c#1 ← ++ (byte) scrollup1::c#2 - to:scrollup1::@2 VARIABLE REGISTER WEIGHTS @@ -540,11 +585,11 @@ VARIABLE REGISTER WEIGHTS (byte*~) scrollup1::$5 101.0 (byte*~) scrollup1::$6 202.0 (byte) scrollup1::c -(byte) scrollup1::c#1 202.0 -(byte) scrollup1::c#2 72.14285714285714 +(byte) scrollup1::c#1 151.5 +(byte) scrollup1::c#4 67.33333333333333 (word) scrollup1::line -(word) scrollup1::line#1 22.0 -(word) scrollup1::line#2 23.5 +(word) scrollup1::line#1 16.5 +(word) scrollup1::line#10 24.888888888888886 (void()) scrollup2() (byte) scrollup2::c (byte) scrollup2::c#1 151.5 @@ -564,26 +609,26 @@ VARIABLE REGISTER WEIGHTS (byte*~) scrollup3::$3 101.0 (byte*~) scrollup3::$4 202.0 (byte) scrollup3::c -(byte) scrollup3::c#1 202.0 -(byte) scrollup3::c#2 50.5 +(byte) scrollup3::c#1 151.5 +(byte) scrollup3::c#4 40.4 (word) scrollup3::l2 -(word) scrollup3::l2#1 101.0 -(word) scrollup3::l2#2 83.0 -(word~) scrollup3::l2#4 22.0 +(word) scrollup3::l2#1 67.33333333333333 +(word) scrollup3::l2#4 103.75 +(word~) scrollup3::l2#7 22.0 (word) scrollup3::line -(word) scrollup3::line#1 22.0 -(word) scrollup3::line#2 4.4 +(word) scrollup3::line#1 16.5 +(word) scrollup3::line#10 3.666666666666667 Initial phi equivalence classes -[ scrollup3::line#2 scrollup3::line#1 ] -[ scrollup3::c#2 scrollup3::c#1 ] -[ scrollup3::l2#2 scrollup3::l2#4 scrollup3::l2#1 ] +[ scrollup3::line#10 scrollup3::line#1 ] +[ scrollup3::c#4 scrollup3::c#1 ] +[ scrollup3::l2#4 scrollup3::l2#1 scrollup3::l2#7 ] [ scrollup2::l#4 scrollup2::l#1 ] [ scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 ] [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 ] [ scrollup2::c#2 scrollup2::c#1 ] -[ scrollup1::line#2 scrollup1::line#1 ] -[ scrollup1::c#2 scrollup1::c#1 ] +[ scrollup1::line#10 scrollup1::line#1 ] +[ scrollup1::c#4 scrollup1::c#1 ] Added variable scrollup3::$3 to zero page equivalence class [ scrollup3::$3 ] Added variable scrollup3::$4 to zero page equivalence class [ scrollup3::$4 ] Added variable scrollup1::$2 to zero page equivalence class [ scrollup1::$2 ] @@ -591,30 +636,30 @@ Added variable scrollup1::$4 to zero page equivalence class [ scrollup1::$4 ] Added variable scrollup1::$5 to zero page equivalence class [ scrollup1::$5 ] Added variable scrollup1::$6 to zero page equivalence class [ scrollup1::$6 ] Complete equivalence classes -[ scrollup3::line#2 scrollup3::line#1 ] -[ scrollup3::c#2 scrollup3::c#1 ] -[ scrollup3::l2#2 scrollup3::l2#4 scrollup3::l2#1 ] +[ scrollup3::line#10 scrollup3::line#1 ] +[ scrollup3::c#4 scrollup3::c#1 ] +[ scrollup3::l2#4 scrollup3::l2#1 scrollup3::l2#7 ] [ scrollup2::l#4 scrollup2::l#1 ] [ scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 ] [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 ] [ scrollup2::c#2 scrollup2::c#1 ] -[ scrollup1::line#2 scrollup1::line#1 ] -[ scrollup1::c#2 scrollup1::c#1 ] +[ scrollup1::line#10 scrollup1::line#1 ] +[ scrollup1::c#4 scrollup1::c#1 ] [ scrollup3::$3 ] [ scrollup3::$4 ] [ scrollup1::$2 ] [ scrollup1::$4 ] [ scrollup1::$5 ] [ scrollup1::$6 ] -Allocated zp ZP_WORD:2 [ scrollup3::line#2 scrollup3::line#1 ] -Allocated zp ZP_BYTE:4 [ scrollup3::c#2 scrollup3::c#1 ] -Allocated zp ZP_WORD:5 [ scrollup3::l2#2 scrollup3::l2#4 scrollup3::l2#1 ] +Allocated zp ZP_WORD:2 [ scrollup3::line#10 scrollup3::line#1 ] +Allocated zp ZP_BYTE:4 [ scrollup3::c#4 scrollup3::c#1 ] +Allocated zp ZP_WORD:5 [ scrollup3::l2#4 scrollup3::l2#1 scrollup3::l2#7 ] Allocated zp ZP_BYTE:7 [ scrollup2::l#4 scrollup2::l#1 ] Allocated zp ZP_WORD:8 [ scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 ] Allocated zp ZP_WORD:10 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 ] Allocated zp ZP_BYTE:12 [ scrollup2::c#2 scrollup2::c#1 ] -Allocated zp ZP_WORD:13 [ scrollup1::line#2 scrollup1::line#1 ] -Allocated zp ZP_BYTE:15 [ scrollup1::c#2 scrollup1::c#1 ] +Allocated zp ZP_WORD:13 [ scrollup1::line#10 scrollup1::line#1 ] +Allocated zp ZP_BYTE:15 [ scrollup1::c#4 scrollup1::c#1 ] Allocated zp ZP_WORD:16 [ scrollup3::$3 ] Allocated zp ZP_WORD:18 [ scrollup3::$4 ] Allocated zp ZP_WORD:20 [ scrollup1::$2 ] @@ -685,68 +730,43 @@ scrollup3: { .label line = 2 .label _3 = $10 .label _4 = $12 - // [12] phi from scrollup3 to scrollup3::@1 [phi:scrollup3->scrollup3::@1] - b1_from_scrollup3: - // [12] phi (word) scrollup3::line#2 = (byte) 0 [phi:scrollup3->scrollup3::@1#0] -- vwuz1=vbuc1 + // [12] phi from scrollup3 to scrollup3::@2 [phi:scrollup3->scrollup3::@2] + b2_from_scrollup3: + // [12] phi (word) scrollup3::line#10 = (byte) 0 [phi:scrollup3->scrollup3::@2#0] -- vwuz1=vbuc1 lda #<0 sta line lda #>0 sta line+1 - jmp b1 - // scrollup3::@1 - b1: - // [13] if((word) scrollup3::line#2<(word)(number) $28*(number) $18) goto scrollup3::@2 -- vwuz1_lt_vwuc1_then_la1 - lda line+1 - cmp #>$28*$18 - bcc b2 - bne !+ - lda line - cmp #<$28*$18 - bcc b2 - !: - jmp breturn - // scrollup3::@return - breturn: - // [14] return - rts + jmp b2 + // [12] phi from scrollup3::@1 to scrollup3::@2 [phi:scrollup3::@1->scrollup3::@2] + b2_from_b1: + // [12] phi (word) scrollup3::line#10 = (word) scrollup3::line#1 [phi:scrollup3::@1->scrollup3::@2#0] -- register_copy + jmp b2 // scrollup3::@2 b2: - // [15] (word~) scrollup3::l2#4 ← (word) scrollup3::line#2 -- vwuz1=vwuz2 + jmp b4_1 + // scrollup3::@4_1 + b4_1: + // [13] (word~) scrollup3::l2#7 ← (word) scrollup3::line#10 -- vwuz1=vwuz2 lda line sta l2 lda line+1 sta l2+1 - // [16] phi from scrollup3::@2 to scrollup3::@3 [phi:scrollup3::@2->scrollup3::@3] - b3_from_b2: - // [16] phi (word) scrollup3::l2#2 = (word~) scrollup3::l2#4 [phi:scrollup3::@2->scrollup3::@3#0] -- register_copy - // [16] phi (byte) scrollup3::c#2 = (byte) 0 [phi:scrollup3::@2->scrollup3::@3#1] -- vbuz1=vbuc1 + // [14] phi from scrollup3::@4_1 to scrollup3::@4 [phi:scrollup3::@4_1->scrollup3::@4] + b4_from_b4_1: + // [14] phi (word) scrollup3::l2#4 = (word~) scrollup3::l2#7 [phi:scrollup3::@4_1->scrollup3::@4#0] -- register_copy + // [14] phi (byte) scrollup3::c#4 = (byte) 0 [phi:scrollup3::@4_1->scrollup3::@4#1] -- vbuz1=vbuc1 lda #0 sta c - jmp b3 - // scrollup3::@3 - b3: - // [17] if((byte) scrollup3::c#2<(byte) $28) goto scrollup3::@4 -- vbuz1_lt_vbuc1_then_la1 - lda c - cmp #$28 - bcc b4 - jmp b5 - // scrollup3::@5 - b5: - // [18] (word) scrollup3::line#1 ← (word) scrollup3::line#2 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - // [12] phi from scrollup3::@5 to scrollup3::@1 [phi:scrollup3::@5->scrollup3::@1] - b1_from_b5: - // [12] phi (word) scrollup3::line#2 = (word) scrollup3::line#1 [phi:scrollup3::@5->scrollup3::@1#0] -- register_copy - jmp b1 + jmp b4 + // [14] phi from scrollup3::@3 to scrollup3::@4 [phi:scrollup3::@3->scrollup3::@4] + b4_from_b3: + // [14] phi (word) scrollup3::l2#4 = (word) scrollup3::l2#1 [phi:scrollup3::@3->scrollup3::@4#0] -- register_copy + // [14] phi (byte) scrollup3::c#4 = (byte) scrollup3::c#1 [phi:scrollup3::@3->scrollup3::@4#1] -- register_copy + jmp b4 // scrollup3::@4 b4: - // [19] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#2 -- pbuz1=pbuc1_plus_vwuz2 + // [15] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#4 -- pbuz1=pbuc1_plus_vwuz2 lda l2 clc adc #screen+$28 sta _3+1 - // [20] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#2 -- pbuz1=pbuc1_plus_vwuz2 + // [16] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#4 -- pbuz1=pbuc1_plus_vwuz2 lda l2 clc adc #screen sta _4+1 - // [21] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) -- _deref_pbuz1=_deref_pbuz2 + // [17] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (_3),y ldy #0 sta (_4),y - // [22] (word) scrollup3::l2#1 ← ++ (word) scrollup3::l2#2 -- vwuz1=_inc_vwuz1 + // [18] (word) scrollup3::l2#1 ← ++ (word) scrollup3::l2#4 -- vwuz1=_inc_vwuz1 inc l2 bne !+ inc l2+1 !: - // [23] (byte) scrollup3::c#1 ← ++ (byte) scrollup3::c#2 -- vbuz1=_inc_vbuz1 + // [19] (byte) scrollup3::c#1 ← ++ (byte) scrollup3::c#4 -- vbuz1=_inc_vbuz1 inc c - // [16] phi from scrollup3::@4 to scrollup3::@3 [phi:scrollup3::@4->scrollup3::@3] - b3_from_b4: - // [16] phi (word) scrollup3::l2#2 = (word) scrollup3::l2#1 [phi:scrollup3::@4->scrollup3::@3#0] -- register_copy - // [16] phi (byte) scrollup3::c#2 = (byte) scrollup3::c#1 [phi:scrollup3::@4->scrollup3::@3#1] -- register_copy jmp b3 + // scrollup3::@3 + b3: + // [20] if((byte) scrollup3::c#1<(byte) $28) goto scrollup3::@4 -- vbuz1_lt_vbuc1_then_la1 + lda c + cmp #$28 + bcc b4_from_b3 + jmp b5 + // scrollup3::@5 + b5: + // [21] (word) scrollup3::line#1 ← (word) scrollup3::line#10 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: + jmp b1 + // scrollup3::@1 + b1: + // [22] if((word) scrollup3::line#1<(word)(number) $28*(number) $18) goto scrollup3::@2 -- vwuz1_lt_vwuc1_then_la1 + lda line+1 + cmp #>$28*$18 + bcc b2_from_b1 + bne !+ + lda line + cmp #<$28*$18 + bcc b2_from_b1 + !: + jmp breturn + // scrollup3::@return + breturn: + // [23] return + rts } // scrollup2 scrollup2: { @@ -870,17 +920,93 @@ scrollup1: { .label line = $d .label _5 = $18 .label _6 = $1a - // [36] phi from scrollup1 to scrollup1::@1 [phi:scrollup1->scrollup1::@1] - b1_from_scrollup1: - // [36] phi (word) scrollup1::line#2 = (byte) 0 [phi:scrollup1->scrollup1::@1#0] -- vwuz1=vbuc1 + // [36] phi from scrollup1 to scrollup1::@2 [phi:scrollup1->scrollup1::@2] + b2_from_scrollup1: + // [36] phi (word) scrollup1::line#10 = (byte) 0 [phi:scrollup1->scrollup1::@2#0] -- vwuz1=vbuc1 lda #<0 sta line lda #>0 sta line+1 + jmp b2 + // [36] phi from scrollup1::@1 to scrollup1::@2 [phi:scrollup1::@1->scrollup1::@2] + b2_from_b1: + // [36] phi (word) scrollup1::line#10 = (word) scrollup1::line#1 [phi:scrollup1::@1->scrollup1::@2#0] -- register_copy + jmp b2 + // scrollup1::@2 + b2: + // [37] phi from scrollup1::@2 to scrollup1::@4 [phi:scrollup1::@2->scrollup1::@4] + b4_from_b2: + // [37] phi (byte) scrollup1::c#4 = (byte) 0 [phi:scrollup1::@2->scrollup1::@4#0] -- vbuz1=vbuc1 + lda #0 + sta c + jmp b4 + // [37] phi from scrollup1::@3 to scrollup1::@4 [phi:scrollup1::@3->scrollup1::@4] + b4_from_b3: + // [37] phi (byte) scrollup1::c#4 = (byte) scrollup1::c#1 [phi:scrollup1::@3->scrollup1::@4#0] -- register_copy + jmp b4 + // scrollup1::@4 + b4: + // [38] (word~) scrollup1::$2 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 -- vwuz1=vwuz2_plus_vbuz3 + lda c + clc + adc line + sta _2 + lda #0 + adc line+1 + sta _2+1 + // [39] (word~) scrollup1::$4 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 -- vwuz1=vwuz2_plus_vbuz3 + lda c + clc + adc line + sta _4 + lda #0 + adc line+1 + sta _4+1 + // [40] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 -- pbuz1=pbuc1_plus_vwuz2 + lda _4 + clc + adc #screen+$28 + sta _5+1 + // [41] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 -- pbuz1=pbuc1_plus_vwuz2 + lda _2 + clc + adc #screen + sta _6+1 + // [42] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (_5),y + ldy #0 + sta (_6),y + // [43] (byte) scrollup1::c#1 ← ++ (byte) scrollup1::c#4 -- vbuz1=_inc_vbuz1 + inc c + jmp b3 + // scrollup1::@3 + b3: + // [44] if((byte) scrollup1::c#1<(byte) $28) goto scrollup1::@4 -- vbuz1_lt_vbuc1_then_la1 + lda c + cmp #$28 + bcc b4_from_b3 + jmp b5 + // scrollup1::@5 + b5: + // [45] (word) scrollup1::line#1 ← (word) scrollup1::line#10 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: jmp b1 // scrollup1::@1 b1: - // [37] if((word) scrollup1::line#2<(word)(number) $28*(number) $18) goto scrollup1::@2 -- vwuz1_lt_vwuc1_then_la1 + // [46] if((word) scrollup1::line#1<(word)(number) $28*(number) $18) goto scrollup1::@2 -- vwuz1_lt_vwuc1_then_la1 lda line+1 cmp #>$28*$18 bcc b2_from_b1 @@ -892,129 +1018,57 @@ scrollup1: { jmp breturn // scrollup1::@return breturn: - // [38] return + // [47] return rts - // [39] phi from scrollup1::@1 to scrollup1::@2 [phi:scrollup1::@1->scrollup1::@2] - b2_from_b1: - // [39] phi (byte) scrollup1::c#2 = (byte) 0 [phi:scrollup1::@1->scrollup1::@2#0] -- vbuz1=vbuc1 - lda #0 - sta c - jmp b2 - // scrollup1::@2 - b2: - // [40] if((byte) scrollup1::c#2<(byte) $28) goto scrollup1::@3 -- vbuz1_lt_vbuc1_then_la1 - lda c - cmp #$28 - bcc b3 - jmp b4 - // scrollup1::@4 - b4: - // [41] (word) scrollup1::line#1 ← (word) scrollup1::line#2 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - // [36] phi from scrollup1::@4 to scrollup1::@1 [phi:scrollup1::@4->scrollup1::@1] - b1_from_b4: - // [36] phi (word) scrollup1::line#2 = (word) scrollup1::line#1 [phi:scrollup1::@4->scrollup1::@1#0] -- register_copy - jmp b1 - // scrollup1::@3 - b3: - // [42] (word~) scrollup1::$2 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 -- vwuz1=vwuz2_plus_vbuz3 - lda c - clc - adc line - sta _2 - lda #0 - adc line+1 - sta _2+1 - // [43] (word~) scrollup1::$4 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 -- vwuz1=vwuz2_plus_vbuz3 - lda c - clc - adc line - sta _4 - lda #0 - adc line+1 - sta _4+1 - // [44] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 -- pbuz1=pbuc1_plus_vwuz2 - lda _4 - clc - adc #screen+$28 - sta _5+1 - // [45] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 -- pbuz1=pbuc1_plus_vwuz2 - lda _2 - clc - adc #screen - sta _6+1 - // [46] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (_5),y - ldy #0 - sta (_6),y - // [47] (byte) scrollup1::c#1 ← ++ (byte) scrollup1::c#2 -- vbuz1=_inc_vbuz1 - inc c - // [39] phi from scrollup1::@3 to scrollup1::@2 [phi:scrollup1::@3->scrollup1::@2] - b2_from_b3: - // [39] phi (byte) scrollup1::c#2 = (byte) scrollup1::c#1 [phi:scrollup1::@3->scrollup1::@2#0] -- register_copy - jmp b2 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [13] if((word) scrollup3::line#2<(word)(number) $28*(number) $18) goto scrollup3::@2 [ scrollup3::line#2 ] ( main:2::scrollup3:9 [ scrollup3::line#2 ] ) always clobbers reg byte a -Statement [15] (word~) scrollup3::l2#4 ← (word) scrollup3::line#2 [ scrollup3::line#2 scrollup3::l2#4 ] ( main:2::scrollup3:9 [ scrollup3::line#2 scrollup3::l2#4 ] ) always clobbers reg byte a -Statement [18] (word) scrollup3::line#1 ← (word) scrollup3::line#2 + (byte) $28 [ scrollup3::line#1 ] ( main:2::scrollup3:9 [ scrollup3::line#1 ] ) always clobbers reg byte a -Statement [19] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#2 [ scrollup3::line#2 scrollup3::c#2 scrollup3::l2#2 scrollup3::$3 ] ( main:2::scrollup3:9 [ scrollup3::line#2 scrollup3::c#2 scrollup3::l2#2 scrollup3::$3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ scrollup3::c#2 scrollup3::c#1 ] -Statement [20] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#2 [ scrollup3::line#2 scrollup3::c#2 scrollup3::l2#2 scrollup3::$3 scrollup3::$4 ] ( main:2::scrollup3:9 [ scrollup3::line#2 scrollup3::c#2 scrollup3::l2#2 scrollup3::$3 scrollup3::$4 ] ) always clobbers reg byte a -Statement [21] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) [ scrollup3::line#2 scrollup3::c#2 scrollup3::l2#2 ] ( main:2::scrollup3:9 [ scrollup3::line#2 scrollup3::c#2 scrollup3::l2#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ scrollup3::c#2 scrollup3::c#1 ] +Statement [13] (word~) scrollup3::l2#7 ← (word) scrollup3::line#10 [ scrollup3::line#10 scrollup3::l2#7 ] ( main:2::scrollup3:9 [ scrollup3::line#10 scrollup3::l2#7 ] ) always clobbers reg byte a +Statement [15] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#4 [ scrollup3::line#10 scrollup3::c#4 scrollup3::l2#4 scrollup3::$3 ] ( main:2::scrollup3:9 [ scrollup3::line#10 scrollup3::c#4 scrollup3::l2#4 scrollup3::$3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ scrollup3::c#4 scrollup3::c#1 ] +Statement [16] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#4 [ scrollup3::line#10 scrollup3::c#4 scrollup3::l2#4 scrollup3::$3 scrollup3::$4 ] ( main:2::scrollup3:9 [ scrollup3::line#10 scrollup3::c#4 scrollup3::l2#4 scrollup3::$3 scrollup3::$4 ] ) always clobbers reg byte a +Statement [17] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) [ scrollup3::line#10 scrollup3::c#4 scrollup3::l2#4 ] ( main:2::scrollup3:9 [ scrollup3::line#10 scrollup3::c#4 scrollup3::l2#4 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ scrollup3::c#4 scrollup3::c#1 ] +Statement [21] (word) scrollup3::line#1 ← (word) scrollup3::line#10 + (byte) $28 [ scrollup3::line#1 ] ( main:2::scrollup3:9 [ scrollup3::line#1 ] ) always clobbers reg byte a +Statement [22] if((word) scrollup3::line#1<(word)(number) $28*(number) $18) goto scrollup3::@2 [ scrollup3::line#1 ] ( main:2::scrollup3:9 [ scrollup3::line#1 ] ) always clobbers reg byte a Statement [27] *((byte*) scrollup2::line1#2) ← *((byte*) scrollup2::line2#2) [ scrollup2::l#4 scrollup2::line2#2 scrollup2::line1#2 scrollup2::c#2 ] ( main:2::scrollup2:7 [ scrollup2::l#4 scrollup2::line2#2 scrollup2::line1#2 scrollup2::c#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ scrollup2::l#4 scrollup2::l#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ scrollup2::l#4 scrollup2::l#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ scrollup2::c#2 scrollup2::c#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:12 [ scrollup2::c#2 scrollup2::c#1 ] -Statement [37] if((word) scrollup1::line#2<(word)(number) $28*(number) $18) goto scrollup1::@2 [ scrollup1::line#2 ] ( main:2::scrollup1:5 [ scrollup1::line#2 ] ) always clobbers reg byte a -Statement [41] (word) scrollup1::line#1 ← (word) scrollup1::line#2 + (byte) $28 [ scrollup1::line#1 ] ( main:2::scrollup1:5 [ scrollup1::line#1 ] ) always clobbers reg byte a -Statement [42] (word~) scrollup1::$2 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$2 ] ( main:2::scrollup1:5 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ scrollup1::c#2 scrollup1::c#1 ] -Statement [43] (word~) scrollup1::$4 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$2 scrollup1::$4 ] ( main:2::scrollup1:5 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$2 scrollup1::$4 ] ) always clobbers reg byte a -Statement [44] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$2 scrollup1::$5 ] ( main:2::scrollup1:5 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$2 scrollup1::$5 ] ) always clobbers reg byte a -Statement [45] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$5 scrollup1::$6 ] ( main:2::scrollup1:5 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$5 scrollup1::$6 ] ) always clobbers reg byte a -Statement [46] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) [ scrollup1::line#2 scrollup1::c#2 ] ( main:2::scrollup1:5 [ scrollup1::line#2 scrollup1::c#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:15 [ scrollup1::c#2 scrollup1::c#1 ] -Statement [13] if((word) scrollup3::line#2<(word)(number) $28*(number) $18) goto scrollup3::@2 [ scrollup3::line#2 ] ( main:2::scrollup3:9 [ scrollup3::line#2 ] ) always clobbers reg byte a -Statement [15] (word~) scrollup3::l2#4 ← (word) scrollup3::line#2 [ scrollup3::line#2 scrollup3::l2#4 ] ( main:2::scrollup3:9 [ scrollup3::line#2 scrollup3::l2#4 ] ) always clobbers reg byte a -Statement [18] (word) scrollup3::line#1 ← (word) scrollup3::line#2 + (byte) $28 [ scrollup3::line#1 ] ( main:2::scrollup3:9 [ scrollup3::line#1 ] ) always clobbers reg byte a -Statement [19] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#2 [ scrollup3::line#2 scrollup3::c#2 scrollup3::l2#2 scrollup3::$3 ] ( main:2::scrollup3:9 [ scrollup3::line#2 scrollup3::c#2 scrollup3::l2#2 scrollup3::$3 ] ) always clobbers reg byte a -Statement [20] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#2 [ scrollup3::line#2 scrollup3::c#2 scrollup3::l2#2 scrollup3::$3 scrollup3::$4 ] ( main:2::scrollup3:9 [ scrollup3::line#2 scrollup3::c#2 scrollup3::l2#2 scrollup3::$3 scrollup3::$4 ] ) always clobbers reg byte a -Statement [21] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) [ scrollup3::line#2 scrollup3::c#2 scrollup3::l2#2 ] ( main:2::scrollup3:9 [ scrollup3::line#2 scrollup3::c#2 scrollup3::l2#2 ] ) always clobbers reg byte a reg byte y +Statement [38] (word~) scrollup1::$2 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$2 ] ( main:2::scrollup1:5 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ scrollup1::c#4 scrollup1::c#1 ] +Statement [39] (word~) scrollup1::$4 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$2 scrollup1::$4 ] ( main:2::scrollup1:5 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$2 scrollup1::$4 ] ) always clobbers reg byte a +Statement [40] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$2 scrollup1::$5 ] ( main:2::scrollup1:5 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$2 scrollup1::$5 ] ) always clobbers reg byte a +Statement [41] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$5 scrollup1::$6 ] ( main:2::scrollup1:5 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$5 scrollup1::$6 ] ) always clobbers reg byte a +Statement [42] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) [ scrollup1::line#10 scrollup1::c#4 ] ( main:2::scrollup1:5 [ scrollup1::line#10 scrollup1::c#4 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:15 [ scrollup1::c#4 scrollup1::c#1 ] +Statement [45] (word) scrollup1::line#1 ← (word) scrollup1::line#10 + (byte) $28 [ scrollup1::line#1 ] ( main:2::scrollup1:5 [ scrollup1::line#1 ] ) always clobbers reg byte a +Statement [46] if((word) scrollup1::line#1<(word)(number) $28*(number) $18) goto scrollup1::@2 [ scrollup1::line#1 ] ( main:2::scrollup1:5 [ scrollup1::line#1 ] ) always clobbers reg byte a +Statement [13] (word~) scrollup3::l2#7 ← (word) scrollup3::line#10 [ scrollup3::line#10 scrollup3::l2#7 ] ( main:2::scrollup3:9 [ scrollup3::line#10 scrollup3::l2#7 ] ) always clobbers reg byte a +Statement [15] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#4 [ scrollup3::line#10 scrollup3::c#4 scrollup3::l2#4 scrollup3::$3 ] ( main:2::scrollup3:9 [ scrollup3::line#10 scrollup3::c#4 scrollup3::l2#4 scrollup3::$3 ] ) always clobbers reg byte a +Statement [16] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#4 [ scrollup3::line#10 scrollup3::c#4 scrollup3::l2#4 scrollup3::$3 scrollup3::$4 ] ( main:2::scrollup3:9 [ scrollup3::line#10 scrollup3::c#4 scrollup3::l2#4 scrollup3::$3 scrollup3::$4 ] ) always clobbers reg byte a +Statement [17] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) [ scrollup3::line#10 scrollup3::c#4 scrollup3::l2#4 ] ( main:2::scrollup3:9 [ scrollup3::line#10 scrollup3::c#4 scrollup3::l2#4 ] ) always clobbers reg byte a reg byte y +Statement [21] (word) scrollup3::line#1 ← (word) scrollup3::line#10 + (byte) $28 [ scrollup3::line#1 ] ( main:2::scrollup3:9 [ scrollup3::line#1 ] ) always clobbers reg byte a +Statement [22] if((word) scrollup3::line#1<(word)(number) $28*(number) $18) goto scrollup3::@2 [ scrollup3::line#1 ] ( main:2::scrollup3:9 [ scrollup3::line#1 ] ) always clobbers reg byte a Statement [27] *((byte*) scrollup2::line1#2) ← *((byte*) scrollup2::line2#2) [ scrollup2::l#4 scrollup2::line2#2 scrollup2::line1#2 scrollup2::c#2 ] ( main:2::scrollup2:7 [ scrollup2::l#4 scrollup2::line2#2 scrollup2::line1#2 scrollup2::c#2 ] ) always clobbers reg byte a reg byte y -Statement [37] if((word) scrollup1::line#2<(word)(number) $28*(number) $18) goto scrollup1::@2 [ scrollup1::line#2 ] ( main:2::scrollup1:5 [ scrollup1::line#2 ] ) always clobbers reg byte a -Statement [41] (word) scrollup1::line#1 ← (word) scrollup1::line#2 + (byte) $28 [ scrollup1::line#1 ] ( main:2::scrollup1:5 [ scrollup1::line#1 ] ) always clobbers reg byte a -Statement [42] (word~) scrollup1::$2 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$2 ] ( main:2::scrollup1:5 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$2 ] ) always clobbers reg byte a -Statement [43] (word~) scrollup1::$4 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$2 scrollup1::$4 ] ( main:2::scrollup1:5 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$2 scrollup1::$4 ] ) always clobbers reg byte a -Statement [44] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$2 scrollup1::$5 ] ( main:2::scrollup1:5 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$2 scrollup1::$5 ] ) always clobbers reg byte a -Statement [45] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$5 scrollup1::$6 ] ( main:2::scrollup1:5 [ scrollup1::line#2 scrollup1::c#2 scrollup1::$5 scrollup1::$6 ] ) always clobbers reg byte a -Statement [46] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) [ scrollup1::line#2 scrollup1::c#2 ] ( main:2::scrollup1:5 [ scrollup1::line#2 scrollup1::c#2 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_WORD:2 [ scrollup3::line#2 scrollup3::line#1 ] : zp ZP_WORD:2 , -Potential registers zp ZP_BYTE:4 [ scrollup3::c#2 scrollup3::c#1 ] : zp ZP_BYTE:4 , reg byte x , -Potential registers zp ZP_WORD:5 [ scrollup3::l2#2 scrollup3::l2#4 scrollup3::l2#1 ] : zp ZP_WORD:5 , +Statement [38] (word~) scrollup1::$2 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$2 ] ( main:2::scrollup1:5 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$2 ] ) always clobbers reg byte a +Statement [39] (word~) scrollup1::$4 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$2 scrollup1::$4 ] ( main:2::scrollup1:5 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$2 scrollup1::$4 ] ) always clobbers reg byte a +Statement [40] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$2 scrollup1::$5 ] ( main:2::scrollup1:5 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$2 scrollup1::$5 ] ) always clobbers reg byte a +Statement [41] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$5 scrollup1::$6 ] ( main:2::scrollup1:5 [ scrollup1::line#10 scrollup1::c#4 scrollup1::$5 scrollup1::$6 ] ) always clobbers reg byte a +Statement [42] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) [ scrollup1::line#10 scrollup1::c#4 ] ( main:2::scrollup1:5 [ scrollup1::line#10 scrollup1::c#4 ] ) always clobbers reg byte a reg byte y +Statement [45] (word) scrollup1::line#1 ← (word) scrollup1::line#10 + (byte) $28 [ scrollup1::line#1 ] ( main:2::scrollup1:5 [ scrollup1::line#1 ] ) always clobbers reg byte a +Statement [46] if((word) scrollup1::line#1<(word)(number) $28*(number) $18) goto scrollup1::@2 [ scrollup1::line#1 ] ( main:2::scrollup1:5 [ scrollup1::line#1 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ scrollup3::line#10 scrollup3::line#1 ] : zp ZP_WORD:2 , +Potential registers zp ZP_BYTE:4 [ scrollup3::c#4 scrollup3::c#1 ] : zp ZP_BYTE:4 , reg byte x , +Potential registers zp ZP_WORD:5 [ scrollup3::l2#4 scrollup3::l2#1 scrollup3::l2#7 ] : zp ZP_WORD:5 , Potential registers zp ZP_BYTE:7 [ scrollup2::l#4 scrollup2::l#1 ] : zp ZP_BYTE:7 , reg byte x , Potential registers zp ZP_WORD:8 [ scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 ] : zp ZP_WORD:8 , Potential registers zp ZP_WORD:10 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 ] : zp ZP_WORD:10 , Potential registers zp ZP_BYTE:12 [ scrollup2::c#2 scrollup2::c#1 ] : zp ZP_BYTE:12 , reg byte x , -Potential registers zp ZP_WORD:13 [ scrollup1::line#2 scrollup1::line#1 ] : zp ZP_WORD:13 , -Potential registers zp ZP_BYTE:15 [ scrollup1::c#2 scrollup1::c#1 ] : zp ZP_BYTE:15 , reg byte x , +Potential registers zp ZP_WORD:13 [ scrollup1::line#10 scrollup1::line#1 ] : zp ZP_WORD:13 , +Potential registers zp ZP_BYTE:15 [ scrollup1::c#4 scrollup1::c#1 ] : zp ZP_BYTE:15 , reg byte x , Potential registers zp ZP_WORD:16 [ scrollup3::$3 ] : zp ZP_WORD:16 , Potential registers zp ZP_WORD:18 [ scrollup3::$4 ] : zp ZP_WORD:18 , Potential registers zp ZP_WORD:20 [ scrollup1::$2 ] : zp ZP_WORD:20 , @@ -1023,31 +1077,31 @@ Potential registers zp ZP_WORD:24 [ scrollup1::$5 ] : zp ZP_WORD:24 , Potential registers zp ZP_WORD:26 [ scrollup1::$6 ] : zp ZP_WORD:26 , REGISTER UPLIFT SCOPES -Uplift Scope [scrollup1] 274.14: zp ZP_BYTE:15 [ scrollup1::c#2 scrollup1::c#1 ] 202: zp ZP_WORD:22 [ scrollup1::$4 ] 202: zp ZP_WORD:26 [ scrollup1::$6 ] 101: zp ZP_WORD:24 [ scrollup1::$5 ] 67.33: zp ZP_WORD:20 [ scrollup1::$2 ] 45.5: zp ZP_WORD:13 [ scrollup1::line#2 scrollup1::line#1 ] -Uplift Scope [scrollup3] 252.5: zp ZP_BYTE:4 [ scrollup3::c#2 scrollup3::c#1 ] 206: zp ZP_WORD:5 [ scrollup3::l2#2 scrollup3::l2#4 scrollup3::l2#1 ] 202: zp ZP_WORD:18 [ scrollup3::$4 ] 101: zp ZP_WORD:16 [ scrollup3::$3 ] 26.4: zp ZP_WORD:2 [ scrollup3::line#2 scrollup3::line#1 ] +Uplift Scope [scrollup1] 218.83: zp ZP_BYTE:15 [ scrollup1::c#4 scrollup1::c#1 ] 202: zp ZP_WORD:22 [ scrollup1::$4 ] 202: zp ZP_WORD:26 [ scrollup1::$6 ] 101: zp ZP_WORD:24 [ scrollup1::$5 ] 67.33: zp ZP_WORD:20 [ scrollup1::$2 ] 41.39: zp ZP_WORD:13 [ scrollup1::line#10 scrollup1::line#1 ] +Uplift Scope [scrollup3] 202: zp ZP_WORD:18 [ scrollup3::$4 ] 193.08: zp ZP_WORD:5 [ scrollup3::l2#4 scrollup3::l2#1 scrollup3::l2#7 ] 191.9: zp ZP_BYTE:4 [ scrollup3::c#4 scrollup3::c#1 ] 101: zp ZP_WORD:16 [ scrollup3::$3 ] 20.17: zp ZP_WORD:2 [ scrollup3::line#10 scrollup3::line#1 ] Uplift Scope [scrollup2] 214.5: zp ZP_WORD:10 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 ] 202: zp ZP_BYTE:12 [ scrollup2::c#2 scrollup2::c#1 ] 169.27: zp ZP_WORD:8 [ scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 ] 19.64: zp ZP_BYTE:7 [ scrollup2::l#4 scrollup2::l#1 ] Uplift Scope [main] Uplift Scope [] -Uplifting [scrollup1] best 27978 combination reg byte x [ scrollup1::c#2 scrollup1::c#1 ] zp ZP_WORD:22 [ scrollup1::$4 ] zp ZP_WORD:26 [ scrollup1::$6 ] zp ZP_WORD:24 [ scrollup1::$5 ] zp ZP_WORD:20 [ scrollup1::$2 ] zp ZP_WORD:13 [ scrollup1::line#2 scrollup1::line#1 ] -Uplifting [scrollup3] best 27078 combination reg byte x [ scrollup3::c#2 scrollup3::c#1 ] zp ZP_WORD:5 [ scrollup3::l2#2 scrollup3::l2#4 scrollup3::l2#1 ] zp ZP_WORD:18 [ scrollup3::$4 ] zp ZP_WORD:16 [ scrollup3::$3 ] zp ZP_WORD:2 [ scrollup3::line#2 scrollup3::line#1 ] -Uplifting [scrollup2] best 26178 combination zp ZP_WORD:10 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 ] reg byte x [ scrollup2::c#2 scrollup2::c#1 ] zp ZP_WORD:8 [ scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 ] zp ZP_BYTE:7 [ scrollup2::l#4 scrollup2::l#1 ] -Uplifting [main] best 26178 combination -Uplifting [] best 26178 combination +Uplifting [scrollup1] best 28668 combination reg byte x [ scrollup1::c#4 scrollup1::c#1 ] zp ZP_WORD:22 [ scrollup1::$4 ] zp ZP_WORD:26 [ scrollup1::$6 ] zp ZP_WORD:24 [ scrollup1::$5 ] zp ZP_WORD:20 [ scrollup1::$2 ] zp ZP_WORD:13 [ scrollup1::line#10 scrollup1::line#1 ] +Uplifting [scrollup3] best 27768 combination zp ZP_WORD:18 [ scrollup3::$4 ] zp ZP_WORD:5 [ scrollup3::l2#4 scrollup3::l2#1 scrollup3::l2#7 ] reg byte x [ scrollup3::c#4 scrollup3::c#1 ] zp ZP_WORD:16 [ scrollup3::$3 ] zp ZP_WORD:2 [ scrollup3::line#10 scrollup3::line#1 ] +Uplifting [scrollup2] best 26868 combination zp ZP_WORD:10 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 ] reg byte x [ scrollup2::c#2 scrollup2::c#1 ] zp ZP_WORD:8 [ scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 ] zp ZP_BYTE:7 [ scrollup2::l#4 scrollup2::l#1 ] +Uplifting [main] best 26868 combination +Uplifting [] best 26868 combination Attempting to uplift remaining variables inzp ZP_BYTE:7 [ scrollup2::l#4 scrollup2::l#1 ] -Uplifting [scrollup2] best 26178 combination zp ZP_BYTE:7 [ scrollup2::l#4 scrollup2::l#1 ] +Uplifting [scrollup2] best 26868 combination zp ZP_BYTE:7 [ scrollup2::l#4 scrollup2::l#1 ] Coalescing zero page register [ zp ZP_WORD:20 [ scrollup1::$2 ] ] with [ zp ZP_WORD:26 [ scrollup1::$6 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:22 [ scrollup1::$4 ] ] with [ zp ZP_WORD:24 [ scrollup1::$5 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:8 [ scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 ] ] with [ zp ZP_WORD:2 [ scrollup3::line#2 scrollup3::line#1 ] ] -Coalescing zero page register [ zp ZP_WORD:10 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 ] ] with [ zp ZP_WORD:5 [ scrollup3::l2#2 scrollup3::l2#4 scrollup3::l2#1 ] ] -Coalescing zero page register [ zp ZP_WORD:16 [ scrollup3::$3 ] ] with [ zp ZP_WORD:13 [ scrollup1::line#2 scrollup1::line#1 ] ] +Coalescing zero page register [ zp ZP_WORD:8 [ scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 ] ] with [ zp ZP_WORD:2 [ scrollup3::line#10 scrollup3::line#1 ] ] +Coalescing zero page register [ zp ZP_WORD:10 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 ] ] with [ zp ZP_WORD:5 [ scrollup3::l2#4 scrollup3::l2#1 scrollup3::l2#7 ] ] +Coalescing zero page register [ zp ZP_WORD:16 [ scrollup3::$3 ] ] with [ zp ZP_WORD:13 [ scrollup1::line#10 scrollup1::line#1 ] ] Coalescing zero page register [ zp ZP_WORD:20 [ scrollup1::$2 scrollup1::$6 ] ] with [ zp ZP_WORD:18 [ scrollup3::$4 ] ] -Coalescing zero page register [ zp ZP_WORD:22 [ scrollup1::$4 scrollup1::$5 ] ] with [ zp ZP_WORD:8 [ scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 scrollup3::line#2 scrollup3::line#1 ] ] +Coalescing zero page register [ zp ZP_WORD:22 [ scrollup1::$4 scrollup1::$5 ] ] with [ zp ZP_WORD:8 [ scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 scrollup3::line#10 scrollup3::line#1 ] ] Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:2 [ scrollup2::l#4 scrollup2::l#1 ] -Allocated (was zp ZP_WORD:10) zp ZP_WORD:3 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 scrollup3::l2#2 scrollup3::l2#4 scrollup3::l2#1 ] -Allocated (was zp ZP_WORD:16) zp ZP_WORD:5 [ scrollup3::$3 scrollup1::line#2 scrollup1::line#1 ] +Allocated (was zp ZP_WORD:10) zp ZP_WORD:3 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 scrollup3::l2#4 scrollup3::l2#1 scrollup3::l2#7 ] +Allocated (was zp ZP_WORD:16) zp ZP_WORD:5 [ scrollup3::$3 scrollup1::line#10 scrollup1::line#1 ] Allocated (was zp ZP_WORD:20) zp ZP_WORD:7 [ scrollup1::$2 scrollup1::$6 scrollup3::$4 ] -Allocated (was zp ZP_WORD:22) zp ZP_WORD:9 [ scrollup1::$4 scrollup1::$5 scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 scrollup3::line#2 scrollup3::line#1 ] +Allocated (was zp ZP_WORD:22) zp ZP_WORD:9 [ scrollup1::$4 scrollup1::$5 scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 scrollup3::line#10 scrollup3::line#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -1110,66 +1164,42 @@ scrollup3: { .label line = 9 .label _3 = 5 .label _4 = 7 - // [12] phi from scrollup3 to scrollup3::@1 [phi:scrollup3->scrollup3::@1] - b1_from_scrollup3: - // [12] phi (word) scrollup3::line#2 = (byte) 0 [phi:scrollup3->scrollup3::@1#0] -- vwuz1=vbuc1 + // [12] phi from scrollup3 to scrollup3::@2 [phi:scrollup3->scrollup3::@2] + b2_from_scrollup3: + // [12] phi (word) scrollup3::line#10 = (byte) 0 [phi:scrollup3->scrollup3::@2#0] -- vwuz1=vbuc1 lda #<0 sta line lda #>0 sta line+1 - jmp b1 - // scrollup3::@1 - b1: - // [13] if((word) scrollup3::line#2<(word)(number) $28*(number) $18) goto scrollup3::@2 -- vwuz1_lt_vwuc1_then_la1 - lda line+1 - cmp #>$28*$18 - bcc b2 - bne !+ - lda line - cmp #<$28*$18 - bcc b2 - !: - jmp breturn - // scrollup3::@return - breturn: - // [14] return - rts + jmp b2 + // [12] phi from scrollup3::@1 to scrollup3::@2 [phi:scrollup3::@1->scrollup3::@2] + b2_from_b1: + // [12] phi (word) scrollup3::line#10 = (word) scrollup3::line#1 [phi:scrollup3::@1->scrollup3::@2#0] -- register_copy + jmp b2 // scrollup3::@2 b2: - // [15] (word~) scrollup3::l2#4 ← (word) scrollup3::line#2 -- vwuz1=vwuz2 + jmp b4_1 + // scrollup3::@4_1 + b4_1: + // [13] (word~) scrollup3::l2#7 ← (word) scrollup3::line#10 -- vwuz1=vwuz2 lda line sta l2 lda line+1 sta l2+1 - // [16] phi from scrollup3::@2 to scrollup3::@3 [phi:scrollup3::@2->scrollup3::@3] - b3_from_b2: - // [16] phi (word) scrollup3::l2#2 = (word~) scrollup3::l2#4 [phi:scrollup3::@2->scrollup3::@3#0] -- register_copy - // [16] phi (byte) scrollup3::c#2 = (byte) 0 [phi:scrollup3::@2->scrollup3::@3#1] -- vbuxx=vbuc1 + // [14] phi from scrollup3::@4_1 to scrollup3::@4 [phi:scrollup3::@4_1->scrollup3::@4] + b4_from_b4_1: + // [14] phi (word) scrollup3::l2#4 = (word~) scrollup3::l2#7 [phi:scrollup3::@4_1->scrollup3::@4#0] -- register_copy + // [14] phi (byte) scrollup3::c#4 = (byte) 0 [phi:scrollup3::@4_1->scrollup3::@4#1] -- vbuxx=vbuc1 ldx #0 - jmp b3 - // scrollup3::@3 - b3: - // [17] if((byte) scrollup3::c#2<(byte) $28) goto scrollup3::@4 -- vbuxx_lt_vbuc1_then_la1 - cpx #$28 - bcc b4 - jmp b5 - // scrollup3::@5 - b5: - // [18] (word) scrollup3::line#1 ← (word) scrollup3::line#2 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - // [12] phi from scrollup3::@5 to scrollup3::@1 [phi:scrollup3::@5->scrollup3::@1] - b1_from_b5: - // [12] phi (word) scrollup3::line#2 = (word) scrollup3::line#1 [phi:scrollup3::@5->scrollup3::@1#0] -- register_copy - jmp b1 + jmp b4 + // [14] phi from scrollup3::@3 to scrollup3::@4 [phi:scrollup3::@3->scrollup3::@4] + b4_from_b3: + // [14] phi (word) scrollup3::l2#4 = (word) scrollup3::l2#1 [phi:scrollup3::@3->scrollup3::@4#0] -- register_copy + // [14] phi (byte) scrollup3::c#4 = (byte) scrollup3::c#1 [phi:scrollup3::@3->scrollup3::@4#1] -- register_copy + jmp b4 // scrollup3::@4 b4: - // [19] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#2 -- pbuz1=pbuc1_plus_vwuz2 + // [15] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#4 -- pbuz1=pbuc1_plus_vwuz2 lda l2 clc adc #screen+$28 sta _3+1 - // [20] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#2 -- pbuz1=pbuc1_plus_vwuz2 + // [16] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#4 -- pbuz1=pbuc1_plus_vwuz2 lda l2 clc adc #screen sta _4+1 - // [21] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) -- _deref_pbuz1=_deref_pbuz2 + // [17] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (_3),y ldy #0 sta (_4),y - // [22] (word) scrollup3::l2#1 ← ++ (word) scrollup3::l2#2 -- vwuz1=_inc_vwuz1 + // [18] (word) scrollup3::l2#1 ← ++ (word) scrollup3::l2#4 -- vwuz1=_inc_vwuz1 inc l2 bne !+ inc l2+1 !: - // [23] (byte) scrollup3::c#1 ← ++ (byte) scrollup3::c#2 -- vbuxx=_inc_vbuxx + // [19] (byte) scrollup3::c#1 ← ++ (byte) scrollup3::c#4 -- vbuxx=_inc_vbuxx inx - // [16] phi from scrollup3::@4 to scrollup3::@3 [phi:scrollup3::@4->scrollup3::@3] - b3_from_b4: - // [16] phi (word) scrollup3::l2#2 = (word) scrollup3::l2#1 [phi:scrollup3::@4->scrollup3::@3#0] -- register_copy - // [16] phi (byte) scrollup3::c#2 = (byte) scrollup3::c#1 [phi:scrollup3::@4->scrollup3::@3#1] -- register_copy jmp b3 + // scrollup3::@3 + b3: + // [20] if((byte) scrollup3::c#1<(byte) $28) goto scrollup3::@4 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc b4_from_b3 + jmp b5 + // scrollup3::@5 + b5: + // [21] (word) scrollup3::line#1 ← (word) scrollup3::line#10 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: + jmp b1 + // scrollup3::@1 + b1: + // [22] if((word) scrollup3::line#1<(word)(number) $28*(number) $18) goto scrollup3::@2 -- vwuz1_lt_vwuc1_then_la1 + lda line+1 + cmp #>$28*$18 + bcc b2_from_b1 + bne !+ + lda line + cmp #<$28*$18 + bcc b2_from_b1 + !: + jmp breturn + // scrollup3::@return + breturn: + // [23] return + rts } // scrollup2 scrollup2: { @@ -1289,17 +1348,91 @@ scrollup1: { .label line = 5 .label _5 = 9 .label _6 = 7 - // [36] phi from scrollup1 to scrollup1::@1 [phi:scrollup1->scrollup1::@1] - b1_from_scrollup1: - // [36] phi (word) scrollup1::line#2 = (byte) 0 [phi:scrollup1->scrollup1::@1#0] -- vwuz1=vbuc1 + // [36] phi from scrollup1 to scrollup1::@2 [phi:scrollup1->scrollup1::@2] + b2_from_scrollup1: + // [36] phi (word) scrollup1::line#10 = (byte) 0 [phi:scrollup1->scrollup1::@2#0] -- vwuz1=vbuc1 lda #<0 sta line lda #>0 sta line+1 + jmp b2 + // [36] phi from scrollup1::@1 to scrollup1::@2 [phi:scrollup1::@1->scrollup1::@2] + b2_from_b1: + // [36] phi (word) scrollup1::line#10 = (word) scrollup1::line#1 [phi:scrollup1::@1->scrollup1::@2#0] -- register_copy + jmp b2 + // scrollup1::@2 + b2: + // [37] phi from scrollup1::@2 to scrollup1::@4 [phi:scrollup1::@2->scrollup1::@4] + b4_from_b2: + // [37] phi (byte) scrollup1::c#4 = (byte) 0 [phi:scrollup1::@2->scrollup1::@4#0] -- vbuxx=vbuc1 + ldx #0 + jmp b4 + // [37] phi from scrollup1::@3 to scrollup1::@4 [phi:scrollup1::@3->scrollup1::@4] + b4_from_b3: + // [37] phi (byte) scrollup1::c#4 = (byte) scrollup1::c#1 [phi:scrollup1::@3->scrollup1::@4#0] -- register_copy + jmp b4 + // scrollup1::@4 + b4: + // [38] (word~) scrollup1::$2 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 -- vwuz1=vwuz2_plus_vbuxx + txa + clc + adc line + sta _2 + lda #0 + adc line+1 + sta _2+1 + // [39] (word~) scrollup1::$4 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 -- vwuz1=vwuz2_plus_vbuxx + txa + clc + adc line + sta _4 + lda #0 + adc line+1 + sta _4+1 + // [40] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 -- pbuz1=pbuc1_plus_vwuz1 + clc + lda _5 + adc #screen+$28 + sta _5+1 + // [41] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 -- pbuz1=pbuc1_plus_vwuz1 + clc + lda _6 + adc #screen + sta _6+1 + // [42] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (_5),y + ldy #0 + sta (_6),y + // [43] (byte) scrollup1::c#1 ← ++ (byte) scrollup1::c#4 -- vbuxx=_inc_vbuxx + inx + jmp b3 + // scrollup1::@3 + b3: + // [44] if((byte) scrollup1::c#1<(byte) $28) goto scrollup1::@4 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc b4_from_b3 + jmp b5 + // scrollup1::@5 + b5: + // [45] (word) scrollup1::line#1 ← (word) scrollup1::line#10 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: jmp b1 // scrollup1::@1 b1: - // [37] if((word) scrollup1::line#2<(word)(number) $28*(number) $18) goto scrollup1::@2 -- vwuz1_lt_vwuc1_then_la1 + // [46] if((word) scrollup1::line#1<(word)(number) $28*(number) $18) goto scrollup1::@2 -- vwuz1_lt_vwuc1_then_la1 lda line+1 cmp #>$28*$18 bcc b2_from_b1 @@ -1311,78 +1444,8 @@ scrollup1: { jmp breturn // scrollup1::@return breturn: - // [38] return + // [47] return rts - // [39] phi from scrollup1::@1 to scrollup1::@2 [phi:scrollup1::@1->scrollup1::@2] - b2_from_b1: - // [39] phi (byte) scrollup1::c#2 = (byte) 0 [phi:scrollup1::@1->scrollup1::@2#0] -- vbuxx=vbuc1 - ldx #0 - jmp b2 - // scrollup1::@2 - b2: - // [40] if((byte) scrollup1::c#2<(byte) $28) goto scrollup1::@3 -- vbuxx_lt_vbuc1_then_la1 - cpx #$28 - bcc b3 - jmp b4 - // scrollup1::@4 - b4: - // [41] (word) scrollup1::line#1 ← (word) scrollup1::line#2 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - // [36] phi from scrollup1::@4 to scrollup1::@1 [phi:scrollup1::@4->scrollup1::@1] - b1_from_b4: - // [36] phi (word) scrollup1::line#2 = (word) scrollup1::line#1 [phi:scrollup1::@4->scrollup1::@1#0] -- register_copy - jmp b1 - // scrollup1::@3 - b3: - // [42] (word~) scrollup1::$2 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 -- vwuz1=vwuz2_plus_vbuxx - txa - clc - adc line - sta _2 - lda #0 - adc line+1 - sta _2+1 - // [43] (word~) scrollup1::$4 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 -- vwuz1=vwuz2_plus_vbuxx - txa - clc - adc line - sta _4 - lda #0 - adc line+1 - sta _4+1 - // [44] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 -- pbuz1=pbuc1_plus_vwuz1 - clc - lda _5 - adc #screen+$28 - sta _5+1 - // [45] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 -- pbuz1=pbuc1_plus_vwuz1 - clc - lda _6 - adc #screen - sta _6+1 - // [46] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (_5),y - ldy #0 - sta (_6),y - // [47] (byte) scrollup1::c#1 ← ++ (byte) scrollup1::c#2 -- vbuxx=_inc_vbuxx - inx - // [39] phi from scrollup1::@3 to scrollup1::@2 [phi:scrollup1::@3->scrollup1::@2] - b2_from_b3: - // [39] phi (byte) scrollup1::c#2 = (byte) scrollup1::c#1 [phi:scrollup1::@3->scrollup1::@2#0] -- register_copy - jmp b2 } // File Data @@ -1392,18 +1455,23 @@ Removing instruction jmp bend Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp breturn +Removing instruction jmp b2 +Removing instruction jmp b4_1 +Removing instruction jmp b4 Removing instruction jmp b3 Removing instruction jmp b5 Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp breturn Removing instruction jmp b2 Removing instruction jmp b4 +Removing instruction jmp b3 +Removing instruction jmp b5 +Removing instruction jmp b1 +Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #>0 Removing instruction ldy #0 @@ -1411,8 +1479,14 @@ Removing instruction ldy #0 Removing instruction lda #>0 Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b4_from_b3 with b4 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Replacing label b2_from_b2 with b2 Replacing label b1_from_b3 with b1 +Replacing label b4_from_b3 with b4 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: @@ -1421,37 +1495,45 @@ Removing instruction b1_from_main: Removing instruction scrollup2_from_b1: Removing instruction b2_from_b1: Removing instruction scrollup3_from_b2: +Removing instruction b2_from_b1: +Removing instruction b4_1: +Removing instruction b4_from_b3: Removing instruction b1_from_b3: Removing instruction b2_from_b1: Removing instruction b2_from_b2: +Removing instruction b2_from_b1: +Removing instruction b4_from_b2: +Removing instruction b4_from_b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction scrollup1_from_main: Removing instruction b1: Removing instruction b2: Removing instruction breturn: -Removing instruction b1_from_scrollup3: -Removing instruction breturn: -Removing instruction b3_from_b2: +Removing instruction b2_from_scrollup3: +Removing instruction b4_from_b4_1: +Removing instruction b3: Removing instruction b5: -Removing instruction b1_from_b5: -Removing instruction b3_from_b4: +Removing instruction b1: +Removing instruction breturn: Removing instruction b1_from_scrollup2: Removing instruction b3: Removing instruction breturn: -Removing instruction b1_from_scrollup1: +Removing instruction b2_from_scrollup1: +Removing instruction b3: +Removing instruction b5: +Removing instruction b1: Removing instruction breturn: -Removing instruction b4: -Removing instruction b1_from_b4: -Removing instruction b2_from_b3: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Relabelling long label b2_from_b1 to b4 -Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b2 +Removing instruction jmp b4 Removing instruction jmp b1 Removing instruction jmp b2 +Removing instruction jmp b2 +Removing instruction jmp b4 Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -1475,13 +1557,14 @@ FINAL SYMBOL TABLE (label) scrollup1::@2 (label) scrollup1::@3 (label) scrollup1::@4 +(label) scrollup1::@5 (label) scrollup1::@return (byte) scrollup1::c -(byte) scrollup1::c#1 reg byte x 202.0 -(byte) scrollup1::c#2 reg byte x 72.14285714285714 +(byte) scrollup1::c#1 reg byte x 151.5 +(byte) scrollup1::c#4 reg byte x 67.33333333333333 (word) scrollup1::line -(word) scrollup1::line#1 line zp ZP_WORD:5 22.0 -(word) scrollup1::line#2 line zp ZP_WORD:5 23.5 +(word) scrollup1::line#1 line zp ZP_WORD:5 16.5 +(word) scrollup1::line#10 line zp ZP_WORD:5 24.888888888888886 (void()) scrollup2() (label) scrollup2::@1 (label) scrollup2::@2 @@ -1508,31 +1591,32 @@ FINAL SYMBOL TABLE (label) scrollup3::@2 (label) scrollup3::@3 (label) scrollup3::@4 +(label) scrollup3::@4_1 (label) scrollup3::@5 (label) scrollup3::@return (byte) scrollup3::c -(byte) scrollup3::c#1 reg byte x 202.0 -(byte) scrollup3::c#2 reg byte x 50.5 +(byte) scrollup3::c#1 reg byte x 151.5 +(byte) scrollup3::c#4 reg byte x 40.4 (word) scrollup3::l2 -(word) scrollup3::l2#1 l2 zp ZP_WORD:3 101.0 -(word) scrollup3::l2#2 l2 zp ZP_WORD:3 83.0 -(word~) scrollup3::l2#4 l2 zp ZP_WORD:3 22.0 +(word) scrollup3::l2#1 l2 zp ZP_WORD:3 67.33333333333333 +(word) scrollup3::l2#4 l2 zp ZP_WORD:3 103.75 +(word~) scrollup3::l2#7 l2 zp ZP_WORD:3 22.0 (word) scrollup3::line -(word) scrollup3::line#1 line zp ZP_WORD:9 22.0 -(word) scrollup3::line#2 line zp ZP_WORD:9 4.4 +(word) scrollup3::line#1 line zp ZP_WORD:9 16.5 +(word) scrollup3::line#10 line zp ZP_WORD:9 3.666666666666667 -reg byte x [ scrollup3::c#2 scrollup3::c#1 ] +reg byte x [ scrollup3::c#4 scrollup3::c#1 ] zp ZP_BYTE:2 [ scrollup2::l#4 scrollup2::l#1 ] -zp ZP_WORD:3 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 scrollup3::l2#2 scrollup3::l2#4 scrollup3::l2#1 ] +zp ZP_WORD:3 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 scrollup3::l2#4 scrollup3::l2#1 scrollup3::l2#7 ] reg byte x [ scrollup2::c#2 scrollup2::c#1 ] -reg byte x [ scrollup1::c#2 scrollup1::c#1 ] -zp ZP_WORD:5 [ scrollup3::$3 scrollup1::line#2 scrollup1::line#1 ] +reg byte x [ scrollup1::c#4 scrollup1::c#1 ] +zp ZP_WORD:5 [ scrollup3::$3 scrollup1::line#10 scrollup1::line#1 ] zp ZP_WORD:7 [ scrollup1::$2 scrollup1::$6 scrollup3::$4 ] -zp ZP_WORD:9 [ scrollup1::$4 scrollup1::$5 scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 scrollup3::line#2 scrollup3::line#1 ] +zp ZP_WORD:9 [ scrollup1::$4 scrollup1::$5 scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 scrollup3::line#10 scrollup3::line#1 ] FINAL ASSEMBLER -Score: 23207 +Score: 22547 // File Comments // Tests different ways of scrolling up the screen @@ -1578,15 +1662,77 @@ scrollup3: { .label line = 9 .label _3 = 5 .label _4 = 7 - // [12] phi from scrollup3 to scrollup3::@1 [phi:scrollup3->scrollup3::@1] - // [12] phi (word) scrollup3::line#2 = (byte) 0 [phi:scrollup3->scrollup3::@1#0] -- vwuz1=vbuc1 + // [12] phi from scrollup3 to scrollup3::@2 [phi:scrollup3->scrollup3::@2] + // [12] phi (word) scrollup3::line#10 = (byte) 0 [phi:scrollup3->scrollup3::@2#0] -- vwuz1=vbuc1 lda #<0 sta line sta line+1 + // [12] phi from scrollup3::@1 to scrollup3::@2 [phi:scrollup3::@1->scrollup3::@2] + // [12] phi (word) scrollup3::line#10 = (word) scrollup3::line#1 [phi:scrollup3::@1->scrollup3::@2#0] -- register_copy + // scrollup3::@2 + b2: + // scrollup3::@4_1 + // [13] (word~) scrollup3::l2#7 ← (word) scrollup3::line#10 -- vwuz1=vwuz2 + lda line + sta l2 + lda line+1 + sta l2+1 + // [14] phi from scrollup3::@4_1 to scrollup3::@4 [phi:scrollup3::@4_1->scrollup3::@4] + // [14] phi (word) scrollup3::l2#4 = (word~) scrollup3::l2#7 [phi:scrollup3::@4_1->scrollup3::@4#0] -- register_copy + // [14] phi (byte) scrollup3::c#4 = (byte) 0 [phi:scrollup3::@4_1->scrollup3::@4#1] -- vbuxx=vbuc1 + ldx #0 + // [14] phi from scrollup3::@3 to scrollup3::@4 [phi:scrollup3::@3->scrollup3::@4] + // [14] phi (word) scrollup3::l2#4 = (word) scrollup3::l2#1 [phi:scrollup3::@3->scrollup3::@4#0] -- register_copy + // [14] phi (byte) scrollup3::c#4 = (byte) scrollup3::c#1 [phi:scrollup3::@3->scrollup3::@4#1] -- register_copy + // scrollup3::@4 + b4: + // screen[l2++] = screen[l2+40] + // [15] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#4 -- pbuz1=pbuc1_plus_vwuz2 + lda l2 + clc + adc #screen+$28 + sta _3+1 + // [16] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#4 -- pbuz1=pbuc1_plus_vwuz2 + lda l2 + clc + adc #screen + sta _4+1 + // [17] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (_3),y + sta (_4),y + // screen[l2++] = screen[l2+40]; + // [18] (word) scrollup3::l2#1 ← ++ (word) scrollup3::l2#4 -- vwuz1=_inc_vwuz1 + inc l2 + bne !+ + inc l2+1 + !: + // for (byte c=0; c<40; ++c) + // [19] (byte) scrollup3::c#1 ← ++ (byte) scrollup3::c#4 -- vbuxx=_inc_vbuxx + inx + // scrollup3::@3 + // [20] if((byte) scrollup3::c#1<(byte) $28) goto scrollup3::@4 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc b4 + // scrollup3::@5 + // line += 40 + // [21] (word) scrollup3::line#1 ← (word) scrollup3::line#10 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: // scrollup3::@1 - b1: // for (word line = 0; line < 40*24; line += 40) - // [13] if((word) scrollup3::line#2<(word)(number) $28*(number) $18) goto scrollup3::@2 -- vwuz1_lt_vwuc1_then_la1 + // [22] if((word) scrollup3::line#1<(word)(number) $28*(number) $18) goto scrollup3::@2 -- vwuz1_lt_vwuc1_then_la1 lda line+1 cmp #>$28*$18 bcc b2 @@ -1597,74 +1743,8 @@ scrollup3: { !: // scrollup3::@return // } - // [14] return + // [23] return rts - // scrollup3::@2 - b2: - // [15] (word~) scrollup3::l2#4 ← (word) scrollup3::line#2 -- vwuz1=vwuz2 - lda line - sta l2 - lda line+1 - sta l2+1 - // [16] phi from scrollup3::@2 to scrollup3::@3 [phi:scrollup3::@2->scrollup3::@3] - // [16] phi (word) scrollup3::l2#2 = (word~) scrollup3::l2#4 [phi:scrollup3::@2->scrollup3::@3#0] -- register_copy - // [16] phi (byte) scrollup3::c#2 = (byte) 0 [phi:scrollup3::@2->scrollup3::@3#1] -- vbuxx=vbuc1 - ldx #0 - // scrollup3::@3 - b3: - // for (byte c=0; c<40; ++c) - // [17] if((byte) scrollup3::c#2<(byte) $28) goto scrollup3::@4 -- vbuxx_lt_vbuc1_then_la1 - cpx #$28 - bcc b4 - // scrollup3::@5 - // line += 40 - // [18] (word) scrollup3::line#1 ← (word) scrollup3::line#2 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - // [12] phi from scrollup3::@5 to scrollup3::@1 [phi:scrollup3::@5->scrollup3::@1] - // [12] phi (word) scrollup3::line#2 = (word) scrollup3::line#1 [phi:scrollup3::@5->scrollup3::@1#0] -- register_copy - jmp b1 - // scrollup3::@4 - b4: - // screen[l2++] = screen[l2+40] - // [19] (byte*~) scrollup3::$3 ← (const byte*) screen#0+(byte) $28 + (word) scrollup3::l2#2 -- pbuz1=pbuc1_plus_vwuz2 - lda l2 - clc - adc #screen+$28 - sta _3+1 - // [20] (byte*~) scrollup3::$4 ← (const byte*) screen#0 + (word) scrollup3::l2#2 -- pbuz1=pbuc1_plus_vwuz2 - lda l2 - clc - adc #screen - sta _4+1 - // [21] *((byte*~) scrollup3::$4) ← *((byte*~) scrollup3::$3) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (_3),y - sta (_4),y - // screen[l2++] = screen[l2+40]; - // [22] (word) scrollup3::l2#1 ← ++ (word) scrollup3::l2#2 -- vwuz1=_inc_vwuz1 - inc l2 - bne !+ - inc l2+1 - !: - // for (byte c=0; c<40; ++c) - // [23] (byte) scrollup3::c#1 ← ++ (byte) scrollup3::c#2 -- vbuxx=_inc_vbuxx - inx - // [16] phi from scrollup3::@4 to scrollup3::@3 [phi:scrollup3::@4->scrollup3::@3] - // [16] phi (word) scrollup3::l2#2 = (word) scrollup3::l2#1 [phi:scrollup3::@4->scrollup3::@3#0] -- register_copy - // [16] phi (byte) scrollup3::c#2 = (byte) scrollup3::c#1 [phi:scrollup3::@4->scrollup3::@3#1] -- register_copy - jmp b3 } // scrollup2 scrollup2: { @@ -1744,54 +1824,24 @@ scrollup1: { .label line = 5 .label _5 = 9 .label _6 = 7 - // [36] phi from scrollup1 to scrollup1::@1 [phi:scrollup1->scrollup1::@1] - // [36] phi (word) scrollup1::line#2 = (byte) 0 [phi:scrollup1->scrollup1::@1#0] -- vwuz1=vbuc1 + // [36] phi from scrollup1 to scrollup1::@2 [phi:scrollup1->scrollup1::@2] + // [36] phi (word) scrollup1::line#10 = (byte) 0 [phi:scrollup1->scrollup1::@2#0] -- vwuz1=vbuc1 lda #<0 sta line sta line+1 - // scrollup1::@1 - b1: - // for (word line = 0; line < 40*24; line += 40) - // [37] if((word) scrollup1::line#2<(word)(number) $28*(number) $18) goto scrollup1::@2 -- vwuz1_lt_vwuc1_then_la1 - lda line+1 - cmp #>$28*$18 - bcc b4 - bne !+ - lda line - cmp #<$28*$18 - bcc b4 - !: - // scrollup1::@return - // } - // [38] return - rts - // [39] phi from scrollup1::@1 to scrollup1::@2 [phi:scrollup1::@1->scrollup1::@2] - b4: - // [39] phi (byte) scrollup1::c#2 = (byte) 0 [phi:scrollup1::@1->scrollup1::@2#0] -- vbuxx=vbuc1 - ldx #0 + // [36] phi from scrollup1::@1 to scrollup1::@2 [phi:scrollup1::@1->scrollup1::@2] + // [36] phi (word) scrollup1::line#10 = (word) scrollup1::line#1 [phi:scrollup1::@1->scrollup1::@2#0] -- register_copy // scrollup1::@2 b2: - // for (byte c=0; c<40; ++c) - // [40] if((byte) scrollup1::c#2<(byte) $28) goto scrollup1::@3 -- vbuxx_lt_vbuc1_then_la1 - cpx #$28 - bcc b3 + // [37] phi from scrollup1::@2 to scrollup1::@4 [phi:scrollup1::@2->scrollup1::@4] + // [37] phi (byte) scrollup1::c#4 = (byte) 0 [phi:scrollup1::@2->scrollup1::@4#0] -- vbuxx=vbuc1 + ldx #0 + // [37] phi from scrollup1::@3 to scrollup1::@4 [phi:scrollup1::@3->scrollup1::@4] + // [37] phi (byte) scrollup1::c#4 = (byte) scrollup1::c#1 [phi:scrollup1::@3->scrollup1::@4#0] -- register_copy // scrollup1::@4 - // line += 40 - // [41] (word) scrollup1::line#1 ← (word) scrollup1::line#2 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - // [36] phi from scrollup1::@4 to scrollup1::@1 [phi:scrollup1::@4->scrollup1::@1] - // [36] phi (word) scrollup1::line#2 = (word) scrollup1::line#1 [phi:scrollup1::@4->scrollup1::@1#0] -- register_copy - jmp b1 - // scrollup1::@3 - b3: + b4: // line+c - // [42] (word~) scrollup1::$2 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 -- vwuz1=vwuz2_plus_vbuxx + // [38] (word~) scrollup1::$2 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 -- vwuz1=vwuz2_plus_vbuxx txa clc adc line @@ -1800,7 +1850,7 @@ scrollup1: { adc line+1 sta _2+1 // line+c+40 - // [43] (word~) scrollup1::$4 ← (word) scrollup1::line#2 + (byte) scrollup1::c#2 -- vwuz1=vwuz2_plus_vbuxx + // [39] (word~) scrollup1::$4 ← (word) scrollup1::line#10 + (byte) scrollup1::c#4 -- vwuz1=vwuz2_plus_vbuxx txa clc adc line @@ -1809,7 +1859,7 @@ scrollup1: { adc line+1 sta _4+1 // screen[line+c] = screen[line+c+40] - // [44] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 -- pbuz1=pbuc1_plus_vwuz1 + // [40] (byte*~) scrollup1::$5 ← (const byte*) screen#0+(byte) $28 + (word~) scrollup1::$4 -- pbuz1=pbuc1_plus_vwuz1 clc lda _5 adc #screen+$28 sta _5+1 - // [45] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 -- pbuz1=pbuc1_plus_vwuz1 + // [41] (byte*~) scrollup1::$6 ← (const byte*) screen#0 + (word~) scrollup1::$2 -- pbuz1=pbuc1_plus_vwuz1 clc lda _6 adc #screen sta _6+1 - // [46] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) -- _deref_pbuz1=_deref_pbuz2 + // [42] *((byte*~) scrollup1::$6) ← *((byte*~) scrollup1::$5) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (_5),y sta (_6),y // for (byte c=0; c<40; ++c) - // [47] (byte) scrollup1::c#1 ← ++ (byte) scrollup1::c#2 -- vbuxx=_inc_vbuxx + // [43] (byte) scrollup1::c#1 ← ++ (byte) scrollup1::c#4 -- vbuxx=_inc_vbuxx inx - // [39] phi from scrollup1::@3 to scrollup1::@2 [phi:scrollup1::@3->scrollup1::@2] - // [39] phi (byte) scrollup1::c#2 = (byte) scrollup1::c#1 [phi:scrollup1::@3->scrollup1::@2#0] -- register_copy - jmp b2 + // scrollup1::@3 + // [44] if((byte) scrollup1::c#1<(byte) $28) goto scrollup1::@4 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc b4 + // scrollup1::@5 + // line += 40 + // [45] (word) scrollup1::line#1 ← (word) scrollup1::line#10 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: + // scrollup1::@1 + // for (word line = 0; line < 40*24; line += 40) + // [46] if((word) scrollup1::line#1<(word)(number) $28*(number) $18) goto scrollup1::@2 -- vwuz1_lt_vwuc1_then_la1 + lda line+1 + cmp #>$28*$18 + bcc b2 + bne !+ + lda line + cmp #<$28*$18 + bcc b2 + !: + // scrollup1::@return + // } + // [47] return + rts } // File Data diff --git a/src/test/ref/test-scroll-up.sym b/src/test/ref/test-scroll-up.sym index 18ecdf5a0..2829f66e5 100644 --- a/src/test/ref/test-scroll-up.sym +++ b/src/test/ref/test-scroll-up.sym @@ -16,13 +16,14 @@ (label) scrollup1::@2 (label) scrollup1::@3 (label) scrollup1::@4 +(label) scrollup1::@5 (label) scrollup1::@return (byte) scrollup1::c -(byte) scrollup1::c#1 reg byte x 202.0 -(byte) scrollup1::c#2 reg byte x 72.14285714285714 +(byte) scrollup1::c#1 reg byte x 151.5 +(byte) scrollup1::c#4 reg byte x 67.33333333333333 (word) scrollup1::line -(word) scrollup1::line#1 line zp ZP_WORD:5 22.0 -(word) scrollup1::line#2 line zp ZP_WORD:5 23.5 +(word) scrollup1::line#1 line zp ZP_WORD:5 16.5 +(word) scrollup1::line#10 line zp ZP_WORD:5 24.888888888888886 (void()) scrollup2() (label) scrollup2::@1 (label) scrollup2::@2 @@ -49,24 +50,25 @@ (label) scrollup3::@2 (label) scrollup3::@3 (label) scrollup3::@4 +(label) scrollup3::@4_1 (label) scrollup3::@5 (label) scrollup3::@return (byte) scrollup3::c -(byte) scrollup3::c#1 reg byte x 202.0 -(byte) scrollup3::c#2 reg byte x 50.5 +(byte) scrollup3::c#1 reg byte x 151.5 +(byte) scrollup3::c#4 reg byte x 40.4 (word) scrollup3::l2 -(word) scrollup3::l2#1 l2 zp ZP_WORD:3 101.0 -(word) scrollup3::l2#2 l2 zp ZP_WORD:3 83.0 -(word~) scrollup3::l2#4 l2 zp ZP_WORD:3 22.0 +(word) scrollup3::l2#1 l2 zp ZP_WORD:3 67.33333333333333 +(word) scrollup3::l2#4 l2 zp ZP_WORD:3 103.75 +(word~) scrollup3::l2#7 l2 zp ZP_WORD:3 22.0 (word) scrollup3::line -(word) scrollup3::line#1 line zp ZP_WORD:9 22.0 -(word) scrollup3::line#2 line zp ZP_WORD:9 4.4 +(word) scrollup3::line#1 line zp ZP_WORD:9 16.5 +(word) scrollup3::line#10 line zp ZP_WORD:9 3.666666666666667 -reg byte x [ scrollup3::c#2 scrollup3::c#1 ] +reg byte x [ scrollup3::c#4 scrollup3::c#1 ] zp ZP_BYTE:2 [ scrollup2::l#4 scrollup2::l#1 ] -zp ZP_WORD:3 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 scrollup3::l2#2 scrollup3::l2#4 scrollup3::l2#1 ] +zp ZP_WORD:3 [ scrollup2::line1#2 scrollup2::line1#3 scrollup2::line1#1 scrollup3::l2#4 scrollup3::l2#1 scrollup3::l2#7 ] reg byte x [ scrollup2::c#2 scrollup2::c#1 ] -reg byte x [ scrollup1::c#2 scrollup1::c#1 ] -zp ZP_WORD:5 [ scrollup3::$3 scrollup1::line#2 scrollup1::line#1 ] +reg byte x [ scrollup1::c#4 scrollup1::c#1 ] +zp ZP_WORD:5 [ scrollup3::$3 scrollup1::line#10 scrollup1::line#1 ] zp ZP_WORD:7 [ scrollup1::$2 scrollup1::$6 scrollup3::$4 ] -zp ZP_WORD:9 [ scrollup1::$4 scrollup1::$5 scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 scrollup3::line#2 scrollup3::line#1 ] +zp ZP_WORD:9 [ scrollup1::$4 scrollup1::$5 scrollup2::line2#2 scrollup2::line2#3 scrollup2::line2#1 scrollup3::line#10 scrollup3::line#1 ] diff --git a/src/test/ref/test-signed-word-minus-byte.asm b/src/test/ref/test-signed-word-minus-byte.asm index f56e4d389..30f711dd4 100644 --- a/src/test/ref/test-signed-word-minus-byte.asm +++ b/src/test/ref/test-signed-word-minus-byte.asm @@ -161,14 +161,6 @@ memset: { sta dst lda #>str sta dst+1 - b1: - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #end + bne b2 + lda dst + cmp #memset::@1] - b1_from_memset: - // [58] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [58] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [58] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [59] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [58] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [61] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [59] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [62] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [60] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [58] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [58] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [61] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #> (byte) 4 [ print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ( main:2::print_sword:10::print_word:32::print_byte:42 [ print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 print_word::w#0 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] main:2::print_sword:14::print_word:32::print_byte:42 [ print_line_cursor#19 main::i#2 main::w1#1 print_word::w#0 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] main:2::print_sword:10::print_word:32::print_byte:44 [ print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] main:2::print_sword:14::print_word:32::print_byte:44 [ print_line_cursor#19 main::i#2 main::w1#1 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Statement [50] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#13 print_byte::$2 ] ( main:2::print_sword:10::print_word:32::print_byte:42 [ print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 print_word::w#0 print_char_cursor#13 print_byte::$2 ] main:2::print_sword:14::print_word:32::print_byte:42 [ print_line_cursor#19 main::i#2 main::w1#1 print_word::w#0 print_char_cursor#13 print_byte::$2 ] main:2::print_sword:10::print_word:32::print_byte:44 [ print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 print_char_cursor#13 print_byte::$2 ] main:2::print_sword:14::print_word:32::print_byte:44 [ print_line_cursor#19 main::i#2 main::w1#1 print_char_cursor#13 print_byte::$2 ] ) always clobbers reg byte a -Statement [59] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:55 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [61] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:55 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [59] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:55 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [61] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:55 [ memset::dst#1 ] ) always clobbers reg byte a Statement [7] (signed word) main::w2#0 ← (signed word) main::w1#2 - (signed byte) $5b [ print_char_cursor#53 print_line_cursor#19 main::i#2 main::w2#0 ] ( main:2 [ print_char_cursor#53 print_line_cursor#19 main::i#2 main::w2#0 ] ) always clobbers reg byte a Statement [8] (signed word) main::w1#1 ← (signed word) main::w2#0 - (signed byte) $29 [ print_char_cursor#53 print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 ] ( main:2 [ print_char_cursor#53 print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 ] ) always clobbers reg byte a Statement [9] (signed word) print_sword::w#1 ← (signed word) main::w1#1 [ print_char_cursor#53 print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 print_sword::w#1 ] ( main:2 [ print_char_cursor#53 print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 print_sword::w#1 ] ) always clobbers reg byte a @@ -1528,8 +1540,8 @@ Statement [41] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_char_ Statement [43] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#13 print_byte::b#1 ] ( main:2::print_sword:10::print_word:32 [ print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 print_char_cursor#13 print_byte::b#1 ] main:2::print_sword:14::print_word:32 [ print_line_cursor#19 main::i#2 main::w1#1 print_char_cursor#13 print_byte::b#1 ] ) always clobbers reg byte a Statement [47] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ( main:2::print_sword:10::print_word:32::print_byte:42 [ print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 print_word::w#0 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] main:2::print_sword:14::print_word:32::print_byte:42 [ print_line_cursor#19 main::i#2 main::w1#1 print_word::w#0 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] main:2::print_sword:10::print_word:32::print_byte:44 [ print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] main:2::print_sword:14::print_word:32::print_byte:44 [ print_line_cursor#19 main::i#2 main::w1#1 print_char_cursor#13 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Statement [50] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#13 print_byte::$2 ] ( main:2::print_sword:10::print_word:32::print_byte:42 [ print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 print_word::w#0 print_char_cursor#13 print_byte::$2 ] main:2::print_sword:14::print_word:32::print_byte:42 [ print_line_cursor#19 main::i#2 main::w1#1 print_word::w#0 print_char_cursor#13 print_byte::$2 ] main:2::print_sword:10::print_word:32::print_byte:44 [ print_line_cursor#19 main::i#2 main::w1#1 main::w2#0 print_char_cursor#13 print_byte::$2 ] main:2::print_sword:14::print_word:32::print_byte:44 [ print_line_cursor#19 main::i#2 main::w1#1 print_char_cursor#13 print_byte::$2 ] ) always clobbers reg byte a -Statement [59] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:55 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [61] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:55 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [59] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:55 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y +Statement [61] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:55 [ memset::dst#1 ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ main::w1#2 main::w1#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_BYTE:4 [ main::i#2 main::i#1 ] : zp ZP_BYTE:4 , reg byte x , Potential registers zp ZP_WORD:5 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] : zp ZP_WORD:5 , @@ -1537,7 +1549,7 @@ Potential registers zp ZP_WORD:7 [ print_sword::w#5 print_sword::w#0 print_sword Potential registers zp ZP_BYTE:9 [ print_char::ch#5 print_char::ch#2 print_char::ch#3 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:10 [ print_char_cursor#36 print_char_cursor#47 print_char_cursor#53 print_char_cursor#64 print_char_cursor#13 ] : zp ZP_WORD:10 , Potential registers zp ZP_BYTE:12 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:12 , reg byte x , -Potential registers zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:13 , +Potential registers zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:13 , Potential registers zp ZP_WORD:15 [ main::w2#0 ] : zp ZP_WORD:15 , Potential registers zp ZP_WORD:17 [ print_word::w#0 ] : zp ZP_WORD:17 , Potential registers zp ZP_BYTE:19 [ print_byte::$0 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y , @@ -1547,7 +1559,7 @@ REGISTER UPLIFT SCOPES Uplift Scope [] 251.61: zp ZP_WORD:5 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] 49.53: zp ZP_WORD:10 [ print_char_cursor#36 print_char_cursor#47 print_char_cursor#53 print_char_cursor#64 print_char_cursor#13 ] Uplift Scope [print_sword] 56.67: zp ZP_WORD:7 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] Uplift Scope [main] 24.75: zp ZP_WORD:2 [ main::w1#2 main::w1#1 ] 13: zp ZP_BYTE:4 [ main::i#2 main::i#1 ] 5.5: zp ZP_WORD:15 [ main::w2#0 ] -Uplift Scope [memset] 36.67: zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [memset] 33: zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 ] Uplift Scope [print_byte] 10: zp ZP_BYTE:12 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:19 [ print_byte::$0 ] 4: zp ZP_BYTE:20 [ print_byte::$2 ] Uplift Scope [print_char] 14: zp ZP_BYTE:9 [ print_char::ch#5 print_char::ch#2 print_char::ch#3 ] Uplift Scope [print_word] 2: zp ZP_WORD:17 [ print_word::w#0 ] @@ -1555,25 +1567,25 @@ Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] -Uplifting [] best 6517 combination zp ZP_WORD:5 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] zp ZP_WORD:10 [ print_char_cursor#36 print_char_cursor#47 print_char_cursor#53 print_char_cursor#64 print_char_cursor#13 ] -Uplifting [print_sword] best 6517 combination zp ZP_WORD:7 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] -Uplifting [main] best 6427 combination zp ZP_WORD:2 [ main::w1#2 main::w1#1 ] reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:15 [ main::w2#0 ] -Uplifting [memset] best 6427 combination zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_byte] best 6419 combination zp ZP_BYTE:12 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] -Uplifting [print_char] best 6401 combination reg byte a [ print_char::ch#5 print_char::ch#2 print_char::ch#3 ] -Uplifting [print_word] best 6401 combination zp ZP_WORD:17 [ print_word::w#0 ] -Uplifting [RADIX] best 6401 combination -Uplifting [print_ln] best 6401 combination -Uplifting [print_cls] best 6401 combination +Uplifting [] best 6547 combination zp ZP_WORD:5 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] zp ZP_WORD:10 [ print_char_cursor#36 print_char_cursor#47 print_char_cursor#53 print_char_cursor#64 print_char_cursor#13 ] +Uplifting [print_sword] best 6547 combination zp ZP_WORD:7 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] +Uplifting [main] best 6457 combination zp ZP_WORD:2 [ main::w1#2 main::w1#1 ] reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:15 [ main::w2#0 ] +Uplifting [memset] best 6457 combination zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 ] +Uplifting [print_byte] best 6449 combination zp ZP_BYTE:12 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [print_char] best 6431 combination reg byte a [ print_char::ch#5 print_char::ch#2 print_char::ch#3 ] +Uplifting [print_word] best 6431 combination zp ZP_WORD:17 [ print_word::w#0 ] +Uplifting [RADIX] best 6431 combination +Uplifting [print_ln] best 6431 combination +Uplifting [print_cls] best 6431 combination Attempting to uplift remaining variables inzp ZP_BYTE:12 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Uplifting [print_byte] best 6401 combination zp ZP_BYTE:12 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Uplifting [print_byte] best 6431 combination zp ZP_BYTE:12 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Coalescing zero page register [ zp ZP_WORD:7 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] ] with [ zp ZP_WORD:17 [ print_word::w#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:13 [ memset::dst#2 memset::dst#1 ] ] with [ zp ZP_WORD:2 [ main::w1#2 main::w1#1 ] ] +Coalescing zero page register [ zp ZP_WORD:13 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:2 [ main::w1#2 main::w1#1 ] ] Allocated (was zp ZP_WORD:5) zp ZP_WORD:2 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 ] Allocated (was zp ZP_WORD:7) zp ZP_WORD:4 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_word::w#0 ] Allocated (was zp ZP_WORD:10) zp ZP_WORD:6 [ print_char_cursor#36 print_char_cursor#47 print_char_cursor#53 print_char_cursor#64 print_char_cursor#13 ] Allocated (was zp ZP_BYTE:12) zp ZP_BYTE:8 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Allocated (was zp ZP_WORD:13) zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 main::w1#2 main::w1#1 ] +Allocated (was zp ZP_WORD:13) zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 main::w1#2 main::w1#1 ] Allocated (was zp ZP_WORD:15) zp ZP_WORD:11 [ main::w2#0 ] ASSEMBLER BEFORE OPTIMIZATION @@ -1925,43 +1937,44 @@ memset: { .label str = $400 .label end = str+num .label dst = 9 - // [58] phi from memset to memset::@1 [phi:memset->memset::@1] - b1_from_memset: - // [58] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [58] phi from memset to memset::@2 [phi:memset->memset::@2] + b2_from_memset: + // [58] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - jmp b1 - // memset::@1 - b1: - // [59] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda dst+1 - cmp #>end - bne b2 - lda dst - cmp #memset::@2] + b2_from_b1: + // [58] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + jmp b2 // memset::@2 b2: - // [61] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [59] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [62] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [60] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 inc dst bne !+ inc dst+1 !: - // [58] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - b1_from_b2: - // [58] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp b1 + // memset::@1 + b1: + // [61] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b2_from_b1 + lda dst + cmp #memset::@1] - // [58] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [58] phi from memset to memset::@2 [phi:memset->memset::@2] + // [58] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 lda #str sta dst+1 - // memset::@1 - b1: + // [58] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2] + // [58] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy + // memset::@2 + b2: + // *dst = c + // [59] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [59] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [60] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // memset::@1 + // [61] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda dst+1 cmp #>end bne b2 @@ -2486,24 +2518,8 @@ memset: { bne b2 // memset::@return // } - // [60] return + // [62] return rts - // memset::@2 - b2: - // *dst = c - // [61] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [62] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc dst - bne !+ - inc dst+1 - !: - // [58] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [58] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp b1 } // File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/test-signed-word-minus-byte.sym b/src/test/ref/test-signed-word-minus-byte.sym index 93ac688c9..fb6f5b972 100644 --- a/src/test/ref/test-signed-word-minus-byte.sym +++ b/src/test/ref/test-signed-word-minus-byte.sym @@ -28,8 +28,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp ZP_WORD:9 22.0 -(byte*) memset::dst#2 dst zp ZP_WORD:9 14.666666666666666 +(byte*) memset::dst#1 dst zp ZP_WORD:9 16.5 +(byte*) memset::dst#4 dst zp ZP_WORD:9 16.5 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -94,7 +94,7 @@ zp ZP_WORD:4 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w reg byte a [ print_char::ch#5 print_char::ch#2 print_char::ch#3 ] zp ZP_WORD:6 [ print_char_cursor#36 print_char_cursor#47 print_char_cursor#53 print_char_cursor#64 print_char_cursor#13 ] zp ZP_BYTE:8 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 main::w1#2 main::w1#1 ] +zp ZP_WORD:9 [ memset::dst#4 memset::dst#1 main::w1#2 main::w1#1 ] zp ZP_WORD:11 [ main::w2#0 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] diff --git a/src/test/ref/test-word-size-arrays.asm b/src/test/ref/test-word-size-arrays.asm index 3f4488074..8415b444d 100644 --- a/src/test/ref/test-word-size-arrays.asm +++ b/src/test/ref/test-word-size-arrays.asm @@ -3,65 +3,19 @@ .pc = $80d "Program" main: { .label screen = $400 - .label _2 = 6 - .label _4 = 8 - .label _6 = 4 + .label _2 = 4 + .label _4 = 6 + .label _6 = 8 .label line = 2 - .label _7 = 8 - .label _8 = 6 - .label _9 = 4 + .label _7 = 6 + .label _8 = 4 + .label _9 = 8 lda #<0 sta line sta line+1 - b1: - lda line+1 - cmp #>$28*$18 - bcc b4 - bne !+ - lda line - cmp #<$28*$18 - bcc b4 - !: - ldx #0 - // Cleare the bottom line - b5: - cpx #$28 - bcc b6 - rts - b6: - txa - clc - adc line - sta _6 - lda #0 - adc line+1 - sta _6+1 - clc - lda _9 - adc #screen - sta _9+1 - lda #' ' - ldy #0 - sta (_9),y - inx - jmp b5 - b4: - ldx #0 b2: - cpx #$28 - bcc b3 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - jmp b1 - b3: + ldx #0 + b4: txa clc adc line @@ -94,5 +48,45 @@ main: { lda (_7),y sta (_8),y inx - jmp b2 + cpx #$28 + bcc b4 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: + lda line+1 + cmp #>$28*$18 + bcc b2 + bne !+ + lda line + cmp #<$28*$18 + bcc b2 + !: + ldx #0 + b7: + txa + clc + adc line + sta _6 + lda #0 + adc line+1 + sta _6+1 + clc + lda _9 + adc #screen + sta _9+1 + lda #' ' + ldy #0 + sta (_9),y + inx + // Cleare the bottom line + cpx #$28 + bcc b7 + rts } diff --git a/src/test/ref/test-word-size-arrays.cfg b/src/test/ref/test-word-size-arrays.cfg index 894fef94d..3f7cfaef3 100644 --- a/src/test/ref/test-word-size-arrays.cfg +++ b/src/test/ref/test-word-size-arrays.cfg @@ -9,36 +9,38 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@4 - [5] (word) main::line#10 ← phi( main/(byte) 0 main::@4/(word) main::line#2 ) - [6] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 - to:main::@5 -main::@5: scope:[main] from main::@1 main::@6 - [7] (byte) main::c1#2 ← phi( main::@6/(byte) main::c1#1 main::@1/(byte) 0 ) - [8] if((byte) main::c1#2<(byte) $28) goto main::@6 - to:main::@return -main::@return: scope:[main] from main::@5 - [9] return - to:@return -main::@6: scope:[main] from main::@5 - [10] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#2 - [11] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 - [12] *((byte*~) main::$9) ← (byte) ' ' - [13] (byte) main::c1#1 ← ++ (byte) main::c1#2 - to:main::@5 -main::@2: scope:[main] from main::@1 main::@3 - [14] (byte) main::c#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::c#1 ) - [15] if((byte) main::c#2<(byte) $28) goto main::@3 - to:main::@4 -main::@4: scope:[main] from main::@2 - [16] (word) main::line#2 ← (word) main::line#10 + (byte) $28 - to:main::@1 -main::@3: scope:[main] from main::@2 - [17] (word~) main::$2 ← (word) main::line#10 + (byte) main::c#2 - [18] (word~) main::$4 ← (word) main::line#10 + (byte) main::c#2 - [19] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 - [20] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 - [21] *((byte*~) main::$8) ← *((byte*~) main::$7) - [22] (byte) main::c#1 ← ++ (byte) main::c#2 to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (word) main::line#15 ← phi( main::@1/(word) main::line#10 main/(byte) 0 ) + to:main::@4 +main::@4: scope:[main] from main::@2 main::@3 + [6] (byte) main::c#4 ← phi( main::@3/(byte) main::c#1 main::@2/(byte) 0 ) + [7] (word~) main::$2 ← (word) main::line#15 + (byte) main::c#4 + [8] (word~) main::$4 ← (word) main::line#15 + (byte) main::c#4 + [9] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 + [10] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 + [11] *((byte*~) main::$8) ← *((byte*~) main::$7) + [12] (byte) main::c#1 ← ++ (byte) main::c#4 + to:main::@3 +main::@3: scope:[main] from main::@4 + [13] if((byte) main::c#1<(byte) $28) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 + [14] (word) main::line#10 ← (word) main::line#15 + (byte) $28 + to:main::@1 +main::@1: scope:[main] from main::@5 + [15] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 + to:main::@7 +main::@7: scope:[main] from main::@1 main::@6 + [16] (byte) main::c1#4 ← phi( main::@6/(byte) main::c1#1 main::@1/(byte) 0 ) + [17] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#4 + [18] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 + [19] *((byte*~) main::$9) ← (byte) ' ' + [20] (byte) main::c1#1 ← ++ (byte) main::c1#4 + to:main::@6 +main::@6: scope:[main] from main::@7 + [21] if((byte) main::c1#1<(byte) $28) goto main::@7 + to:main::@return +main::@return: scope:[main] from main::@6 + [22] return + to:@return diff --git a/src/test/ref/test-word-size-arrays.log b/src/test/ref/test-word-size-arrays.log index 4271cfbac..3fb9b97c6 100644 --- a/src/test/ref/test-word-size-arrays.log +++ b/src/test/ref/test-word-size-arrays.log @@ -178,6 +178,32 @@ De-inlining pointer[w] to *(pointer+w) [26] *((const byte*) main::screen#0 + ( Successful SSA optimization Pass2DeInlineWordDerefIdx Eliminating unused constant (const word) main::line#0 Successful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (word) main::line#10 = (word) main::line#2 +Alias (byte) main::c#1 = (byte) main::c#2 +Alias (word) main::line#11 = (word) main::line#14 +Alias (byte) main::c1#1 = (byte) main::c1#2 +Alias (word) main::line#13 = (word) main::line#16 +Alias (word) main::line#15 = (word) main::line#17 +Alias (word) main::line#18 = (word) main::line#20 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (word) main::line#11 (word) main::line#15 +Identical Phi Values (word) main::line#13 (word) main::line#18 +Identical Phi Values (byte) main::c#5 (const byte) main::c#0 +Identical Phi Values (word) main::line#19 (const word) main::line#1 +Identical Phi Values (byte) main::c1#5 (const byte) main::c1#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (word) main::line#12 (word) main::line#15 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [27] if((const byte) main::c#0<(byte) $28) goto main::@5 +Removing PHI-reference to removed block (main::@1_1) in block main::@3 +if() condition always true - replacing block destination [29] if((const word) main::line#1<(word)(number) $28*(number) $18) goto main::@2 +if() condition always true - replacing block destination [31] if((const byte) main::c1#0<(byte) $28) goto main::@14 +Successful SSA optimization Pass2ConstantIfs +Alias (word) main::line#10 = (word) main::line#18 +Successful SSA optimization Pass2AliasElimination 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::c1#0 @@ -189,29 +215,39 @@ Consolidated constant in assignment main::$7 Successful SSA optimization Pass2ConstantAdditionElimination Alias (word~) main::$4 = (word~) main::$3 Successful SSA optimization Pass2AliasElimination +Added new block during phi lifting main::@19(between main::@1 and main::@2) +Added new block during phi lifting main::@20(between main::@4 and main::@5) +Added new block during phi lifting main::@21(between main::@13 and main::@14) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 +Adding NOP phi() at start of main::@4_1 Adding NOP phi() at start of main::@3 -Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@13_1 CALL GRAPH Calls in [] to main:2 Created 3 initial phi equivalence classes -Coalesced [16] main::c1#4 ← main::c1#1 -Coalesced [21] main::line#11 ← main::line#2 -Coalesced [28] main::c#4 ← main::c#1 +Coalesced [28] main::c1#6 ← main::c1#1 +Coalesced [29] main::line#21 ← main::line#10 +Coalesced [30] main::c#6 ← main::c#1 Coalesced down to 3 phi equivalence classes Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@4_1 Culled Empty Block (label) main::@3 -Culled Empty Block (label) main::@2 -Renumbering block main::@4 to main::@2 -Renumbering block main::@5 to main::@3 -Renumbering block main::@6 to main::@4 -Renumbering block main::@13 to main::@5 -Renumbering block main::@14 to main::@6 +Culled Empty Block (label) main::@13_1 +Culled Empty Block (label) main::@21 +Culled Empty Block (label) main::@19 +Culled Empty Block (label) main::@20 +Renumbering block main::@4 to main::@3 +Renumbering block main::@5 to main::@4 +Renumbering block main::@6 to main::@5 +Renumbering block main::@13 to main::@6 +Renumbering block main::@14 to main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -229,39 +265,41 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@4 - [5] (word) main::line#10 ← phi( main/(byte) 0 main::@4/(word) main::line#2 ) - [6] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 - to:main::@5 -main::@5: scope:[main] from main::@1 main::@6 - [7] (byte) main::c1#2 ← phi( main::@6/(byte) main::c1#1 main::@1/(byte) 0 ) - [8] if((byte) main::c1#2<(byte) $28) goto main::@6 - to:main::@return -main::@return: scope:[main] from main::@5 - [9] return - to:@return -main::@6: scope:[main] from main::@5 - [10] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#2 - [11] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 - [12] *((byte*~) main::$9) ← (byte) ' ' - [13] (byte) main::c1#1 ← ++ (byte) main::c1#2 - to:main::@5 -main::@2: scope:[main] from main::@1 main::@3 - [14] (byte) main::c#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::c#1 ) - [15] if((byte) main::c#2<(byte) $28) goto main::@3 - to:main::@4 -main::@4: scope:[main] from main::@2 - [16] (word) main::line#2 ← (word) main::line#10 + (byte) $28 - to:main::@1 -main::@3: scope:[main] from main::@2 - [17] (word~) main::$2 ← (word) main::line#10 + (byte) main::c#2 - [18] (word~) main::$4 ← (word) main::line#10 + (byte) main::c#2 - [19] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 - [20] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 - [21] *((byte*~) main::$8) ← *((byte*~) main::$7) - [22] (byte) main::c#1 ← ++ (byte) main::c#2 to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (word) main::line#15 ← phi( main::@1/(word) main::line#10 main/(byte) 0 ) + to:main::@4 +main::@4: scope:[main] from main::@2 main::@3 + [6] (byte) main::c#4 ← phi( main::@3/(byte) main::c#1 main::@2/(byte) 0 ) + [7] (word~) main::$2 ← (word) main::line#15 + (byte) main::c#4 + [8] (word~) main::$4 ← (word) main::line#15 + (byte) main::c#4 + [9] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 + [10] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 + [11] *((byte*~) main::$8) ← *((byte*~) main::$7) + [12] (byte) main::c#1 ← ++ (byte) main::c#4 + to:main::@3 +main::@3: scope:[main] from main::@4 + [13] if((byte) main::c#1<(byte) $28) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 + [14] (word) main::line#10 ← (word) main::line#15 + (byte) $28 + to:main::@1 +main::@1: scope:[main] from main::@5 + [15] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 + to:main::@7 +main::@7: scope:[main] from main::@1 main::@6 + [16] (byte) main::c1#4 ← phi( main::@6/(byte) main::c1#1 main::@1/(byte) 0 ) + [17] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#4 + [18] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 + [19] *((byte*~) main::$9) ← (byte) ' ' + [20] (byte) main::c1#1 ← ++ (byte) main::c1#4 + to:main::@6 +main::@6: scope:[main] from main::@7 + [21] if((byte) main::c1#1<(byte) $28) goto main::@7 + to:main::@return +main::@return: scope:[main] from main::@6 + [22] return + to:@return VARIABLE REGISTER WEIGHTS @@ -273,45 +311,45 @@ VARIABLE REGISTER WEIGHTS (byte*~) main::$8 202.0 (byte*~) main::$9 22.0 (byte) main::c -(byte) main::c#1 202.0 -(byte) main::c#2 72.14285714285714 +(byte) main::c#1 151.5 +(byte) main::c#4 67.33333333333333 (byte) main::c1 -(byte) main::c1#1 22.0 -(byte) main::c1#2 8.8 +(byte) main::c1#1 16.5 +(byte) main::c1#4 8.25 (word) main::line -(word) main::line#10 15.375 -(word) main::line#2 22.0 +(word) main::line#10 5.5 +(word) main::line#15 24.888888888888886 (byte*) main::screen Initial phi equivalence classes -[ main::line#10 main::line#2 ] -[ main::c1#2 main::c1#1 ] -[ main::c#2 main::c#1 ] -Added variable main::$6 to zero page equivalence class [ main::$6 ] -Added variable main::$9 to zero page equivalence class [ main::$9 ] +[ main::line#15 main::line#10 ] +[ main::c#4 main::c#1 ] +[ main::c1#4 main::c1#1 ] Added variable main::$2 to zero page equivalence class [ main::$2 ] Added variable main::$4 to zero page equivalence class [ main::$4 ] Added variable main::$7 to zero page equivalence class [ main::$7 ] Added variable main::$8 to zero page equivalence class [ main::$8 ] +Added variable main::$6 to zero page equivalence class [ main::$6 ] +Added variable main::$9 to zero page equivalence class [ main::$9 ] Complete equivalence classes -[ main::line#10 main::line#2 ] -[ main::c1#2 main::c1#1 ] -[ main::c#2 main::c#1 ] -[ main::$6 ] -[ main::$9 ] +[ main::line#15 main::line#10 ] +[ main::c#4 main::c#1 ] +[ main::c1#4 main::c1#1 ] [ main::$2 ] [ main::$4 ] [ main::$7 ] [ main::$8 ] -Allocated zp ZP_WORD:2 [ main::line#10 main::line#2 ] -Allocated zp ZP_BYTE:4 [ main::c1#2 main::c1#1 ] -Allocated zp ZP_BYTE:5 [ main::c#2 main::c#1 ] -Allocated zp ZP_WORD:6 [ main::$6 ] -Allocated zp ZP_WORD:8 [ main::$9 ] -Allocated zp ZP_WORD:10 [ main::$2 ] -Allocated zp ZP_WORD:12 [ main::$4 ] -Allocated zp ZP_WORD:14 [ main::$7 ] -Allocated zp ZP_WORD:16 [ main::$8 ] +[ main::$6 ] +[ main::$9 ] +Allocated zp ZP_WORD:2 [ main::line#15 main::line#10 ] +Allocated zp ZP_BYTE:4 [ main::c#4 main::c#1 ] +Allocated zp ZP_BYTE:5 [ main::c1#4 main::c1#1 ] +Allocated zp ZP_WORD:6 [ main::$2 ] +Allocated zp ZP_WORD:8 [ main::$4 ] +Allocated zp ZP_WORD:10 [ main::$7 ] +Allocated zp ZP_WORD:12 [ main::$8 ] +Allocated zp ZP_WORD:14 [ main::$6 ] +Allocated zp ZP_WORD:16 [ main::$9 ] INITIAL ASM Target platform is c64basic @@ -340,26 +378,102 @@ bend: // main main: { .label screen = $400 - .label _2 = $a - .label _4 = $c - .label _6 = 6 - .label c = 5 + .label _2 = 6 + .label _4 = 8 + .label _6 = $e + .label c = 4 + .label c1 = 5 .label line = 2 - .label c1 = 4 - .label _7 = $e - .label _8 = $10 - .label _9 = 8 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (word) main::line#10 = (byte) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 + .label _7 = $a + .label _8 = $c + .label _9 = $10 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (word) main::line#15 = (byte) 0 [phi:main->main::@2#0] -- vwuz1=vbuc1 lda #<0 sta line lda #>0 sta line+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (word) main::line#15 = (word) main::line#10 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + b4_from_b2: + // [6] phi (byte) main::c#4 = (byte) 0 [phi:main::@2->main::@4#0] -- vbuz1=vbuc1 + lda #0 + sta c + jmp b4 + // [6] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + b4_from_b3: + // [6] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@3->main::@4#0] -- register_copy + jmp b4 + // main::@4 + b4: + // [7] (word~) main::$2 ← (word) main::line#15 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuz3 + lda c + clc + adc line + sta _2 + lda #0 + adc line+1 + sta _2+1 + // [8] (word~) main::$4 ← (word) main::line#15 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuz3 + lda c + clc + adc line + sta _4 + lda #0 + adc line+1 + sta _4+1 + // [9] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz2 + lda _4 + clc + adc #screen+$28 + sta _7+1 + // [10] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 -- pbuz1=pbuc1_plus_vwuz2 + lda _2 + clc + adc #screen + sta _8+1 + // [11] *((byte*~) main::$8) ← *((byte*~) main::$7) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (_7),y + ldy #0 + sta (_8),y + // [12] (byte) main::c#1 ← ++ (byte) main::c#4 -- vbuz1=_inc_vbuz1 + inc c + jmp b3 + // main::@3 + b3: + // [13] if((byte) main::c#1<(byte) $28) goto main::@4 -- vbuz1_lt_vbuc1_then_la1 + lda c + cmp #$28 + bcc b4_from_b3 + jmp b5 + // main::@5 + b5: + // [14] (word) main::line#10 ← (word) main::line#15 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: jmp b1 // main::@1 b1: - // [6] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 + // [15] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 lda line+1 cmp #>$28*$18 bcc b2_from_b1 @@ -368,27 +482,19 @@ main: { cmp #<$28*$18 bcc b2_from_b1 !: - // [7] phi from main::@1 to main::@5 [phi:main::@1->main::@5] - b5_from_b1: - // [7] phi (byte) main::c1#2 = (byte) 0 [phi:main::@1->main::@5#0] -- vbuz1=vbuc1 + // [16] phi from main::@1 to main::@7 [phi:main::@1->main::@7] + b7_from_b1: + // [16] phi (byte) main::c1#4 = (byte) 0 [phi:main::@1->main::@7#0] -- vbuz1=vbuc1 lda #0 sta c1 - jmp b5 - // Cleare the bottom line - // main::@5 - b5: - // [8] if((byte) main::c1#2<(byte) $28) goto main::@6 -- vbuz1_lt_vbuc1_then_la1 - lda c1 - cmp #$28 - bcc b6 - jmp breturn - // main::@return - breturn: - // [9] return - rts - // main::@6 - b6: - // [10] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#2 -- vwuz1=vwuz2_plus_vbuz3 + jmp b7 + // [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + b7_from_b6: + // [16] phi (byte) main::c1#4 = (byte) main::c1#1 [phi:main::@6->main::@7#0] -- register_copy + jmp b7 + // main::@7 + b7: + // [17] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#4 -- vwuz1=vwuz2_plus_vbuz3 lda c1 clc adc line @@ -396,7 +502,7 @@ main: { lda #0 adc line+1 sta _6+1 - // [11] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 -- pbuz1=pbuc1_plus_vwuz2 + // [18] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 -- pbuz1=pbuc1_plus_vwuz2 lda _6 clc adc #screen sta _9+1 - // [12] *((byte*~) main::$9) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + // [19] *((byte*~) main::$9) ← (byte) ' ' -- _deref_pbuz1=vbuc1 lda #' ' ldy #0 sta (_9),y - // [13] (byte) main::c1#1 ← ++ (byte) main::c1#2 -- vbuz1=_inc_vbuz1 + // [20] (byte) main::c1#1 ← ++ (byte) main::c1#4 -- vbuz1=_inc_vbuz1 inc c1 - // [7] phi from main::@6 to main::@5 [phi:main::@6->main::@5] - b5_from_b6: - // [7] phi (byte) main::c1#2 = (byte) main::c1#1 [phi:main::@6->main::@5#0] -- register_copy - jmp b5 - // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - b2_from_b1: - // [14] phi (byte) main::c#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 - lda #0 - sta c - jmp b2 - // main::@2 - b2: - // [15] if((byte) main::c#2<(byte) $28) goto main::@3 -- vbuz1_lt_vbuc1_then_la1 - lda c + jmp b6 + // Cleare the bottom line + // main::@6 + b6: + // [21] if((byte) main::c1#1<(byte) $28) goto main::@7 -- vbuz1_lt_vbuc1_then_la1 + lda c1 cmp #$28 - bcc b3 - jmp b4 - // main::@4 - b4: - // [16] (word) main::line#2 ← (word) main::line#10 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - // [5] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [5] phi (word) main::line#10 = (word) main::line#2 [phi:main::@4->main::@1#0] -- register_copy - jmp b1 - // main::@3 - b3: - // [17] (word~) main::$2 ← (word) main::line#10 + (byte) main::c#2 -- vwuz1=vwuz2_plus_vbuz3 - lda c - clc - adc line - sta _2 - lda #0 - adc line+1 - sta _2+1 - // [18] (word~) main::$4 ← (word) main::line#10 + (byte) main::c#2 -- vwuz1=vwuz2_plus_vbuz3 - lda c - clc - adc line - sta _4 - lda #0 - adc line+1 - sta _4+1 - // [19] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz2 - lda _4 - clc - adc #screen+$28 - sta _7+1 - // [20] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 -- pbuz1=pbuc1_plus_vwuz2 - lda _2 - clc - adc #screen - sta _8+1 - // [21] *((byte*~) main::$8) ← *((byte*~) main::$7) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (_7),y - ldy #0 - sta (_8),y - // [22] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuz1=_inc_vbuz1 - inc c - // [14] phi from main::@3 to main::@2 [phi:main::@3->main::@2] - b2_from_b3: - // [14] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@3->main::@2#0] -- register_copy - jmp b2 + bcc b7_from_b6 + jmp breturn + // main::@return + breturn: + // [22] return + rts } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 [ main::line#10 ] ( main:2 [ main::line#10 ] ) always clobbers reg byte a -Statement [10] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#2 [ main::line#10 main::c1#2 main::$6 ] ( main:2 [ main::line#10 main::c1#2 main::$6 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::c1#2 main::c1#1 ] -Statement [11] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 [ main::line#10 main::c1#2 main::$9 ] ( main:2 [ main::line#10 main::c1#2 main::$9 ] ) always clobbers reg byte a -Statement [12] *((byte*~) main::$9) ← (byte) ' ' [ main::line#10 main::c1#2 ] ( main:2 [ main::line#10 main::c1#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ main::c1#2 main::c1#1 ] -Statement [16] (word) main::line#2 ← (word) main::line#10 + (byte) $28 [ main::line#2 ] ( main:2 [ main::line#2 ] ) always clobbers reg byte a -Statement [17] (word~) main::$2 ← (word) main::line#10 + (byte) main::c#2 [ main::line#10 main::c#2 main::$2 ] ( main:2 [ main::line#10 main::c#2 main::$2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::c#2 main::c#1 ] -Statement [18] (word~) main::$4 ← (word) main::line#10 + (byte) main::c#2 [ main::line#10 main::c#2 main::$2 main::$4 ] ( main:2 [ main::line#10 main::c#2 main::$2 main::$4 ] ) always clobbers reg byte a -Statement [19] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 [ main::line#10 main::c#2 main::$2 main::$7 ] ( main:2 [ main::line#10 main::c#2 main::$2 main::$7 ] ) always clobbers reg byte a -Statement [20] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 [ main::line#10 main::c#2 main::$7 main::$8 ] ( main:2 [ main::line#10 main::c#2 main::$7 main::$8 ] ) always clobbers reg byte a -Statement [21] *((byte*~) main::$8) ← *((byte*~) main::$7) [ main::line#10 main::c#2 ] ( main:2 [ main::line#10 main::c#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ main::c#2 main::c#1 ] -Statement [6] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 [ main::line#10 ] ( main:2 [ main::line#10 ] ) always clobbers reg byte a -Statement [10] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#2 [ main::line#10 main::c1#2 main::$6 ] ( main:2 [ main::line#10 main::c1#2 main::$6 ] ) always clobbers reg byte a -Statement [11] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 [ main::line#10 main::c1#2 main::$9 ] ( main:2 [ main::line#10 main::c1#2 main::$9 ] ) always clobbers reg byte a -Statement [12] *((byte*~) main::$9) ← (byte) ' ' [ main::line#10 main::c1#2 ] ( main:2 [ main::line#10 main::c1#2 ] ) always clobbers reg byte a reg byte y -Statement [16] (word) main::line#2 ← (word) main::line#10 + (byte) $28 [ main::line#2 ] ( main:2 [ main::line#2 ] ) always clobbers reg byte a -Statement [17] (word~) main::$2 ← (word) main::line#10 + (byte) main::c#2 [ main::line#10 main::c#2 main::$2 ] ( main:2 [ main::line#10 main::c#2 main::$2 ] ) always clobbers reg byte a -Statement [18] (word~) main::$4 ← (word) main::line#10 + (byte) main::c#2 [ main::line#10 main::c#2 main::$2 main::$4 ] ( main:2 [ main::line#10 main::c#2 main::$2 main::$4 ] ) always clobbers reg byte a -Statement [19] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 [ main::line#10 main::c#2 main::$2 main::$7 ] ( main:2 [ main::line#10 main::c#2 main::$2 main::$7 ] ) always clobbers reg byte a -Statement [20] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 [ main::line#10 main::c#2 main::$7 main::$8 ] ( main:2 [ main::line#10 main::c#2 main::$7 main::$8 ] ) always clobbers reg byte a -Statement [21] *((byte*~) main::$8) ← *((byte*~) main::$7) [ main::line#10 main::c#2 ] ( main:2 [ main::line#10 main::c#2 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_WORD:2 [ main::line#10 main::line#2 ] : zp ZP_WORD:2 , -Potential registers zp ZP_BYTE:4 [ main::c1#2 main::c1#1 ] : zp ZP_BYTE:4 , reg byte x , -Potential registers zp ZP_BYTE:5 [ main::c#2 main::c#1 ] : zp ZP_BYTE:5 , reg byte x , -Potential registers zp ZP_WORD:6 [ main::$6 ] : zp ZP_WORD:6 , -Potential registers zp ZP_WORD:8 [ main::$9 ] : zp ZP_WORD:8 , -Potential registers zp ZP_WORD:10 [ main::$2 ] : zp ZP_WORD:10 , -Potential registers zp ZP_WORD:12 [ main::$4 ] : zp ZP_WORD:12 , -Potential registers zp ZP_WORD:14 [ main::$7 ] : zp ZP_WORD:14 , -Potential registers zp ZP_WORD:16 [ main::$8 ] : zp ZP_WORD:16 , +Statement [7] (word~) main::$2 ← (word) main::line#15 + (byte) main::c#4 [ main::line#15 main::c#4 main::$2 ] ( main:2 [ main::line#15 main::c#4 main::$2 ] ) 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::$4 ← (word) main::line#15 + (byte) main::c#4 [ main::line#15 main::c#4 main::$2 main::$4 ] ( main:2 [ main::line#15 main::c#4 main::$2 main::$4 ] ) always clobbers reg byte a +Statement [9] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 [ main::line#15 main::c#4 main::$2 main::$7 ] ( main:2 [ main::line#15 main::c#4 main::$2 main::$7 ] ) always clobbers reg byte a +Statement [10] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 [ main::line#15 main::c#4 main::$7 main::$8 ] ( main:2 [ main::line#15 main::c#4 main::$7 main::$8 ] ) always clobbers reg byte a +Statement [11] *((byte*~) main::$8) ← *((byte*~) main::$7) [ main::line#15 main::c#4 ] ( main:2 [ main::line#15 main::c#4 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ main::c#4 main::c#1 ] +Statement [14] (word) main::line#10 ← (word) main::line#15 + (byte) $28 [ main::line#10 ] ( main:2 [ main::line#10 ] ) always clobbers reg byte a +Statement [15] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 [ main::line#10 ] ( main:2 [ main::line#10 ] ) always clobbers reg byte a +Statement [17] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#4 [ main::line#10 main::c1#4 main::$6 ] ( main:2 [ main::line#10 main::c1#4 main::$6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::c1#4 main::c1#1 ] +Statement [18] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 [ main::line#10 main::c1#4 main::$9 ] ( main:2 [ main::line#10 main::c1#4 main::$9 ] ) always clobbers reg byte a +Statement [19] *((byte*~) main::$9) ← (byte) ' ' [ main::line#10 main::c1#4 ] ( main:2 [ main::line#10 main::c1#4 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ main::c1#4 main::c1#1 ] +Statement [7] (word~) main::$2 ← (word) main::line#15 + (byte) main::c#4 [ main::line#15 main::c#4 main::$2 ] ( main:2 [ main::line#15 main::c#4 main::$2 ] ) always clobbers reg byte a +Statement [8] (word~) main::$4 ← (word) main::line#15 + (byte) main::c#4 [ main::line#15 main::c#4 main::$2 main::$4 ] ( main:2 [ main::line#15 main::c#4 main::$2 main::$4 ] ) always clobbers reg byte a +Statement [9] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 [ main::line#15 main::c#4 main::$2 main::$7 ] ( main:2 [ main::line#15 main::c#4 main::$2 main::$7 ] ) always clobbers reg byte a +Statement [10] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 [ main::line#15 main::c#4 main::$7 main::$8 ] ( main:2 [ main::line#15 main::c#4 main::$7 main::$8 ] ) always clobbers reg byte a +Statement [11] *((byte*~) main::$8) ← *((byte*~) main::$7) [ main::line#15 main::c#4 ] ( main:2 [ main::line#15 main::c#4 ] ) always clobbers reg byte a reg byte y +Statement [14] (word) main::line#10 ← (word) main::line#15 + (byte) $28 [ main::line#10 ] ( main:2 [ main::line#10 ] ) always clobbers reg byte a +Statement [15] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 [ main::line#10 ] ( main:2 [ main::line#10 ] ) always clobbers reg byte a +Statement [17] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#4 [ main::line#10 main::c1#4 main::$6 ] ( main:2 [ main::line#10 main::c1#4 main::$6 ] ) always clobbers reg byte a +Statement [18] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 [ main::line#10 main::c1#4 main::$9 ] ( main:2 [ main::line#10 main::c1#4 main::$9 ] ) always clobbers reg byte a +Statement [19] *((byte*~) main::$9) ← (byte) ' ' [ main::line#10 main::c1#4 ] ( main:2 [ main::line#10 main::c1#4 ] ) always clobbers reg byte a reg byte y +Potential registers zp ZP_WORD:2 [ main::line#15 main::line#10 ] : zp ZP_WORD:2 , +Potential registers zp ZP_BYTE:4 [ main::c#4 main::c#1 ] : zp ZP_BYTE:4 , reg byte x , +Potential registers zp ZP_BYTE:5 [ main::c1#4 main::c1#1 ] : zp ZP_BYTE:5 , reg byte x , +Potential registers zp ZP_WORD:6 [ main::$2 ] : zp ZP_WORD:6 , +Potential registers zp ZP_WORD:8 [ main::$4 ] : zp ZP_WORD:8 , +Potential registers zp ZP_WORD:10 [ main::$7 ] : zp ZP_WORD:10 , +Potential registers zp ZP_WORD:12 [ main::$8 ] : zp ZP_WORD:12 , +Potential registers zp ZP_WORD:14 [ main::$6 ] : zp ZP_WORD:14 , +Potential registers zp ZP_WORD:16 [ main::$9 ] : zp ZP_WORD:16 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 274.14: zp ZP_BYTE:5 [ main::c#2 main::c#1 ] 202: zp ZP_WORD:12 [ main::$4 ] 202: zp ZP_WORD:16 [ main::$8 ] 101: zp ZP_WORD:14 [ main::$7 ] 67.33: zp ZP_WORD:10 [ main::$2 ] 37.38: zp ZP_WORD:2 [ main::line#10 main::line#2 ] 30.8: zp ZP_BYTE:4 [ main::c1#2 main::c1#1 ] 22: zp ZP_WORD:6 [ main::$6 ] 22: zp ZP_WORD:8 [ main::$9 ] +Uplift Scope [main] 218.83: zp ZP_BYTE:4 [ main::c#4 main::c#1 ] 202: zp ZP_WORD:8 [ main::$4 ] 202: zp ZP_WORD:12 [ main::$8 ] 101: zp ZP_WORD:10 [ main::$7 ] 67.33: zp ZP_WORD:6 [ main::$2 ] 30.39: zp ZP_WORD:2 [ main::line#15 main::line#10 ] 24.75: zp ZP_BYTE:5 [ main::c1#4 main::c1#1 ] 22: zp ZP_WORD:14 [ main::$6 ] 22: zp ZP_WORD:16 [ main::$9 ] Uplift Scope [] -Uplifting [main] best 11663 combination reg byte x [ main::c#2 main::c#1 ] zp ZP_WORD:12 [ main::$4 ] zp ZP_WORD:16 [ main::$8 ] zp ZP_WORD:14 [ main::$7 ] zp ZP_WORD:10 [ main::$2 ] zp ZP_WORD:2 [ main::line#10 main::line#2 ] reg byte x [ main::c1#2 main::c1#1 ] zp ZP_WORD:6 [ main::$6 ] zp ZP_WORD:8 [ main::$9 ] -Uplifting [] best 11663 combination -Coalescing zero page register [ zp ZP_WORD:6 [ main::$6 ] ] with [ zp ZP_WORD:8 [ main::$9 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:10 [ main::$2 ] ] with [ zp ZP_WORD:16 [ main::$8 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:12 [ main::$4 ] ] with [ zp ZP_WORD:14 [ main::$7 ] ] - score: 1 -Allocated (was zp ZP_WORD:6) zp ZP_WORD:4 [ main::$6 main::$9 ] -Allocated (was zp ZP_WORD:10) zp ZP_WORD:6 [ main::$2 main::$8 ] -Allocated (was zp ZP_WORD:12) zp ZP_WORD:8 [ main::$4 main::$7 ] +Uplifting [main] best 12023 combination reg byte x [ main::c#4 main::c#1 ] zp ZP_WORD:8 [ main::$4 ] zp ZP_WORD:12 [ main::$8 ] zp ZP_WORD:10 [ main::$7 ] zp ZP_WORD:6 [ main::$2 ] zp ZP_WORD:2 [ main::line#15 main::line#10 ] reg byte x [ main::c1#4 main::c1#1 ] zp ZP_WORD:14 [ main::$6 ] zp ZP_WORD:16 [ main::$9 ] +Uplifting [] best 12023 combination +Coalescing zero page register [ zp ZP_WORD:6 [ main::$2 ] ] with [ zp ZP_WORD:12 [ main::$8 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:8 [ main::$4 ] ] with [ zp ZP_WORD:10 [ main::$7 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:14 [ main::$6 ] ] with [ zp ZP_WORD:16 [ main::$9 ] ] - score: 1 +Allocated (was zp ZP_WORD:6) zp ZP_WORD:4 [ main::$2 main::$8 ] +Allocated (was zp ZP_WORD:8) zp ZP_WORD:6 [ main::$4 main::$7 ] +Allocated (was zp ZP_WORD:14) zp ZP_WORD:8 [ main::$6 main::$9 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -563,24 +606,98 @@ bend: // main main: { .label screen = $400 - .label _2 = 6 - .label _4 = 8 - .label _6 = 4 + .label _2 = 4 + .label _4 = 6 + .label _6 = 8 .label line = 2 - .label _7 = 8 - .label _8 = 6 - .label _9 = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (word) main::line#10 = (byte) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 + .label _7 = 6 + .label _8 = 4 + .label _9 = 8 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (word) main::line#15 = (byte) 0 [phi:main->main::@2#0] -- vwuz1=vbuc1 lda #<0 sta line lda #>0 sta line+1 + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (word) main::line#15 = (word) main::line#10 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + b4_from_b2: + // [6] phi (byte) main::c#4 = (byte) 0 [phi:main::@2->main::@4#0] -- vbuxx=vbuc1 + ldx #0 + jmp b4 + // [6] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + b4_from_b3: + // [6] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@3->main::@4#0] -- register_copy + jmp b4 + // main::@4 + b4: + // [7] (word~) main::$2 ← (word) main::line#15 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuxx + txa + clc + adc line + sta _2 + lda #0 + adc line+1 + sta _2+1 + // [8] (word~) main::$4 ← (word) main::line#15 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuxx + txa + clc + adc line + sta _4 + lda #0 + adc line+1 + sta _4+1 + // [9] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz1 + clc + lda _7 + adc #screen+$28 + sta _7+1 + // [10] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 -- pbuz1=pbuc1_plus_vwuz1 + clc + lda _8 + adc #screen + sta _8+1 + // [11] *((byte*~) main::$8) ← *((byte*~) main::$7) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (_7),y + ldy #0 + sta (_8),y + // [12] (byte) main::c#1 ← ++ (byte) main::c#4 -- vbuxx=_inc_vbuxx + inx + jmp b3 + // main::@3 + b3: + // [13] if((byte) main::c#1<(byte) $28) goto main::@4 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc b4_from_b3 + jmp b5 + // main::@5 + b5: + // [14] (word) main::line#10 ← (word) main::line#15 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: jmp b1 // main::@1 b1: - // [6] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 + // [15] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 lda line+1 cmp #>$28*$18 bcc b2_from_b1 @@ -589,25 +706,18 @@ main: { cmp #<$28*$18 bcc b2_from_b1 !: - // [7] phi from main::@1 to main::@5 [phi:main::@1->main::@5] - b5_from_b1: - // [7] phi (byte) main::c1#2 = (byte) 0 [phi:main::@1->main::@5#0] -- vbuxx=vbuc1 + // [16] phi from main::@1 to main::@7 [phi:main::@1->main::@7] + b7_from_b1: + // [16] phi (byte) main::c1#4 = (byte) 0 [phi:main::@1->main::@7#0] -- vbuxx=vbuc1 ldx #0 - jmp b5 - // Cleare the bottom line - // main::@5 - b5: - // [8] if((byte) main::c1#2<(byte) $28) goto main::@6 -- vbuxx_lt_vbuc1_then_la1 - cpx #$28 - bcc b6 - jmp breturn - // main::@return - breturn: - // [9] return - rts - // main::@6 - b6: - // [10] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#2 -- vwuz1=vwuz2_plus_vbuxx + jmp b7 + // [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + b7_from_b6: + // [16] phi (byte) main::c1#4 = (byte) main::c1#1 [phi:main::@6->main::@7#0] -- register_copy + jmp b7 + // main::@7 + b7: + // [17] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#4 -- vwuz1=vwuz2_plus_vbuxx txa clc adc line @@ -615,7 +725,7 @@ main: { lda #0 adc line+1 sta _6+1 - // [11] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 -- pbuz1=pbuc1_plus_vwuz1 + // [18] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 -- pbuz1=pbuc1_plus_vwuz1 clc lda _9 adc #screen sta _9+1 - // [12] *((byte*~) main::$9) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + // [19] *((byte*~) main::$9) ← (byte) ' ' -- _deref_pbuz1=vbuc1 lda #' ' ldy #0 sta (_9),y - // [13] (byte) main::c1#1 ← ++ (byte) main::c1#2 -- vbuxx=_inc_vbuxx + // [20] (byte) main::c1#1 ← ++ (byte) main::c1#4 -- vbuxx=_inc_vbuxx inx - // [7] phi from main::@6 to main::@5 [phi:main::@6->main::@5] - b5_from_b6: - // [7] phi (byte) main::c1#2 = (byte) main::c1#1 [phi:main::@6->main::@5#0] -- register_copy - jmp b5 - // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - b2_from_b1: - // [14] phi (byte) main::c#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 - ldx #0 - jmp b2 - // main::@2 - b2: - // [15] if((byte) main::c#2<(byte) $28) goto main::@3 -- vbuxx_lt_vbuc1_then_la1 + jmp b6 + // Cleare the bottom line + // main::@6 + b6: + // [21] if((byte) main::c1#1<(byte) $28) goto main::@7 -- vbuxx_lt_vbuc1_then_la1 cpx #$28 - bcc b3 - jmp b4 - // main::@4 - b4: - // [16] (word) main::line#2 ← (word) main::line#10 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - // [5] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [5] phi (word) main::line#10 = (word) main::line#2 [phi:main::@4->main::@1#0] -- register_copy - jmp b1 - // main::@3 - b3: - // [17] (word~) main::$2 ← (word) main::line#10 + (byte) main::c#2 -- vwuz1=vwuz2_plus_vbuxx - txa - clc - adc line - sta _2 - lda #0 - adc line+1 - sta _2+1 - // [18] (word~) main::$4 ← (word) main::line#10 + (byte) main::c#2 -- vwuz1=vwuz2_plus_vbuxx - txa - clc - adc line - sta _4 - lda #0 - adc line+1 - sta _4+1 - // [19] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz1 - clc - lda _7 - adc #screen+$28 - sta _7+1 - // [20] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 -- pbuz1=pbuc1_plus_vwuz1 - clc - lda _8 - adc #screen - sta _8+1 - // [21] *((byte*~) main::$8) ← *((byte*~) main::$7) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (_7),y - ldy #0 - sta (_8),y - // [22] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuxx=_inc_vbuxx - inx - // [14] phi from main::@3 to main::@2 [phi:main::@3->main::@2] - b2_from_b3: - // [14] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@3->main::@2#0] -- register_copy - jmp b2 + bcc b7_from_b6 + jmp breturn + // main::@return + breturn: + // [22] return + rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b1 -Removing instruction jmp b5 -Removing instruction jmp breturn Removing instruction jmp b2 Removing instruction jmp b4 +Removing instruction jmp b3 +Removing instruction jmp b5 +Removing instruction jmp b1 +Removing instruction jmp b7 +Removing instruction jmp b6 +Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #>0 Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b4_from_b3 with b4 +Replacing label b2_from_b1 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b7_from_b6 with b7 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: +Removing instruction b4_from_b2: +Removing instruction b4_from_b3: +Removing instruction b7_from_b6: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b5_from_b1: +Removing instruction b2_from_main: +Removing instruction b3: +Removing instruction b5: +Removing instruction b1: +Removing instruction b7_from_b1: +Removing instruction b6: Removing instruction breturn: -Removing instruction b5_from_b6: -Removing instruction b4: -Removing instruction b1_from_b4: -Removing instruction b2_from_b3: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Relabelling long label b2_from_b1 to b4 -Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b2 +Removing instruction jmp b4 +Removing instruction jmp b7 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -745,41 +806,42 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (void()) main() -(word~) main::$2 $2 zp ZP_WORD:6 67.33333333333333 -(word~) main::$4 $4 zp ZP_WORD:8 202.0 -(word~) main::$6 $6 zp ZP_WORD:4 22.0 -(byte*~) main::$7 $7 zp ZP_WORD:8 101.0 -(byte*~) main::$8 $8 zp ZP_WORD:6 202.0 -(byte*~) main::$9 $9 zp ZP_WORD:4 22.0 +(word~) main::$2 $2 zp ZP_WORD:4 67.33333333333333 +(word~) main::$4 $4 zp ZP_WORD:6 202.0 +(word~) main::$6 $6 zp ZP_WORD:8 22.0 +(byte*~) main::$7 $7 zp ZP_WORD:6 101.0 +(byte*~) main::$8 $8 zp ZP_WORD:4 202.0 +(byte*~) main::$9 $9 zp ZP_WORD:8 22.0 (label) main::@1 (label) main::@2 (label) main::@3 (label) main::@4 (label) main::@5 (label) main::@6 +(label) main::@7 (label) main::@return (byte) main::c -(byte) main::c#1 reg byte x 202.0 -(byte) main::c#2 reg byte x 72.14285714285714 +(byte) main::c#1 reg byte x 151.5 +(byte) main::c#4 reg byte x 67.33333333333333 (byte) main::c1 -(byte) main::c1#1 reg byte x 22.0 -(byte) main::c1#2 reg byte x 8.8 +(byte) main::c1#1 reg byte x 16.5 +(byte) main::c1#4 reg byte x 8.25 (word) main::line -(word) main::line#10 line zp ZP_WORD:2 15.375 -(word) main::line#2 line zp ZP_WORD:2 22.0 +(word) main::line#10 line zp ZP_WORD:2 5.5 +(word) main::line#15 line zp ZP_WORD:2 24.888888888888886 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -zp ZP_WORD:2 [ main::line#10 main::line#2 ] -reg byte x [ main::c1#2 main::c1#1 ] -reg byte x [ main::c#2 main::c#1 ] -zp ZP_WORD:4 [ main::$6 main::$9 ] -zp ZP_WORD:6 [ main::$2 main::$8 ] -zp ZP_WORD:8 [ main::$4 main::$7 ] +zp ZP_WORD:2 [ main::line#15 main::line#10 ] +reg byte x [ main::c#4 main::c#1 ] +reg byte x [ main::c1#4 main::c1#1 ] +zp ZP_WORD:4 [ main::$2 main::$8 ] +zp ZP_WORD:6 [ main::$4 main::$7 ] +zp ZP_WORD:8 [ main::$6 main::$9 ] FINAL ASSEMBLER -Score: 10741 +Score: 10381 // File Comments // Upstart @@ -797,101 +859,31 @@ Score: 10741 // main main: { .label screen = $400 - .label _2 = 6 - .label _4 = 8 - .label _6 = 4 + .label _2 = 4 + .label _4 = 6 + .label _6 = 8 .label line = 2 - .label _7 = 8 - .label _8 = 6 - .label _9 = 4 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (word) main::line#10 = (byte) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 + .label _7 = 6 + .label _8 = 4 + .label _9 = 8 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (word) main::line#15 = (byte) 0 [phi:main->main::@2#0] -- vwuz1=vbuc1 lda #<0 sta line sta line+1 - // main::@1 - b1: - // for (line = 0; line < 40*24; line += 40) - // [6] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 - lda line+1 - cmp #>$28*$18 - bcc b4 - bne !+ - lda line - cmp #<$28*$18 - bcc b4 - !: - // [7] phi from main::@1 to main::@5 [phi:main::@1->main::@5] - // [7] phi (byte) main::c1#2 = (byte) 0 [phi:main::@1->main::@5#0] -- vbuxx=vbuc1 - ldx #0 - // Cleare the bottom line - // main::@5 - b5: - // for (byte c=0; c<40; ++c) - // [8] if((byte) main::c1#2<(byte) $28) goto main::@6 -- vbuxx_lt_vbuc1_then_la1 - cpx #$28 - bcc b6 - // main::@return - // } - // [9] return - rts - // main::@6 - b6: - // line+c - // [10] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#2 -- vwuz1=vwuz2_plus_vbuxx - txa - clc - adc line - sta _6 - lda #0 - adc line+1 - sta _6+1 - // screen[line+c] = ' ' - // [11] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 -- pbuz1=pbuc1_plus_vwuz1 - clc - lda _9 - adc #screen - sta _9+1 - // [12] *((byte*~) main::$9) ← (byte) ' ' -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (_9),y - // for (byte c=0; c<40; ++c) - // [13] (byte) main::c1#1 ← ++ (byte) main::c1#2 -- vbuxx=_inc_vbuxx - inx - // [7] phi from main::@6 to main::@5 [phi:main::@6->main::@5] - // [7] phi (byte) main::c1#2 = (byte) main::c1#1 [phi:main::@6->main::@5#0] -- register_copy - jmp b5 - // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - b4: - // [14] phi (byte) main::c#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 - ldx #0 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (word) main::line#15 = (word) main::line#10 [phi:main::@1->main::@2#0] -- register_copy // main::@2 b2: - // for (byte c=0; c<40; ++c) - // [15] if((byte) main::c#2<(byte) $28) goto main::@3 -- vbuxx_lt_vbuc1_then_la1 - cpx #$28 - bcc b3 + // [6] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + // [6] phi (byte) main::c#4 = (byte) 0 [phi:main::@2->main::@4#0] -- vbuxx=vbuc1 + ldx #0 + // [6] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [6] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@3->main::@4#0] -- register_copy // main::@4 - // line += 40 - // [16] (word) main::line#2 ← (word) main::line#10 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 - lda #$28 - clc - adc line - sta line - bcc !+ - inc line+1 - !: - // [5] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - // [5] phi (word) main::line#10 = (word) main::line#2 [phi:main::@4->main::@1#0] -- register_copy - jmp b1 - // main::@3 - b3: + b4: // line+c - // [17] (word~) main::$2 ← (word) main::line#10 + (byte) main::c#2 -- vwuz1=vwuz2_plus_vbuxx + // [7] (word~) main::$2 ← (word) main::line#15 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuxx txa clc adc line @@ -900,7 +892,7 @@ main: { adc line+1 sta _2+1 // line+c+40 - // [18] (word~) main::$4 ← (word) main::line#10 + (byte) main::c#2 -- vwuz1=vwuz2_plus_vbuxx + // [8] (word~) main::$4 ← (word) main::line#15 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuxx txa clc adc line @@ -909,7 +901,7 @@ main: { adc line+1 sta _4+1 // screen[line+c] = screen[line+c+40] - // [19] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz1 + // [9] (byte*~) main::$7 ← (const byte*) main::screen#0+(byte) $28 + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz1 clc lda _7 adc #screen+$28 sta _7+1 - // [20] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 -- pbuz1=pbuc1_plus_vwuz1 + // [10] (byte*~) main::$8 ← (const byte*) main::screen#0 + (word~) main::$2 -- pbuz1=pbuc1_plus_vwuz1 clc lda _8 adc #screen sta _8+1 - // [21] *((byte*~) main::$8) ← *((byte*~) main::$7) -- _deref_pbuz1=_deref_pbuz2 + // [11] *((byte*~) main::$8) ← *((byte*~) main::$7) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (_7),y sta (_8),y // for (byte c=0; c<40; ++c) - // [22] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuxx=_inc_vbuxx + // [12] (byte) main::c#1 ← ++ (byte) main::c#4 -- vbuxx=_inc_vbuxx inx - // [14] phi from main::@3 to main::@2 [phi:main::@3->main::@2] - // [14] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@3->main::@2#0] -- register_copy - jmp b2 + // main::@3 + // [13] if((byte) main::c#1<(byte) $28) goto main::@4 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc b4 + // main::@5 + // line += 40 + // [14] (word) main::line#10 ← (word) main::line#15 + (byte) $28 -- vwuz1=vwuz1_plus_vbuc1 + lda #$28 + clc + adc line + sta line + bcc !+ + inc line+1 + !: + // main::@1 + // for (line = 0; line < 40*24; line += 40) + // [15] if((word) main::line#10<(word)(number) $28*(number) $18) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 + lda line+1 + cmp #>$28*$18 + bcc b2 + bne !+ + lda line + cmp #<$28*$18 + bcc b2 + !: + // [16] phi from main::@1 to main::@7 [phi:main::@1->main::@7] + // [16] phi (byte) main::c1#4 = (byte) 0 [phi:main::@1->main::@7#0] -- vbuxx=vbuc1 + ldx #0 + // [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + // [16] phi (byte) main::c1#4 = (byte) main::c1#1 [phi:main::@6->main::@7#0] -- register_copy + // main::@7 + b7: + // line+c + // [17] (word~) main::$6 ← (word) main::line#10 + (byte) main::c1#4 -- vwuz1=vwuz2_plus_vbuxx + txa + clc + adc line + sta _6 + lda #0 + adc line+1 + sta _6+1 + // screen[line+c] = ' ' + // [18] (byte*~) main::$9 ← (const byte*) main::screen#0 + (word~) main::$6 -- pbuz1=pbuc1_plus_vwuz1 + clc + lda _9 + adc #screen + sta _9+1 + // [19] *((byte*~) main::$9) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (_9),y + // for (byte c=0; c<40; ++c) + // [20] (byte) main::c1#1 ← ++ (byte) main::c1#4 -- vbuxx=_inc_vbuxx + inx + // Cleare the bottom line + // main::@6 + // [21] if((byte) main::c1#1<(byte) $28) goto main::@7 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc b7 + // main::@return + // } + // [22] return + rts } // File Data diff --git a/src/test/ref/test-word-size-arrays.sym b/src/test/ref/test-word-size-arrays.sym index 5c3f3e6ce..18f938cdc 100644 --- a/src/test/ref/test-word-size-arrays.sym +++ b/src/test/ref/test-word-size-arrays.sym @@ -2,34 +2,35 @@ (label) @begin (label) @end (void()) main() -(word~) main::$2 $2 zp ZP_WORD:6 67.33333333333333 -(word~) main::$4 $4 zp ZP_WORD:8 202.0 -(word~) main::$6 $6 zp ZP_WORD:4 22.0 -(byte*~) main::$7 $7 zp ZP_WORD:8 101.0 -(byte*~) main::$8 $8 zp ZP_WORD:6 202.0 -(byte*~) main::$9 $9 zp ZP_WORD:4 22.0 +(word~) main::$2 $2 zp ZP_WORD:4 67.33333333333333 +(word~) main::$4 $4 zp ZP_WORD:6 202.0 +(word~) main::$6 $6 zp ZP_WORD:8 22.0 +(byte*~) main::$7 $7 zp ZP_WORD:6 101.0 +(byte*~) main::$8 $8 zp ZP_WORD:4 202.0 +(byte*~) main::$9 $9 zp ZP_WORD:8 22.0 (label) main::@1 (label) main::@2 (label) main::@3 (label) main::@4 (label) main::@5 (label) main::@6 +(label) main::@7 (label) main::@return (byte) main::c -(byte) main::c#1 reg byte x 202.0 -(byte) main::c#2 reg byte x 72.14285714285714 +(byte) main::c#1 reg byte x 151.5 +(byte) main::c#4 reg byte x 67.33333333333333 (byte) main::c1 -(byte) main::c1#1 reg byte x 22.0 -(byte) main::c1#2 reg byte x 8.8 +(byte) main::c1#1 reg byte x 16.5 +(byte) main::c1#4 reg byte x 8.25 (word) main::line -(word) main::line#10 line zp ZP_WORD:2 15.375 -(word) main::line#2 line zp ZP_WORD:2 22.0 +(word) main::line#10 line zp ZP_WORD:2 5.5 +(word) main::line#15 line zp ZP_WORD:2 24.888888888888886 (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -zp ZP_WORD:2 [ main::line#10 main::line#2 ] -reg byte x [ main::c1#2 main::c1#1 ] -reg byte x [ main::c#2 main::c#1 ] -zp ZP_WORD:4 [ main::$6 main::$9 ] -zp ZP_WORD:6 [ main::$2 main::$8 ] -zp ZP_WORD:8 [ main::$4 main::$7 ] +zp ZP_WORD:2 [ main::line#15 main::line#10 ] +reg byte x [ main::c#4 main::c#1 ] +reg byte x [ main::c1#4 main::c1#1 ] +zp ZP_WORD:4 [ main::$2 main::$8 ] +zp ZP_WORD:6 [ main::$4 main::$7 ] +zp ZP_WORD:8 [ main::$6 main::$9 ] diff --git a/src/test/ref/textbox.asm b/src/test/ref/textbox.asm index 1fcf34e49..6433ae12e 100644 --- a/src/test/ref/textbox.asm +++ b/src/test/ref/textbox.asm @@ -8,8 +8,42 @@ main: { .label x = 2 lda #0 sta x - b1: + b2: lda x + asl + clc + adc #1 + sta textbox.x2 + lax x + axs #-[$a] + stx textbox.y2 + lda x + sta textbox.y1 + lda #text2 + sta textbox.text+1 + jsr textbox + lda #<0 + sta wait + sta wait+1 + b5: + inc wait + bne !+ + inc wait+1 + !: + lda wait+1 + cmp #>$88b8 + bcc b5 + bne !+ + lda wait + cmp #<$88b8 + bcc b5 + !: + lda x + clc + adc #2 + sta x cmp #$f bcc b2 lda #text2 - sta textbox.text+1 - jsr textbox - lda #<0 - sta wait - sta wait+1 - b4: - lda wait+1 - cmp #>$88b8 - bcc b5 - bne !+ - lda wait - cmp #<$88b8 - bcc b5 - !: - lda x - clc - adc #2 - sta x - jmp b1 - b5: - inc wait - bne !+ - inc wait+1 - !: - jmp b4 } // textbox(byte zeropage(2) x1, byte zeropage(3) y1, byte zeropage(4) x2, byte zeropage(5) y2, byte* zeropage(6) text) textbox: { diff --git a/src/test/ref/textbox.cfg b/src/test/ref/textbox.cfg index 483748135..3435e60b3 100644 --- a/src/test/ref/textbox.cfg +++ b/src/test/ref/textbox.cfg @@ -9,44 +9,44 @@ [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@6 - [5] (byte) main::x#2 ← phi( main/(byte) 0 main::@6/(byte) main::x#1 ) - [6] if((byte) main::x#2<(byte) $f) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [7] phi() - [8] call textbox - to:main::@8 -main::@8: scope:[main] from main::@3 - [9] phi() - [10] call textbox - to:main::@9 -main::@9: scope:[main] from main::@8 - [11] phi() - [12] call textbox - to:main::@7 -main::@7: scope:[main] from main::@7 main::@9 - [13] phi() - to:main::@7 -main::@2: scope:[main] from main::@1 - [14] (byte~) main::$4 ← (byte) main::x#2 + (byte) main::x#2 - [15] (byte) textbox::x2#0 ← (byte~) main::$4 + (byte) 1 - [16] (byte) textbox::y2#0 ← (byte) main::x#2 + (byte) $a - [17] (byte) textbox::x1#0 ← (byte) main::x#2 - [18] (byte) textbox::y1#0 ← (byte) main::x#2 - [19] call textbox + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::x#11 ← phi( main::@1/(byte) main::x#1 main/(byte) 0 ) + [6] (byte~) main::$4 ← (byte) main::x#11 + (byte) main::x#11 + [7] (byte) textbox::x2#0 ← (byte~) main::$4 + (byte) 1 + [8] (byte) textbox::y2#0 ← (byte) main::x#11 + (byte) $a + [9] (byte) textbox::x1#0 ← (byte) main::x#11 + [10] (byte) textbox::y1#0 ← (byte) main::x#11 + [11] call textbox + to:main::@5 +main::@5: scope:[main] from main::@2 main::@4 + [12] (word) main::wait#4 ← phi( main::@4/(word) main::wait#1 main::@2/(byte) 0 ) + [13] (word) main::wait#1 ← ++ (word) main::wait#4 to:main::@4 -main::@4: scope:[main] from main::@2 main::@5 - [20] (word) main::wait#2 ← phi( main::@2/(byte) 0 main::@5/(word) main::wait#1 ) - [21] if((word) main::wait#2<(word) $88b8) goto main::@5 +main::@4: scope:[main] from main::@5 + [14] if((word) main::wait#1<(word) $88b8) goto main::@5 to:main::@6 main::@6: scope:[main] from main::@4 - [22] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2 + [15] (byte) main::x#1 ← (byte) main::x#11 + (byte) 2 to:main::@1 -main::@5: scope:[main] from main::@4 - [23] (word) main::wait#1 ← ++ (word) main::wait#2 - to:main::@4 +main::@1: scope:[main] from main::@6 + [16] if((byte) main::x#1<(byte) $f) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [17] phi() + [18] call textbox + to:main::@8 +main::@8: scope:[main] from main::@3 + [19] phi() + [20] call textbox + to:main::@9 +main::@9: scope:[main] from main::@8 + [21] phi() + [22] call textbox + to:main::@7 +main::@7: scope:[main] from main::@7 main::@9 + [23] phi() + to:main::@7 textbox: scope:[textbox] from main::@2 main::@3 main::@8 main::@9 [24] (byte*) textbox::text#12 ← phi( main::@8/(const byte[]) text#0 main::@9/(const byte[]) text#0 main::@2/(const byte[]) text2#0 main::@3/(const byte[]) text#0 ) [24] (byte) textbox::y2#4 ← phi( main::@8/(byte) 9 main::@9/(byte) $18 main::@2/(byte) textbox::y2#0 main::@3/(byte) $18 ) diff --git a/src/test/ref/textbox.log b/src/test/ref/textbox.log index f5b4e06a5..49084f0ea 100644 --- a/src/test/ref/textbox.log +++ b/src/test/ref/textbox.log @@ -1246,21 +1246,37 @@ De-inlining pointer[w] to *(pointer+w) [182] *((const byte*) screen#0 + (word~ Successful SSA optimization Pass2DeInlineWordDerefIdx Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks -Simple Condition (bool~) textbox::$4 [26] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return -Simple Condition (bool~) textbox::$12 [41] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) $20) goto textbox::@26 -Simple Condition (bool~) textbox::$16 [48] if((byte~) textbox::$15>=(byte) textbox::x2#4) goto textbox::@27 -Simple Condition (bool~) draw_window::$7 [97] if((byte~) draw_window::$6>(byte) 1) goto draw_window::@27 -Simple Condition (bool~) textbox::$5 [112] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return -Simple Condition (bool~) textbox::$13 [113] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@7 -Simple Condition (bool~) textbox::$18 [114] if((byte) textbox::c#2<(byte~) textbox::$17) goto textbox::@12 -Simple Condition (bool~) draw_window::$9 [115] if((byte~) draw_window::$8>(byte) 1) goto draw_window::@14 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::x#1 = (byte) main::x#2 +Alias (byte) main::x#11 = (byte) main::x#13 (byte) main::x#8 +Alias (word) main::wait#1 = (word) main::wait#2 +Alias (byte) main::x#10 = (byte) main::x#12 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::x#10 (byte) main::x#11 +Identical Phi Values (word) main::wait#5 (const word) main::wait#0 +Identical Phi Values (byte) main::x#14 (const byte) main::x#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) main::x#9 (byte) main::x#11 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition (bool~) textbox::$4 [31] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return +Simple Condition (bool~) textbox::$12 [46] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) $20) goto textbox::@26 +Simple Condition (bool~) textbox::$16 [53] if((byte~) textbox::$15>=(byte) textbox::x2#4) goto textbox::@27 +Simple Condition (bool~) draw_window::$7 [102] if((byte~) draw_window::$6>(byte) 1) goto draw_window::@27 +Simple Condition (bool~) textbox::$5 [117] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return +Simple Condition (bool~) textbox::$13 [118] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@7 +Simple Condition (bool~) textbox::$18 [119] if((byte) textbox::c#2<(byte~) textbox::$17) goto textbox::@12 +Simple Condition (bool~) draw_window::$9 [120] if((byte~) draw_window::$8>(byte) 1) goto draw_window::@14 Successful SSA optimization Pass2ConditionalJumpSimplification -Negating conditional jump and destination [41] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@8 -Negating conditional jump and destination [48] if((byte~) textbox::$15<(byte) textbox::x2#4) goto textbox::@5 -Negating conditional jump and destination [97] if((byte~) draw_window::$6<=(byte) 1) goto draw_window::@return +Negating conditional jump and destination [46] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@8 +Negating conditional jump and destination [53] if((byte~) textbox::$15<(byte) textbox::x2#4) goto textbox::@5 +Negating conditional jump and destination [102] if((byte~) draw_window::$6<=(byte) 1) goto draw_window::@return Successful SSA optimization Pass2ConditionalJumpSequenceImprovement -Rewriting conditional comparison [97] if((byte~) draw_window::$6<=(byte) 1) goto draw_window::@return -Rewriting conditional comparison [115] if((byte~) draw_window::$8>(byte) 1) goto draw_window::@14 +if() condition always true - replacing block destination [122] if((const word) main::wait#0<(word) $88b8) goto main::@5 +if() condition always true - replacing block destination [124] if((const byte) main::x#0<(byte) $f) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Rewriting conditional comparison [102] if((byte~) draw_window::$6<=(byte) 1) goto draw_window::@return +Rewriting conditional comparison [120] if((byte~) draw_window::$8>(byte) 1) goto draw_window::@14 Adding number conversion cast (unumber) 1+1 in if((byte~) draw_window::$6<(byte) 1+(number) 1) goto draw_window::@return Adding number conversion cast (unumber) 1 in if((byte~) draw_window::$6<(unumber)(byte) 1+(number) 1) goto draw_window::@return Adding number conversion cast (unumber) 1+1 in if((byte~) draw_window::$8>=(byte) 1+(number) 1) goto draw_window::@14 @@ -1332,6 +1348,8 @@ Alias (word) draw_window::q#0 = (byte) draw_window::$41 Alias (word) draw_window::z#1 = (byte) draw_window::$44 Alias (word) draw_window::z#2 = (byte) draw_window::$47 Successful SSA optimization Pass2AliasElimination +Added new block during phi lifting main::@19(between main::@1 and main::@2) +Added new block during phi lifting main::@20(between main::@4 and main::@5) Added new block during phi lifting textbox::@28(between textbox::@17 and textbox::@4) Added new block during phi lifting textbox::@29(between textbox::@25 and textbox::@4) Fixing phi predecessor for textbox::i#2 to new block ( textbox::@25 -> textbox::@29 ) during phi lifting. @@ -1344,62 +1362,68 @@ Adding NOP phi() at start of @7 Adding NOP phi() at start of @8 Adding NOP phi() at start of @end Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1_1 +Adding NOP phi() at start of main::@15 +Adding NOP phi() at start of main::@4_1 Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::@16 Adding NOP phi() at start of main::@17 Adding NOP phi() at start of main::@18 Adding NOP phi() at start of main::@13 -Adding NOP phi() at start of main::@15 CALL GRAPH Calls in [] to main:3 -Calls in [main] to textbox:10 textbox:12 textbox:14 textbox:26 -Calls in [textbox] to draw_window:39 +Calls in [main] to textbox:18 textbox:27 textbox:29 textbox:31 +Calls in [textbox] to draw_window:41 Created 23 initial phi equivalence classes -Coalesced [22] textbox::x1#17 ← textbox::x1#0 -Coalesced [23] textbox::y1#6 ← textbox::y1#0 -Coalesced [24] textbox::x2#17 ← textbox::x2#0 -Coalesced [25] textbox::y2#17 ← textbox::y2#0 -Coalesced [31] main::x#8 ← main::x#1 -Coalesced [33] main::wait#4 ← main::wait#1 -Coalesced [47] textbox::z#11 ← textbox::z#0 -Coalesced [48] textbox::x#14 ← textbox::x#0 -Coalesced [49] textbox::y#15 ← textbox::y#0 -Coalesced [56] textbox::ls#4 ← textbox::ls#0 -Coalesced [75] textbox::z#15 ← textbox::z#2 -Coalesced [76] textbox::x#18 ← textbox::x#12 -Coalesced [77] textbox::y#19 ← textbox::y#2 -Coalesced [80] textbox::z#10 ← textbox::z#4 -Coalesced [81] textbox::x#13 ← textbox::x#7 -Coalesced [82] textbox::i#13 ← textbox::i#1 -Coalesced [83] textbox::y#14 ← textbox::y#11 -Coalesced [84] textbox::z#16 ← textbox::z#5 -Coalesced [85] textbox::x#19 ← textbox::x#1 -Coalesced [86] textbox::y#20 ← textbox::y#5 -Not coalescing [92] textbox::x#15 ← textbox::x1#4 -Coalesced [93] textbox::y#16 ← textbox::y#1 -Coalesced [94] textbox::z#12 ← textbox::z#1 -Coalesced [95] textbox::x#17 ← textbox::x#10 -Coalesced (already) [96] textbox::y#18 ← textbox::y#12 -Coalesced (already) [97] textbox::z#14 ← textbox::z#3 -Coalesced [100] textbox::ls#5 ← textbox::ls#1 -Coalesced [101] textbox::c#5 ← textbox::c#1 -Coalesced (already) [102] textbox::x#16 ← textbox::x#10 -Coalesced (already) [103] textbox::y#17 ← textbox::y#12 -Coalesced (already) [104] textbox::z#13 ← textbox::z#3 -Coalesced [112] draw_window::x#4 ← draw_window::x#0 -Coalesced [122] draw_window::y#4 ← draw_window::y#0 -Coalesced [137] draw_window::y3#7 ← draw_window::y3#0 -Coalesced [144] draw_window::x3#4 ← draw_window::x3#0 -Coalesced [148] draw_window::y3#8 ← draw_window::y3#1 -Coalesced [153] draw_window::x3#5 ← draw_window::x3#1 -Coalesced [164] draw_window::y#5 ← draw_window::y#1 -Coalesced [172] draw_window::x#5 ← draw_window::x#1 +Coalesced [14] textbox::x1#17 ← textbox::x1#0 +Coalesced [15] textbox::y1#6 ← textbox::y1#0 +Coalesced [16] textbox::x2#17 ← textbox::x2#0 +Coalesced [17] textbox::y2#17 ← textbox::y2#0 +Coalesced [34] main::x#15 ← main::x#1 +Coalesced [35] main::wait#6 ← main::wait#1 +Coalesced [49] textbox::z#11 ← textbox::z#0 +Coalesced [50] textbox::x#14 ← textbox::x#0 +Coalesced [51] textbox::y#15 ← textbox::y#0 +Coalesced [58] textbox::ls#4 ← textbox::ls#0 +Coalesced [77] textbox::z#15 ← textbox::z#2 +Coalesced [78] textbox::x#18 ← textbox::x#12 +Coalesced [79] textbox::y#19 ← textbox::y#2 +Coalesced [82] textbox::z#10 ← textbox::z#4 +Coalesced [83] textbox::x#13 ← textbox::x#7 +Coalesced [84] textbox::i#13 ← textbox::i#1 +Coalesced [85] textbox::y#14 ← textbox::y#11 +Coalesced [86] textbox::z#16 ← textbox::z#5 +Coalesced [87] textbox::x#19 ← textbox::x#1 +Coalesced [88] textbox::y#20 ← textbox::y#5 +Not coalescing [94] textbox::x#15 ← textbox::x1#4 +Coalesced [95] textbox::y#16 ← textbox::y#1 +Coalesced [96] textbox::z#12 ← textbox::z#1 +Coalesced [97] textbox::x#17 ← textbox::x#10 +Coalesced (already) [98] textbox::y#18 ← textbox::y#12 +Coalesced (already) [99] textbox::z#14 ← textbox::z#3 +Coalesced [102] textbox::ls#5 ← textbox::ls#1 +Coalesced [103] textbox::c#5 ← textbox::c#1 +Coalesced (already) [104] textbox::x#16 ← textbox::x#10 +Coalesced (already) [105] textbox::y#17 ← textbox::y#12 +Coalesced (already) [106] textbox::z#13 ← textbox::z#3 +Coalesced [114] draw_window::x#4 ← draw_window::x#0 +Coalesced [124] draw_window::y#4 ← draw_window::y#0 +Coalesced [139] draw_window::y3#7 ← draw_window::y3#0 +Coalesced [146] draw_window::x3#4 ← draw_window::x3#0 +Coalesced [150] draw_window::y3#8 ← draw_window::y3#1 +Coalesced [155] draw_window::x3#5 ← draw_window::x3#1 +Coalesced [166] draw_window::y#5 ← draw_window::y#1 +Coalesced [174] draw_window::x#5 ← draw_window::x#1 Coalesced down to 17 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @8 -Culled Empty Block (label) main::@18 +Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@15 +Culled Empty Block (label) main::@4_1 +Culled Empty Block (label) main::@18 +Culled Empty Block (label) main::@19 +Culled Empty Block (label) main::@20 Culled Empty Block (label) textbox::@29 Culled Empty Block (label) textbox::@28 Culled Empty Block (label) textbox::@32 @@ -1458,44 +1482,44 @@ FINAL CONTROL FLOW GRAPH [3] phi() main: scope:[main] from @1 [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@6 - [5] (byte) main::x#2 ← phi( main/(byte) 0 main::@6/(byte) main::x#1 ) - [6] if((byte) main::x#2<(byte) $f) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [7] phi() - [8] call textbox - to:main::@8 -main::@8: scope:[main] from main::@3 - [9] phi() - [10] call textbox - to:main::@9 -main::@9: scope:[main] from main::@8 - [11] phi() - [12] call textbox - to:main::@7 -main::@7: scope:[main] from main::@7 main::@9 - [13] phi() - to:main::@7 -main::@2: scope:[main] from main::@1 - [14] (byte~) main::$4 ← (byte) main::x#2 + (byte) main::x#2 - [15] (byte) textbox::x2#0 ← (byte~) main::$4 + (byte) 1 - [16] (byte) textbox::y2#0 ← (byte) main::x#2 + (byte) $a - [17] (byte) textbox::x1#0 ← (byte) main::x#2 - [18] (byte) textbox::y1#0 ← (byte) main::x#2 - [19] call textbox + to:main::@2 +main::@2: scope:[main] from main main::@1 + [5] (byte) main::x#11 ← phi( main::@1/(byte) main::x#1 main/(byte) 0 ) + [6] (byte~) main::$4 ← (byte) main::x#11 + (byte) main::x#11 + [7] (byte) textbox::x2#0 ← (byte~) main::$4 + (byte) 1 + [8] (byte) textbox::y2#0 ← (byte) main::x#11 + (byte) $a + [9] (byte) textbox::x1#0 ← (byte) main::x#11 + [10] (byte) textbox::y1#0 ← (byte) main::x#11 + [11] call textbox + to:main::@5 +main::@5: scope:[main] from main::@2 main::@4 + [12] (word) main::wait#4 ← phi( main::@4/(word) main::wait#1 main::@2/(byte) 0 ) + [13] (word) main::wait#1 ← ++ (word) main::wait#4 to:main::@4 -main::@4: scope:[main] from main::@2 main::@5 - [20] (word) main::wait#2 ← phi( main::@2/(byte) 0 main::@5/(word) main::wait#1 ) - [21] if((word) main::wait#2<(word) $88b8) goto main::@5 +main::@4: scope:[main] from main::@5 + [14] if((word) main::wait#1<(word) $88b8) goto main::@5 to:main::@6 main::@6: scope:[main] from main::@4 - [22] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2 + [15] (byte) main::x#1 ← (byte) main::x#11 + (byte) 2 to:main::@1 -main::@5: scope:[main] from main::@4 - [23] (word) main::wait#1 ← ++ (word) main::wait#2 - to:main::@4 +main::@1: scope:[main] from main::@6 + [16] if((byte) main::x#1<(byte) $f) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [17] phi() + [18] call textbox + to:main::@8 +main::@8: scope:[main] from main::@3 + [19] phi() + [20] call textbox + to:main::@9 +main::@9: scope:[main] from main::@8 + [21] phi() + [22] call textbox + to:main::@7 +main::@7: scope:[main] from main::@7 main::@9 + [23] phi() + to:main::@7 textbox: scope:[textbox] from main::@2 main::@3 main::@8 main::@9 [24] (byte*) textbox::text#12 ← phi( main::@8/(const byte[]) text#0 main::@9/(const byte[]) text#0 main::@2/(const byte[]) text2#0 main::@3/(const byte[]) text#0 ) [24] (byte) textbox::y2#4 ← phi( main::@8/(byte) 9 main::@9/(byte) $18 main::@2/(byte) textbox::y2#0 main::@3/(byte) $18 ) @@ -1744,11 +1768,11 @@ VARIABLE REGISTER WEIGHTS (void()) main() (byte~) main::$4 22.0 (word) main::wait -(word) main::wait#1 202.0 -(word) main::wait#2 151.5 +(word) main::wait#1 151.5 +(word) main::wait#4 202.0 (byte) main::x -(byte) main::x#1 22.0 -(byte) main::x#2 8.0 +(byte) main::x#1 16.5 +(byte) main::x#11 7.699999999999999 (byte*) screen (byte[]) text (byte[]) text2 @@ -1811,8 +1835,8 @@ VARIABLE REGISTER WEIGHTS (word) textbox::z#5 101.0 Initial phi equivalence classes -[ main::x#2 main::x#1 ] -[ main::wait#2 main::wait#1 ] +[ main::x#11 main::x#1 ] +[ main::wait#4 main::wait#1 ] [ textbox::x1#4 textbox::x1#0 ] [ textbox::y1#4 textbox::y1#0 ] [ textbox::x2#4 textbox::x2#0 ] @@ -1876,8 +1900,8 @@ Added variable draw_window::$27 to zero page equivalence class [ draw_window::$2 Added variable draw_window::$15 to zero page equivalence class [ draw_window::$15 ] Added variable draw_window::$28 to zero page equivalence class [ draw_window::$28 ] Complete equivalence classes -[ main::x#2 main::x#1 ] -[ main::wait#2 main::wait#1 ] +[ main::x#11 main::x#1 ] +[ main::wait#4 main::wait#1 ] [ textbox::x1#4 textbox::x1#0 ] [ textbox::y1#4 textbox::y1#0 ] [ textbox::x2#4 textbox::x2#0 ] @@ -1940,8 +1964,8 @@ Complete equivalence classes [ draw_window::$27 ] [ draw_window::$15 ] [ draw_window::$28 ] -Allocated zp ZP_BYTE:2 [ main::x#2 main::x#1 ] -Allocated zp ZP_WORD:3 [ main::wait#2 main::wait#1 ] +Allocated zp ZP_BYTE:2 [ main::x#11 main::x#1 ] +Allocated zp ZP_WORD:3 [ main::wait#4 main::wait#1 ] Allocated zp ZP_BYTE:5 [ textbox::x1#4 textbox::x1#0 ] Allocated zp ZP_BYTE:6 [ textbox::y1#4 textbox::y1#0 ] Allocated zp ZP_BYTE:7 [ textbox::x2#4 textbox::x2#0 ] @@ -2036,24 +2060,101 @@ main: { .label _4 = $16 .label wait = 3 .label x = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::x#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::x#11 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta x + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::x#11 = (byte) main::x#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] (byte~) main::$4 ← (byte) main::x#11 + (byte) main::x#11 -- vbuz1=vbuz2_plus_vbuz2 + lda x + asl + sta _4 + // [7] (byte) textbox::x2#0 ← (byte~) main::$4 + (byte) 1 -- vbuz1=vbuz2_plus_1 + ldy _4 + iny + sty textbox.x2 + // [8] (byte) textbox::y2#0 ← (byte) main::x#11 + (byte) $a -- vbuz1=vbuz2_plus_vbuc1 + lax x + axs #-[$a] + stx textbox.y2 + // [9] (byte) textbox::x1#0 ← (byte) main::x#11 -- vbuz1=vbuz2 + lda x + sta textbox.x1 + // [10] (byte) textbox::y1#0 ← (byte) main::x#11 -- vbuz1=vbuz2 + lda x + sta textbox.y1 + // [11] call textbox + // [24] phi from main::@2 to textbox [phi:main::@2->textbox] + textbox_from_b2: + // [24] phi (byte*) textbox::text#12 = (const byte[]) text2#0 [phi:main::@2->textbox#0] -- pbuz1=pbuc1 + lda #text2 + sta textbox.text+1 + // [24] phi (byte) textbox::y2#4 = (byte) textbox::y2#0 [phi:main::@2->textbox#1] -- register_copy + // [24] phi (byte) textbox::x2#4 = (byte) textbox::x2#0 [phi:main::@2->textbox#2] -- register_copy + // [24] phi (byte) textbox::y1#4 = (byte) textbox::y1#0 [phi:main::@2->textbox#3] -- register_copy + // [24] phi (byte) textbox::x1#4 = (byte) textbox::x1#0 [phi:main::@2->textbox#4] -- register_copy + jsr textbox + // [12] phi from main::@2 to main::@5 [phi:main::@2->main::@5] + b5_from_b2: + // [12] phi (word) main::wait#4 = (byte) 0 [phi:main::@2->main::@5#0] -- vwuz1=vbuc1 + lda #<0 + sta wait + lda #>0 + sta wait+1 + jmp b5 + // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + b5_from_b4: + // [12] phi (word) main::wait#4 = (word) main::wait#1 [phi:main::@4->main::@5#0] -- register_copy + jmp b5 + // main::@5 + b5: + // [13] (word) main::wait#1 ← ++ (word) main::wait#4 -- vwuz1=_inc_vwuz1 + inc wait + bne !+ + inc wait+1 + !: + jmp b4 + // main::@4 + b4: + // [14] if((word) main::wait#1<(word) $88b8) goto main::@5 -- vwuz1_lt_vwuc1_then_la1 + lda wait+1 + cmp #>$88b8 + bcc b5_from_b4 + bne !+ + lda wait + cmp #<$88b8 + bcc b5_from_b4 + !: + jmp b6 + // main::@6 + b6: + // [15] (byte) main::x#1 ← (byte) main::x#11 + (byte) 2 -- vbuz1=vbuz1_plus_2 + lda x + clc + adc #2 + sta x jmp b1 // main::@1 b1: - // [6] if((byte) main::x#2<(byte) $f) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + // [16] if((byte) main::x#1<(byte) $f) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 lda x cmp #$f - bcc b2 - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + bcc b2_from_b1 + // [17] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: jmp b3 // main::@3 b3: - // [8] call textbox + // [18] call textbox // [24] phi from main::@3 to textbox [phi:main::@3->textbox] textbox_from_b3: // [24] phi (byte*) textbox::text#12 = (const byte[]) text#0 [phi:main::@3->textbox#0] -- pbuz1=pbuc1 @@ -2074,12 +2175,12 @@ main: { lda #0 sta textbox.x1 jsr textbox - // [9] phi from main::@3 to main::@8 [phi:main::@3->main::@8] + // [19] phi from main::@3 to main::@8 [phi:main::@3->main::@8] b8_from_b3: jmp b8 // main::@8 b8: - // [10] call textbox + // [20] call textbox // [24] phi from main::@8 to textbox [phi:main::@8->textbox] textbox_from_b8: // [24] phi (byte*) textbox::text#12 = (const byte[]) text#0 [phi:main::@8->textbox#0] -- pbuz1=pbuc1 @@ -2100,12 +2201,12 @@ main: { lda #3 sta textbox.x1 jsr textbox - // [11] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [21] phi from main::@8 to main::@9 [phi:main::@8->main::@9] b9_from_b8: jmp b9 // main::@9 b9: - // [12] call textbox + // [22] call textbox // [24] phi from main::@9 to textbox [phi:main::@9->textbox] textbox_from_b9: // [24] phi (byte*) textbox::text#12 = (const byte[]) text#0 [phi:main::@9->textbox#0] -- pbuz1=pbuc1 @@ -2126,88 +2227,13 @@ main: { lda #$1e sta textbox.x1 jsr textbox - // [13] phi from main::@7 main::@9 to main::@7 [phi:main::@7/main::@9->main::@7] + // [23] phi from main::@7 main::@9 to main::@7 [phi:main::@7/main::@9->main::@7] b7_from_b7: b7_from_b9: jmp b7 // main::@7 b7: jmp b7_from_b7 - // main::@2 - b2: - // [14] (byte~) main::$4 ← (byte) main::x#2 + (byte) main::x#2 -- vbuz1=vbuz2_plus_vbuz2 - lda x - asl - sta _4 - // [15] (byte) textbox::x2#0 ← (byte~) main::$4 + (byte) 1 -- vbuz1=vbuz2_plus_1 - ldy _4 - iny - sty textbox.x2 - // [16] (byte) textbox::y2#0 ← (byte) main::x#2 + (byte) $a -- vbuz1=vbuz2_plus_vbuc1 - lax x - axs #-[$a] - stx textbox.y2 - // [17] (byte) textbox::x1#0 ← (byte) main::x#2 -- vbuz1=vbuz2 - lda x - sta textbox.x1 - // [18] (byte) textbox::y1#0 ← (byte) main::x#2 -- vbuz1=vbuz2 - lda x - sta textbox.y1 - // [19] call textbox - // [24] phi from main::@2 to textbox [phi:main::@2->textbox] - textbox_from_b2: - // [24] phi (byte*) textbox::text#12 = (const byte[]) text2#0 [phi:main::@2->textbox#0] -- pbuz1=pbuc1 - lda #text2 - sta textbox.text+1 - // [24] phi (byte) textbox::y2#4 = (byte) textbox::y2#0 [phi:main::@2->textbox#1] -- register_copy - // [24] phi (byte) textbox::x2#4 = (byte) textbox::x2#0 [phi:main::@2->textbox#2] -- register_copy - // [24] phi (byte) textbox::y1#4 = (byte) textbox::y1#0 [phi:main::@2->textbox#3] -- register_copy - // [24] phi (byte) textbox::x1#4 = (byte) textbox::x1#0 [phi:main::@2->textbox#4] -- register_copy - jsr textbox - // [20] phi from main::@2 to main::@4 [phi:main::@2->main::@4] - b4_from_b2: - // [20] phi (word) main::wait#2 = (byte) 0 [phi:main::@2->main::@4#0] -- vwuz1=vbuc1 - lda #<0 - sta wait - lda #>0 - sta wait+1 - jmp b4 - // main::@4 - b4: - // [21] if((word) main::wait#2<(word) $88b8) goto main::@5 -- vwuz1_lt_vwuc1_then_la1 - lda wait+1 - cmp #>$88b8 - bcc b5 - bne !+ - lda wait - cmp #<$88b8 - bcc b5 - !: - jmp b6 - // main::@6 - b6: - // [22] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2 -- vbuz1=vbuz1_plus_2 - lda x - clc - adc #2 - sta x - // [5] phi from main::@6 to main::@1 [phi:main::@6->main::@1] - b1_from_b6: - // [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@6->main::@1#0] -- register_copy - jmp b1 - // main::@5 - b5: - // [23] (word) main::wait#1 ← ++ (word) main::wait#2 -- vwuz1=_inc_vwuz1 - inc wait - bne !+ - inc wait+1 - !: - // [20] phi from main::@5 to main::@4 [phi:main::@5->main::@4] - b4_from_b5: - // [20] phi (word) main::wait#2 = (word) main::wait#1 [phi:main::@5->main::@4#0] -- register_copy - jmp b4 } // textbox // textbox(byte zeropage(5) x1, byte zeropage(6) y1, byte zeropage(7) x2, byte zeropage(8) y2, byte* zeropage(9) text) @@ -2948,235 +2974,236 @@ draw_window: { text2: .text "textbox by scan of desire@" REGISTER UPLIFT POTENTIAL REGISTERS -Statement [14] (byte~) main::$4 ← (byte) main::x#2 + (byte) main::x#2 [ main::x#2 main::$4 ] ( main:2 [ main::x#2 main::$4 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::x#2 main::x#1 ] -Statement [16] (byte) textbox::y2#0 ← (byte) main::x#2 + (byte) $a [ main::x#2 textbox::x2#0 textbox::y2#0 ] ( main:2 [ main::x#2 textbox::x2#0 textbox::y2#0 ] ) always clobbers reg byte a +Statement [6] (byte~) main::$4 ← (byte) main::x#11 + (byte) main::x#11 [ main::x#11 main::$4 ] ( main:2 [ main::x#11 main::$4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::x#11 main::x#1 ] +Statement [8] (byte) textbox::y2#0 ← (byte) main::x#11 + (byte) $a [ main::x#11 textbox::x2#0 textbox::y2#0 ] ( main:2 [ main::x#11 textbox::x2#0 textbox::y2#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ textbox::x2#4 textbox::x2#0 ] -Statement [21] if((word) main::wait#2<(word) $88b8) goto main::@5 [ main::x#2 main::wait#2 ] ( main:2 [ main::x#2 main::wait#2 ] ) always clobbers reg byte a -Statement [32] (byte) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ) always clobbers reg byte a +Statement [14] if((word) main::wait#1<(word) $88b8) goto main::@5 [ main::x#11 main::wait#1 ] ( main:2 [ main::x#11 main::wait#1 ] ) always clobbers reg byte a +Statement [32] (byte) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ textbox::x1#4 textbox::x1#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ textbox::y2#4 textbox::y2#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] -Statement [33] (byte) textbox::$33 ← (byte) textbox::$32 + (byte) textbox::y#0 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ) always clobbers reg byte a -Statement [34] (word) textbox::z#0 ← (byte) textbox::$33 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ) always clobbers reg byte a -Statement [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ) always clobbers reg byte a +Statement [33] (byte) textbox::$33 ← (byte) textbox::$32 + (byte) textbox::y#0 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ) always clobbers reg byte a +Statement [34] (word) textbox::z#0 ← (byte) textbox::$33 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ) always clobbers reg byte a +Statement [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ textbox::i#2 textbox::i#1 ] -Statement [39] (byte*~) textbox::$31 ← (const byte*) screen#0 + (word~) textbox::$8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ) always clobbers reg byte a -Statement [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Statement [39] (byte*~) textbox::$31 ← (const byte*) screen#0 + (word~) textbox::$8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ) always clobbers reg byte a +Statement [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::x#11 main::x#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ textbox::x1#4 textbox::x1#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ textbox::x2#4 textbox::x2#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:8 [ textbox::y2#4 textbox::y2#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:11 [ textbox::i#2 textbox::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::x#2 main::x#1 ] -Statement [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y -Statement [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a +Statement [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Statement [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ textbox::c#2 textbox::c#1 ] -Statement [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a -Statement [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ) always clobbers reg byte a -Statement [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ) always clobbers reg byte a +Statement [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a +Statement [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ) always clobbers reg byte a +Statement [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ textbox::$15 ] -Statement [58] (byte) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ) always clobbers reg byte a -Statement [59] (byte) textbox::$39 ← (byte) textbox::$38 + (byte) textbox::y#2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ) always clobbers reg byte a -Statement [60] (word) textbox::z#2 ← (byte) textbox::$39 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ) always clobbers reg byte a -Statement [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ) always clobbers reg byte a reg byte y -Statement [65] (byte) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ) always clobbers reg byte a -Statement [66] (byte) textbox::$36 ← (byte) textbox::$35 + (byte) textbox::y#1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ) always clobbers reg byte a -Statement [67] (word) textbox::z#1 ← (byte) textbox::$36 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ) always clobbers reg byte a -Statement [71] (byte) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ) always clobbers reg byte a +Statement [58] (byte) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ) always clobbers reg byte a +Statement [59] (byte) textbox::$39 ← (byte) textbox::$38 + (byte) textbox::y#2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ) always clobbers reg byte a +Statement [60] (word) textbox::z#2 ← (byte) textbox::$39 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ) always clobbers reg byte a +Statement [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ) always clobbers reg byte a reg byte y +Statement [65] (byte) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ) always clobbers reg byte a +Statement [66] (byte) textbox::$36 ← (byte) textbox::$35 + (byte) textbox::y#1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ) always clobbers reg byte a +Statement [67] (word) textbox::z#1 ← (byte) textbox::$36 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ) always clobbers reg byte a +Statement [71] (byte) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ textbox::y1#4 textbox::y1#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ draw_window::x1#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ draw_window::y1#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ draw_window::x2#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ draw_window::y2#0 ] -Statement [72] (byte) draw_window::$37 ← (byte) draw_window::$36 + (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ) always clobbers reg byte a -Statement [73] (word) draw_window::z#0 ← (byte) draw_window::$37 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ) always clobbers reg byte a -Statement [74] (byte) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ) always clobbers reg byte a -Statement [75] (byte) draw_window::$40 ← (byte) draw_window::$39 + (byte) draw_window::y2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ) always clobbers reg byte a -Statement [76] (word) draw_window::q#0 ← (byte) draw_window::$40 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a -Statement [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ) always clobbers reg byte a -Statement [81] (byte*~) draw_window::$29 ← (const byte*) screen#0 + (word~) draw_window::$2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ) always clobbers reg byte a -Statement [82] *((byte*~) draw_window::$29) ← (byte) $55 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [72] (byte) draw_window::$37 ← (byte) draw_window::$36 + (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ) always clobbers reg byte a +Statement [73] (word) draw_window::z#0 ← (byte) draw_window::$37 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ) always clobbers reg byte a +Statement [74] (byte) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ) always clobbers reg byte a +Statement [75] (byte) draw_window::$40 ← (byte) draw_window::$39 + (byte) draw_window::y2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ) always clobbers reg byte a +Statement [76] (word) draw_window::q#0 ← (byte) draw_window::$40 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a +Statement [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ) always clobbers reg byte a +Statement [81] (byte*~) draw_window::$29 ← (const byte*) screen#0 + (word~) draw_window::$2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ) always clobbers reg byte a +Statement [82] *((byte*~) draw_window::$29) ← (byte) $55 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ textbox::y1#4 textbox::y1#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:23 [ draw_window::x1#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:24 [ draw_window::y1#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:25 [ draw_window::x2#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:26 [ draw_window::y2#0 ] -Statement [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ) always clobbers reg byte a -Statement [84] (byte*~) draw_window::$30 ← (const byte*) screen#0 + (word~) draw_window::$3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ) always clobbers reg byte a -Statement [85] *((byte*~) draw_window::$30) ← (byte) $49 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ) always clobbers reg byte a -Statement [90] (byte*~) draw_window::$33 ← (const byte*) screen#0 + (word~) draw_window::$4 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ) always clobbers reg byte a -Statement [91] *((byte*~) draw_window::$33) ← (byte) $4a [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ) always clobbers reg byte a -Statement [93] (byte*~) draw_window::$34 ← (const byte*) screen#0 + (word~) draw_window::$5 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ) always clobbers reg byte a -Statement [94] *((byte*~) draw_window::$34) ← (byte) $4b [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ) always clobbers reg byte a reg byte y -Statement [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ) always clobbers reg byte a -Statement [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ) always clobbers reg byte a +Statement [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ) always clobbers reg byte a +Statement [84] (byte*~) draw_window::$30 ← (const byte*) screen#0 + (word~) draw_window::$3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ) always clobbers reg byte a +Statement [85] *((byte*~) draw_window::$30) ← (byte) $49 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ) always clobbers reg byte a +Statement [90] (byte*~) draw_window::$33 ← (const byte*) screen#0 + (word~) draw_window::$4 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ) always clobbers reg byte a +Statement [91] *((byte*~) draw_window::$33) ← (byte) $4a [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ) always clobbers reg byte a +Statement [93] (byte*~) draw_window::$34 ← (const byte*) screen#0 + (word~) draw_window::$5 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ) always clobbers reg byte a +Statement [94] *((byte*~) draw_window::$34) ← (byte) $4b [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ) always clobbers reg byte a reg byte y +Statement [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ) always clobbers reg byte a +Statement [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:63 [ draw_window::$6 ] -Statement [103] (byte) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ) always clobbers reg byte a +Statement [103] (byte) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] -Statement [104] (byte) draw_window::$46 ← (byte) draw_window::$45 + (byte) draw_window::y3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ) always clobbers reg byte a -Statement [105] (word) draw_window::z#2 ← (byte) draw_window::$46 << (byte) 3 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ) always clobbers reg byte a -Statement [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ) always clobbers reg byte a +Statement [104] (byte) draw_window::$46 ← (byte) draw_window::$45 + (byte) draw_window::y3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ) always clobbers reg byte a +Statement [105] (word) draw_window::z#2 ← (byte) draw_window::$46 << (byte) 3 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ) always clobbers reg byte a +Statement [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] -Statement [111] (byte*~) draw_window::$35 ← (const byte*) screen#0 + (word~) draw_window::$26 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ) always clobbers reg byte a -Statement [112] *((byte*~) draw_window::$35) ← (byte) $20 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ) always clobbers reg byte a reg byte y +Statement [111] (byte*~) draw_window::$35 ← (const byte*) screen#0 + (word~) draw_window::$26 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ) always clobbers reg byte a +Statement [112] *((byte*~) draw_window::$35) ← (byte) $20 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:21 [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] -Statement [114] (byte) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ) always clobbers reg byte a +Statement [114] (byte) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] -Statement [115] (byte) draw_window::$43 ← (byte) draw_window::$42 + (byte) draw_window::y#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ) always clobbers reg byte a -Statement [116] (word) draw_window::z#1 ← (byte) draw_window::$43 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a -Statement [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ) always clobbers reg byte a -Statement [118] (byte*~) draw_window::$31 ← (const byte*) screen#0 + (word~) draw_window::$19 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ) always clobbers reg byte a -Statement [119] *((byte*~) draw_window::$31) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a reg byte y +Statement [115] (byte) draw_window::$43 ← (byte) draw_window::$42 + (byte) draw_window::y#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ) always clobbers reg byte a +Statement [116] (word) draw_window::z#1 ← (byte) draw_window::$43 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a +Statement [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ) always clobbers reg byte a +Statement [118] (byte*~) draw_window::$31 ← (const byte*) screen#0 + (word~) draw_window::$19 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ) always clobbers reg byte a +Statement [119] *((byte*~) draw_window::$31) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:19 [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] -Statement [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ) always clobbers reg byte a -Statement [121] (byte*~) draw_window::$32 ← (const byte*) screen#0 + (word~) draw_window::$20 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ) always clobbers reg byte a -Statement [122] *((byte*~) draw_window::$32) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ) always clobbers reg byte a reg byte y -Statement [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ) always clobbers reg byte a +Statement [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ) always clobbers reg byte a +Statement [121] (byte*~) draw_window::$32 ← (const byte*) screen#0 + (word~) draw_window::$20 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ) always clobbers reg byte a +Statement [122] *((byte*~) draw_window::$32) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ) always clobbers reg byte a reg byte y +Statement [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] -Statement [125] (byte*~) draw_window::$27 ← (const byte*) screen#0 + (word~) draw_window::$14 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ) always clobbers reg byte a -Statement [126] *((byte*~) draw_window::$27) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y +Statement [125] (byte*~) draw_window::$27 ← (const byte*) screen#0 + (word~) draw_window::$14 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ) always clobbers reg byte a +Statement [126] *((byte*~) draw_window::$27) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] -Statement [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ) always clobbers reg byte a -Statement [128] (byte*~) draw_window::$28 ← (const byte*) screen#0 + (word~) draw_window::$15 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ) always clobbers reg byte a -Statement [129] *((byte*~) draw_window::$28) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y -Statement [14] (byte~) main::$4 ← (byte) main::x#2 + (byte) main::x#2 [ main::x#2 main::$4 ] ( main:2 [ main::x#2 main::$4 ] ) always clobbers reg byte a -Statement [16] (byte) textbox::y2#0 ← (byte) main::x#2 + (byte) $a [ main::x#2 textbox::x2#0 textbox::y2#0 ] ( main:2 [ main::x#2 textbox::x2#0 textbox::y2#0 ] ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ main::x#2 main::x#1 ] +Statement [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ) always clobbers reg byte a +Statement [128] (byte*~) draw_window::$28 ← (const byte*) screen#0 + (word~) draw_window::$15 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ) always clobbers reg byte a +Statement [129] *((byte*~) draw_window::$28) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y +Statement [6] (byte~) main::$4 ← (byte) main::x#11 + (byte) main::x#11 [ main::x#11 main::$4 ] ( main:2 [ main::x#11 main::$4 ] ) always clobbers reg byte a +Statement [8] (byte) textbox::y2#0 ← (byte) main::x#11 + (byte) $a [ main::x#11 textbox::x2#0 textbox::y2#0 ] ( main:2 [ main::x#11 textbox::x2#0 textbox::y2#0 ] ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ main::x#11 main::x#1 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:7 [ textbox::x2#4 textbox::x2#0 ] -Statement [21] if((word) main::wait#2<(word) $88b8) goto main::@5 [ main::x#2 main::wait#2 ] ( main:2 [ main::x#2 main::wait#2 ] ) always clobbers reg byte a -Statement [22] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2 [ main::x#1 ] ( main:2 [ main::x#1 ] ) always clobbers reg byte a -Statement [32] (byte) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ) always clobbers reg byte a -Statement [33] (byte) textbox::$33 ← (byte) textbox::$32 + (byte) textbox::y#0 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ) always clobbers reg byte a -Statement [34] (word) textbox::z#0 ← (byte) textbox::$33 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ) always clobbers reg byte a -Statement [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ) always clobbers reg byte a -Statement [39] (byte*~) textbox::$31 ← (const byte*) screen#0 + (word~) textbox::$8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ) always clobbers reg byte a -Statement [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y -Statement [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y -Statement [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a -Statement [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a -Statement [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ) always clobbers reg byte a -Statement [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ) always clobbers reg byte a -Statement [58] (byte) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ) always clobbers reg byte a -Statement [59] (byte) textbox::$39 ← (byte) textbox::$38 + (byte) textbox::y#2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ) always clobbers reg byte a -Statement [60] (word) textbox::z#2 ← (byte) textbox::$39 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ) always clobbers reg byte a -Statement [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ) always clobbers reg byte a reg byte y -Statement [65] (byte) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ) always clobbers reg byte a -Statement [66] (byte) textbox::$36 ← (byte) textbox::$35 + (byte) textbox::y#1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ) always clobbers reg byte a -Statement [67] (word) textbox::z#1 ← (byte) textbox::$36 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ) always clobbers reg byte a -Statement [71] (byte) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ) always clobbers reg byte a -Statement [72] (byte) draw_window::$37 ← (byte) draw_window::$36 + (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ) always clobbers reg byte a -Statement [73] (word) draw_window::z#0 ← (byte) draw_window::$37 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ) always clobbers reg byte a -Statement [74] (byte) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ) always clobbers reg byte a -Statement [75] (byte) draw_window::$40 ← (byte) draw_window::$39 + (byte) draw_window::y2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ) always clobbers reg byte a -Statement [76] (word) draw_window::q#0 ← (byte) draw_window::$40 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a -Statement [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ) always clobbers reg byte a -Statement [81] (byte*~) draw_window::$29 ← (const byte*) screen#0 + (word~) draw_window::$2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ) always clobbers reg byte a -Statement [82] *((byte*~) draw_window::$29) ← (byte) $55 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ) always clobbers reg byte a -Statement [84] (byte*~) draw_window::$30 ← (const byte*) screen#0 + (word~) draw_window::$3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ) always clobbers reg byte a -Statement [85] *((byte*~) draw_window::$30) ← (byte) $49 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ) always clobbers reg byte a -Statement [90] (byte*~) draw_window::$33 ← (const byte*) screen#0 + (word~) draw_window::$4 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ) always clobbers reg byte a -Statement [91] *((byte*~) draw_window::$33) ← (byte) $4a [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ) always clobbers reg byte a -Statement [93] (byte*~) draw_window::$34 ← (const byte*) screen#0 + (word~) draw_window::$5 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ) always clobbers reg byte a -Statement [94] *((byte*~) draw_window::$34) ← (byte) $4b [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ) always clobbers reg byte a reg byte y -Statement [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ) always clobbers reg byte a -Statement [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ) always clobbers reg byte a -Statement [103] (byte) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ) always clobbers reg byte a -Statement [104] (byte) draw_window::$46 ← (byte) draw_window::$45 + (byte) draw_window::y3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ) always clobbers reg byte a -Statement [105] (word) draw_window::z#2 ← (byte) draw_window::$46 << (byte) 3 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ) always clobbers reg byte a -Statement [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ) always clobbers reg byte a -Statement [111] (byte*~) draw_window::$35 ← (const byte*) screen#0 + (word~) draw_window::$26 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ) always clobbers reg byte a -Statement [112] *((byte*~) draw_window::$35) ← (byte) $20 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ) always clobbers reg byte a reg byte y -Statement [114] (byte) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ) always clobbers reg byte a -Statement [115] (byte) draw_window::$43 ← (byte) draw_window::$42 + (byte) draw_window::y#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ) always clobbers reg byte a -Statement [116] (word) draw_window::z#1 ← (byte) draw_window::$43 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a -Statement [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ) always clobbers reg byte a -Statement [118] (byte*~) draw_window::$31 ← (const byte*) screen#0 + (word~) draw_window::$19 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ) always clobbers reg byte a -Statement [119] *((byte*~) draw_window::$31) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a reg byte y -Statement [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ) always clobbers reg byte a -Statement [121] (byte*~) draw_window::$32 ← (const byte*) screen#0 + (word~) draw_window::$20 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ) always clobbers reg byte a -Statement [122] *((byte*~) draw_window::$32) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ) always clobbers reg byte a reg byte y -Statement [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ) always clobbers reg byte a -Statement [125] (byte*~) draw_window::$27 ← (const byte*) screen#0 + (word~) draw_window::$14 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ) always clobbers reg byte a -Statement [126] *((byte*~) draw_window::$27) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y -Statement [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ) always clobbers reg byte a -Statement [128] (byte*~) draw_window::$28 ← (const byte*) screen#0 + (word~) draw_window::$15 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ) always clobbers reg byte a -Statement [129] *((byte*~) draw_window::$28) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y -Statement [6] if((byte) main::x#2<(byte) $f) goto main::@2 [ main::x#2 ] ( main:2 [ main::x#2 ] ) always clobbers reg byte a -Statement [14] (byte~) main::$4 ← (byte) main::x#2 + (byte) main::x#2 [ main::x#2 main::$4 ] ( main:2 [ main::x#2 main::$4 ] ) always clobbers reg byte a -Statement [16] (byte) textbox::y2#0 ← (byte) main::x#2 + (byte) $a [ main::x#2 textbox::x2#0 textbox::y2#0 ] ( main:2 [ main::x#2 textbox::x2#0 textbox::y2#0 ] ) always clobbers reg byte a reg byte x -Statement [21] if((word) main::wait#2<(word) $88b8) goto main::@5 [ main::x#2 main::wait#2 ] ( main:2 [ main::x#2 main::wait#2 ] ) always clobbers reg byte a -Statement [22] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2 [ main::x#1 ] ( main:2 [ main::x#1 ] ) always clobbers reg byte a -Statement [32] (byte) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ) always clobbers reg byte a -Statement [33] (byte) textbox::$33 ← (byte) textbox::$32 + (byte) textbox::y#0 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ) always clobbers reg byte a -Statement [34] (word) textbox::z#0 ← (byte) textbox::$33 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ) always clobbers reg byte a -Statement [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ) always clobbers reg byte a -Statement [39] (byte*~) textbox::$31 ← (const byte*) screen#0 + (word~) textbox::$8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ) always clobbers reg byte a -Statement [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y -Statement [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y -Statement [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a -Statement [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a -Statement [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ) always clobbers reg byte a -Statement [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ) always clobbers reg byte a -Statement [58] (byte) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ) always clobbers reg byte a -Statement [59] (byte) textbox::$39 ← (byte) textbox::$38 + (byte) textbox::y#2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ) always clobbers reg byte a -Statement [60] (word) textbox::z#2 ← (byte) textbox::$39 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ) always clobbers reg byte a -Statement [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ) always clobbers reg byte a reg byte y -Statement [65] (byte) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ) always clobbers reg byte a -Statement [66] (byte) textbox::$36 ← (byte) textbox::$35 + (byte) textbox::y#1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ) always clobbers reg byte a -Statement [67] (word) textbox::z#1 ← (byte) textbox::$36 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ) always clobbers reg byte a -Statement [71] (byte) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ) always clobbers reg byte a -Statement [72] (byte) draw_window::$37 ← (byte) draw_window::$36 + (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ) always clobbers reg byte a -Statement [73] (word) draw_window::z#0 ← (byte) draw_window::$37 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ) always clobbers reg byte a -Statement [74] (byte) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ) always clobbers reg byte a -Statement [75] (byte) draw_window::$40 ← (byte) draw_window::$39 + (byte) draw_window::y2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ) always clobbers reg byte a -Statement [76] (word) draw_window::q#0 ← (byte) draw_window::$40 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a -Statement [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ) always clobbers reg byte a -Statement [81] (byte*~) draw_window::$29 ← (const byte*) screen#0 + (word~) draw_window::$2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ) always clobbers reg byte a -Statement [82] *((byte*~) draw_window::$29) ← (byte) $55 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ) always clobbers reg byte a -Statement [84] (byte*~) draw_window::$30 ← (const byte*) screen#0 + (word~) draw_window::$3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ) always clobbers reg byte a -Statement [85] *((byte*~) draw_window::$30) ← (byte) $49 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ) always clobbers reg byte a -Statement [90] (byte*~) draw_window::$33 ← (const byte*) screen#0 + (word~) draw_window::$4 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ) always clobbers reg byte a -Statement [91] *((byte*~) draw_window::$33) ← (byte) $4a [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ) always clobbers reg byte a -Statement [93] (byte*~) draw_window::$34 ← (const byte*) screen#0 + (word~) draw_window::$5 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ) always clobbers reg byte a -Statement [94] *((byte*~) draw_window::$34) ← (byte) $4b [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ) always clobbers reg byte a reg byte y -Statement [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ) always clobbers reg byte a -Statement [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ) always clobbers reg byte a -Statement [103] (byte) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ) always clobbers reg byte a -Statement [104] (byte) draw_window::$46 ← (byte) draw_window::$45 + (byte) draw_window::y3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ) always clobbers reg byte a -Statement [105] (word) draw_window::z#2 ← (byte) draw_window::$46 << (byte) 3 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ) always clobbers reg byte a -Statement [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ) always clobbers reg byte a -Statement [111] (byte*~) draw_window::$35 ← (const byte*) screen#0 + (word~) draw_window::$26 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ) always clobbers reg byte a -Statement [112] *((byte*~) draw_window::$35) ← (byte) $20 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ) always clobbers reg byte a reg byte y -Statement [114] (byte) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ) always clobbers reg byte a -Statement [115] (byte) draw_window::$43 ← (byte) draw_window::$42 + (byte) draw_window::y#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ) always clobbers reg byte a -Statement [116] (word) draw_window::z#1 ← (byte) draw_window::$43 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a -Statement [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ) always clobbers reg byte a -Statement [118] (byte*~) draw_window::$31 ← (const byte*) screen#0 + (word~) draw_window::$19 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ) always clobbers reg byte a -Statement [119] *((byte*~) draw_window::$31) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a reg byte y -Statement [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ) always clobbers reg byte a -Statement [121] (byte*~) draw_window::$32 ← (const byte*) screen#0 + (word~) draw_window::$20 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ) always clobbers reg byte a -Statement [122] *((byte*~) draw_window::$32) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ) always clobbers reg byte a reg byte y -Statement [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ) always clobbers reg byte a -Statement [125] (byte*~) draw_window::$27 ← (const byte*) screen#0 + (word~) draw_window::$14 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ) always clobbers reg byte a -Statement [126] *((byte*~) draw_window::$27) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y -Statement [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ) always clobbers reg byte a -Statement [128] (byte*~) draw_window::$28 ← (const byte*) screen#0 + (word~) draw_window::$15 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ) always clobbers reg byte a -Statement [129] *((byte*~) draw_window::$28) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y -Potential registers zp ZP_BYTE:2 [ main::x#2 main::x#1 ] : zp ZP_BYTE:2 , -Potential registers zp ZP_WORD:3 [ main::wait#2 main::wait#1 ] : zp ZP_WORD:3 , +Statement [14] if((word) main::wait#1<(word) $88b8) goto main::@5 [ main::x#11 main::wait#1 ] ( main:2 [ main::x#11 main::wait#1 ] ) always clobbers reg byte a +Statement [15] (byte) main::x#1 ← (byte) main::x#11 + (byte) 2 [ main::x#1 ] ( main:2 [ main::x#1 ] ) always clobbers reg byte a +Statement [16] if((byte) main::x#1<(byte) $f) goto main::@2 [ main::x#1 ] ( main:2 [ main::x#1 ] ) always clobbers reg byte a +Statement [32] (byte) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ) always clobbers reg byte a +Statement [33] (byte) textbox::$33 ← (byte) textbox::$32 + (byte) textbox::y#0 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ) always clobbers reg byte a +Statement [34] (word) textbox::z#0 ← (byte) textbox::$33 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ) always clobbers reg byte a +Statement [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ) always clobbers reg byte a +Statement [39] (byte*~) textbox::$31 ← (const byte*) screen#0 + (word~) textbox::$8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ) always clobbers reg byte a +Statement [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Statement [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Statement [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a +Statement [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a +Statement [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ) always clobbers reg byte a +Statement [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ) always clobbers reg byte a +Statement [58] (byte) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ) always clobbers reg byte a +Statement [59] (byte) textbox::$39 ← (byte) textbox::$38 + (byte) textbox::y#2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ) always clobbers reg byte a +Statement [60] (word) textbox::z#2 ← (byte) textbox::$39 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ) always clobbers reg byte a +Statement [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ) always clobbers reg byte a reg byte y +Statement [65] (byte) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ) always clobbers reg byte a +Statement [66] (byte) textbox::$36 ← (byte) textbox::$35 + (byte) textbox::y#1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ) always clobbers reg byte a +Statement [67] (word) textbox::z#1 ← (byte) textbox::$36 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ) always clobbers reg byte a +Statement [71] (byte) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ) always clobbers reg byte a +Statement [72] (byte) draw_window::$37 ← (byte) draw_window::$36 + (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ) always clobbers reg byte a +Statement [73] (word) draw_window::z#0 ← (byte) draw_window::$37 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ) always clobbers reg byte a +Statement [74] (byte) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ) always clobbers reg byte a +Statement [75] (byte) draw_window::$40 ← (byte) draw_window::$39 + (byte) draw_window::y2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ) always clobbers reg byte a +Statement [76] (word) draw_window::q#0 ← (byte) draw_window::$40 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a +Statement [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ) always clobbers reg byte a +Statement [81] (byte*~) draw_window::$29 ← (const byte*) screen#0 + (word~) draw_window::$2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ) always clobbers reg byte a +Statement [82] *((byte*~) draw_window::$29) ← (byte) $55 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ) always clobbers reg byte a +Statement [84] (byte*~) draw_window::$30 ← (const byte*) screen#0 + (word~) draw_window::$3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ) always clobbers reg byte a +Statement [85] *((byte*~) draw_window::$30) ← (byte) $49 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ) always clobbers reg byte a +Statement [90] (byte*~) draw_window::$33 ← (const byte*) screen#0 + (word~) draw_window::$4 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ) always clobbers reg byte a +Statement [91] *((byte*~) draw_window::$33) ← (byte) $4a [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ) always clobbers reg byte a +Statement [93] (byte*~) draw_window::$34 ← (const byte*) screen#0 + (word~) draw_window::$5 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ) always clobbers reg byte a +Statement [94] *((byte*~) draw_window::$34) ← (byte) $4b [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ) always clobbers reg byte a reg byte y +Statement [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ) always clobbers reg byte a +Statement [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ) always clobbers reg byte a +Statement [103] (byte) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ) always clobbers reg byte a +Statement [104] (byte) draw_window::$46 ← (byte) draw_window::$45 + (byte) draw_window::y3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ) always clobbers reg byte a +Statement [105] (word) draw_window::z#2 ← (byte) draw_window::$46 << (byte) 3 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ) always clobbers reg byte a +Statement [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ) always clobbers reg byte a +Statement [111] (byte*~) draw_window::$35 ← (const byte*) screen#0 + (word~) draw_window::$26 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ) always clobbers reg byte a +Statement [112] *((byte*~) draw_window::$35) ← (byte) $20 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ) always clobbers reg byte a reg byte y +Statement [114] (byte) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ) always clobbers reg byte a +Statement [115] (byte) draw_window::$43 ← (byte) draw_window::$42 + (byte) draw_window::y#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ) always clobbers reg byte a +Statement [116] (word) draw_window::z#1 ← (byte) draw_window::$43 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a +Statement [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ) always clobbers reg byte a +Statement [118] (byte*~) draw_window::$31 ← (const byte*) screen#0 + (word~) draw_window::$19 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ) always clobbers reg byte a +Statement [119] *((byte*~) draw_window::$31) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a reg byte y +Statement [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ) always clobbers reg byte a +Statement [121] (byte*~) draw_window::$32 ← (const byte*) screen#0 + (word~) draw_window::$20 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ) always clobbers reg byte a +Statement [122] *((byte*~) draw_window::$32) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ) always clobbers reg byte a reg byte y +Statement [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ) always clobbers reg byte a +Statement [125] (byte*~) draw_window::$27 ← (const byte*) screen#0 + (word~) draw_window::$14 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ) always clobbers reg byte a +Statement [126] *((byte*~) draw_window::$27) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y +Statement [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ) always clobbers reg byte a +Statement [128] (byte*~) draw_window::$28 ← (const byte*) screen#0 + (word~) draw_window::$15 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ) always clobbers reg byte a +Statement [129] *((byte*~) draw_window::$28) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y +Statement [6] (byte~) main::$4 ← (byte) main::x#11 + (byte) main::x#11 [ main::x#11 main::$4 ] ( main:2 [ main::x#11 main::$4 ] ) always clobbers reg byte a +Statement [8] (byte) textbox::y2#0 ← (byte) main::x#11 + (byte) $a [ main::x#11 textbox::x2#0 textbox::y2#0 ] ( main:2 [ main::x#11 textbox::x2#0 textbox::y2#0 ] ) always clobbers reg byte a reg byte x +Statement [14] if((word) main::wait#1<(word) $88b8) goto main::@5 [ main::x#11 main::wait#1 ] ( main:2 [ main::x#11 main::wait#1 ] ) always clobbers reg byte a +Statement [15] (byte) main::x#1 ← (byte) main::x#11 + (byte) 2 [ main::x#1 ] ( main:2 [ main::x#1 ] ) always clobbers reg byte a +Statement [16] if((byte) main::x#1<(byte) $f) goto main::@2 [ main::x#1 ] ( main:2 [ main::x#1 ] ) always clobbers reg byte a +Statement [32] (byte) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ) always clobbers reg byte a +Statement [33] (byte) textbox::$33 ← (byte) textbox::$32 + (byte) textbox::y#0 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ) always clobbers reg byte a +Statement [34] (word) textbox::z#0 ← (byte) textbox::$33 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ) always clobbers reg byte a +Statement [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ) always clobbers reg byte a +Statement [39] (byte*~) textbox::$31 ← (const byte*) screen#0 + (word~) textbox::$8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ) always clobbers reg byte a +Statement [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Statement [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Statement [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a +Statement [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a +Statement [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ) always clobbers reg byte a +Statement [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ) always clobbers reg byte a +Statement [58] (byte) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ) always clobbers reg byte a +Statement [59] (byte) textbox::$39 ← (byte) textbox::$38 + (byte) textbox::y#2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ) always clobbers reg byte a +Statement [60] (word) textbox::z#2 ← (byte) textbox::$39 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ) always clobbers reg byte a +Statement [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ) always clobbers reg byte a reg byte y +Statement [65] (byte) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ) always clobbers reg byte a +Statement [66] (byte) textbox::$36 ← (byte) textbox::$35 + (byte) textbox::y#1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ) always clobbers reg byte a +Statement [67] (word) textbox::z#1 ← (byte) textbox::$36 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ( main:2::textbox:11 [ main::x#11 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:18 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:20 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:22 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ) always clobbers reg byte a +Statement [71] (byte) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ) always clobbers reg byte a +Statement [72] (byte) draw_window::$37 ← (byte) draw_window::$36 + (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ) always clobbers reg byte a +Statement [73] (word) draw_window::z#0 ← (byte) draw_window::$37 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ) always clobbers reg byte a +Statement [74] (byte) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ) always clobbers reg byte a +Statement [75] (byte) draw_window::$40 ← (byte) draw_window::$39 + (byte) draw_window::y2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ) always clobbers reg byte a +Statement [76] (word) draw_window::q#0 ← (byte) draw_window::$40 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a +Statement [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ) always clobbers reg byte a +Statement [81] (byte*~) draw_window::$29 ← (const byte*) screen#0 + (word~) draw_window::$2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ) always clobbers reg byte a +Statement [82] *((byte*~) draw_window::$29) ← (byte) $55 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ) always clobbers reg byte a +Statement [84] (byte*~) draw_window::$30 ← (const byte*) screen#0 + (word~) draw_window::$3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ) always clobbers reg byte a +Statement [85] *((byte*~) draw_window::$30) ← (byte) $49 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ) always clobbers reg byte a +Statement [90] (byte*~) draw_window::$33 ← (const byte*) screen#0 + (word~) draw_window::$4 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ) always clobbers reg byte a +Statement [91] *((byte*~) draw_window::$33) ← (byte) $4a [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ) always clobbers reg byte a +Statement [93] (byte*~) draw_window::$34 ← (const byte*) screen#0 + (word~) draw_window::$5 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ) always clobbers reg byte a +Statement [94] *((byte*~) draw_window::$34) ← (byte) $4b [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ) always clobbers reg byte a reg byte y +Statement [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ) always clobbers reg byte a +Statement [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ) always clobbers reg byte a +Statement [103] (byte) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ) always clobbers reg byte a +Statement [104] (byte) draw_window::$46 ← (byte) draw_window::$45 + (byte) draw_window::y3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ) always clobbers reg byte a +Statement [105] (word) draw_window::z#2 ← (byte) draw_window::$46 << (byte) 3 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ) always clobbers reg byte a +Statement [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ) always clobbers reg byte a +Statement [111] (byte*~) draw_window::$35 ← (const byte*) screen#0 + (word~) draw_window::$26 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ) always clobbers reg byte a +Statement [112] *((byte*~) draw_window::$35) ← (byte) $20 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ) always clobbers reg byte a reg byte y +Statement [114] (byte) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ) always clobbers reg byte a +Statement [115] (byte) draw_window::$43 ← (byte) draw_window::$42 + (byte) draw_window::y#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ) always clobbers reg byte a +Statement [116] (word) draw_window::z#1 ← (byte) draw_window::$43 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a +Statement [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ) always clobbers reg byte a +Statement [118] (byte*~) draw_window::$31 ← (const byte*) screen#0 + (word~) draw_window::$19 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ) always clobbers reg byte a +Statement [119] *((byte*~) draw_window::$31) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a reg byte y +Statement [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ) always clobbers reg byte a +Statement [121] (byte*~) draw_window::$32 ← (const byte*) screen#0 + (word~) draw_window::$20 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ) always clobbers reg byte a +Statement [122] *((byte*~) draw_window::$32) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ) always clobbers reg byte a reg byte y +Statement [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ) always clobbers reg byte a +Statement [125] (byte*~) draw_window::$27 ← (const byte*) screen#0 + (word~) draw_window::$14 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ) always clobbers reg byte a +Statement [126] *((byte*~) draw_window::$27) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y +Statement [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ) always clobbers reg byte a +Statement [128] (byte*~) draw_window::$28 ← (const byte*) screen#0 + (word~) draw_window::$15 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ) always clobbers reg byte a +Statement [129] *((byte*~) draw_window::$28) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:11::draw_window:29 [ main::x#11 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:18::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:20::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:22::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y +Potential registers zp ZP_BYTE:2 [ main::x#11 main::x#1 ] : zp ZP_BYTE:2 , +Potential registers zp ZP_WORD:3 [ main::wait#4 main::wait#1 ] : zp ZP_WORD:3 , Potential registers zp ZP_BYTE:5 [ textbox::x1#4 textbox::x1#0 ] : zp ZP_BYTE:5 , reg byte x , Potential registers zp ZP_BYTE:6 [ textbox::y1#4 textbox::y1#0 ] : zp ZP_BYTE:6 , reg byte x , Potential registers zp ZP_BYTE:7 [ textbox::x2#4 textbox::x2#0 ] : zp ZP_BYTE:7 , @@ -3243,72 +3270,72 @@ Potential registers zp ZP_WORD:91 [ draw_window::$28 ] : zp ZP_WORD:91 , REGISTER UPLIFT SCOPES Uplift Scope [draw_window] 3,025: zp ZP_BYTE:21 [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] 2,002: zp ZP_WORD:69 [ draw_window::$26 ] 2,002: zp ZP_WORD:71 [ draw_window::$35 ] 269.38: zp ZP_BYTE:18 [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] 252.09: zp ZP_BYTE:19 [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] 248.25: zp ZP_BYTE:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] 202: zp ZP_BYTE:65 [ draw_window::$45 ] 202: zp ZP_BYTE:66 [ draw_window::$46 ] 202: zp ZP_BYTE:73 [ draw_window::$42 ] 202: zp ZP_BYTE:74 [ draw_window::$43 ] 202: zp ZP_WORD:77 [ draw_window::$19 ] 202: zp ZP_WORD:79 [ draw_window::$31 ] 202: zp ZP_WORD:81 [ draw_window::$20 ] 202: zp ZP_WORD:83 [ draw_window::$32 ] 202: zp ZP_WORD:85 [ draw_window::$14 ] 202: zp ZP_WORD:87 [ draw_window::$27 ] 202: zp ZP_WORD:89 [ draw_window::$15 ] 202: zp ZP_WORD:91 [ draw_window::$28 ] 137.75: zp ZP_WORD:67 [ draw_window::z#2 ] 75.75: zp ZP_WORD:75 [ draw_window::z#1 ] 19.85: zp ZP_BYTE:25 [ draw_window::x2#0 ] 6.29: zp ZP_WORD:41 [ draw_window::z#0 ] 4: zp ZP_BYTE:39 [ draw_window::$36 ] 4: zp ZP_BYTE:40 [ draw_window::$37 ] 4: zp ZP_BYTE:43 [ draw_window::$39 ] 4: zp ZP_BYTE:44 [ draw_window::$40 ] 4: zp ZP_WORD:47 [ draw_window::$2 ] 4: zp ZP_WORD:49 [ draw_window::$29 ] 4: zp ZP_WORD:51 [ draw_window::$3 ] 4: zp ZP_WORD:53 [ draw_window::$30 ] 4: zp ZP_WORD:55 [ draw_window::$4 ] 4: zp ZP_WORD:57 [ draw_window::$33 ] 4: zp ZP_WORD:59 [ draw_window::$5 ] 4: zp ZP_WORD:61 [ draw_window::$34 ] 3.5: zp ZP_BYTE:26 [ draw_window::y2#0 ] 3.37: zp ZP_BYTE:23 [ draw_window::x1#0 ] 3.24: zp ZP_WORD:45 [ draw_window::q#0 ] 2: zp ZP_BYTE:63 [ draw_window::$6 ] 2: zp ZP_BYTE:64 [ draw_window::$8 ] 0.25: zp ZP_BYTE:24 [ draw_window::y1#0 ] Uplift Scope [textbox] 2,571.33: zp ZP_BYTE:12 [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] 2,316.86: zp ZP_BYTE:13 [ textbox::c#2 textbox::c#1 ] 777.88: zp ZP_BYTE:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] 585.83: zp ZP_WORD:16 [ textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] 466.16: zp ZP_BYTE:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] 202: zp ZP_WORD:29 [ textbox::$8 ] 202: zp ZP_WORD:31 [ textbox::$31 ] 202: zp ZP_BYTE:35 [ textbox::$38 ] 202: zp ZP_BYTE:36 [ textbox::$39 ] 202: zp ZP_BYTE:37 [ textbox::$35 ] 202: zp ZP_BYTE:38 [ textbox::$36 ] 101: zp ZP_BYTE:33 [ textbox::$15 ] 101: zp ZP_BYTE:34 [ textbox::$17 ] 50.5: zp ZP_BYTE:11 [ textbox::i#2 textbox::i#1 ] 50.11: zp ZP_WORD:9 [ textbox::text#12 ] 24.5: zp ZP_BYTE:6 [ textbox::y1#4 textbox::y1#0 ] 17.91: zp ZP_BYTE:5 [ textbox::x1#4 textbox::x1#0 ] 12.41: zp ZP_BYTE:7 [ textbox::x2#4 textbox::x2#0 ] 12.05: zp ZP_BYTE:8 [ textbox::y2#4 textbox::y2#0 ] 4: zp ZP_BYTE:27 [ textbox::$32 ] 4: zp ZP_BYTE:28 [ textbox::$33 ] -Uplift Scope [main] 353.5: zp ZP_WORD:3 [ main::wait#2 main::wait#1 ] 30: zp ZP_BYTE:2 [ main::x#2 main::x#1 ] 22: zp ZP_BYTE:22 [ main::$4 ] +Uplift Scope [main] 353.5: zp ZP_WORD:3 [ main::wait#4 main::wait#1 ] 24.2: zp ZP_BYTE:2 [ main::x#11 main::x#1 ] 22: zp ZP_BYTE:22 [ main::$4 ] Uplift Scope [] -Uplifting [draw_window] best 192514 combination reg byte x [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] zp ZP_WORD:69 [ draw_window::$26 ] zp ZP_WORD:71 [ draw_window::$35 ] reg byte x [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] reg byte x [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] zp ZP_BYTE:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] reg byte a [ draw_window::$45 ] reg byte a [ draw_window::$46 ] zp ZP_BYTE:73 [ draw_window::$42 ] zp ZP_BYTE:74 [ draw_window::$43 ] zp ZP_WORD:77 [ draw_window::$19 ] zp ZP_WORD:79 [ draw_window::$31 ] zp ZP_WORD:81 [ draw_window::$20 ] zp ZP_WORD:83 [ draw_window::$32 ] zp ZP_WORD:85 [ draw_window::$14 ] zp ZP_WORD:87 [ draw_window::$27 ] zp ZP_WORD:89 [ draw_window::$15 ] zp ZP_WORD:91 [ draw_window::$28 ] zp ZP_WORD:67 [ draw_window::z#2 ] zp ZP_WORD:75 [ draw_window::z#1 ] zp ZP_BYTE:25 [ draw_window::x2#0 ] zp ZP_WORD:41 [ draw_window::z#0 ] zp ZP_BYTE:39 [ draw_window::$36 ] zp ZP_BYTE:40 [ draw_window::$37 ] zp ZP_BYTE:43 [ draw_window::$39 ] zp ZP_BYTE:44 [ draw_window::$40 ] zp ZP_WORD:47 [ draw_window::$2 ] zp ZP_WORD:49 [ draw_window::$29 ] zp ZP_WORD:51 [ draw_window::$3 ] zp ZP_WORD:53 [ draw_window::$30 ] zp ZP_WORD:55 [ draw_window::$4 ] zp ZP_WORD:57 [ draw_window::$33 ] zp ZP_WORD:59 [ draw_window::$5 ] zp ZP_WORD:61 [ draw_window::$34 ] zp ZP_BYTE:26 [ draw_window::y2#0 ] zp ZP_BYTE:23 [ draw_window::x1#0 ] zp ZP_WORD:45 [ draw_window::q#0 ] zp ZP_BYTE:63 [ draw_window::$6 ] zp ZP_BYTE:64 [ draw_window::$8 ] zp ZP_BYTE:24 [ draw_window::y1#0 ] +Uplifting [draw_window] best 192844 combination reg byte x [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] zp ZP_WORD:69 [ draw_window::$26 ] zp ZP_WORD:71 [ draw_window::$35 ] reg byte x [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] reg byte x [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] zp ZP_BYTE:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] reg byte a [ draw_window::$45 ] reg byte a [ draw_window::$46 ] zp ZP_BYTE:73 [ draw_window::$42 ] zp ZP_BYTE:74 [ draw_window::$43 ] zp ZP_WORD:77 [ draw_window::$19 ] zp ZP_WORD:79 [ draw_window::$31 ] zp ZP_WORD:81 [ draw_window::$20 ] zp ZP_WORD:83 [ draw_window::$32 ] zp ZP_WORD:85 [ draw_window::$14 ] zp ZP_WORD:87 [ draw_window::$27 ] zp ZP_WORD:89 [ draw_window::$15 ] zp ZP_WORD:91 [ draw_window::$28 ] zp ZP_WORD:67 [ draw_window::z#2 ] zp ZP_WORD:75 [ draw_window::z#1 ] zp ZP_BYTE:25 [ draw_window::x2#0 ] zp ZP_WORD:41 [ draw_window::z#0 ] zp ZP_BYTE:39 [ draw_window::$36 ] zp ZP_BYTE:40 [ draw_window::$37 ] zp ZP_BYTE:43 [ draw_window::$39 ] zp ZP_BYTE:44 [ draw_window::$40 ] zp ZP_WORD:47 [ draw_window::$2 ] zp ZP_WORD:49 [ draw_window::$29 ] zp ZP_WORD:51 [ draw_window::$3 ] zp ZP_WORD:53 [ draw_window::$30 ] zp ZP_WORD:55 [ draw_window::$4 ] zp ZP_WORD:57 [ draw_window::$33 ] zp ZP_WORD:59 [ draw_window::$5 ] zp ZP_WORD:61 [ draw_window::$34 ] zp ZP_BYTE:26 [ draw_window::y2#0 ] zp ZP_BYTE:23 [ draw_window::x1#0 ] zp ZP_WORD:45 [ draw_window::q#0 ] zp ZP_BYTE:63 [ draw_window::$6 ] zp ZP_BYTE:64 [ draw_window::$8 ] zp ZP_BYTE:24 [ draw_window::y1#0 ] Limited combination testing to 100 combinations of 201326592 possible. -Uplifting [textbox] best 176214 combination reg byte y [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] reg byte x [ textbox::c#2 textbox::c#1 ] zp ZP_BYTE:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] zp ZP_WORD:16 [ textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] zp ZP_BYTE:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] zp ZP_WORD:29 [ textbox::$8 ] zp ZP_WORD:31 [ textbox::$31 ] reg byte a [ textbox::$38 ] zp ZP_BYTE:36 [ textbox::$39 ] zp ZP_BYTE:37 [ textbox::$35 ] zp ZP_BYTE:38 [ textbox::$36 ] zp ZP_BYTE:33 [ textbox::$15 ] zp ZP_BYTE:34 [ textbox::$17 ] zp ZP_BYTE:11 [ textbox::i#2 textbox::i#1 ] zp ZP_WORD:9 [ textbox::text#12 ] zp ZP_BYTE:6 [ textbox::y1#4 textbox::y1#0 ] zp ZP_BYTE:5 [ textbox::x1#4 textbox::x1#0 ] zp ZP_BYTE:7 [ textbox::x2#4 textbox::x2#0 ] zp ZP_BYTE:8 [ textbox::y2#4 textbox::y2#0 ] zp ZP_BYTE:27 [ textbox::$32 ] zp ZP_BYTE:28 [ textbox::$33 ] +Uplifting [textbox] best 176544 combination reg byte y [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] reg byte x [ textbox::c#2 textbox::c#1 ] zp ZP_BYTE:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] zp ZP_WORD:16 [ textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] zp ZP_BYTE:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] zp ZP_WORD:29 [ textbox::$8 ] zp ZP_WORD:31 [ textbox::$31 ] reg byte a [ textbox::$38 ] zp ZP_BYTE:36 [ textbox::$39 ] zp ZP_BYTE:37 [ textbox::$35 ] zp ZP_BYTE:38 [ textbox::$36 ] zp ZP_BYTE:33 [ textbox::$15 ] zp ZP_BYTE:34 [ textbox::$17 ] zp ZP_BYTE:11 [ textbox::i#2 textbox::i#1 ] zp ZP_WORD:9 [ textbox::text#12 ] zp ZP_BYTE:6 [ textbox::y1#4 textbox::y1#0 ] zp ZP_BYTE:5 [ textbox::x1#4 textbox::x1#0 ] zp ZP_BYTE:7 [ textbox::x2#4 textbox::x2#0 ] zp ZP_BYTE:8 [ textbox::y2#4 textbox::y2#0 ] zp ZP_BYTE:27 [ textbox::$32 ] zp ZP_BYTE:28 [ textbox::$33 ] Limited combination testing to 100 combinations of 28311552 possible. -Uplifting [main] best 176174 combination zp ZP_WORD:3 [ main::wait#2 main::wait#1 ] zp ZP_BYTE:2 [ main::x#2 main::x#1 ] reg byte a [ main::$4 ] -Uplifting [] best 176174 combination +Uplifting [main] best 176504 combination zp ZP_WORD:3 [ main::wait#4 main::wait#1 ] zp ZP_BYTE:2 [ main::x#11 main::x#1 ] reg byte a [ main::$4 ] +Uplifting [] best 176504 combination Attempting to uplift remaining variables inzp ZP_BYTE:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] -Uplifting [textbox] best 176174 combination zp ZP_BYTE:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] +Uplifting [textbox] best 176504 combination zp ZP_BYTE:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] -Uplifting [textbox] best 176174 combination zp ZP_BYTE:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] +Uplifting [textbox] best 176504 combination zp ZP_BYTE:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] -Uplifting [draw_window] best 176174 combination zp ZP_BYTE:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] +Uplifting [draw_window] best 176504 combination zp ZP_BYTE:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:36 [ textbox::$39 ] -Uplifting [textbox] best 175574 combination reg byte a [ textbox::$39 ] +Uplifting [textbox] best 175904 combination reg byte a [ textbox::$39 ] Attempting to uplift remaining variables inzp ZP_BYTE:37 [ textbox::$35 ] -Uplifting [textbox] best 174974 combination reg byte a [ textbox::$35 ] +Uplifting [textbox] best 175304 combination reg byte a [ textbox::$35 ] Attempting to uplift remaining variables inzp ZP_BYTE:38 [ textbox::$36 ] -Uplifting [textbox] best 174374 combination reg byte a [ textbox::$36 ] +Uplifting [textbox] best 174704 combination reg byte a [ textbox::$36 ] Attempting to uplift remaining variables inzp ZP_BYTE:73 [ draw_window::$42 ] -Uplifting [draw_window] best 174174 combination reg byte a [ draw_window::$42 ] +Uplifting [draw_window] best 174504 combination reg byte a [ draw_window::$42 ] Attempting to uplift remaining variables inzp ZP_BYTE:74 [ draw_window::$43 ] -Uplifting [draw_window] best 173574 combination reg byte a [ draw_window::$43 ] +Uplifting [draw_window] best 173904 combination reg byte a [ draw_window::$43 ] Attempting to uplift remaining variables inzp ZP_BYTE:33 [ textbox::$15 ] -Uplifting [textbox] best 173174 combination reg byte y [ textbox::$15 ] +Uplifting [textbox] best 173504 combination reg byte y [ textbox::$15 ] Attempting to uplift remaining variables inzp ZP_BYTE:34 [ textbox::$17 ] -Uplifting [textbox] best 173174 combination zp ZP_BYTE:34 [ textbox::$17 ] +Uplifting [textbox] best 173504 combination zp ZP_BYTE:34 [ textbox::$17 ] Attempting to uplift remaining variables inzp ZP_BYTE:11 [ textbox::i#2 textbox::i#1 ] -Uplifting [textbox] best 173174 combination zp ZP_BYTE:11 [ textbox::i#2 textbox::i#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::x#2 main::x#1 ] -Uplifting [main] best 173174 combination zp ZP_BYTE:2 [ main::x#2 main::x#1 ] +Uplifting [textbox] best 173504 combination zp ZP_BYTE:11 [ textbox::i#2 textbox::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ textbox::y1#4 textbox::y1#0 ] -Uplifting [textbox] best 173174 combination zp ZP_BYTE:6 [ textbox::y1#4 textbox::y1#0 ] +Uplifting [textbox] best 173504 combination zp ZP_BYTE:6 [ textbox::y1#4 textbox::y1#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::x#11 main::x#1 ] +Uplifting [main] best 173504 combination zp ZP_BYTE:2 [ main::x#11 main::x#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:25 [ draw_window::x2#0 ] -Uplifting [draw_window] best 173174 combination zp ZP_BYTE:25 [ draw_window::x2#0 ] +Uplifting [draw_window] best 173504 combination zp ZP_BYTE:25 [ draw_window::x2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ textbox::x1#4 textbox::x1#0 ] -Uplifting [textbox] best 173174 combination zp ZP_BYTE:5 [ textbox::x1#4 textbox::x1#0 ] +Uplifting [textbox] best 173504 combination zp ZP_BYTE:5 [ textbox::x1#4 textbox::x1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:7 [ textbox::x2#4 textbox::x2#0 ] -Uplifting [textbox] best 173174 combination zp ZP_BYTE:7 [ textbox::x2#4 textbox::x2#0 ] +Uplifting [textbox] best 173504 combination zp ZP_BYTE:7 [ textbox::x2#4 textbox::x2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:8 [ textbox::y2#4 textbox::y2#0 ] -Uplifting [textbox] best 173174 combination zp ZP_BYTE:8 [ textbox::y2#4 textbox::y2#0 ] +Uplifting [textbox] best 173504 combination zp ZP_BYTE:8 [ textbox::y2#4 textbox::y2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:27 [ textbox::$32 ] -Uplifting [textbox] best 173168 combination reg byte a [ textbox::$32 ] +Uplifting [textbox] best 173498 combination reg byte a [ textbox::$32 ] Attempting to uplift remaining variables inzp ZP_BYTE:28 [ textbox::$33 ] -Uplifting [textbox] best 173162 combination reg byte a [ textbox::$33 ] +Uplifting [textbox] best 173492 combination reg byte a [ textbox::$33 ] Attempting to uplift remaining variables inzp ZP_BYTE:39 [ draw_window::$36 ] -Uplifting [draw_window] best 173156 combination reg byte a [ draw_window::$36 ] +Uplifting [draw_window] best 173486 combination reg byte a [ draw_window::$36 ] Attempting to uplift remaining variables inzp ZP_BYTE:40 [ draw_window::$37 ] -Uplifting [draw_window] best 173150 combination reg byte a [ draw_window::$37 ] +Uplifting [draw_window] best 173480 combination reg byte a [ draw_window::$37 ] Attempting to uplift remaining variables inzp ZP_BYTE:43 [ draw_window::$39 ] -Uplifting [draw_window] best 173144 combination reg byte a [ draw_window::$39 ] +Uplifting [draw_window] best 173474 combination reg byte a [ draw_window::$39 ] Attempting to uplift remaining variables inzp ZP_BYTE:44 [ draw_window::$40 ] -Uplifting [draw_window] best 173138 combination reg byte a [ draw_window::$40 ] +Uplifting [draw_window] best 173468 combination reg byte a [ draw_window::$40 ] Attempting to uplift remaining variables inzp ZP_BYTE:26 [ draw_window::y2#0 ] -Uplifting [draw_window] best 173138 combination zp ZP_BYTE:26 [ draw_window::y2#0 ] +Uplifting [draw_window] best 173468 combination zp ZP_BYTE:26 [ draw_window::y2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:23 [ draw_window::x1#0 ] -Uplifting [draw_window] best 173138 combination zp ZP_BYTE:23 [ draw_window::x1#0 ] +Uplifting [draw_window] best 173468 combination zp ZP_BYTE:23 [ draw_window::x1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:63 [ draw_window::$6 ] -Uplifting [draw_window] best 173134 combination reg byte x [ draw_window::$6 ] +Uplifting [draw_window] best 173464 combination reg byte x [ draw_window::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:64 [ draw_window::$8 ] -Uplifting [draw_window] best 173128 combination reg byte a [ draw_window::$8 ] +Uplifting [draw_window] best 173458 combination reg byte a [ draw_window::$8 ] Attempting to uplift remaining variables inzp ZP_BYTE:24 [ draw_window::y1#0 ] -Uplifting [draw_window] best 173128 combination zp ZP_BYTE:24 [ draw_window::y1#0 ] -Coalescing zero page register [ zp ZP_BYTE:2 [ main::x#2 main::x#1 ] ] with [ zp ZP_BYTE:5 [ textbox::x1#4 textbox::x1#0 ] ] - score: 1 +Uplifting [draw_window] best 173458 combination zp ZP_BYTE:24 [ draw_window::y1#0 ] +Coalescing zero page register [ zp ZP_BYTE:2 [ main::x#11 main::x#1 ] ] with [ zp ZP_BYTE:5 [ textbox::x1#4 textbox::x1#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:6 [ textbox::y1#4 textbox::y1#0 ] ] with [ zp ZP_BYTE:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:6 [ textbox::y1#4 textbox::y1#0 textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] ] with [ zp ZP_BYTE:24 [ draw_window::y1#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:7 [ textbox::x2#4 textbox::x2#0 ] ] with [ zp ZP_BYTE:25 [ draw_window::x2#0 ] ] - score: 1 @@ -3323,18 +3350,18 @@ Coalescing zero page register [ zp ZP_WORD:75 [ draw_window::z#1 ] ] with [ zp Z Coalescing zero page register [ zp ZP_WORD:77 [ draw_window::$19 ] ] with [ zp ZP_WORD:79 [ draw_window::$31 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:85 [ draw_window::$14 ] ] with [ zp ZP_WORD:87 [ draw_window::$27 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:89 [ draw_window::$15 ] ] with [ zp ZP_WORD:91 [ draw_window::$28 ] ] - score: 1 -Coalescing zero page register [ zp ZP_BYTE:2 [ main::x#2 main::x#1 textbox::x1#4 textbox::x1#0 ] ] with [ zp ZP_BYTE:23 [ draw_window::x1#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_BYTE:2 [ main::x#11 main::x#1 textbox::x1#4 textbox::x1#0 ] ] with [ zp ZP_BYTE:23 [ draw_window::x1#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:41 [ draw_window::z#0 draw_window::$3 ] ] with [ zp ZP_WORD:53 [ draw_window::$30 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:45 [ draw_window::q#0 draw_window::$5 ] ] with [ zp ZP_WORD:61 [ draw_window::$34 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:75 [ draw_window::z#1 draw_window::$20 ] ] with [ zp ZP_WORD:83 [ draw_window::$32 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:9 [ textbox::text#12 ] ] with [ zp ZP_WORD:3 [ main::wait#2 main::wait#1 ] ] +Coalescing zero page register [ zp ZP_WORD:9 [ textbox::text#12 ] ] with [ zp ZP_WORD:3 [ main::wait#4 main::wait#1 ] ] Coalescing zero page register [ zp ZP_BYTE:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] ] with [ zp ZP_BYTE:11 [ textbox::i#2 textbox::i#1 ] ] Coalescing zero page register [ zp ZP_WORD:41 [ draw_window::z#0 draw_window::$3 draw_window::$30 ] ] with [ zp ZP_WORD:16 [ textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] ] Coalescing zero page register [ zp ZP_WORD:45 [ draw_window::q#0 draw_window::$5 draw_window::$34 ] ] with [ zp ZP_WORD:29 [ textbox::$8 textbox::$31 ] ] Allocated (was zp ZP_BYTE:6) zp ZP_BYTE:3 [ textbox::y1#4 textbox::y1#0 textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 draw_window::y1#0 ] Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:4 [ textbox::x2#4 textbox::x2#0 draw_window::x2#0 ] Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:5 [ textbox::y2#4 textbox::y2#0 draw_window::y2#0 ] -Allocated (was zp ZP_WORD:9) zp ZP_WORD:6 [ textbox::text#12 main::wait#2 main::wait#1 ] +Allocated (was zp ZP_WORD:9) zp ZP_WORD:6 [ textbox::text#12 main::wait#4 main::wait#1 ] Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:8 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] Allocated (was zp ZP_BYTE:20) zp ZP_BYTE:9 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 textbox::i#2 textbox::i#1 ] Allocated (was zp ZP_BYTE:34) zp ZP_BYTE:10 [ textbox::$17 ] @@ -3378,24 +3405,98 @@ bend: main: { .label wait = 6 .label x = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::x#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + b2_from_main: + // [5] phi (byte) main::x#11 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta x + jmp b2 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + // [5] phi (byte) main::x#11 = (byte) main::x#1 [phi:main::@1->main::@2#0] -- register_copy + jmp b2 + // main::@2 + b2: + // [6] (byte~) main::$4 ← (byte) main::x#11 + (byte) main::x#11 -- vbuaa=vbuz1_plus_vbuz1 + lda x + asl + // [7] (byte) textbox::x2#0 ← (byte~) main::$4 + (byte) 1 -- vbuz1=vbuaa_plus_1 + clc + adc #1 + sta textbox.x2 + // [8] (byte) textbox::y2#0 ← (byte) main::x#11 + (byte) $a -- vbuz1=vbuz2_plus_vbuc1 + lax x + axs #-[$a] + stx textbox.y2 + // [9] (byte) textbox::x1#0 ← (byte) main::x#11 + // [10] (byte) textbox::y1#0 ← (byte) main::x#11 -- vbuz1=vbuz2 + lda x + sta textbox.y1 + // [11] call textbox + // [24] phi from main::@2 to textbox [phi:main::@2->textbox] + textbox_from_b2: + // [24] phi (byte*) textbox::text#12 = (const byte[]) text2#0 [phi:main::@2->textbox#0] -- pbuz1=pbuc1 + lda #text2 + sta textbox.text+1 + // [24] phi (byte) textbox::y2#4 = (byte) textbox::y2#0 [phi:main::@2->textbox#1] -- register_copy + // [24] phi (byte) textbox::x2#4 = (byte) textbox::x2#0 [phi:main::@2->textbox#2] -- register_copy + // [24] phi (byte) textbox::y1#4 = (byte) textbox::y1#0 [phi:main::@2->textbox#3] -- register_copy + // [24] phi (byte) textbox::x1#4 = (byte) textbox::x1#0 [phi:main::@2->textbox#4] -- register_copy + jsr textbox + // [12] phi from main::@2 to main::@5 [phi:main::@2->main::@5] + b5_from_b2: + // [12] phi (word) main::wait#4 = (byte) 0 [phi:main::@2->main::@5#0] -- vwuz1=vbuc1 + lda #<0 + sta wait + lda #>0 + sta wait+1 + jmp b5 + // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + b5_from_b4: + // [12] phi (word) main::wait#4 = (word) main::wait#1 [phi:main::@4->main::@5#0] -- register_copy + jmp b5 + // main::@5 + b5: + // [13] (word) main::wait#1 ← ++ (word) main::wait#4 -- vwuz1=_inc_vwuz1 + inc wait + bne !+ + inc wait+1 + !: + jmp b4 + // main::@4 + b4: + // [14] if((word) main::wait#1<(word) $88b8) goto main::@5 -- vwuz1_lt_vwuc1_then_la1 + lda wait+1 + cmp #>$88b8 + bcc b5_from_b4 + bne !+ + lda wait + cmp #<$88b8 + bcc b5_from_b4 + !: + jmp b6 + // main::@6 + b6: + // [15] (byte) main::x#1 ← (byte) main::x#11 + (byte) 2 -- vbuz1=vbuz1_plus_2 + lda x + clc + adc #2 + sta x jmp b1 // main::@1 b1: - // [6] if((byte) main::x#2<(byte) $f) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + // [16] if((byte) main::x#1<(byte) $f) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 lda x cmp #$f - bcc b2 - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + bcc b2_from_b1 + // [17] phi from main::@1 to main::@3 [phi:main::@1->main::@3] b3_from_b1: jmp b3 // main::@3 b3: - // [8] call textbox + // [18] call textbox // [24] phi from main::@3 to textbox [phi:main::@3->textbox] textbox_from_b3: // [24] phi (byte*) textbox::text#12 = (const byte[]) text#0 [phi:main::@3->textbox#0] -- pbuz1=pbuc1 @@ -3416,12 +3517,12 @@ main: { lda #0 sta textbox.x1 jsr textbox - // [9] phi from main::@3 to main::@8 [phi:main::@3->main::@8] + // [19] phi from main::@3 to main::@8 [phi:main::@3->main::@8] b8_from_b3: jmp b8 // main::@8 b8: - // [10] call textbox + // [20] call textbox // [24] phi from main::@8 to textbox [phi:main::@8->textbox] textbox_from_b8: // [24] phi (byte*) textbox::text#12 = (const byte[]) text#0 [phi:main::@8->textbox#0] -- pbuz1=pbuc1 @@ -3442,12 +3543,12 @@ main: { lda #3 sta textbox.x1 jsr textbox - // [11] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [21] phi from main::@8 to main::@9 [phi:main::@8->main::@9] b9_from_b8: jmp b9 // main::@9 b9: - // [12] call textbox + // [22] call textbox // [24] phi from main::@9 to textbox [phi:main::@9->textbox] textbox_from_b9: // [24] phi (byte*) textbox::text#12 = (const byte[]) text#0 [phi:main::@9->textbox#0] -- pbuz1=pbuc1 @@ -3468,85 +3569,13 @@ main: { lda #$1e sta textbox.x1 jsr textbox - // [13] phi from main::@7 main::@9 to main::@7 [phi:main::@7/main::@9->main::@7] + // [23] phi from main::@7 main::@9 to main::@7 [phi:main::@7/main::@9->main::@7] b7_from_b7: b7_from_b9: jmp b7 // main::@7 b7: jmp b7_from_b7 - // main::@2 - b2: - // [14] (byte~) main::$4 ← (byte) main::x#2 + (byte) main::x#2 -- vbuaa=vbuz1_plus_vbuz1 - lda x - asl - // [15] (byte) textbox::x2#0 ← (byte~) main::$4 + (byte) 1 -- vbuz1=vbuaa_plus_1 - clc - adc #1 - sta textbox.x2 - // [16] (byte) textbox::y2#0 ← (byte) main::x#2 + (byte) $a -- vbuz1=vbuz2_plus_vbuc1 - lax x - axs #-[$a] - stx textbox.y2 - // [17] (byte) textbox::x1#0 ← (byte) main::x#2 - // [18] (byte) textbox::y1#0 ← (byte) main::x#2 -- vbuz1=vbuz2 - lda x - sta textbox.y1 - // [19] call textbox - // [24] phi from main::@2 to textbox [phi:main::@2->textbox] - textbox_from_b2: - // [24] phi (byte*) textbox::text#12 = (const byte[]) text2#0 [phi:main::@2->textbox#0] -- pbuz1=pbuc1 - lda #text2 - sta textbox.text+1 - // [24] phi (byte) textbox::y2#4 = (byte) textbox::y2#0 [phi:main::@2->textbox#1] -- register_copy - // [24] phi (byte) textbox::x2#4 = (byte) textbox::x2#0 [phi:main::@2->textbox#2] -- register_copy - // [24] phi (byte) textbox::y1#4 = (byte) textbox::y1#0 [phi:main::@2->textbox#3] -- register_copy - // [24] phi (byte) textbox::x1#4 = (byte) textbox::x1#0 [phi:main::@2->textbox#4] -- register_copy - jsr textbox - // [20] phi from main::@2 to main::@4 [phi:main::@2->main::@4] - b4_from_b2: - // [20] phi (word) main::wait#2 = (byte) 0 [phi:main::@2->main::@4#0] -- vwuz1=vbuc1 - lda #<0 - sta wait - lda #>0 - sta wait+1 - jmp b4 - // main::@4 - b4: - // [21] if((word) main::wait#2<(word) $88b8) goto main::@5 -- vwuz1_lt_vwuc1_then_la1 - lda wait+1 - cmp #>$88b8 - bcc b5 - bne !+ - lda wait - cmp #<$88b8 - bcc b5 - !: - jmp b6 - // main::@6 - b6: - // [22] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2 -- vbuz1=vbuz1_plus_2 - lda x - clc - adc #2 - sta x - // [5] phi from main::@6 to main::@1 [phi:main::@6->main::@1] - b1_from_b6: - // [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@6->main::@1#0] -- register_copy - jmp b1 - // main::@5 - b5: - // [23] (word) main::wait#1 ← ++ (word) main::wait#2 -- vwuz1=_inc_vwuz1 - inc wait - bne !+ - inc wait+1 - !: - // [20] phi from main::@5 to main::@4 [phi:main::@5->main::@4] - b4_from_b5: - // [20] phi (word) main::wait#2 = (word) main::wait#1 [phi:main::@5->main::@4#0] -- register_copy - jmp b4 } // textbox // textbox(byte zeropage(2) x1, byte zeropage(3) y1, byte zeropage(4) x2, byte zeropage(5) y2, byte* zeropage(6) text) @@ -4215,13 +4244,15 @@ draw_window: { ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend +Removing instruction jmp b2 +Removing instruction jmp b5 +Removing instruction jmp b4 +Removing instruction jmp b6 Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b8 Removing instruction jmp b9 Removing instruction jmp b7 -Removing instruction jmp b4 -Removing instruction jmp b6 Removing instruction jmp b12 Removing instruction jmp b13 Removing instruction jmp b1 @@ -4244,12 +4275,15 @@ Removing instruction jmp b8 Removing instruction jmp b10 Removing instruction jmp b12 Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda #3 Removing instruction lda #>0 +Removing instruction lda #3 Replacing instruction lda x with TYA Replacing instruction lda #0 with TYA Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b5_from_b4 with b5 +Replacing label b5_from_b4 with b5 +Replacing label b2_from_b1 with b2 Replacing label b7_from_b7 with b7 Replacing label b2_from_b1 with b2 Replacing label b2_from_b5 with b2 @@ -4262,6 +4296,8 @@ Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: +Removing instruction b2_from_b1: +Removing instruction b5_from_b4: Removing instruction b3_from_b1: Removing instruction textbox_from_b3: Removing instruction b8_from_b3: @@ -4283,15 +4319,15 @@ Removing instruction b10_from_b11: Removing instruction b10_from_b9: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: -Removing instruction b1_from_main: +Removing instruction b2_from_main: +Removing instruction textbox_from_b2: +Removing instruction b5_from_b2: +Removing instruction b4: +Removing instruction b6: +Removing instruction b1: Removing instruction b3: Removing instruction b8: Removing instruction b9: -Removing instruction textbox_from_b2: -Removing instruction b4_from_b2: -Removing instruction b6: -Removing instruction b1_from_b6: -Removing instruction b4_from_b5: Removing instruction b12: Removing instruction b13: Removing instruction b1_from_b13: @@ -4321,16 +4357,19 @@ Relabelling long label b1_from_b2 to b1 Relabelling long label b4_from_b5 to b3 Relabelling long label b8_from_b7 to b4 Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b2 +Removing instruction jmp b5 Removing instruction jmp b1 Removing instruction jmp b2 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda x Removing instruction ldy i Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [214] bne b1 to beq -Fixing long branch [309] bcc b2 to bcs -Fixing long branch [352] bcc b5 to bcs +Fixing long branch [209] bne b1 to beq +Fixing long branch [304] bcc b2 to bcs +Fixing long branch [347] bcc b5 to bcs FINAL SYMBOL TABLE (label) @1 @@ -4421,11 +4460,11 @@ FINAL SYMBOL TABLE (label) main::@8 (label) main::@9 (word) main::wait -(word) main::wait#1 wait zp ZP_WORD:6 202.0 -(word) main::wait#2 wait zp ZP_WORD:6 151.5 +(word) main::wait#1 wait zp ZP_WORD:6 151.5 +(word) main::wait#4 wait zp ZP_WORD:6 202.0 (byte) main::x -(byte) main::x#1 x zp ZP_BYTE:2 22.0 -(byte) main::x#2 x zp ZP_BYTE:2 8.0 +(byte) main::x#1 x zp ZP_BYTE:2 16.5 +(byte) main::x#11 x zp ZP_BYTE:2 7.699999999999999 (byte*) screen (const byte*) screen#0 screen = (byte*) 1024 (byte[]) text @@ -4506,11 +4545,11 @@ FINAL SYMBOL TABLE (word) textbox::z#4 z zp ZP_WORD:11 151.5 (word) textbox::z#5 z zp ZP_WORD:11 101.0 -zp ZP_BYTE:2 [ main::x#2 main::x#1 textbox::x1#4 textbox::x1#0 draw_window::x1#0 ] +zp ZP_BYTE:2 [ main::x#11 main::x#1 textbox::x1#4 textbox::x1#0 draw_window::x1#0 ] zp ZP_BYTE:3 [ textbox::y1#4 textbox::y1#0 textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 draw_window::y1#0 ] zp ZP_BYTE:4 [ textbox::x2#4 textbox::x2#0 draw_window::x2#0 ] zp ZP_BYTE:5 [ textbox::y2#4 textbox::y2#0 draw_window::y2#0 ] -zp ZP_WORD:6 [ textbox::text#12 main::wait#2 main::wait#1 ] +zp ZP_WORD:6 [ textbox::text#12 main::wait#4 main::wait#1 ] reg byte y [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] reg byte x [ textbox::c#2 textbox::c#1 ] zp ZP_BYTE:8 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] @@ -4550,7 +4589,7 @@ zp ZP_WORD:29 [ draw_window::$15 draw_window::$28 ] FINAL ASSEMBLER -Score: 154193 +Score: 153833 // File Comments /* Textbox routine with word wrap for KickC by Scan/Desire */ @@ -4571,21 +4610,84 @@ Score: 154193 main: { .label wait = 6 .label x = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::x#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] phi from main to main::@2 [phi:main->main::@2] + // [5] phi (byte) main::x#11 = (byte) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 lda #0 sta x - // main::@1 - b1: - // for (byte x = 0; x < 15; x += 2) - // [6] if((byte) main::x#2<(byte) $f) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + // [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [5] phi (byte) main::x#11 = (byte) main::x#1 [phi:main::@1->main::@2#0] -- register_copy + // main::@2 + b2: + // x+x + // [6] (byte~) main::$4 ← (byte) main::x#11 + (byte) main::x#11 -- vbuaa=vbuz1_plus_vbuz1 lda x + asl + // textbox(x,x,x+x+1,x+10,text2) + // [7] (byte) textbox::x2#0 ← (byte~) main::$4 + (byte) 1 -- vbuz1=vbuaa_plus_1 + clc + adc #1 + sta textbox.x2 + // [8] (byte) textbox::y2#0 ← (byte) main::x#11 + (byte) $a -- vbuz1=vbuz2_plus_vbuc1 + lax x + axs #-[$a] + stx textbox.y2 + // [9] (byte) textbox::x1#0 ← (byte) main::x#11 + // [10] (byte) textbox::y1#0 ← (byte) main::x#11 -- vbuz1=vbuz2 + lda x + sta textbox.y1 + // [11] call textbox + // [24] phi from main::@2 to textbox [phi:main::@2->textbox] + // [24] phi (byte*) textbox::text#12 = (const byte[]) text2#0 [phi:main::@2->textbox#0] -- pbuz1=pbuc1 + lda #text2 + sta textbox.text+1 + // [24] phi (byte) textbox::y2#4 = (byte) textbox::y2#0 [phi:main::@2->textbox#1] -- register_copy + // [24] phi (byte) textbox::x2#4 = (byte) textbox::x2#0 [phi:main::@2->textbox#2] -- register_copy + // [24] phi (byte) textbox::y1#4 = (byte) textbox::y1#0 [phi:main::@2->textbox#3] -- register_copy + // [24] phi (byte) textbox::x1#4 = (byte) textbox::x1#0 [phi:main::@2->textbox#4] -- register_copy + jsr textbox + // [12] phi from main::@2 to main::@5 [phi:main::@2->main::@5] + // [12] phi (word) main::wait#4 = (byte) 0 [phi:main::@2->main::@5#0] -- vwuz1=vbuc1 + lda #<0 + sta wait + sta wait+1 + // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // [12] phi (word) main::wait#4 = (word) main::wait#1 [phi:main::@4->main::@5#0] -- register_copy + // main::@5 + b5: + // for (word wait = 0; wait < 35000; wait++) + // [13] (word) main::wait#1 ← ++ (word) main::wait#4 -- vwuz1=_inc_vwuz1 + inc wait + bne !+ + inc wait+1 + !: + // main::@4 + // [14] if((word) main::wait#1<(word) $88b8) goto main::@5 -- vwuz1_lt_vwuc1_then_la1 + lda wait+1 + cmp #>$88b8 + bcc b5 + bne !+ + lda wait + cmp #<$88b8 + bcc b5 + !: + // main::@6 + // x += 2 + // [15] (byte) main::x#1 ← (byte) main::x#11 + (byte) 2 -- vbuz1=vbuz1_plus_2 + lda x + clc + adc #2 + sta x + // main::@1 + // for (byte x = 0; x < 15; x += 2) + // [16] if((byte) main::x#1<(byte) $f) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 cmp #$f bcc b2 - // [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [17] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // textbox(0,12,20,24,text) - // [8] call textbox + // [18] call textbox // [24] phi from main::@3 to textbox [phi:main::@3->textbox] // [24] phi (byte*) textbox::text#12 = (const byte[]) text#0 [phi:main::@3->textbox#0] -- pbuz1=pbuc1 lda #main::@8] + // [19] phi from main::@3 to main::@8 [phi:main::@3->main::@8] // main::@8 // textbox(3,3,37,9,text) - // [10] call textbox + // [20] call textbox // [24] phi from main::@8 to textbox [phi:main::@8->textbox] // [24] phi (byte*) textbox::text#12 = (const byte[]) text#0 [phi:main::@8->textbox#0] -- pbuz1=pbuc1 lda #textbox#4] -- vbuz1=vbuc1 sta textbox.x1 jsr textbox - // [11] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [21] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // textbox(30,8,39,24,text) - // [12] call textbox + // [22] call textbox // [24] phi from main::@9 to textbox [phi:main::@9->textbox] // [24] phi (byte*) textbox::text#12 = (const byte[]) text#0 [phi:main::@9->textbox#0] -- pbuz1=pbuc1 lda #main::@7] + // [23] phi from main::@7 main::@9 to main::@7 [phi:main::@7/main::@9->main::@7] // main::@7 b7: jmp b7 - // main::@2 - b2: - // x+x - // [14] (byte~) main::$4 ← (byte) main::x#2 + (byte) main::x#2 -- vbuaa=vbuz1_plus_vbuz1 - lda x - asl - // textbox(x,x,x+x+1,x+10,text2) - // [15] (byte) textbox::x2#0 ← (byte~) main::$4 + (byte) 1 -- vbuz1=vbuaa_plus_1 - clc - adc #1 - sta textbox.x2 - // [16] (byte) textbox::y2#0 ← (byte) main::x#2 + (byte) $a -- vbuz1=vbuz2_plus_vbuc1 - lax x - axs #-[$a] - stx textbox.y2 - // [17] (byte) textbox::x1#0 ← (byte) main::x#2 - // [18] (byte) textbox::y1#0 ← (byte) main::x#2 -- vbuz1=vbuz2 - lda x - sta textbox.y1 - // [19] call textbox - // [24] phi from main::@2 to textbox [phi:main::@2->textbox] - // [24] phi (byte*) textbox::text#12 = (const byte[]) text2#0 [phi:main::@2->textbox#0] -- pbuz1=pbuc1 - lda #text2 - sta textbox.text+1 - // [24] phi (byte) textbox::y2#4 = (byte) textbox::y2#0 [phi:main::@2->textbox#1] -- register_copy - // [24] phi (byte) textbox::x2#4 = (byte) textbox::x2#0 [phi:main::@2->textbox#2] -- register_copy - // [24] phi (byte) textbox::y1#4 = (byte) textbox::y1#0 [phi:main::@2->textbox#3] -- register_copy - // [24] phi (byte) textbox::x1#4 = (byte) textbox::x1#0 [phi:main::@2->textbox#4] -- register_copy - jsr textbox - // [20] phi from main::@2 to main::@4 [phi:main::@2->main::@4] - // [20] phi (word) main::wait#2 = (byte) 0 [phi:main::@2->main::@4#0] -- vwuz1=vbuc1 - lda #<0 - sta wait - sta wait+1 - // main::@4 - b4: - // for (word wait = 0; wait < 35000; wait++) - // [21] if((word) main::wait#2<(word) $88b8) goto main::@5 -- vwuz1_lt_vwuc1_then_la1 - lda wait+1 - cmp #>$88b8 - bcc b5 - bne !+ - lda wait - cmp #<$88b8 - bcc b5 - !: - // main::@6 - // x += 2 - // [22] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2 -- vbuz1=vbuz1_plus_2 - lda x - clc - adc #2 - sta x - // [5] phi from main::@6 to main::@1 [phi:main::@6->main::@1] - // [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@6->main::@1#0] -- register_copy - jmp b1 - // main::@5 - b5: - // for (word wait = 0; wait < 35000; wait++) - // [23] (word) main::wait#1 ← ++ (word) main::wait#2 -- vwuz1=_inc_vwuz1 - inc wait - bne !+ - inc wait+1 - !: - // [20] phi from main::@5 to main::@4 [phi:main::@5->main::@4] - // [20] phi (word) main::wait#2 = (word) main::wait#1 [phi:main::@5->main::@4#0] -- register_copy - jmp b4 } // textbox // textbox(byte zeropage(2) x1, byte zeropage(3) y1, byte zeropage(4) x2, byte zeropage(5) y2, byte* zeropage(6) text) diff --git a/src/test/ref/textbox.sym b/src/test/ref/textbox.sym index 6bc3cc92a..7915afed1 100644 --- a/src/test/ref/textbox.sym +++ b/src/test/ref/textbox.sym @@ -86,11 +86,11 @@ (label) main::@8 (label) main::@9 (word) main::wait -(word) main::wait#1 wait zp ZP_WORD:6 202.0 -(word) main::wait#2 wait zp ZP_WORD:6 151.5 +(word) main::wait#1 wait zp ZP_WORD:6 151.5 +(word) main::wait#4 wait zp ZP_WORD:6 202.0 (byte) main::x -(byte) main::x#1 x zp ZP_BYTE:2 22.0 -(byte) main::x#2 x zp ZP_BYTE:2 8.0 +(byte) main::x#1 x zp ZP_BYTE:2 16.5 +(byte) main::x#11 x zp ZP_BYTE:2 7.699999999999999 (byte*) screen (const byte*) screen#0 screen = (byte*) 1024 (byte[]) text @@ -171,11 +171,11 @@ (word) textbox::z#4 z zp ZP_WORD:11 151.5 (word) textbox::z#5 z zp ZP_WORD:11 101.0 -zp ZP_BYTE:2 [ main::x#2 main::x#1 textbox::x1#4 textbox::x1#0 draw_window::x1#0 ] +zp ZP_BYTE:2 [ main::x#11 main::x#1 textbox::x1#4 textbox::x1#0 draw_window::x1#0 ] zp ZP_BYTE:3 [ textbox::y1#4 textbox::y1#0 textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 draw_window::y1#0 ] zp ZP_BYTE:4 [ textbox::x2#4 textbox::x2#0 draw_window::x2#0 ] zp ZP_BYTE:5 [ textbox::y2#4 textbox::y2#0 draw_window::y2#0 ] -zp ZP_WORD:6 [ textbox::text#12 main::wait#2 main::wait#1 ] +zp ZP_WORD:6 [ textbox::text#12 main::wait#4 main::wait#1 ] reg byte y [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] reg byte x [ textbox::c#2 textbox::c#1 ] zp ZP_BYTE:8 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] diff --git a/src/test/ref/unroll-screenfill-while.log b/src/test/ref/unroll-screenfill-while.log index c08e01d4b..215d8b48c 100644 --- a/src/test/ref/unroll-screenfill-while.log +++ b/src/test/ref/unroll-screenfill-while.log @@ -107,15 +107,22 @@ Constant (const byte) main::line#0 = 0 Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [13] main::x#1 ← ++ main::x#5 to ++ Resolved ranged comparison value [15] if(main::x#1!=rangelast(0,$27)) goto main::@1 to (number) $28 +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $28 in if((byte) main::x#1!=(number) $28) goto main::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions -Unrolling loop Loop head: main::@2 tails: main::@3 blocks: main::@3 main::@2 +Alias (byte) main::line#1 = (byte) main::line#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::line#5 (const byte) main::line#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [14] unroll if((const byte) main::line#0!=(byte) $19) goto main::@3 +Successful SSA optimization Pass2ConstantIfs +Unrolling loop Loop head: main::@3 tails: main::@2 blocks: main::@2 main::@3 Successful SSA optimization Pass2LoopUnroll -Identical Phi Values (byte) main::line#2 (const byte) main::line#0 +Identical Phi Values (byte) main::line#4 (const byte) main::line#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [3] (byte~) main::$1 ← (const byte) main::line#0 * (byte) $28 Constant right-side identified [6] (byte) main::line#1 ← ++ (const byte) main::line#0 @@ -123,7 +130,7 @@ Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::$1 = main::line#0*$28 Constant (const byte) main::line#1 = ++main::line#0 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [2] if((const byte) main::line#0!=(byte) $19) goto main::@3 +if() condition always true - replacing block destination [1] if((const byte) main::line#1!=(byte) $19) goto main::@3_1 Successful SSA optimization Pass2ConstantIfs Simplifying constant evaluating to zero (const byte) main::line#0*(byte) $28 in Successful SSA optimization PassNSimplifyConstantZero @@ -133,421 +140,403 @@ Eliminating unused constant (const byte) main::$1 Successful SSA optimization PassNEliminateUnusedVars Constant (const byte*) main::$2 = main::SCREEN#0 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_1 tails: main::@3_1 blocks: main::@3_1 main::@2_1 +Unrolling loop Loop head: main::@3_1 tails: main::@2_2 blocks: main::@2_2 main::@3_1 Successful SSA optimization Pass2LoopUnroll -Identical Phi Values (byte) main::line#4 (const byte) main::line#1 +Identical Phi Values (byte) main::line#6 (const byte) main::line#1 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [9] (byte~) main::$4 ← (const byte) main::line#1 * (byte) $28 -Constant right-side identified [12] (byte) main::line#5 ← ++ (const byte) main::line#1 +Constant right-side identified [4] (byte~) main::$4 ← (const byte) main::line#1 * (byte) $28 +Constant right-side identified [7] (byte) main::line#7 ← ++ (const byte) main::line#1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::$4 = main::line#1*$28 -Constant (const byte) main::line#5 = ++main::line#1 +Constant (const byte) main::line#7 = ++main::line#1 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [4] if((const byte) main::line#1!=(byte) $19) goto main::@3_1 +if() condition always true - replacing block destination [8] if((const byte) main::line#7!=(byte) $19) goto main::@3_2 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [6] (byte*~) main::$5 ← (const byte*) main::SCREEN#0 + (const byte) main::$4 +Constant right-side identified [3] (byte*~) main::$5 ← (const byte*) main::SCREEN#0 + (const byte) main::$4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) main::$5 = main::SCREEN#0+main::$4 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_2 tails: main::@3_2 blocks: main::@3_2 main::@2_2 -Successful SSA optimization Pass2LoopUnroll -Identical Phi Values (byte) main::line#6 (const byte) main::line#5 -Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [10] (byte~) main::$6 ← (const byte) main::line#5 * (byte) $28 -Constant right-side identified [13] (byte) main::line#7 ← ++ (const byte) main::line#5 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$6 = main::line#5*$28 -Constant (const byte) main::line#7 = ++main::line#5 -Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [5] if((const byte) main::line#5!=(byte) $19) goto main::@3_2 -Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [7] (byte*~) main::$7 ← (const byte*) main::SCREEN#0 + (const byte) main::$6 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$7 = main::SCREEN#0+main::$6 -Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_3 tails: main::@3_3 blocks: main::@3_3 main::@2_3 +Unrolling loop Loop head: main::@3_2 tails: main::@2_3 blocks: main::@2_3 main::@3_2 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#8 (const byte) main::line#7 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [11] (byte~) main::$8 ← (const byte) main::line#7 * (byte) $28 -Constant right-side identified [14] (byte) main::line#9 ← ++ (const byte) main::line#7 +Constant right-side identified [5] (byte~) main::$6 ← (const byte) main::line#7 * (byte) $28 +Constant right-side identified [8] (byte) main::line#9 ← ++ (const byte) main::line#7 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$8 = main::line#7*$28 +Constant (const byte) main::$6 = main::line#7*$28 Constant (const byte) main::line#9 = ++main::line#7 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [6] if((const byte) main::line#7!=(byte) $19) goto main::@3_3 +if() condition always true - replacing block destination [9] if((const byte) main::line#9!=(byte) $19) goto main::@3_3 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [8] (byte*~) main::$9 ← (const byte*) main::SCREEN#0 + (const byte) main::$8 +Constant right-side identified [4] (byte*~) main::$7 ← (const byte*) main::SCREEN#0 + (const byte) main::$6 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$9 = main::SCREEN#0+main::$8 +Constant (const byte*) main::$7 = main::SCREEN#0+main::$6 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_4 tails: main::@3_4 blocks: main::@3_4 main::@2_4 +Unrolling loop Loop head: main::@3_3 tails: main::@2_4 blocks: main::@2_4 main::@3_3 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#10 (const byte) main::line#9 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [12] (byte~) main::$10 ← (const byte) main::line#9 * (byte) $28 -Constant right-side identified [15] (byte) main::line#11 ← ++ (const byte) main::line#9 +Constant right-side identified [6] (byte~) main::$8 ← (const byte) main::line#9 * (byte) $28 +Constant right-side identified [9] (byte) main::line#11 ← ++ (const byte) main::line#9 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$10 = main::line#9*$28 +Constant (const byte) main::$8 = main::line#9*$28 Constant (const byte) main::line#11 = ++main::line#9 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [7] if((const byte) main::line#9!=(byte) $19) goto main::@3_4 +if() condition always true - replacing block destination [10] if((const byte) main::line#11!=(byte) $19) goto main::@3_4 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [9] (byte*~) main::$11 ← (const byte*) main::SCREEN#0 + (const byte) main::$10 +Constant right-side identified [5] (byte*~) main::$9 ← (const byte*) main::SCREEN#0 + (const byte) main::$8 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$11 = main::SCREEN#0+main::$10 +Constant (const byte*) main::$9 = main::SCREEN#0+main::$8 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_5 tails: main::@3_5 blocks: main::@3_5 main::@2_5 +Unrolling loop Loop head: main::@3_4 tails: main::@2_5 blocks: main::@2_5 main::@3_4 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#12 (const byte) main::line#11 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [13] (byte~) main::$12 ← (const byte) main::line#11 * (byte) $28 -Constant right-side identified [16] (byte) main::line#13 ← ++ (const byte) main::line#11 +Constant right-side identified [7] (byte~) main::$10 ← (const byte) main::line#11 * (byte) $28 +Constant right-side identified [10] (byte) main::line#13 ← ++ (const byte) main::line#11 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$12 = main::line#11*$28 +Constant (const byte) main::$10 = main::line#11*$28 Constant (const byte) main::line#13 = ++main::line#11 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [8] if((const byte) main::line#11!=(byte) $19) goto main::@3_5 +if() condition always true - replacing block destination [11] if((const byte) main::line#13!=(byte) $19) goto main::@3_5 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [10] (byte*~) main::$13 ← (const byte*) main::SCREEN#0 + (const byte) main::$12 +Constant right-side identified [6] (byte*~) main::$11 ← (const byte*) main::SCREEN#0 + (const byte) main::$10 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$13 = main::SCREEN#0+main::$12 +Constant (const byte*) main::$11 = main::SCREEN#0+main::$10 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_6 tails: main::@3_6 blocks: main::@3_6 main::@2_6 +Unrolling loop Loop head: main::@3_5 tails: main::@2_6 blocks: main::@2_6 main::@3_5 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#14 (const byte) main::line#13 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [14] (byte~) main::$14 ← (const byte) main::line#13 * (byte) $28 -Constant right-side identified [17] (byte) main::line#15 ← ++ (const byte) main::line#13 +Constant right-side identified [8] (byte~) main::$12 ← (const byte) main::line#13 * (byte) $28 +Constant right-side identified [11] (byte) main::line#15 ← ++ (const byte) main::line#13 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$14 = main::line#13*$28 +Constant (const byte) main::$12 = main::line#13*$28 Constant (const byte) main::line#15 = ++main::line#13 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [9] if((const byte) main::line#13!=(byte) $19) goto main::@3_6 +if() condition always true - replacing block destination [12] if((const byte) main::line#15!=(byte) $19) goto main::@3_6 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [11] (byte*~) main::$15 ← (const byte*) main::SCREEN#0 + (const byte) main::$14 +Constant right-side identified [7] (byte*~) main::$13 ← (const byte*) main::SCREEN#0 + (const byte) main::$12 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$15 = main::SCREEN#0+main::$14 +Constant (const byte*) main::$13 = main::SCREEN#0+main::$12 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_7 tails: main::@3_7 blocks: main::@3_7 main::@2_7 +Unrolling loop Loop head: main::@3_6 tails: main::@2_7 blocks: main::@2_7 main::@3_6 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#16 (const byte) main::line#15 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [15] (byte~) main::$16 ← (const byte) main::line#15 * (byte) $28 -Constant right-side identified [18] (byte) main::line#17 ← ++ (const byte) main::line#15 +Constant right-side identified [9] (byte~) main::$14 ← (const byte) main::line#15 * (byte) $28 +Constant right-side identified [12] (byte) main::line#17 ← ++ (const byte) main::line#15 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$16 = main::line#15*$28 +Constant (const byte) main::$14 = main::line#15*$28 Constant (const byte) main::line#17 = ++main::line#15 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [10] if((const byte) main::line#15!=(byte) $19) goto main::@3_7 +if() condition always true - replacing block destination [13] if((const byte) main::line#17!=(byte) $19) goto main::@3_7 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [12] (byte*~) main::$17 ← (const byte*) main::SCREEN#0 + (const byte) main::$16 +Constant right-side identified [8] (byte*~) main::$15 ← (const byte*) main::SCREEN#0 + (const byte) main::$14 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$17 = main::SCREEN#0+main::$16 +Constant (const byte*) main::$15 = main::SCREEN#0+main::$14 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_8 tails: main::@3_8 blocks: main::@3_8 main::@2_8 +Unrolling loop Loop head: main::@3_7 tails: main::@2_8 blocks: main::@2_8 main::@3_7 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#18 (const byte) main::line#17 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [16] (byte~) main::$18 ← (const byte) main::line#17 * (byte) $28 -Constant right-side identified [19] (byte) main::line#19 ← ++ (const byte) main::line#17 +Constant right-side identified [10] (byte~) main::$16 ← (const byte) main::line#17 * (byte) $28 +Constant right-side identified [13] (byte) main::line#19 ← ++ (const byte) main::line#17 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$18 = main::line#17*$28 +Constant (const byte) main::$16 = main::line#17*$28 Constant (const byte) main::line#19 = ++main::line#17 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [11] if((const byte) main::line#17!=(byte) $19) goto main::@3_8 +if() condition always true - replacing block destination [14] if((const byte) main::line#19!=(byte) $19) goto main::@3_8 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [13] (byte*~) main::$19 ← (const byte*) main::SCREEN#0 + (const byte) main::$18 +Constant right-side identified [9] (byte*~) main::$17 ← (const byte*) main::SCREEN#0 + (const byte) main::$16 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$19 = main::SCREEN#0+main::$18 +Constant (const byte*) main::$17 = main::SCREEN#0+main::$16 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_9 tails: main::@3_9 blocks: main::@3_9 main::@2_9 +Unrolling loop Loop head: main::@3_8 tails: main::@2_9 blocks: main::@2_9 main::@3_8 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#20 (const byte) main::line#19 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [17] (byte~) main::$20 ← (const byte) main::line#19 * (byte) $28 -Constant right-side identified [20] (byte) main::line#21 ← ++ (const byte) main::line#19 +Constant right-side identified [11] (byte~) main::$18 ← (const byte) main::line#19 * (byte) $28 +Constant right-side identified [14] (byte) main::line#21 ← ++ (const byte) main::line#19 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$20 = main::line#19*$28 +Constant (const byte) main::$18 = main::line#19*$28 Constant (const byte) main::line#21 = ++main::line#19 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [12] if((const byte) main::line#19!=(byte) $19) goto main::@3_9 +if() condition always true - replacing block destination [15] if((const byte) main::line#21!=(byte) $19) goto main::@3_9 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [14] (byte*~) main::$21 ← (const byte*) main::SCREEN#0 + (const byte) main::$20 +Constant right-side identified [10] (byte*~) main::$19 ← (const byte*) main::SCREEN#0 + (const byte) main::$18 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$21 = main::SCREEN#0+main::$20 +Constant (const byte*) main::$19 = main::SCREEN#0+main::$18 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_10 tails: main::@3_10 blocks: main::@3_10 main::@2_10 +Unrolling loop Loop head: main::@3_9 tails: main::@2_10 blocks: main::@2_10 main::@3_9 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#22 (const byte) main::line#21 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [18] (byte~) main::$22 ← (const byte) main::line#21 * (byte) $28 -Constant right-side identified [21] (byte) main::line#23 ← ++ (const byte) main::line#21 +Constant right-side identified [12] (byte~) main::$20 ← (const byte) main::line#21 * (byte) $28 +Constant right-side identified [15] (byte) main::line#23 ← ++ (const byte) main::line#21 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$22 = main::line#21*$28 +Constant (const byte) main::$20 = main::line#21*$28 Constant (const byte) main::line#23 = ++main::line#21 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [13] if((const byte) main::line#21!=(byte) $19) goto main::@3_10 +if() condition always true - replacing block destination [16] if((const byte) main::line#23!=(byte) $19) goto main::@3_10 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [15] (byte*~) main::$23 ← (const byte*) main::SCREEN#0 + (const byte) main::$22 +Constant right-side identified [11] (byte*~) main::$21 ← (const byte*) main::SCREEN#0 + (const byte) main::$20 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$23 = main::SCREEN#0+main::$22 +Constant (const byte*) main::$21 = main::SCREEN#0+main::$20 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_11 tails: main::@3_11 blocks: main::@3_11 main::@2_11 +Unrolling loop Loop head: main::@3_10 tails: main::@2_11 blocks: main::@2_11 main::@3_10 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#24 (const byte) main::line#23 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [19] (byte~) main::$24 ← (const byte) main::line#23 * (byte) $28 -Constant right-side identified [22] (byte) main::line#25 ← ++ (const byte) main::line#23 +Constant right-side identified [13] (byte~) main::$22 ← (const byte) main::line#23 * (byte) $28 +Constant right-side identified [16] (byte) main::line#25 ← ++ (const byte) main::line#23 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$24 = main::line#23*$28 +Constant (const byte) main::$22 = main::line#23*$28 Constant (const byte) main::line#25 = ++main::line#23 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [14] if((const byte) main::line#23!=(byte) $19) goto main::@3_11 +if() condition always true - replacing block destination [17] if((const byte) main::line#25!=(byte) $19) goto main::@3_11 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [16] (byte*~) main::$25 ← (const byte*) main::SCREEN#0 + (const byte) main::$24 +Constant right-side identified [12] (byte*~) main::$23 ← (const byte*) main::SCREEN#0 + (const byte) main::$22 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$25 = main::SCREEN#0+main::$24 +Constant (const byte*) main::$23 = main::SCREEN#0+main::$22 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_12 tails: main::@3_12 blocks: main::@3_12 main::@2_12 +Unrolling loop Loop head: main::@3_11 tails: main::@2_12 blocks: main::@2_12 main::@3_11 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#26 (const byte) main::line#25 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [20] (byte~) main::$26 ← (const byte) main::line#25 * (byte) $28 -Constant right-side identified [23] (byte) main::line#27 ← ++ (const byte) main::line#25 +Constant right-side identified [14] (byte~) main::$24 ← (const byte) main::line#25 * (byte) $28 +Constant right-side identified [17] (byte) main::line#27 ← ++ (const byte) main::line#25 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$26 = main::line#25*$28 +Constant (const byte) main::$24 = main::line#25*$28 Constant (const byte) main::line#27 = ++main::line#25 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [15] if((const byte) main::line#25!=(byte) $19) goto main::@3_12 +if() condition always true - replacing block destination [18] if((const byte) main::line#27!=(byte) $19) goto main::@3_12 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [17] (byte*~) main::$27 ← (const byte*) main::SCREEN#0 + (const byte) main::$26 +Constant right-side identified [13] (byte*~) main::$25 ← (const byte*) main::SCREEN#0 + (const byte) main::$24 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$27 = main::SCREEN#0+main::$26 +Constant (const byte*) main::$25 = main::SCREEN#0+main::$24 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_13 tails: main::@3_13 blocks: main::@3_13 main::@2_13 +Unrolling loop Loop head: main::@3_12 tails: main::@2_13 blocks: main::@2_13 main::@3_12 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#28 (const byte) main::line#27 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [21] (byte~) main::$28 ← (const byte) main::line#27 * (byte) $28 -Constant right-side identified [24] (byte) main::line#29 ← ++ (const byte) main::line#27 +Constant right-side identified [15] (byte~) main::$26 ← (const byte) main::line#27 * (byte) $28 +Constant right-side identified [18] (byte) main::line#29 ← ++ (const byte) main::line#27 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$28 = main::line#27*$28 +Constant (const byte) main::$26 = main::line#27*$28 Constant (const byte) main::line#29 = ++main::line#27 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [16] if((const byte) main::line#27!=(byte) $19) goto main::@3_13 +if() condition always true - replacing block destination [19] if((const byte) main::line#29!=(byte) $19) goto main::@3_13 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [18] (byte*~) main::$29 ← (const byte*) main::SCREEN#0 + (const byte) main::$28 +Constant right-side identified [14] (byte*~) main::$27 ← (const byte*) main::SCREEN#0 + (const byte) main::$26 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$29 = main::SCREEN#0+main::$28 +Constant (const byte*) main::$27 = main::SCREEN#0+main::$26 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_14 tails: main::@3_14 blocks: main::@3_14 main::@2_14 +Unrolling loop Loop head: main::@3_13 tails: main::@2_14 blocks: main::@2_14 main::@3_13 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#30 (const byte) main::line#29 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [22] (byte~) main::$30 ← (const byte) main::line#29 * (byte) $28 -Constant right-side identified [25] (byte) main::line#31 ← ++ (const byte) main::line#29 +Constant right-side identified [16] (byte~) main::$28 ← (const byte) main::line#29 * (byte) $28 +Constant right-side identified [19] (byte) main::line#31 ← ++ (const byte) main::line#29 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$30 = main::line#29*$28 +Constant (const byte) main::$28 = main::line#29*$28 Constant (const byte) main::line#31 = ++main::line#29 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [17] if((const byte) main::line#29!=(byte) $19) goto main::@3_14 +if() condition always true - replacing block destination [20] if((const byte) main::line#31!=(byte) $19) goto main::@3_14 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [19] (byte*~) main::$31 ← (const byte*) main::SCREEN#0 + (const byte) main::$30 +Constant right-side identified [15] (byte*~) main::$29 ← (const byte*) main::SCREEN#0 + (const byte) main::$28 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$31 = main::SCREEN#0+main::$30 +Constant (const byte*) main::$29 = main::SCREEN#0+main::$28 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_15 tails: main::@3_15 blocks: main::@3_15 main::@2_15 +Unrolling loop Loop head: main::@3_14 tails: main::@2_15 blocks: main::@2_15 main::@3_14 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#32 (const byte) main::line#31 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [23] (byte~) main::$32 ← (const byte) main::line#31 * (byte) $28 -Constant right-side identified [26] (byte) main::line#33 ← ++ (const byte) main::line#31 +Constant right-side identified [17] (byte~) main::$30 ← (const byte) main::line#31 * (byte) $28 +Constant right-side identified [20] (byte) main::line#33 ← ++ (const byte) main::line#31 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$32 = main::line#31*$28 +Constant (const byte) main::$30 = main::line#31*$28 Constant (const byte) main::line#33 = ++main::line#31 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [18] if((const byte) main::line#31!=(byte) $19) goto main::@3_15 +if() condition always true - replacing block destination [21] if((const byte) main::line#33!=(byte) $19) goto main::@3_15 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [20] (byte*~) main::$33 ← (const byte*) main::SCREEN#0 + (const byte) main::$32 +Constant right-side identified [16] (byte*~) main::$31 ← (const byte*) main::SCREEN#0 + (const byte) main::$30 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$33 = main::SCREEN#0+main::$32 +Constant (const byte*) main::$31 = main::SCREEN#0+main::$30 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_16 tails: main::@3_16 blocks: main::@3_16 main::@2_16 +Unrolling loop Loop head: main::@3_15 tails: main::@2_16 blocks: main::@2_16 main::@3_15 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#34 (const byte) main::line#33 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [24] (byte~) main::$34 ← (const byte) main::line#33 * (byte) $28 -Constant right-side identified [27] (byte) main::line#35 ← ++ (const byte) main::line#33 +Constant right-side identified [18] (byte~) main::$32 ← (const byte) main::line#33 * (byte) $28 +Constant right-side identified [21] (byte) main::line#35 ← ++ (const byte) main::line#33 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$34 = main::line#33*$28 +Constant (const byte) main::$32 = main::line#33*$28 Constant (const byte) main::line#35 = ++main::line#33 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [19] if((const byte) main::line#33!=(byte) $19) goto main::@3_16 +if() condition always true - replacing block destination [22] if((const byte) main::line#35!=(byte) $19) goto main::@3_16 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [21] (byte*~) main::$35 ← (const byte*) main::SCREEN#0 + (const byte) main::$34 +Constant right-side identified [17] (byte*~) main::$33 ← (const byte*) main::SCREEN#0 + (const byte) main::$32 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$35 = main::SCREEN#0+main::$34 +Constant (const byte*) main::$33 = main::SCREEN#0+main::$32 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_17 tails: main::@3_17 blocks: main::@3_17 main::@2_17 +Unrolling loop Loop head: main::@3_16 tails: main::@2_17 blocks: main::@2_17 main::@3_16 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#36 (const byte) main::line#35 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [25] (byte~) main::$36 ← (const byte) main::line#35 * (byte) $28 -Constant right-side identified [28] (byte) main::line#37 ← ++ (const byte) main::line#35 +Constant right-side identified [19] (byte~) main::$34 ← (const byte) main::line#35 * (byte) $28 +Constant right-side identified [22] (byte) main::line#37 ← ++ (const byte) main::line#35 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$36 = main::line#35*$28 +Constant (const byte) main::$34 = main::line#35*$28 Constant (const byte) main::line#37 = ++main::line#35 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [20] if((const byte) main::line#35!=(byte) $19) goto main::@3_17 +if() condition always true - replacing block destination [23] if((const byte) main::line#37!=(byte) $19) goto main::@3_17 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [22] (byte*~) main::$37 ← (const byte*) main::SCREEN#0 + (const byte) main::$36 +Constant right-side identified [18] (byte*~) main::$35 ← (const byte*) main::SCREEN#0 + (const byte) main::$34 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$37 = main::SCREEN#0+main::$36 +Constant (const byte*) main::$35 = main::SCREEN#0+main::$34 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_18 tails: main::@3_18 blocks: main::@3_18 main::@2_18 +Unrolling loop Loop head: main::@3_17 tails: main::@2_18 blocks: main::@2_18 main::@3_17 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#38 (const byte) main::line#37 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [26] (byte~) main::$38 ← (const byte) main::line#37 * (byte) $28 -Constant right-side identified [29] (byte) main::line#39 ← ++ (const byte) main::line#37 +Constant right-side identified [20] (byte~) main::$36 ← (const byte) main::line#37 * (byte) $28 +Constant right-side identified [23] (byte) main::line#39 ← ++ (const byte) main::line#37 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$38 = main::line#37*$28 +Constant (const byte) main::$36 = main::line#37*$28 Constant (const byte) main::line#39 = ++main::line#37 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [21] if((const byte) main::line#37!=(byte) $19) goto main::@3_18 +if() condition always true - replacing block destination [24] if((const byte) main::line#39!=(byte) $19) goto main::@3_18 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [23] (byte*~) main::$39 ← (const byte*) main::SCREEN#0 + (const byte) main::$38 +Constant right-side identified [19] (byte*~) main::$37 ← (const byte*) main::SCREEN#0 + (const byte) main::$36 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$39 = main::SCREEN#0+main::$38 +Constant (const byte*) main::$37 = main::SCREEN#0+main::$36 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_19 tails: main::@3_19 blocks: main::@3_19 main::@2_19 +Unrolling loop Loop head: main::@3_18 tails: main::@2_19 blocks: main::@2_19 main::@3_18 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#40 (const byte) main::line#39 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [27] (byte~) main::$40 ← (const byte) main::line#39 * (byte) $28 -Constant right-side identified [30] (byte) main::line#41 ← ++ (const byte) main::line#39 +Constant right-side identified [21] (byte~) main::$38 ← (const byte) main::line#39 * (byte) $28 +Constant right-side identified [24] (byte) main::line#41 ← ++ (const byte) main::line#39 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$40 = main::line#39*$28 +Constant (const byte) main::$38 = main::line#39*$28 Constant (const byte) main::line#41 = ++main::line#39 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [22] if((const byte) main::line#39!=(byte) $19) goto main::@3_19 +if() condition always true - replacing block destination [25] if((const byte) main::line#41!=(byte) $19) goto main::@3_19 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [24] (byte*~) main::$41 ← (const byte*) main::SCREEN#0 + (const byte) main::$40 +Constant right-side identified [20] (byte*~) main::$39 ← (const byte*) main::SCREEN#0 + (const byte) main::$38 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$41 = main::SCREEN#0+main::$40 +Constant (const byte*) main::$39 = main::SCREEN#0+main::$38 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_20 tails: main::@3_20 blocks: main::@3_20 main::@2_20 +Unrolling loop Loop head: main::@3_19 tails: main::@2_20 blocks: main::@2_20 main::@3_19 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#42 (const byte) main::line#41 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [28] (byte~) main::$42 ← (const byte) main::line#41 * (byte) $28 -Constant right-side identified [31] (byte) main::line#43 ← ++ (const byte) main::line#41 +Constant right-side identified [22] (byte~) main::$40 ← (const byte) main::line#41 * (byte) $28 +Constant right-side identified [25] (byte) main::line#43 ← ++ (const byte) main::line#41 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$42 = main::line#41*$28 +Constant (const byte) main::$40 = main::line#41*$28 Constant (const byte) main::line#43 = ++main::line#41 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [23] if((const byte) main::line#41!=(byte) $19) goto main::@3_20 +if() condition always true - replacing block destination [26] if((const byte) main::line#43!=(byte) $19) goto main::@3_20 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [25] (byte*~) main::$43 ← (const byte*) main::SCREEN#0 + (const byte) main::$42 +Constant right-side identified [21] (byte*~) main::$41 ← (const byte*) main::SCREEN#0 + (const byte) main::$40 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$43 = main::SCREEN#0+main::$42 +Constant (const byte*) main::$41 = main::SCREEN#0+main::$40 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_21 tails: main::@3_21 blocks: main::@3_21 main::@2_21 +Unrolling loop Loop head: main::@3_20 tails: main::@2_21 blocks: main::@2_21 main::@3_20 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#44 (const byte) main::line#43 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [29] (byte~) main::$44 ← (const byte) main::line#43 * (byte) $28 -Constant right-side identified [32] (byte) main::line#45 ← ++ (const byte) main::line#43 +Constant right-side identified [23] (byte~) main::$42 ← (const byte) main::line#43 * (byte) $28 +Constant right-side identified [26] (byte) main::line#45 ← ++ (const byte) main::line#43 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$44 = main::line#43*$28 +Constant (const byte) main::$42 = main::line#43*$28 Constant (const byte) main::line#45 = ++main::line#43 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [24] if((const byte) main::line#43!=(byte) $19) goto main::@3_21 +if() condition always true - replacing block destination [27] if((const byte) main::line#45!=(byte) $19) goto main::@3_21 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [26] (byte*~) main::$45 ← (const byte*) main::SCREEN#0 + (const byte) main::$44 +Constant right-side identified [22] (byte*~) main::$43 ← (const byte*) main::SCREEN#0 + (const byte) main::$42 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$45 = main::SCREEN#0+main::$44 +Constant (const byte*) main::$43 = main::SCREEN#0+main::$42 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_22 tails: main::@3_22 blocks: main::@3_22 main::@2_22 +Unrolling loop Loop head: main::@3_21 tails: main::@2_22 blocks: main::@2_22 main::@3_21 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#46 (const byte) main::line#45 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [30] (byte~) main::$46 ← (const byte) main::line#45 * (byte) $28 -Constant right-side identified [33] (byte) main::line#47 ← ++ (const byte) main::line#45 +Constant right-side identified [24] (byte~) main::$44 ← (const byte) main::line#45 * (byte) $28 +Constant right-side identified [27] (byte) main::line#47 ← ++ (const byte) main::line#45 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$46 = main::line#45*$28 +Constant (const byte) main::$44 = main::line#45*$28 Constant (const byte) main::line#47 = ++main::line#45 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [25] if((const byte) main::line#45!=(byte) $19) goto main::@3_22 +if() condition always true - replacing block destination [28] if((const byte) main::line#47!=(byte) $19) goto main::@3_22 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [27] (byte*~) main::$47 ← (const byte*) main::SCREEN#0 + (const byte) main::$46 +Constant right-side identified [23] (byte*~) main::$45 ← (const byte*) main::SCREEN#0 + (const byte) main::$44 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$47 = main::SCREEN#0+main::$46 +Constant (const byte*) main::$45 = main::SCREEN#0+main::$44 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_23 tails: main::@3_23 blocks: main::@3_23 main::@2_23 +Unrolling loop Loop head: main::@3_22 tails: main::@2_23 blocks: main::@2_23 main::@3_22 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#48 (const byte) main::line#47 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [31] (byte~) main::$48 ← (const byte) main::line#47 * (byte) $28 -Constant right-side identified [34] (byte) main::line#49 ← ++ (const byte) main::line#47 +Constant right-side identified [25] (byte~) main::$46 ← (const byte) main::line#47 * (byte) $28 +Constant right-side identified [28] (byte) main::line#49 ← ++ (const byte) main::line#47 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$48 = main::line#47*$28 +Constant (const byte) main::$46 = main::line#47*$28 Constant (const byte) main::line#49 = ++main::line#47 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [26] if((const byte) main::line#47!=(byte) $19) goto main::@3_23 +if() condition always true - replacing block destination [29] if((const byte) main::line#49!=(byte) $19) goto main::@3_23 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [28] (byte*~) main::$49 ← (const byte*) main::SCREEN#0 + (const byte) main::$48 +Constant right-side identified [24] (byte*~) main::$47 ← (const byte*) main::SCREEN#0 + (const byte) main::$46 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$49 = main::SCREEN#0+main::$48 +Constant (const byte*) main::$47 = main::SCREEN#0+main::$46 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_24 tails: main::@3_24 blocks: main::@3_24 main::@2_24 +Unrolling loop Loop head: main::@3_23 tails: main::@2_24 blocks: main::@2_24 main::@3_23 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#50 (const byte) main::line#49 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [32] (byte~) main::$50 ← (const byte) main::line#49 * (byte) $28 -Constant right-side identified [35] (byte) main::line#51 ← ++ (const byte) main::line#49 +Constant right-side identified [26] (byte~) main::$48 ← (const byte) main::line#49 * (byte) $28 +Constant right-side identified [29] (byte) main::line#51 ← ++ (const byte) main::line#49 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$50 = main::line#49*$28 +Constant (const byte) main::$48 = main::line#49*$28 Constant (const byte) main::line#51 = ++main::line#49 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [27] if((const byte) main::line#49!=(byte) $19) goto main::@3_24 +if() condition always true - replacing block destination [30] if((const byte) main::line#51!=(byte) $19) goto main::@3_24 Successful SSA optimization Pass2ConstantIfs -Constant right-side identified [29] (byte*~) main::$51 ← (const byte*) main::SCREEN#0 + (const byte) main::$50 +Constant right-side identified [25] (byte*~) main::$49 ← (const byte*) main::SCREEN#0 + (const byte) main::$48 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$51 = main::SCREEN#0+main::$50 +Constant (const byte*) main::$49 = main::SCREEN#0+main::$48 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@2_25 tails: main::@3_25 blocks: main::@3_25 main::@2_25 +Unrolling loop Loop head: main::@3_24 tails: main::@2_25 blocks: main::@2_25 main::@3_24 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) main::line#52 (const byte) main::line#51 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [33] (byte~) main::$52 ← (const byte) main::line#51 * (byte) $28 -Constant right-side identified [36] (byte) main::line#53 ← ++ (const byte) main::line#51 +Constant right-side identified [27] (byte~) main::$50 ← (const byte) main::line#51 * (byte) $28 +Constant right-side identified [30] (byte) main::line#53 ← ++ (const byte) main::line#51 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$52 = main::line#51*$28 +Constant (const byte) main::$50 = main::line#51*$28 Constant (const byte) main::line#53 = ++main::line#51 Successful SSA optimization Pass2ConstantIdentification -if() condition always false - eliminating [28] if((const byte) main::line#51!=(byte) $19) goto main::@3_25 +Removing PHI-reference to removed block (main::@2_25) in block main::@3_25 +if() condition always false - eliminating [31] if((const byte) main::line#53!=(byte) $19) goto main::@3_25 Successful SSA optimization Pass2ConstantIfs -Eliminating variable (byte*~) main::$53 from unused block main::@3_25 -Eliminating variable (byte) main::line#54 from unused block main::@2_26 -Eliminating variable (byte~) main::$54 from unused block main::@3_26 -Eliminating variable (byte*~) main::$55 from unused block main::@3_26 -Eliminating variable (byte) main::line#55 from unused block main::@3_26 -Removing PHI-reference to removed block (main::@3_25) in block main::@2_26 -Removing unused block main::@3_25 -Removing unused block main::@2_26 -Removing unused block main::@3_26 -Successful SSA optimization Pass2EliminateUnusedBlocks -Eliminating unused constant (const byte) main::$52 Eliminating unused constant (const byte) main::line#53 Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused constant (const byte) main::line#51 -Successful SSA optimization PassNEliminateUnusedVars +Eliminating variable (byte) main::line#54 from unused block main::@3_25 +Eliminating variable (byte~) main::$52 from unused block main::@3_25 +Eliminating variable (byte*~) main::$53 from unused block main::@3_25 +Eliminating variable (byte) main::line#55 from unused block main::@3_25 +Removing unused block main::@3_25 +Removing unused block main::@2_26 +Successful SSA optimization Pass2EliminateUnusedBlocks +Constant right-side identified [26] (byte*~) main::$51 ← (const byte*) main::SCREEN#0 + (const byte) main::$50 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte*) main::$51 = main::SCREEN#0+main::$50 +Successful SSA optimization Pass2ConstantIdentification Inlining constant with var siblings (const byte) main::x#0 Inlining constant with different constant siblings (const byte) main::line#0 Inlining constant with different constant siblings (const byte) main::line#1 -Inlining constant with different constant siblings (const byte) main::line#5 Inlining constant with different constant siblings (const byte) main::line#7 Inlining constant with different constant siblings (const byte) main::line#9 Inlining constant with different constant siblings (const byte) main::line#11 @@ -570,6 +559,7 @@ Inlining constant with different constant siblings (const byte) main::line#43 Inlining constant with different constant siblings (const byte) main::line#45 Inlining constant with different constant siblings (const byte) main::line#47 Inlining constant with different constant siblings (const byte) main::line#49 +Inlining constant with different constant siblings (const byte) main::line#51 Constant inlined main::$50 = ++++++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$51 = (const byte*) main::SCREEN#0+++++++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$12 = ++++++++++(byte) 0*(byte) $28 @@ -578,21 +568,20 @@ Constant inlined main::$14 = ++++++++++++(byte) 0*(byte) $28 Constant inlined main::$15 = (const byte*) main::SCREEN#0+++++++++++++(byte) 0*(byte) $28 Constant inlined main::$10 = ++++++++(byte) 0*(byte) $28 Constant inlined main::$11 = (const byte*) main::SCREEN#0+++++++++(byte) 0*(byte) $28 -Constant inlined main::line#43 = ++++++++++++++++++++++++++++++++++++++++++(byte) 0 -Constant inlined main::line#45 = ++++++++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#43 = ++++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#45 = ++++++++++++++++++++++++++++++++++++++++++(byte) 0 Constant inlined main::$16 = ++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$17 = (const byte*) main::SCREEN#0+++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$18 = ++++++++++++++++(byte) 0*(byte) $28 -Constant inlined main::line#41 = ++++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#41 = ++++++++++++++++++++++++++++++++++++++(byte) 0 Constant inlined main::$19 = (const byte*) main::SCREEN#0+++++++++++++++++(byte) 0*(byte) $28 -Constant inlined main::line#5 = ++++(byte) 0 Constant inlined main::line#0 = (byte) 0 -Constant inlined main::line#47 = ++++++++++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#47 = ++++++++++++++++++++++++++++++++++++++++++++(byte) 0 Constant inlined main::line#1 = ++(byte) 0 -Constant inlined main::line#49 = ++++++++++++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#49 = ++++++++++++++++++++++++++++++++++++++++++++++(byte) 0 Constant inlined main::$40 = ++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 -Constant inlined main::line#9 = ++++++++(byte) 0 -Constant inlined main::line#7 = ++++++(byte) 0 +Constant inlined main::line#9 = ++++++(byte) 0 +Constant inlined main::line#7 = ++++(byte) 0 Constant inlined main::$45 = (const byte*) main::SCREEN#0+++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$46 = ++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$47 = (const byte*) main::SCREEN#0+++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 @@ -601,12 +590,13 @@ Constant inlined main::$41 = (const byte*) main::SCREEN#0+++++++++++++++++++++++ Constant inlined main::$42 = ++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$43 = (const byte*) main::SCREEN#0+++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$44 = ++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 -Constant inlined main::line#11 = ++++++++++(byte) 0 +Constant inlined main::line#11 = ++++++++(byte) 0 Constant inlined main::$49 = (const byte*) main::SCREEN#0+++++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 -Constant inlined main::line#17 = ++++++++++++++++(byte) 0 -Constant inlined main::line#19 = ++++++++++++++++++(byte) 0 -Constant inlined main::line#13 = ++++++++++++(byte) 0 -Constant inlined main::line#15 = ++++++++++++++(byte) 0 +Constant inlined main::line#51 = ++++++++++++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#17 = ++++++++++++++(byte) 0 +Constant inlined main::line#19 = ++++++++++++++++(byte) 0 +Constant inlined main::line#13 = ++++++++++(byte) 0 +Constant inlined main::line#15 = ++++++++++++(byte) 0 Constant inlined main::$34 = ++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$35 = (const byte*) main::SCREEN#0+++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$36 = ++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 @@ -615,13 +605,13 @@ Constant inlined main::$30 = ++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$31 = (const byte*) main::SCREEN#0+++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$32 = ++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$33 = (const byte*) main::SCREEN#0+++++++++++++++++++++++++++++++(byte) 0*(byte) $28 -Constant inlined main::line#21 = ++++++++++++++++++++(byte) 0 -Constant inlined main::line#23 = ++++++++++++++++++++++(byte) 0 +Constant inlined main::line#21 = ++++++++++++++++++(byte) 0 +Constant inlined main::line#23 = ++++++++++++++++++++(byte) 0 Constant inlined main::$38 = ++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$39 = (const byte*) main::SCREEN#0+++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 -Constant inlined main::line#29 = ++++++++++++++++++++++++++++(byte) 0 -Constant inlined main::line#25 = ++++++++++++++++++++++++(byte) 0 -Constant inlined main::line#27 = ++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#29 = ++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#25 = ++++++++++++++++++++++(byte) 0 +Constant inlined main::line#27 = ++++++++++++++++++++++++(byte) 0 Constant inlined main::$23 = (const byte*) main::SCREEN#0+++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$24 = ++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$25 = (const byte*) main::SCREEN#0+++++++++++++++++++++++(byte) 0*(byte) $28 @@ -630,21 +620,21 @@ Constant inlined main::$26 = ++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$20 = ++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$21 = (const byte*) main::SCREEN#0+++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$22 = ++++++++++++++++++++(byte) 0*(byte) $28 -Constant inlined main::line#31 = ++++++++++++++++++++++++++++++(byte) 0 -Constant inlined main::line#33 = ++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#31 = ++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#33 = ++++++++++++++++++++++++++++++(byte) 0 Constant inlined main::$27 = (const byte*) main::SCREEN#0+++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$2 = (const byte*) main::SCREEN#0 Constant inlined main::$28 = ++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$29 = (const byte*) main::SCREEN#0+++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined main::$5 = (const byte*) main::SCREEN#0+++(byte) 0*(byte) $28 Constant inlined main::$6 = ++++(byte) 0*(byte) $28 -Constant inlined main::line#39 = ++++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#39 = ++++++++++++++++++++++++++++++++++++(byte) 0 Constant inlined main::$4 = ++(byte) 0*(byte) $28 Constant inlined main::$9 = (const byte*) main::SCREEN#0+++++++(byte) 0*(byte) $28 -Constant inlined main::line#35 = ++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#35 = ++++++++++++++++++++++++++++++++(byte) 0 Constant inlined main::$7 = (const byte*) main::SCREEN#0+++++(byte) 0*(byte) $28 Constant inlined main::$8 = ++++++(byte) 0*(byte) $28 -Constant inlined main::line#37 = ++++++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::line#37 = ++++++++++++++++++++++++++++++++++(byte) 0 Successful SSA optimization Pass2ConstantInlining Simplifying constant integer increment ++0 Simplifying constant integer increment ++0 @@ -701,8 +691,8 @@ Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@2_1 +Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@2_2 Adding NOP phi() at start of main::@2_3 Adding NOP phi() at start of main::@2_4 @@ -734,8 +724,8 @@ Created 1 initial phi equivalence classes Coalesced [61] main::x#6 ← main::x#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 -Culled Empty Block (label) main::@2 Culled Empty Block (label) main::@2_1 +Culled Empty Block (label) main::@2 Culled Empty Block (label) main::@2_2 Culled Empty Block (label) main::@2_3 Culled Empty Block (label) main::@2_4 diff --git a/src/test/ref/unroll-while-min.log b/src/test/ref/unroll-while-min.log index 4272c5f92..288b1931e 100644 --- a/src/test/ref/unroll-while-min.log +++ b/src/test/ref/unroll-while-min.log @@ -69,49 +69,43 @@ Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = (byte*) 1024 Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification -Unrolling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte) main::i#1 = (byte) main::i#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::i#5 (const byte) main::i#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [9] unroll if((const byte) main::i#0<(byte) 2) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Unrolling loop Loop head: main::@2 tails: main::@1 blocks: main::@1 main::@2 Successful SSA optimization Pass2LoopUnroll -Identical Phi Values (byte) main::i#2 (const byte) main::i#0 +Identical Phi Values (byte) main::i#4 (const byte) main::i#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [3] (byte) main::i#1 ← ++ (const byte) main::i#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::i#1 = ++main::i#0 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [1] if((const byte) main::i#0<(byte) 2) goto main::@2 +if() condition always true - replacing block destination [0] if((const byte) main::i#1<(byte) 2) goto main::@2_1 Successful SSA optimization Pass2ConstantIfs Simplifying expression containing zero main::SCREEN#0 in [2] *((const byte*) main::SCREEN#0 + (const byte) main::i#0) ← (byte) 'a' Successful SSA optimization PassNSimplifyExpressionWithZero -Unrolling loop Loop head: main::@1_1 tails: main::@2_1 blocks: main::@2_1 main::@1_1 +Unrolling loop Loop head: main::@2_1 tails: main::@1_2 blocks: main::@1_2 main::@2_1 Successful SSA optimization Pass2LoopUnroll -Identical Phi Values (byte) main::i#4 (const byte) main::i#1 +Identical Phi Values (byte) main::i#6 (const byte) main::i#1 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [7] (byte) main::i#5 ← ++ (const byte) main::i#1 +Constant right-side identified [4] (byte) main::i#7 ← ++ (const byte) main::i#1 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::i#5 = ++main::i#1 +Constant (const byte) main::i#7 = ++main::i#1 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [3] if((const byte) main::i#1<(byte) 2) goto main::@2_1 +Removing PHI-reference to removed block (main::@1_2) in block main::@2_2 +if() condition always false - eliminating [5] if((const byte) main::i#7<(byte) 2) goto main::@2_2 Successful SSA optimization Pass2ConstantIfs -Unrolling loop Loop head: main::@1_2 tails: main::@2_2 blocks: main::@2_2 main::@1_2 -Successful SSA optimization Pass2LoopUnroll -Identical Phi Values (byte) main::i#6 (const byte) main::i#5 -Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [8] (byte) main::i#7 ← ++ (const byte) main::i#5 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::i#7 = ++main::i#5 -Successful SSA optimization Pass2ConstantIdentification -if() condition always false - eliminating [4] if((const byte) main::i#5<(byte) 2) goto main::@2_2 -Successful SSA optimization Pass2ConstantIfs -Eliminating variable (byte) main::i#8 from unused block main::@1_3 -Eliminating variable (byte) main::i#9 from unused block main::@2_3 -Removing PHI-reference to removed block (main::@2_2) in block main::@1_3 -Removing unused block main::@2_2 -Removing unused block main::@1_3 -Removing unused block main::@2_3 -Successful SSA optimization Pass2EliminateUnusedBlocks Eliminating unused constant (const byte) main::i#7 Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused constant (const byte) main::i#5 -Successful SSA optimization PassNEliminateUnusedVars +Eliminating variable (byte) main::i#8 from unused block main::@2_2 +Eliminating variable (byte) main::i#9 from unused block main::@2_2 +Removing unused block main::@2_2 +Removing unused block main::@1_3 +Successful SSA optimization Pass2EliminateUnusedBlocks Inlining constant with different constant siblings (const byte) main::i#0 Inlining constant with different constant siblings (const byte) main::i#1 Constant inlined main::i#0 = (byte) 0 @@ -126,8 +120,8 @@ Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@1 Adding NOP phi() at start of main::@1_1 +Adding NOP phi() at start of main::@1 Adding NOP phi() at start of main::@1_2 CALL GRAPH Calls in [] to main:2 @@ -135,8 +129,8 @@ Calls in [] to main:2 Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes Culled Empty Block (label) @2 -Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@1_1 +Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@1_2 Renumbering block main::@2 to main::@1 Adding NOP phi() at start of @begin diff --git a/src/test/ref/voronoi.asm b/src/test/ref/voronoi.asm index 7ee6ff8f5..2cbc80611 100644 --- a/src/test/ref/voronoi.asm +++ b/src/test/ref/voronoi.asm @@ -88,7 +88,7 @@ render: { sta x b2: jsr findcol - txa + lda findcol.return ldy x sta (colline),y inc x @@ -111,75 +111,78 @@ render: { findcol: { .label x = 3 .label y = 2 - .label xp = 8 - .label yp = 9 - .label i = 4 - .label mindiff = 5 + .label yp = 8 + .label return = 5 + .label mincol = 5 + .label mindiff = 4 lda #$ff sta mindiff - ldx #0 - txa - sta i - b1: - lda i - cmp #numpoints - bcc b2 - rts + lda #0 + sta mincol + tay b2: - ldy i - lda XPOS,y - sta xp + ldx XPOS,y lda YPOS,y sta yp - lda x - cmp xp + cpx x bne b3 lda y cmp yp bne b3 - ldx #0 + lda #0 + sta return rts b3: - lda x - cmp xp - bcc b4 + txa + cmp x + beq !+ + bcs b4 + !: + txa + eor #$ff sec - sbc xp - tay + adc x + tax b5: lda y cmp yp bcc b6 sec sbc yp - sty $ff + stx $ff clc adc $ff + tax b7: - cmp mindiff - bcs b13 - ldy i - ldx COLS,y + cpx mindiff + bcs b14 + lda COLS,y + sta mincol b8: - inc i - sta mindiff - jmp b1 + iny + cpy #numpoints + bcc b13 + rts b13: - lda mindiff + stx mindiff + jmp b2 + b14: + ldx mindiff jmp b8 b6: lda yp sec sbc y - sty $ff + stx $ff clc adc $ff + tax jmp b7 b4: - lda xp + txa sec sbc x - tay + tax jmp b5 } initscreen: { @@ -188,7 +191,14 @@ initscreen: { sta screen lda #>SCREEN sta screen+1 - b1: + b2: + lda #FILL + ldy #0 + sta (screen),y + inc screen + bne !+ + inc screen+1 + !: lda screen+1 cmp #>SCREEN+$3e8 bcc b2 @@ -198,15 +208,6 @@ initscreen: { bcc b2 !: rts - b2: - lda #FILL - ldy #0 - sta (screen),y - inc screen - bne !+ - inc screen+1 - !: - jmp b1 } // Points to create the Voronoi from XPOS: .byte 5, $f, 6, $22, $15, $1f diff --git a/src/test/ref/voronoi.cfg b/src/test/ref/voronoi.cfg index 47c5d7d21..e64b5dc6c 100644 --- a/src/test/ref/voronoi.cfg +++ b/src/test/ref/voronoi.cfg @@ -99,54 +99,56 @@ render::@return: scope:[render] from render::@3 to:@return findcol: scope:[findcol] from render::@2 [51] phi() - to:findcol::@1 -findcol::@1: scope:[findcol] from findcol findcol::@8 - [52] (byte) findcol::mindiff#10 ← phi( findcol/(byte) $ff findcol::@8/(byte~) findcol::mindiff#13 ) - [52] (byte) findcol::mincol#10 ← phi( findcol/(byte) 0 findcol::@8/(byte) findcol::mincol#4 ) - [52] (byte) findcol::i#10 ← phi( findcol/(byte) 0 findcol::@8/(byte) findcol::i#1 ) - [53] if((byte) findcol::i#10<(const byte) numpoints#0) goto findcol::@2 - to:findcol::@return -findcol::@return: scope:[findcol] from findcol::@1 findcol::@9 - [54] (byte) findcol::return#3 ← phi( findcol::@9/(byte) 0 findcol::@1/(byte) findcol::mincol#10 ) - [55] return - to:@return -findcol::@2: scope:[findcol] from findcol::@1 - [56] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) - [57] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) - [58] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@3 + to:findcol::@2 +findcol::@2: scope:[findcol] from findcol findcol::@13 + [52] (byte) findcol::mindiff#13 ← phi( findcol::@13/(byte~) findcol::mindiff#23 findcol/(byte) $ff ) + [52] (byte) findcol::mincol#15 ← phi( findcol::@13/(byte) findcol::mincol#10 findcol/(byte) 0 ) + [52] (byte) findcol::i#14 ← phi( findcol::@13/(byte) findcol::i#1 findcol/(byte) 0 ) + [53] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#14) + [54] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#14) + [55] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@3 to:findcol::@9 findcol::@9: scope:[findcol] from findcol::@2 - [59] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3 + [56] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3 to:findcol::@return +findcol::@return: scope:[findcol] from findcol::@1 findcol::@9 + [57] (byte) findcol::return#3 ← phi( findcol::@9/(byte) 0 findcol::@1/(byte) findcol::mincol#10 ) + [58] return + to:@return findcol::@3: scope:[findcol] from findcol::@2 findcol::@9 - [60] if((byte) findcol::x#0<(byte) findcol::xp#0) goto findcol::@4 + [59] if((byte) findcol::x#0<(byte) findcol::xp#0) goto findcol::@4 to:findcol::@10 findcol::@10: scope:[findcol] from findcol::@3 - [61] (byte) findcol::diff#2 ← (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::@10 findcol::@4 - [62] (byte) findcol::diff#5 ← phi( findcol::@10/(byte) findcol::diff#2 findcol::@4/(byte) findcol::diff#1 ) - [63] if((byte) findcol::y#0<(byte) findcol::yp#0) goto findcol::@6 + [61] (byte) findcol::diff#5 ← phi( findcol::@10/(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::@11 findcol::@11: scope:[findcol] from findcol::@5 - [64] (byte~) findcol::$9 ← (byte) findcol::y#0 - (byte) findcol::yp#0 - [65] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$9 + [63] (byte~) findcol::$9 ← (byte) findcol::y#0 - (byte) findcol::yp#0 + [64] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$9 to:findcol::@7 findcol::@7: scope:[findcol] from findcol::@11 findcol::@6 - [66] (byte) findcol::diff#7 ← phi( findcol::@11/(byte) findcol::diff#4 findcol::@6/(byte) findcol::diff#3 ) - [67] if((byte) findcol::diff#7>=(byte) findcol::mindiff#10) goto findcol::@13 + [65] (byte) findcol::diff#7 ← phi( findcol::@11/(byte) findcol::diff#4 findcol::@6/(byte) findcol::diff#3 ) + [66] if((byte) findcol::diff#7>=(byte) findcol::mindiff#13) goto findcol::@14 to:findcol::@12 findcol::@12: scope:[findcol] from findcol::@7 - [68] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) + [67] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#14) to:findcol::@8 -findcol::@8: scope:[findcol] from findcol::@12 findcol::@13 - [69] (byte) findcol::mindiff#12 ← phi( findcol::@12/(byte) findcol::diff#7 findcol::@13/(byte~) findcol::mindiff#15 ) - [69] (byte) findcol::mincol#4 ← phi( findcol::@12/(byte) findcol::mincol#1 findcol::@13/(byte) findcol::mincol#10 ) - [70] (byte) findcol::i#1 ← ++ (byte) findcol::i#10 - [71] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#12 +findcol::@8: scope:[findcol] from findcol::@12 findcol::@14 + [68] (byte) findcol::mindiff#10 ← phi( findcol::@12/(byte) findcol::diff#7 findcol::@14/(byte~) findcol::mindiff#25 ) + [68] (byte) findcol::mincol#10 ← phi( findcol::@12/(byte) findcol::mincol#1 findcol::@14/(byte) findcol::mincol#15 ) + [69] (byte) findcol::i#1 ← ++ (byte) findcol::i#14 to:findcol::@1 -findcol::@13: scope:[findcol] from findcol::@7 - [72] (byte~) findcol::mindiff#15 ← (byte) findcol::mindiff#10 +findcol::@1: scope:[findcol] from findcol::@8 + [70] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@13 + to:findcol::@return +findcol::@13: scope:[findcol] from findcol::@1 + [71] (byte~) findcol::mindiff#23 ← (byte) findcol::mindiff#10 + to:findcol::@2 +findcol::@14: scope:[findcol] from findcol::@7 + [72] (byte~) findcol::mindiff#25 ← (byte) findcol::mindiff#13 to:findcol::@8 findcol::@6: scope:[findcol] from findcol::@5 [73] (byte~) findcol::$11 ← (byte) findcol::yp#0 - (byte) findcol::y#0 @@ -157,15 +159,15 @@ findcol::@4: scope:[findcol] from findcol::@3 to:findcol::@5 initscreen: scope:[initscreen] from main [76] phi() + to:initscreen::@2 +initscreen::@2: scope:[initscreen] from initscreen initscreen::@1 + [77] (byte*) initscreen::screen#4 ← phi( initscreen::@1/(byte*) initscreen::screen#1 initscreen/(const byte*) SCREEN#0 ) + [78] *((byte*) initscreen::screen#4) ← (const byte) FILL#0 + [79] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#4 to:initscreen::@1 -initscreen::@1: scope:[initscreen] from initscreen initscreen::@2 - [77] (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@2/(byte*) initscreen::screen#1 ) - [78] if((byte*) initscreen::screen#2<(const byte*) SCREEN#0+(word) $3e8) goto initscreen::@2 +initscreen::@1: scope:[initscreen] from initscreen::@2 + [80] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) $3e8) goto initscreen::@2 to:initscreen::@return initscreen::@return: scope:[initscreen] from initscreen::@1 - [79] return + [81] return to:@return -initscreen::@2: scope:[initscreen] from initscreen::@1 - [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 - [81] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 - to:initscreen::@1 diff --git a/src/test/ref/voronoi.log b/src/test/ref/voronoi.log index 1f0a7cd65..3775bac13 100644 --- a/src/test/ref/voronoi.log +++ b/src/test/ref/voronoi.log @@ -891,6 +891,7 @@ Eliminating unused constant (const byte) findcol::diff#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2LoopHeadConstantIdentification Adding number conversion cast (unumber) $28 in if((byte) render::x#1!=(number) $28) goto render::@2 Adding number conversion cast (unumber) $19 in if((byte) render::y#1!=(number) $19) goto render::@1 Successful SSA optimization PassNAddNumberTypeConversions @@ -900,10 +901,43 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $19 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) findcol::i#1 = (byte) findcol::i#10 +Alias (byte) findcol::mincol#10 = (byte) findcol::mincol#4 +Alias (byte) findcol::mindiff#10 = (byte) findcol::mindiff#12 +Alias (byte) findcol::i#14 = (byte) findcol::i#24 +Alias (byte) findcol::mincol#22 = (byte) findcol::mincol#23 +Alias (byte) findcol::mindiff#20 = (byte) findcol::mindiff#21 +Alias (byte) findcol::i#21 = (byte) findcol::i#22 (byte) findcol::i#23 +Alias (byte) findcol::mincol#19 = (byte) findcol::mincol#20 (byte) findcol::mincol#21 +Alias (byte) findcol::mindiff#17 = (byte) findcol::mindiff#18 (byte) findcol::mindiff#19 +Alias (byte) findcol::i#18 = (byte) findcol::i#19 (byte) findcol::i#20 +Alias (byte) findcol::mincol#16 = (byte) findcol::mincol#17 (byte) findcol::mincol#18 +Alias (byte) findcol::mindiff#14 = (byte) findcol::mindiff#15 (byte) findcol::mindiff#16 +Alias (byte) findcol::i#16 = (byte) findcol::i#17 +Successful SSA optimization Pass2AliasElimination +Alias (byte) findcol::i#14 = (byte) findcol::i#21 (byte) findcol::i#18 (byte) findcol::i#16 (byte) findcol::i#15 +Alias (byte) findcol::mincol#15 = (byte) findcol::mincol#19 (byte) findcol::mincol#22 (byte) findcol::mincol#16 +Alias (byte) findcol::mindiff#13 = (byte) findcol::mindiff#17 (byte) findcol::mindiff#20 (byte) findcol::mindiff#14 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) findcol::i#25 (const byte) findcol::i#0 +Identical Phi Values (byte) findcol::mincol#24 (const byte) findcol::mincol#0 +Identical Phi Values (byte) findcol::mindiff#22 (const byte) findcol::mindiff#0 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [30] (byte*~) initscreen::$0 ← (const byte*) SCREEN#0 + (word) $3e8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) initscreen::$0 = SCREEN#0+$3e8 Successful SSA optimization Pass2ConstantIdentification +Removing PHI-reference to removed block (findcol::@1_1) in block findcol::@3 +if() condition always true - replacing block destination [82] if((const byte) findcol::i#0<(const byte) numpoints#0) goto findcol::@2 +Successful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2LoopHeadConstantIdentification +Alias (byte*) initscreen::screen#1 = (byte*) initscreen::screen#2 +Alias (byte) findcol::mincol#10 = (byte) findcol::mincol#14 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) initscreen::screen#5 (const byte*) initscreen::screen#0 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always true - replacing block destination [75] if((const byte*) initscreen::screen#0<(const byte*) initscreen::$0) goto initscreen::@2 +Successful SSA optimization Pass2ConstantIfs Inlining constant with var siblings (const byte*) initscreen::screen#0 Inlining constant with var siblings (const byte) render::y#0 Inlining constant with var siblings (const byte) render::x#0 @@ -940,9 +974,11 @@ Consolidated array index constant in *(XPOS#0+3) Consolidated array index constant in *(XPOS#0+3) Consolidated array index constant in *(XPOS#0+3) Successful SSA optimization Pass2ConstantAdditionElimination +Added new block during phi lifting initscreen::@7(between initscreen::@1 and initscreen::@2) Added new block during phi lifting render::@6(between render::@3 and render::@1) Added new block during phi lifting render::@7(between render::@5 and render::@2) -Added new block during phi lifting findcol::@23(between findcol::@9 and findcol::@10) +Added new block during phi lifting findcol::@23(between findcol::@1 and findcol::@2) +Added new block during phi lifting findcol::@24(between findcol::@9 and findcol::@10) Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @6 @@ -954,8 +990,10 @@ Adding NOP phi() at start of main::@4 Adding NOP phi() at start of main::@5 Adding NOP phi() at start of render Adding NOP phi() at start of findcol +Adding NOP phi() at start of findcol::@1_1 Adding NOP phi() at start of findcol::@14 Adding NOP phi() at start of initscreen +Adding NOP phi() at start of initscreen::@1_1 CALL GRAPH Calls in [] to main:2 Calls in [main] to initscreen:6 render:9 animate:11 @@ -965,27 +1003,30 @@ Created 12 initial phi equivalence classes Coalesced [54] render::y#6 ← render::y#1 Coalesced [55] render::colline#6 ← render::colline#1 Coalesced [56] render::x#4 ← render::x#1 -Coalesced [60] findcol::return#6 ← findcol::mincol#10 -Coalesced [70] findcol::diff#10 ← findcol::diff#2 -Coalesced [75] findcol::diff#12 ← findcol::diff#4 -Coalesced [79] findcol::mincol#15 ← findcol::mincol#1 -Coalesced [80] findcol::mindiff#14 ← findcol::diff#7 -Coalesced [83] findcol::i#14 ← findcol::i#1 -Coalesced [84] findcol::mincol#14 ← findcol::mincol#4 -Not coalescing [85] findcol::mindiff#13 ← findcol::mindiff#12 -Coalesced (already) [86] findcol::mincol#16 ← findcol::mincol#10 -Not coalescing [87] findcol::mindiff#15 ← findcol::mindiff#10 -Coalesced [90] findcol::diff#13 ← findcol::diff#3 -Coalesced [92] findcol::diff#11 ← findcol::diff#1 -Coalesced [99] initscreen::screen#4 ← initscreen::screen#1 +Coalesced [69] findcol::diff#10 ← findcol::diff#2 +Coalesced [74] findcol::diff#12 ← findcol::diff#4 +Coalesced [78] findcol::mincol#26 ← findcol::mincol#1 +Coalesced [79] findcol::mindiff#24 ← findcol::diff#7 +Coalesced [83] findcol::return#6 ← findcol::mincol#10 +Coalesced [84] findcol::i#26 ← findcol::i#1 +Coalesced [85] findcol::mincol#25 ← findcol::mincol#10 +Not coalescing [86] findcol::mindiff#23 ← findcol::mindiff#10 +Coalesced (already) [87] findcol::mincol#27 ← findcol::mincol#15 +Not coalescing [88] findcol::mindiff#25 ← findcol::mindiff#13 +Coalesced [91] findcol::diff#13 ← findcol::diff#3 +Coalesced [93] findcol::diff#11 ← findcol::diff#1 +Coalesced [101] initscreen::screen#6 ← initscreen::screen#1 Coalesced down to 9 phi equivalence classes Culled Empty Block (label) @6 Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@5 Culled Empty Block (label) render::@6 Culled Empty Block (label) render::@7 -Culled Empty Block (label) findcol::@3 +Culled Empty Block (label) findcol::@1_1 Culled Empty Block (label) findcol::@14 +Culled Empty Block (label) findcol::@3 +Culled Empty Block (label) initscreen::@1_1 +Culled Empty Block (label) initscreen::@7 Renumbering block @5 to @1 Renumbering block main::@4 to main::@2 Renumbering block animate::@6 to animate::@5 @@ -1006,6 +1047,7 @@ Renumbering block findcol::@16 to findcol::@10 Renumbering block findcol::@18 to findcol::@11 Renumbering block findcol::@20 to findcol::@12 Renumbering block findcol::@23 to findcol::@13 +Renumbering block findcol::@24 to findcol::@14 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -1118,54 +1160,56 @@ render::@return: scope:[render] from render::@3 to:@return findcol: scope:[findcol] from render::@2 [51] phi() - to:findcol::@1 -findcol::@1: scope:[findcol] from findcol findcol::@8 - [52] (byte) findcol::mindiff#10 ← phi( findcol/(byte) $ff findcol::@8/(byte~) findcol::mindiff#13 ) - [52] (byte) findcol::mincol#10 ← phi( findcol/(byte) 0 findcol::@8/(byte) findcol::mincol#4 ) - [52] (byte) findcol::i#10 ← phi( findcol/(byte) 0 findcol::@8/(byte) findcol::i#1 ) - [53] if((byte) findcol::i#10<(const byte) numpoints#0) goto findcol::@2 - to:findcol::@return -findcol::@return: scope:[findcol] from findcol::@1 findcol::@9 - [54] (byte) findcol::return#3 ← phi( findcol::@9/(byte) 0 findcol::@1/(byte) findcol::mincol#10 ) - [55] return - to:@return -findcol::@2: scope:[findcol] from findcol::@1 - [56] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) - [57] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) - [58] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@3 + to:findcol::@2 +findcol::@2: scope:[findcol] from findcol findcol::@13 + [52] (byte) findcol::mindiff#13 ← phi( findcol::@13/(byte~) findcol::mindiff#23 findcol/(byte) $ff ) + [52] (byte) findcol::mincol#15 ← phi( findcol::@13/(byte) findcol::mincol#10 findcol/(byte) 0 ) + [52] (byte) findcol::i#14 ← phi( findcol::@13/(byte) findcol::i#1 findcol/(byte) 0 ) + [53] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#14) + [54] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#14) + [55] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@3 to:findcol::@9 findcol::@9: scope:[findcol] from findcol::@2 - [59] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3 + [56] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3 to:findcol::@return +findcol::@return: scope:[findcol] from findcol::@1 findcol::@9 + [57] (byte) findcol::return#3 ← phi( findcol::@9/(byte) 0 findcol::@1/(byte) findcol::mincol#10 ) + [58] return + to:@return findcol::@3: scope:[findcol] from findcol::@2 findcol::@9 - [60] if((byte) findcol::x#0<(byte) findcol::xp#0) goto findcol::@4 + [59] if((byte) findcol::x#0<(byte) findcol::xp#0) goto findcol::@4 to:findcol::@10 findcol::@10: scope:[findcol] from findcol::@3 - [61] (byte) findcol::diff#2 ← (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::@10 findcol::@4 - [62] (byte) findcol::diff#5 ← phi( findcol::@10/(byte) findcol::diff#2 findcol::@4/(byte) findcol::diff#1 ) - [63] if((byte) findcol::y#0<(byte) findcol::yp#0) goto findcol::@6 + [61] (byte) findcol::diff#5 ← phi( findcol::@10/(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::@11 findcol::@11: scope:[findcol] from findcol::@5 - [64] (byte~) findcol::$9 ← (byte) findcol::y#0 - (byte) findcol::yp#0 - [65] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$9 + [63] (byte~) findcol::$9 ← (byte) findcol::y#0 - (byte) findcol::yp#0 + [64] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$9 to:findcol::@7 findcol::@7: scope:[findcol] from findcol::@11 findcol::@6 - [66] (byte) findcol::diff#7 ← phi( findcol::@11/(byte) findcol::diff#4 findcol::@6/(byte) findcol::diff#3 ) - [67] if((byte) findcol::diff#7>=(byte) findcol::mindiff#10) goto findcol::@13 + [65] (byte) findcol::diff#7 ← phi( findcol::@11/(byte) findcol::diff#4 findcol::@6/(byte) findcol::diff#3 ) + [66] if((byte) findcol::diff#7>=(byte) findcol::mindiff#13) goto findcol::@14 to:findcol::@12 findcol::@12: scope:[findcol] from findcol::@7 - [68] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) + [67] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#14) to:findcol::@8 -findcol::@8: scope:[findcol] from findcol::@12 findcol::@13 - [69] (byte) findcol::mindiff#12 ← phi( findcol::@12/(byte) findcol::diff#7 findcol::@13/(byte~) findcol::mindiff#15 ) - [69] (byte) findcol::mincol#4 ← phi( findcol::@12/(byte) findcol::mincol#1 findcol::@13/(byte) findcol::mincol#10 ) - [70] (byte) findcol::i#1 ← ++ (byte) findcol::i#10 - [71] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#12 +findcol::@8: scope:[findcol] from findcol::@12 findcol::@14 + [68] (byte) findcol::mindiff#10 ← phi( findcol::@12/(byte) findcol::diff#7 findcol::@14/(byte~) findcol::mindiff#25 ) + [68] (byte) findcol::mincol#10 ← phi( findcol::@12/(byte) findcol::mincol#1 findcol::@14/(byte) findcol::mincol#15 ) + [69] (byte) findcol::i#1 ← ++ (byte) findcol::i#14 to:findcol::@1 -findcol::@13: scope:[findcol] from findcol::@7 - [72] (byte~) findcol::mindiff#15 ← (byte) findcol::mindiff#10 +findcol::@1: scope:[findcol] from findcol::@8 + [70] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@13 + to:findcol::@return +findcol::@13: scope:[findcol] from findcol::@1 + [71] (byte~) findcol::mindiff#23 ← (byte) findcol::mindiff#10 + to:findcol::@2 +findcol::@14: scope:[findcol] from findcol::@7 + [72] (byte~) findcol::mindiff#25 ← (byte) findcol::mindiff#13 to:findcol::@8 findcol::@6: scope:[findcol] from findcol::@5 [73] (byte~) findcol::$11 ← (byte) findcol::yp#0 - (byte) findcol::y#0 @@ -1176,18 +1220,18 @@ findcol::@4: scope:[findcol] from findcol::@3 to:findcol::@5 initscreen: scope:[initscreen] from main [76] phi() + to:initscreen::@2 +initscreen::@2: scope:[initscreen] from initscreen initscreen::@1 + [77] (byte*) initscreen::screen#4 ← phi( initscreen::@1/(byte*) initscreen::screen#1 initscreen/(const byte*) SCREEN#0 ) + [78] *((byte*) initscreen::screen#4) ← (const byte) FILL#0 + [79] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#4 to:initscreen::@1 -initscreen::@1: scope:[initscreen] from initscreen initscreen::@2 - [77] (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@2/(byte*) initscreen::screen#1 ) - [78] if((byte*) initscreen::screen#2<(const byte*) SCREEN#0+(word) $3e8) goto initscreen::@2 +initscreen::@1: scope:[initscreen] from initscreen::@2 + [80] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) $3e8) goto initscreen::@2 to:initscreen::@return initscreen::@return: scope:[initscreen] from initscreen::@1 - [79] return + [81] return to:@return -initscreen::@2: scope:[initscreen] from initscreen::@1 - [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 - [81] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 - to:initscreen::@1 VARIABLE REGISTER WEIGHTS @@ -1217,16 +1261,16 @@ VARIABLE REGISTER WEIGHTS (byte) findcol::diff#7 13334.666666666666 (byte) findcol::i (byte) findcol::i#1 10001.0 -(byte) findcol::i#10 3000.3 +(byte) findcol::i#14 2631.842105263158 (byte) findcol::mincol (byte) findcol::mincol#1 20002.0 -(byte) findcol::mincol#10 1666.8333333333333 -(byte) findcol::mincol#4 10001.0 +(byte) findcol::mincol#10 10001.0 +(byte) findcol::mincol#15 1176.5882352941176 (byte) findcol::mindiff -(byte) findcol::mindiff#10 1764.8823529411764 -(byte) findcol::mindiff#12 15001.5 -(byte~) findcol::mindiff#13 20002.0 -(byte~) findcol::mindiff#15 20002.0 +(byte) findcol::mindiff#10 10001.0 +(byte) findcol::mindiff#13 1875.1875 +(byte~) findcol::mindiff#23 20002.0 +(byte~) findcol::mindiff#25 20002.0 (byte) findcol::return (byte) findcol::return#0 2002.0 (byte) findcol::return#3 3667.333333333333 @@ -1240,8 +1284,8 @@ VARIABLE REGISTER WEIGHTS (byte) findcol::yp#0 6250.625 (void()) initscreen() (byte*) initscreen::screen -(byte*) initscreen::screen#1 22.0 -(byte*) initscreen::screen#2 14.666666666666666 +(byte*) initscreen::screen#1 16.5 +(byte*) initscreen::screen#4 16.5 (void()) main() (byte) numpoints (void()) render() @@ -1261,12 +1305,12 @@ Initial phi equivalence classes [ render::y#4 render::y#1 ] [ render::colline#5 render::colline#1 ] [ render::x#2 render::x#1 ] -[ findcol::i#10 findcol::i#1 ] -[ findcol::mindiff#10 findcol::mindiff#13 ] -[ findcol::return#3 findcol::mincol#10 findcol::mincol#4 findcol::mincol#1 ] +[ findcol::i#14 findcol::i#1 ] +[ findcol::mindiff#13 findcol::mindiff#23 ] +[ findcol::return#3 findcol::mincol#15 findcol::mincol#10 findcol::mincol#1 ] [ findcol::diff#5 findcol::diff#2 findcol::diff#1 ] -[ findcol::mindiff#12 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#15 ] -[ initscreen::screen#2 initscreen::screen#1 ] +[ findcol::mindiff#10 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#25 ] +[ initscreen::screen#4 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 ] Added variable animate::$6 to zero page equivalence class [ animate::$6 ] @@ -1286,12 +1330,12 @@ Complete equivalence classes [ render::y#4 render::y#1 ] [ render::colline#5 render::colline#1 ] [ render::x#2 render::x#1 ] -[ findcol::i#10 findcol::i#1 ] -[ findcol::mindiff#10 findcol::mindiff#13 ] -[ findcol::return#3 findcol::mincol#10 findcol::mincol#4 findcol::mincol#1 ] +[ findcol::i#14 findcol::i#1 ] +[ findcol::mindiff#13 findcol::mindiff#23 ] +[ findcol::return#3 findcol::mincol#15 findcol::mincol#10 findcol::mincol#1 ] [ findcol::diff#5 findcol::diff#2 findcol::diff#1 ] -[ findcol::mindiff#12 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#15 ] -[ initscreen::screen#2 initscreen::screen#1 ] +[ findcol::mindiff#10 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#25 ] +[ initscreen::screen#4 initscreen::screen#1 ] [ animate::$0 ] [ animate::$3 ] [ animate::$6 ] @@ -1310,12 +1354,12 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ render::y#4 render::y#1 ] Allocated zp ZP_WORD:3 [ render::colline#5 render::colline#1 ] 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#3 findcol::mincol#10 findcol::mincol#4 findcol::mincol#1 ] +Allocated zp ZP_BYTE:6 [ findcol::i#14 findcol::i#1 ] +Allocated zp ZP_BYTE:7 [ findcol::mindiff#13 findcol::mindiff#23 ] +Allocated zp ZP_BYTE:8 [ findcol::return#3 findcol::mincol#15 findcol::mincol#10 findcol::mincol#1 ] Allocated zp ZP_BYTE:9 [ findcol::diff#5 findcol::diff#2 findcol::diff#1 ] -Allocated zp ZP_BYTE:10 [ findcol::mindiff#12 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:10 [ findcol::mindiff#10 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#25 ] +Allocated zp ZP_WORD:11 [ initscreen::screen#4 initscreen::screen#1 ] Allocated zp ZP_BYTE:13 [ animate::$0 ] Allocated zp ZP_BYTE:14 [ animate::$3 ] Allocated zp ZP_BYTE:15 [ animate::$6 ] @@ -1627,143 +1671,146 @@ findcol: { .label i = 6 .label mincol = 8 .label diff_7 = $a - .label mindiff = 7 - .label mindiff_12 = $a - .label mindiff_15 = $a - // [52] phi from findcol to findcol::@1 [phi:findcol->findcol::@1] - b1_from_findcol: - // [52] phi (byte) findcol::mindiff#10 = (byte) $ff [phi:findcol->findcol::@1#0] -- vbuz1=vbuc1 + .label mindiff = $a + .label mindiff_13 = 7 + .label mindiff_23 = 7 + // [52] phi from findcol to findcol::@2 [phi:findcol->findcol::@2] + b2_from_findcol: + // [52] phi (byte) findcol::mindiff#13 = (byte) $ff [phi:findcol->findcol::@2#0] -- vbuz1=vbuc1 lda #$ff - sta mindiff - // [52] phi (byte) findcol::mincol#10 = (byte) 0 [phi:findcol->findcol::@1#1] -- vbuz1=vbuc1 + sta mindiff_13 + // [52] phi (byte) findcol::mincol#15 = (byte) 0 [phi:findcol->findcol::@2#1] -- vbuz1=vbuc1 lda #0 sta mincol - // [52] phi (byte) findcol::i#10 = (byte) 0 [phi:findcol->findcol::@1#2] -- vbuz1=vbuc1 + // [52] phi (byte) findcol::i#14 = (byte) 0 [phi:findcol->findcol::@2#2] -- vbuz1=vbuc1 lda #0 sta i - jmp b1 - // findcol::@1 - b1: - // [53] if((byte) findcol::i#10<(const byte) numpoints#0) goto findcol::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #numpoints - bcc b2 - // [54] phi from findcol::@1 to findcol::@return [phi:findcol::@1->findcol::@return] - breturn_from_b1: - // [54] phi (byte) findcol::return#3 = (byte) findcol::mincol#10 [phi:findcol::@1->findcol::@return#0] -- register_copy - jmp breturn - // findcol::@return - breturn: - // [55] return - rts + jmp b2 // findcol::@2 b2: - // [56] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) -- vbuz1=pbuc1_derefidx_vbuz2 + // [53] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#14) -- vbuz1=pbuc1_derefidx_vbuz2 ldy i lda XPOS,y sta xp - // [57] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) -- vbuz1=pbuc1_derefidx_vbuz2 + // [54] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#14) -- vbuz1=pbuc1_derefidx_vbuz2 ldy i lda YPOS,y sta yp - // [58] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@3 -- vbuz1_neq_vbuz2_then_la1 + // [55] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@3 -- vbuz1_neq_vbuz2_then_la1 lda x cmp xp bne b3 jmp b9 // findcol::@9 b9: - // [59] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3 -- vbuz1_neq_vbuz2_then_la1 + // [56] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3 -- vbuz1_neq_vbuz2_then_la1 lda y cmp yp bne b3 - // [54] phi from findcol::@9 to findcol::@return [phi:findcol::@9->findcol::@return] + // [57] phi from findcol::@9 to findcol::@return [phi:findcol::@9->findcol::@return] breturn_from_b9: - // [54] phi (byte) findcol::return#3 = (byte) 0 [phi:findcol::@9->findcol::@return#0] -- vbuz1=vbuc1 + // [57] phi (byte) findcol::return#3 = (byte) 0 [phi:findcol::@9->findcol::@return#0] -- vbuz1=vbuc1 lda #0 sta return_3 jmp breturn + // findcol::@return + breturn: + // [58] return + rts // findcol::@3 b3: - // [60] if((byte) findcol::x#0<(byte) findcol::xp#0) goto findcol::@4 -- vbuz1_lt_vbuz2_then_la1 + // [59] if((byte) findcol::x#0<(byte) findcol::xp#0) goto findcol::@4 -- vbuz1_lt_vbuz2_then_la1 lda x cmp xp bcc b4 jmp b10 // findcol::@10 b10: - // [61] (byte) findcol::diff#2 ← (byte) findcol::x#0 - (byte) findcol::xp#0 -- vbuz1=vbuz2_minus_vbuz3 + // [60] (byte) findcol::diff#2 ← (byte) findcol::x#0 - (byte) findcol::xp#0 -- vbuz1=vbuz2_minus_vbuz3 lda x sec sbc xp sta diff - // [62] phi from findcol::@10 findcol::@4 to findcol::@5 [phi:findcol::@10/findcol::@4->findcol::@5] + // [61] phi from findcol::@10 findcol::@4 to findcol::@5 [phi:findcol::@10/findcol::@4->findcol::@5] b5_from_b10: b5_from_b4: - // [62] phi (byte) findcol::diff#5 = (byte) findcol::diff#2 [phi:findcol::@10/findcol::@4->findcol::@5#0] -- register_copy + // [61] phi (byte) findcol::diff#5 = (byte) findcol::diff#2 [phi:findcol::@10/findcol::@4->findcol::@5#0] -- register_copy jmp b5 // findcol::@5 b5: - // [63] if((byte) findcol::y#0<(byte) findcol::yp#0) goto findcol::@6 -- vbuz1_lt_vbuz2_then_la1 + // [62] if((byte) findcol::y#0<(byte) findcol::yp#0) goto findcol::@6 -- vbuz1_lt_vbuz2_then_la1 lda y cmp yp bcc b6 jmp b11 // findcol::@11 b11: - // [64] (byte~) findcol::$9 ← (byte) findcol::y#0 - (byte) findcol::yp#0 -- vbuz1=vbuz2_minus_vbuz3 + // [63] (byte~) findcol::$9 ← (byte) findcol::y#0 - (byte) findcol::yp#0 -- vbuz1=vbuz2_minus_vbuz3 lda y sec sbc yp sta _9 - // [65] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$9 -- vbuz1=vbuz2_plus_vbuz3 + // [64] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$9 -- vbuz1=vbuz2_plus_vbuz3 lda diff clc adc _9 sta diff_4 - // [66] phi from findcol::@11 findcol::@6 to findcol::@7 [phi:findcol::@11/findcol::@6->findcol::@7] + // [65] phi from findcol::@11 findcol::@6 to findcol::@7 [phi:findcol::@11/findcol::@6->findcol::@7] b7_from_b11: b7_from_b6: - // [66] phi (byte) findcol::diff#7 = (byte) findcol::diff#4 [phi:findcol::@11/findcol::@6->findcol::@7#0] -- register_copy + // [65] phi (byte) findcol::diff#7 = (byte) findcol::diff#4 [phi:findcol::@11/findcol::@6->findcol::@7#0] -- register_copy jmp b7 // findcol::@7 b7: - // [67] if((byte) findcol::diff#7>=(byte) findcol::mindiff#10) goto findcol::@13 -- vbuz1_ge_vbuz2_then_la1 + // [66] if((byte) findcol::diff#7>=(byte) findcol::mindiff#13) goto findcol::@14 -- vbuz1_ge_vbuz2_then_la1 lda diff_7 - cmp mindiff - bcs b13 + cmp mindiff_13 + bcs b14 jmp b12 // findcol::@12 b12: - // [68] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) -- vbuz1=pbuc1_derefidx_vbuz2 + // [67] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#14) -- vbuz1=pbuc1_derefidx_vbuz2 ldy i lda COLS,y sta mincol - // [69] phi from findcol::@12 findcol::@13 to findcol::@8 [phi:findcol::@12/findcol::@13->findcol::@8] + // [68] phi from findcol::@12 findcol::@14 to findcol::@8 [phi:findcol::@12/findcol::@14->findcol::@8] b8_from_b12: - b8_from_b13: - // [69] phi (byte) findcol::mindiff#12 = (byte) findcol::diff#7 [phi:findcol::@12/findcol::@13->findcol::@8#0] -- register_copy - // [69] phi (byte) findcol::mincol#4 = (byte) findcol::mincol#1 [phi:findcol::@12/findcol::@13->findcol::@8#1] -- register_copy + b8_from_b14: + // [68] phi (byte) findcol::mindiff#10 = (byte) findcol::diff#7 [phi:findcol::@12/findcol::@14->findcol::@8#0] -- register_copy + // [68] phi (byte) findcol::mincol#10 = (byte) findcol::mincol#1 [phi:findcol::@12/findcol::@14->findcol::@8#1] -- register_copy jmp b8 // findcol::@8 b8: - // [70] (byte) findcol::i#1 ← ++ (byte) findcol::i#10 -- vbuz1=_inc_vbuz1 + // [69] (byte) findcol::i#1 ← ++ (byte) findcol::i#14 -- vbuz1=_inc_vbuz1 inc i - // [71] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#12 -- vbuz1=vbuz2 - lda mindiff_12 - sta mindiff - // [52] phi from findcol::@8 to findcol::@1 [phi:findcol::@8->findcol::@1] - b1_from_b8: - // [52] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 [phi:findcol::@8->findcol::@1#0] -- register_copy - // [52] phi (byte) findcol::mincol#10 = (byte) findcol::mincol#4 [phi:findcol::@8->findcol::@1#1] -- register_copy - // [52] phi (byte) findcol::i#10 = (byte) findcol::i#1 [phi:findcol::@8->findcol::@1#2] -- register_copy jmp b1 + // findcol::@1 + b1: + // [70] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@13 -- vbuz1_lt_vbuc1_then_la1 + lda i + cmp #numpoints + bcc b13 + // [57] phi from findcol::@1 to findcol::@return [phi:findcol::@1->findcol::@return] + breturn_from_b1: + // [57] phi (byte) findcol::return#3 = (byte) findcol::mincol#10 [phi:findcol::@1->findcol::@return#0] -- register_copy + jmp breturn // findcol::@13 b13: - // [72] (byte~) findcol::mindiff#15 ← (byte) findcol::mindiff#10 -- vbuz1=vbuz2 + // [71] (byte~) findcol::mindiff#23 ← (byte) findcol::mindiff#10 -- vbuz1=vbuz2 lda mindiff - sta mindiff_15 - jmp b8_from_b13 + sta mindiff_23 + // [52] phi from findcol::@13 to findcol::@2 [phi:findcol::@13->findcol::@2] + b2_from_b13: + // [52] phi (byte) findcol::mindiff#13 = (byte~) findcol::mindiff#23 [phi:findcol::@13->findcol::@2#0] -- register_copy + // [52] phi (byte) findcol::mincol#15 = (byte) findcol::mincol#10 [phi:findcol::@13->findcol::@2#1] -- register_copy + // [52] phi (byte) findcol::i#14 = (byte) findcol::i#1 [phi:findcol::@13->findcol::@2#2] -- register_copy + jmp b2 + // findcol::@14 + b14: + // [72] (byte~) findcol::mindiff#25 ← (byte) findcol::mindiff#13 -- vbuz1=vbuz2 + lda mindiff_13 + sta mindiff + jmp b8_from_b14 // findcol::@6 b6: // [73] (byte~) findcol::$11 ← (byte) findcol::yp#0 - (byte) findcol::y#0 -- vbuz1=vbuz2_minus_vbuz3 @@ -1789,45 +1836,46 @@ findcol: { // initscreen initscreen: { .label screen = $b - // [77] phi from initscreen to initscreen::@1 [phi:initscreen->initscreen::@1] - b1_from_initscreen: - // [77] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 [phi:initscreen->initscreen::@1#0] -- pbuz1=pbuc1 + // [77] phi from initscreen to initscreen::@2 [phi:initscreen->initscreen::@2] + b2_from_initscreen: + // [77] phi (byte*) initscreen::screen#4 = (const byte*) SCREEN#0 [phi:initscreen->initscreen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta screen+1 - jmp b1 - // initscreen::@1 - b1: - // [78] if((byte*) initscreen::screen#2<(const byte*) SCREEN#0+(word) $3e8) goto initscreen::@2 -- pbuz1_lt_pbuc1_then_la1 - lda screen+1 - cmp #>SCREEN+$3e8 - bcc b2 - bne !+ - lda screen - cmp #initscreen::@2] + b2_from_b1: + // [77] phi (byte*) initscreen::screen#4 = (byte*) initscreen::screen#1 [phi:initscreen::@1->initscreen::@2#0] -- register_copy + jmp b2 // initscreen::@2 b2: - // [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 -- _deref_pbuz1=vbuc1 + // [78] *((byte*) initscreen::screen#4) ← (const byte) FILL#0 -- _deref_pbuz1=vbuc1 lda #FILL ldy #0 sta (screen),y - // [81] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 -- pbuz1=_inc_pbuz1 + // [79] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#4 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [77] phi from initscreen::@2 to initscreen::@1 [phi:initscreen::@2->initscreen::@1] - b1_from_b2: - // [77] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 [phi:initscreen::@2->initscreen::@1#0] -- register_copy jmp b1 + // initscreen::@1 + b1: + // [80] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) $3e8) goto initscreen::@2 -- pbuz1_lt_pbuc1_then_la1 + lda screen+1 + cmp #>SCREEN+$3e8 + bcc b2_from_b1 + bne !+ + lda screen + cmp #findcol] findcol_from_b2: jsr findcol - // [42] (byte) findcol::return#0 ← (byte) findcol::return#3 -- vbuaa=vbuxx - txa + // [42] (byte) findcol::return#0 ← (byte) findcol::return#3 -- vbuaa=vbuz1 + lda findcol.return jmp b4 // render::@4 b4: @@ -2222,198 +2271,203 @@ render: { findcol: { .label x = 3 .label y = 2 - .label xp = 8 - .label yp = 9 - .label i = 4 - .label mindiff = 5 - // [52] phi from findcol to findcol::@1 [phi:findcol->findcol::@1] - b1_from_findcol: - // [52] phi (byte) findcol::mindiff#10 = (byte) $ff [phi:findcol->findcol::@1#0] -- vbuz1=vbuc1 + .label yp = 8 + .label return = 5 + .label mincol = 5 + .label mindiff = 4 + // [52] phi from findcol to findcol::@2 [phi:findcol->findcol::@2] + b2_from_findcol: + // [52] phi (byte) findcol::mindiff#13 = (byte) $ff [phi:findcol->findcol::@2#0] -- vbuz1=vbuc1 lda #$ff sta mindiff - // [52] phi (byte) findcol::mincol#10 = (byte) 0 [phi:findcol->findcol::@1#1] -- vbuxx=vbuc1 - ldx #0 - // [52] phi (byte) findcol::i#10 = (byte) 0 [phi:findcol->findcol::@1#2] -- vbuz1=vbuc1 + // [52] phi (byte) findcol::mincol#15 = (byte) 0 [phi:findcol->findcol::@2#1] -- vbuz1=vbuc1 lda #0 - sta i - jmp b1 - // findcol::@1 - b1: - // [53] if((byte) findcol::i#10<(const byte) numpoints#0) goto findcol::@2 -- vbuz1_lt_vbuc1_then_la1 - lda i - cmp #numpoints - bcc b2 - // [54] phi from findcol::@1 to findcol::@return [phi:findcol::@1->findcol::@return] - breturn_from_b1: - // [54] phi (byte) findcol::return#3 = (byte) findcol::mincol#10 [phi:findcol::@1->findcol::@return#0] -- register_copy - jmp breturn - // findcol::@return - breturn: - // [55] return - rts + sta mincol + // [52] phi (byte) findcol::i#14 = (byte) 0 [phi:findcol->findcol::@2#2] -- vbuyy=vbuc1 + ldy #0 + jmp b2 // findcol::@2 b2: - // [56] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy i - lda XPOS,y - sta xp - // [57] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy i + // [53] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#14) -- vbuxx=pbuc1_derefidx_vbuyy + ldx XPOS,y + // [54] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#14) -- vbuz1=pbuc1_derefidx_vbuyy lda YPOS,y sta yp - // [58] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@3 -- vbuz1_neq_vbuz2_then_la1 - lda x - cmp xp + // [55] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@3 -- vbuz1_neq_vbuxx_then_la1 + cpx x bne b3 jmp b9 // findcol::@9 b9: - // [59] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3 -- vbuz1_neq_vbuz2_then_la1 + // [56] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3 -- vbuz1_neq_vbuz2_then_la1 lda y cmp yp bne b3 - // [54] phi from findcol::@9 to findcol::@return [phi:findcol::@9->findcol::@return] + // [57] phi from findcol::@9 to findcol::@return [phi:findcol::@9->findcol::@return] breturn_from_b9: - // [54] phi (byte) findcol::return#3 = (byte) 0 [phi:findcol::@9->findcol::@return#0] -- vbuxx=vbuc1 - ldx #0 + // [57] phi (byte) findcol::return#3 = (byte) 0 [phi:findcol::@9->findcol::@return#0] -- vbuz1=vbuc1 + lda #0 + sta return jmp breturn + // findcol::@return + breturn: + // [58] return + rts // findcol::@3 b3: - // [60] if((byte) findcol::x#0<(byte) findcol::xp#0) goto findcol::@4 -- vbuz1_lt_vbuz2_then_la1 - lda x - cmp xp - bcc b4 + // [59] if((byte) findcol::x#0<(byte) findcol::xp#0) goto findcol::@4 -- vbuz1_lt_vbuxx_then_la1 + txa + cmp x + beq !+ + bcs b4 + !: jmp b10 // findcol::@10 b10: - // [61] (byte) findcol::diff#2 ← (byte) findcol::x#0 - (byte) findcol::xp#0 -- vbuyy=vbuz1_minus_vbuz2 - lda x + // [60] (byte) findcol::diff#2 ← (byte) findcol::x#0 - (byte) findcol::xp#0 -- vbuxx=vbuz1_minus_vbuxx + txa + eor #$ff sec - sbc xp - tay - // [62] phi from findcol::@10 findcol::@4 to findcol::@5 [phi:findcol::@10/findcol::@4->findcol::@5] + adc x + tax + // [61] phi from findcol::@10 findcol::@4 to findcol::@5 [phi:findcol::@10/findcol::@4->findcol::@5] b5_from_b10: b5_from_b4: - // [62] phi (byte) findcol::diff#5 = (byte) findcol::diff#2 [phi:findcol::@10/findcol::@4->findcol::@5#0] -- register_copy + // [61] phi (byte) findcol::diff#5 = (byte) findcol::diff#2 [phi:findcol::@10/findcol::@4->findcol::@5#0] -- register_copy jmp b5 // findcol::@5 b5: - // [63] if((byte) findcol::y#0<(byte) findcol::yp#0) goto findcol::@6 -- vbuz1_lt_vbuz2_then_la1 + // [62] if((byte) findcol::y#0<(byte) findcol::yp#0) goto findcol::@6 -- vbuz1_lt_vbuz2_then_la1 lda y cmp yp bcc b6 jmp b11 // findcol::@11 b11: - // [64] (byte~) findcol::$9 ← (byte) findcol::y#0 - (byte) findcol::yp#0 -- vbuaa=vbuz1_minus_vbuz2 + // [63] (byte~) findcol::$9 ← (byte) findcol::y#0 - (byte) findcol::yp#0 -- vbuaa=vbuz1_minus_vbuz2 lda y sec sbc yp - // [65] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$9 -- vbuaa=vbuyy_plus_vbuaa - sty $ff + // [64] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$9 -- vbuxx=vbuxx_plus_vbuaa + stx $ff clc adc $ff - // [66] phi from findcol::@11 findcol::@6 to findcol::@7 [phi:findcol::@11/findcol::@6->findcol::@7] + tax + // [65] phi from findcol::@11 findcol::@6 to findcol::@7 [phi:findcol::@11/findcol::@6->findcol::@7] b7_from_b11: b7_from_b6: - // [66] phi (byte) findcol::diff#7 = (byte) findcol::diff#4 [phi:findcol::@11/findcol::@6->findcol::@7#0] -- register_copy + // [65] phi (byte) findcol::diff#7 = (byte) findcol::diff#4 [phi:findcol::@11/findcol::@6->findcol::@7#0] -- register_copy jmp b7 // findcol::@7 b7: - // [67] if((byte) findcol::diff#7>=(byte) findcol::mindiff#10) goto findcol::@13 -- vbuaa_ge_vbuz1_then_la1 - cmp mindiff - bcs b13 + // [66] if((byte) findcol::diff#7>=(byte) findcol::mindiff#13) goto findcol::@14 -- vbuxx_ge_vbuz1_then_la1 + cpx mindiff + bcs b14 jmp b12 // findcol::@12 b12: - // [68] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) -- vbuxx=pbuc1_derefidx_vbuz1 - ldy i - ldx COLS,y - // [69] phi from findcol::@12 findcol::@13 to findcol::@8 [phi:findcol::@12/findcol::@13->findcol::@8] + // [67] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#14) -- vbuz1=pbuc1_derefidx_vbuyy + lda COLS,y + sta mincol + // [68] phi from findcol::@12 findcol::@14 to findcol::@8 [phi:findcol::@12/findcol::@14->findcol::@8] b8_from_b12: - b8_from_b13: - // [69] phi (byte) findcol::mindiff#12 = (byte) findcol::diff#7 [phi:findcol::@12/findcol::@13->findcol::@8#0] -- register_copy - // [69] phi (byte) findcol::mincol#4 = (byte) findcol::mincol#1 [phi:findcol::@12/findcol::@13->findcol::@8#1] -- register_copy + b8_from_b14: + // [68] phi (byte) findcol::mindiff#10 = (byte) findcol::diff#7 [phi:findcol::@12/findcol::@14->findcol::@8#0] -- register_copy + // [68] phi (byte) findcol::mincol#10 = (byte) findcol::mincol#1 [phi:findcol::@12/findcol::@14->findcol::@8#1] -- register_copy jmp b8 // findcol::@8 b8: - // [70] (byte) findcol::i#1 ← ++ (byte) findcol::i#10 -- vbuz1=_inc_vbuz1 - inc i - // [71] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#12 -- vbuz1=vbuaa - sta mindiff - // [52] phi from findcol::@8 to findcol::@1 [phi:findcol::@8->findcol::@1] - b1_from_b8: - // [52] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 [phi:findcol::@8->findcol::@1#0] -- register_copy - // [52] phi (byte) findcol::mincol#10 = (byte) findcol::mincol#4 [phi:findcol::@8->findcol::@1#1] -- register_copy - // [52] phi (byte) findcol::i#10 = (byte) findcol::i#1 [phi:findcol::@8->findcol::@1#2] -- register_copy + // [69] (byte) findcol::i#1 ← ++ (byte) findcol::i#14 -- vbuyy=_inc_vbuyy + iny jmp b1 + // findcol::@1 + b1: + // [70] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@13 -- vbuyy_lt_vbuc1_then_la1 + cpy #numpoints + bcc b13 + // [57] phi from findcol::@1 to findcol::@return [phi:findcol::@1->findcol::@return] + breturn_from_b1: + // [57] phi (byte) findcol::return#3 = (byte) findcol::mincol#10 [phi:findcol::@1->findcol::@return#0] -- register_copy + jmp breturn // findcol::@13 b13: - // [72] (byte~) findcol::mindiff#15 ← (byte) findcol::mindiff#10 -- vbuaa=vbuz1 - lda mindiff - jmp b8_from_b13 + // [71] (byte~) findcol::mindiff#23 ← (byte) findcol::mindiff#10 -- vbuz1=vbuxx + stx mindiff + // [52] phi from findcol::@13 to findcol::@2 [phi:findcol::@13->findcol::@2] + b2_from_b13: + // [52] phi (byte) findcol::mindiff#13 = (byte~) findcol::mindiff#23 [phi:findcol::@13->findcol::@2#0] -- register_copy + // [52] phi (byte) findcol::mincol#15 = (byte) findcol::mincol#10 [phi:findcol::@13->findcol::@2#1] -- register_copy + // [52] phi (byte) findcol::i#14 = (byte) findcol::i#1 [phi:findcol::@13->findcol::@2#2] -- register_copy + jmp b2 + // findcol::@14 + b14: + // [72] (byte~) findcol::mindiff#25 ← (byte) findcol::mindiff#13 -- vbuxx=vbuz1 + ldx mindiff + jmp b8_from_b14 // findcol::@6 b6: // [73] (byte~) findcol::$11 ← (byte) findcol::yp#0 - (byte) findcol::y#0 -- vbuaa=vbuz1_minus_vbuz2 lda yp sec sbc y - // [74] (byte) findcol::diff#3 ← (byte) findcol::diff#5 + (byte~) findcol::$11 -- vbuaa=vbuyy_plus_vbuaa - sty $ff + // [74] (byte) findcol::diff#3 ← (byte) findcol::diff#5 + (byte~) findcol::$11 -- vbuxx=vbuxx_plus_vbuaa + stx $ff clc adc $ff + tax jmp b7_from_b6 // findcol::@4 b4: - // [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 -- vbuyy=vbuz1_minus_vbuz2 - lda xp + // [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 -- vbuxx=vbuxx_minus_vbuz1 + txa sec sbc x - tay + tax jmp b5_from_b4 } // initscreen initscreen: { .label screen = 6 - // [77] phi from initscreen to initscreen::@1 [phi:initscreen->initscreen::@1] - b1_from_initscreen: - // [77] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 [phi:initscreen->initscreen::@1#0] -- pbuz1=pbuc1 + // [77] phi from initscreen to initscreen::@2 [phi:initscreen->initscreen::@2] + b2_from_initscreen: + // [77] phi (byte*) initscreen::screen#4 = (const byte*) SCREEN#0 [phi:initscreen->initscreen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta screen+1 - jmp b1 - // initscreen::@1 - b1: - // [78] if((byte*) initscreen::screen#2<(const byte*) SCREEN#0+(word) $3e8) goto initscreen::@2 -- pbuz1_lt_pbuc1_then_la1 - lda screen+1 - cmp #>SCREEN+$3e8 - bcc b2 - bne !+ - lda screen - cmp #initscreen::@2] + b2_from_b1: + // [77] phi (byte*) initscreen::screen#4 = (byte*) initscreen::screen#1 [phi:initscreen::@1->initscreen::@2#0] -- register_copy + jmp b2 // initscreen::@2 b2: - // [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 -- _deref_pbuz1=vbuc1 + // [78] *((byte*) initscreen::screen#4) ← (const byte) FILL#0 -- _deref_pbuz1=vbuc1 lda #FILL ldy #0 sta (screen),y - // [81] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 -- pbuz1=_inc_pbuz1 + // [79] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#4 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - // [77] phi from initscreen::@2 to initscreen::@1 [phi:initscreen::@2->initscreen::@1] - b1_from_b2: - // [77] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 [phi:initscreen::@2->initscreen::@1#0] -- register_copy jmp b1 + // initscreen::@1 + b1: + // [80] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) $3e8) goto initscreen::@2 -- pbuz1_lt_pbuc1_then_la1 + lda screen+1 + cmp #>SCREEN+$3e8 + bcc b2_from_b1 + bne !+ + lda screen + cmp #findcol] jsr findcol // findcol(x, y) - // [42] (byte) findcol::return#0 ← (byte) findcol::return#3 -- vbuaa=vbuxx - txa + // [42] (byte) findcol::return#0 ← (byte) findcol::return#3 -- vbuaa=vbuz1 + lda findcol.return // render::@4 // col = findcol(x, y) // [43] (byte) render::col#0 ← (byte) findcol::return#0 @@ -2901,122 +2961,124 @@ render: { findcol: { .label x = 3 .label y = 2 - .label xp = 8 - .label yp = 9 - .label i = 4 - .label mindiff = 5 - // [52] phi from findcol to findcol::@1 [phi:findcol->findcol::@1] - // [52] phi (byte) findcol::mindiff#10 = (byte) $ff [phi:findcol->findcol::@1#0] -- vbuz1=vbuc1 + .label yp = 8 + .label return = 5 + .label mincol = 5 + .label mindiff = 4 + // [52] phi from findcol to findcol::@2 [phi:findcol->findcol::@2] + // [52] phi (byte) findcol::mindiff#13 = (byte) $ff [phi:findcol->findcol::@2#0] -- vbuz1=vbuc1 lda #$ff sta mindiff - // [52] phi (byte) findcol::mincol#10 = (byte) 0 [phi:findcol->findcol::@1#1] -- vbuxx=vbuc1 - ldx #0 - // [52] phi (byte) findcol::i#10 = (byte) 0 [phi:findcol->findcol::@1#2] -- vbuz1=vbuc1 - txa - sta i - // findcol::@1 - b1: - // for( byte i=0; ifindcol::@return] - // [54] phi (byte) findcol::return#3 = (byte) findcol::mincol#10 [phi:findcol::@1->findcol::@return#0] -- register_copy - // findcol::@return - // } - // [55] return - rts + // [52] phi (byte) findcol::mincol#15 = (byte) 0 [phi:findcol->findcol::@2#1] -- vbuz1=vbuc1 + lda #0 + sta mincol + // [52] phi (byte) findcol::i#14 = (byte) 0 [phi:findcol->findcol::@2#2] -- vbuyy=vbuc1 + tay // findcol::@2 b2: // xp = XPOS[i] - // [56] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy i - lda XPOS,y - sta xp + // [53] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#14) -- vbuxx=pbuc1_derefidx_vbuyy + ldx XPOS,y // yp = YPOS[i] - // [57] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) -- vbuz1=pbuc1_derefidx_vbuz2 + // [54] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#14) -- vbuz1=pbuc1_derefidx_vbuyy lda YPOS,y sta yp // if(x==xp) - // [58] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@3 -- vbuz1_neq_vbuz2_then_la1 - lda x - cmp xp + // [55] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@3 -- vbuz1_neq_vbuxx_then_la1 + cpx x bne b3 // findcol::@9 // if(y==yp) - // [59] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3 -- vbuz1_neq_vbuz2_then_la1 + // [56] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3 -- vbuz1_neq_vbuz2_then_la1 lda y cmp yp bne b3 - // [54] phi from findcol::@9 to findcol::@return [phi:findcol::@9->findcol::@return] - // [54] phi (byte) findcol::return#3 = (byte) 0 [phi:findcol::@9->findcol::@return#0] -- vbuxx=vbuc1 - ldx #0 + // [57] phi from findcol::@9 to findcol::@return [phi:findcol::@9->findcol::@return] + // [57] phi (byte) findcol::return#3 = (byte) 0 [phi:findcol::@9->findcol::@return#0] -- vbuz1=vbuc1 + lda #0 + sta return + // findcol::@return + // } + // [58] return rts // findcol::@3 b3: // if(xfindcol::@5] - // [62] phi (byte) findcol::diff#5 = (byte) findcol::diff#2 [phi:findcol::@10/findcol::@4->findcol::@5#0] -- register_copy + adc x + tax + // [61] phi from findcol::@10 findcol::@4 to findcol::@5 [phi:findcol::@10/findcol::@4->findcol::@5] + // [61] phi (byte) findcol::diff#5 = (byte) findcol::diff#2 [phi:findcol::@10/findcol::@4->findcol::@5#0] -- register_copy // findcol::@5 b5: // if(yfindcol::@7] - // [66] phi (byte) findcol::diff#7 = (byte) findcol::diff#4 [phi:findcol::@11/findcol::@6->findcol::@7#0] -- register_copy + tax + // [65] phi from findcol::@11 findcol::@6 to findcol::@7 [phi:findcol::@11/findcol::@6->findcol::@7] + // [65] phi (byte) findcol::diff#7 = (byte) findcol::diff#4 [phi:findcol::@11/findcol::@6->findcol::@7#0] -- register_copy // findcol::@7 b7: // if(diff=(byte) findcol::mindiff#10) goto findcol::@13 -- vbuaa_ge_vbuz1_then_la1 - cmp mindiff - bcs b13 + // [66] if((byte) findcol::diff#7>=(byte) findcol::mindiff#13) goto findcol::@14 -- vbuxx_ge_vbuz1_then_la1 + cpx mindiff + bcs b14 // findcol::@12 // mincol = COLS[i] - // [68] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) -- vbuxx=pbuc1_derefidx_vbuz1 - ldy i - ldx COLS,y - // [69] phi from findcol::@12 findcol::@13 to findcol::@8 [phi:findcol::@12/findcol::@13->findcol::@8] - // [69] phi (byte) findcol::mindiff#12 = (byte) findcol::diff#7 [phi:findcol::@12/findcol::@13->findcol::@8#0] -- register_copy - // [69] phi (byte) findcol::mincol#4 = (byte) findcol::mincol#1 [phi:findcol::@12/findcol::@13->findcol::@8#1] -- register_copy + // [67] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#14) -- vbuz1=pbuc1_derefidx_vbuyy + lda COLS,y + sta mincol + // [68] phi from findcol::@12 findcol::@14 to findcol::@8 [phi:findcol::@12/findcol::@14->findcol::@8] + // [68] phi (byte) findcol::mindiff#10 = (byte) findcol::diff#7 [phi:findcol::@12/findcol::@14->findcol::@8#0] -- register_copy + // [68] phi (byte) findcol::mincol#10 = (byte) findcol::mincol#1 [phi:findcol::@12/findcol::@14->findcol::@8#1] -- register_copy // findcol::@8 b8: // for( byte i=0; ifindcol::@1] - // [52] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 [phi:findcol::@8->findcol::@1#0] -- register_copy - // [52] phi (byte) findcol::mincol#10 = (byte) findcol::mincol#4 [phi:findcol::@8->findcol::@1#1] -- register_copy - // [52] phi (byte) findcol::i#10 = (byte) findcol::i#1 [phi:findcol::@8->findcol::@1#2] -- register_copy - jmp b1 + // [69] (byte) findcol::i#1 ← ++ (byte) findcol::i#14 -- vbuyy=_inc_vbuyy + iny + // findcol::@1 + // [70] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@13 -- vbuyy_lt_vbuc1_then_la1 + cpy #numpoints + bcc b13 + // [57] phi from findcol::@1 to findcol::@return [phi:findcol::@1->findcol::@return] + // [57] phi (byte) findcol::return#3 = (byte) findcol::mincol#10 [phi:findcol::@1->findcol::@return#0] -- register_copy + rts // findcol::@13 b13: - // [72] (byte~) findcol::mindiff#15 ← (byte) findcol::mindiff#10 -- vbuaa=vbuz1 - lda mindiff + // [71] (byte~) findcol::mindiff#23 ← (byte) findcol::mindiff#10 -- vbuz1=vbuxx + stx mindiff + // [52] phi from findcol::@13 to findcol::@2 [phi:findcol::@13->findcol::@2] + // [52] phi (byte) findcol::mindiff#13 = (byte~) findcol::mindiff#23 [phi:findcol::@13->findcol::@2#0] -- register_copy + // [52] phi (byte) findcol::mincol#15 = (byte) findcol::mincol#10 [phi:findcol::@13->findcol::@2#1] -- register_copy + // [52] phi (byte) findcol::i#14 = (byte) findcol::i#1 [phi:findcol::@13->findcol::@2#2] -- register_copy + jmp b2 + // findcol::@14 + b14: + // [72] (byte~) findcol::mindiff#25 ← (byte) findcol::mindiff#13 -- vbuxx=vbuz1 + ldx mindiff jmp b8 // findcol::@6 b6: @@ -3026,34 +3088,48 @@ findcol: { sec sbc y // diff = diff + (yp-y) - // [74] (byte) findcol::diff#3 ← (byte) findcol::diff#5 + (byte~) findcol::$11 -- vbuaa=vbuyy_plus_vbuaa - sty $ff + // [74] (byte) findcol::diff#3 ← (byte) findcol::diff#5 + (byte~) findcol::$11 -- vbuxx=vbuxx_plus_vbuaa + stx $ff clc adc $ff + tax jmp b7 // findcol::@4 b4: // diff = xp-x - // [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 -- vbuyy=vbuz1_minus_vbuz2 - lda xp + // [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 -- vbuxx=vbuxx_minus_vbuz1 + txa sec sbc x - tay + tax jmp b5 } // initscreen initscreen: { .label screen = 6 - // [77] phi from initscreen to initscreen::@1 [phi:initscreen->initscreen::@1] - // [77] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 [phi:initscreen->initscreen::@1#0] -- pbuz1=pbuc1 + // [77] phi from initscreen to initscreen::@2 [phi:initscreen->initscreen::@2] + // [77] phi (byte*) initscreen::screen#4 = (const byte*) SCREEN#0 [phi:initscreen->initscreen::@2#0] -- pbuz1=pbuc1 lda #SCREEN sta screen+1 - // initscreen::@1 - b1: + // [77] phi from initscreen::@1 to initscreen::@2 [phi:initscreen::@1->initscreen::@2] + // [77] phi (byte*) initscreen::screen#4 = (byte*) initscreen::screen#1 [phi:initscreen::@1->initscreen::@2#0] -- register_copy + // initscreen::@2 + b2: + // *screen = FILL + // [78] *((byte*) initscreen::screen#4) ← (const byte) FILL#0 -- _deref_pbuz1=vbuc1 + lda #FILL + ldy #0 + sta (screen),y // for( byte* screen = SCREEN; screenSCREEN+$3e8 bcc b2 @@ -3064,24 +3140,8 @@ initscreen: { !: // initscreen::@return // } - // [79] return + // [81] return rts - // initscreen::@2 - b2: - // *screen = FILL - // [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 -- _deref_pbuz1=vbuc1 - lda #FILL - ldy #0 - sta (screen),y - // for( byte* screen = SCREEN; screeninitscreen::@1] - // [77] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 [phi:initscreen::@2->initscreen::@1#0] -- register_copy - jmp b1 } // File Data // Points to create the Voronoi from diff --git a/src/test/ref/voronoi.sym b/src/test/ref/voronoi.sym index 5de5d1620..8dee7b649 100644 --- a/src/test/ref/voronoi.sym +++ b/src/test/ref/voronoi.sym @@ -40,6 +40,7 @@ (label) findcol::@11 (label) findcol::@12 (label) findcol::@13 +(label) findcol::@14 (label) findcol::@2 (label) findcol::@3 (label) findcol::@4 @@ -50,42 +51,42 @@ (label) findcol::@9 (label) findcol::@return (byte) findcol::diff -(byte) findcol::diff#1 reg byte y 20002.0 -(byte) findcol::diff#2 reg byte y 20002.0 -(byte) findcol::diff#3 reg byte a 20002.0 -(byte) findcol::diff#4 reg byte a 20002.0 -(byte) findcol::diff#5 reg byte y 10001.0 -(byte) findcol::diff#7 reg byte a 13334.666666666666 +(byte) findcol::diff#1 reg byte x 20002.0 +(byte) findcol::diff#2 reg byte x 20002.0 +(byte) findcol::diff#3 reg byte x 20002.0 +(byte) findcol::diff#4 reg byte x 20002.0 +(byte) findcol::diff#5 reg byte x 10001.0 +(byte) findcol::diff#7 reg byte x 13334.666666666666 (byte) findcol::i -(byte) findcol::i#1 i zp ZP_BYTE:4 10001.0 -(byte) findcol::i#10 i zp ZP_BYTE:4 3000.3 +(byte) findcol::i#1 reg byte y 10001.0 +(byte) findcol::i#14 reg byte y 2631.842105263158 (byte) findcol::mincol -(byte) findcol::mincol#1 reg byte x 20002.0 -(byte) findcol::mincol#10 reg byte x 1666.8333333333333 -(byte) findcol::mincol#4 reg byte x 10001.0 +(byte) findcol::mincol#1 mincol zp ZP_BYTE:5 20002.0 +(byte) findcol::mincol#10 mincol zp ZP_BYTE:5 10001.0 +(byte) findcol::mincol#15 mincol zp ZP_BYTE:5 1176.5882352941176 (byte) findcol::mindiff -(byte) findcol::mindiff#10 mindiff zp ZP_BYTE:5 1764.8823529411764 -(byte) findcol::mindiff#12 reg byte a 15001.5 -(byte~) findcol::mindiff#13 mindiff zp ZP_BYTE:5 20002.0 -(byte~) findcol::mindiff#15 reg byte a 20002.0 +(byte) findcol::mindiff#10 reg byte x 10001.0 +(byte) findcol::mindiff#13 mindiff zp ZP_BYTE:4 1875.1875 +(byte~) findcol::mindiff#23 mindiff zp ZP_BYTE:4 20002.0 +(byte~) findcol::mindiff#25 reg byte x 20002.0 (byte) findcol::return (byte) findcol::return#0 reg byte a 2002.0 -(byte) findcol::return#3 reg byte x 3667.333333333333 +(byte) findcol::return#3 return zp ZP_BYTE:5 3667.333333333333 (byte) findcol::x (byte) findcol::x#0 x zp ZP_BYTE:3 1640.2 (byte) findcol::xp -(byte) findcol::xp#0 xp zp ZP_BYTE:8 10001.0 +(byte) findcol::xp#0 reg byte x 10001.0 (byte) findcol::y (byte) findcol::y#0 y zp ZP_BYTE:2 1708.5416666666665 (byte) findcol::yp -(byte) findcol::yp#0 yp zp ZP_BYTE:9 6250.625 +(byte) findcol::yp#0 yp zp ZP_BYTE:8 6250.625 (void()) initscreen() (label) initscreen::@1 (label) initscreen::@2 (label) initscreen::@return (byte*) initscreen::screen -(byte*) initscreen::screen#1 screen zp ZP_WORD:6 22.0 -(byte*) initscreen::screen#2 screen zp ZP_WORD:6 14.666666666666666 +(byte*) initscreen::screen#1 screen zp ZP_WORD:6 16.5 +(byte*) initscreen::screen#4 screen zp ZP_WORD:6 16.5 (void()) main() (label) main::@1 (label) main::@2 @@ -111,12 +112,12 @@ zp ZP_BYTE:2 [ render::y#4 render::y#1 findcol::y#0 ] zp ZP_BYTE:3 [ render::x#2 render::x#1 findcol::x#0 ] -zp ZP_BYTE:4 [ findcol::i#10 findcol::i#1 ] -zp ZP_BYTE:5 [ findcol::mindiff#10 findcol::mindiff#13 ] -reg byte x [ findcol::return#3 findcol::mincol#10 findcol::mincol#4 findcol::mincol#1 ] -reg byte y [ findcol::diff#5 findcol::diff#2 findcol::diff#1 ] -reg byte a [ findcol::mindiff#12 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#15 ] -zp ZP_WORD:6 [ initscreen::screen#2 initscreen::screen#1 render::colline#5 render::colline#1 ] +reg byte y [ findcol::i#14 findcol::i#1 ] +zp ZP_BYTE:4 [ findcol::mindiff#13 findcol::mindiff#23 ] +zp ZP_BYTE:5 [ findcol::return#3 findcol::mincol#15 findcol::mincol#10 findcol::mincol#1 ] +reg byte x [ findcol::diff#5 findcol::diff#2 findcol::diff#1 ] +reg byte x [ findcol::mindiff#10 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#25 ] +zp ZP_WORD:6 [ initscreen::screen#4 initscreen::screen#1 render::colline#5 render::colline#1 ] reg byte x [ animate::$0 ] reg byte x [ animate::$3 ] reg byte a [ animate::$6 ] @@ -126,7 +127,7 @@ reg byte a [ animate::$15 ] reg byte a [ animate::$18 ] reg byte a [ findcol::return#0 ] reg byte a [ render::col#0 ] -zp ZP_BYTE:8 [ findcol::xp#0 ] -zp ZP_BYTE:9 [ findcol::yp#0 ] +reg byte x [ findcol::xp#0 ] +zp ZP_BYTE:8 [ findcol::yp#0 ] reg byte a [ findcol::$9 ] reg byte a [ findcol::$11 ]